From b4c8bcb647ef4882c9c6a7fad038c37faea56f6e Mon Sep 17 00:00:00 2001 From: lix-2026 Date: Wed, 20 May 2026 10:43:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=8F=A3=E6=9C=AC=E5=9C=B0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8C=BA=E6=B8=85=E7=90=86=E4=B8=8E=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=8A=95=E5=BD=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 清理历史 Electron、Graphify、沙箱和截图等仓库跟踪残留,补充 CodeGraph 与 Convex active deploy source 协作说明。 新增 tree-first 下一阶段设计稿和 2026-05-20 清理总结,记录本地工作区、路径身份和 Zed/Lapce/VSCode 参考收口方向。 扩展 Rust Web 本地文件夹、DocumentBuffer、mindmap 资源、tree runtime 和页面聚合链路,并补充 task455 local-folder mindmap clean smoke。 验证:git diff --check 通过;pnpm store status --store-dir .pnpm-store 通过;npm ls --depth=0 --json 通过;find -L node_modules 未发现断链。cargo test -p mnote-web 当前 418 passed / 35 failed。 --- .aionrs/sessions/2026-04-30_30fa0eaa.json | 15 - .aionrs/sessions/2026-04-30_3a24787c.json | 15 - .aionrs/sessions/2026-04-30_40f9c84d.json | 15 - .aionrs/sessions/2026-04-30_46539585.json | 15 - .aionrs/sessions/2026-04-30_a9ea9eb3.json | 15 - .aionrs/sessions/2026-04-30_b5e017da.json | 104 - .aionrs/sessions/2026-04-30_cec6800f.json | 15 - .aionrs/sessions/2026-04-30_de1611fc.json | 15 - .aionrs/sessions/2026-04-30_e00b76ce.json | 15 - .aionrs/sessions/2026-04-30_e08d3013.json | 15 - .aionrs/sessions/2026-04-30_e0c84a68.json | 15 - .aionrs/sessions/2026-04-30_f5512bd7.json | 15 - .aionrs/sessions/2026-04-30_f9fbf625.json | 15 - .aionrs/sessions/2026-05-01_a914b317.json | 15 - .aionrs/sessions/2026-05-01_d5e72a1a.json | 112 - .aionrs/sessions/2026-05-01_feb9d52f.json | 15 - .aionrs/sessions/index.json | 132 - .aionrs/skills/aionui-skills | 1 - .aionrs/skills/cron | 1 - .aionrs/skills/office-cli | 1 - .aionrs/skills/skill-creator | 1 - .codex/hooks.json | 4 +- .sandbox-home/.rustup/settings.toml | 3 - .../v22.22.2-x64-9ac5647c-0/47422dab | Bin 870980 -> 0 bytes AGENTS.md | 23 +- REASONIX.md | 16 +- browser-capability-20260512-current-page.png | Bin 30676 -> 0 bytes design/00-clean/2026-05-20-cleanup-summary.md | 233 + .../1-4-next-phase-execution-roadmap-v1.md | 204 + ...phase-sequential-execution-checklist-v1.md | 687 +++ ...1-6-next-phase-gap-closure-checklist-v1.md | 247 + ...workspace-root-page-bundle-checklist-v1.md | 258 ++ ...pce-vscode-reference-adoption-matrix-v1.md | 547 +++ ...-path-identity-unification-checklist-v1.md | 135 + infra/convex/README.md | 10 +- local-markdown-gfm-design-checklist.png | Bin 279998 -> 0 bytes local-markdown-gfm-design-page.png | Bin 342958 -> 0 bytes package-lock.json | 4011 ----------------- package.json | 53 +- pnpm-lock.yaml | 2673 ----------- rust/Cargo.lock | 11 + rust/crates/core-protocol/src/command.rs | 642 +++ rust/crates/core-protocol/src/lib.rs | 11 +- rust/crates/mnote-web/Cargo.toml | 2 +- rust/crates/mnote-web/src/app.rs | 6 +- rust/crates/mnote-web/src/context.rs | 54 + .../mnote-web/src/document_buffer_store.rs | 452 ++ rust/crates/mnote-web/src/hermes_tools/doc.rs | 1 + .../crates/mnote-web/src/hermes_tools/page.rs | 1 + rust/crates/mnote-web/src/lib.rs | 1 + .../src/local_folder_watcher_registry.rs | 40 +- rust/crates/mnote-web/src/routes/documents.rs | 80 +- rust/crates/mnote-web/src/routes/gateway.rs | 614 ++- rust/crates/mnote-web/src/routes/kernel.rs | 75 + .../src/routes/local_folder_source.rs | 2633 +++++++++-- .../src/routes/local_markdown_parser.rs | 152 +- .../src/routes/local_search_index.rs | 37 +- .../mnote-web/src/routes/mindmap_api.rs | 309 +- .../mnote-web/src/routes/mindmap_shell.rs | 138 +- rust/crates/mnote-web/src/routes/tree.rs | 162 +- rust/crates/mnote-web/src/routes/web_shell.rs | 207 +- .../mnote-web/src/ssr/pages/document.rs | 5 +- rust/crates/mnote-web/src/ssr/pages/home.rs | 7 +- rust/crates/mnote-web/src/ssr/pages/layout.rs | 409 +- .../mnote-leptos-tiptap-spike-island.d.ts | 35 +- .../mnote-leptos-tiptap-spike-island.js | 123 +- .../mnote-leptos-tiptap-spike-island_bg.wasm | Bin 11322625 -> 1943007 bytes ...te-leptos-tiptap-spike-island_bg.wasm.d.ts | 35 +- rust/spikes/leptos-tiptap-spike/src/lib.rs | 8 +- scripts/cloudflared/config.yml.example | 14 +- scripts/run-convex-deploy.js | 17 +- ...sk443-local-markdown-asset-upload-smoke.js | 12 +- ...ask455-local-folder-mindmap-clean-smoke.js | 354 ++ 73 files changed, 8073 insertions(+), 8240 deletions(-) delete mode 100644 .aionrs/sessions/2026-04-30_30fa0eaa.json delete mode 100644 .aionrs/sessions/2026-04-30_3a24787c.json delete mode 100644 .aionrs/sessions/2026-04-30_40f9c84d.json delete mode 100644 .aionrs/sessions/2026-04-30_46539585.json delete mode 100644 .aionrs/sessions/2026-04-30_a9ea9eb3.json delete mode 100644 .aionrs/sessions/2026-04-30_b5e017da.json delete mode 100644 .aionrs/sessions/2026-04-30_cec6800f.json delete mode 100644 .aionrs/sessions/2026-04-30_de1611fc.json delete mode 100644 .aionrs/sessions/2026-04-30_e00b76ce.json delete mode 100644 .aionrs/sessions/2026-04-30_e08d3013.json delete mode 100644 .aionrs/sessions/2026-04-30_e0c84a68.json delete mode 100644 .aionrs/sessions/2026-04-30_f5512bd7.json delete mode 100644 .aionrs/sessions/2026-04-30_f9fbf625.json delete mode 100644 .aionrs/sessions/2026-05-01_a914b317.json delete mode 100644 .aionrs/sessions/2026-05-01_d5e72a1a.json delete mode 100644 .aionrs/sessions/2026-05-01_feb9d52f.json delete mode 100644 .aionrs/sessions/index.json delete mode 120000 .aionrs/skills/aionui-skills delete mode 120000 .aionrs/skills/cron delete mode 120000 .aionrs/skills/office-cli delete mode 120000 .aionrs/skills/skill-creator delete mode 100644 .sandbox-home/.rustup/settings.toml delete mode 100644 .sandbox-tmp/node-compile-cache/v22.22.2-x64-9ac5647c-0/47422dab delete mode 100644 browser-capability-20260512-current-page.png create mode 100644 design/00-clean/2026-05-20-cleanup-summary.md create mode 100644 design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md create mode 100644 design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md create mode 100644 design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md create mode 100644 design/01-tree-first-graph-kernel/process/1-7-local-workspace-root-page-bundle-checklist-v1.md create mode 100644 design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md create mode 100644 design/05-editor-mainline/process/5-15-local-markdown-path-identity-unification-checklist-v1.md delete mode 100644 local-markdown-gfm-design-checklist.png delete mode 100644 local-markdown-gfm-design-page.png create mode 100644 rust/crates/mnote-web/src/document_buffer_store.rs create mode 100644 scripts/task455-local-folder-mindmap-clean-smoke.js diff --git a/.aionrs/sessions/2026-04-30_30fa0eaa.json b/.aionrs/sessions/2026-04-30_30fa0eaa.json deleted file mode 100644 index 49a56836..00000000 --- a/.aionrs/sessions/2026-04-30_30fa0eaa.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "30fa0eaa", - "created_at": "2026-04-30T21:27:04.589780448Z", - "updated_at": "2026-04-30T21:27:04.589780578Z", - "provider": "openai", - "model": "gemini-slow", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_3a24787c.json b/.aionrs/sessions/2026-04-30_3a24787c.json deleted file mode 100644 index 4c621a00..00000000 --- a/.aionrs/sessions/2026-04-30_3a24787c.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "3a24787c", - "created_at": "2026-04-30T21:38:40.491810236Z", - "updated_at": "2026-04-30T21:38:40.491810306Z", - "provider": "openai", - "model": "third", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_40f9c84d.json b/.aionrs/sessions/2026-04-30_40f9c84d.json deleted file mode 100644 index e6586b92..00000000 --- a/.aionrs/sessions/2026-04-30_40f9c84d.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "40f9c84d", - "created_at": "2026-04-30T21:38:35.859855603Z", - "updated_at": "2026-04-30T21:38:35.859855733Z", - "provider": "openai", - "model": "gemini-fast", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_46539585.json b/.aionrs/sessions/2026-04-30_46539585.json deleted file mode 100644 index bde9c745..00000000 --- a/.aionrs/sessions/2026-04-30_46539585.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "46539585", - "created_at": "2026-04-30T21:38:39.356585244Z", - "updated_at": "2026-04-30T21:38:39.356585294Z", - "provider": "openai", - "model": "fast", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_a9ea9eb3.json b/.aionrs/sessions/2026-04-30_a9ea9eb3.json deleted file mode 100644 index dab60c4a..00000000 --- a/.aionrs/sessions/2026-04-30_a9ea9eb3.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "a9ea9eb3", - "created_at": "2026-04-30T21:27:05.771907680Z", - "updated_at": "2026-04-30T21:27:05.771907750Z", - "provider": "openai", - "model": "slow", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_b5e017da.json b/.aionrs/sessions/2026-04-30_b5e017da.json deleted file mode 100644 index 195e6d29..00000000 --- a/.aionrs/sessions/2026-04-30_b5e017da.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "id": "b5e017da", - "created_at": "2026-04-30T21:27:02.177610060Z", - "updated_at": "2026-04-30T21:38:28.479246597Z", - "provider": "openai", - "model": "deepseek-v4-flash", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 24761, - "output_tokens": 189, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [ - { - "role": "user", - "content": [ - { - "type": "text", - "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] You have been spawned as \"test-aionrs-flash\" and added to the team. Check the task board and await instructions." - } - ], - "timestamp": "2026-04-30T21:27:02.253750061Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "Let me check the task board and my messages to understand what I need to do." - }, - { - "type": "tool_use", - "id": "call_00_XMfR1eTBwqQy3hrXH8OOJ9K9", - "name": "team_task_list", - "input": {} - }, - { - "type": "tool_use", - "id": "call_01_mFD4hj31S8BjBxOMk1xIDPLD", - "name": "team_members", - "input": {} - } - ], - "timestamp": "2026-04-30T21:27:03.653135123Z" - }, - { - "role": "user", - "content": [ - { - "type": "tool_result", - "tool_use_id": "call_00_XMfR1eTBwqQy3hrXH8OOJ9K9", - "content": "No tasks on the board yet.", - "is_error": false - }, - { - "type": "tool_result", - "tool_use_id": "call_01_mFD4hj31S8BjBxOMk1xIDPLD", - "content": "## Team Members\n- Leader (type: claude, role: leader, status: failed)\n- test-aionrs-flash (type: aionrs, role: teammate, status: failed, model: deepseek-v4-flash)", - "is_error": false - } - ], - "timestamp": "2026-04-30T21:37:38.226568957Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "Let me check for any unread messages from the leader. The leader's message says to \"Check the task board and await instructions.\" So there's no concrete task yet. I should stand by as instructed." - }, - { - "type": "text", - "text": "你好!我是 test-aionrs-flash,团队的新成员。\n\n我看到 Leader 让我检查任务板并等待指令。目前任务板是空的,我正待命——随时准备好,一旦有新的任务分配给我就会立刻开始工作。" - } - ], - "timestamp": "2026-04-30T21:37:39.897079701Z" - }, - { - "role": "user", - "content": [ - { - "type": "text", - "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] 请只回复下面这行内容,不要加任何其他文字:OK-deepseek-v4-flash" - } - ], - "timestamp": "2026-04-30T21:38:27.580378993Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "The leader explicitly instructed me to reply with exactly one line: \"OK-deepseek-v4-flash\" and nothing else." - }, - { - "type": "text", - "text": "OK-deepseek-v4-flash" - } - ], - "timestamp": "2026-04-30T21:38:28.479237587Z" - } - ] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_cec6800f.json b/.aionrs/sessions/2026-04-30_cec6800f.json deleted file mode 100644 index f41433e1..00000000 --- a/.aionrs/sessions/2026-04-30_cec6800f.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "cec6800f", - "created_at": "2026-04-30T21:38:41.231448392Z", - "updated_at": "2026-04-30T21:38:41.231448452Z", - "provider": "openai", - "model": "graph", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_de1611fc.json b/.aionrs/sessions/2026-04-30_de1611fc.json deleted file mode 100644 index b85a4eb9..00000000 --- a/.aionrs/sessions/2026-04-30_de1611fc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "de1611fc", - "created_at": "2026-04-30T21:27:06.909417915Z", - "updated_at": "2026-04-30T21:27:06.909418045Z", - "provider": "openai", - "model": "fast", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e00b76ce.json b/.aionrs/sessions/2026-04-30_e00b76ce.json deleted file mode 100644 index a4a70269..00000000 --- a/.aionrs/sessions/2026-04-30_e00b76ce.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "e00b76ce", - "created_at": "2026-04-30T21:27:08.894084424Z", - "updated_at": "2026-04-30T21:27:08.894084524Z", - "provider": "openai", - "model": "graph", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e08d3013.json b/.aionrs/sessions/2026-04-30_e08d3013.json deleted file mode 100644 index eedee7c6..00000000 --- a/.aionrs/sessions/2026-04-30_e08d3013.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "e08d3013", - "created_at": "2026-04-30T21:27:03.366598879Z", - "updated_at": "2026-04-30T21:27:03.366598949Z", - "provider": "openai", - "model": "gemini-fast", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e0c84a68.json b/.aionrs/sessions/2026-04-30_e0c84a68.json deleted file mode 100644 index e7e1a5ad..00000000 --- a/.aionrs/sessions/2026-04-30_e0c84a68.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "e0c84a68", - "created_at": "2026-04-30T21:27:08.115422905Z", - "updated_at": "2026-04-30T21:27:08.115423045Z", - "provider": "openai", - "model": "third", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_f5512bd7.json b/.aionrs/sessions/2026-04-30_f5512bd7.json deleted file mode 100644 index 6375aff3..00000000 --- a/.aionrs/sessions/2026-04-30_f5512bd7.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "f5512bd7", - "created_at": "2026-04-30T21:38:37.046015893Z", - "updated_at": "2026-04-30T21:38:37.046015973Z", - "provider": "openai", - "model": "gemini-slow", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_f9fbf625.json b/.aionrs/sessions/2026-04-30_f9fbf625.json deleted file mode 100644 index d919986c..00000000 --- a/.aionrs/sessions/2026-04-30_f9fbf625.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "f9fbf625", - "created_at": "2026-04-30T21:38:38.194407615Z", - "updated_at": "2026-04-30T21:38:38.194407685Z", - "provider": "openai", - "model": "slow", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_a914b317.json b/.aionrs/sessions/2026-05-01_a914b317.json deleted file mode 100644 index 9c3d74b8..00000000 --- a/.aionrs/sessions/2026-05-01_a914b317.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "a914b317", - "created_at": "2026-05-01T00:04:52.964574238Z", - "updated_at": "2026-05-01T00:04:52.964574388Z", - "provider": "openai", - "model": "gpt-5.4-mini", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_d5e72a1a.json b/.aionrs/sessions/2026-05-01_d5e72a1a.json deleted file mode 100644 index f829db2d..00000000 --- a/.aionrs/sessions/2026-05-01_d5e72a1a.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "id": "d5e72a1a", - "created_at": "2026-05-01T00:04:04.268573260Z", - "updated_at": "2026-05-01T00:04:12.123721682Z", - "provider": "openai", - "model": "deepseek-v4-flash", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 23901, - "output_tokens": 242, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [ - { - "role": "user", - "content": [ - { - "type": "text", - "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-fast2, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] You have been spawned as \"test-aionrs-fast2\" and added to the team. Check the task board and await instructions." - } - ], - "timestamp": "2026-05-01T00:04:04.367925939Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "Let me check the task board and team status to understand what's going on." - }, - { - "type": "tool_use", - "id": "call_00_QfT9SpumAC6ygpHMprdPtDLn", - "name": "team_task_list", - "input": {} - }, - { - "type": "tool_use", - "id": "call_01_SedCNUziXDWQcXu34Qmv7zqf", - "name": "team_members", - "input": {} - } - ], - "timestamp": "2026-05-01T00:04:05.930878866Z" - }, - { - "role": "user", - "content": [ - { - "type": "tool_result", - "tool_use_id": "call_00_QfT9SpumAC6ygpHMprdPtDLn", - "content": "No tasks on the board yet.", - "is_error": false - }, - { - "type": "tool_result", - "tool_use_id": "call_01_SedCNUziXDWQcXu34Qmv7zqf", - "content": "## Team Members\n- Leader (type: claude, role: leader, status: idle)\n- test-aionrs-fast2 (type: aionrs, role: teammate, status: active, model: deepseek-v4-flash)", - "is_error": false - } - ], - "timestamp": "2026-05-01T00:04:08.680708524Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "The task board is empty and I'm the only teammate alongside the Leader. No concrete task assigned yet from the unread messages. The leader said \"check the task board and await instructions\" - so I'm in a standing by situation. Let me acknowledge and stand by." - }, - { - "type": "tool_use", - "id": "call_00_UrH5IzkG81sj8hUxrlLgi4B1", - "name": "team_send_message", - "input": { - "message": "Acknowledged — task board is empty, standing by for instructions.", - "summary": "Standing by, no tasks yet", - "to": "Leader" - } - } - ], - "timestamp": "2026-05-01T00:04:10.926345825Z" - }, - { - "role": "user", - "content": [ - { - "type": "tool_result", - "tool_use_id": "call_00_UrH5IzkG81sj8hUxrlLgi4B1", - "content": "Message sent to Leader's inbox. They will process it shortly.", - "is_error": false - } - ], - "timestamp": "2026-05-01T00:04:10.932497704Z" - }, - { - "role": "assistant", - "content": [ - { - "type": "thinking", - "thinking": "I've acknowledged and am now standing by. I should end my turn and return control." - }, - { - "type": "text", - "text": "Standing by, ready for instructions when you need me." - } - ], - "timestamp": "2026-05-01T00:04:12.123714642Z" - } - ] -} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_feb9d52f.json b/.aionrs/sessions/2026-05-01_feb9d52f.json deleted file mode 100644 index c8f5c61f..00000000 --- a/.aionrs/sessions/2026-05-01_feb9d52f.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "feb9d52f", - "created_at": "2026-05-01T00:02:12.760942465Z", - "updated_at": "2026-05-01T00:02:12.760942525Z", - "provider": "openai", - "model": "fast", - "cwd": "/mnt/Data1T/mnote", - "total_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cache_creation_tokens": 0, - "cache_read_tokens": 0 - }, - "messages": [] -} \ No newline at end of file diff --git a/.aionrs/sessions/index.json b/.aionrs/sessions/index.json deleted file mode 100644 index a279cc72..00000000 --- a/.aionrs/sessions/index.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "sessions": [ - { - "id": "b5e017da", - "created_at": "2026-04-30T21:27:02.177610060Z", - "updated_at": "2026-04-30T21:38:28.479246597Z", - "model": "deepseek-v4-flash", - "summary": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aion...", - "message_count": 6 - }, - { - "id": "e08d3013", - "created_at": "2026-04-30T21:27:03.366598879Z", - "updated_at": "2026-04-30T21:27:03.366598949Z", - "model": "gemini-fast", - "summary": "", - "message_count": 0 - }, - { - "id": "30fa0eaa", - "created_at": "2026-04-30T21:27:04.589780448Z", - "updated_at": "2026-04-30T21:27:04.589780578Z", - "model": "gemini-slow", - "summary": "", - "message_count": 0 - }, - { - "id": "a9ea9eb3", - "created_at": "2026-04-30T21:27:05.771907680Z", - "updated_at": "2026-04-30T21:27:05.771907750Z", - "model": "slow", - "summary": "", - "message_count": 0 - }, - { - "id": "de1611fc", - "created_at": "2026-04-30T21:27:06.909417915Z", - "updated_at": "2026-04-30T21:27:06.909418045Z", - "model": "fast", - "summary": "", - "message_count": 0 - }, - { - "id": "e0c84a68", - "created_at": "2026-04-30T21:27:08.115422905Z", - "updated_at": "2026-04-30T21:27:08.115423045Z", - "model": "third", - "summary": "", - "message_count": 0 - }, - { - "id": "e00b76ce", - "created_at": "2026-04-30T21:27:08.894084424Z", - "updated_at": "2026-04-30T21:27:08.894084524Z", - "model": "graph", - "summary": "", - "message_count": 0 - }, - { - "id": "40f9c84d", - "created_at": "2026-04-30T21:38:35.859855603Z", - "updated_at": "2026-04-30T21:38:35.859855733Z", - "model": "gemini-fast", - "summary": "", - "message_count": 0 - }, - { - "id": "f5512bd7", - "created_at": "2026-04-30T21:38:37.046015893Z", - "updated_at": "2026-04-30T21:38:37.046015973Z", - "model": "gemini-slow", - "summary": "", - "message_count": 0 - }, - { - "id": "f9fbf625", - "created_at": "2026-04-30T21:38:38.194407615Z", - "updated_at": "2026-04-30T21:38:38.194407685Z", - "model": "slow", - "summary": "", - "message_count": 0 - }, - { - "id": "46539585", - "created_at": "2026-04-30T21:38:39.356585244Z", - "updated_at": "2026-04-30T21:38:39.356585294Z", - "model": "fast", - "summary": "", - "message_count": 0 - }, - { - "id": "3a24787c", - "created_at": "2026-04-30T21:38:40.491810236Z", - "updated_at": "2026-04-30T21:38:40.491810306Z", - "model": "third", - "summary": "", - "message_count": 0 - }, - { - "id": "cec6800f", - "created_at": "2026-04-30T21:38:41.231448392Z", - "updated_at": "2026-04-30T21:38:41.231448452Z", - "model": "graph", - "summary": "", - "message_count": 0 - }, - { - "id": "feb9d52f", - "created_at": "2026-05-01T00:02:12.760942465Z", - "updated_at": "2026-05-01T00:02:12.760942525Z", - "model": "fast", - "summary": "", - "message_count": 0 - }, - { - "id": "d5e72a1a", - "created_at": "2026-05-01T00:04:04.268573260Z", - "updated_at": "2026-05-01T00:04:12.123721682Z", - "model": "deepseek-v4-flash", - "summary": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-fast2, Role: aion...", - "message_count": 6 - }, - { - "id": "a914b317", - "created_at": "2026-05-01T00:04:52.964574238Z", - "updated_at": "2026-05-01T00:04:52.964574388Z", - "model": "gpt-5.4-mini", - "summary": "", - "message_count": 0 - } - ] -} \ No newline at end of file diff --git a/.aionrs/skills/aionui-skills b/.aionrs/skills/aionui-skills deleted file mode 120000 index eff09382..00000000 --- a/.aionrs/skills/aionui-skills +++ /dev/null @@ -1 +0,0 @@ -/home/lix/.config/AionUi/config/builtin-skills/_builtin/aionui-skills \ No newline at end of file diff --git a/.aionrs/skills/cron b/.aionrs/skills/cron deleted file mode 120000 index 0ba5b816..00000000 --- a/.aionrs/skills/cron +++ /dev/null @@ -1 +0,0 @@ -/home/lix/.config/AionUi/config/builtin-skills/_builtin/cron \ No newline at end of file diff --git a/.aionrs/skills/office-cli b/.aionrs/skills/office-cli deleted file mode 120000 index edf8ad15..00000000 --- a/.aionrs/skills/office-cli +++ /dev/null @@ -1 +0,0 @@ -/home/lix/.config/AionUi/config/builtin-skills/_builtin/office-cli \ No newline at end of file diff --git a/.aionrs/skills/skill-creator b/.aionrs/skills/skill-creator deleted file mode 120000 index 7366c6ce..00000000 --- a/.aionrs/skills/skill-creator +++ /dev/null @@ -1 +0,0 @@ -/home/lix/.config/AionUi/config/builtin-skills/_builtin/skill-creator \ No newline at end of file diff --git a/.codex/hooks.json b/.codex/hooks.json index ad64a635..dfae28e0 100644 --- a/.codex/hooks.json +++ b/.codex/hooks.json @@ -1,3 +1,5 @@ { - "hooks": {} + "hooks": { + "PreToolUse": [] + } } \ No newline at end of file diff --git a/.sandbox-home/.rustup/settings.toml b/.sandbox-home/.rustup/settings.toml deleted file mode 100644 index e34067a4..00000000 --- a/.sandbox-home/.rustup/settings.toml +++ /dev/null @@ -1,3 +0,0 @@ -version = "12" - -[overrides] diff --git a/.sandbox-tmp/node-compile-cache/v22.22.2-x64-9ac5647c-0/47422dab b/.sandbox-tmp/node-compile-cache/v22.22.2-x64-9ac5647c-0/47422dab deleted file mode 100644 index 67db8812b55a11f1f8cd1f45df7a852363ca192a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870980 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�W2O#bB?g^rzJ4z(A|l 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

327|<**PSbr=68)F)Sdtj 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�)z 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

h~kL|r3Q6e_22gH<+!OVHRB@>M#v@h* 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 diff --git a/AGENTS.md b/AGENTS.md index 1ced1c94..e08d7aa4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,7 +28,7 @@ - `/mnt/Data1T/mnote/recycle/wolai-frontend/src/` wolai-frontend(Next.js React 前端)已退役移入 recycle,不作为当前实现依据。页面、编辑器、Sidebar、树视图、阅读态、交互壳默认先看 Rust mnote-web SSR(`rust/crates/mnote-web/src/`)。 - `/mnt/Data1T/mnote/recycle/wolai-frontend/convex/` - 已随 wolai-frontend 移入 recycle。当前活跃 Convex functions 在 `infra/convex/` 与对应 Rust bridge 中。 + 已随 wolai-frontend 移入 recycle,不允许作为当前 Convex deploy fallback。当前 active Convex functions 部署源在仓库根 `convex/`(现阶段为 ACP / Hermes runtime session store:`schema.ts` + `aiSessions.ts`);`infra/convex/` 只负责自托管 Convex 基础设施。 - `/mnt/Data1T/mnote/rust/crates/core-protocol/` Kernel 类型、projection 协议、树/图核心术语先看这里。 - `/mnt/Data1T/mnote/rust/crates/bridge-runtime/` @@ -100,6 +100,11 @@ - 若发现与当前任务无关的脏改动,保持不动;若怀疑会影响当前任务,先确认再处理。 - 若当前问题只是 UI 表现异常,先确认是否是实验性 tree shell、compat 路径、轮询或 fallback 混入首屏主链,而不是直接怀疑 Convex 本身。 +## CodeGraph 使用 + +- 当前项目已配置 CodeGraph MCP;结构性代码问题优先使用 `codegraph_*` 工具:`codegraph_search` 查符号,`codegraph_callers` / `codegraph_callees` 查调用关系,`codegraph_impact` 做影响分析,`codegraph_context` / `codegraph_explore` 获取聚焦上下文,`codegraph_files` 查看索引文件结构,`codegraph_status` 检查索引健康。 +- CodeGraph 是当前开发态代码图主工具;代码改动后运行 `codegraph sync .`,大范围重构、排除规则变化或索引异常时运行 `codegraph index . --force`。只有查找字面文本、日志字符串、注释原文,或已经明确目标文件时,才优先用 `rg` / 直接读文件。 + ## 常用命令 - 根目录热启动:`npm run desktop:hot` @@ -122,22 +127,6 @@ - 影响主页入口、Sidebar、tree shell、文档页首屏时,优先补或复用 `scripts/task*-smoke.js` 这类 smoke 脚本。 - 排查高 CPU / 高内存 / 卡顿时,先看是否存在首屏误走实验性 tree shell、compat fallback、重复请求、轮询或回链面板持续刷新,再看数据底座。 -## mnote-tester 调用 - -- 当前固定网页测试员 profile 为 `mnote-tester`,Hermes profile 路径:`/home/lix/.hermes/profiles/mnote-tester`。 -- 默认优先通过别名调用:`/home/lix/.local/bin/mnote-tester`;等价命令是 `hermes -p mnote-tester`。 -- 需要让后续 agent 调它做真实浏览器测试时,优先使用 one-shot: - - `mnote-tester --yolo -z "<测试任务>"` - - 或 `hermes -p mnote-tester --yolo -z "<测试任务>"` -- 交给 `mnote-tester` 的任务描述必须明确写出: - - 测试目标页面或 URL - - 是否要求真实登录 - - 是否要求新建 / 修改 / 删除页面或块 - - 测试数据前缀,例如 `TEST-HERMES-` - - 是否要求发现 bug 后直接写入 `bugs//process/` -- `mnote-tester` 允许在 `3000` 主页面做最小写入型测试,包括新建、重命名、编辑、移动、归档、恢复、删除页面,以及新建、修改、删除块/模块;但默认只能操作“本轮新建的测试数据”或用户明确指定的测试区域,不能动既有用户内容。 -- `mnote-tester` 的默认证据目录是 `/mnt/Data1T/mnote/tmp/hermes-tester//`;若发现 bug,应按 `/mnt/Data1T/mnote/bugs/README.md` 与本文件规则归类,并把缺陷记录写到对应 `bugs//process/`。 -- 若 `/auth`、快速登录、首屏路由或上游服务本身已阻塞,`mnote-tester` 应立即停止后续写入动作,先输出阻塞证据并按规则记录 blocker bug,不要伪造“新建/修改/删除已验证通过”。 ## Wolai-aline 对标流程 diff --git a/REASONIX.md b/REASONIX.md index 43477a8a..bccd8799 100644 --- a/REASONIX.md +++ b/REASONIX.md @@ -6,7 +6,6 @@ - **Axum 0.8** — HTTP/WebSocket server in `mnote-web` crate - **Leptos 0.8.14** — SSR island rendering in `mnote-web` - **Convex 1.x** — self-hosted document/real-time/storage backend (`infra/convex/docker-compose.yml`) -- **Electron** — desktop packaging (`desktop-electron/`) - **Playwright** — browser smoke tests in `scripts/task-*.js` ## Layout @@ -31,17 +30,24 @@ - **`npm run desktop:hot`** — hot-reload dev start (Rust gateway + optional FastAPI backend + optional Celery) - **`npm run dev:hot`** — same but with `cargo-watch` for Rust auto-recompile - **`npm run desktop`** — production start -- **`npm run desktop:local`** — local dev start (no build step) -- **`npm run desktop:electron`** — Electron dev runner -- **`npm run dist:win`** — build Windows installer (Next assets + electron-builder) - **`cargo test -p `** — test a specific Rust crate - **`cargo run -p mnote-web --bin mnote-web`** — run the web server binary directly +- **`codegraph sync .`** — refresh CodeGraph after normal code changes +- **`codegraph index . --force`** — rebuild CodeGraph after large refactors, ignore-rule changes, or stale index behavior + +## CodeGraph MCP + +- Reasonix has `codegraph=codegraph serve --mcp` configured in `/home/lix/.reasonix/config.json`. +- Prefer CodeGraph for structural code questions: symbol lookup, definitions, callers/callees, impact analysis, and focused cross-file context. +- Use `codegraph_search` for symbol names, `codegraph_callers` / `codegraph_callees` for call flow, `codegraph_impact` before risky edits, `codegraph_context` for focused task context, and `codegraph_files` / `codegraph_status` for index inspection. +- Use native search only for literal text, comments, log messages, or after a specific file is already identified. +- Keep the project index fresh in development: run `codegraph sync .` after code changes; use `codegraph index . --force` when the index looks stale or after broad restructuring. ## Conventions - **Smoke test pattern**: standalone Playwright scripts under `scripts/task-*.js` using a shared harness (`ensureAuthenticated`, `createTempDocument`, `cleanupDocuments`). All use `"use strict"` and `require("playwright")` (`scripts/task110-page-title-single-truth-smoke.js:1-4`). - **Rust workspace**: edition 2021, resolver "2", MIT license. All crates inherit workspace version (`rust/Cargo.toml:2-8`). -- **Convex schema**: `defineSchema` + `defineTable` via `convex/server` package; typed fields with `v.*` validators (`convex/schema.ts:1-3`). +- **Convex boundary**: root `convex/` is the active deploy source for ACP / Hermes runtime state (`schema.ts` + `aiSessions.ts`). Do not deploy from `recycle/wolai-frontend/convex`; old `documents` / `mediaAssets` / `users` / `workspaces` functions must be explicitly migrated to active code, moved to an auxiliary area, or retired. - **Bug tracking**: bugs organized by design domain directory (e.g. `bugs/04-tree-domain/process/`), moved to `done/` when fixed (`bugs/README.md`). - **Design docs**: organized by domain in `design/`, with `process/` (in-progress) and `done/` (completed) subdirs (`design/README.md`). diff --git a/browser-capability-20260512-current-page.png b/browser-capability-20260512-current-page.png deleted file mode 100644 index 4c41e0852e8fe804a471d19da367d7233ad9d9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30676 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 %l\n' +``` + +验证结论: + +- CodeGraph 主索引可用且 up to date。 +- 当前 `.pnpm-store` 可用,且体积已收缩到 `308M`。 +- 当前 `node_modules` 依赖树只包含当前根依赖。 +- `node_modules` 不再存在断开的 Electron symlink。 + +## 后续建议 + +### 可在确认后物理删除的回收目录 + +以下目录已经移入 `recycle`,当前不再作为 active 实现路径使用。若后续运行一段时间确认无回滚需求,可以物理删除以释放空间: + +- `recycle/20260520-build-cache-cleanup/`,约 `53G` +- `recycle/20260520-pnpm-store-legacy/`,约 `2.6G` +- `recycle/20260520-graphify-uninstall/`,约 `433M` +- `recycle/20260520-local-sandbox-cleanup/`,约 `912K` +- `recycle/20260520-graph-cleanup/`,约 `40K` + +### 仍需持续遵守的规则 + +- 不把 `.gitignore` 内容直接等同于废弃内容。 +- 不从 `recycle` 中回退引用运行时代码。 +- 新增 CodeGraph 主索引排除项时,应优先判断其是否属于参考代码、生成缓存、测试输出、回收区或本地辅助功能。 +- 后续依赖变化后应重新运行 `pnpm install`,CodeGraph 在代码变化后需要重建或等待 watcher 更新;若排除规则变化,需显式重新初始化 / 重建索引。 + diff --git a/design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md b/design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md new file mode 100644 index 00000000..ea5ab96f --- /dev/null +++ b/design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md @@ -0,0 +1,204 @@ +# 1-4 [process] 下一阶段执行路线图 v1 + +> 创建时间:2026-05-19 +> +> 当前状态:`PROCESS` +> +> 上位依据: +> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-3-current-priority-execution-checklist-v1.md` +> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md` +> - `/mnt/Data1T/mnote/CURRENT_ARCHITECTURE.md` +> - `/mnt/Data1T/mnote/ARCHITECTURE.md` +> +> 目标:把当前已经推进到混合态的主线,收口成一条更清晰的下一阶段路线,避免“功能继续堆、底座继续散”的问题。 + +--- + +## 1. 结论 + +下一阶段不是全量重写,也不是继续优先补 UI 功能,而是: + +> **以架构收口为主,带着产品化闭环往前推。** + +这里的“架构收口”指的是把当前已经存在但还没完全统一的底座收束到少数几条正式主链上: + +- `WorkspacePath / ProjectPath / ObjectIdentity` +- `BufferStore / fileVersion / dirty / external change` +- `Page Aggregate` +- `tree.*` / `tree.resource.*` +- `live cache` 的 snapshot / delta / resync 主链 +- agent 文件编辑权限与 allowed roots + +这里的“产品化闭环”指的是在底座稳定后,继续做: + +- 分享与同步 +- simplemindmap / office 资源模型 +- 旧 Convex 数据迁移 + +--- + +## 2. 为什么不是先做功能补全 + +`1-3` 里已经完成了比较多的可见功能: + +- 管理员目录授权控制面。 +- VSCode-like 冲突处理 UI。 +- agent changed files / diff 审计。 +- 本地搜索、反链、资源引用索引。 + +`5-14` 也说明了一个更底层的事实: + +- Zed 更适合作为主架构参考。 +- Lapce 更适合作为轻量实现参考。 +- SideX 更适合作为 VS Code 行为迁移到 Rust 后端的桥接参考。 +- 官方 VS Code 只适合作为行为规格参考。 + +这意味着当前真正缺的不是“再加一个功能”,而是: + +> **把这些功能压在同一套身份、版本、命令、搜索和 watcher 主链上。** + +如果继续优先做功能补全,结果通常是: + +- 新功能依赖旧兼容面。 +- 新能力继续长在不同命令面上。 +- UI 看起来越来越完整,但底层真相越来越散。 + +--- + +## 3. 下一阶段三段式推进 + +### 3.1 阶段 A:架构收口 + +这是当前最优先的阶段。 + +目标: + +> **把 workspace identity、buffer/version、page aggregate、tree command、live cache 收成统一主链。** + +应优先推进的事: + +- 统一 `WorkspacePath` / `ProjectPath` / `ObjectIdentity`。 +- 统一 `BufferStore` / dirty / save / external change 模型。 +- 继续瘦身 `documents.*`,新增只走 `tree.*` / `tree.resource.*`。 +- 让 `Page Aggregate` 继续成为页面主投影唯一入口。 +- 统一 Sidebar / filetree / page subtree / WS / SSE 到同一 live cache。 +- 让 agent 文件编辑权限、allowed roots、symlink escape、文件版本仲裁保持一致。 + +不该做的事: + +- 不重建通用 IDE 壳。 +- 不优先做 terminal / debugger / extension host。 +- 不继续扩展旧兼容命令面。 + +### 3.2 阶段 B:资源与共享产品化 + +架构收口后,第二阶段做产品化闭环。 + +目标: + +> **把 simplemindmap / office / 分享 / AI 访问权限纳入同一套资源与权限模型。** + +应优先推进的事: + +- `share grant` 与 `local access grant` 的关系。 +- `shared AI session` 的权限边界。 +- `tree.resource.*` 的资源创建 / 重命名 / 移动 / 删除 / 恢复。 +- simplemindmap / office 的 ObjectIdentity 和 Resource Tree 映射。 + +### 3.3 阶段 C:迁移与运营闭环 + +最后做迁移和收尾。 + +目标: + +> **把旧 Convex 资产迁移成本变成可视、可回滚、可验证的产品流程。** + +应优先推进的事: + +- Convex workspace 导出到本地 root。 +- dry run。 +- 备份。 +- 冲突报告。 +- 回滚。 + +--- + +## 4. 和 `1-3` / `5-14` 的关系 + +### 4.1 `1-3` 负责告诉我们“当前还剩什么没收口” + +`1-3` 已经把主线拆得很清楚: + +- P0 到 P3 基本是已完成或接近完成的产品能力。 +- P4 到 P7 仍然是后续主线。 +- 其中 P7 明确指出:Page Aggregate / tree command / realtime 兼容链还要继续瘦身。 + +### 4.2 `5-14` 负责告诉我们“底座应该参考什么” + +`5-14` 的作用不是多拉一个功能列表,而是告诉我们: + +- workspace / project / buffer / search / agent 权限,主参考应是 Zed。 +- RPC / proxy / config / keymap 的轻量 Rust 组织方式,可以参考 Lapce 和 SideX。 +- VS Code 只用于行为规格校准。 + +### 4.3 合起来的结论 + +两份文档合起来,结论就是: + +> **下一阶段的主线是“架构收口 + 产品化闭环”,不是“全量功能扩展”也不是“推倒重写”。** + +--- + +## 5. 明确优先级 + +### P0 + +- `WorkspacePath / ProjectPath / ObjectIdentity` +- `BufferStore / fileVersion / dirty / conflict` +- `Page Aggregate` +- `tree.*` / `tree.resource.*` +- `live cache` 主链 +- agent 文件编辑权限 + +### P1 + +- 本地搜索与快速打开继续巩固 +- File Tree / Page Tree / Resource Tree 命令上下文统一 +- command context / context key 统一 + +### P2 + +- share / sync +- simplemindmap / office 资源产品化 +- 本地迁移与导出 + +### P3 + +- terminal / PTY 边界 +- MultiBuffer / excerpts +- review diff / streaming apply +- 插件运行时 + +--- + +## 6. 当前不做什么 + +- 不把 MNote 拉成通用 IDE。 +- 不先做 extension host / debugger / terminal 优先级升级。 +- 不让 `documents.*` 继续长成新主命令面。 +- 不把 Tauri desktop shell 当成当前主壳方向。 +- 不把 UI 功能增长误当成主线前进。 + +--- + +## 7. 下一步建议 + +接下来最合理的动作是: + +1. 先按 `1-4` 这条路线图推进架构收口。 +2. 在 `1-3` 里把 `P7` 拆成明确的收口子任务。 +3. 等底座稳定后,再把 `P4-P6` 推成产品化闭环。 + +一句话结论: + +> **先收口主链,再做产品化。** diff --git a/design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md b/design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md new file mode 100644 index 00000000..0f56684c --- /dev/null +++ b/design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md @@ -0,0 +1,687 @@ +# 1-5 [process] 下一阶段顺序执行 checklist v1 + +> 创建时间:2026-05-19 +> +> 当前状态:`PROCESS` +> +> 上位依据: +> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md` +> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-3-current-priority-execution-checklist-v1.md` +> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md` +> +> 目标:给出一份可以顺序执行、每一步都有完成验收、且标明参考源码位置的下一阶段执行清单。 + +--- + +## 0. 执行原则 + +- [ ] 每个阶段必须先补或确认测试,再改实现。 +- [ ] 每个阶段只能收口当前主链,不新增通用 IDE 产品面。 +- [ ] 新增长期命令必须优先走 `tree.*` / `tree.resource.*` / `page.*`,不能继续扩 `documents.*`。 +- [ ] 涉及本地文件写入时,必须携带 workspace identity、allowed roots、expected file version。 +- [ ] 涉及 UI / live stream 时,必须补 browser smoke 或复用既有 smoke。 +- [ ] 每完成一个阶段,必须把验证命令和 smoke 证据写回本文件或 `1-3`。 + +--- + +## 1. Phase A0:建立执行基线 + +目标: + +> **确认当前 P0-P3 既有能力仍然稳定,避免在架构收口前带着红灯推进。** + +### 1.1 基线验证 + +- [ ] 运行 Rust 格式检查。 + - 命令:`cargo fmt --check --all --manifest-path rust/Cargo.toml` + - 完成验收:命令通过。 + +- [ ] 运行 local-first 权限与 workspace 基线测试。 + - 命令:`cargo test -p mnote-web local_folder -- --nocapture` + - 命令:`cargo test -p mnote-web local_access_policy -- --nocapture` + - 命令:`cargo test -p mnote-web hermes_client_local_acp -- --nocapture` + - 完成验收:三组测试通过。 + +- [ ] 运行 Page Aggregate / tree command 基线测试。 + - 命令:`cargo test -p mnote-web page_aggregate -- --nocapture` + - 命令:`cargo test -p mnote-web tree_command -- --nocapture` + - 完成验收:两组测试通过。 + +- [ ] 运行 local-first guard。 + - 命令:`npm run check:local-first-convex-guard` + - 完成验收:命令通过,新增路径没有把 Convex 恢复成默认正文主存储。 + +### 1.2 基线 smoke + +- [ ] 冲突 UI smoke。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js` + - 完成验收:tiptap 与外部/agent 写入冲突仍能显示、合并、保存。 + +- [ ] 本地搜索索引 smoke。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task452-local-search-index-browser-smoke.js` + - 完成验收:新建、重命名、搜索、反链、标签仍稳定。 + +- [ ] agent changed files smoke。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task453-local-folder-page-ai-changed-files-smoke.js` + - 完成验收:AI 写入后 UI 能显示 `agent.changed_files`。 + +--- + +## 2. Phase A1:统一 WorkspacePath / ProjectPath / ObjectIdentity + +目标: + +> **用一个 Rust 侧稳定身份表达“哪个 workspace root 下的哪个对象 / 文件 / 资源”。** + +### 2.1 当前代码锚点 + +- MNote: + - `rust/crates/core-protocol/src/kernel.rs` + - `KernelObjectIdentity` + - `PageBodyWriteRequest` + - `rust/crates/core-protocol/src/lib.rs` + - `rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `rust/crates/mnote-web/src/ssr/pages/layout.rs` + - `fileObjectIdentity` + - `readFileTreeObjectIdentity` + - `rust/crates/mnote-web/src/routes/tree.rs` + +### 2.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/project/src/project.rs` + - `design/05-editor-mainline/reference-code/zed/crates/project/src/worktree_store.rs` + - `design/05-editor-mainline/reference-code/zed/crates/worktree/src/worktree.rs` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/path_util.rs` + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/multi_root.rs` + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/workspace.rs` + +### 2.3 顺序任务 + +- [ ] 盘点当前所有 path key / object key。 + - 搜索命令:`rg -n "ObjectIdentity|objectIdentity|rootUri|relativePath|fileVersion|documentId" rust/crates/mnote-web rust/crates/core-protocol -S` + - 完成验收:列出哪些入口仍只用 `documentId`、绝对路径或前端拼接 key。 + +- [ ] 在 `core-protocol` 中明确 `WorkspacePath` 或等价结构。 + - 建议字段:`workspace_id`、`root_uri`、`root_id`、`relative_path`、`source_kind`、`object_identity`、`resource_kind`。 + - 完成验收:结构能表达页面 `.md`、mindmap、office、附件、目录节点。 + +- [ ] 给 local folder file tree 输出稳定 identity。 + - 重点文件:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - 完成验收:File Tree row、Page Tree row、Resource row 均能携带统一 identity,不再由前端临时猜测。 + +- [ ] 前端 sidebar/filetree 消费统一 identity。 + - 重点文件:`rust/crates/mnote-web/src/ssr/pages/layout.rs` + - 完成验收:`fileObjectIdentity` / `readFileTreeObjectIdentity` 不再作为事实源,只作为兼容读取层。 + +### 2.4 验收 + +- [ ] 单测覆盖 identity 序列化与反序列化。 + - 建议命令:`cargo test -p core-protocol object_identity -- --nocapture` + +- [ ] local folder tree 测试覆盖页面 `.md` 和资源对象 identity。 + - 建议命令:`cargo test -p mnote-web local_folder -- --nocapture` + +- [ ] 浏览器 smoke 覆盖 filetree active reveal 和标题同步。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task438-filetree-title-md-active-reveal-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task440-page-title-filetree-md-sync-smoke.js` + +完成标准: + +- [ ] 本地页面、资源、附件、目录节点都能映射到同一套 workspace identity。 +- [ ] UI 不再需要通过文件名或 DOM 属性临时反推对象身份。 + +--- + +## 3. Phase A2:建立 BufferStore / DocumentBuffer 最小模型 + +目标: + +> **让 tiptap autosave、AI 文件写入、外部编辑器修改围绕同一份打开态、dirty 状态和文件版本仲裁。** + +### 3.1 当前代码锚点 + +- `rust/crates/core-protocol/src/kernel.rs` + - `PageBodyWriteRequest.expected_file_version` +- `rust/crates/mnote-web/src/routes/documents.rs` + - `/api/page-body/write` + - `/api/documents/save` compat +- `rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `write_local_markdown_page_body` + - `save_local_markdown_page` +- `rust/crates/mnote-web/src/routes/web_shell.rs` + - `conflictDetectionKey` + - `fileVersion` +- `rust/crates/mnote-web/src/routes/editor.rs` + +### 3.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/project/src/buffer_store.rs` + - `design/05-editor-mainline/reference-code/zed/crates/editor/src/editor.rs` +- Lapce: + - `design/05-editor-mainline/reference-code/lapce/lapce-app/src/doc.rs` +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/platform/files` + - `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/services/filesConfiguration` + +### 3.3 顺序任务 + +- [ ] 盘点所有文件写入口。 + - 搜索命令:`rg -n "documents.save|page.body.save|page-body/write|write_local_markdown|expectedFileVersion|conflictDetectionKey" rust/crates -S` + - 完成验收:列出 tiptap、Hermes tool、page save、documents compat、外部 watcher 入口。 + +- [ ] 定义 `DocumentBuffer` 最小字段。 + - 建议字段:`workspace_path`、`file_version`、`base_content_hash`、`current_content_hash`、`dirty_state`、`external_change_state`、`last_loaded_at`、`last_saved_at`。 + - 完成验收:字段能覆盖 clean、dirty、stale、external modified、deleted 五种状态。 + +- [ ] 让 `/api/page-body/write` 成为本地 `.md` 正文写入主入口。 + - 重点文件:`rust/crates/mnote-web/src/routes/documents.rs` + - 完成验收:本地 markdown 写入必须携带 `expectedFileVersion`;`documents/save` 只作为 compat adapter。 + +- [ ] 把冲突 UI 的 source 数据改为来自 buffer 状态。 + - 重点文件:`rust/crates/mnote-web/src/ssr/pages/layout.rs` + - 完成验收:冲突面板能显示 editor base version、disk version、source actor。 + +### 3.4 验收 + +- [ ] stale 写入被拒绝。 + - 命令:`cargo test -p mnote-web local_folder_documents_save_rejects_stale_expected_file_version -- --nocapture` + +- [ ] Page Body 写入测试通过。 + - 命令:`cargo test -p mnote-web page_aggregate -- --nocapture` + +- [ ] 冲突 UI smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js` + +完成标准: + +- [ ] tiptap、AI、外部修改共享同一版本仲裁模型。 +- [ ] 外部文件变更不能静默覆盖 dirty buffer。 +- [ ] `documents/save` 不再被新增路径当作长期主入口。 + +--- + +## 4. Phase A3:Page Aggregate 写读主链继续收口 + +目标: + +> **页面头部、正文、设置、树投影都通过 Page Aggregate 主链回流 UI。** + +### 4.1 当前代码锚点 + +- `rust/crates/core-protocol/src/page_aggregate.rs` +- `rust/crates/mnote-web/src/routes/documents.rs` +- `rust/crates/mnote-web/src/ssr/pages/document.rs` +- `rust/crates/mnote-web/src/ssr/pages/layout.rs` +- `rust/crates/bridge-runtime/src/lib.rs` +- `rust/crates/storage-convex-bridge/src/mapping.rs` + +### 4.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/project/src/project.rs` + - `design/05-editor-mainline/reference-code/zed/crates/project/src/worktree_store.rs` +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files` + +### 4.3 顺序任务 + +- [ ] 盘点仍直接拼 `meta + content` 或读取 `documents.content` 的 runtime 路径。 + - 搜索命令:`rg -n "documents.content|getContent|getMeta|meta \\+ content|page_aggregate|pageAggregate" rust/crates wolai-frontend src -S` + - 完成验收:列出仍存在的 runtime fallback,并标记 `compat only` 或待删除。 + +- [ ] 标题、正文、页面设置写入后只触发 Page Aggregate refresh。 + - 重点文件:`rust/crates/mnote-web/src/routes/documents.rs` + - 重点文件:`rust/crates/mnote-web/src/ssr/pages/layout.rs` + - 完成验收:写入后 UI 更新来源能追溯到 Page Aggregate,而不是局部补偿状态。 + +- [ ] 明确 `documents.*` 在 Page Aggregate 中的兼容边界。 + - 重点文件:`rust/crates/storage-convex-bridge/src/mapping.rs` + - 完成验收:新增语义不再加到 `documents.*`,旧命令只作为 adapter。 + +### 4.4 验收 + +- [ ] Page Aggregate Rust 测试通过。 + - 命令:`cargo test -p mnote-web page_aggregate -- --nocapture` + - 命令:`cargo test -p bridge-runtime page_aggregate -- --nocapture` + +- [ ] 页面标题、正文、设置 smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task110-page-title-single-truth-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task-page-aggregate-body-sync-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task-page-aggregate-options-sync-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task-page-aggregate-refresh-persistence-smoke.js` + +完成标准: + +- [ ] 文档页不再新增 `meta + content` 拼装真相。 +- [ ] 标题、正文、页面设置刷新后仍一致。 +- [ ] Page Aggregate provenance 能清楚区分 local markdown、compat join、kernel projection。 + +--- + +## 5. Phase A4:tree command / tree.resource command 收口 + +目标: + +> **页面和资源操作统一走 `tree.*` / `tree.resource.*`,`documents.*` 只保留兼容。** + +### 5.1 当前代码锚点 + +- `rust/crates/mnote-web/src/routes/tree.rs` +- `rust/crates/bridge-runtime/src/lib.rs` +- `rust/crates/storage-convex-bridge/src/mapping.rs` +- `rust/crates/mnote-cli/src/lib.rs` +- `rust/crates/mnote-web/src/transport/convex.rs` + +### 5.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/project_panel/src/project_panel.rs` +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/platform/commands` + - `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/src-tauri/src/commands/fs.rs` + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/file_operations.rs` + +### 5.3 顺序任务 + +- [ ] 盘点仍使用 `documents.*` 的命令入口。 + - 搜索命令:`rg -n "\"documents\\.|documents\\." rust/crates infra src wolai-frontend -S` + - 完成验收:输出保留清单,逐项标记为 `compat adapter`、`test fixture`、`must cutover`。 + +- [ ] 将新增页面操作固定为 `tree.node.*`。 + - 完成验收:新建、重命名、移动、归档、恢复、删除不再新增 `documents.*` 调用。 + +- [ ] 将资源操作固定为 `tree.resource.*`。 + - 完成验收:mindmap、office、附件 rename/move/archive/restore/purge 都有正式命令名。 + +- [ ] mnote-cli 中历史 `documents.*` 命令降级为 compat。 + - 重点文件:`rust/crates/mnote-cli/src/lib.rs` + - 完成验收:CLI 新增命令使用 `tree.*` 或 `tree.resource.*`。 + +### 5.4 验收 + +- [ ] tree command 单测通过。 + - 命令:`cargo test -p mnote-web tree_command -- --nocapture` + - 命令:`cargo test -p bridge-runtime tree_command -- --nocapture` + +- [ ] 文件树操作 smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task179-tree-create-delete-no-reload-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task446-tree-rename-dual-browser-live-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task447-tree-move-order-dual-browser-live-smoke.js` + +完成标准: + +- [ ] 新增长期命令面不再出现 `documents.*`。 +- [ ] `storage-convex-bridge` 只把正式命令映射到 Convex 兼容 mutation。 +- [ ] 资源生命周期命令能统一产生 tree stream delta hint。 + +--- + +## 6. Phase A5:tree realtime live cache 收口 + +目标: + +> **Sidebar、File Tree、Page Tree、Page Subtree 都消费同一套 snapshot / delta / resync live cache。** + +### 6.1 当前代码锚点 + +- `rust/crates/mnote-web/src/routes/sse.rs` +- `rust/crates/mnote-web/src/routes/realtime_ws.rs` +- `rust/crates/mnote-web/src/ssr/pages/layout.rs` + - `tree:snapshot` + - `tree:delta` + - `tree:resync` + - `deltaNeedsProjectionRefresh` +- `rust/crates/bridge-runtime/src/lib.rs` + - `tree_stream_delta_hint` + - `materialize_tree_stream_delta` + +### 6.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/worktree/src/worktree.rs` + - `design/05-editor-mainline/reference-code/zed/crates/project/src/worktree_store.rs` +- Lapce: + - `design/05-editor-mainline/reference-code/lapce/lapce-proxy/src/watcher.rs` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/watcher.rs` + +### 6.3 顺序任务 + +- [ ] 盘点所有 tree/page/filetree 刷新来源。 + - 搜索命令:`rg -n "tree:snapshot|tree:delta|tree:resync|EventSource|WebSocket|poll|refetch|preferred snapshot|pageSubtree" rust/crates/mnote-web/src -S` + - 完成验收:标出 WS 主链、SSE fallback、polling/refetch 补偿链。 + +- [ ] 明确 WS 是主链、SSE 是 fallback。 + - 重点文件:`rust/crates/mnote-web/src/ssr/pages/layout.rs` + - 完成验收:SSE 不和 WS 并行长期消费同一事件,只有 WS 不可用时 fallback。 + +- [ ] delta 能处理时直接 apply,不能处理时 resync。 + - 重点文件:`rust/crates/mnote-web/src/ssr/pages/layout.rs` + - 重点文件:`rust/crates/bridge-runtime/src/lib.rs` + - 完成验收:`deltaNeedsProjectionRefresh` 不再成为常态路径。 + +- [ ] 删除或降级不必要的 polling / refetch 补偿链。 + - 完成验收:页面/文件树操作不靠定时轮询才能稳定。 + +### 6.4 验收 + +- [ ] realtime route 单测通过。 + - 命令:`cargo test -p mnote-web tree_realtime -- --nocapture` + - 命令:`cargo test -p mnote-web local_folder -- --nocapture` + +- [ ] 双浏览器 live smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task446-tree-rename-dual-browser-live-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task447-tree-move-order-dual-browser-live-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task448-tree-resync-recovery-dual-browser-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task449-tree-sse-reconnect-snapshot-recovery-smoke.js` + +完成标准: + +- [ ] 双浏览器页面、文件、垃圾箱操作不刷新页面也能同步。 +- [ ] WS 主链可用时 SSE 只作为 fallback。 +- [ ] resync 是异常恢复路径,不是每次 delta 后的默认补偿。 + +--- + +## 7. Phase A6:agent 文件编辑权限与 audit 收口 + +目标: + +> **Hermes / Reasonix 只能在 allowed roots 内编辑文件,写前受版本约束,写后 watcher / audit / projection 能同步。** + +### 7.1 当前代码锚点 + +- `rust/crates/core-protocol/src/ai.rs` + - `AiAccessScope` + - `allowed_roots` +- `rust/crates/mnote-web/src/routes/hermes_client.rs` + - `acp_allowed_roots_env_for_payload` + - `local_agent_audit_collect_snapshot` + - `local_agent_audit_finalize_run` +- `rust/crates/mnote-web/src/routes/hermes_tools.rs` + - `local_agent_audit_record_write_rejected` + - `local_agent_audit_record_tool_write` +- `rust/crates/mnote-web/src/hermes_tools/doc.rs` +- `rust/crates/mnote-web/src/hermes_tools/page.rs` + +### 7.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/agent/src/tools/edit_file_tool.rs` + - `design/05-editor-mainline/reference-code/zed/crates/agent/src/tools/read_file_tool.rs` + - `design/05-editor-mainline/reference-code/zed/crates/agent/src/tools/write_file_tool.rs` + - `design/05-editor-mainline/reference-code/zed/crates/agent/src/tools/edit_session.rs` + - `design/05-editor-mainline/reference-code/zed/crates/agent/src/tool_permissions.rs` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/src-tauri/src/commands/validation.rs` + - `design/05-editor-mainline/reference-code/sidex-main/src-tauri/src/commands/fs.rs` + +### 7.3 顺序任务 + +- [ ] 盘点所有 agent 写入口。 + - 搜索命令:`rg -n "mnote.doc.markdown_edit|mnote.page.save|mnote.block|allowed_roots|AiAccessScope|write_rejected|agent_audit" rust/crates/mnote-web/src rust/crates/core-protocol/src -S` + - 完成验收:列出 Hermes tool、Reasonix/ACP、agent native file edit、MNote tool 写入入口。 + +- [ ] allowed roots 校验统一到一个 Rust helper。 + - 完成验收:所有写入口共用同一套 root canonicalization、symlink escape、read/write permission 校验。 + +- [ ] agent 写入前读取当前 file version。 + - 完成验收:MNote tool 写入必须携带 `expectedFileVersion`;agent native 写入完成后必须进入 audit + watcher 同步路径。 + +- [ ] audit event 统一 run id 和 changed files 结构。 + - 重点文件:`rust/crates/mnote-web/src/routes/hermes_client.rs` + - 完成验收:agent native 写入和 MNote tool 写入可归入同一个 run audit。 + +### 7.4 验收 + +- [ ] allowed roots env 测试通过。 + - 命令:`cargo test -p mnote-web acp_allowed_roots -- --nocapture` + +- [ ] audit 单测通过。 + - 命令:`cargo test -p mnote-web local_agent_audit_snapshot_detects_changed_files -- --nocapture` + - 命令:`cargo test -p mnote-web hermes_tools_markdown_edit_shared_read -- --nocapture` + - 命令:`cargo test -p mnote-web hermes_tools_page_save_local_folder_writes_markdown_file -- --nocapture` + +- [ ] changed files smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task453-local-folder-page-ai-changed-files-smoke.js` + +完成标准: + +- [ ] read grant 下写入被拒绝并记录 audit。 +- [ ] write grant 下写入后 UI 能显示 changed files。 +- [ ] agent 不能通过 symlink 或 `..` 逃出 allowed roots。 + +--- + +## 8. Phase A7:command context / context key 最小落地 + +目标: + +> **File Tree / Page Tree / Object Tab / Editor selection 贡献统一 command context,右键菜单和快捷键不再各自临时判断。** + +### 8.1 当前代码锚点 + +- `rust/crates/mnote-web/src/ssr/pages/layout.rs` +- `rust/crates/mnote-web/src/routes/tree.rs` +- `rust/crates/core-protocol/src/command.rs` + +### 8.2 参考代码位置 + +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/platform/contextkey` + - `design/05-editor-mainline/reference-code/vscode/src/vs/platform/commands` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-keymap/src/context.rs` + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-keymap/src/resolver.rs` +- Lapce: + - `design/05-editor-mainline/reference-code/lapce/lapce-app/src/command.rs` + - `design/05-editor-mainline/reference-code/lapce/lapce-app/src/keypress/loader.rs` + +### 8.3 顺序任务 + +- [ ] 盘点当前菜单、快捷键、按钮 enablement 条件。 + - 搜索命令:`rg -n "disabled|aria-disabled|context|shortcut|keydown|menu|right-click|data-action" rust/crates/mnote-web/src/ssr/pages/layout.rs -S` + - 完成验收:列出至少 filetree、pagetree、editor、AI panel 的条件来源。 + +- [ ] 定义 MNote 最小 command context。 + - 建议 key:`workspace.sourceKind`、`tree.focusKind`、`tree.selectionCount`、`tree.selectionResourceKind`、`editor.dirty`、`editor.hasSelection`、`ai.canWrite`、`workspace.readonly`。 + - 完成验收:这些 key 能覆盖当前右键菜单、快捷键和主按钮 enablement。 + +- [ ] 先在 Rust 侧定义 context schema,再让前端消费。 + - 完成验收:前端不再在多个分支里重复判断同一个能力。 + +### 8.4 验收 + +- [ ] command context 单测覆盖 `when` 判断。 + - 建议命令:`cargo test -p core-protocol command_context -- --nocapture` + +- [ ] 文件树 DnD / readonly conflict smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task431-vscode-explorer-dnd-readonly-conflict-smoke.js` + +完成标准: + +- [ ] 同一命令在菜单、快捷键、按钮上使用同一 context 判断。 +- [ ] readonly / read grant / selected resource kind 的禁用态一致。 + +--- + +## 9. Phase B1:分享与同步闭环 + +目标: + +> **个人本地空间默认隔离,显式分享后才产生 shared workspace / shared AI session。** + +### 9.1 当前代码锚点 + +- `rust/crates/mnote-web/src/routes/local_access_policy.rs` +- `rust/crates/mnote-web/src/routes/hermes_client.rs` +- `rust/crates/core-protocol/src/ai.rs` +- `infra/convex/` + +### 9.2 参考代码位置 + +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/platform/files` +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/collab` + - 仅参考权限和协作边界,不采用完整协作产品。 + +### 9.3 顺序任务 + +- [ ] 定义 share grant 与 local access grant 的关系。 + - 完成验收:share grant 不自动扩大本机文件系统权限。 + +- [ ] shared AI session 只消费 share grant 允许的资源。 + - 完成验收:shared AI session 不能访问 owner 本机未授权 root。 + +- [ ] 同步 cache 目录设计。 + - 完成验收:cache 中保留来源、版本、actor、权限、冲突信息。 + +- [ ] 同步冲突复用 Phase A2 冲突 UI。 + - 完成验收:冲突报告包含 local、remote、base、actor。 + +### 9.4 验收 + +- [ ] 单测:share read 不允许写入。 +- [ ] 单测:shared AI session 不扩大 workspace root。 +- [ ] browser smoke:共享页面只读用户无法通过 AI 写入正文。 + +完成标准: + +- [ ] share / sync 不破坏 local-first 权限模型。 +- [ ] shared AI session 不能越权读写。 + +--- + +## 10. Phase B2:simplemindmap / office Resource Tree 产品化 + +目标: + +> **simplemindmap / office 是 Resource Tree 对象,Markdown 正文只保留链接或嵌入引用。** + +### 10.1 当前代码锚点 + +- `rust/crates/mnote-web/src/routes/mindmap_api.rs` +- `rust/crates/mnote-web/src/routes/mindmap_shell.rs` +- `rust/crates/mnote-web/src/ssr/pages/mindmap.rs` +- `rust/crates/mnote-web/src/routes/tree.rs` +- `rust/crates/bridge-runtime/src/lib.rs` +- `src/components/onlyoffice/` + +### 10.2 参考代码位置 + +- Zed: + - `design/05-editor-mainline/reference-code/zed/crates/project_panel/src/project_panel.rs` +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/file_tree.rs` + +### 10.3 顺序任务 + +- [ ] 盘点 simplemindmap object identity、保存路径、打开路径。 + - 搜索命令:`rg -n "mindmap|tree.resource.mindmap|resource:mindmap|mindmapId" rust/crates src -S` + - 完成验收:列出所有 mindmap 创建、打开、保存、删除路径。 + +- [ ] 盘点 office object identity、保存路径、打开路径。 + - 搜索命令:`rg -n "onlyoffice|office|tree.resource.office|resource:office|assetId" rust/crates src -S` + - 完成验收:列出所有 office 创建、打开、保存、删除路径。 + +- [ ] 统一资源生命周期到 `tree.resource.*`。 + - 完成验收:rename / move / archive / restore / purge 不再走 document command。 + +- [ ] Markdown 中只写资源引用。 + - 完成验收:mindmap / office 内容不塞回 `.md` 正文真相。 + +### 10.4 验收 + +- [ ] 单测:resource rename 不走 document command。 +- [ ] 单测:mindmap resource 删除 / 恢复不破坏 markdown 页面。 +- [ ] browser smoke:mindmap 长中文保存和 index.md 不互相污染。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task443-filetree-mindmap-click-active-row-smoke.js` + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task445-filetree-mindmap-switch-no-flicker-smoke.js` + +完成标准: + +- [ ] Page Tree 只做页面导航投影。 +- [ ] File Tree 能显示资源行。 +- [ ] Resource Tree 才是资源归属真相。 + +--- + +## 11. Phase C1:旧 Convex 数据迁移产品化 + +目标: + +> **把旧 Convex workspace 迁移成本变成可视、可回滚、可验证的产品流程。** + +### 11.1 当前代码锚点 + +- `rust/crates/storage-convex-bridge/src/mapping.rs` +- `rust/crates/mnote-web/src/transport/convex.rs` +- `rust/crates/mnote-web/src/routes/local_folder_source.rs` +- `scripts/task444-convex-workspace-export-local-fixture-smoke.js` + +### 11.2 参考代码位置 + +- VS Code: + - `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files/browser/fileImportExport.ts` +- SideX: + - `design/05-editor-mainline/reference-code/sidex-main/crates/sidex-workspace/src/file_operations.rs` + +### 11.3 顺序任务 + +- [ ] 设计 dry run 导出计划。 + - 完成验收:计划列出页面、资源、附件、目标路径、冲突项,不写文件。 + +- [ ] 导出前生成 backup / manifest。 + - 完成验收:manifest 能记录本次新增、覆盖、跳过、失败。 + +- [ ] 目标 root 同名冲突不覆盖。 + - 完成验收:生成冲突报告,用户明确选择前不写入。 + +- [ ] 回滚按 manifest 删除新增或恢复备份。 + - 完成验收:回滚后 root 回到导出前状态。 + +- [ ] 导出完成后重建本地索引。 + - 完成验收:迁移后页面可搜索,资源引用可查。 + +### 11.4 验收 + +- [ ] Convex fixture 导出 smoke 通过。 + - 命令:`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task444-convex-workspace-export-local-fixture-smoke.js` + +- [ ] 新增 smoke:同名文件冲突时不覆盖。 + +- [ ] 新增 smoke:回滚后 root 回到导出前状态。 + +完成标准: + +- [ ] 迁移支持 dry run。 +- [ ] 迁移支持备份、冲突报告、回滚。 +- [ ] 迁移后 local index 可用。 + +--- + +## 12. 每阶段统一收尾验收 + +每完成一个 Phase,执行: + +- [ ] `cargo fmt --check --all --manifest-path rust/Cargo.toml` +- [ ] `git diff --check -- ` +- [ ] 与阶段相关的 Rust 单测。 +- [ ] 与阶段相关的 browser smoke。 +- [ ] `npm run check:local-first-convex-guard` +- [ ] 把验证证据写回本 checklist。 + +阶段迁移到 `done/` 的标准: + +- [ ] checklist 项全部勾选。 +- [ ] 真实代码已落地。 +- [ ] 单测与 smoke 有证据。 +- [ ] 不再依赖临时 compat 作为新增能力主路径。 diff --git a/design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md b/design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md new file mode 100644 index 00000000..28d04bcd --- /dev/null +++ b/design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md @@ -0,0 +1,247 @@ +# 1-6 [process] 下一阶段缺口补齐 checklist v1 + +> 创建时间:2026-05-19 +> +> 当前状态:`PARTIALLY_DONE`(Reasonix 已补 A2/A7 基础设施与 A2 保存/watcher 接入;A2 浏览器刷新可见读回、A0 browser smoke、A7 UI 接入、B2/C1 产品化仍未闭环) +> +> 上位依据: +> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md` +> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-4-next-phase-execution-roadmap-v1.md` +> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md` +> +> 目的:基于 Reasonix 执行汇总和本轮核对结果,列出仍不能标完成的缺口,形成可继续顺序执行的补充清单。 + +--- + +## 0. 当前核对结论 + +本轮已确认: + +- [x] `ObjectWorkspacePath` 已在 `core-protocol` 定义并导出。 +- [x] local folder projection 已输出 `resourceMeta.workspacePath`。 +- [x] 前端 `fileObjectIdentity` 已优先读取 `resourceMeta.workspacePath.objectIdentity`。 +- [x] `DocumentBuffer` / `DocBufferDirtyState` 已在 `core-protocol` 定义并有状态机测试。 +- [x] `mnote.mindmap.*` / `mnote.office.*` Hermes resource tools 已出现,且最小测试通过。 + +本轮 Reasonix 执行后新增: + +- [x] **Gap A0(部分)**: local-first guard 已通过 ✅(`npm run check:local-first-convex-guard` → `{ok: true, guard: "local-first-convex"}`);browser smoke 尚未复跑。 +- [x] **Gap A2(基础设施+运行时接入)**: `BufferStore` 已在 `rust/crates/mnote-web/src/document_buffer_store.rs` 实现,并加入 `AppState.buffer_store`。运行时接入完成:`write_local_markdown_page_body` → `mark_saved`、watcher → `mark_external_modified`、Hermes tools → 共享 helper。11 个单测全部通过(含 3 个新集成测试)。 +- [x] **Gap A2(运行时接入—完成)**: `write_local_markdown_page_body` 已接入 `BufferStore.mark_saved()`;`documents.rs` `page_body_write` 和 `save` 路由已传递 `state.buffer_store`;Hermes `doc_apply_block_ops` 和 `page_command` 已传递 `state.buffer_store`;watcher 已在 `spawn_local_folder_watcher` 内调用 `mark_external_modified`。3 个新集成测试覆盖运行时入口。 +- [ ] **Gap A2(浏览器可见闭环)**: Codex 浏览器复核显示 `POST /api/page-body/write` 200、磁盘 `.md` 与 local search index 均写入成功、`#__MNOTE_PAGE_AGGREGATE__` 包含保存文本;但刷新后编辑器 DOM/截图未显示该正文,仍需修复可见读回或编辑器 hydration。 +- [x] **Gap A7(基础设施)**: `CommandContext` + `when` evaluator 已在 `core-protocol/src/command.rs` 实现。7 个单测全部通过(含 3 个必补测试)。 +- [ ] **Gap A7(UI/命令接入)**: File Tree 右键菜单、快捷键、AI 写入能力尚未消费 `CommandContext`。 +- [x] **Gap B2(部分)**: `resource_rename_uses_resource_command_not_document_command` 测试通过;`local_agent_audit_snapshot_detects_resource_files` 通过;mindmap 生命周期测试通过。 +- [x] **Gap C1(部分)**: `scripts/task444-convex-workspace-export-local-fixture-smoke.js` 通过;`export-convex-workspace-to-local.js` 既有 `--dry-run`、`--manifest`、`--conflict-report`、`--rollback` 能力已确认,但本轮未新增对应 smoke。 +- [x] **core-protocol 全量测试**: 41 单元 + 6 editor bridge + 2 resource tree = 49 通过 ✅ +- [x] **mnote-web 相关测试**: BufferStore 8 通过 + resource_trash 6 通过 + audit 2 通过 = 16 通过 ✅ + +--- + +## 1. Gap A0:补齐基线验证证据 — 🔄 部分完成 + +### 1.1 必跑命令 + +- [x] 运行 local-first guard。 + - 命令:`npm run check:local-first-convex-guard` + - 结果:`{"ok": true, "checkedLines": 1, "guard": "local-first-convex"}` + - 验收:通过 ✅ + +- [ ] 冲突 UI smoke — `task451-local-markdown-conflict-resolution-ui-smoke.js` + - 编号已存在脚本目录,需在完整后端环境下运行(依赖 mnote-web + Convex) + - 验收:尚未复跑 browser smoke;单测级 `document_buffer_state_transitions` 不能替代 UI smoke。 + +- [ ] 本地搜索索引 smoke — `task452-local-search-index-browser-smoke.js` + - 编号已存在脚本目录 + - 验收:尚未复跑 browser smoke。 + +- [ ] agent changed files smoke — `task453-local-folder-page-ai-changed-files-smoke.js` + - 编号已存在脚本目录 + - 验收:尚未复跑 browser smoke;`local_agent_audit_snapshot_detects_changed_files` 和 `detects_resource_files` 只能覆盖 audit 单元路径。 + +### 1.2 收尾 + +- [x] guard 输出已记录(见上) +- [ ] browser smokes 需完整后端环境运行(mnote-web + Convex + Playwright) +- [ ] 失败归属:无失败 + +--- + +## 2. Gap A2:把 DocumentBuffer 接入运行时 BufferStore — 🔄 基础设施与运行时接入完成,浏览器可见读回未闭环 + +### 2.1 当前代码锚点(更新后) + +- `rust/crates/mnote-web/src/document_buffer_store.rs` — **新增**:`BufferStore` + `BufferKey` 实现 +- `rust/crates/mnote-web/src/app.rs` — `buffer_store: BufferStore` 已加入 `AppState` +- `rust/crates/mnote-web/src/lib.rs` — `pub mod document_buffer_store` 已注册 +- `rust/crates/core-protocol/src/kernel.rs` — `DocumentBuffer` / `DocBufferDirtyState` / `ObjectWorkspacePath`(已有未改) + +### 2.2 顺序任务完成情况 + +- [x] 新增运行时 `BufferStore` owner:`rust/crates/mnote-web/src/document_buffer_store.rs`,通过 `AppState.buffer_store` 持有 +- [x] 定义 buffer key:以 `ObjectWorkspacePath` 的 `workspace_id + source_kind + root_uri + relative_path + document_id` 作为稳定 `BufferKey` +- [x] 接入 tiptap 保存链:`write_local_markdown_page_body` / `documents.rs` `save` 路由已调用 `state.buffer_store.mark_saved()` +- [x] 接入外部文件变更 watcher:`spawn_local_folder_watcher` 已通过 `buffer_store.mark_external_modified()` 更新对应 buffer +- [x] 接入 Hermes/Reasonix 写入后状态更新:`hermes_tools/doc.rs` 和 `hermes_tools/page.rs` 已通过共享 helper `write_local_markdown_page_body` 自动消费 BufferStore +- [ ] conflict UI 数据源改为 buffer state:API 已就绪,未接入 +- [ ] 浏览器可见读回:保存后磁盘与 PageAggregate 已更新,但刷新后 tiptap/editor DOM 未显示保存正文 + +### 2.3 必补测试 + +- [x] `document_buffer_reuses_workspace_path_key` — 通过 ✅ +- [x] `document_buffer_marks_external_modified_for_clean_buffer` — 通过 ✅ +- [x] `document_buffer_marks_stale_for_dirty_buffer` — 通过 ✅ +- [x] `document_buffer_mark_saved_after_page_body_write` — 通过 ✅ +- [x] 额外测试:`document_buffer_different_paths_different_keys` ✅ +- [x] 额外测试:`document_buffer_init_buffer_sets_file_version` ✅ +- [x] 额外测试:`document_buffer_mark_dirty_and_saved_round_trip` ✅ +- [x] 额外测试:`document_buffer_reuses_across_multiple_get_or_create_calls` ✅ + +### 2.4 当前完成标准 + +- [x] `DocumentBuffer` 已有 mnote-web runtime `BufferStore` owner +- [x] `BufferKey` 可稳定区分不同文件 +- [x] 11 个单测覆盖了关键 path + state transitions + save round-trip + 运行时入口 +- [x] **已完成**:tiptap/保存路由/Hermes 写入链已通过 `write_local_markdown_page_body` 统一消费 `BufferStore` +- [x] **已完成**:watcher 已通过 `spawn_local_folder_watcher` 调用 `mark_external_modified` +- [ ] **未完成**:`documents/save` 的 conflict UI 数据源尚未改为 buffer state 查询 +- [ ] **未完成**:浏览器刷新后编辑器可见正文未读回;证据截图:`reasonix-a2-after-refresh-text-missing.png` + +### 2.5 下一步 + +- 修复保存后刷新读回:`#__MNOTE_PAGE_AGGREGATE__` 已包含正文,但 `mnote-leptos-tiptap-editor-root` 可见 DOM 为空,需要定位 editor hydration / blockDocument 消费路径。 +- conflict UI 数据源改为 buffer state:前端查询 `/api/documents/buffer/state` 或 SSE 推送 buffer 变更事件。 + +--- + +## 3. Gap A7:落地 command context / context key — 🔄 基础设施完成,UI/命令接入未完成 + +### 3.1 当前代码锚点(更新后) + +- `rust/crates/core-protocol/src/command.rs` — **已扩展**:新增 `CommandContext`、`WhenExprNode`、`parse_when_expr`、`evaluate_when`、`check_when`、`is_command_enabled` +- `rust/crates/core-protocol/src/lib.rs` — **已更新**:导出所有 command context 类型和函数 + +### 3.2 顺序任务完成情况 + +- [x] 定义最小 `CommandContext` 结构:包含 `workspace.sourceKind`、`workspace.readonly`、`tree.focusKind`、`tree.selectionCount`、`tree.selectionResourceKind`、`editor.dirty`、`editor.hasSelection`、`ai.canWrite` 共 8 个 key +- [x] 实现最小 `when` evaluator:支持 `key`、`!key`、`key == value`、`key != value`、`&&`、`||`、括号分组(完整的递归下降解析器 + AST evaluator) +- [ ] 把 File Tree 右键菜单接入 context:`CommandContext` 和 `is_command_enabled` 已提供基础设施,但尚未在 SSR layout 中使用 +- [ ] 把快捷键接入 context:基础设施已就绪,未接入 +- [ ] 把 AI 写入能力接入 context:`ai.canWrite` key 已定义,未在 hermes_tools 中消费 + +### 3.3 必补测试 + +- [x] `command_context_when_clause` — 通过 ✅(覆盖 key、!key、==、!=、&&、||、括号分组) +- [x] `command_context_disables_write_commands_for_readonly_workspace` — 通过 ✅ +- [x] `command_context_filters_resource_commands_by_kind` — 通过 ✅ +- [x] `command_context_default_is_allow` — 通过 ✅ +- [x] `command_context_number_comparison` — 通过 ✅ +- [x] `command_context_parse_error_returns_default` — 通过 ✅ +- [x] `command_context_ai_can_write_gates_ai_actions` — 通过 ✅ + +### 3.4 当前完成标准 + +- [x] 最小 `CommandContext` 定义 + `when` evaluator 可工作 +- [x] readonly / grant / resource kind 的禁用态可测试 +- [ ] **未完成**:当前 UI 中同一命令的多份 enablement 判断尚未统一 +- [ ] **未完成**:菜单、按钮、快捷键可用性尚未统一 + +### 3.5 下一步 + +在 `layout.rs` 的右键菜单和 `hermes_tools` 的写入守卫中引入 `is_command_enabled`。 + +--- + +## 4. Gap B2:Resource tools 到 Resource Tree 产品化 — 🔄 部分完成 + +### 4.1 当前代码锚点(已有未改) + +- `rust/crates/mnote-web/src/routes/resource_trash.rs` — 媒体 / mindmap / table 生命周期使用 `tree.resource.*` 命令 +- `rust/crates/mnote-web/src/routes/hermes_tools.rs` +- `rust/crates/mnote-web/src/hermes_tools/resource.rs` +- `rust/crates/mnote-web/src/hermes_tools/manifest.rs` + +### 4.2 顺序任务完成情况 + +- [x] 明确 resource tool 是辅助入口,不是资源真相 — 文档中已有此约定 +- [x] mindmap resource 生命周期走 `tree.resource.*` — 测试验证 ✅ +- [x] office resource 生命周期走 `tree.resource.*` — ✅(仅链路存在,需更多测试覆盖) +- [ ] Resource Tree projection 显示资源对象 — 部分完成(filetree 已显示资源行) +- [x] agent audit 包含 resource files — `local_agent_audit_snapshot_detects_resource_files` 通过 ✅ + +### 4.3 必补测试 + +- [x] `tree_resource_rename_does_not_emit_document_command` — 被现有测试覆盖: + - `resource_rename_uses_resource_command_not_document_command` ✅(验证 canonicalCommand 为 `tree.resource.rename` 而非 `tree.node.rename`) +- [ ] `mindmap_resource_trash_restore_keeps_markdown_body` — 部分覆盖: + - `mindmap_delete_restore_keeps_markdown_reference_out_of_lifecycle_command` ✅(验证 mindmap 生命周期不携带 documentId 从而不影响 markdown 页面) + - 尚未验证文档正文在 trash/restore 后是否完整 +- [x] `local_agent_audit_snapshot_detects_resource_files` — 通过 ✅ +- [ ] browser smokes:`task443`、`task445` 需 Playwright 后端环境 + +### 4.4 完成标准 + +- [x] Resource Tree 是资源归属真相的大部分覆盖 +- [ ] Markdown 正文只保留资源引用 — 已有原则,未额外验证 +- [x] AI resource tools 与 tree.resource 生命周期一致 — 验证通过 + +--- + +## 5. Gap C1:Convex 迁移产品化补证据 — 🔄 部分完成 + +### 5.1 当前代码锚点(已有未改) + +- `rust/crates/storage-convex-bridge/src/mapping.rs` +- `rust/crates/mnote-web/src/transport/convex.rs` +- `rust/crates/mnote-web/src/routes/local_folder_source.rs` +- `scripts/task444-convex-workspace-export-local-fixture-smoke.js` +- `scripts/export-convex-workspace-to-local.js` + +### 5.2 顺序任务完成情况 + +- [x] 定义 dry run response — `export-convex-workspace-to-local.js` 支持 `--dry-run` 标识 ✅ +- [x] 定义 migration manifest — 支持 `--manifest` 参数 ✅ +- [x] 实现同名冲突不覆盖 — 导出时不覆盖已有文件,输出冲突报告 ✅ +- [x] 实现 rollback — 支持 `--rollback` 参数 ✅ +- [x] 导出完成后重建 local index — task444 smoke 验证通过 ✅ + +### 5.3 必补测试 + +- [x] `task444-convex-workspace-export-local-fixture-smoke.js` — 通过 ✅ +- [ ] 新增 smoke:dry run 不写文件 — `--dry-run` 已支持,需额外 smoke 验证 +- [ ] 新增 smoke:同名冲突不覆盖 — 已有冲突报告逻辑,需 smoke 验证 +- [ ] 新增 smoke:rollback 恢复导出前状态 — 已支持,需 smoke 验证 + +--- + +## 6. 最终收尾 + +### 6.1 验证命令结果 + +- [x] `cargo test -p core-protocol` — 41+6+2=49 passed ✅ +- [x] `cargo test -p mnote-web document_buffer` — 8 passed ✅ +- [x] `cargo test -p mnote-web resource_trash` — 6 passed ✅ +- [x] `cargo test -p mnote-web local_agent_audit_snapshot` — 2 passed ✅ +- [x] `npm run check:local-first-convex-guard` — `{"ok": true}` ✅ +- [x] `node scripts/task444-convex-workspace-export-local-fixture-smoke.js` — `{"ok": true}` ✅ +- [x] `cargo fmt --check --all --manifest-path rust/Cargo.toml` — 通过 ✅ +- [x] `git diff --check -- ` — 通过 ✅ + +### 6.2 Browser smokes(需完整后端环境) + +- [ ] `task431-vscode-explorer-dnd-readonly-conflict-smoke.js` +- [ ] `task451-local-markdown-conflict-resolution-ui-smoke.js` +- [ ] `task452-local-search-index-browser-smoke.js` +- [ ] `task453-local-folder-page-ai-changed-files-smoke.js` +- [ ] `task443-filetree-mindmap-click-active-row-smoke.js` +- [ ] `task445-filetree-mindmap-switch-no-flicker-smoke.js` + +### 6.3 总完成率 + +| Gap | 状态 | 关键产出 | 剩余 | +|-----|------|----------|------| +| A0 | 🔄 部分 | guard 通过,smoke 脚本已存在 | browser smokes 未复跑 | +| A2 | 🔄 运行时接入完成,浏览器闭环未完成 | `BufferStore` 实现 + 11 tests;保存请求 200;磁盘和 PageAggregate 写入成功 | 刷新后 editor DOM 未显示正文;conflict UI 未接 buffer state | +| A7 | 🔄 基础设施完成 | `CommandContext` + when evaluator + 7 tests | UI/快捷键/菜单接入 | +| B2 | 🔄 部分 | 资源生命周期 + agent audit 测试通过 | mindmap body 测试、browser smokes | +| C1 | 🔄 部分 | export/rollback/dry-run 脚本 + smoke 通过 | 额外 smoke 验证 | diff --git a/design/01-tree-first-graph-kernel/process/1-7-local-workspace-root-page-bundle-checklist-v1.md b/design/01-tree-first-graph-kernel/process/1-7-local-workspace-root-page-bundle-checklist-v1.md new file mode 100644 index 00000000..3e39dcd9 --- /dev/null +++ b/design/01-tree-first-graph-kernel/process/1-7-local-workspace-root-page-bundle-checklist-v1.md @@ -0,0 +1,258 @@ +# 1-7 Local Workspace Root Page Bundle Checklist v1 + +## 背景 + +当前默认本地工作区初始化会创建 `pages/`、`assets/`、`mindmaps/`、`ai-sessions/` 等顶层目录。这更像早期产品内部布局,不像用户真实打开的 VSCode 文件夹,也不利于页面导出。 + +本轮收口方向: + +- 默认工作区只保留用户内容根目录和 `.mnote/` 系统目录。 +- 页面树允许把 `页面.md + 页面/` 解释成一个页面节点与其子页面容器。 +- 文件树必须真实展示文件系统,不合并、不隐藏同名 `.md` 和目录。 +- 新建页面使用 `新页面HHMMSS` 命名,避免重复创建同名 `新页面.md`。 +- 新建页面时同时创建 `新页面HHMMSS.md` 和 `新页面HHMMSS/`。 +- 附件、思维导图等页面资源默认进入同名目录下,而不是顶层 `assets/` / `mindmaps/`。 + +## 参考代码位置 + +- 当前默认工作区初始化:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `create_default_local_workspace_for_actor_at_base` + - `ensure_default_workspace_directories` + - `ensure_default_workspace_home_page` +- 当前本地页面创建:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `execute_local_tree_command` + - `create_local_markdown_page` +- 当前本地资源上传:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `write_local_markdown_asset` +- 当前文件树真实扫描:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `load_local_folder_file_tree_snapshot` + - `scan_directory` +- 当前页面树扫描:`rust/crates/mnote-web/src/routes/local_folder_source.rs` + - `load_local_folder_page_tree_snapshot` + - `scan_markdown_page_tree` +- 当前根入口默认初始化测试:`rust/crates/mnote-web/src/routes/gateway.rs` + - `root_entry_initializes_default_local_workspace_page` +- 当前上传 smoke:`scripts/task443-local-markdown-asset-upload-smoke.js` + +## 目标目录契约 + +### 默认初始化 + +默认工作区初始化后应该是: + +```text +my-space/ + .mnote/ + workspace.json + trash/ + 初始化的新页面.md +``` + +不再默认创建: + +```text +pages/ +assets/ +mindmaps/ +ai-sessions/ +``` + +`ai-sessions` 后续如果要落本地,应放入 `.mnote/ai-sessions/`,本轮只禁止默认创建顶层 `ai-sessions/`。 + +### 新建页面 + +在父目录下新建页面时,默认标题若为 `新页面`,真实落盘应为: + +```text +新页面HHMMSS.md +新页面HHMMSS/ +``` + +例如: + +```text +新页面061240.md +新页面061240/ +``` + +要求: + +- `HHMMSS` 使用本地时间或现有时间工具生成,精确到秒。 +- 即使有时间戳,也必须做磁盘冲突检查;同秒冲突时使用 `-2`、`-3` 追加。 +- `documentId` 仍使用路径型 `local-md:`。 +- `.md` 正文标题应使用最终安全标题,例如 `# 新页面061240`。 + +### 页面树和文件树边界 + +- 页面树:允许把 `X.md` 与同目录 `X/` 解释为一个页面 `X`,并把 `X/` 内 Markdown 作为页面 `X` 的子页面。 +- 文件树:必须真实展示 `X.md` 和 `X/` 两个磁盘条目。不得把二者合并为一个节点。 + +### 页面资源 + +对 `X.md` 上传附件或图片时,默认写入: + +```text +X/assets/ +``` + +对 mindmap,后续默认写入: + +```text +X/mindmaps/ +``` + +本轮先完成 `write_local_markdown_asset` 的附件/图片路径迁移。正文链接相对 `X.md` 应为: + +```markdown +![图](X/assets/photo.png) +[spec.pdf](X/assets/spec.pdf) +``` + +## 顺序执行 Checklist + +### A0 基线保护 + +- [x] 记录当前 `git status --short`,不要清理与本任务无关的脏改动。 +- [x] 运行当前相关定向测试,确认改前基线: + - `cargo test --manifest-path rust/Cargo.toml -p mnote-web create_default_local_workspace_uses_managed_data_root -- --nocapture` + - `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_asset_upload_copies_next_to_markdown_with_relative_path -- --nocapture` + +验收: + +- [x] 基线通过。两项测试均 ok。 + +### A1 默认工作区目录最小化 + +- [x] 修改 `ensure_default_workspace_directories`:默认只创建 `.mnote/trash`。 +- [x] 修改 `ensure_default_workspace_home_page`:初始化页改为 `root/初始化的新页面.md`,不再放入 `pages/`。 +- [x] 更新 `create_default_local_workspace_uses_managed_data_root`: + - 断言 `初始化的新页面.md` 位于 root 下。 + - 断言 `pages/`、`assets/`、`mindmaps/`、顶层 `ai-sessions/` 不存在。 + - 保留 `.mnote/workspace.json` 与 `.mnote/trash` 断言。 +- [x] 更新 `root_entry_initializes_default_local_workspace_page`: + - 断言 root 下存在 `初始化的新页面.md`。 + - 不再断言 `pages/初始化的新页面.md`。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web create_default_local_workspace_uses_managed_data_root -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web root_entry_initializes_default_local_workspace_page -- --nocapture` — ok + +### A2 新建页面创建 `.md + 同名目录` + +- [x] 新增 helper `determine_page_stem`: + - 输入默认标题 `新页面` 输出 `新页面HHMMSS`(本地时间 HHMMSS,失败时回退 UTC)。 + - 对非默认标题,仍使用用户标题的安全文件名。 + - 对冲突同时检查 `.md` 与 `/`,追加 `-2`、`-3`。 +- [x] 修改 `create_local_markdown_page`: + - 创建 `.md`。 + - 同步创建 `/`。 + - 返回的 `relativePath` 仍是 `.md`。 + - 返回的 `documentId` 仍是 `local-md:`。 +- [x] 增加单测 `local_tree_command_create_page_creates_timestamped_markdown_and_sibling_folder`: + - 执行 `execute_local_tree_command(..., "create", ..., Some("新页面"))`。 + - 断言产生 `新页面\d{6}.md` 和同名目录。 + - 断言返回 `documentId` 指向 `.md`。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_tree_command_create_page_creates_timestamped_markdown_and_sibling_folder -- --nocapture` — ok + +### A3 页面树使用同名目录作为页面子容器 + +- [x] 修改 `scan_markdown_page_tree`: + - 如果同目录存在 `X.md` 和 `X/`,页面树只显示 `X.md` 对应的页面节点。 + - `X/` 内的 Markdown 节点挂在 `X.md` 页面节点下。 + - 没有同名 `.md` 的普通目录,如果包含 Markdown,继续作为 page group 显示。 +- [x] 增加单测: + - 构造 `Root.md`、`Root/Child.md`。 + - 页面树断言 `Child.md` 的 `parent_node_id` 是 `Root.md` 的 `documentId`。 + - 页面树断言没有单独的 `local:page-group:Root` 行。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_tree_uses_sibling_directory_as_page_children_container -- --nocapture` — ok + +### A4 文件树保持真实 + +- [x] 确认 `scan_directory` 不做任何同名 `.md + folder` 合并。 +- [x] 增加单测: + - 构造 `Root.md`、`Root/Child.md`。 + - 文件树断言同时存在 `Root.md` markdown 行和 `Root` folder 行。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_file_tree_keeps_markdown_and_sibling_folder_as_separate_rows -- --nocapture` — ok + +### A5 附件上传进入页面同名目录 + +- [x] 修改 `write_local_markdown_asset`: + - `README.md` 的附件目录从 `README.assets/` 改为 `README/assets/`。 + - 返回的 `sourcePath` / `file_url` 相对 Markdown 文件目录,例如 `README/assets/photo.png`。 + - 保留重复文件名 `photo-1.png` 逻辑。 +- [x] 更新单测 `local_markdown_asset_upload_copies_next_to_markdown_with_relative_path`。 +- [x] 更新 `scripts/task443-local-markdown-asset-upload-smoke.js` 中对 `README.assets/...` 的断言为 `README/assets/...`。 +- [x] 只改本地 local_folder 上传路径,不改 cloud / Convex media 路径。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_asset_upload_copies_next_to_markdown_with_relative_path -- --nocapture` — ok +- [x] `node scripts/task443-local-markdown-asset-upload-smoke.js` — ok,证据:`tmp/task443-local-markdown-asset-upload-smoke/result.json` + +### A6 重命名 bundle 规则最小收口 + +- [x] 检查 `rename_local_entry`: + - 当重命名 `X.md` 且同目录存在 `X/` 时,同步重命名目录为新标题目录。 + - 如果目标目录已存在,使用与文件一致的冲突策略或返回可解释错误,禁止覆盖。 +- [x] 增加单测: + - `Old.md + Old/Child.md` 重命名为 `New`。 + - 断言 `New.md` 和 `New/Child.md` 存在。 + - 页面树中 `Child.md` 仍挂在 `New.md` 下。 + +验收: + +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_rename_markdown_page_renames_sibling_page_folder -- --nocapture` — ok + +### A7 文档同步 + +- [x] 更新本 checklist 状态。 +- [x] 本 checklist 已明确覆盖旧的默认顶层 `pages/assets/mindmaps/ai-sessions` 初始化结构;未大范围改旧 done 文档。 + +验收: + +- [x] checklist 中已记录实际完成情况。 + +### A8 最终验证 + +- [x] `cargo fmt --check --all --manifest-path rust/Cargo.toml` — ok +- [x] `cargo check --manifest-path rust/Cargo.toml -p mnote-web` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web create_default_local_workspace_uses_managed_data_root -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_tree_command_create_page_creates_timestamped_markdown_and_sibling_folder -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_tree_uses_sibling_directory_as_page_children_container -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_file_tree_keeps_markdown_and_sibling_folder_as_separate_rows -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_asset_upload_copies_next_to_markdown_with_relative_path -- --nocapture` — ok +- [x] `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_rename_markdown_page_renames_sibling_page_folder -- --nocapture` — ok +- [x] `node scripts/task443-local-markdown-asset-upload-smoke.js` — ok + +浏览器验收由 Codex 复核执行: + +- [x] 使用临时 `MNOTE_LOCAL_WORKSPACE_BASE_DIR=/mnt/Data1T/mnote/tmp/page-bundle-data` 启动 `mnote-web`。 +- [x] 登录/注入测试 actor 后打开首页。 +- [x] 截图保存到 `tmp/`: + - `tmp/page-bundle-home-3003.png` + - `tmp/page-bundle-after-create-3003.png` + - `tmp/page-bundle-filetree-3003.png` +- [x] 检查磁盘: + - root 下有 `初始化的新页面.md`。 + - root 下没有默认 `pages/`、`assets/`、`mindmaps/`、顶层 `ai-sessions/`。 + - 新建页面后有 `新页面HHMMSS.md` 和 `新页面HHMMSS/`。 + - 文件树能看到 `.md` 与同名目录两个真实条目。 + - 页面树把同名目录内子页面挂到 `.md` 页面下。 + +## 非目标 + +- 不迁移用户历史数据。 +- 不删除正式 `/mnt/Data1T/Mnote_data/users` 下旧测试目录。 +- 不实现完整 mindmap 新路径落盘;本轮只定义默认目标并完成附件/图片上传路径迁移。 +- 不把文件树改成页面语义树。 +- 不重新引入 `mnote_id` frontmatter。 diff --git a/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md b/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md new file mode 100644 index 00000000..fe2601cd --- /dev/null +++ b/design/05-editor-mainline/process/5-14-zed-lapce-vscode-reference-adoption-matrix-v1.md @@ -0,0 +1,547 @@ +# 5-14 [process] Zed / Lapce / VS Code 参考采用矩阵 v1 + +> 更新时间:2026-05-19 +> +> 关联背景: +> - `/mnt/Data1T/mnote/CURRENT_ARCHITECTURE.md` +> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-5-page-aggregate-single-truth-alignment-v1.md` +> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md` +> - `/mnt/Data1T/mnote/design/07-ai/process/7-14-online-local-ai-markdown-editing-convergence-v1.md` +> - `/mnt/Data1T/mnote/design/04-tree-domain/done/4-24-resource-tree-filetree-pagetree-source-contract-checklist-v1.md` +> +> 本地参考源码: +> - VS Code:`/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/vscode` +> - Zed:`/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/zed` +> - Lapce:`/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/lapce` +> - SideX:`/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/sidex-main` + +## 1. 文档目的 + +这份文档回答一个工程路线问题: + +> **MNote 当前 Rust 主线应继续从 VS Code 源码里参考什么,又应该从哪些 Rust 编辑器项目里借鉴现成结构,避免把 VS Code TypeScript / Electron 代码大量转译到 Rust。** + +当前结论是: + +> **Zed 作为主架构参考,Lapce 作为辅助实现参考,SideX 作为 VS Code 行为迁移到 Rust 后端的桥接参考,VS Code 官方源码作为行为规格参考。** + +这不是说 MNote 要改造成通用 IDE,也不是要复制 Zed / Lapce 的桌面产品形态。MNote 的主线仍然是: + +- `tree-first graph kernel` +- local-first Markdown workspace +- Rust `mnote-web` Web shell +- `Page Aggregate` / `File Tree` / `Resource Tree` 投影 +- Hermes / Reasonix agent 在授权目录内进行文件编辑 + +Zed、Lapce、SideX、VS Code 只用于补齐“编辑器工作区基础设施”的成熟参考,尤其是文件树、打开态 buffer、dirty/save、搜索、外部文件变更、agent 文件编辑权限这些层。 + +--- + +## 2. 总体判断 + +### 2.1 不建议把 VS Code 源码作为转译目标 + +VS Code 官方源码仍然是 TypeScript / Electron 架构。它对 MNote 有很强的产品行为参考价值,但不适合作为 Rust 代码转译目标。 + +主要风险: + +- VS Code 的 workbench、service、contribution、lifecycle 与 Electron / DOM / Node 绑定很深。 +- 大量接口依赖 TypeScript DI、事件模型、extension host 和 workbench contribution 体系,转到 Rust 后会变成重建一套框架。 +- 文件服务、保存冲突、watcher、context key 等模块很有价值,但它们的价值在行为合同和边界划分,不在逐行代码。 +- MNote 当前不是通用 IDE,而是 local-first Markdown workspace + agent 编辑器,直接转译会把产品边界拉宽。 + +因此,VS Code 的定位应固定为: + +> **行为规格参考,不作为 Rust 实现蓝本。** + +### 2.2 Zed 是当前最接近 MNote 长期主线的 Rust 参考 + +Zed 的价值不在 UI 壳,而在这条 Rust 原生编辑器链路: + +> `Worktree / Snapshot -> WorktreeStore -> Project / ProjectPath -> BufferStore / MultiBuffer / Editor -> Search / FileFinder -> AgentTool / ToolPermission` + +这与 MNote 的长期方向高度重合: + +- 多 workspace root / local folder。 +- 稳定的 `{root + relative path}` 文件身份。 +- 文件树扫描、ignore、watch 增量更新。 +- 打开态 buffer、dirty/save、路径到 buffer 的索引。 +- 全文搜索、快速打开。 +- agent 文件读写、patch、权限与 allowed roots。 + +Zed 应作为: + +> **workspace / project / buffer / search / agent 文件编辑权限的主参考。** + +### 2.3 Lapce 是轻量实现与边界拆分的辅助参考 + +Lapce 的价值不在“产品完整度超过 Zed”,而在它更轻、更容易抽取工程模式: + +> `UI -> typed RPC -> proxy -> watcher / search / plugin / terminal -> doc / buffer delta / save` + +这对 MNote 有两类价值: + +- typed command / request / response 如何拆到 proxy / backend 执行层。 +- 文档 `rev / delta / dirty / save` 生命周期如何保持简单。 + +Lapce 应作为: + +> **typed RPC、proxy 边界、doc delta/save、file explorer state machine、配置和 keymap 的辅助参考。** + +### 2.4 SideX 不替代 Zed,但应加入参考矩阵 + +SideX 的 README 明确写的是: + +> **VSCode's workbench, without Electron.** + +也就是说,SideX 不是 Rust 原生重写 VS Code。它更接近: + +> **保留 VS Code TypeScript workbench / Monaco / service 模型,把 Electron main process、Node fs、node-pty、sqlite、watcher、search 等系统能力替换为 Tauri + Rust command / crate。** + +因此 SideX 不能替代 Zed 成为 MNote 的主架构参考,原因是: + +- 它仍保留 VS Code 的 TypeScript workbench、DI、service、contrib 体系。 +- 它的目标是“移植 VS Code”,不是建立 projection-first 的 local-first Markdown workspace。 +- 它会把 MNote 拉回通用 IDE / extension host / desktop shell 的复杂度。 + +但 SideX 很适合作为一类新参考: + +> **VS Code 行为如何落到 Rust 后端的迁移样本。** + +它比官方 VS Code 更接近 MNote 的地方在于: + +- Rust `sidex-workspace` 已经抽出 file tree、watcher、search、path util、dirty diff、multi-root 等 workspace crate。 +- Rust `sidex-keymap` 已经实现接近 VS Code `when` clause 的 context key evaluator。 +- Rust `sidex-settings` 已经实现 default / user / workspace 的分层 settings。 +- Tauri command 层把 `fs`、terminal、git、search、storage 等 Node/Electron 能力转换成 Rust command 边界。 + +所以本矩阵应把 SideX 放在: + +> **“VS Code 行为规格”和“MNote Rust 实现”之间的桥接参考。** + +### 2.5 Helix 不作为主参考 + +Helix 是优秀的 Rust 终端编辑器,适合参考 LSP、Tree-sitter、文本核心和配置理念,但它不是 workbench / Web shell / local-first workspace 主参考。 + +--- + +## 3. 参考源职责划分 + +### 3.1 Zed:主架构参考 + +重点参考: + +- `crates/worktree/src/worktree.rs` +- `crates/project/src/worktree_store.rs` +- `crates/project/src/project.rs` +- `crates/project/src/buffer_store.rs` +- `crates/project/src/project_search.rs` +- `crates/file_finder/src/file_finder.rs` +- `crates/agent/src/tools/edit_file_tool.rs` +- `crates/agent/src/tools/read_file_tool.rs` +- `crates/agent/src/tools/write_file_tool.rs` +- `crates/agent/src/tools/edit_session.rs` +- `crates/agent/src/tool_permissions.rs` + +不重点采用: + +- GPUI / Entity / App / Window 渲染壳。 +- pane / dock / desktop lifecycle。 +- collab / remote / diagnostics 的完整产品线。 +- 与 MNote local-first Markdown 主线无关的通用 IDE 复杂度。 + +### 3.2 Lapce:辅助实现参考 + +重点参考: + +- `lapce-app/src/doc.rs` +- `lapce-rpc/src/proxy.rs` +- `lapce-proxy/src/dispatch.rs` +- `lapce-proxy/src/watcher.rs` +- `lapce-app/src/file_explorer/data.rs` +- `lapce-app/src/global_search.rs` +- `lapce-app/src/command.rs` +- `lapce-app/src/main_split.rs` +- `lapce-core/src/syntax/mod.rs` +- `lapce-core/src/language.rs` +- `lapce-core/src/encoding.rs` +- `lapce-app/src/config.rs` +- `defaults/settings.toml` +- `lapce-app/src/keypress/loader.rs` +- `defaults/keymaps-common.toml` +- `lapce-proxy/src/plugin/mod.rs` + +不重点采用: + +- Lapce 自身 UI 框架选择。 +- 完整插件生态重建。 +- 终端、调试器等 MNote 当前阶段不需要的 IDE 面。 + +### 3.3 VS Code:行为规格参考 + +继续参考: + +- `src/vs/platform/files` +- `src/vs/platform/commands` +- `src/vs/platform/contextkey` +- `src/vs/workbench/contrib/files` +- `src/vs/workbench/services/filesConfiguration` +- `src/vs/base/browser/ui/list` +- `src/vs/base/browser/ui/tree` + +重点看行为: + +- file service 的能力边界。 +- save / save as / revert / conflict 的用户体验。 +- workspace watcher 与外部文件变更处理。 +- context key / command enablement。 +- file import / export / open editors。 +- tree/list 的选择、焦点、键盘导航和 DnD 行为。 + +不采用: + +- TypeScript service 体系逐行转译。 +- Electron workbench lifecycle。 +- VS Code extension host 作为 MNote 当前插件模型。 + +### 3.4 SideX:VS Code 行为到 Rust 后端的桥接参考 + +重点参考: + +- `ARCHITECTURE.md` +- `src-tauri/src/lib.rs` +- `src-tauri/src/commands/fs.rs` +- `src-tauri/src/commands/validation.rs` +- `crates/sidex-workspace/src/lib.rs` +- `crates/sidex-workspace/src/file_tree.rs` +- `crates/sidex-workspace/src/watcher.rs` +- `crates/sidex-workspace/src/search.rs` +- `crates/sidex-workspace/src/path_util.rs` +- `crates/sidex-keymap/src/context.rs` +- `crates/sidex-keymap/src/resolver.rs` +- `crates/sidex-settings/src/settings.rs` +- `crates/sidex-settings/src/jsonc.rs` +- `crates/sidex-terminal/src/pty.rs` +- `crates/sidex-terminal/src/manager.rs` + +重点看边界: + +- Electron / Node 能力如何映射为 Rust command。 +- 文件系统 command 如何先做 path validation,再进入 workspace crate。 +- Rust watcher / search / file tree 如何对外输出可序列化事件和结果。 +- VS Code `when` clause / context key 如何在 Rust 侧建模。 +- default / user / workspace settings 如何分层合并。 +- PTY / terminal manager 如何从 Node native 模块迁移到 Rust。 + +不采用: + +- VS Code TypeScript workbench 的整体移植路线。 +- Tauri desktop shell 作为 MNote 当前 Web 主壳。 +- extension host / debugger / terminal / git 的完整 IDE 产品面。 +- SideX 当前对绝对路径 command 的简单安全模型;MNote 必须继续使用 allowed roots、workspace root、symlink escape 和文件版本仲裁。 + +--- + +## 4. 采用矩阵 + +| 主题 | 主参考 | MNote 当前缺口 | 采用方式 | 优先级 | +| --- | --- | --- | --- | --- | +| `ProjectPath` / 文件身份 | Zed `ProjectPath` | local folder、page `.md`、resource asset 需要稳定 `{workspace/root + rel path}` 身份 | 借鉴模式,映射到 `KernelObjectIdentity` / File Tree row | P0 | +| Worktree / root 管理 | Zed `worktree` + `worktree_store`,SideX `sidex-workspace` | local-first workspace 需要扫描、ignore、watch、root id、路径归一 | Zed 做主模型,SideX 补充 Rust workspace crate 拆分参考 | P0 | +| BufferStore / 打开态文件 | Zed `buffer_store`,Lapce `doc.rs` | tiptap、AI、外部编辑器会同时触碰同一 `.md`,需要统一 dirty/save/version | Zed 做架构,Lapce 做简化实现参考 | P0 | +| dirty / save / external change | VS Code file save 行为,Zed buffer,Lapce doc,SideX dirty diff / watcher | `/api/documents/save` 兼容面仍未完全退出,文件版本冲突模型待收口 | VS Code 校准行为,Zed/Lapce 定模型,SideX 看 Rust watcher / dirty diff 落点 | P0 | +| agent 文件编辑权限 | Zed `edit_file_tool` / `tool_permissions` | Hermes / Reasonix 需要 allowed roots、symlink escape、防脏 buffer 覆盖 | 直接作为权限模型主参考 | P0 | +| workspace search | Zed `project_search`,Lapce `global_search`,SideX `sidex-workspace/search.rs` | MNote 需要本地全文搜索与 Page Aggregate / File Tree 对齐 | Zed 做主搜索模型,Lapce 做结果投影,SideX 补充 Rust 并行搜索实现参考 | P1 | +| file finder / quick open | Zed `file_finder` | 工作区文件快速打开与 object tab host 尚未成体系 | 借鉴候选生成与排序,不复制 UI | P1 | +| file explorer 状态机 | Lapce `file_explorer/data.rs`,SideX `file_tree.rs`,VS Code tree 行为 | File Tree / Page Tree / Resource Tree 需要选择、展开、刷新、右键命令一致性 | Lapce 状态机 + SideX Rust file tree 能力 + VS Code 行为规格 | P1 | +| command / context key | VS Code `commands` / `contextkey`,SideX `sidex-keymap/context.rs`,Lapce `command.rs` | tree/page/object tab 命令 enablement 仍容易散落到 UI | VS Code 给语义,SideX 给 Rust when-clause evaluator 参考 | P1 | +| typed RPC / backend proxy | Lapce `lapce-rpc` + `lapce-proxy`,SideX Tauri commands | Rust Web、worker、local FS executor、agent runtime 需要 typed request 边界 | Lapce 参考协议拆分,SideX 参考 Node/Electron 能力迁移到 Rust command | P2 | +| config / settings | SideX `sidex-settings`,Lapce `config.rs` + `settings.toml`,VS Code settings 行为 | workspace / user / page options / AI policy 需要层级合并规则 | SideX 分层 settings 更接近 Rust 落地,Lapce/VS Code 校准行为 | P2 | +| keymap | SideX `sidex-keymap`,Lapce keypress loader,VS Code keybinding 行为 | editor shell、file tree、command palette 后续需要统一快捷键 | SideX 参考 Rust context/when 解析,Lapce 参考 loader,VS Code 校准行为 | P2 | +| terminal / PTY 边界 | SideX `sidex-terminal`,VS Code terminal 行为 | MNote 当前不是 IDE 终端优先,但 agent/local workspace 后续可能需要受控命令执行面 | 只参考 Rust PTY manager 和安全边界,不进入当前主线 | P3 | +| MultiBuffer / excerpts | Zed `MultiBuffer` | AI review、搜索结果、跨文件上下文需要多片段视图 | Phase C 之后采用,当前不前置 | P3 | +| review diff / streaming apply | Zed agent edit session,VS Code diff 行为 | AI suggest/review 仍设计冻结 | 只保留为后续参考,不当前实施 | P3 | +| 插件运行时 | Lapce plugin,SideX WASM extension,VS Code extension host | MNote 当前插件是 simplemindmap / office / local tool,不需要通用扩展平台 | 暂不采用,只保留观察 | P3 | + +--- + +## 5. P0 实施建议 + +P0 不应从 UI 开始,而应先把文件身份、打开态 buffer 和 agent 文件权限三个底座定住。 + +### 5.1 固定 MNote 的 `WorkspacePath` + +目标: + +> **用一个 Rust 侧稳定结构表达“哪个 workspace root 下的哪个相对路径”。** + +参考: + +- Zed `ProjectPath` +- Zed `WorktreeStore` + +建议语义: + +- `workspace_id` +- `root_id` +- `source_kind` +- `relative_path` +- `object_identity` +- `resource_kind` + +约束: + +- 不允许 UI 只拿绝对路径当对象身份。 +- 不允许 Page Tree / File Tree / AI 工具各自生成不同 path key。 +- symlink、`..`、case sensitivity、ignore 规则必须由 Rust workspace 层处理。 + +### 5.2 建立 `BufferStore` / `DocumentBuffer` 最小模型 + +目标: + +> **让 tiptap autosave、AI 文件写入、外部编辑器修改都围绕同一份文件版本和 dirty 状态仲裁。** + +参考: + +- Zed `buffer_store.rs` +- Lapce `doc.rs` +- VS Code save conflict 行为 + +建议最小字段: + +- `workspace_path` +- `file_version` +- `base_content_hash` +- `current_content_hash` +- `dirty_state` +- `last_loaded_at` +- `last_saved_at` +- `external_change_state` + +当前必须避免: + +- 继续把 `/api/documents/save` 当长期正文写入主入口。 +- tiptap 和 AI 分别维护互不知情的 revision。 +- 外部文件变更直接覆盖前台 dirty buffer。 + +### 5.3 收口 agent 文件编辑权限 + +目标: + +> **MNote 只负责计算授权范围和同步投影,Hermes / Reasonix 在 allowed roots 内用自身 patch/diff 能力编辑文件。** + +参考: + +- Zed `edit_file_tool.rs` +- Zed `edit_session.rs` +- Zed `tool_permissions.rs` + +必须具备: + +- allowed roots。 +- 当前文件引用。 +- selection / range。 +- symlink escape 防护。 +- dirty buffer 写入前检查。 +- 写后 watcher / projection refresh。 + +这条线与当前 `7-14 online/local AI Markdown editing convergence` 一致:普通 local-first Markdown 编辑优先走 agent 原生文件编辑能力,`mnote.doc.markdown_edit` 只作为 cloud / remote agent / compat fallback。 + +--- + +## 6. P1 / P2 / P3 实施建议 + +### 6.1 P1:搜索、文件树、命令上下文 + +P1 解决的是 workspace 产品体验闭环: + +- 本地全文搜索。 +- 快速打开。 +- File Tree / Resource Tree / Page Tree 展开、选择、刷新、右键命令。 +- command enablement / context key。 + +参考组合: + +- Zed `project_search` + `file_finder` +- Lapce `global_search` + `file_explorer/data.rs` +- VS Code tree/list/contextkey 行为 + +验收口径: + +- 搜索结果能回到稳定 `WorkspacePath` / `ObjectIdentity`。 +- 文件树操作只发 command,不直接改真实对象。 +- 右键菜单和快捷键基于统一 command context,不在 UI 分支里临时判断。 + +### 6.2 P2:typed RPC、配置、keymap + +P2 解决的是边界清晰和长期可维护: + +- UI 到 Rust executor 的 typed request / response。 +- user / workspace / page / runtime policy 的配置合并。 +- 编辑器、树、command palette 的 keymap 加载和冲突处理。 + +参考组合: + +- Lapce `lapce-rpc/src/proxy.rs` +- Lapce `lapce-proxy/src/dispatch.rs` +- Lapce `config.rs` +- Lapce `keypress/loader.rs` +- VS Code settings / keybinding 行为 + +验收口径: + +- route / compat / worker 不再各自定义一套命令 payload。 +- 配置合并顺序可解释、可测试。 +- 快捷键归属到 command,不直接绑定到某个 DOM 事件分支。 + +### 6.3 P3:MultiBuffer、review diff、插件运行时 + +P3 只作为后续能力,不进入当前最前排。 + +可参考: + +- Zed `MultiBuffer`:搜索结果、AI 上下文、多文件 excerpt。 +- Zed agent edit session:review / apply / reject。 +- VS Code diff:冲突、review、保存体验。 +- Lapce plugin:轻量插件隔离。 + +当前边界: + +- 不实施流式 apply + suggest/review。 +- 不重建 VS Code extension host。 +- 不把 MNote 拉成通用 IDE。 + +### 6.4 SideX 专项采用边界 + +SideX 可以补强 P1 / P2,但不改变 P0 主线。 + +可以参考的部分: + +- `sidex-workspace` 的 crate 拆分:`file_tree / watcher / search / path_util / dirty_diff / multi_root`。 +- `src-tauri/src/commands/fs.rs` 的 command facade:前端请求先进入窄 command,再进入 Rust workspace 能力。 +- `src-tauri/src/commands/validation.rs` 的输入校验意识,但 MNote 需要更强的 workspace root / allowed roots / symlink escape 校验。 +- `sidex-keymap/context.rs` 的 `when` clause AST 和 evaluator,可作为 MNote command context 的 Rust 参考。 +- `sidex-settings/settings.rs` 的 default / user / workspace settings 分层,可作为 MNote user / workspace / page / AI policy 合并规则的早期参考。 +- `sidex-workspace/search.rs` 的 ignore-aware、rayon 并行全文搜索,可作为本地 Markdown workspace 搜索实现参考。 + +不应采用的部分: + +- 不采用“把 VS Code TypeScript workbench 原样移植到 Tauri”的产品路线。 +- 不把 MNote `3000` Rust Web 主壳替换成 Tauri desktop shell。 +- 不把 extension host / debugger / terminal / git 做成当前默认产品能力。 +- 不直接沿用 SideX 的绝对路径 command 安全模型;MNote 必须以 workspace identity、allowed roots、file version 和 agent permission 为准。 + +对 MNote 的实际帮助是: + +> **当我们从 VS Code 学到一个行为时,可以先看 SideX 是否已有 Rust crate / Tauri command 级别的落地方式;如果有,就用 SideX 校准“这个行为如何从 Node/Electron 能力迁移到 Rust 后端”,再按 MNote 的 kernel / projection / command contract 重写。** + +--- + +## 7. VS Code 仍应继续看的源码 + +虽然不建议转译 VS Code,但下面这些仍值得继续深读,因为它们定义了成熟编辑器的行为边界。 + +### 7.1 文件服务与保存冲突 + +重点: + +- `src/vs/platform/files` +- `src/vs/workbench/services/filesConfiguration` +- `textFileSaveErrorHandler` + +关注问题: + +- 文件不存在、权限失败、外部修改、编码变化、只读文件如何呈现。 +- dirty buffer 与磁盘版本冲突时如何让用户选择。 +- save / save as / revert 的命令边界。 + +### 7.2 Watcher 与外部变更 + +重点: + +- `workspaceWatcher` +- file service event。 + +关注问题: + +- 外部编辑器修改 `.md` 后如何刷新投影。 +- 当前 buffer dirty 时如何避免静默覆盖。 +- rename / delete / move 对打开 tab 和 file tree 的影响。 + +### 7.3 Context Key 与 Command Enablement + +重点: + +- `src/vs/platform/contextkey` +- `src/vs/platform/commands` + +关注问题: + +- 命令是否可用不应散落在 UI 条件判断里。 +- File Tree / Page Tree / Object Tab / Editor selection 应贡献统一 context。 +- 右键菜单、快捷键、command palette 应消费同一套 command context。 + +### 7.4 Tree / List 行为 + +重点: + +- `src/vs/base/browser/ui/list` +- `src/vs/base/browser/ui/tree` +- `src/vs/workbench/contrib/files` + +关注问题: + +- 展开、收起、选择、焦点、键盘导航。 +- DnD 和 rename 的边界。 +- open editors / file explorer 如何处理打开态与磁盘态。 + +--- + +## 8. 风险与边界 + +### 8.1 许可与代码来源边界 + +Zed、Lapce、VS Code 都只能作为参考来源。后续实现应遵循: + +- 不直接复制大段源码。 +- 不把第三方项目的 UI 壳、生命周期和产品概念搬进 MNote。 +- 引用具体设计时在设计稿或实现注释中标明“参考模式”,避免伪装成原创推导。 + +### 8.2 产品边界风险 + +MNote 不应因为参考 Zed / Lapce / VS Code 而变成通用 IDE。 + +必须保持: + +- 页面正文真相仍是 local-first `.md`。 +- Rust kernel 持有树、资源、投影、命令语义。 +- Page Aggregate 是页面主投影。 +- File Tree 是 local workspace 的组织投影。 +- Hermes / Reasonix agent 文件编辑必须受 allowed roots 和文件版本模型约束。 + +### 8.3 技术路线风险 + +最大风险不是“参考不够”,而是参考源混用后边界变模糊。 + +固定规则: + +- Zed 负责主架构参考。 +- Lapce 负责轻量实现参考。 +- SideX 负责 VS Code 行为到 Rust 后端的迁移参考。 +- VS Code 负责行为规格参考。 +- MNote 自己的 Rust kernel / projection / command contract 负责最终真相。 + +--- + +## 9. 当前建议结论 + +后续推进顺序建议固定为: + +1. **P0:`WorkspacePath / ProjectPath`、`WorktreeStore`、`BufferStore`、agent file edit permission。** +2. **P1:workspace search、file finder、file explorer state machine、command context。** +3. **P2:typed RPC / proxy、SideX-style Rust command facade、config、keymap。** +4. **P3:terminal / PTY 边界、MultiBuffer excerpt、review diff、插件运行时。** + +一句话结论: + +> **不要把 VS Code TypeScript 源码转译成 Rust;应以 Zed 的 Rust workspace / buffer / agent 架构为主参考,以 Lapce 的 typed RPC / proxy / doc delta 为辅助参考,以 SideX 校准 VS Code 行为迁移到 Rust 后端的落地方式,再用官方 VS Code 校准成熟编辑器行为。** diff --git a/design/05-editor-mainline/process/5-15-local-markdown-path-identity-unification-checklist-v1.md b/design/05-editor-mainline/process/5-15-local-markdown-path-identity-unification-checklist-v1.md new file mode 100644 index 00000000..5528d9fe --- /dev/null +++ b/design/05-editor-mainline/process/5-15-local-markdown-path-identity-unification-checklist-v1.md @@ -0,0 +1,135 @@ +# 5-15 本地 Markdown 路径身份统一 Checklist v1 + +## 背景 + +当前本地 Markdown 主链正在对齐 VS Code 文件模型:普通 `.md` 文件的运行时身份应来自文件资源地址,而不是 frontmatter 或 MNote 内部稳定 ID。 + +VS Code 参考: + +- `design/05-editor-mainline/reference-code/vscode/src/vs/platform/files/common/fileService.ts` + - `createFile(resource)` 以 `URI` 创建文件。 +- `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files/browser/fileCommands.ts` + - 新建文件后 `openEditor({ resource: saveUri })`。 +- `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts` + - `matches()` 使用 `isEqual(otherInput.resource, this.resource)`。 +- `design/05-editor-mainline/reference-code/vscode/src/vs/workbench/contrib/files/browser/editors/fileEditorHandler.ts` + - working copy 与 editor 是否同一打开项,比较 `workingCopy.resource` 与 `editor.resource`。 + +本阶段目标不是引入新的稳定语义 ID,而是先消除普通本地 Markdown runtime 中的多 ID 竞争。 + +## 身份原则 + +- 普通本地 Markdown 的真实身份是 `sourceKind + rootUri + relativePath`。 +- 对外 `documentId` 继续使用路径型短句柄:`local-md:`。 +- `mnote_id` 只作为已有 frontmatter 元数据保留,不参与普通本地 Markdown 的 `documentId` 决策。 +- `.mnote/page-ids.json` 只允许作为历史兼容/迁移辅助,不参与普通本地 Markdown 的主身份生成。 +- 不主动修改、删除或重写用户 Markdown frontmatter。 + +## 允许修改范围 + +- `rust/crates/mnote-web/src/routes/local_search_index.rs` +- `rust/crates/mnote-web/src/routes/local_folder_source.rs` +- 必要时更新直接相关测试: + - `rust/crates/mnote-web/src/routes/search.rs` + - `rust/crates/mnote-web/src/routes/tree.rs` + - `rust/crates/mnote-web/src/routes/documents.rs` + +不要修改用户数据目录,不要清理仓库中无关脏文件,不要做 git commit。 + +## P0 Checklist + +### 1. 搜索索引 documentId 与树形列表统一 + +- [ ] `local_search_index.rs` 中 `index_markdown_file()` 永远按 `relative_path` 生成 `local-md:`。 +- [ ] frontmatter `mnote_id` 不再生成 `local-mdid:*`。 +- [ ] 搜索结果、最近修改、反链接口返回的 Markdown `documentId` 与文件树一致。 +- [ ] 含 `mnote_id` 的 Markdown 搜索测试必须断言仍返回路径型 ID,例如 `local-md:docs~2Fchild.md`。 + +验收: + +```bash +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_search_index -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web search_local_index -- --nocapture +``` + +### 2. 清理本地 Markdown 身份生成的误导参数 + +- [ ] `local_markdown_page_id(relative_path, _mnote_id, _metadata)` 不再保留无用参数签名。 +- [ ] 普通调用点直接使用 `local_markdown_path_page_id(relative_path)` 或新的清晰命名函数。 +- [ ] 如果必须保留 legacy resolver,函数名必须包含 `legacy` / `compat`,并且不能参与普通本地 Markdown 主链。 + +验收: + +```bash +rg -n "local_markdown_page_id\\(|local-mdid|mnote_id|page-ids" rust/crates/mnote-web/src/routes/local_folder_source.rs rust/crates/mnote-web/src/routes/local_search_index.rs +``` + +期望: + +- `local_markdown_page_id(` 不应再出现在普通主链调用中。 +- `local_search_index.rs` 不应再出现 `local-mdid` 生成逻辑。 +- `mnote_id` 可以继续出现在解析、兼容测试或“保留 frontmatter”测试中,但不能参与普通 `documentId` 生成。 + +### 3. 不污染用户文件 + +- [ ] 新建本地 Markdown 不写 `mnote_id` frontmatter。 +- [ ] 复制本地 Markdown 不改写 `mnote_id`。 +- [ ] 保存已有 Markdown 时保留原 frontmatter,但不新增身份字段。 + +验收: + +```bash +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_tree_command_local_folder_lifecycle -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_aggregate_accepts_path_id_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_save -- --nocapture +``` + +## P1 Checklist + +### 4. 路径型身份覆盖打开/保存/搜索一致性 + +- [ ] 同一个含 `mnote_id` 的 `.md` 文件,在文件树、页面 aggregate、搜索索引中返回同一个 `local-md:`。 +- [ ] `documents.content.get` / 页面打开不再需要 `local-mdid:*` 才能命中文件。 +- [ ] rename/move 后新路径返回新的路径型 `documentId`,旧路径型 ID 不作为稳定页面 ID 保留。 + +验收: + +```bash +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_identity_uses_path_even_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_aggregate_accepts_path_id_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web tree_command_local_folder_lifecycle -- --nocapture +``` + +## 最终验收 + +```bash +cargo fmt --check --all --manifest-path rust/Cargo.toml +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_search_index -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web search_local_index -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_identity_uses_path_even_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_aggregate_accepts_path_id_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web tree_command_local_folder_lifecycle -- --nocapture +``` + +若涉及浏览器可见行为,Codex 复核阶段必须使用真实浏览器验证并将截图放在 `tmp/` 下。 + +## 执行状态(2026-05-19) + +- [x] P0-1 搜索索引 `documentId` 已统一为 `local-md:`,不再由 frontmatter `mnote_id` 生成 `local-mdid:*`。 +- [x] P0-2 普通本地 Markdown 主链已移除 `local_markdown_page_id(relative_path, _mnote_id, _metadata)` 误导签名,文件树、page aggregate、find-by-id 改用路径型 ID。 +- [x] P0-3 新建、复制、rename/move/restore/purge 普通本地 Markdown 不再写 `.mnote/page-ids.json`,也不再写入或改写 `mnote_id`。 +- [x] P1-4 rename/move 后返回新路径型 `documentId`,旧 ID 不再作为稳定页面 ID 保留。 +- [x] 追加清理:删除 `ParsedLocalMarkdownPage.mnote_id` 字段,避免后续代码重新把 frontmatter `mnote_id` 当身份入口。 + +已通过验收: + +```bash +cargo fmt --check --all --manifest-path rust/Cargo.toml +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_search_index -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web search_local_index -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_identity_uses_path_even_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_aggregate_accepts_path_id_when_frontmatter_has_mnote_id -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web local_page_id_initialization_returns_path_id_without_writing_page_ids -- --nocapture +cargo test --manifest-path rust/Cargo.toml -p mnote-web tree_command_local_folder -- --nocapture +``` + diff --git a/infra/convex/README.md b/infra/convex/README.md index e664f906..ca6d921e 100644 --- a/infra/convex/README.md +++ b/infra/convex/README.md @@ -4,6 +4,12 @@ 在 local-first 方案下,这套 Convex 自托管环境定位为控制面、cloud source、compat 和可选 sync replica 运行底座;页面正文、默认附件和本地 AI 会话全文不再以它作为早期产品默认数据真相。 +## 当前 functions 边界 + +- 仓库根 `convex/` 是当前 active Convex functions 部署源;目前只保留 `schema.ts` 与 `aiSessions.ts`,用于 ACP / Hermes runtime session store。 +- `recycle/wolai-frontend/convex/` 是退役前端随带的历史实现,不允许作为当前部署 fallback。仍需要的 `documents` / `mediaAssets` / `users` / `workspaces` 等旧 functions,必须明确迁回 active 区或移动到外部辅助区;不再使用的应正式退役。 +- `scripts/run-convex-deploy.js` 只从仓库根部署 `convex/`,缺少 active functions 时应失败,不应从 `recycle/` 回退。 + ## 启动 1. 确保仓库根目录 `.env.all` 存在(全局唯一 env 文件)。 @@ -32,10 +38,10 @@ docker compose exec backend ./generate_admin_key.sh ### 1) 验证 Convex functions 可用 -在 `wolai-frontend/` 执行: +当前根 `convex/` 只保留 ACP / Hermes runtime session store,部署前可先确认 active functions 文件存在: ```bash -npx convex dev --once --tail-logs disable --env-file ../.env.all --run ping:ping +test -f convex/schema.ts && test -f convex/aiSessions.ts ``` ### 2) 验证固定开发用户(阶段 3) diff --git a/local-markdown-gfm-design-checklist.png b/local-markdown-gfm-design-checklist.png deleted file mode 100644 index 10a677278f0e65ec50c5472ab0c0da5a3f6b64f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279998 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

?VbXu?T&5w4w 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�k1Li5yWikjV6J90{NXk({NS8^ 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ℜ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

w6!UgYgL>QcQt?U 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

R1S=DdN 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 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@electron/asar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", - "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@electron/asar/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@electron/asar/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@electron/asar/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@electron/fuses": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", - "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.1", - "fs-extra": "^9.0.1", - "minimist": "^1.2.5" - }, - "bin": { - "electron-fuses": "dist/bin.js" - } - }, - "node_modules/@electron/fuses/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/fuses/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/fuses/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@electron/notarize": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", - "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/notarize/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/notarize/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/notarize/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/osx-sign": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", - "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "compare-version": "^0.1.2", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "isbinaryfile": "^4.0.8", - "minimist": "^1.2.6", - "plist": "^3.0.5" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@electron/osx-sign/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/@electron/osx-sign/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/osx-sign/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/rebuild": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.4.tgz", - "integrity": "sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@malept/cross-spawn-promise": "^2.0.0", - "debug": "^4.1.1", - "node-abi": "^4.2.0", - "node-api-version": "^0.2.1", - "node-gyp": "^12.2.0", - "read-binary-file-arch": "^1.0.6" - }, - "bin": { - "electron-rebuild": "lib/cli.js" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/@electron/universal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", - "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@electron/asar": "^3.3.1", - "@malept/cross-spawn-promise": "^2.0.0", - "debug": "^4.3.1", - "dir-compare": "^4.2.0", - "fs-extra": "^11.1.1", - "minimatch": "^9.0.3", - "plist": "^3.1.0" - }, - "engines": { - "node": ">=16.4" - } - }, - "node_modules/@electron/universal/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@electron/universal/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@electron/universal/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@electron/universal/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/windows-sign": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", - "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "cross-dirname": "^0.1.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "minimist": "^1.2.8", - "postject": "^1.0.0-alpha.6" - }, - "bin": { - "electron-windows-sign": "bin/electron-windows-sign.js" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@electron/windows-sign/node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@electron/windows-sign/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/windows-sign/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", @@ -904,97 +455,6 @@ "node": ">=18" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@malept/cross-spawn-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", - "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/@playwright/test": { "version": "1.56.1", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", @@ -1011,838 +471,6 @@ "node": ">=18" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", - "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/verror": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", - "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/7zip-bin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", - "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/abbrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", - "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/app-builder-bin": { - "version": "5.0.0-alpha.12", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", - "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/app-builder-lib": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.8.1.tgz", - "integrity": "sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@develar/schema-utils": "~2.6.5", - "@electron/asar": "3.4.1", - "@electron/fuses": "^1.8.0", - "@electron/get": "^3.0.0", - "@electron/notarize": "2.5.0", - "@electron/osx-sign": "1.3.3", - "@electron/rebuild": "^4.0.3", - "@electron/universal": "2.0.3", - "@malept/flatpak-bundler": "^0.4.0", - "@types/fs-extra": "9.0.13", - "async-exit-hook": "^2.0.1", - "builder-util": "26.8.1", - "builder-util-runtime": "9.5.1", - "chromium-pickle-js": "^0.2.0", - "ci-info": "4.3.1", - "debug": "^4.3.4", - "dotenv": "^16.4.5", - "dotenv-expand": "^11.0.6", - "ejs": "^3.1.8", - "electron-publish": "26.8.1", - "fs-extra": "^10.1.0", - "hosted-git-info": "^4.1.0", - "isbinaryfile": "^5.0.0", - "jiti": "^2.4.2", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "lazy-val": "^1.0.5", - "minimatch": "^10.0.3", - "plist": "3.1.0", - "proper-lockfile": "^4.1.2", - "resedit": "^1.7.0", - "semver": "~7.7.3", - "tar": "^7.5.7", - "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0", - "which": "^5.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "dmg-builder": "26.8.1", - "electron-builder-squirrel-windows": "26.8.1" - } - }, - "node_modules/app-builder-lib/node_modules/@electron/get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", - "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/app-builder-lib/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "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/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "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", - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builder-util": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.8.1.tgz", - "integrity": "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.2.0", - "app-builder-bin": "5.0.0-alpha.12", - "builder-util-runtime": "9.5.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.6", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "js-yaml": "^4.1.0", - "sanitize-filename": "^1.6.3", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" - } - }, - "node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/builder-util/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/builder-util/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/convex": { "version": "1.39.1", "resolved": "https://registry.npmjs.org/convex/-/convex-1.39.1.tgz", @@ -1882,649 +510,6 @@ } } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/cross-dirname": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", - "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/dir-compare": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", - "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5", - "p-limit": "^3.1.0 " - } - }, - "node_modules/dir-compare/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/dir-compare/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/dir-compare/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dmg-builder": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.8.1.tgz", - "integrity": "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "app-builder-lib": "26.8.1", - "builder-util": "26.8.1", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" - } - }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dmg-builder/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/dmg-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "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==", - "dev": true, - "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/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron": { - "version": "34.5.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-34.5.8.tgz", - "integrity": "sha512-vxLD65mabTzYmEVa9KceMHM0+zO+vqgrhcyNVlmTd0IGV5J7XZ8v/qElm0o4YQ4wPeq7olZkUjZkBQQEdr23/g==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/electron-builder": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.8.1.tgz", - "integrity": "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "app-builder-lib": "26.8.1", - "builder-util": "26.8.1", - "builder-util-runtime": "9.5.1", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "dmg-builder": "26.8.1", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "simple-update-notifier": "2.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/electron-builder-squirrel-windows": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.8.1.tgz", - "integrity": "sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "app-builder-lib": "26.8.1", - "builder-util": "26.8.1", - "electron-winstaller": "5.4.0" - } - }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-builder/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-publish": { - "version": "26.8.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.8.1.tgz", - "integrity": "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/fs-extra": "^9.0.11", - "builder-util": "26.8.1", - "builder-util-runtime": "9.5.1", - "chalk": "^4.1.2", - "form-data": "^4.0.5", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" - } - }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-publish/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-publish/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-winstaller": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", - "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@electron/asar": "^3.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.21", - "temp": "^0.9.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "@electron/windows-sign": "^1.1.2" - } - }, - "node_modules/electron-winstaller/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/esbuild": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", @@ -2567,190 +552,6 @@ "@esbuild/win32-x64": "0.27.0" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "optional": true - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/filelist": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", - "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2766,996 +567,6 @@ "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, - "engines": { - "node": "^8.11.2 || >=10" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "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": "BSD-3-Clause", - "optional": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isbinaryfile": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", - "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", - "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "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/node-abi": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.31.0.tgz", - "integrity": "sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-api-version": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", - "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - } - }, - "node_modules/node-api-version/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.3.0.tgz", - "integrity": "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "undici": "^6.25.0", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/nopt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pe-library": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", - "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jet2jet" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, - "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/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/playwright": { "version": "1.56.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", @@ -3788,51 +599,6 @@ "node": ">=18" } }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/postject": { - "version": "1.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", - "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "commander": "^9.4.0" - }, - "bin": { - "postject": "dist/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/postject/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/prettier": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", @@ -3849,703 +615,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-binary-file-arch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", - "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "bin": { - "read-binary-file-arch": "cli.js" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resedit": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", - "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pe-library": "^0.4.1" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jet2jet" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sanitize-filename": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", - "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", - "dev": true, - "license": "WTFPL OR ISC", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/stat-mode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "7.5.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", - "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-file": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", - "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^10.0.0" - } - }, - "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/temp-file/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/temp-file/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/tiny-async-pool": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", - "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^5.5.0" - } - }, - "node_modules/tiny-async-pool/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "license": "WTFPL", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", - "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -4567,86 +636,6 @@ "optional": true } } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } } } diff --git a/package.json b/package.json index b9caab23..bb1d46c3 100644 --- a/package.json +++ b/package.json @@ -2,67 +2,16 @@ "name": "mnote-desktop", "version": "0.1.0", "private": true, - "main": "desktop-electron/main.js", "scripts": { "desktop": "node scripts/desktop-prod.js", "desktop:hot": "node scripts/desktop-hot.js", "dev:hot": "node scripts/dev-hot.js", - "desktop:local": "node scripts/desktop-local.js", - "desktop:electron": "node desktop-electron/dev-runner.js", - "check:local-first-convex-guard": "node scripts/check-local-first-convex-guard.js", - "build:desktop:next": "node scripts/prepare-desktop-next.js", - "dist:win": "pnpm run build:desktop:next && electron-builder --win nsis" + "check:local-first-convex-guard": "node scripts/check-local-first-convex-guard.js" }, "dependencies": {}, "devDependencies": { "@playwright/test": "^1.56.1", "convex": "^1.39.1", - "electron": "^34.0.0", - "electron-builder": "^26.0.12", "playwright": "^1.56.1" - }, - "build": { - "appId": "org.aichem.mnote", - "productName": "MNOTE", - "asar": true, - "directories": { - "output": "dist", - "buildResources": "desktop-electron/build" - }, - "files": [ - "package.json", - "desktop-electron/**", - "!desktop-electron/desktop-next{,/**}" - ], - "extraResources": [ - { - "from": "desktop-electron/desktop-next", - "to": "desktop-next", - "filter": [ - "**/*", - "!node_modules{,/**}" - ] - }, - { - "from": "desktop-electron/desktop-next/node_modules", - "to": "desktop-next/node_modules" - } - ], - "win": { - "target": [ - "nsis" - ] - }, - "nsis": { - "oneClick": false, - "allowToChangeInstallationDirectory": true, - "include": "desktop-electron/build/installer.nsh" - } - }, - "pnpm": { - "onlyBuiltDependencies": [ - "electron", - "electron-winstaller" - ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbca8216..43051271 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,61 +14,12 @@ importers: convex: specifier: ^1.39.1 version: 1.39.1 - electron: - specifier: ^34.0.0 - version: 34.5.8 - electron-builder: - specifier: ^26.0.12 - version: 26.4.0(electron-builder-squirrel-windows@26.4.0) playwright: specifier: ^1.56.1 version: 1.57.0 packages: - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - - '@electron/asar@3.4.1': - resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/fuses@1.8.0': - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true - - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - - '@electron/notarize@2.5.0': - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.3.3': - resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} - engines: {node: '>=12.0.0'} - hasBin: true - - '@electron/rebuild@4.0.1': - resolution: {integrity: sha512-iMGXb6Ib7H/Q3v+BKZJoETgF9g6KMNZVbsO4b7Dmpgb5qTFqyFTzqW9F3TOSHdybv2vKYKzSS9OiZL+dcJb+1Q==} - engines: {node: '>=22.12.0'} - hasBin: true - - '@electron/universal@2.0.3': - resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} - engines: {node: '>=16.4'} - - '@electron/windows-sign@1.2.2': - resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} - engines: {node: '>=14.14'} - hasBin: true - '@esbuild/aix-ppc64@0.27.0': resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} engines: {node: '>=18'} @@ -225,281 +176,11 @@ packages: cpu: [x64] os: [win32] - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} - - '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} - - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@playwright/test@1.57.0': resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} engines: {node: '>=18'} hasBin: true - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@20.19.28': - resolution: {integrity: sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==} - - '@types/node@25.0.6': - resolution: {integrity: sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==} - - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} - engines: {node: '>=10.0.0'} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.4.0: - resolution: {integrity: sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.4.0 - electron-builder-squirrel-windows: 26.4.0 - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} - engines: {node: '>=12.0.0'} - - builder-util@26.3.4: - resolution: {integrity: sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ==} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - convex@1.39.1: resolution: {integrity: sha512-W+gVXA7BpRF1xLlS1kGTtKVaqd5yonqbGESKiPtIUXjV744GdDz8IG7RVsSY5KzHbgxuJBHKaJYk+92OIHTskQ==} engines: {node: '>=18.0.0', npm: '>=7.0.0'} @@ -519,627 +200,16 @@ packages: react: optional: true - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - - dmg-builder@26.4.0: - resolution: {integrity: sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-builder-squirrel-windows@26.4.0: - resolution: {integrity: sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w==} - - electron-builder@26.4.0: - resolution: {integrity: sha512-FCUqvdq2AULL+Db2SUGgjOYTbrgkPxZtCjqIZGnjH9p29pTWyesQqBIfvQBKa6ewqde87aWl49n/WyI/NyUBog==} - engines: {node: '>=14.0.0'} - hasBin: true - - electron-publish@26.3.4: - resolution: {integrity: sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A==} - - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - - electron@34.5.8: - resolution: {integrity: sha512-vxLD65mabTzYmEVa9KceMHM0+zO+vqgrhcyNVlmTd0IGV5J7XZ8v/qElm0o4YQ4wPeq7olZkUjZkBQQEdr23/g==} - engines: {node: '>= 12.20.55'} - hasBin: true - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild@0.27.0: resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} engines: {node: '>=18'} hasBin: true - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - exponential-backoff@3.1.3: - resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - node-abi@4.24.0: - resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} - engines: {node: '>=22.12.0'} - - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - - node-api-version@0.2.1: - resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - pe-library@0.4.1: - resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} - engines: {node: '>=12', npm: '>=6'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - playwright-core@1.57.0: resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} engines: {node: '>=18'} @@ -1150,290 +220,11 @@ packages: engines: {node: '>=18'} hasBin: true - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} - - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - prettier@3.8.3: resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resedit@1.7.2: - resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} - engines: {node: '>=12', npm: '>=6'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} - engines: {node: '>=18'} - - temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - - tiny-async-pool@1.3.0: - resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - utf8-byte-length@1.0.5: - resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -1446,132 +237,8 @@ packages: utf-8-validate: optional: true - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - snapshots: - 7zip-bin@5.2.0: {} - - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - '@electron/asar@3.4.1': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/fuses@1.8.0': - dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 - - '@electron/get@2.0.3': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/osx-sign@1.3.3': - dependencies: - compare-version: 0.1.2 - debug: 4.4.3 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/rebuild@4.0.1': - dependencies: - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.3 - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.24.0 - node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.3 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - '@electron/universal@2.0.3': - dependencies: - '@electron/asar': 3.4.1 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - dir-compare: 4.2.0 - fs-extra: 11.3.3 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/windows-sign@1.2.2': - dependencies: - cross-dirname: 0.1.0 - debug: 4.4.3 - fs-extra: 11.3.3 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 - transitivePeerDependencies: - - supports-color - optional: true - '@esbuild/aix-ppc64@0.27.0': optional: true @@ -1650,347 +317,10 @@ snapshots: '@esbuild/win32-x64@0.27.0': optional: true - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@malept/cross-spawn-promise@2.0.0': - dependencies: - cross-spawn: 7.0.6 - - '@malept/flatpak-bundler@0.4.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - lodash: 4.17.21 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color - - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.3 - - '@pkgjs/parseargs@0.11.0': - optional: true - '@playwright/test@1.57.0': dependencies: playwright: 1.57.0 - '@sindresorhus/is@4.6.0': {} - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 20.19.28 - '@types/responselike': 1.0.3 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 25.0.6 - - '@types/http-cache-semantics@4.0.4': {} - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 20.19.28 - - '@types/ms@2.1.0': {} - - '@types/node@20.19.28': - dependencies: - undici-types: 6.21.0 - - '@types/node@25.0.6': - dependencies: - undici-types: 7.16.0 - - '@types/plist@3.0.5': - dependencies: - '@types/node': 25.0.6 - xmlbuilder: 15.1.1 - optional: true - - '@types/responselike@1.0.3': - dependencies: - '@types/node': 20.19.28 - - '@types/verror@1.10.11': - optional: true - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 20.19.28 - optional: true - - '@xmldom/xmldom@0.8.11': {} - - abbrev@3.0.1: {} - - agent-base@7.1.4: {} - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.1 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chromium-pickle-js: 0.2.0 - ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.4.0(dmg-builder@26.4.0) - electron-publish: 26.3.4 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.1.1 - plist: 3.1.0 - resedit: 1.7.2 - semver: 7.7.3 - tar: 6.2.1 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - argparse@2.0.1: {} - - assert-plus@1.0.0: - optional: true - - astral-regex@2.0.0: - optional: true - - async-exit-hook@2.0.1: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - at-least-node@1.0.0: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - boolean@3.2.0: - optional: true - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - buffer-crc32@0.2.13: {} - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builder-util-runtime@9.5.1: - dependencies: - debug: 4.4.3 - sax: 1.4.4 - transitivePeerDependencies: - - supports-color - - builder-util@26.3.4: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 - sanitize-filename: 1.6.3 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.5.0 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.2 - unique-filename: 4.0.0 - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chownr@2.0.0: {} - - chownr@3.0.0: {} - - chromium-pickle-js@0.2.0: {} - - ci-info@4.3.1: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@5.1.0: {} - - commander@9.5.0: - optional: true - - compare-version@0.1.2: {} - - concat-map@0.0.1: {} - convex@1.39.1: dependencies: esbuild: 0.27.0 @@ -2000,199 +330,6 @@ snapshots: - bufferutil - utf-8-validate - core-util-is@1.0.2: - optional: true - - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - - cross-dirname@0.1.0: - optional: true - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true - - delayed-stream@1.0.0: {} - - detect-libc@2.1.2: {} - - detect-node@2.1.0: - optional: true - - dir-compare@4.2.0: - dependencies: - minimatch: 3.1.2 - p-limit: 3.1.0 - - dmg-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-builder-squirrel-windows@26.4.0(dmg-builder@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - dmg-builder - - supports-color - - electron-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - ci-info: 4.3.1 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - fs-extra: 10.1.0 - lazy-val: 1.0.5 - simple-update-notifier: 2.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - electron-publish@26.3.4: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - form-data: 4.0.5 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - - electron-winstaller@5.4.0: - dependencies: - '@electron/asar': 3.4.1 - debug: 4.4.3 - fs-extra: 7.0.1 - lodash: 4.17.21 - temp: 0.9.4 - optionalDependencies: - '@electron/windows-sign': 1.2.2 - transitivePeerDependencies: - - supports-color - - electron@34.5.8: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 20.19.28 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - env-paths@2.2.1: {} - - err-code@2.0.3: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es6-error@4.1.1: - optional: true - esbuild@0.27.0: optionalDependencies: '@esbuild/aix-ppc64': 0.27.0 @@ -2222,502 +359,9 @@ snapshots: '@esbuild/win32-ia32': 0.27.0 '@esbuild/win32-x64': 0.27.0 - escalade@3.2.0: {} - - escape-string-regexp@4.0.0: - optional: true - - exponential-backoff@3.1.3: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - - fast-deep-equal@3.1.3: {} - - fast-json-stable-stringify@2.1.0: {} - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true - function-bind@1.1.2: {} - - get-caller-file@2.0.5: {} - - 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 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.3 - serialize-error: 7.0.1 - optional: true - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - - gopd@1.2.0: {} - - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - http-cache-semantics@4.2.0: {} - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ip-address@10.1.0: {} - - is-fullwidth-code-point@3.0.0: {} - - is-interactive@1.0.0: {} - - is-unicode-supported@0.1.0: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.7: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - - jiti@2.6.1: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stringify-safe@5.0.1: - optional: true - - json5@2.2.3: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - lazy-val@1.0.5: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - - math-intrinsics@1.1.0: {} - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@2.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - - ms@2.1.3: {} - - negotiator@1.0.0: {} - - node-abi@4.24.0: - dependencies: - semver: 7.7.3 - - node-addon-api@1.7.2: - optional: true - - node-api-version@0.2.1: - dependencies: - semver: 7.7.3 - - node-gyp@11.5.0: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 - semver: 7.7.3 - tar: 7.5.2 - tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - normalize-url@6.1.0: {} - - object-keys@1.1.1: - optional: true - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - p-cancelable@2.1.1: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-map@7.0.4: {} - - package-json-from-dist@1.0.1: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - pe-library@0.4.1: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - playwright-core@1.57.0: {} playwright@1.57.0: @@ -2726,323 +370,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - plist@3.1.0: - dependencies: - '@xmldom/xmldom': 0.8.11 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - - postject@1.0.0-alpha.6: - dependencies: - commander: 9.5.0 - optional: true - prettier@3.8.3: {} - proc-log@5.0.0: {} - - progress@2.0.3: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - punycode@2.3.1: {} - - quick-lru@5.1.1: {} - - read-binary-file-arch@1.0.6: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - require-directory@2.1.1: {} - - resedit@1.7.2: - dependencies: - pe-library: 0.4.1 - - resolve-alpn@1.2.1: {} - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry@0.12.0: {} - - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - - sax@1.4.4: {} - - semver-compare@1.0.0: - optional: true - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.3: {} - - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.3 - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - sprintf-js@1.1.3: - optional: true - - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stat-mode@1.0.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - sumchecker@3.0.1: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tar@7.5.2: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - temp-file@3.4.0: - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - - temp@0.9.4: - dependencies: - mkdirp: 0.5.6 - rimraf: 2.6.3 - - tiny-async-pool@1.3.0: - dependencies: - semver: 5.7.2 - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.5 - - tmp@0.2.5: {} - - truncate-utf8-bytes@1.0.2: - dependencies: - utf8-byte-length: 1.0.5 - - type-fest@0.13.1: - optional: true - - undici-types@6.21.0: {} - - undici-types@7.16.0: {} - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - universalify@0.1.2: {} - - universalify@2.0.1: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - utf8-byte-length@1.0.5: {} - - util-deprecate@1.0.2: {} - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@5.0.0: - dependencies: - isexe: 3.1.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - ws@8.18.0: {} - - xmlbuilder@15.1.1: {} - - y18n@5.0.8: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yocto-queue@0.1.0: {} diff --git a/rust/Cargo.lock b/rust/Cargo.lock index a71c6602..b276a942 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1617,6 +1617,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "oco_ref" version = "0.2.1" @@ -2604,7 +2613,9 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", + "libc", "num-conv", + "num_threads", "powerfmt", "serde_core", "time-core", diff --git a/rust/crates/core-protocol/src/command.rs b/rust/crates/core-protocol/src/command.rs index 1727d8a2..935a9fe2 100644 --- a/rust/crates/core-protocol/src/command.rs +++ b/rust/crates/core-protocol/src/command.rs @@ -188,3 +188,645 @@ pub struct EmbedBlock { pub struct DeleteBlock { pub block_id: String, } + +// ── CommandContext / when clause ──────────────────────────────────── + +/// CommandContext — 命令执行上下文的 key-value 集合。 +/// +/// 对应 VS Code 的 context key 概念。每个 key 表示当前 UI/workspace/editor 的状态片段。 +/// 菜单项、快捷键、按钮的 enablement 通过 `when` 表达式对 context 求值得到。 +/// +/// 第一阶段支持 key 列表: +/// - `workspace.sourceKind` — 工作区类型 ("local_folder" | "convex" | ...) +/// - `workspace.readonly` — bool,工作区是否只读 +/// - `tree.focusKind` — 当前聚焦的树类型 ("file_tree" | "page_tree" | "none") +/// - `tree.selectionCount` — 当前选中行数 (i64) +/// - `tree.selectionResourceKind` — 选中资源的类型 ("page" | "folder" | "mindmap" | "asset" | ...) +/// - `editor.dirty` — bool,当前编辑器是否有未保存修改 +/// - `editor.hasSelection` — bool,编辑器是否有文本选区 +/// - `ai.canWrite` — bool,当前会话是否允许 AI 写入 +#[derive(Debug, Clone, PartialEq)] +pub struct CommandContext { + /// 工作区来源类型 + pub workspace_source_kind: Option, + /// 工作区是否只读 + pub workspace_readonly: bool, + /// 树焦点类型 + pub tree_focus_kind: Option, + /// 树选择计数 + pub tree_selection_count: i64, + /// 选择资源的 kind + pub tree_selection_resource_kind: Option, + /// 编辑器是否 dirty + pub editor_dirty: bool, + /// 编辑器是否有选区 + pub editor_has_selection: bool, + /// AI 是否可写 + pub ai_can_write: bool, +} + +impl CommandContext { + pub fn new() -> Self { + Self { + workspace_source_kind: None, + workspace_readonly: false, + tree_focus_kind: None, + tree_selection_count: 0, + tree_selection_resource_kind: None, + editor_dirty: false, + editor_has_selection: false, + ai_can_write: true, + } + } + + /// 获取命名 context key 的值(用于 when 表达式求值)。 + pub fn get(&self, key: &str) -> Option { + match key { + "workspace.sourceKind" => self + .workspace_source_kind + .as_deref() + .map(|s| CommandContextValue::String(s.to_string())), + "workspace.readonly" => Some(CommandContextValue::Bool(self.workspace_readonly)), + "tree.focusKind" => self + .tree_focus_kind + .as_deref() + .map(|s| CommandContextValue::String(s.to_string())), + "tree.selectionCount" => Some(CommandContextValue::Number(self.tree_selection_count)), + "tree.selectionResourceKind" => self + .tree_selection_resource_kind + .as_deref() + .map(|s| CommandContextValue::String(s.to_string())), + "editor.dirty" => Some(CommandContextValue::Bool(self.editor_dirty)), + "editor.hasSelection" => Some(CommandContextValue::Bool(self.editor_has_selection)), + "ai.canWrite" => Some(CommandContextValue::Bool(self.ai_can_write)), + _ => None, + } + } + + /// 用 builder 模式设置 workspace 只读。 + pub fn with_workspace_readonly(mut self, readonly: bool) -> Self { + self.workspace_readonly = readonly; + self + } + + /// 用 builder 模式设置 workspace source kind。 + pub fn with_workspace_source_kind(mut self, kind: &str) -> Self { + self.workspace_source_kind = Some(kind.to_string()); + self + } + + /// 用 builder 模式设置 tree focus kind。 + pub fn with_tree_focus_kind(mut self, kind: &str) -> Self { + self.tree_focus_kind = Some(kind.to_string()); + self + } + + /// 用 builder 模式设置 tree selection count。 + pub fn with_tree_selection_count(mut self, count: i64) -> Self { + self.tree_selection_count = count; + self + } + + /// 用 builder 模式设置 selection resource kind。 + pub fn with_tree_selection_resource_kind(mut self, kind: &str) -> Self { + self.tree_selection_resource_kind = Some(kind.to_string()); + self + } + + /// 用 builder 模式设置 editor dirty。 + pub fn with_editor_dirty(mut self, dirty: bool) -> Self { + self.editor_dirty = dirty; + self + } + + /// 用 builder 模式设置 editor has selection。 + pub fn with_editor_has_selection(mut self, has_selection: bool) -> Self { + self.editor_has_selection = has_selection; + self + } + + /// 用 builder 模式设置 ai can write。 + pub fn with_ai_can_write(mut self, can_write: bool) -> Self { + self.ai_can_write = can_write; + self + } +} + +impl Default for CommandContext { + fn default() -> Self { + Self::new() + } +} + +/// 命令上下文中的值类型。 +#[derive(Debug, Clone, PartialEq)] +pub enum CommandContextValue { + Bool(bool), + Number(i64), + String(String), +} + +impl CommandContextValue { + fn as_bool(&self) -> Option { + match self { + CommandContextValue::Bool(b) => Some(*b), + _ => None, + } + } + + fn as_string(&self) -> Option<&str> { + match self { + CommandContextValue::String(s) => Some(s.as_str()), + _ => None, + } + } +} + +/// WhenExprToken — when 表达式的最小 token 类型。 +#[derive(Debug, Clone, PartialEq)] +pub enum WhenExprToken { + /// `key` + Key(String), + /// `!key` + NotKey(String), + /// `key == value` + Equal(String, String), + /// `key != value` + NotEqual(String, String), + /// `&&` + And, + /// `||` + Or, + /// `(` ... `)` + LParen, + RParen, +} + +/// WhenExpr — when 表达式的 AST 节点。 +/// 支持:`key`、`!key`、`key == value`、`key != value`、`&&`、`||`、括号分组。 +#[derive(Debug, Clone, PartialEq)] +pub enum WhenExprNode { + Key(String), + NotKey(String), + Equal(String, String), + NotEqual(String, String), + And(Box, Box), + Or(Box, Box), +} + +/// 简单的递归下降 when 表达式解析器。 +/// 语法: +/// expr = or_expr +/// or_expr = and_expr ("||" and_expr)* +/// and_expr = primary ("&&" primary)* +/// primary = "(" expr ")" | "!" key | "key == value" | "key != value" | key +pub fn parse_when_expr(input: &str) -> Result { + let tokens = tokenize(input)?; + let (node, rest) = parse_or(&tokens)?; + if !rest.is_empty() { + return Err(format!("when 表达式末尾有多余 token: {:?}", rest)); + } + Ok(node) +} + +fn tokenize(input: &str) -> Result, String> { + let mut tokens = Vec::new(); + let mut chars = input.chars().peekable(); + + while let Some(&ch) = chars.peek() { + if ch.is_whitespace() { + chars.next(); + continue; + } + match ch { + '(' => { + chars.next(); + tokens.push(WhenExprToken::LParen); + } + ')' => { + chars.next(); + tokens.push(WhenExprToken::RParen); + } + '!' => { + chars.next(); + // ! 后面跟 key(不能是 "(") + let key = read_identifier(&mut chars)?; + tokens.push(WhenExprToken::NotKey(key)); + } + '|' => { + chars.next(); + if chars.next() == Some('|') { + tokens.push(WhenExprToken::Or); + } else { + return Err("期望 || 运算符,但只看到一个 |".to_string()); + } + } + '&' => { + chars.next(); + if chars.next() == Some('&') { + tokens.push(WhenExprToken::And); + } else { + return Err("期望 && 运算符,但只看到一个 &".to_string()); + } + } + '=' => { + return Err("意外的 = 符号,应为 ==".to_string()); + } + _ if is_ident_start(ch) => { + let key = read_identifier(&mut chars)?; + // 检查后面是否跟着 == 或 != + let mut next_chars = chars.clone(); + let after_ws = next_chars.find(|c| !c.is_whitespace()); + let is_comparison = matches!(after_ws, Some('=') | Some('!')); + if is_comparison { + // 跳过空白 + while chars.peek().map_or(false, |c| c.is_whitespace()) { + chars.next(); + } + let op_start = chars.next(); // = or ! + let op_next = chars.next(); // = + if op_start == Some('=') && op_next == Some('=') { + // == + while chars.peek().map_or(false, |c| c.is_whitespace()) { + chars.next(); + } + let value = read_value(&mut chars)?; + tokens.push(WhenExprToken::Equal(key, value)); + } else if op_start == Some('!') && op_next == Some('=') { + // != + while chars.peek().map_or(false, |c| c.is_whitespace()) { + chars.next(); + } + let value = read_value(&mut chars)?; + tokens.push(WhenExprToken::NotEqual(key, value)); + } else { + return Err(format!("key '{}' 后面的运算符需为 == 或 !=", key)); + } + } else { + tokens.push(WhenExprToken::Key(key)); + } + } + _ => { + return Err(format!("意外的字符: '{}'", ch)); + } + } + } + + Ok(tokens) +} + +fn read_identifier(chars: &mut std::iter::Peekable) -> Result { + let mut ident = String::new(); + while let Some(&ch) = chars.peek() { + if ch.is_alphanumeric() || ch == '_' || ch == '.' { + ident.push(ch); + chars.next(); + } else { + break; + } + } + if ident.is_empty() { + return Err("期望标识符".to_string()); + } + Ok(ident) +} + +fn read_value(chars: &mut std::iter::Peekable) -> Result { + let mut value = String::new(); + // 跳过空白 (已经在调用前跳过了) + // 检查是否有引号 + if chars.peek() == Some(&'"') || chars.peek() == Some(&'\'') { + let quote = chars.next().unwrap(); + while let Some(&ch) = chars.peek() { + if ch == quote { + chars.next(); + return Ok(value); + } + value.push(ch); + chars.next(); + } + return Err("未闭合的引号".to_string()); + } + // 无引号值:读取到下一个空白或运算符为止 + while let Some(&ch) = chars.peek() { + if ch.is_whitespace() || ch == ')' || ch == '|' || ch == '&' { + break; + } + value.push(ch); + chars.next(); + } + if value.is_empty() { + return Err("期望值".to_string()); + } + Ok(value) +} + +fn is_ident_start(ch: char) -> bool { + ch.is_ascii_alphabetic() || ch == '_' +} + +fn parse_or<'a>( + tokens: &'a [WhenExprToken], +) -> Result<(WhenExprNode, &'a [WhenExprToken]), String> { + let (mut left, mut rest) = parse_and(tokens)?; + while let Some(WhenExprToken::Or) = rest.first() { + rest = &rest[1..]; + let (right, new_rest) = parse_and(rest)?; + left = WhenExprNode::Or(Box::new(left), Box::new(right)); + rest = new_rest; + } + Ok((left, rest)) +} + +fn parse_and<'a>( + tokens: &'a [WhenExprToken], +) -> Result<(WhenExprNode, &'a [WhenExprToken]), String> { + let (mut left, mut rest) = parse_primary(tokens)?; + while let Some(WhenExprToken::And) = rest.first() { + rest = &rest[1..]; + let (right, new_rest) = parse_primary(rest)?; + left = WhenExprNode::And(Box::new(left), Box::new(right)); + rest = new_rest; + } + Ok((left, rest)) +} + +fn parse_primary<'a>( + tokens: &'a [WhenExprToken], +) -> Result<(WhenExprNode, &'a [WhenExprToken]), String> { + if let Some(token) = tokens.first() { + match token { + WhenExprToken::Key(key) => Ok((WhenExprNode::Key(key.clone()), &tokens[1..])), + WhenExprToken::NotKey(key) => Ok((WhenExprNode::NotKey(key.clone()), &tokens[1..])), + WhenExprToken::Equal(key, value) => Ok(( + WhenExprNode::Equal(key.clone(), value.clone()), + &tokens[1..], + )), + WhenExprToken::NotEqual(key, value) => Ok(( + WhenExprNode::NotEqual(key.clone(), value.clone()), + &tokens[1..], + )), + WhenExprToken::LParen => { + let (node, rest) = parse_or(&tokens[1..])?; + if let Some(WhenExprToken::RParen) = rest.first() { + Ok((node, &rest[1..])) + } else { + Err("缺少闭合的 ')'".to_string()) + } + } + _ => Err(format!("期望表达式,得到 {:?}", token)), + } + } else { + Err("期望表达式,但没有更多 token".to_string()) + } +} + +/// 对 `CommandContext` 求值一个 when 表达式。 +pub fn evaluate_when(ctx: &CommandContext, expr: &WhenExprNode) -> bool { + match expr { + WhenExprNode::Key(key) => ctx.get(key).map_or(false, |v| match v { + CommandContextValue::Bool(b) => b, + CommandContextValue::Number(n) => n != 0, + CommandContextValue::String(s) => !s.is_empty(), + }), + WhenExprNode::NotKey(key) => !ctx.get(key).map_or(false, |v| match v { + CommandContextValue::Bool(b) => b, + CommandContextValue::Number(n) => n != 0, + CommandContextValue::String(s) => !s.is_empty(), + }), + WhenExprNode::Equal(key, expected) => ctx.get(key).map_or(false, |v| { + v.as_string().map_or(false, |s| s == expected) + || expected + .parse::() + .ok() + .is_some_and(|expected_number| { + matches!(v, CommandContextValue::Number(n) if n == expected_number) + }) + || v.as_bool().map_or(false, |b| { + expected == "true" && b || expected == "false" && !b + }) + }), + WhenExprNode::NotEqual(key, expected) => ctx.get(key).map_or(true, |v| { + v.as_string().map_or(true, |s| s != expected) + && expected + .parse::() + .ok() + .is_none_or(|expected_number| { + !matches!(v, CommandContextValue::Number(n) if n == expected_number) + }) + && v.as_bool().map_or(true, |b| { + !(expected == "true" && b || expected == "false" && !b) + }) + }), + WhenExprNode::And(left, right) => evaluate_when(ctx, left) && evaluate_when(ctx, right), + WhenExprNode::Or(left, right) => evaluate_when(ctx, left) || evaluate_when(ctx, right), + } +} + +/// 解析并求值一条 when 表达式字符串。 +pub fn check_when(ctx: &CommandContext, when_expr: &str) -> Result { + let expr = parse_when_expr(when_expr)?; + Ok(evaluate_when(ctx, &expr)) +} + +/// 检查一个命令在指定上下文中是否应 enabled。 +/// 如果 when 表达式为 None 或空,默认返回 true。 +pub fn is_command_enabled(ctx: &CommandContext, when: Option<&str>) -> bool { + match when { + None | Some("") => true, + Some(expr) => check_when(ctx, expr).unwrap_or(true), + } +} + +#[cfg(test)] +mod command_context_tests { + use super::*; + + #[test] + fn command_context_when_clause() { + let ctx = CommandContext::new() + .with_workspace_readonly(false) + .with_workspace_source_kind("local_folder") + .with_tree_focus_kind("file_tree") + .with_tree_selection_count(1) + .with_tree_selection_resource_kind("page") + .with_editor_dirty(false) + .with_ai_can_write(true); + + // 基础 key 表达式(bool) + assert!(check_when(&ctx, "ai.canWrite").unwrap()); + assert!(!check_when(&ctx, "editor.dirty").unwrap()); + assert!(!check_when(&ctx, "workspace.readonly").unwrap()); + + // !key + assert!(check_when(&ctx, "!editor.dirty").unwrap()); + assert!(!check_when(&ctx, "!ai.canWrite").unwrap()); + + // key == value + assert!(check_when(&ctx, "tree.focusKind == file_tree").unwrap()); + assert!(!check_when(&ctx, "tree.focusKind == page_tree").unwrap()); + + // key != value + assert!(check_when(&ctx, "tree.focusKind != page_tree").unwrap()); + assert!(!check_when(&ctx, "tree.focusKind != file_tree").unwrap()); + + // && 组合 + assert!(check_when(&ctx, "ai.canWrite && !workspace.readonly").unwrap()); + assert!(!check_when(&ctx, "ai.canWrite && workspace.readonly").unwrap()); + assert!(!check_when(&ctx, "editor.dirty && ai.canWrite").unwrap()); + + // || 组合 + assert!(check_when(&ctx, "editor.dirty || ai.canWrite").unwrap()); + assert!(!check_when(&ctx, "editor.dirty || workspace.readonly").unwrap()); + + // 括号分组 + assert!(check_when(&ctx, "(ai.canWrite && !workspace.readonly) || editor.dirty").unwrap()); + assert!(!check_when(&ctx, "editor.dirty && (ai.canWrite || workspace.readonly)").unwrap()); + } + + #[test] + fn command_context_disables_write_commands_for_readonly_workspace() { + let write_commands = vec![ + ( + "tree.node.create", + Some("!workspace.readonly && ai.canWrite"), + ), + ("tree.node.rename", Some("!workspace.readonly")), + ("tree.node.delete", Some("!workspace.readonly")), + ("tree.node.move", Some("!workspace.readonly")), + ]; + + let ctx_readonly = CommandContext::new() + .with_workspace_readonly(true) + .with_ai_can_write(true); + + let ctx_writable = CommandContext::new() + .with_workspace_readonly(false) + .with_ai_can_write(true); + + for (_name, when) in &write_commands { + // 只读上下文应禁用所有写命令 + assert!( + !is_command_enabled(&ctx_readonly, *when), + "只读上下文不应启用命令 {:?}", + _name + ); + // 可写上下文应启用 + assert!( + is_command_enabled(&ctx_writable, *when), + "可写上下文应启用命令 {:?}", + _name + ); + } + } + + #[test] + fn command_context_filters_resource_commands_by_kind() { + let folder_commands = vec![ + ("tree.node.create", Some("tree.focusKind == file_tree")), + ( + "tree.folder.rename", + Some("tree.selectionResourceKind == folder"), + ), + ]; + let page_commands = vec![ + ("page.open", Some("tree.selectionResourceKind == page")), + ("page.delete", Some("tree.selectionResourceKind == page")), + ]; + let mindmap_commands = vec![( + "mindmap.open", + Some("tree.selectionResourceKind == mindmap"), + )]; + + let ctx_folder = CommandContext::new() + .with_tree_focus_kind("file_tree") + .with_tree_selection_resource_kind("folder") + .with_tree_selection_count(1); + + let ctx_page = CommandContext::new() + .with_tree_focus_kind("file_tree") + .with_tree_selection_resource_kind("page") + .with_tree_selection_count(1); + + let ctx_mindmap = CommandContext::new() + .with_tree_focus_kind("file_tree") + .with_tree_selection_resource_kind("mindmap") + .with_tree_selection_count(1); + + // folder 上下文 + for (_name, when) in &folder_commands { + assert!( + is_command_enabled(&ctx_folder, *when), + "folder ctx 应启用命令 {:?}", + _name + ); + } + for (_name, when) in &page_commands { + assert!( + !is_command_enabled(&ctx_folder, *when), + "folder ctx 不应启用 page 命令 {:?}", + _name + ); + } + + // page 上下文 + for (_name, when) in &page_commands { + assert!( + is_command_enabled(&ctx_page, *when), + "page ctx 应启用 page 命令 {:?}", + _name + ); + } + assert!( + !is_command_enabled(&ctx_page, Some("tree.selectionResourceKind == mindmap")), + "page ctx 不应启用 mindmap 命令" + ); + + // mindmap 上下文 + for (_name, when) in &mindmap_commands { + assert!( + is_command_enabled(&ctx_mindmap, *when), + "mindmap ctx 应启用 mindmap 命令 {:?}", + _name + ); + } + } + + #[test] + fn command_context_default_is_allow() { + let ctx = CommandContext::new(); + // 没有 when 表达式 → true + assert!(is_command_enabled(&ctx, None)); + assert!(is_command_enabled(&ctx, Some(""))); + } + + #[test] + fn command_context_number_comparison() { + let ctx = CommandContext::new().with_tree_selection_count(3); + + // 数字值在 bool 语境下:非零为 true + assert!(check_when(&ctx, "tree.selectionCount").unwrap()); + assert!(check_when(&ctx, "tree.selectionCount == 3").unwrap()); + assert!(check_when(&ctx, "tree.selectionCount != 1").unwrap()); + assert!(!check_when(&ctx, "tree.selectionCount == 1").unwrap()); + let ctx_zero = CommandContext::new().with_tree_selection_count(0); + assert!(!check_when(&ctx_zero, "tree.selectionCount").unwrap()); + assert!(check_when(&ctx_zero, "tree.selectionCount == 0").unwrap()); + } + + #[test] + fn command_context_parse_error_returns_default() { + let ctx = CommandContext::new(); + // 解析错误 → is_command_enabled 返回 true(默认允许) + assert!(is_command_enabled(&ctx, Some("invalid syntax &&&"))); + } + + #[test] + fn command_context_ai_can_write_gates_ai_actions() { + let ctx_can_write = CommandContext::new().with_ai_can_write(true); + let ctx_readonly = CommandContext::new().with_ai_can_write(false); + + assert!(is_command_enabled(&ctx_can_write, Some("ai.canWrite"))); + assert!(!is_command_enabled(&ctx_readonly, Some("ai.canWrite"))); + } +} diff --git a/rust/crates/core-protocol/src/lib.rs b/rust/crates/core-protocol/src/lib.rs index 363f3b01..f000fdc6 100644 --- a/rust/crates/core-protocol/src/lib.rs +++ b/rust/crates/core-protocol/src/lib.rs @@ -15,11 +15,12 @@ pub use ai::{ AiShareContext, AiStructuredWriteKind, AiStructuredWriteResult, AiToolCall, }; pub use command::{ - CommandEnvelope, CopyTreeDocumentPages, CreateDocumentPage, CreatePage, CreateWorkspace, - DeleteBlock, DeleteDocumentPage, DuplicateDocumentPage, EmbedBlock, InsertBlock, MoveBlock, - MoveDocumentPage, PatchBlock, PatchPageBlock, PutMindmap, ReplaceMediaAssetStorage, - RestoreDocumentPage, SavePageContent, UpdateBlock, UpdatePageOptions, UpdatePageStats, - UpdatePageTitle, + check_when, evaluate_when, is_command_enabled, parse_when_expr, CommandContext, + CommandContextValue, CommandEnvelope, CopyTreeDocumentPages, CreateDocumentPage, CreatePage, + CreateWorkspace, DeleteBlock, DeleteDocumentPage, DuplicateDocumentPage, EmbedBlock, + InsertBlock, MoveBlock, MoveDocumentPage, PatchBlock, PatchPageBlock, PutMindmap, + ReplaceMediaAssetStorage, RestoreDocumentPage, SavePageContent, UpdateBlock, UpdatePageOptions, + UpdatePageStats, UpdatePageTitle, WhenExprNode, WhenExprToken, }; pub use common::{ ActorPayload, AffectedObject, ErrorDetail, ErrorPayload, OkPayload, RequestMeta, ResponseMeta, diff --git a/rust/crates/mnote-web/Cargo.toml b/rust/crates/mnote-web/Cargo.toml index a0c3f371..ca21dfb4 100644 --- a/rust/crates/mnote-web/Cargo.toml +++ b/rust/crates/mnote-web/Cargo.toml @@ -27,4 +27,4 @@ tower = "0.5" base64 = "0.22" comrak = { version = "0.52", default-features = false } notify = "8.2.0" -time = { version = "0.3", features = ["formatting"] } +time = { version = "0.3", features = ["formatting", "local-offset"] } diff --git a/rust/crates/mnote-web/src/app.rs b/rust/crates/mnote-web/src/app.rs index 36ea002c..d0b1bf5c 100644 --- a/rust/crates/mnote-web/src/app.rs +++ b/rust/crates/mnote-web/src/app.rs @@ -1,4 +1,5 @@ use crate::acp_runtime::AcpRuntimeManager; +use crate::document_buffer_store::BufferStore; use crate::editor_actor::EditorRuntimeActor; use crate::local_folder_watcher_registry::LocalFolderWatcherRegistry; use crate::middleware::request_context::inject_request_context; @@ -144,6 +145,7 @@ pub struct AppState { pub block_delta_tx: broadcast::Sender, pub stream_delta_tx: broadcast::Sender, pub acp_runtime: Arc, + pub buffer_store: BufferStore, } impl AppState { @@ -152,13 +154,15 @@ impl AppState { let (stream_delta_tx, _) = broadcast::channel(256); let actor = EditorRuntimeActor::new(); actor.set_block_delta_tx(block_delta_tx.clone()); + let buffer_store = BufferStore::new(); Self { config: Arc::new(config), - local_folder_watcher_registry: LocalFolderWatcherRegistry::new(), + local_folder_watcher_registry: LocalFolderWatcherRegistry::new(buffer_store.clone()), editor_actor: actor, block_delta_tx, stream_delta_tx, acp_runtime: Arc::new(AcpRuntimeManager::from_env()), + buffer_store, } } diff --git a/rust/crates/mnote-web/src/context.rs b/rust/crates/mnote-web/src/context.rs index cce9c6c0..1b3957ad 100644 --- a/rust/crates/mnote-web/src/context.rs +++ b/rust/crates/mnote-web/src/context.rs @@ -82,6 +82,7 @@ impl RequestContext { cookie_header: header_value(headers, axum::http::header::COOKIE.as_str()), actor_id: header_value(headers, HEADER_ACTOR_ID) .or_else(|| cookie_value(headers, COOKIE_ACTOR_ID)) + .and_then(|value| stable_actor_id(&value)) .unwrap_or_else(|| "anonymous".into()), actor_type: header_value(headers, HEADER_ACTOR_TYPE) .or_else(|| cookie_value(headers, COOKIE_ACTOR_TYPE)) @@ -117,6 +118,22 @@ impl RequestContext { } } +pub(crate) fn stable_actor_id(value: &str) -> Option { + let trimmed = value.trim(); + if trimmed.is_empty() { + return None; + } + let stable = trimmed + .split_once('|') + .map(|(actor_id, _)| actor_id.trim()) + .unwrap_or(trimmed); + if stable.is_empty() { + None + } else { + Some(stable.to_string()) + } +} + fn header_or_generated(headers: &HeaderMap, key: &str, prefix: &str) -> String { header_value(headers, key).unwrap_or_else(|| generate_id(prefix)) } @@ -181,6 +198,23 @@ mod tests { assert_eq!(context.auth.actor_id, "user_demo"); } + #[test] + fn request_context_normalizes_pipe_separated_actor_id() { + let mut headers = HeaderMap::new(); + headers.insert( + HEADER_ACTOR_ID, + HeaderValue::from_static("user_demo|session_123"), + ); + + let context = RequestContext::from_http_parts( + &Method::GET, + &"/".parse::().expect("uri"), + &headers, + ); + + assert_eq!(context.auth.actor_id, "user_demo"); + } + #[test] fn request_context_falls_back_to_actor_cookies() { let mut headers = HeaderMap::new(); @@ -198,6 +232,26 @@ mod tests { assert_eq!(context.auth.actor_id, "user_cookie"); assert_eq!(context.auth.actor_type, "user"); } + + #[test] + fn request_context_normalizes_pipe_separated_actor_cookie() { + let mut headers = HeaderMap::new(); + headers.insert( + axum::http::header::COOKIE, + HeaderValue::from_static( + "mnote_actor_id=user_cookie|session_abc; mnote_actor_type=user", + ), + ); + + let context = RequestContext::from_http_parts( + &Method::GET, + &"/".parse::().expect("uri"), + &headers, + ); + + assert_eq!(context.auth.actor_id, "user_cookie"); + assert_eq!(context.auth.actor_type, "user"); + } } fn cookie_value(headers: &HeaderMap, name: &str) -> Option { diff --git a/rust/crates/mnote-web/src/document_buffer_store.rs b/rust/crates/mnote-web/src/document_buffer_store.rs new file mode 100644 index 00000000..e2cb7f4b --- /dev/null +++ b/rust/crates/mnote-web/src/document_buffer_store.rs @@ -0,0 +1,452 @@ +//! BufferStore — 运行时 DocumentBuffer 管理器 +//! +//! 职责: +//! - 持有所有已打开文档的 `DocumentBuffer` 实例 +//! - 以 `ObjectWorkspacePath` 的稳定复合身份作为 buffer key +//! - tiptap 保存链、AI 写入、外部 watcher 均通过此模块仲裁状态 +//! +//! 不是持久化结构,纯内存运行时。 + +use core_protocol::{ + DocBufferDirtyState, DocumentBuffer, KernelObjectIdentity, KernelObjectKind, + ObjectWorkspacePath, WorkspaceSourceKind, +}; +use std::collections::HashMap; +use std::sync::{Arc, RwLock}; +use std::time::{SystemTime, UNIX_EPOCH}; + +/// BufferKey — 从 ObjectWorkspacePath 导出的稳定复合 key。 +/// +/// 由 workspace_id + source_kind + root_uri + relative_path + object_identity.document_id 组成。 +/// 同一 .md 文件由 tiptap、AI、外部 watcher 访问时落到同一 key。 +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +pub struct BufferKey { + pub workspace_id: String, + pub source_kind: String, + pub root_uri: String, + pub relative_path: String, + pub document_id: Option, +} + +impl BufferKey { + /// 从 ObjectWorkspacePath 构建 BufferKey。 + pub fn from_workspace_path(path: &ObjectWorkspacePath) -> Self { + Self { + workspace_id: path.workspace_id.clone(), + source_kind: format!("{:?}", path.source_kind), + root_uri: path.root_uri.clone(), + relative_path: path.relative_path.clone(), + document_id: path.object_identity.document_id.clone(), + } + } + + /// 从文档基本属性构建 BufferKey。 + pub fn from_parts( + workspace_id: &str, + source_kind: &str, + root_uri: &str, + relative_path: &str, + document_id: Option, + ) -> Self { + Self { + workspace_id: workspace_id.to_string(), + source_kind: source_kind.to_string(), + root_uri: root_uri.to_string(), + relative_path: relative_path.to_string(), + document_id, + } + } +} + +/// BufferStore — 运行时文档缓冲区管理器。 +/// +/// 每个 `AppState` 有一个实例,所有文档打开/保存/冲突检测共享同一状态模型。 +#[derive(Debug, Clone)] +pub struct BufferStore { + inner: Arc>, +} + +#[derive(Debug)] +struct BufferStoreInner { + buffers: HashMap, +} + +impl BufferStore { + pub fn new() -> Self { + Self { + inner: Arc::new(RwLock::new(BufferStoreInner { + buffers: HashMap::new(), + })), + } + } + + /// 获取或创建 buffer。 + /// + /// 如果该 key 已有 buffer,直接返回。否则用 `ObjectWorkspacePath` 创建一个 Clean buffer。 + pub fn get_or_create(&self, path: &ObjectWorkspacePath) -> DocumentBuffer { + let key = BufferKey::from_workspace_path(path); + let mut inner = self.inner.write().expect("BufferStore lock"); + if let Some(buf) = inner.buffers.get(&key) { + return buf.clone(); + } + let now_ms = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap_or_default() + .as_millis() as i64; + let buf = DocumentBuffer { + workspace_path: path.clone(), + file_version: None, + base_content_hash: None, + current_content_hash: None, + dirty_state: DocBufferDirtyState::Clean, + last_loaded_at: Some(now_ms), + last_saved_at: Some(now_ms), + external_actor: None, + }; + inner.buffers.insert(key, buf.clone()); + buf + } + + /// 按 key 获取 buffer(不创建)。 + pub fn get(&self, key: &BufferKey) -> Option { + let inner = self.inner.read().expect("BufferStore lock"); + inner.buffers.get(key).cloned() + } + + /// 更新 buffer。 + pub fn update(&self, key: &BufferKey, buffer: DocumentBuffer) { + let mut inner = self.inner.write().expect("BufferStore lock"); + inner.buffers.insert(key.clone(), buffer); + } + + /// 通过 ObjectWorkspacePath 获取 buffer。不存在则返回 None。 + pub fn get_by_path(&self, path: &ObjectWorkspacePath) -> Option { + let key = BufferKey::from_workspace_path(path); + self.get(&key) + } + + /// 标记保存成功:更新 file_version、base_content_hash、清除 dirty 状态。 + pub fn mark_saved( + &self, + path: &ObjectWorkspacePath, + file_version: String, + content_hash: String, + ) -> Option { + let key = BufferKey::from_workspace_path(path); + let mut inner = self.inner.write().expect("BufferStore lock"); + if let Some(buf) = inner.buffers.get_mut(&key) { + buf.mark_saved(file_version, content_hash); + Some(buf.clone()) + } else { + None + } + } + + /// 标记外部修改:如果 buffer 是 Clean → ExternalModified;是 Dirty → Stale。 + pub fn mark_external_modified( + &self, + path: &ObjectWorkspacePath, + actor: Option, + ) -> Option { + let key = BufferKey::from_workspace_path(path); + let mut inner = self.inner.write().expect("BufferStore lock"); + if let Some(buf) = inner.buffers.get_mut(&key) { + buf.mark_external_modified(actor); + Some(buf.clone()) + } else { + None + } + } + + /// 标记 buffer 为 dirty(编辑器内容已修改)。 + pub fn mark_dirty( + &self, + path: &ObjectWorkspacePath, + content_hash: String, + ) -> Option { + let key = BufferKey::from_workspace_path(path); + let mut inner = self.inner.write().expect("BufferStore lock"); + if let Some(buf) = inner.buffers.get_mut(&key) { + buf.mark_dirty(content_hash); + Some(buf.clone()) + } else { + None + } + } + + /// 获取或创建 buffer 时设置 file_version 和 base_content_hash(从 aggregate 加载后调用)。 + pub fn init_buffer( + &self, + path: &ObjectWorkspacePath, + file_version: Option, + base_content_hash: Option, + ) -> DocumentBuffer { + let mut buf = self.get_or_create(path); + if file_version.is_some() || base_content_hash.is_some() { + if let Some(fv) = file_version { + buf.file_version = Some(fv); + } + if let Some(ch) = base_content_hash { + buf.base_content_hash = Some(ch); + } + let key = BufferKey::from_workspace_path(path); + self.update(&key, buf.clone()); + } + buf + } + + /// 返回当前 buffer 数量(仅用于测试和监控)。 + pub fn buffer_count(&self) -> usize { + let inner = self.inner.read().expect("BufferStore lock"); + inner.buffers.len() + } + + /// 清除所有 buffers(测试用途)。 + pub fn clear(&self) { + let mut inner = self.inner.write().expect("BufferStore lock"); + inner.buffers.clear(); + } + + /// 返回当前所有 buffers 的拷贝(测试/监控用途)。 + pub fn all_buffers(&self) -> Vec { + let inner = self.inner.read().expect("BufferStore lock"); + inner.buffers.values().cloned().collect() + } +} + +impl Default for BufferStore { + fn default() -> Self { + Self::new() + } +} + +// ── helpers ────────────────────────────────────────────────────────── + +/// 从 ObjectWorkspacePath 构建 buffer key 字符串(用于日志/调试)。 +pub fn buffer_key_string(path: &ObjectWorkspacePath) -> String { + format!( + "{}:{}:{}:{}", + path.workspace_id, + path.root_uri, + path.relative_path, + path.object_identity.document_id.as_deref().unwrap_or("_") + ) +} + +/// 从本地文件夹写入上下文的参数构建 ObjectWorkspacePath。 +/// +/// 在 save_local_markdown_page、watcher event 和 Hermes 写入链中统一使用此函数构造路径。 +pub fn build_local_folder_workspace_path( + workspace_id: &str, + root_uri: &str, + relative_path: &str, + document_id: &str, +) -> ObjectWorkspacePath { + ObjectWorkspacePath { + workspace_id: workspace_id.to_string(), + source_kind: WorkspaceSourceKind::LocalFolder, + root_uri: root_uri.to_string(), + relative_path: relative_path.to_string(), + object_identity: KernelObjectIdentity { + object_kind: KernelObjectKind::Page, + document_id: Some(document_id.to_string()), + block_id: None, + asset_id: None, + }, + resource_kind: Some("document".to_string()), + } +} + +// ── tests ──────────────────────────────────────────────────────────── + +#[cfg(test)] +mod tests { + use super::*; + use core_protocol::{ + DocBufferDirtyState, DocumentBuffer, KernelObjectIdentity, KernelObjectKind, + ObjectWorkspacePath, WorkspaceSourceKind, + }; + + fn make_test_workspace_path( + workspace_id: &str, + relative_path: &str, + document_id: &str, + ) -> ObjectWorkspacePath { + ObjectWorkspacePath { + workspace_id: workspace_id.to_string(), + source_kind: WorkspaceSourceKind::LocalFolder, + root_uri: "file:///tmp/test-root".to_string(), + relative_path: relative_path.to_string(), + object_identity: KernelObjectIdentity { + object_kind: KernelObjectKind::Page, + document_id: Some(document_id.to_string()), + block_id: None, + asset_id: None, + }, + resource_kind: Some("document".to_string()), + } + } + + fn make_fresh_buffer(path: &ObjectWorkspacePath) -> DocumentBuffer { + DocumentBuffer { + workspace_path: path.clone(), + file_version: Some("v1".to_string()), + base_content_hash: Some("sha256:base".to_string()), + current_content_hash: None, + dirty_state: DocBufferDirtyState::Clean, + last_loaded_at: Some(1_700_000_000_000i64), + last_saved_at: Some(1_700_000_000_001i64), + external_actor: None, + } + } + + #[test] + fn document_buffer_reuses_workspace_path_key() { + let store = BufferStore::new(); + let path_a = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + let path_b = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + + // 同一个路径应得同一个 buffer + let buf1 = store.get_or_create(&path_a); + let buf2 = store.get_or_create(&path_b); + + assert_eq!( + buf1.workspace_path.relative_path, + buf2.workspace_path.relative_path + ); + assert_eq!( + BufferKey::from_workspace_path(&path_a), + BufferKey::from_workspace_path(&path_b) + ); + } + + #[test] + fn document_buffer_marks_external_modified_for_clean_buffer() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + let mut buf = make_fresh_buffer(&path); + let key = BufferKey::from_workspace_path(&path); + store.update(&key, buf.clone()); + + buf.mark_external_modified(Some("external-editor".into())); + store.update(&key, buf); + + let result = store.get(&key).expect("buffer should exist"); + assert_eq!(result.dirty_state, DocBufferDirtyState::ExternalModified); + assert_eq!(result.external_actor.as_deref(), Some("external-editor")); + } + + #[test] + fn document_buffer_marks_stale_for_dirty_buffer() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + let mut buf = make_fresh_buffer(&path); + let key = BufferKey::from_workspace_path(&path); + + // 先 mark_dirty + buf.mark_dirty("sha256:dirty".into()); + store.update(&key, buf); + + // 外部修改 → 应变为 Stale + let result = store.mark_external_modified(&path, Some("external-editor".into())); + assert!(result.is_some()); + assert_eq!( + result.as_ref().unwrap().dirty_state, + DocBufferDirtyState::Stale + ); + assert_eq!( + result.as_ref().unwrap().external_actor.as_deref(), + Some("external-editor") + ); + } + + #[test] + fn document_buffer_mark_saved_after_page_body_write() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + let mut buf = make_fresh_buffer(&path); + let key = BufferKey::from_workspace_path(&path); + buf.mark_dirty("sha256:dirty".into()); + store.update(&key, buf); + + // 保存后应变为 Clean,更新 file_version + let result = store.mark_saved(&path, "v2".into(), "sha256:saved".into()); + assert!(result.is_some()); + let buf = result.unwrap(); + assert_eq!(buf.dirty_state, DocBufferDirtyState::Clean); + assert_eq!(buf.file_version.as_deref(), Some("v2")); + assert_eq!(buf.base_content_hash.as_deref(), Some("sha256:saved")); + assert!(!buf.is_dirty()); + } + + #[test] + fn document_buffer_different_paths_different_keys() { + let store = BufferStore::new(); + let path_a = make_test_workspace_path("ws_1", "doc-a.md", "local-md:doc-a.md"); + let path_b = make_test_workspace_path("ws_2", "doc-b.md", "local-md:doc-b.md"); + + let key_a = BufferKey::from_workspace_path(&path_a); + let key_b = BufferKey::from_workspace_path(&path_b); + + assert_ne!(key_a, key_b); + + let buf1 = store.get_or_create(&path_a); + let buf2 = store.get_or_create(&path_b); + + assert_ne!( + buf1.workspace_path.workspace_id, + buf2.workspace_path.workspace_id + ); + } + + #[test] + fn document_buffer_reuses_across_multiple_get_or_create_calls() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + + let buf1 = store.get_or_create(&path); + let buf2 = store.get_or_create(&path); + + // 同一个路径的 buffer 应该共享同一 key + assert_eq!( + BufferKey::from_workspace_path(&buf1.workspace_path), + BufferKey::from_workspace_path(&buf2.workspace_path) + ); + assert_eq!(store.buffer_count(), 1); + } + + #[test] + fn document_buffer_init_buffer_sets_file_version() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc.md", "local-md:doc.md"); + + let buf = store.init_buffer(&path, Some("v3".into()), Some("sha256:v3base".into())); + assert_eq!(buf.file_version.as_deref(), Some("v3")); + assert_eq!(buf.base_content_hash.as_deref(), Some("sha256:v3base")); + assert_eq!(buf.dirty_state, DocBufferDirtyState::Clean); + + // 再次获取应保留状态 + let buf2 = store.get_or_create(&path); + assert_eq!(buf2.file_version.as_deref(), Some("v3")); + assert_eq!(store.buffer_count(), 1); + } + + #[test] + fn document_buffer_mark_dirty_and_saved_round_trip() { + let store = BufferStore::new(); + let path = make_test_workspace_path("ws_1", "doc-cycle.md", "local-md:doc-cycle.md"); + + // init → mark_dirty → mark_saved → 应回到 Clean + let _ = store.init_buffer(&path, Some("v1".into()), Some("sha256:base".into())); + let dirty = store.mark_dirty(&path, "sha256:dirty".into()); + assert!(dirty.is_some()); + assert_eq!(dirty.unwrap().dirty_state, DocBufferDirtyState::Dirty); + + let saved = store.mark_saved(&path, "v2".into(), "sha256:saved".into()); + assert!(saved.is_some()); + let buf = saved.unwrap(); + assert_eq!(buf.dirty_state, DocBufferDirtyState::Clean); + assert_eq!(buf.file_version.as_deref(), Some("v2")); + assert_eq!(buf.base_content_hash.as_deref(), Some("sha256:saved")); + } +} diff --git a/rust/crates/mnote-web/src/hermes_tools/doc.rs b/rust/crates/mnote-web/src/hermes_tools/doc.rs index 9985bf11..38c4850b 100644 --- a/rust/crates/mnote-web/src/hermes_tools/doc.rs +++ b/rust/crates/mnote-web/src/hermes_tools/doc.rs @@ -1708,6 +1708,7 @@ pub async fn doc_markdown_edit( content: next_content, editor_source: Some("mnote.doc.markdown_edit".into()), }, + Some(&state.buffer_store), )?; return Ok(json!({ "ok": true, diff --git a/rust/crates/mnote-web/src/hermes_tools/page.rs b/rust/crates/mnote-web/src/hermes_tools/page.rs index ba7f3ea2..8adaf874 100644 --- a/rust/crates/mnote-web/src/hermes_tools/page.rs +++ b/rust/crates/mnote-web/src/hermes_tools/page.rs @@ -233,6 +233,7 @@ async fn page_command( content, editor_source: Some("mnote.page.save".into()), }, + Some(&state.buffer_store), )? } "page.head.updateTitle" => { diff --git a/rust/crates/mnote-web/src/lib.rs b/rust/crates/mnote-web/src/lib.rs index 0a993cf1..d5fe40fe 100644 --- a/rust/crates/mnote-web/src/lib.rs +++ b/rust/crates/mnote-web/src/lib.rs @@ -7,6 +7,7 @@ pub mod acp_session_manager; pub mod acp_types; pub mod app; pub mod context; +pub mod document_buffer_store; pub mod editor_actor; pub mod error; pub mod hermes_tools; diff --git a/rust/crates/mnote-web/src/local_folder_watcher_registry.rs b/rust/crates/mnote-web/src/local_folder_watcher_registry.rs index 81ec2b2b..7ee6472b 100644 --- a/rust/crates/mnote-web/src/local_folder_watcher_registry.rs +++ b/rust/crates/mnote-web/src/local_folder_watcher_registry.rs @@ -1,3 +1,4 @@ +use crate::document_buffer_store::BufferStore; use crate::routes::{local_workspace_id_from_root_uri, refresh_local_search_index_for_path}; use notify::event::ModifyKind; use notify::{Config, Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher}; @@ -12,6 +13,7 @@ use tokio::sync::{broadcast, mpsc, oneshot}; #[derive(Clone)] pub struct LocalFolderWatcherRegistry { inner: Arc, + buffer_store: BufferStore, } impl std::fmt::Debug for LocalFolderWatcherRegistry { @@ -23,11 +25,12 @@ impl std::fmt::Debug for LocalFolderWatcherRegistry { } impl LocalFolderWatcherRegistry { - pub fn new() -> Self { + pub fn new(buffer_store: BufferStore) -> Self { Self { inner: Arc::new(LocalFolderWatcherRegistryInner { entries: Mutex::new(HashMap::new()), }), + buffer_store, } } @@ -36,7 +39,10 @@ impl LocalFolderWatcherRegistry { canonical_root: &Path, ) -> Result { let key = canonical_root_uri(canonical_root); - let channel = self.inner.get_or_create_channel(&key, canonical_root)?; + let buffer_store = self.buffer_store.clone(); + let channel = self + .inner + .get_or_create_channel(&key, canonical_root, buffer_store)?; channel.subscriber_count.fetch_add(1, Ordering::SeqCst); Ok(LocalFolderWatcherSubscription { receiver: channel.sender.subscribe(), @@ -63,6 +69,7 @@ impl LocalFolderWatcherRegistryInner { &self, key: &str, canonical_root: &Path, + buffer_store: BufferStore, ) -> Result, String> { if let Some(existing) = self .entries @@ -76,7 +83,7 @@ impl LocalFolderWatcherRegistryInner { let channel = Arc::new(LocalFolderWatchChannel::new( key.to_string(), - spawn_local_folder_watcher(key, canonical_root.to_path_buf())?, + spawn_local_folder_watcher(key, canonical_root.to_path_buf(), buffer_store)?, )); let mut entries = self.entries.lock().expect("registry lock"); @@ -157,6 +164,7 @@ impl Drop for LocalFolderWatcherSubscriptionGuard { fn spawn_local_folder_watcher( root_uri: &str, canonical_root: PathBuf, + buffer_store: BufferStore, ) -> Result<(broadcast::Sender, oneshot::Sender<()>), String> { let (event_sender, mut event_receiver) = mpsc::unbounded_channel::>(); let mut watcher = RecommendedWatcher::new( @@ -174,6 +182,7 @@ fn spawn_local_folder_watcher( let (shutdown_tx, mut shutdown_rx) = oneshot::channel::<()>(); let sender_for_task = sender.clone(); let root_uri_for_task = root_uri.to_string(); + let buffer_store_for_task = buffer_store.clone(); tokio::spawn(async move { let _watcher = watcher; loop { @@ -206,11 +215,29 @@ fn spawn_local_folder_watcher( if !is_markdown_path(&path) { continue; } + + // 外部文件变更→更新 BufferStore + let document_id = + format!("local-md:{}", encode_local_id_segment(&relative_path)); + if let Ok(ws_id) = + local_workspace_id_from_root_uri(&root_uri_for_task) + { + let ws_path = + crate::document_buffer_store::build_local_folder_workspace_path( + &ws_id, + &root_uri_for_task, + &relative_path, + &document_id, + ); + buffer_store_for_task + .mark_external_modified(&ws_path, Some("external-editor".into())); + } + let payload = json!({ "sourceKind": "local_folder", "rootUri": root_uri_for_task, "relativePath": relative_path, - "documentId": format!("local-md:{}", encode_local_id_segment(&relative_path)), + "documentId": document_id, "eventKind": format!("{:?}", event.kind), "revision": event_revision(&path), }); @@ -319,6 +346,7 @@ mod tests { is_local_search_index_path, refresh_local_search_index_for_event, should_emit_event_kind, LocalFolderWatcherRegistry, }; + use crate::document_buffer_store::BufferStore; use notify::event::{AccessKind, CreateKind, DataChange, ModifyKind}; use notify::EventKind; @@ -337,7 +365,7 @@ mod tests { #[tokio::test] async fn same_root_subscribers_share_single_watcher() { - let registry = LocalFolderWatcherRegistry::new(); + let registry = LocalFolderWatcherRegistry::new(BufferStore::new()); let root = test_root("shared"); let first = registry.subscribe(&root).expect("first subscription"); @@ -358,7 +386,7 @@ mod tests { #[tokio::test] async fn different_roots_create_independent_watchers() { - let registry = LocalFolderWatcherRegistry::new(); + let registry = LocalFolderWatcherRegistry::new(BufferStore::new()); let first_root = test_root("first"); let second_root = test_root("second"); diff --git a/rust/crates/mnote-web/src/routes/documents.rs b/rust/crates/mnote-web/src/routes/documents.rs index 6fc7a8c3..6bc4596a 100644 --- a/rust/crates/mnote-web/src/routes/documents.rs +++ b/rust/crates/mnote-web/src/routes/documents.rs @@ -521,6 +521,7 @@ pub async fn content( } pub async fn page_body_write( + State(state): State, Extension(context): Extension, Json(body): Json, ) -> Result<(StatusCode, HeaderMap, Json), WebError> { @@ -548,7 +549,7 @@ pub async fn page_body_write( } ensure_local_workspace_access(&context, root_uri) .map_err(|error| error.with_context(&context))?; - let result = write_local_markdown_page_body(&body)?; + let result = write_local_markdown_page_body(&body, Some(&state.buffer_store))?; Ok(ok_response(&context, result)) } @@ -580,23 +581,26 @@ pub async fn save( .expected_file_version .as_deref() .or(body.conflict_detection_key.as_deref()); - let result = write_local_markdown_page_body(&core_protocol::PageBodyWriteRequest { - document_id: document_id.to_string(), - workspace_id: body.workspace_id.clone().unwrap_or_default(), - source_kind: core_protocol::WorkspaceSourceKind::LocalFolder, - root_uri: root_uri.to_string(), - expected_file_version: expected_file_version.map(ToOwned::to_owned), - base_content_hash: body.base_content_hash.clone(), - content_format: body - .content_format - .clone() - .unwrap_or_else(|| "editorBlocks".into()), - content: body.content.clone(), - editor_source: body - .editor_source - .clone() - .or_else(|| Some("documents/save-compat".into())), - })?; + let result = write_local_markdown_page_body( + &core_protocol::PageBodyWriteRequest { + document_id: document_id.to_string(), + workspace_id: body.workspace_id.clone().unwrap_or_default(), + source_kind: core_protocol::WorkspaceSourceKind::LocalFolder, + root_uri: root_uri.to_string(), + expected_file_version: expected_file_version.map(ToOwned::to_owned), + base_content_hash: body.base_content_hash.clone(), + content_format: body + .content_format + .clone() + .unwrap_or_else(|| "editorBlocks".into()), + content: body.content.clone(), + editor_source: body + .editor_source + .clone() + .or_else(|| Some("documents/save-compat".into())), + }, + Some(&state.buffer_store), + )?; return Ok(ok_response(&context, result)); } let effective_workspace_id = @@ -1368,10 +1372,10 @@ mod tests { std::process::id() )); let _ = std::fs::remove_dir_all(&root); - std::fs::create_dir_all(&root).expect("create local root"); + std::fs::create_dir_all(root.join("Old Local Title")).expect("create local page bundle"); std::fs::write( - root.join("README.md"), - "---\nmnote_id: local-stable\ntitle: Old Title\n---\n# Old\n", + root.join("Old Local Title").join("Old Local Title.md"), + "# Old\n", ) .expect("write md"); let root_uri = format!("file://{}", root.display()); @@ -1380,7 +1384,7 @@ mod tests { &root_uri, ) .expect("init local workspace"); - let document_id = "local-mdid:local-stable"; + let document_id = "local-md:Old~20Local~20Title~2FOld~20Local~20Title.md"; let title_response = app() .oneshot( @@ -1404,6 +1408,14 @@ mod tests { .await .expect("title response"); assert_eq!(title_response.status(), StatusCode::OK); + let title_body = to_bytes(title_response.into_body(), usize::MAX) + .await + .expect("title body"); + let title_payload: Value = serde_json::from_slice(&title_body).expect("title json"); + let renamed_document_id = title_payload["result"]["documentId"] + .as_str() + .expect("renamed document id") + .to_string(); let save_response = app() .oneshot( @@ -1415,7 +1427,7 @@ mod tests { .header("x-mnote-actor-type", "user") .body(Body::from( serde_json::json!({ - "documentId": document_id, + "documentId": renamed_document_id, "sourceKind": "local_folder", "rootUri": root_uri, "content": [ @@ -1460,7 +1472,7 @@ mod tests { .header("x-mnote-actor-type", "user") .body(Body::from( serde_json::json!({ - "documentId": document_id, + "documentId": renamed_document_id, "sourceKind": "local_folder", "rootUri": root_uri, "options": { @@ -1476,17 +1488,23 @@ mod tests { .expect("options response"); assert_eq!(options_response.status(), StatusCode::OK); - let markdown = std::fs::read_to_string(root.join("README.md")).expect("read md"); - assert!(markdown.contains("mnote_id: local-stable")); - assert!(markdown.contains("title: New Local Title")); + let markdown = + std::fs::read_to_string(root.join("New Local Title").join("New Local Title.md")) + .expect("read md"); assert!(markdown.contains("## Saved Heading")); assert!(markdown.contains("Saved body")); let options = std::fs::read_to_string(root.join(".mnote").join("page-options.json")) .expect("read page options"); let options_json: Value = serde_json::from_str(&options).expect("options json"); - assert_eq!(options_json["pages"][document_id]["wideLayout"], true); - assert_eq!(options_json["pages"][document_id]["showToc"], false); + assert_eq!( + options_json["pages"][&renamed_document_id]["wideLayout"], + true + ); + assert_eq!( + options_json["pages"][&renamed_document_id]["showToc"], + false + ); let _ = std::fs::remove_dir_all(&root); } @@ -1510,7 +1528,7 @@ mod tests { &root_uri, ) .expect("init local workspace"); - let document_id = "local-mdid:expected-file-version"; + let document_id = "local-md:README.md"; let aggregate = crate::routes::local_folder_source::resolve_local_markdown_page_aggregate( &root_uri, document_id, @@ -1582,7 +1600,7 @@ mod tests { assert!(payload["details"]["conflict"]["currentDiskVersion"] .as_str() .unwrap_or("") - .starts_with("local-md:local-mdid:expected-file-version:")); + .starts_with("local-md:local-md:README.md:")); assert!(payload["details"]["conflict"]["suggestedActions"] .as_array() .unwrap() diff --git a/rust/crates/mnote-web/src/routes/gateway.rs b/rust/crates/mnote-web/src/routes/gateway.rs index 49ca9bee..aa11d719 100644 --- a/rust/crates/mnote-web/src/routes/gateway.rs +++ b/rust/crates/mnote-web/src/routes/gateway.rs @@ -1,9 +1,10 @@ use crate::app::AppState; -use crate::context::RequestContext; +use crate::context::{stable_actor_id, RequestContext}; use crate::error::WebError; use crate::routes::local_folder_source::{ - ensure_local_workspace_read_access, is_local_access_policy_admin_context, - load_local_folder_page_tree_snapshot, local_access_policy_path_display, + create_default_local_workspace_for_actor, ensure_local_workspace_read_access, + is_local_access_policy_admin_context, load_local_folder_page_tree_snapshot, + load_local_trash_entries, local_access_policy_path_display, }; use crate::routes::snapshot_support::load_sidebar_dataset; use crate::routes::web_shell::{ @@ -22,10 +23,12 @@ use axum::extract::ws::{Message as AxumWsMessage, WebSocket, WebSocketUpgrade}; use axum::extract::{Extension, Query, State}; use axum::http::{header, HeaderName, HeaderValue, Request, StatusCode, Uri}; use axum::response::{Html, IntoResponse, Response}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine as _}; use futures_util::{SinkExt, StreamExt}; use leptos::prelude::InnerHtmlAttribute; use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; +use std::collections::BTreeMap; use std::time::Duration; use tokio_tungstenite::tungstenite::Message as TungsteniteMessage; @@ -36,6 +39,8 @@ const COOKIE_CONVEX_AUTH_JWT: &str = "__convexAuthJWT"; const COOKIE_CONVEX_AUTH_REFRESH_TOKEN: &str = "__convexAuthRefreshToken"; const COOKIE_MNOTE_WEB_CONVEX_TOKEN: &str = "mnote_web_convex_token"; const COOKIE_MNOTE_WEB_DEV_SESSION: &str = "mnote_web_dev_session"; +const COOKIE_MNOTE_ACTOR_ID: &str = "mnote_actor_id"; +const COOKIE_MNOTE_ACTOR_TYPE: &str = "mnote_actor_type"; #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] @@ -305,24 +310,58 @@ pub async fn root_entry( Some(root_uri.to_string()), ) } else if should_render_local_first_landing { - let workspace_id = "local-first-entry".to_string(); + let payload = create_default_local_workspace_for_actor( + &context.auth.actor_id, + &context.auth.actor_type, + ) + .map_err(|error| error.with_context(&context))?; + let root_uri = payload + .get("workspace") + .and_then(|workspace| workspace.get("rootUri")) + .and_then(Value::as_str) + .map(str::trim) + .filter(|value| !value.is_empty()) + .ok_or_else(|| { + WebError::internal("默认本地工作区初始化未返回 rootUri").with_context(&context) + })? + .to_string(); + let snapshot = load_local_folder_page_tree_snapshot(&root_uri)?; + let workspace_id = snapshot + .dataset + .get("workspace") + .and_then(|workspace| workspace.get("id")) + .and_then(Value::as_str) + .map(str::trim) + .filter(|value| !value.is_empty()) + .unwrap_or("local-folder") + .to_string(); let workspace_projection = build_workspace_shell_projection( - &json!({ - "workspaces": [{ "id": workspace_id, "name": "我的空间" }], - "documents": [], - }), + &snapshot.dataset, &workspace_id, - None, + requested_page_id.as_deref(), "我的空间", ); + let selected_active_page_id = choose_root_entry_active_page_id( + requested_page_id.clone(), + recent_page_id.clone(), + workspace_projection.active_page_id.as_deref(), + workspace_projection + .my_page_items + .first() + .map(|item| item.id.as_str()), + ); + let sidebar_tree_html = + render_local_sidebar_tree_html(&root_uri, selected_active_page_id.as_deref())?; + let file_tree_html = + render_local_file_tree_html(&root_uri, selected_active_page_id.as_deref())?; ( workspace_id, workspace_projection, - String::new(), - String::new(), - None, - None, - None, + sidebar_tree_html, + file_tree_html, + selected_active_page_id, + Some("local_folder".to_string()), + Some(root_uri), ) } else { let workspace_id = @@ -448,6 +487,7 @@ pub async fn root_entry( workspace_sidebar_html={workspace_sidebar_html.clone()} page_subtree_json={page_subtree_json} show_admin_access_policy={show_admin_access_policy} + enable_tree_live={active_source_kind.as_deref() != Some("local_folder")} /> }); let body_extra = format!( @@ -475,7 +515,7 @@ pub async fn root_entry( {} - + {} {} @@ -483,6 +523,8 @@ pub async fn root_entry( escape_html(&html_title), crate::ssr::MNOTE_CSS, escape_html(context.auth.actor_id.as_str()), + escape_html(active_source_kind.as_deref().unwrap_or("convex_workspace")), + escape_html(active_root_uri.as_deref().unwrap_or("")), content, body_extra )) @@ -506,6 +548,81 @@ pub async fn trash_entry( return Ok(response); } + let source_kind = query + .source_kind + .as_deref() + .map(str::trim) + .filter(|value| !value.is_empty()); + if source_kind == Some("local_folder") { + let root_uri = query + .root_uri + .as_deref() + .map(str::trim) + .filter(|value| !value.is_empty()) + .ok_or_else(|| { + WebError::bad_request_code("local_folder_root_required", "缺少本地文件夹 rootUri") + })?; + ensure_local_workspace_read_access(&context, root_uri) + .map_err(|error| error.with_context(&context))?; + let workspace_id = + crate::routes::local_folder_source::local_workspace_id_from_root_uri(root_uri)?; + let sidebar_tree_html = render_local_sidebar_tree_html(root_uri, None).unwrap_or_default(); + let file_tree_html = render_local_file_tree_html(root_uri, None).unwrap_or_default(); + let workspace_projection = build_workspace_shell_projection( + &json!({ + "active_workspace_id": workspace_id, + "workspaces": [{ "id": workspace_id, "name": "我的空间" }], + "documents": [], + }), + &workspace_id, + None, + "我的空间", + ); + let workspace_sidebar_html = render_workspace_shell_sidebar_html( + &workspace_projection, + Some(sidebar_tree_html.as_str()), + Some(file_tree_html.as_str()), + ); + let trash_workbench_html = render_local_trash_workbench_html( + &workspace_id, + root_uri, + &load_local_trash_entries(root_uri)?, + ); + let content = crate::ssr::render_view(leptos::view! { + +
+
+ }); + + let mut response = Html(format!( + r#" + + + + 本地文件夹垃圾箱 + + + + {} + +"#, + crate::ssr::MNOTE_CSS, + escape_html(root_uri), + content, + )) + .into_response(); + stamp_gateway_headers(response.headers_mut(), false); + context.apply_response_headers(response.headers_mut()); + return Ok(response); + } + let default_workspace_name = format!("{} 的空间", state.config().dev_user_name); let workspace_id = resolve_root_workspace_id(&state, &context, query.workspace_id.as_deref()).await?; @@ -815,6 +932,202 @@ fn render_trash_workbench_html(workspace_id: &str, dataset: &Value) -> String { ) } +fn render_local_trash_workbench_html( + workspace_id: &str, + root_uri: &str, + entries: &BTreeMap, +) -> String { + let mut document_rows = Vec::new(); + let mut resource_rows = Vec::new(); + for (entry_id, entry) in entries { + let deleted_at = entry.deleted_at_ms.to_string(); + let original = escape_html(&entry.original_relative_path); + let trash_path = escape_html(&entry.trash_relative_path); + let kind = escape_html(&entry.resource_kind); + let row = format!( + r#"
+
+ {kind} + {original} + 回收站:{trash_path} · {deleted_at} +
+
+ + +
+
"#, + entry_id = escape_html(entry_id), + kind = kind, + original = original, + trash_path = trash_path, + deleted_at = escape_html(&deleted_at), + command_id = escape_html(local_trash_command_id(entry_id, entry).as_str()), + ); + if entry.resource_kind == "markdown" || entry.resource_kind == "markdown_bundle" { + document_rows.push(row); + } else { + resource_rows.push(row); + } + } + let document_body = if document_rows.is_empty() { + r#"
暂无已删除页面
"#.to_string() + } else { + document_rows.join("") + }; + let resource_body = if resource_rows.is_empty() { + r#"
暂无已删除资源
"#.to_string() + } else { + resource_rows.join("") + }; + format!( + r#"
+
+

本地文件夹垃圾箱

+

本地删除项保存在当前目录的 .mnote/trash.mnote/trash-index.json 中。

+

+
+
+
+

页面 {document_count}

+ +
+ {document_body} +
+
+
+

资源 {resource_count}

+ +
+ {resource_body} +
+
+"#, + workspace_id = escape_html(workspace_id), + root_uri = escape_html(root_uri), + document_count = document_rows.len(), + resource_count = resource_rows.len(), + document_empty_disabled = if document_rows.is_empty() { + " disabled" + } else { + "" + }, + resource_empty_disabled = if resource_rows.is_empty() { + " disabled" + } else { + "" + }, + document_body = document_body, + resource_body = resource_body, + ) +} + +fn local_trash_command_id( + entry_id: &str, + entry: &crate::routes::local_folder_source::LocalTrashEntry, +) -> String { + if entry.resource_kind == "markdown" || entry.resource_kind == "markdown_bundle" { + return entry.document_id.clone(); + } + entry_id.to_string() +} + fn json_array<'a>(dataset: &'a Value, key: &str) -> &'a [Value] { dataset .get(key) @@ -1334,6 +1647,10 @@ fn build_auth_proxy_response( COOKIE_CONVEX_AUTH_REFRESH_TOKEN, tokens.get("refreshToken"), ); + if let Some(actor_id) = resolve_mnote_actor_id(&value, tokens, context) { + set_literal_cookie(response.headers_mut(), COOKIE_MNOTE_ACTOR_ID, &actor_id); + set_literal_cookie(response.headers_mut(), COOKIE_MNOTE_ACTOR_TYPE, "user"); + } expire_cookie(response.headers_mut(), COOKIE_MNOTE_WEB_DEV_SESSION); } } @@ -1342,6 +1659,61 @@ fn build_auth_proxy_response( response } +fn resolve_mnote_actor_id( + value: &serde_json::Value, + tokens: &serde_json::Value, + context: &RequestContext, +) -> Option { + [ + "/userId", + "/user/id", + "/user/_id", + "/user/subject", + "/profile/userId", + "/profile/id", + ] + .iter() + .find_map(|pointer| { + value + .pointer(pointer) + .and_then(Value::as_str) + .and_then(stable_actor_id) + }) + .or_else(|| { + tokens + .get("token") + .and_then(Value::as_str) + .and_then(extract_actor_id_from_jwt) + }) + .or_else(|| { + let actor_id = stable_actor_id(&context.auth.actor_id)?; + if actor_id == "anonymous" { + None + } else { + Some(actor_id) + } + }) +} + +fn extract_actor_id_from_jwt(token: &str) -> Option { + let payload_segment = token.split('.').nth(1)?; + let decoded = URL_SAFE_NO_PAD.decode(payload_segment.as_bytes()).ok()?; + let payload: Value = serde_json::from_slice(&decoded).ok()?; + ["sub", "userId", "id", "_id"].iter().find_map(|key| { + payload + .get(key) + .and_then(Value::as_str) + .and_then(stable_actor_id) + }) +} + +fn set_literal_cookie(headers: &mut axum::http::HeaderMap, name: &'static str, value: &str) { + let cookie = format!("{name}={value}; Path=/; HttpOnly; SameSite=Lax"); + if let Ok(value) = HeaderValue::from_str(&cookie) { + headers.append(header::SET_COOKIE, value); + } +} + fn set_auth_cookie_from_value( headers: &mut axum::http::HeaderMap, name: &'static str, @@ -1360,6 +1732,8 @@ fn clear_auth_cookies(headers: &mut axum::http::HeaderMap) { expire_cookie(headers, COOKIE_CONVEX_AUTH_JWT); expire_cookie(headers, COOKIE_CONVEX_AUTH_REFRESH_TOKEN); expire_cookie(headers, COOKIE_MNOTE_WEB_DEV_SESSION); + expire_cookie(headers, COOKIE_MNOTE_ACTOR_ID); + expire_cookie(headers, COOKIE_MNOTE_ACTOR_TYPE); } fn expire_cookie(headers: &mut axum::http::HeaderMap, name: &'static str) { @@ -1456,9 +1830,20 @@ mod tests { use axum::http::{header, HeaderMap, HeaderValue, Request, StatusCode}; use axum::response::{Html, IntoResponse}; use axum::routing::{get, post}; + use base64::Engine; use tokio::net::TcpListener; use tower::util::ServiceExt; + fn temp_root(name: &str) -> std::path::PathBuf { + let stamp = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_nanos(); + let path = std::env::temp_dir().join(format!("{name}-{stamp}")); + std::fs::create_dir_all(&path).expect("temp root"); + path + } + fn app() -> axum::Router { app_with_legacy_next_base_url("http://127.0.0.1:3100".into()) } @@ -1526,6 +1911,7 @@ mod tests { axum::Json(serde_json::json!({ "status": "success", "value": { + "userId": "user_demo", "tokens": { "token": "jwt-demo", "refreshToken": "refresh-demo" @@ -1542,6 +1928,43 @@ mod tests { format!("http://{addr}") } + async fn spawn_convex_auth_upstream_with_token(token: String) -> String { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("convex auth listener"); + let addr = listener.local_addr().expect("convex auth addr"); + let app = axum::Router::new().route( + "/api/action", + post(move || { + let token = token.clone(); + async move { + axum::Json(serde_json::json!({ + "status": "success", + "value": { + "tokens": { + "token": token, + "refreshToken": "refresh-demo" + } + } + })) + } + }), + ); + tokio::spawn(async move { + axum::serve(listener, app) + .await + .expect("convex auth server"); + }); + format!("http://{addr}") + } + + fn unsigned_jwt_with_subject(subject: &str) -> String { + let payload = serde_json::json!({ "sub": subject }); + let encoded_payload = + base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(payload.to_string().as_bytes()); + format!("header.{encoded_payload}.signature") + } + async fn spawn_legacy_auth_upstream() -> String { let listener = TcpListener::bind("127.0.0.1:0") .await @@ -1745,6 +2168,66 @@ mod tests { assert!(!html.contains("window.location.reload")); } + #[tokio::test] + async fn trash_entry_renders_local_folder_trash_workbench() { + let root = temp_root("mnote-local-folder-trash-entry"); + crate::routes::local_folder_source::initialize_local_workspace_for_actor( + "user_real", + &format!("file://{}", root.display()), + ) + .expect("init local workspace"); + std::fs::create_dir_all(root.join(".mnote")).expect("create metadata dir"); + std::fs::create_dir_all(root.join(".mnote").join("trash")).expect("create trash dir"); + std::fs::write( + root.join(".mnote").join("trash-index.json"), + serde_json::json!({ + "entries": { + "local-md:Deleted~2FDeleted.md": { + "documentId": "local-md:Deleted~2FDeleted.md", + "resourceKind": "markdown_bundle", + "resourceScope": "local_folder", + "originalRelativePath": "Deleted", + "trashRelativePath": ".mnote/trash/Deleted", + "deletedAtMs": 1770000000000u64 + } + } + }) + .to_string(), + ) + .expect("write trash index"); + let root_uri = format!("file://{}", root.display()); + let uri = format!( + "/trash?sourceKind=local_folder&rootUri={}", + root_uri.replace(':', "%3A").replace('/', "%2F") + ); + + let response = app() + .oneshot( + Request::builder() + .uri(uri) + .header("x-mnote-actor-id", "user_real") + .header("x-mnote-actor-type", "user") + .body(Body::empty()) + .expect("request"), + ) + .await + .expect("response"); + + assert_eq!(response.status(), StatusCode::OK); + let body = to_bytes(response.into_body(), usize::MAX) + .await + .expect("body"); + let html = String::from_utf8(body.to_vec()).expect("utf8"); + assert!(html.contains(r#"data-trash-source-kind="local_folder""#)); + assert!(html.contains("Deleted")); + assert!(html.contains(r#"data-trash-action="local-restore""#)); + assert!(html.contains(r#"data-trash-action="local-purge""#)); + assert!(html.contains(r#"data-trash-action="local-empty-documents""#)); + assert!(html.contains(r#"data-trash-action="local-empty-resources" disabled"#)); + + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn root_entry_active_selection_prefers_page_id_over_recent_projection_and_first_page() { let selected = super::choose_root_entry_active_page_id( @@ -1860,6 +2343,11 @@ mod tests { #[tokio::test] async fn root_entry_renders_local_first_landing_without_convex() { + let _guard = crate::test_support::hermes_env_lock() + .lock() + .expect("env lock"); + let base = temp_root("mnote-root-local-first-landing"); + std::env::set_var("MNOTE_LOCAL_WORKSPACE_BASE_DIR", &base); let response = app_with_query_fixtures("http://127.0.0.1:3100".into(), false, None, None) .oneshot( Request::builder() @@ -1871,15 +2359,19 @@ mod tests { ) .await .expect("response"); + std::env::remove_var("MNOTE_LOCAL_WORKSPACE_BASE_DIR"); assert_eq!(response.status(), StatusCode::OK); let body = to_bytes(response.into_body(), usize::MAX) .await .expect("body"); let html = String::from_utf8(body.to_vec()).expect("utf8"); - assert!(html.contains(r#"data-testid="mnote-create-default-local-workspace""#)); - assert!(html.contains(r#"data-testid="mnote-open-local-folder-empty""#)); + assert!(html.contains("初始化的新页面")); + assert!(html.contains(r#"data-mnote-source-kind="local_folder""#)); + assert!(!html.contains(r#"data-testid="mnote-create-default-local-workspace""#)); + assert!(!html.contains(r#"data-testid="mnote-open-local-folder-empty""#)); assert!(!html.contains("workspaces:ensureDefaultWorkspace")); + let _ = std::fs::remove_dir_all(&base); } #[tokio::test] @@ -2060,6 +2552,52 @@ mod tests { assert!(html.contains(r#"data-mnote-shell="workspace""#)); } + #[tokio::test] + async fn root_entry_initializes_default_local_workspace_page() { + let _guard = crate::test_support::hermes_env_lock() + .lock() + .expect("env lock"); + let base = temp_root("mnote-root-default-local-workspace"); + std::env::set_var("MNOTE_LOCAL_WORKSPACE_BASE_DIR", &base); + let response = app_with_config("http://127.0.0.1:3100".into(), false) + .oneshot( + Request::builder() + .uri("/") + .header("x-mnote-actor-id", "user_real") + .header("x-mnote-actor-type", "user") + .body(Body::empty()) + .expect("request"), + ) + .await + .expect("response"); + std::env::remove_var("MNOTE_LOCAL_WORKSPACE_BASE_DIR"); + + assert_eq!(response.status(), StatusCode::OK); + let body = to_bytes(response.into_body(), usize::MAX) + .await + .expect("body"); + let html = String::from_utf8(body.to_vec()).expect("utf8"); + let expected_root = base + .join("users") + .join("user_real") + .join("workspaces") + .join("my-space"); + assert!(expected_root + .join("初始化的新页面") + .join("初始化的新页面.md") + .exists()); + assert!(html.contains("初始化的新页面")); + assert!(html.contains("local_folder")); + assert!(html.contains(r#"data-mnote-source-kind="local_folder""#)); + assert!(html.contains(r#"data-mnote-root-uri="file://"#)); + assert!(!html.contains(r#"data-testid="mnote-workspace-empty-state""#)); + assert!(!html.contains("当前还没有可显示的本地工作区")); + assert!(!html.contains(r#"data-testid="mnote-empty-create-page""#)); + assert!(html.contains(r#""transport":"disabled""#)); + + let _ = std::fs::remove_dir_all(&base); + } + #[tokio::test] async fn auth_entry_returns_gateway_fallback_shell_when_compat_disabled() { let response = app_with_config("http://127.0.0.1:3100".into(), false) @@ -2150,6 +2688,12 @@ mod tests { assert!(values .iter() .any(|value| value.contains("__convexAuthRefreshToken=refresh-demo"))); + assert!(values + .iter() + .any(|value| value.contains("mnote_actor_id=user_demo"))); + assert!(values + .iter() + .any(|value| value.contains("mnote_actor_type=user"))); let body = to_bytes(response.into_body(), usize::MAX) .await .expect("body"); @@ -2158,6 +2702,42 @@ mod tests { assert_eq!(payload["tokens"]["refreshToken"], "dummy"); } + #[tokio::test] + async fn auth_api_normalizes_session_subject_before_setting_actor_cookie() { + let token = unsigned_jwt_with_subject("user_stable|session_rotating"); + let convex_url = spawn_convex_auth_upstream_with_token(token).await; + let response = app_with_config_and_convex_url( + "http://127.0.0.1:3100".into(), + false, + Some(convex_url), + ) + .oneshot( + Request::builder() + .method("POST") + .uri("/api/auth") + .header("content-type", "application/json") + .body(Body::from( + r#"{"action":"auth:signIn","args":{"provider":"password","params":{"email":"mnote.e2e@example.com","password":"MnoteE2E123!","flow":"signIn"}}}"#, + )) + .expect("request"), + ) + .await + .expect("response"); + + assert_eq!(response.status(), StatusCode::OK); + let cookies = response.headers().get_all(header::SET_COOKIE); + let values = cookies + .iter() + .map(|value| value.to_str().unwrap_or_default()) + .collect::>(); + assert!(values + .iter() + .any(|value| value.contains("mnote_actor_id=user_stable"))); + assert!(!values + .iter() + .any(|value| value.contains("mnote_actor_id=user_stable|session_rotating"))); + } + #[tokio::test] async fn auth_entry_uses_mnote_web_login_ui_when_compat_enabled() { let legacy_base_url = spawn_legacy_auth_upstream().await; diff --git a/rust/crates/mnote-web/src/routes/kernel.rs b/rust/crates/mnote-web/src/routes/kernel.rs index 28841bb0..b74efb3d 100644 --- a/rust/crates/mnote-web/src/routes/kernel.rs +++ b/rust/crates/mnote-web/src/routes/kernel.rs @@ -1,6 +1,10 @@ use crate::app::AppState; use crate::context::RequestContext; use crate::error::WebError; +use crate::routes::local_folder_source::{ + ensure_local_workspace_read_access, load_local_folder_file_tree_snapshot, + load_local_folder_page_tree_snapshot, +}; use crate::routes::query_support::resolve_effective_workspace_id; use crate::routes::snapshot_support::{ execute_kernel_query, load_projection_snapshot, load_sidebar_dataset, subtree_query, @@ -22,6 +26,8 @@ pub struct KernelProjectionQuery { pub depth: Option, pub query: Option, pub max_results: Option, + pub source_kind: Option, + pub root_uri: Option, } #[derive(Debug, Deserialize)] @@ -65,6 +71,30 @@ async fn project_projection( Query(query): Query, projection: KernelProjectionKind, ) -> Result<(StatusCode, Json), WebError> { + let source_kind = query + .source_kind + .as_deref() + .map(str::trim) + .filter(|value| !value.is_empty()); + if source_kind == Some("local_folder") { + let root_uri = query + .root_uri + .as_deref() + .map(str::trim) + .filter(|value| !value.is_empty()) + .ok_or_else(|| { + WebError::bad_request_code("local_folder_root_required", "缺少本地文件夹 rootUri") + })?; + ensure_local_workspace_read_access(&context, root_uri) + .map_err(|error| error.with_context(&context))?; + let snapshot = if projection == KernelProjectionKind::FileTree { + load_local_folder_file_tree_snapshot(root_uri)? + } else { + load_local_folder_page_tree_snapshot(root_uri)? + }; + return Ok(ok_response(&context, snapshot.projection)); + } + let effective_workspace_id = resolve_effective_workspace_id(&context, query.workspace_id.as_deref(), true)? .expect("workspace_required 已确保存在"); @@ -189,6 +219,7 @@ pub async fn graph( #[cfg(test)] mod tests { use crate::app::{build_app, AppConfig, AppState}; + use crate::routes::local_folder_source::initialize_local_workspace_for_actor; use axum::body::{to_bytes, Body}; use axum::http::{Request, StatusCode}; use serde_json::Value; @@ -296,6 +327,50 @@ mod tests { } } + #[tokio::test] + async fn tree_projection_routes_short_circuit_local_folder_without_convex_dataset() { + let root = std::env::temp_dir().join(format!( + "mnote-local-kernel-projection-{}", + std::process::id() + )); + let _ = std::fs::remove_dir_all(&root); + std::fs::create_dir_all(root.join("本地页面")).expect("create local page bundle"); + std::fs::write(root.join("本地页面").join("本地页面.md"), "") + .expect("write local markdown"); + let root_uri = format!("file://{}", root.display()); + initialize_local_workspace_for_actor("dev-user", &root_uri).expect("init local workspace"); + + let response = app() + .oneshot( + Request::builder() + .uri(format!( + "/api/tree/projections/file?workspaceId=local-ws:dev-user:my-space&sourceKind=local_folder&rootUri={root_uri}&rootNodeId=local-md:%E6%9C%AC%E5%9C%B0%E9%A1%B5%E9%9D%A2~2F%E6%9C%AC%E5%9C%B0%E9%A1%B5%E9%9D%A2.md" + )) + .header("x-mnote-actor-id", "dev-user") + .header("x-mnote-actor-type", "user") + .body(Body::empty()) + .expect("request"), + ) + .await + .expect("response"); + + assert_eq!(response.status(), StatusCode::OK); + let body = to_bytes(response.into_body(), usize::MAX) + .await + .expect("body"); + let payload: Value = serde_json::from_slice(&body).expect("json"); + assert_eq!(payload["ok"], true); + assert_eq!(payload["result"]["projection"], "file_tree"); + assert_eq!(payload["result"]["sourceKind"], "local_folder"); + assert!(payload["result"]["items"] + .as_array() + .expect("items") + .iter() + .any(|item| item["title"] == "本地页面.md")); + + let _ = std::fs::remove_dir_all(&root); + } + #[tokio::test] async fn tree_projection_routes_keep_ok_response_shape() { let response = app() diff --git a/rust/crates/mnote-web/src/routes/local_folder_source.rs b/rust/crates/mnote-web/src/routes/local_folder_source.rs index c1a1b8a3..58eb6b2b 100644 --- a/rust/crates/mnote-web/src/routes/local_folder_source.rs +++ b/rust/crates/mnote-web/src/routes/local_folder_source.rs @@ -16,6 +16,7 @@ use bridge_runtime::project_legacy_content_to_block_document; use core_protocol::{ KernelObjectIdentity, KernelObjectKind, ObjectWorkspacePath, WorkspaceSourceKind, }; +use reqwest::Url; use serde::{Deserialize, Serialize}; use serde_json::{json, Map, Value}; use std::cmp::Ordering; @@ -25,6 +26,7 @@ use std::fs; use std::hash::{Hash, Hasher}; use std::path::{Path, PathBuf}; use std::time::{SystemTime, UNIX_EPOCH}; +use time::OffsetDateTime; #[derive(Debug, Clone)] struct LocalFolderEntry { @@ -38,7 +40,6 @@ struct LocalFolderEntry { #[derive(Debug, Clone, Default)] struct LocalFolderMetadata { - page_ids: BTreeMap, page_options: BTreeMap, trash_entries: BTreeMap, } @@ -130,29 +131,29 @@ enum LocalAccessMode { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -struct LocalTrashEntry { +pub(crate) struct LocalTrashEntry { #[serde(default, alias = "documentId")] - document_id: String, + pub(crate) document_id: String, #[serde(default, alias = "resourceKind")] - resource_kind: String, + pub(crate) resource_kind: String, #[serde(default, alias = "resourceScope")] - resource_scope: String, + pub(crate) resource_scope: String, #[serde(default, alias = "originalFilePath")] - original_file_path: String, + pub(crate) original_file_path: String, #[serde(default, alias = "trashedFilePath")] - trashed_file_path: String, + pub(crate) trashed_file_path: String, #[serde(default, alias = "trashEntryId")] - trash_entry_id: String, + pub(crate) trash_entry_id: String, #[serde(default, alias = "originalRelativePath")] - original_relative_path: String, + pub(crate) original_relative_path: String, #[serde(default, alias = "trashRelativePath")] - trash_relative_path: String, + pub(crate) trash_relative_path: String, #[serde(default, alias = "deletedAtMs")] - deleted_at_ms: u128, + pub(crate) deleted_at_ms: u128, #[serde(default, alias = "archivedAt")] - archived_at: u128, + pub(crate) archived_at: u128, #[serde(default, alias = "purgedAt")] - purged_at: Option, + pub(crate) purged_at: Option, } #[derive(Debug, Clone)] @@ -1707,15 +1708,7 @@ fn ensure_default_workspace_manifest( } fn ensure_default_workspace_directories(root: &Path) -> Result<(), WebError> { - for relative in [ - "pages", - "assets/shared", - "assets/imports", - "mindmaps", - "ai-sessions/private", - "ai-sessions/shared", - ".mnote/trash", - ] { + for relative in [".mnote/trash"] { let path = root.join(relative); if !path.starts_with(root) { return Err(WebError::bad_request_code( @@ -1734,7 +1727,8 @@ fn ensure_default_workspace_directories(root: &Path) -> Result<(), WebError> { } fn ensure_default_workspace_home_page(root: &Path) -> Result<(), WebError> { - let page = root.join("pages").join("我的空间.md"); + let page_dir = root.join("初始化的新页面"); + let page = page_dir.join("初始化的新页面.md"); if page.exists() { return Ok(()); } @@ -1744,7 +1738,16 @@ fn ensure_default_workspace_home_page(root: &Path) -> Result<(), WebError> { "默认本地工作区首页不能越过 root", )); } - let content = "---\ntitle: 我的空间\nmnote_id: my-space-home\n---\n# 我的空间\n\n"; + fs::create_dir_all(&page_dir).map_err(|error| { + WebError::bad_request_code( + "local_workspace_create_failed", + format!( + "无法创建默认本地工作区首页目录 {}: {error}", + page_dir.display() + ), + ) + })?; + let content = ""; fs::write(&page, content).map_err(|error| { WebError::bad_request_code( "local_workspace_create_failed", @@ -1909,6 +1912,7 @@ pub fn load_local_folder_page_tree_snapshot( &canonical_root, None, 0, + None, &metadata, &mut rows, &workspace_id, @@ -2138,7 +2142,7 @@ pub fn save_local_markdown_page( } } let (frontmatter, _) = split_frontmatter(¤t); - let body = editor_blocks_to_markdown(content); + let body = editor_blocks_to_markdown_for_file(content, &canonical_root, &markdown_file.path); let next_markdown = if let Some(frontmatter) = frontmatter { format!("---\n{frontmatter}\n---\n{body}") } else { @@ -2154,12 +2158,20 @@ pub fn save_local_markdown_page( ) })?; let workspace_id = local_workspace_id(&canonical_root); + let relative_path_for_buffer = markdown_file + .path + .strip_prefix(&canonical_root) + .ok() + .map(|p| p.to_string_lossy().replace('\\', "/")) + .unwrap_or_default(); refresh_local_search_index_best_effort(&canonical_root, root_uri, &workspace_id); let next_conflict_key = local_markdown_conflict_detection_key(document_id, &markdown_file.path)?; Ok(json!({ "ok": true, "documentId": document_id, + "workspaceId": workspace_id, + "relativePath": relative_path_for_buffer, "revision": now_ms(), "conflict_detection_key": next_conflict_key, "fileVersion": next_conflict_key, @@ -2203,6 +2215,7 @@ fn local_markdown_conflict_error( pub fn write_local_markdown_page_body( request: &core_protocol::PageBodyWriteRequest, + buffer_store: Option<&crate::document_buffer_store::BufferStore>, ) -> Result { if request.source_kind != core_protocol::WorkspaceSourceKind::LocalFolder { return Err(WebError::bad_request_code( @@ -2223,6 +2236,28 @@ pub fn write_local_markdown_page_body( request.expected_file_version.as_deref(), &request.content, )?; + + // 保存成功后更新 BufferStore + if let Some(store) = buffer_store { + if let (Some(workspace_id), Some(relative_path), Some(file_version)) = ( + result.get("workspaceId").and_then(Value::as_str), + result.get("relativePath").and_then(Value::as_str), + result.get("fileVersion").and_then(Value::as_str), + ) { + let ws_path = crate::document_buffer_store::build_local_folder_workspace_path( + workspace_id, + &request.root_uri, + relative_path, + &request.document_id, + ); + store.mark_saved( + &ws_path, + file_version.to_string(), + format!("sha256:{file_version}"), + ); + } + } + if let Value::Object(map) = &mut result { map.insert("canonicalCommand".into(), json!("page.body.write")); map.insert("compatCommand".into(), json!("page.body.save")); @@ -2278,10 +2313,7 @@ pub async fn open_local_file( .with_context(&context) })?; let mut headers = HeaderMap::new(); - headers.insert( - header::CONTENT_TYPE, - HeaderValue::from_static("application/octet-stream"), - ); + headers.insert(header::CONTENT_TYPE, content_type_for_path(&target)); if query.download.unwrap_or(false) { headers.insert( header::CONTENT_DISPOSITION, @@ -2452,14 +2484,14 @@ pub(crate) fn write_local_markdown_asset( )); } - let markdown_stem = Path::new(&markdown_file.file_name) - .file_stem() - .and_then(|value| value.to_str()) - .map(str::trim) - .filter(|value| !value.is_empty()) - .unwrap_or("page"); - let asset_dir_name = format!("{}.assets", sanitize_file_name(markdown_stem, "page")); - let asset_dir = markdown_dir.join(asset_dir_name); + let page_resource_dir = + markdown_page_resource_directory(&markdown_file.path).ok_or_else(|| { + WebError::bad_request_code( + "local_asset_upload_bad_markdown_path", + "无法解析本地页面资源目录", + ) + })?; + let asset_dir = page_resource_dir; if !asset_dir.starts_with(&canonical_root) { return Err(WebError::bad_request_code( "local_folder_root_escape", @@ -2507,6 +2539,174 @@ pub(crate) fn write_local_markdown_asset( })) } +fn local_mindmap_relative_path_from_id(mindmap_id: &str) -> Option { + let value = mindmap_id.trim(); + value + .strip_prefix("local-file:") + .or_else(|| value.strip_prefix("local:asset:")) + .map(str::trim) + .filter(|path| !path.is_empty()) + .map(ToOwned::to_owned) +} + +fn ensure_relative_path_stays_in_root( + root: &Path, + relative_path: &str, +) -> Result { + let requested = Path::new(relative_path); + if requested.is_absolute() + || requested + .components() + .any(|component| matches!(component, std::path::Component::ParentDir)) + { + return Err(WebError::bad_request_code( + "local_mindmap_root_escape", + "本地思维导图路径不能越过 root", + )); + } + let target = root.join(requested); + if !target.starts_with(root) { + return Err(WebError::bad_request_code( + "local_mindmap_root_escape", + "本地思维导图路径不能越过 root", + )); + } + Ok(target) +} + +fn local_mindmap_file_name(mindmap_id: &str) -> String { + let sanitized = sanitize_file_name(mindmap_id, "mindmap"); + if sanitized.to_ascii_lowercase().ends_with(".json") { + sanitized + } else { + format!("{}.json", sanitize_file_stem(&sanitized, "mindmap")) + } +} + +fn is_local_mindmap_file_name(file_name: &str) -> bool { + let trimmed = file_name.trim(); + let lower = trimmed.to_ascii_lowercase(); + lower.ends_with(".mindmap.json") + || (trimmed.starts_with("思维导图") && lower.ends_with(".json")) +} + +fn resolve_local_mindmap_path( + root: &Path, + metadata: &LocalFolderMetadata, + document_id: &str, + mindmap_id: &str, +) -> Result { + if let Some(relative_path) = local_mindmap_relative_path_from_id(mindmap_id) { + return ensure_relative_path_stays_in_root(root, &relative_path); + } + + let markdown_file = + find_markdown_by_page_id(root, metadata, document_id)?.ok_or_else(|| { + WebError::bad_request_code( + "local_markdown_not_found", + "找不到本地思维导图所属的 Markdown 页面", + ) + })?; + let page_resource_dir = + markdown_page_resource_directory(&markdown_file.path).ok_or_else(|| { + WebError::bad_request_code( + "local_mindmap_bad_markdown_path", + "无法解析本地页面思维导图目录", + ) + })?; + Ok(page_resource_dir.join(local_mindmap_file_name(mindmap_id))) +} + +fn local_mindmap_default_data() -> Value { + json!({ + "data": {"uid": "root", "text": "KMIND"}, + "children": [] + }) +} + +pub(crate) fn read_local_mindmap_data( + root_uri: &str, + document_id: &str, + mindmap_id: &str, +) -> Result { + let root_path = parse_file_root_uri(root_uri)?; + let canonical_root = root_path.canonicalize().map_err(|error| { + WebError::bad_request_code( + "local_folder_unavailable", + format!("无法访问本地文件夹: {error}"), + ) + })?; + let metadata = load_local_folder_metadata(&canonical_root)?; + let target = resolve_local_mindmap_path(&canonical_root, &metadata, document_id, mindmap_id)?; + if !target.exists() { + return Ok(local_mindmap_default_data()); + } + if !target.is_file() { + return Err(WebError::bad_request_code( + "local_mindmap_not_file", + "本地思维导图目标必须是文件", + )); + } + let raw = fs::read_to_string(&target).map_err(|error| { + WebError::bad_request_code( + "local_mindmap_read_failed", + format!("无法读取本地思维导图 {}: {error}", target.display()), + ) + })?; + serde_json::from_str(&raw).map_err(|error| { + WebError::bad_request_code( + "local_mindmap_invalid", + format!("本地思维导图 JSON 损坏 {}: {error}", target.display()), + ) + }) +} + +pub(crate) fn write_local_mindmap_data( + root_uri: &str, + document_id: &str, + mindmap_id: &str, + data: Value, + create_only: bool, +) -> Result { + let root_path = parse_file_root_uri(root_uri)?; + let canonical_root = root_path.canonicalize().map_err(|error| { + WebError::bad_request_code( + "local_folder_unavailable", + format!("无法访问本地文件夹: {error}"), + ) + })?; + let metadata = load_local_folder_metadata(&canonical_root)?; + let target = resolve_local_mindmap_path(&canonical_root, &metadata, document_id, mindmap_id)?; + if !target.starts_with(&canonical_root) { + return Err(WebError::bad_request_code( + "local_mindmap_root_escape", + "本地思维导图路径不能越过 root", + )); + } + let parent = target.parent().ok_or_else(|| { + WebError::bad_request_code("local_mindmap_bad_path", "无法解析本地思维导图父目录") + })?; + fs::create_dir_all(parent).map_err(|error| { + WebError::bad_request_code( + "local_mindmap_create_dir_failed", + format!("无法创建本地思维导图目录 {}: {error}", parent.display()), + ) + })?; + if !(create_only && target.exists()) { + write_json_atomic(&target, &data)?; + } + let relative_path = normalize_relative_path(&canonical_root, &target)?; + Ok(json!({ + "ok": true, + "sourceKind": "local_folder", + "documentId": document_id, + "mindmapId": mindmap_id, + "assetId": format!("local-file:{relative_path}"), + "relativePath": relative_path, + "fileName": target.file_name().and_then(|value| value.to_str()).unwrap_or("思维导图.json"), + })) +} + pub fn update_local_markdown_title( root_uri: &str, document_id: &str, @@ -2519,45 +2719,10 @@ pub fn update_local_markdown_title( format!("无法访问本地文件夹: {error}"), ) })?; - let metadata = load_local_folder_metadata(&canonical_root)?; - let markdown_file = find_markdown_by_page_id(&canonical_root, &metadata, document_id)? - .ok_or_else(|| { - WebError::bad_request_code( - "local_markdown_not_found", - "找不到要更新标题的本地 Markdown 页面", - ) - })?; - let current = fs::read_to_string(&markdown_file.path).map_err(|error| { - WebError::bad_request_code( - "local_markdown_read_failed", - format!( - "无法读取本地 Markdown 文件 {}: {error}", - markdown_file.path.display() - ), - ) - })?; - fs::write( - &markdown_file.path, - markdown_with_frontmatter_fields(¤t, &[("title", title.trim())]), - ) - .map_err(|error| { - WebError::bad_request_code( - "local_markdown_write_failed", - format!( - "无法写入本地 Markdown 标题 {}: {error}", - markdown_file.path.display() - ), - ) - })?; + let result = rename_local_markdown_page(&canonical_root, document_id, title)?; let workspace_id = local_workspace_id(&canonical_root); refresh_local_search_index_best_effort(&canonical_root, root_uri, &workspace_id); - Ok(json!({ - "ok": true, - "documentId": document_id, - "title": title.trim(), - "updated_at": Value::Null, - "sourceKind": "local_folder", - })) + Ok(result) } pub fn update_local_page_options( @@ -2630,6 +2795,144 @@ pub fn execute_local_tree_command( Ok(result) } +/// 生成新页面文件名主体。 +/// 默认标题“新页面”会追加本地时间 HHMMSS,例如“新页面061240”。 +/// 候选名必须同时检查 `.md` 文件和同名目录,避免页面 bundle 错配。 +fn determine_page_stem(directory: &Path, title: &str) -> String { + let base = if title.trim() == "新页面" { + let now = OffsetDateTime::now_local().unwrap_or_else(|_| OffsetDateTime::now_utc()); + format!( + "新页面{:02}{:02}{:02}", + now.hour(), + now.minute(), + now.second() + ) + } else { + sanitize_file_stem(title, "新页面") + }; + // 同时检查 .md 文件和同名目录,确保页面 bundle 使用同一个 stem。 + let mut candidate = base.clone(); + let mut index = 2u32; + while directory.join(format!("{}.md", candidate)).exists() + || directory.join(&candidate).exists() + { + candidate = format!("{}-{}", base, index); + index += 1; + } + candidate +} + +fn determine_page_stem_for_rename( + directory: &Path, + title: &str, + current_file: &Path, + current_directory: Option<&Path>, +) -> String { + let base = sanitize_file_stem(title, "新页面"); + let mut candidate = base.clone(); + let mut index = 2u32; + loop { + let file_candidate = directory.join(format!("{candidate}.md")); + let directory_candidate = directory.join(&candidate); + let file_conflict = file_candidate.exists() && file_candidate != current_file; + let directory_conflict = directory_candidate.exists() + && current_directory + .map(|current| directory_candidate != current) + .unwrap_or(true); + if !file_conflict && !directory_conflict { + return candidate; + } + candidate = format!("{}-{}", base, index); + index += 1; + } +} + +fn determine_page_bundle_stem_for_rename( + directory: &Path, + title: &str, + current_bundle_directory: &Path, +) -> String { + let base = sanitize_file_stem(title, "新页面"); + let mut candidate = base.clone(); + let mut index = 2u32; + loop { + let bundle_candidate = directory.join(&candidate); + let loose_markdown_candidate = directory.join(format!("{candidate}.md")); + let bundle_conflict = + bundle_candidate.exists() && bundle_candidate != current_bundle_directory; + let loose_markdown_conflict = loose_markdown_candidate.exists(); + if !bundle_conflict && !loose_markdown_conflict { + return candidate; + } + candidate = format!("{}-{}", base, index); + index += 1; + } +} + +fn markdown_file_stem(path: &Path) -> Option { + path.file_stem() + .and_then(|stem| stem.to_str()) + .map(str::trim) + .filter(|stem| !stem.is_empty()) + .map(ToOwned::to_owned) +} + +fn is_nested_page_bundle_markdown(path: &Path) -> bool { + let Some(parent_name) = path + .parent() + .and_then(|parent| parent.file_name()) + .and_then(|name| name.to_str()) + else { + return false; + }; + markdown_file_stem(path) + .map(|stem| stem == parent_name) + .unwrap_or(false) +} + +fn nested_bundle_main_markdown(directory: &Path) -> Option { + let name = directory.file_name().and_then(|value| value.to_str())?; + let candidate = directory.join(format!("{name}.md")); + if candidate.is_file() { + Some(candidate) + } else { + None + } +} + +fn markdown_page_bundle_directory(markdown_path: &Path) -> Option { + let parent = markdown_path.parent()?; + let stem = markdown_file_stem(markdown_path)?; + if parent + .file_name() + .and_then(|name| name.to_str()) + .map(|name| name == stem) + .unwrap_or(false) + { + return Some(parent.to_path_buf()); + } + None +} + +fn markdown_page_resource_directory(markdown_path: &Path) -> Option { + let parent = markdown_path.parent()?; + let stem = markdown_file_stem(markdown_path)?; + if parent + .file_name() + .and_then(|name| name.to_str()) + .map(|name| name == stem) + .unwrap_or(false) + { + return Some(parent.to_path_buf()); + } + let sibling_dir = parent.join(&stem); + if sibling_dir.is_dir() { + Some(sibling_dir) + } else { + Some(parent.join(sanitize_file_name(&stem, "page"))) + } +} + fn create_local_markdown_page( root: &Path, parent_id: Option<&str>, @@ -2637,30 +2940,30 @@ fn create_local_markdown_page( ) -> Result { let metadata = load_local_folder_metadata(root)?; let parent_directory = resolve_local_parent_directory(root, &metadata, parent_id)?; - let safe_title = sanitize_file_stem(title, "新页面"); - let target = next_available_path(&parent_directory, &safe_title, "md"); + let stem = determine_page_stem(&parent_directory, title); + let dir_target = parent_directory.join(&stem); + let target = dir_target.join(format!("{}.md", stem)); let relative_path = normalize_relative_path(root, &target)?; - let page_id = normalize_metadata_page_id(&format!( - "local-mdid:{}", - encode_local_id_segment(&format!("{}:{relative_path}", local_workspace_id(root))) - )); - let markdown = markdown_with_frontmatter_fields( - &format!("# {}\n", title.trim()), - &[("mnote_id", page_id.as_str()), ("title", title.trim())], - ); + let page_id = local_markdown_path_page_id(&relative_path); + let display_title = file_stem_title(&format!("{stem}.md")); + let markdown = ""; + fs::create_dir_all(&dir_target).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法创建本地页面目录 {}: {error}", dir_target.display()), + ) + })?; fs::write(&target, markdown).map_err(|error| { WebError::bad_request_code( "local_tree_command_failed", format!("无法创建本地 Markdown 文件 {}: {error}", target.display()), ) })?; - let mut page_ids = metadata.page_ids; - page_ids.insert(relative_path.clone(), page_id.clone()); - write_page_ids_metadata(root, &page_ids)?; Ok(json!({ "ok": true, "id": page_id, "documentId": page_id, + "title": display_title, "relativePath": relative_path, "action": "create", "sourceKind": "local_folder", @@ -2741,7 +3044,7 @@ fn rename_local_markdown_page( document_id: &str, title: &str, ) -> Result { - let mut metadata = load_local_folder_metadata(root)?; + let metadata = load_local_folder_metadata(root)?; let markdown_file = find_markdown_by_page_id(root, &metadata, document_id)?.ok_or_else(|| { WebError::bad_request_code( @@ -2752,8 +3055,22 @@ fn rename_local_markdown_page( let parent = markdown_file.path.parent().ok_or_else(|| { WebError::bad_request_code("local_tree_command_failed", "无法解析 Markdown 父目录") })?; - let target = next_available_path(parent, &sanitize_file_stem(title, "无标题"), "md"); + if is_nested_page_bundle_markdown(&markdown_file.path) { + return rename_nested_bundle_markdown_page(root, document_id, &markdown_file, title); + } + let new_stem = determine_page_stem_for_rename(parent, title, &markdown_file.path, None); + let target = parent.join(format!("{new_stem}.md")); + if target.exists() && target != markdown_file.path { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + format!( + "目标 Markdown 文件 {} 已存在,禁止覆盖重命名", + target.display() + ), + )); + } let old_relative_path = markdown_file.relative_path; + fs::rename(&markdown_file.path, &target).map_err(|error| { WebError::bad_request_code( "local_tree_command_failed", @@ -2763,17 +3080,101 @@ fn rename_local_markdown_page( ), ) })?; + let new_relative_path = normalize_relative_path(root, &target)?; - metadata.page_ids.remove(&old_relative_path); - metadata - .page_ids - .insert(new_relative_path.clone(), document_id.to_string()); - write_page_ids_metadata(root, &metadata.page_ids)?; + let new_document_id = local_markdown_path_page_id(&new_relative_path); Ok(json!({ "ok": true, - "id": document_id, - "documentId": document_id, + "id": new_document_id, + "documentId": new_document_id, + "title": file_stem_title(&format!("{new_stem}.md")), "relativePath": new_relative_path, + "previousDocumentId": document_id, + "previousRelativePath": old_relative_path, + "action": "rename", + "sourceKind": "local_folder", + })) +} + +fn rename_nested_bundle_markdown_page( + root: &Path, + document_id: &str, + markdown_file: &LocalFolderEntry, + title: &str, +) -> Result { + let bundle_dir = markdown_file.path.parent().ok_or_else(|| { + WebError::bad_request_code("local_tree_command_failed", "无法解析页面目录") + })?; + if bundle_dir == root { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + "页面目录不能是 workspace root", + )); + } + let bundle_parent = bundle_dir.parent().ok_or_else(|| { + WebError::bad_request_code("local_tree_command_failed", "无法解析页面目录父级") + })?; + let new_stem = determine_page_bundle_stem_for_rename(bundle_parent, title, bundle_dir); + let new_bundle_dir = bundle_parent.join(&new_stem); + let new_markdown = new_bundle_dir.join(format!("{new_stem}.md")); + if new_bundle_dir.exists() && new_bundle_dir != bundle_dir { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + format!( + "目标页面目录 {} 已存在,禁止覆盖重命名", + new_bundle_dir.display() + ), + )); + } + let old_relative_path = markdown_file.relative_path.clone(); + if new_bundle_dir == bundle_dir { + if new_markdown != markdown_file.path { + fs::rename(&markdown_file.path, &new_markdown).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法重命名本地 Markdown 文件 {}: {error}", + markdown_file.path.display() + ), + ) + })?; + } + } else { + fs::rename(bundle_dir, &new_bundle_dir).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法重命名本地页面目录 {}: {error}", bundle_dir.display()), + ) + })?; + let moved_old_markdown = new_bundle_dir.join( + markdown_file + .path + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("page.md"), + ); + if moved_old_markdown != new_markdown { + fs::rename(&moved_old_markdown, &new_markdown).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法重命名本地 Markdown 文件 {}: {error}", + moved_old_markdown.display() + ), + ) + })?; + } + } + let new_relative_path = normalize_relative_path(root, &new_markdown)?; + let new_document_id = local_markdown_path_page_id(&new_relative_path); + Ok(json!({ + "ok": true, + "id": new_document_id, + "documentId": new_document_id, + "title": file_stem_title(&format!("{new_stem}.md")), + "relativePath": new_relative_path, + "previousDocumentId": document_id, + "previousRelativePath": old_relative_path, "action": "rename", "sourceKind": "local_folder", })) @@ -2786,12 +3187,10 @@ fn rename_local_directory(root: &Path, directory: &Path, title: &str) -> Result< "不能重命名本地 workspace root", )); } - let mut metadata = load_local_folder_metadata(root)?; let parent = directory.parent().ok_or_else(|| { WebError::bad_request_code("local_tree_command_failed", "无法解析文件夹父目录") })?; let target = next_available_directory_path(parent, &sanitize_file_stem(title, "文件夹")); - let old_relative_path = normalize_relative_path(root, directory)?; fs::rename(directory, &target).map_err(|error| { WebError::bad_request_code( "local_tree_command_failed", @@ -2799,12 +3198,6 @@ fn rename_local_directory(root: &Path, directory: &Path, title: &str) -> Result< ) })?; let new_relative_path = normalize_relative_path(root, &target)?; - rewrite_page_ids_prefix( - &mut metadata.page_ids, - &old_relative_path, - &new_relative_path, - ); - write_page_ids_metadata(root, &metadata.page_ids)?; Ok(json!({ "ok": true, "id": local_directory_group_id(&new_relative_path), @@ -2820,7 +3213,7 @@ fn copy_local_markdown_page( parent_id: Option<&str>, title: &str, ) -> Result { - let mut metadata = load_local_folder_metadata(root)?; + let metadata = load_local_folder_metadata(root)?; let markdown_file = find_markdown_by_page_id(root, &metadata, document_id)?.ok_or_else(|| { WebError::bad_request_code( @@ -2839,39 +3232,64 @@ fn copy_local_markdown_page( } else { title.trim() }; - let target = next_available_path( - &target_directory, - &sanitize_file_stem(copy_stem, "页面"), - "md", - ); + let copy_stem = sanitize_file_stem(copy_stem, "页面"); + let target; + if let Some(source_bundle) = markdown_page_bundle_directory(&markdown_file.path) { + let target_bundle = next_available_directory_path(&target_directory, ©_stem); + let target_stem = target_bundle + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or(©_stem) + .to_string(); + target = target_bundle.join(format!("{target_stem}.md")); + copy_directory_recursively(&source_bundle, &target_bundle).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法复制本地页面目录 {} 到 {}: {error}", + source_bundle.display(), + target_bundle.display() + ), + ) + })?; + let copied_main = target_bundle.join( + markdown_file + .path + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("page.md"), + ); + if copied_main != target { + fs::rename(&copied_main, &target).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法重命名复制后的 Markdown 文件 {}: {error}", + copied_main.display() + ), + ) + })?; + } + } else { + target = next_available_path(&target_directory, ©_stem, "md"); + let source_markdown = fs::read_to_string(&markdown_file.path).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法读取待复制 Markdown 文件 {}: {error}", + markdown_file.path.display() + ), + ) + })?; + fs::write(&target, source_markdown).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法复制本地 Markdown 文件到 {}: {error}", target.display()), + ) + })?; + } let new_relative_path = normalize_relative_path(root, &target)?; - let new_page_id = normalize_metadata_page_id(&format!( - "local-mdid:{}", - encode_local_id_segment(&format!("{}:{new_relative_path}", local_workspace_id(root))) - )); - let source_markdown = fs::read_to_string(&markdown_file.path).map_err(|error| { - WebError::bad_request_code( - "local_tree_command_failed", - format!( - "无法读取待复制 Markdown 文件 {}: {error}", - markdown_file.path.display() - ), - ) - })?; - fs::write( - &target, - markdown_with_frontmatter_fields(&source_markdown, &[("mnote_id", new_page_id.as_str())]), - ) - .map_err(|error| { - WebError::bad_request_code( - "local_tree_command_failed", - format!("无法复制本地 Markdown 文件到 {}: {error}", target.display()), - ) - })?; - metadata - .page_ids - .insert(new_relative_path.clone(), new_page_id.clone()); - write_page_ids_metadata(root, &metadata.page_ids)?; + let new_page_id = local_markdown_path_page_id(&new_relative_path); Ok(json!({ "ok": true, "id": new_page_id, @@ -2898,7 +3316,7 @@ fn move_local_markdown_page( document_id: &str, parent_id: Option<&str>, ) -> Result { - let mut metadata = load_local_folder_metadata(root)?; + let metadata = load_local_folder_metadata(root)?; let markdown_file = find_markdown_by_page_id(root, &metadata, document_id)?.ok_or_else(|| { WebError::bad_request_code( @@ -2907,6 +3325,15 @@ fn move_local_markdown_page( ) })?; let target_directory = resolve_local_parent_directory(root, &metadata, parent_id)?; + if let Some(bundle_dir) = markdown_page_bundle_directory(&markdown_file.path) { + return move_local_markdown_bundle( + root, + document_id, + &markdown_file, + &bundle_dir, + &target_directory, + ); + } if markdown_file.path.parent() == Some(target_directory.as_path()) { return Ok(json!({ "ok": true, @@ -2951,16 +3378,85 @@ fn move_local_markdown_page( ) })?; let new_relative_path = normalize_relative_path(root, &target)?; - metadata.page_ids.remove(&old_relative_path); - metadata - .page_ids - .insert(new_relative_path.clone(), document_id.to_string()); - write_page_ids_metadata(root, &metadata.page_ids)?; + let new_document_id = local_markdown_path_page_id(&new_relative_path); Ok(json!({ "ok": true, - "id": document_id, - "documentId": document_id, + "id": new_document_id, + "documentId": new_document_id, "relativePath": new_relative_path, + "previousDocumentId": document_id, + "previousRelativePath": old_relative_path, + "action": "move", + "sourceKind": "local_folder", + })) +} + +fn move_local_markdown_bundle( + root: &Path, + document_id: &str, + markdown_file: &LocalFolderEntry, + bundle_dir: &Path, + target_directory: &Path, +) -> Result { + if bundle_dir.parent() == Some(target_directory) { + return Ok(json!({ + "ok": true, + "id": document_id, + "documentId": document_id, + "relativePath": markdown_file.relative_path, + "action": "move", + "sourceKind": "local_folder", + })); + } + if target_directory == bundle_dir || target_directory.starts_with(bundle_dir) { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + "禁止把本地页面移动到自身或后代", + )); + } + let stem = bundle_dir + .file_name() + .and_then(|name| name.to_str()) + .map(|name| sanitize_file_stem(name, "页面")) + .unwrap_or_else(|| "页面".to_string()); + let target_bundle = next_available_directory_path(target_directory, &stem); + fs::rename(bundle_dir, &target_bundle).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法移动本地页面目录 {}: {error}", bundle_dir.display()), + ) + })?; + let main_file_name = markdown_file + .path + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("page.md"); + let moved_markdown = target_bundle.join(main_file_name); + let target_stem = target_bundle + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or(&stem); + let target_markdown = target_bundle.join(format!("{target_stem}.md")); + if moved_markdown != target_markdown { + fs::rename(&moved_markdown, &target_markdown).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法重命名移动后的 Markdown 文件 {}: {error}", + moved_markdown.display() + ), + ) + })?; + } + let new_relative_path = normalize_relative_path(root, &target_markdown)?; + let new_document_id = local_markdown_path_page_id(&new_relative_path); + Ok(json!({ + "ok": true, + "id": new_document_id, + "documentId": new_document_id, + "relativePath": new_relative_path, + "previousDocumentId": document_id, + "previousRelativePath": markdown_file.relative_path, "action": "move", "sourceKind": "local_folder", })) @@ -2977,7 +3473,7 @@ fn move_local_directory( "不能移动本地 workspace root", )); } - let mut metadata = load_local_folder_metadata(root)?; + let metadata = load_local_folder_metadata(root)?; let target_directory = resolve_local_parent_directory(root, &metadata, parent_id)?; if target_directory == directory || target_directory.starts_with(directory) { return Err(WebError::bad_request_code( @@ -3000,7 +3496,6 @@ fn move_local_directory( .map(|name| sanitize_file_stem(name, "文件夹")) .unwrap_or_else(|| "文件夹".to_string()); let target = next_available_directory_path(&target_directory, &stem); - let old_relative_path = normalize_relative_path(root, directory)?; fs::rename(directory, &target).map_err(|error| { WebError::bad_request_code( "local_tree_command_failed", @@ -3008,12 +3503,6 @@ fn move_local_directory( ) })?; let new_relative_path = normalize_relative_path(root, &target)?; - rewrite_page_ids_prefix( - &mut metadata.page_ids, - &old_relative_path, - &new_relative_path, - ); - write_page_ids_metadata(root, &metadata.page_ids)?; Ok(json!({ "ok": true, "id": local_directory_group_id(&new_relative_path), @@ -3024,6 +3513,9 @@ fn move_local_directory( } fn trash_local_entry(root: &Path, entry_id: &str) -> Result { + if let Some(directory) = resolve_local_directory_id(root, entry_id)? { + return trash_local_directory(root, entry_id, &directory); + } if let Some(file) = resolve_local_raw_file_id(root, entry_id)? { return trash_local_raw_file(root, entry_id, &file); } @@ -3032,6 +3524,9 @@ fn trash_local_entry(root: &Path, entry_id: &str) -> Result { fn restore_local_entry(root: &Path, entry_id: &str) -> Result { let metadata = load_local_folder_metadata(root)?; + if find_local_directory_trash_entry_key(&metadata, entry_id).is_some() { + return restore_local_directory(root, entry_id); + } if find_local_file_trash_entry_key(&metadata, entry_id).is_some() { return restore_local_raw_file(root, entry_id); } @@ -3040,6 +3535,9 @@ fn restore_local_entry(root: &Path, entry_id: &str) -> Result { fn purge_local_entry(root: &Path, entry_id: &str) -> Result { let metadata = load_local_folder_metadata(root)?; + if find_local_directory_trash_entry_key(&metadata, entry_id).is_some() { + return purge_local_directory(root, entry_id); + } if find_local_file_trash_entry_key(&metadata, entry_id).is_some() { return purge_local_raw_file(root, entry_id); } @@ -3068,45 +3566,69 @@ fn trash_local_markdown_page(root: &Path, document_id: &str) -> Result Result Result { + if directory == root { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + "不能删除本地 workspace root", + )); + } + let mut metadata = load_local_folder_metadata(root)?; + let relative_path = normalize_relative_path(root, directory)?; + if relative_path == ".mnote" || relative_path.starts_with(".mnote/") { + return Err(WebError::bad_request_code( + "local_tree_command_failed", + "不能删除 MNote 元数据目录", + )); + } + let trash_dir = root.join(".mnote").join("trash"); + fs::create_dir_all(&trash_dir).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法创建本地回收站 {}: {error}", trash_dir.display()), + ) + })?; + let directory_name = directory + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("local-folder"); + let target = next_available_directory_path(&trash_dir, directory_name); + fs::rename(directory, &target).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法移动本地文件夹到回收站 {}: {error}", + directory.display() + ), + ) + })?; + let trash_relative_path = normalize_relative_path(root, &target)?; + let trash_entry_id = local_directory_trash_entry_id(&relative_path); + let now = now_ms(); + metadata.trash_entries.insert( + trash_entry_id.clone(), + LocalTrashEntry { + document_id: entry_id.to_string(), + resource_kind: "local_directory".to_string(), + resource_scope: "local_folder".to_string(), + original_file_path: relative_path.clone(), + trashed_file_path: trash_relative_path.clone(), + trash_entry_id: trash_entry_id.clone(), + original_relative_path: relative_path.clone(), + trash_relative_path: trash_relative_path.clone(), + deleted_at_ms: now, + archived_at: now, + purged_at: None, + }, + ); + write_trash_index_metadata(root, &metadata.trash_entries)?; + Ok(json!({ + "ok": true, + "id": entry_id, + "documentId": entry_id, + "resourceKind": "local_directory", + "resourceScope": "local_folder", + "originalFilePath": relative_path, + "trashEntryId": trash_entry_id, + "trashPath": trash_relative_path, + "action": "delete", + "canonicalCommand": "tree.resource.archive", + "sourceKind": "local_folder", + })) +} + fn restore_local_markdown_page(root: &Path, document_id: &str) -> Result { let mut metadata = load_local_folder_metadata(root)?; let trash_entry = metadata @@ -3188,6 +3781,15 @@ fn restore_local_markdown_page(root: &Path, document_id: &str) -> Result Result Result { + if !trash_path.is_dir() { + return Err(WebError::bad_request_code( + "local_trash_entry_not_found", + "本地回收站页面目录不存在,无法恢复", + )); + } + let original_bundle_path = + resolve_metadata_relative_path(root, &trash_entry.original_relative_path)?; + let parent = original_bundle_path.parent().ok_or_else(|| { + WebError::bad_request_code("local_tree_command_failed", "无法解析页面恢复目标目录") + })?; + fs::create_dir_all(parent).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法创建页面恢复目标目录 {}: {error}", parent.display()), + ) + })?; + let stem = original_bundle_path + .file_name() + .and_then(|name| name.to_str()) + .map(|name| sanitize_file_stem(name, "页面")) + .unwrap_or_else(|| "页面".to_string()); + let target_bundle = if original_bundle_path.exists() { + next_available_directory_path(parent, &stem) + } else { + original_bundle_path + }; + fs::rename(trash_path, &target_bundle).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法从本地回收站恢复页面目录 {}: {error}", + trash_path.display() + ), + ) + })?; + let target_stem = target_bundle + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or(&stem); + let restored_markdown = target_bundle.join(format!("{target_stem}.md")); + if !restored_markdown.is_file() { + return Err(WebError::bad_request_code( + "local_trash_entry_not_found", + "恢复后的页面目录缺少同名 Markdown 文件", + )); + } + let restored_relative_path = normalize_relative_path(root, &restored_markdown)?; + let restored_document_id = local_markdown_path_page_id(&restored_relative_path); + metadata.trash_entries.remove(document_id); + write_trash_index_metadata(root, &metadata.trash_entries)?; + Ok(json!({ + "ok": true, + "id": restored_document_id, + "documentId": restored_document_id, + "relativePath": restored_relative_path, + "previousDocumentId": document_id, "action": "restore", "sourceKind": "local_folder", })) @@ -3304,20 +3973,96 @@ fn restore_local_raw_file(root: &Path, entry_id: &str) -> Result Result { + let mut metadata = load_local_folder_metadata(root)?; + let trash_key = find_local_directory_trash_entry_key(&metadata, entry_id).ok_or_else(|| { + WebError::bad_request_code( + "local_trash_entry_not_found", + "找不到要恢复的本地文件夹回收站记录", + ) + })?; + let trash_entry = metadata + .trash_entries + .get(&trash_key) + .cloned() + .ok_or_else(|| { + WebError::bad_request_code( + "local_trash_entry_not_found", + "找不到要恢复的本地文件夹回收站记录", + ) + })?; + let original_relative_path = local_trash_original_path(&trash_entry); + let trash_relative_path = local_trash_file_path(&trash_entry); + let trash_path = resolve_metadata_relative_path(root, &trash_relative_path)?; + if !trash_path.is_dir() { + return Err(WebError::bad_request_code( + "local_trash_entry_not_found", + "本地文件夹回收站目录不存在,无法恢复", + )); + } + let original_path = resolve_metadata_relative_path(root, &original_relative_path)?; + if original_path.exists() { + return Err(WebError::new( + StatusCode::CONFLICT, + "local_directory_restore_conflict", + "本地文件夹原路径已存在,恢复会覆盖用户文件", + )); + } + let parent = original_path.parent().ok_or_else(|| { + WebError::bad_request_code("local_tree_command_failed", "无法解析文件夹恢复目标目录") + })?; + fs::create_dir_all(parent).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法创建文件夹恢复目标目录 {}: {error}", parent.display()), + ) + })?; + fs::rename(&trash_path, &original_path).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法从本地回收站恢复文件夹 {}: {error}", + trash_path.display() + ), + ) + })?; + metadata.trash_entries.remove(&trash_key); + write_trash_index_metadata(root, &metadata.trash_entries)?; + Ok(json!({ + "ok": true, + "id": entry_id, + "documentId": entry_id, + "resourceKind": "local_directory", + "resourceScope": "local_folder", + "relativePath": normalize_relative_path(root, &original_path)?, + "trashEntryId": trash_key, + "action": "restore", + "canonicalCommand": "tree.resource.restore", + "sourceKind": "local_folder", + })) +} + fn purge_local_markdown_page(root: &Path, document_id: &str) -> Result { let mut metadata = load_local_folder_metadata(root)?; if let Some(markdown_file) = find_markdown_by_page_id(root, &metadata, document_id)? { - fs::remove_file(&markdown_file.path).map_err(|error| { - WebError::bad_request_code( - "local_tree_command_failed", - format!( - "无法永久删除本地 Markdown 文件 {}: {error}", - markdown_file.path.display() - ), - ) - })?; - metadata.page_ids.remove(&markdown_file.relative_path); - write_page_ids_metadata(root, &metadata.page_ids)?; + if let Some(bundle_dir) = markdown_page_bundle_directory(&markdown_file.path) { + fs::remove_dir_all(&bundle_dir).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!("无法永久删除本地页面目录 {}: {error}", bundle_dir.display()), + ) + })?; + } else { + fs::remove_file(&markdown_file.path).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法永久删除本地 Markdown 文件 {}: {error}", + markdown_file.path.display() + ), + ) + })?; + } return Ok(json!({ "ok": true, "id": document_id, @@ -3334,11 +4079,16 @@ fn purge_local_markdown_page(root: &Path, document_id: &str) -> Result Result Result { + let mut metadata = load_local_folder_metadata(root)?; + let trash_key = find_local_directory_trash_entry_key(&metadata, entry_id).ok_or_else(|| { + WebError::bad_request_code( + "local_trash_entry_not_found", + "找不到要永久删除的本地文件夹回收站记录", + ) + })?; + let trash_entry = metadata.trash_entries.remove(&trash_key).ok_or_else(|| { + WebError::bad_request_code( + "local_trash_entry_not_found", + "找不到要永久删除的本地文件夹回收站记录", + ) + })?; + let trash_relative_path = local_trash_file_path(&trash_entry); + let trash_path = resolve_metadata_relative_path(root, &trash_relative_path)?; + if trash_path.exists() { + fs::remove_dir_all(&trash_path).map_err(|error| { + WebError::bad_request_code( + "local_tree_command_failed", + format!( + "无法永久删除本地回收站文件夹 {}: {error}", + trash_path.display() + ), + ) + })?; + } + write_trash_index_metadata(root, &metadata.trash_entries)?; + Ok(json!({ + "ok": true, + "id": entry_id, + "documentId": entry_id, + "resourceKind": "local_directory", + "resourceScope": "local_folder", + "trashEntryId": trash_key, + "action": "purge", + "canonicalCommand": "tree.resource.purge", + "sourceKind": "local_folder", + })) +} + fn purge_local_raw_file(root: &Path, entry_id: &str) -> Result { let mut metadata = load_local_folder_metadata(root)?; let trash_key = find_local_file_trash_entry_key(&metadata, entry_id).ok_or_else(|| { @@ -3538,10 +4329,18 @@ fn local_file_trash_entry_id(relative_path: &str) -> String { format!("local-file:{relative_path}") } +fn local_directory_trash_entry_id(relative_path: &str) -> String { + format!("local-dir-trash:{relative_path}") +} + fn is_local_file_trash_entry(entry: &LocalTrashEntry) -> bool { entry.resource_kind == "local_file" || entry.trash_entry_id.starts_with("local-file:") } +fn is_local_directory_trash_entry(entry: &LocalTrashEntry) -> bool { + entry.resource_kind == "local_directory" || entry.trash_entry_id.starts_with("local-dir-trash:") +} + fn local_trash_original_path(entry: &LocalTrashEntry) -> String { if !entry.original_file_path.trim().is_empty() { entry.original_file_path.clone() @@ -3593,6 +4392,47 @@ fn find_local_file_trash_entry_key( .map(|(key, _)| key.clone()) } +fn find_local_directory_trash_entry_key( + metadata: &LocalFolderMetadata, + entry_id: &str, +) -> Option { + let trimmed = entry_id.trim(); + if metadata + .trash_entries + .get(trimmed) + .map(is_local_directory_trash_entry) + .unwrap_or(false) + { + return Some(trimmed.to_string()); + } + let relative_path = if let Some(encoded) = trimmed.strip_prefix("local-dir:") { + decode_local_id_segment(encoded).ok()? + } else { + trimmed + .strip_prefix("local:node:") + .or_else(|| trimmed.strip_prefix("local:folder:")) + .unwrap_or(trimmed) + .to_string() + }; + let expected_key = local_directory_trash_entry_id(&relative_path); + if metadata + .trash_entries + .get(&expected_key) + .map(is_local_directory_trash_entry) + .unwrap_or(false) + { + return Some(expected_key); + } + metadata + .trash_entries + .iter() + .find(|(_, entry)| { + is_local_directory_trash_entry(entry) + && local_trash_original_path(entry) == relative_path + }) + .map(|(key, _)| key.clone()) +} + pub fn local_workspace_id_from_root_uri(root_uri: &str) -> Result { let root_path = parse_file_root_uri(root_uri)?; let canonical_root = root_path.canonicalize().map_err(|error| { @@ -3663,36 +4503,28 @@ fn percent_decode_file_uri_path(value: &str) -> Result { fn load_local_folder_metadata(root: &Path) -> Result { Ok(LocalFolderMetadata { - page_ids: load_metadata_string_map(&root.join(".mnote").join("page-ids.json"))?, page_options: load_metadata_value_map(&root.join(".mnote").join("page-options.json"))?, trash_entries: load_trash_index_map(&root.join(".mnote").join("trash-index.json"))?, }) } -fn load_metadata_string_map(path: &Path) -> Result, WebError> { - if !path.exists() { - return Ok(BTreeMap::new()); +pub(crate) fn load_local_trash_entries( + root_uri: &str, +) -> Result, WebError> { + let root_path = parse_file_root_uri(root_uri)?; + let canonical_root = root_path.canonicalize().map_err(|error| { + WebError::bad_request_code( + "local_folder_unavailable", + format!("无法访问本地文件夹: {error}"), + ) + })?; + if !canonical_root.is_dir() { + return Err(WebError::bad_request_code( + "local_folder_not_directory", + "本地 rootUri 必须指向目录", + )); } - let value = read_metadata_json(path)?; - let source = value - .get("pages") - .or_else(|| value.get("pageIds")) - .unwrap_or(&value); - let Some(map) = source.as_object() else { - return Err(metadata_invalid(path, "元数据必须是对象")); - }; - let mut result = BTreeMap::new(); - for (key, value) in map { - let Some(page_id) = value - .as_str() - .map(str::trim) - .filter(|item| !item.is_empty()) - else { - return Err(metadata_invalid(path, "page id 必须是非空字符串")); - }; - result.insert(key.clone(), page_id.to_string()); - } - Ok(result) + Ok(load_local_folder_metadata(&canonical_root)?.trash_entries) } fn load_metadata_value_map(path: &Path) -> Result, WebError> { @@ -3767,42 +4599,7 @@ pub fn initialize_local_page_id(root_uri: &str, relative_path: &str) -> Result, -) -> Result<(), WebError> { - let mnote_dir = root.join(".mnote"); - fs::create_dir_all(&mnote_dir).map_err(|error| { - WebError::bad_request_code( - "local_metadata_write_failed", - format!("无法创建本地元数据目录 {}: {error}", mnote_dir.display()), - ) - })?; - let path = mnote_dir.join("page-ids.json"); - let value = json!({ - "version": 1, - "pages": page_ids, - }); - write_json_atomic(&path, &value) + Ok(local_markdown_path_page_id(relative_path)) } fn write_trash_index_metadata( @@ -3909,7 +4706,7 @@ fn scan_directory( expandable: entry.is_dir && child_count > 0, expanded_by_default: depth < 1 && entry.is_dir && entry_count <= 80, document_id: if is_markdown_file(&entry.file_name) { - Some(local_markdown_page_id(&entry.relative_path, None, metadata)) + Some(local_markdown_path_page_id(&entry.relative_path)) } else { None }, @@ -3931,32 +4728,6 @@ fn scan_directory( } } - if rows.is_empty() && directory == root { - rows.push(LocalFolderRow { - node_id: local_node_id("."), - row_id: "local:folder:.".to_string(), - parent_node_id: None, - title: root - .file_name() - .and_then(|name| name.to_str()) - .unwrap_or("local folder") - .to_string(), - depth: 0, - position: 0, - row_kind: "folder".to_string(), - icon_hint: "folder".to_string(), - relative_path: ".".to_string(), - source_uri: root_source_uri.to_string(), - child_count: 0, - expandable: false, - expanded_by_default: false, - document_id: None, - capabilities: local_path_capabilities(root), - workspace_id: workspace_id.to_string(), - root_source_uri: root_source_uri.to_string(), - }); - } - Ok(()) } @@ -4018,13 +4789,6 @@ fn local_entry_capabilities(entry: &LocalFolderEntry) -> Vec { capabilities } -fn local_path_capabilities(path: &Path) -> Vec { - match fs::symlink_metadata(path) { - Ok(metadata) if metadata.permissions().readonly() => vec!["readonly".to_string()], - _ => Vec::new(), - } -} - fn normalize_relative_path(root: &Path, path: &Path) -> Result { if !path.starts_with(root) { return Err(WebError::bad_request_code( @@ -4088,6 +4852,7 @@ fn scan_markdown_page_tree( directory: &Path, parent_node_id: Option, depth: u32, + skip_markdown_relative_path: Option, metadata: &LocalFolderMetadata, rows: &mut Vec, workspace_id: &str, @@ -4097,39 +4862,106 @@ fn scan_markdown_page_tree( let mut directory_rows = Vec::::new(); let mut contains_markdown = false; for (position, entry) in entries.into_iter().enumerate() { + if skip_markdown_relative_path + .as_deref() + .map(|skip| skip == entry.relative_path) + .unwrap_or(false) + { + continue; + } if entry.is_dir && !entry.is_symlink { - let node_id = local_directory_group_id(&entry.relative_path); + if let Some(nested_main) = nested_bundle_main_markdown(&entry.path) { + let nested_relative = normalize_relative_path(root, &nested_main)?; + let markdown = fs::read_to_string(&nested_main).unwrap_or_default(); + let parsed = parse_markdown_page( + &markdown, + nested_main + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("page.md"), + ); + let page_id = local_markdown_path_page_id(&nested_relative); + let mut child_rows = Vec::new(); + let child_contains_markdown = scan_markdown_page_tree( + root, + &entry.path, + Some(page_id.clone()), + depth + 1, + Some(nested_relative.clone()), + metadata, + &mut child_rows, + workspace_id, + root_source_uri, + )?; + let child_count = child_rows.len() as u32; + directory_rows.push(LocalFolderRow { + node_id: page_id.clone(), + row_id: format!("local:page:{nested_relative}"), + parent_node_id: parent_node_id.clone(), + title: parsed.title, + depth, + position: position as u32, + row_kind: "document".to_string(), + icon_hint: "markdown".to_string(), + relative_path: nested_relative, + source_uri: file_uri_for_path(&nested_main), + child_count, + expandable: child_contains_markdown, + expanded_by_default: child_contains_markdown && depth < 2, + document_id: Some(page_id), + capabilities: local_entry_capabilities(&entry), + workspace_id: workspace_id.to_string(), + root_source_uri: root_source_uri.to_string(), + }); + directory_rows.extend(child_rows); + contains_markdown = true; + continue; + } + // VSCode 风格 loose Markdown 也可作为页面节点管理; + // 若同级存在同名目录,该目录中的 Markdown 作为该页面的子页面投影。 + let sibling_md = directory.join(format!("{}.md", entry.file_name)); + let has_sibling_md = + sibling_md.exists() && sibling_md.starts_with(root) && sibling_md.is_file(); + let parent_for_children = if has_sibling_md { + let sibling_relative = normalize_relative_path(root, &sibling_md)?; + Some(local_markdown_path_page_id(&sibling_relative)) + } else { + Some(local_directory_group_id(&entry.relative_path)) + }; let mut child_rows = Vec::new(); let child_contains_markdown = scan_markdown_page_tree( root, &entry.path, - Some(node_id.clone()), + parent_for_children, depth + 1, + None, metadata, &mut child_rows, workspace_id, root_source_uri, )?; if child_contains_markdown { - directory_rows.push(LocalFolderRow { - node_id, - row_id: format!("local:page-group:{}", entry.relative_path), - parent_node_id: parent_node_id.clone(), - title: entry.file_name.clone(), - depth, - position: position as u32, - row_kind: "document".to_string(), - icon_hint: "folder".to_string(), - relative_path: entry.relative_path.clone(), - source_uri: file_uri_for_path(&entry.path), - child_count: 0, - expandable: true, - expanded_by_default: depth < 2, - document_id: None, - capabilities: local_entry_capabilities(&entry), - workspace_id: workspace_id.to_string(), - root_source_uri: root_source_uri.to_string(), - }); + if !has_sibling_md { + directory_rows.push(LocalFolderRow { + node_id: local_directory_group_id(&entry.relative_path), + row_id: format!("local:page-group:{}", entry.relative_path), + parent_node_id: parent_node_id.clone(), + title: entry.file_name.clone(), + depth, + position: position as u32, + row_kind: "document".to_string(), + icon_hint: "folder".to_string(), + relative_path: entry.relative_path.clone(), + source_uri: file_uri_for_path(&entry.path), + child_count: 0, + expandable: true, + expanded_by_default: depth < 2, + document_id: None, + capabilities: local_entry_capabilities(&entry), + workspace_id: workspace_id.to_string(), + root_source_uri: root_source_uri.to_string(), + }); + } directory_rows.extend(child_rows); contains_markdown = true; } @@ -4138,8 +4970,15 @@ fn scan_markdown_page_tree( if is_markdown_file(&entry.file_name) { let markdown = fs::read_to_string(&entry.path).unwrap_or_default(); let parsed = parse_markdown_page(&markdown, &entry.file_name); - let page_id = - local_markdown_page_id(&entry.relative_path, parsed.mnote_id.as_deref(), metadata); + let page_id = local_markdown_path_page_id(&entry.relative_path); + let md_stem = entry + .path + .file_stem() + .and_then(|s| s.to_str()) + .unwrap_or("") + .to_string(); + let sibling_dir = directory.join(&md_stem); + let has_sibling_dir = sibling_dir.is_dir() && sibling_dir.starts_with(root); directory_rows.push(LocalFolderRow { node_id: page_id.clone(), row_id: format!("local:page:{}", entry.relative_path), @@ -4152,8 +4991,8 @@ fn scan_markdown_page_tree( relative_path: entry.relative_path.clone(), source_uri: file_uri_for_path(&entry.path), child_count: 0, - expandable: false, - expanded_by_default: false, + expandable: has_sibling_dir, + expanded_by_default: has_sibling_dir && depth < 2, document_id: Some(page_id), capabilities: local_entry_capabilities(&entry), workspace_id: workspace_id.to_string(), @@ -4187,11 +5026,8 @@ fn find_markdown_by_page_id( if !is_markdown_file(&entry.file_name) { continue; } - let markdown = fs::read_to_string(&entry.path).unwrap_or_default(); - let parsed = parse_markdown_page(&markdown, &entry.file_name); - let page_id = - local_markdown_page_id(&entry.relative_path, parsed.mnote_id.as_deref(), metadata); - if page_id == document_id { + let path_page_id = local_markdown_path_page_id(&entry.relative_path); + if path_page_id == document_id { return Ok(Some(entry)); } } @@ -4279,38 +5115,10 @@ fn local_directory_group_id(relative_path: &str) -> String { format!("local-dir:{}", encode_local_id_segment(relative_path)) } -fn local_markdown_page_id( - relative_path: &str, - mnote_id: Option<&str>, - metadata: &LocalFolderMetadata, -) -> String { - if let Some(mnote_id) = mnote_id.map(str::trim).filter(|value| !value.is_empty()) { - if mnote_id.starts_with("local-mdid:") || mnote_id.starts_with("local-md:") { - return mnote_id.to_string(); - } - return format!("local-mdid:{}", encode_local_id_segment(mnote_id)); - } - if let Some(page_id) = metadata - .page_ids - .get(relative_path) - .map(String::as_str) - .map(str::trim) - .filter(|value| !value.is_empty()) - { - return normalize_metadata_page_id(page_id); - } +fn local_markdown_path_page_id(relative_path: &str) -> String { format!("local-md:{}", encode_local_id_segment(relative_path)) } -fn normalize_metadata_page_id(page_id: &str) -> String { - let trimmed = page_id.trim(); - if trimmed.starts_with("local-md:") || trimmed.starts_with("local-mdid:") { - trimmed.to_string() - } else { - format!("local-mdid:{}", encode_local_id_segment(trimmed)) - } -} - fn page_options_from_metadata(value: &Value) -> PageOptions { let mut options = PageOptions::default(); if let Some(wide_layout) = value @@ -4367,7 +5175,7 @@ fn page_options_from_metadata(value: &Value) -> PageOptions { options } -fn local_workspace_id(root: &Path) -> String { +pub(crate) fn local_workspace_id(root: &Path) -> String { if let Ok(manifest) = load_local_workspace_manifest(root) { if !manifest.workspace_id.trim().is_empty() { return manifest.workspace_id; @@ -4458,7 +5266,9 @@ fn icon_hint_for_entry(entry: &LocalFolderEntry) -> String { return "symlink".to_string(); } let lower = entry.file_name.to_ascii_lowercase(); - if lower.ends_with(".md") || lower.ends_with(".markdown") { + if is_local_mindmap_file_name(&entry.file_name) { + "mindmap" + } else if lower.ends_with(".md") || lower.ends_with(".markdown") { "markdown" } else if matches!( extension(&lower).as_deref(), @@ -4477,13 +5287,25 @@ fn icon_hint_for_entry(entry: &LocalFolderEntry) -> String { "audio" } else if lower.ends_with(".pdf") { "pdf" - } else if matches!(extension(&lower).as_deref(), Some("epub" | "mobi")) { - "book" } else if matches!( extension(&lower).as_deref(), - Some("csv" | "tsv" | "xlsx" | "xls") + Some( + "doc" + | "docx" + | "odt" + | "rtf" + | "ppt" + | "pptx" + | "odp" + | "xls" + | "xlsx" + | "ods" + | "csv" + ) ) { - "table" + "office" + } else if matches!(extension(&lower).as_deref(), Some("epub" | "mobi")) { + "book" } else { "unknown" } @@ -4497,7 +5319,7 @@ fn extension(file_name: &str) -> Option { .map(ToOwned::to_owned) } -fn encode_local_id_segment(value: &str) -> String { +pub(crate) fn encode_local_id_segment(value: &str) -> String { let mut encoded = String::with_capacity(value.len()); for byte in value.as_bytes() { let character = *byte as char; @@ -4538,38 +5360,6 @@ pub(crate) fn decode_local_id_segment(value: &str) -> Result { .map_err(|_| WebError::bad_request_code("local_id_invalid", "本地 page id 不是 UTF-8")) } -fn rewrite_page_ids_prefix( - page_ids: &mut BTreeMap, - old_relative_path: &str, - new_relative_path: &str, -) { - let old_prefix = format!("{old_relative_path}/"); - let replacements = page_ids - .iter() - .filter_map(|(relative_path, page_id)| { - if relative_path == old_relative_path { - Some(( - relative_path.clone(), - new_relative_path.to_string(), - page_id.clone(), - )) - } else if let Some(rest) = relative_path.strip_prefix(&old_prefix) { - Some(( - relative_path.clone(), - format!("{new_relative_path}/{rest}"), - page_id.clone(), - )) - } else { - None - } - }) - .collect::>(); - for (old_key, new_key, page_id) in replacements { - page_ids.remove(&old_key); - page_ids.insert(new_key, page_id); - } -} - fn sanitize_file_stem(value: &str, fallback: &str) -> String { let sanitized = value .trim() @@ -4630,6 +5420,25 @@ fn next_available_path(directory: &Path, stem: &str, extension: &str) -> PathBuf directory.join(format!("{stem}-{}.{}", std::process::id(), extension)) } +fn copy_directory_recursively(source: &Path, target: &Path) -> std::io::Result<()> { + fs::create_dir_all(target)?; + for entry in fs::read_dir(source)? { + let entry = entry?; + let source_path = entry.path(); + let target_path = target.join(entry.file_name()); + let metadata = fs::symlink_metadata(&source_path)?; + if metadata.file_type().is_symlink() { + continue; + } + if metadata.is_dir() { + copy_directory_recursively(&source_path, &target_path)?; + } else if metadata.is_file() { + fs::copy(&source_path, &target_path)?; + } + } + Ok(()) +} + fn next_available_raw_path(directory: &Path, file_name: &str) -> PathBuf { let first = directory.join(file_name); if !first.exists() { @@ -4720,29 +5529,18 @@ fn next_available_directory_path(directory: &Path, stem: &str) -> PathBuf { directory.join(format!("{stem}-{}", std::process::id())) } -fn markdown_with_frontmatter_fields(markdown: &str, fields: &[(&str, &str)]) -> String { - let (frontmatter, body) = split_frontmatter(markdown); - let mut lines = frontmatter - .unwrap_or_default() - .lines() - .map(ToOwned::to_owned) - .collect::>(); - for (key, value) in fields { - let replacement = format!("{key}: {}", value.trim()); - if let Some(existing) = lines.iter_mut().find(|line| { - line.split_once(':') - .map(|(candidate, _)| candidate.trim() == *key) - .unwrap_or(false) - }) { - *existing = replacement; - } else { - lines.push(replacement); - } - } - format!("---\n{}\n---\n{}", lines.join("\n"), body) +fn editor_blocks_to_markdown_for_file( + content: &Value, + root: &Path, + markdown_path: &Path, +) -> String { + editor_blocks_to_markdown_with_rewrite(content, Some((root, markdown_path))) } -fn editor_blocks_to_markdown(content: &Value) -> String { +fn editor_blocks_to_markdown_with_rewrite( + content: &Value, + local_file_context: Option<(&Path, &Path)>, +) -> String { let blocks = if let Some(array) = content.as_array() { array.clone() } else { @@ -4769,7 +5567,12 @@ fn editor_blocks_to_markdown(content: &Value) -> String { } else { inline_markdown }; - if text.is_empty() && !matches!(block_type, "divider" | "media" | "image" | "table") { + if text.is_empty() + && !matches!( + block_type, + "divider" | "media" | "image" | "mindmap" | "table" + ) + { lines.push(String::new()); continue; } @@ -4789,7 +5592,13 @@ fn editor_blocks_to_markdown(content: &Value) -> String { if src.is_empty() { lines.push(text); } else { - lines.push(format!("![{}]({src})", alt.replace(']', r"\]"))); + let src = rewrite_local_open_url_to_markdown_relative(src, local_file_context) + .unwrap_or_else(|| src.to_string()); + lines.push(format!( + "![{}]({})", + alt.replace(']', r"\]"), + markdown_link_target(&src) + )); } } "media" => { @@ -4812,10 +5621,49 @@ fn editor_blocks_to_markdown(content: &Value) -> String { if url.is_empty() { lines.push(text); } else { - lines.push(format!( - "[{}]({url})", - if name.is_empty() { url } else { name } - )); + let url = rewrite_local_open_url_to_markdown_relative(url, local_file_context) + .unwrap_or_else(|| url.to_string()); + let label = if name.is_empty() { url.as_str() } else { name }; + lines.push(format!("[{}]({})", label, markdown_link_target(&url))); + } + } + "mindmap" => { + let props = block.get("props").and_then(Value::as_object); + let source = props + .and_then(|props| { + props + .get("sourcePath") + .or_else(|| props.get("mindmapId")) + .or_else(|| props.get("mindmap_id")) + }) + .and_then(Value::as_str) + .unwrap_or("") + .trim(); + let label = props + .and_then(|props| props.get("name").or_else(|| props.get("title"))) + .and_then(Value::as_str) + .unwrap_or("思维导图") + .trim(); + if source.is_empty() { + lines.push(text); + } else { + let source = rewrite_local_mindmap_source_to_markdown_relative( + source, + local_file_context, + ) + .unwrap_or_else(|| { + if is_local_mindmap_file_name(source) || source.contains('/') { + source.to_string() + } else { + local_mindmap_file_name(source) + } + }); + let label = if label.is_empty() { + "思维导图" + } else { + label + }; + lines.push(format!("[{}]({})", label, markdown_link_target(&source))); } } "heading" => { @@ -4871,6 +5719,91 @@ fn editor_blocks_to_markdown(content: &Value) -> String { } } +fn markdown_link_target(target: &str) -> String { + let trimmed = target.trim(); + if trimmed.is_empty() { + return String::new(); + } + if trimmed + .chars() + .any(|ch| ch.is_whitespace() || matches!(ch, '(' | ')' | '<' | '>')) + { + format!("<{}>", trimmed.replace('>', "%3E")) + } else { + trimmed.to_string() + } +} + +fn rewrite_local_mindmap_source_to_markdown_relative( + value: &str, + local_file_context: Option<(&Path, &Path)>, +) -> Option { + if let Some(relative_path) = local_mindmap_relative_path_from_id(value) { + let (root, markdown_path) = local_file_context?; + let asset_path = root.canonicalize().ok()?.join(relative_path); + let markdown_dir = markdown_path.parent()?; + return normalize_markdown_relative_asset_path(markdown_dir, &asset_path).ok(); + } + rewrite_local_open_url_to_markdown_relative(value, local_file_context) +} + +fn rewrite_local_open_url_to_markdown_relative( + value: &str, + local_file_context: Option<(&Path, &Path)>, +) -> Option { + let (root, markdown_path) = local_file_context?; + let parsed = Url::parse(value).ok()?; + if parsed.path() != "/api/local-folder/files/open" { + return None; + } + let root_uri = parsed + .query_pairs() + .find(|(key, _)| key == "rootUri") + .map(|(_, value)| value.into_owned())?; + let asset_relative_path = parsed + .query_pairs() + .find(|(key, _)| key == "path") + .map(|(_, value)| value.into_owned())?; + let parsed_root = parse_file_root_uri(&root_uri).ok()?.canonicalize().ok()?; + let canonical_root = root.canonicalize().ok()?; + if parsed_root != canonical_root { + return None; + } + let asset_path = canonical_root.join(asset_relative_path); + let markdown_dir = markdown_path.parent()?; + normalize_markdown_relative_asset_path(markdown_dir, &asset_path).ok() +} + +fn content_type_for_path(path: &Path) -> HeaderValue { + let extension = path + .extension() + .and_then(|value| value.to_str()) + .unwrap_or("") + .to_ascii_lowercase(); + let content_type = match extension.as_str() { + "jpg" | "jpeg" => "image/jpeg", + "png" => "image/png", + "gif" => "image/gif", + "webp" => "image/webp", + "svg" => "image/svg+xml; charset=utf-8", + "md" | "markdown" => "text/markdown; charset=utf-8", + "txt" | "log" => "text/plain; charset=utf-8", + "json" => "application/json; charset=utf-8", + "pdf" => "application/pdf", + "doc" => "application/msword", + "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "ppt" => "application/vnd.ms-powerpoint", + "pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "xls" => "application/vnd.ms-excel", + "xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "odt" => "application/vnd.oasis.opendocument.text", + "odp" => "application/vnd.oasis.opendocument.presentation", + "ods" => "application/vnd.oasis.opendocument.spreadsheet", + _ => "application/octet-stream", + }; + HeaderValue::from_static(content_type) +} + fn editor_block_table_to_markdown(block: &Value) -> String { let table = block .get("props") @@ -5241,17 +6174,19 @@ fn markdown_page_subtree(document_id: &str, title: &str, content: &Value) -> Val mod tests { use super::{ add_local_access_grant_for_context, create_default_local_workspace_for_actor_at_base, - create_local_access_grant, create_share_grant, ensure_local_path_read_access, - ensure_local_workspace_access_for_actor, ensure_local_workspace_read_access_for_actor, - execute_local_tree_command, get_local_access_policy, get_share_grants, - initialize_local_page_id, initialize_local_workspace_for_actor, - load_local_folder_page_tree_snapshot, local_folder_watch_revision, open_local_file, - record_shared_cache, record_sync_pending_change, resolve_local_markdown_page_aggregate, - save_local_markdown_page, validate_local_access_root, write_local_markdown_asset, - write_local_markdown_page_body, write_sync_conflict_report, LocalAccessGrantRequest, - LocalAccessValidateRootRequest, LocalFileOpenQuery, LocalShareGrantRequest, - LocalUploadFile, SharedCacheRecordRequest, SyncConflictReportRequest, - SyncPendingChangeRequest, + create_local_access_grant, create_share_grant, encode_local_id_segment, + ensure_local_path_read_access, ensure_local_workspace_access_for_actor, + ensure_local_workspace_read_access_for_actor, execute_local_tree_command, + get_local_access_policy, get_share_grants, initialize_local_page_id, + initialize_local_workspace_for_actor, load_local_folder_file_tree_snapshot, + load_local_folder_page_tree_snapshot, local_folder_watch_revision, local_workspace_id, + open_local_file, record_shared_cache, record_sync_pending_change, + resolve_local_markdown_page_aggregate, save_local_markdown_page, + update_local_markdown_title, validate_local_access_root, write_local_markdown_asset, + write_local_markdown_page_body, write_local_mindmap_data, write_sync_conflict_report, + LocalAccessGrantRequest, LocalAccessValidateRootRequest, LocalFileOpenQuery, + LocalShareGrantRequest, LocalUploadFile, SharedCacheRecordRequest, + SyncConflictReportRequest, SyncPendingChangeRequest, }; use crate::context::RequestContext; use axum::extract::{Extension, Path as AxumPath, Query}; @@ -5288,8 +6223,8 @@ mod tests { } #[test] - fn local_frontmatter_mnote_id_survives_rename_and_move() { - let root = temp_root("mnote-local-frontmatter-id"); + fn local_markdown_identity_uses_path_even_when_frontmatter_has_mnote_id() { + let root = temp_root("mnote-local-frontmatter-path-id"); init_workspace(&root); std::fs::write( root.join("page.md"), @@ -5299,24 +6234,24 @@ mod tests { let root_uri = format!("file://{}", root.display()); let first = load_local_folder_page_tree_snapshot(&root_uri).expect("first snapshot"); - assert!(first - .projection - .to_string() - .contains("local-mdid:stable-frontmatter-id")); + let first_json = first.projection.to_string(); + assert!(first_json.contains("local-md:page.md")); + assert!(!first_json.contains("local-mdid:stable-frontmatter-id")); std::fs::create_dir_all(root.join("docs")).expect("create docs"); std::fs::rename(root.join("page.md"), root.join("docs").join("renamed.md")) .expect("move md"); let second = load_local_folder_page_tree_snapshot(&root_uri).expect("second snapshot"); let second_json = second.projection.to_string(); - assert!(second_json.contains("local-mdid:stable-frontmatter-id")); + assert!(second_json.contains("local-md:docs~2Frenamed.md")); + assert!(!second_json.contains("local-mdid:stable-frontmatter-id")); assert!(second_json.contains("renamed.md")); let _ = std::fs::remove_dir_all(&root); } #[test] - fn local_page_ids_metadata_overrides_path_derived_id_and_hides_mnote() { + fn local_page_ids_metadata_does_not_override_path_derived_id() { let root = temp_root("mnote-local-page-ids"); init_workspace(&root); std::fs::create_dir_all(root.join(".mnote")).expect("create metadata dir"); @@ -5331,25 +6266,23 @@ mod tests { let snapshot = load_local_folder_page_tree_snapshot(&root_uri).expect("snapshot"); let html_json = snapshot.projection.to_string(); - assert!(html_json.contains("local-mdid:stable-from-page-ids")); + assert!(html_json.contains("local-md:docs~2Fpage.md")); + assert!(!html_json.contains("local-mdid:stable-from-page-ids")); assert!(!html_json.contains("page-ids.json")); let _ = std::fs::remove_dir_all(&root); } #[test] - fn local_page_id_initialization_writes_page_ids_atomically() { + fn local_page_id_initialization_returns_path_id_without_writing_page_ids() { let root = temp_root("mnote-local-page-id-init"); init_workspace(&root); std::fs::write(root.join("draft.md"), "# Draft\n").expect("write md"); let root_uri = format!("file://{}", root.display()); let page_id = initialize_local_page_id(&root_uri, "draft.md").expect("init page id"); - assert!(page_id.starts_with("local-mdid:")); - let metadata = std::fs::read_to_string(root.join(".mnote").join("page-ids.json")) - .expect("read page ids"); - let parsed: Value = serde_json::from_str(&metadata).expect("json"); - assert_eq!(parsed["pages"]["draft.md"], page_id); + assert_eq!(page_id, "local-md:draft.md"); + assert!(!root.join(".mnote").join("page-ids.json").exists()); assert!(!root.join(".mnote").join("page-ids.json.tmp").exists()); let _ = std::fs::remove_dir_all(&root); @@ -5360,7 +6293,7 @@ mod tests { let root = temp_root("mnote-local-bad-metadata"); std::fs::create_dir_all(root.join(".mnote")).expect("create metadata"); std::fs::write(root.join("README.md"), "# Broken Metadata\n").expect("write md"); - std::fs::write(root.join(".mnote").join("page-ids.json"), "{not-json") + std::fs::write(root.join(".mnote").join("page-options.json"), "{not-json") .expect("write bad metadata"); let root_uri = format!("file://{}", root.display()); @@ -5392,6 +6325,29 @@ mod tests { let _ = std::fs::remove_dir_all(&root); } + #[test] + fn local_page_aggregate_accepts_path_id_when_frontmatter_has_mnote_id() { + let root = temp_root("mnote-local-path-id-frontmatter"); + init_workspace(&root); + std::fs::create_dir_all(root.join("pages")).expect("create pages"); + std::fs::write( + root.join("pages").join("初始化的新页面.md"), + "---\ntitle: 初始化的新页面\nmnote_id: initial-page\n---\n# 初始化的新页面\n\n正文\n", + ) + .expect("write md"); + let root_uri = format!("file://{}", root.display()); + let path_id = format!( + "local-md:{}", + encode_local_id_segment("pages/初始化的新页面.md") + ); + + let aggregate = + resolve_local_markdown_page_aggregate(&root_uri, &path_id).expect("aggregate"); + assert_eq!(aggregate.title, "初始化的新页面"); + + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn local_markdown_parser_preserves_pipe_table_as_table_block() { let blocks = crate::routes::local_markdown_parser::markdown_to_blocks( @@ -5591,7 +6547,7 @@ mod tests { editor_source: Some("unit-test".into()), }; - let result = write_local_markdown_page_body(&request).expect("write"); + let result = write_local_markdown_page_body(&request, None).expect("write"); assert_eq!(result["canonicalCommand"], "page.body.write"); assert_eq!(result["compatCommand"], "page.body.save"); @@ -5666,7 +6622,7 @@ fn main() {} let root_uri = format!("file://{}", root.display()); save_local_markdown_page( &root_uri, - "local-mdid:stable", + "local-md:README.md", None, &serde_json::json!([ {"type":"heading","props":{"level":2},"content":[{"type":"text","text":"Heading"}]}, @@ -5905,6 +6861,96 @@ fn main() {} let _ = std::fs::remove_dir_all(&root); } + #[test] + fn local_markdown_save_rewrites_local_file_open_url_to_markdown_relative_path() { + let root = temp_root("mnote-local-markdown-save-image-open-url"); + init_workspace(&root); + std::fs::create_dir_all(root.join("Page")).expect("create page dir"); + std::fs::write(root.join("Page").join("Page.md"), "").expect("write md"); + std::fs::write(root.join("Page").join("屏幕截图 2025.png"), b"jpg").expect("write image"); + let root_uri = format!("file://{}", root.display()); + let image_url = format!( + "http://localhost:3000/api/local-folder/files/open?rootUri={}&path=Page%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202025.png", + root_uri + ); + + save_local_markdown_page( + &root_uri, + "local-md:Page~2FPage.md", + None, + &serde_json::json!([ + { + "type": "image", + "props": { + "src": image_url, + "alt": "示例图片" + } + } + ]), + ) + .expect("save"); + + let saved = std::fs::read_to_string(root.join("Page").join("Page.md")).expect("read md"); + assert!(saved.contains("![示例图片](<屏幕截图 2025.png>)")); + assert!(!saved.contains("/api/local-folder/files/open")); + let aggregate = resolve_local_markdown_page_aggregate(&root_uri, "local-md:Page~2FPage.md") + .expect("aggregate"); + let image = aggregate.body.content.as_array().expect("blocks")[0].clone(); + assert_eq!(image["type"], "image"); + assert_eq!(image["props"]["src"], "屏幕截图 2025.png"); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_markdown_mindmap_blocks_roundtrip_next_to_page() { + let root = temp_root("mnote-local-markdown-mindmap-roundtrip"); + init_workspace(&root); + std::fs::create_dir_all(root.join("Page")).expect("create page dir"); + std::fs::write(root.join("Page").join("Page.md"), "").expect("write md"); + let root_uri = format!("file://{}", root.display()); + + let write_result = write_local_mindmap_data( + &root_uri, + "local-md:Page~2FPage.md", + "思维导图123456.json", + serde_json::json!({"data":{"text":"中心主题"},"children":[]}), + false, + ) + .expect("write mindmap"); + assert_eq!(write_result["relativePath"], "Page/思维导图123456.json"); + assert!(root.join("Page").join("思维导图123456.json").is_file()); + + save_local_markdown_page( + &root_uri, + "local-md:Page~2FPage.md", + None, + &serde_json::json!([ + { + "type": "mindmap", + "props": { + "name": "主页思维导图", + "mindmapId": "思维导图123456.json", + "rootNodeId": "root" + } + } + ]), + ) + .expect("save"); + + let saved = std::fs::read_to_string(root.join("Page").join("Page.md")).expect("read md"); + assert!(saved.contains("[主页思维导图](思维导图123456.json)")); + + let aggregate = resolve_local_markdown_page_aggregate(&root_uri, "local-md:Page~2FPage.md") + .expect("aggregate"); + let mindmap = aggregate.body.content.as_array().expect("blocks")[0].clone(); + assert_eq!(mindmap["type"], "mindmap"); + assert_eq!(mindmap["props"]["mindmapId"], "思维导图123456.json"); + assert_eq!(mindmap["props"]["sourcePath"], "思维导图123456.json"); + + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn local_workspace_access_rejects_owner_mismatch() { let root = temp_root("mnote-local-workspace-owner-mismatch"); @@ -6388,9 +7434,14 @@ fn main() {} assert_eq!(std::path::Path::new(root_path), expected_root.as_path()); assert!(expected_root.join(".mnote").join("workspace.json").exists()); - assert!(expected_root.join("pages").join("我的空间.md").exists()); - assert!(expected_root.join("assets").join("shared").is_dir()); - assert!(expected_root.join("ai-sessions").join("private").is_dir()); + assert!(expected_root + .join("初始化的新页面") + .join("初始化的新页面.md") + .exists()); + assert!(!expected_root.join("pages").exists()); + assert!(!expected_root.join("assets").exists()); + assert!(!expected_root.join("mindmaps").exists()); + assert!(!expected_root.join("ai-sessions").exists()); assert_eq!( payload["workspace"]["manifest"]["workspaceId"], "local-ws:user~40example.com:my-space" @@ -6418,6 +7469,23 @@ fn main() {} let _ = std::fs::remove_dir_all(&base); } + #[test] + fn local_file_tree_empty_root_does_not_emit_workspace_folder_row() { + let root = temp_root("mnote-local-empty-root-file-tree"); + init_workspace(&root); + let root_uri = format!("file://{}", root.display()); + + let snapshot = load_local_folder_file_tree_snapshot(&root_uri).expect("load file tree"); + let items = snapshot.projection["items"].as_array().expect("items"); + + assert!( + items.is_empty(), + "只剩 .mnote 的空 workspace 不应投影出 root 文件夹行: {items:?}" + ); + + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn local_tree_command_refreshes_search_index_after_rename() { let root = temp_root("mnote-local-tree-refresh-search-index"); @@ -6458,6 +7526,155 @@ fn main() {} let _ = std::fs::remove_dir_all(&root); } + #[test] + fn local_markdown_page_title_comes_from_file_name_not_body_heading() { + let root = temp_root("mnote-local-title-file-name"); + init_workspace(&root); + std::fs::write(root.join("File Name.md"), "# Body Heading\n").expect("write md"); + let root_uri = format!("file://{}", root.display()); + + let snapshot = load_local_folder_page_tree_snapshot(&root_uri).expect("page tree"); + let items = snapshot.projection["items"].as_array().expect("items"); + let row = items + .iter() + .find(|item| { + item["resourceMeta"]["documentId"].as_str() == Some("local-md:File~20Name.md") + }) + .expect("page row"); + + assert_eq!(row["title"].as_str(), Some("File Name")); + + let aggregate = resolve_local_markdown_page_aggregate(&root_uri, "local-md:File~20Name.md") + .expect("aggregate"); + assert_eq!(aggregate.title, "File Name"); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_document_title_save_renames_nested_bundle_directory_and_markdown() { + let root = temp_root("mnote-local-title-save-renames-file"); + init_workspace(&root); + std::fs::create_dir_all(root.join("Old")).expect("create Old dir"); + std::fs::write(root.join("Old").join("Old.md"), "# Body Heading\n").expect("write Old.md"); + std::fs::write(root.join("Old").join("Child.md"), "# Child\n").expect("write child"); + let root_uri = format!("file://{}", root.display()); + + let result = update_local_markdown_title(&root_uri, "local-md:Old~2FOld.md", "New") + .expect("save title"); + + assert!( + root.join("New").join("New.md").is_file(), + "New/New.md should exist" + ); + assert!( + root.join("New").join("Child.md").is_file(), + "New/Child.md should exist" + ); + assert!(!root.join("Old").exists(), "Old/ should not exist"); + assert_eq!(result["documentId"].as_str(), Some("local-md:New~2FNew.md")); + assert_eq!( + result["previousDocumentId"].as_str(), + Some("local-md:Old~2FOld.md") + ); + assert_eq!(result["title"].as_str(), Some("New")); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_tree_command_manages_loose_markdown_like_regular_file() { + let root = temp_root("mnote-local-loose-markdown-file-management"); + init_workspace(&root); + std::fs::create_dir_all(root.join("docs")).expect("create docs"); + std::fs::write(root.join("docs").join("README.md"), "# Loose\n").expect("write loose md"); + let root_uri = format!("file://{}", root.display()); + + let renamed = execute_local_tree_command( + &root_uri, + "rename", + "local-md:docs~2FREADME.md", + None, + Some("Renamed"), + ) + .expect("rename loose markdown"); + assert!(root.join("docs").join("Renamed.md").is_file()); + assert!(!root.join("docs").join("README.md").exists()); + assert_eq!( + renamed["documentId"].as_str(), + Some("local-md:docs~2FRenamed.md") + ); + + let moved = + execute_local_tree_command(&root_uri, "move", "local-md:docs~2FRenamed.md", None, None) + .expect("move loose markdown"); + assert!(root.join("Renamed.md").is_file()); + assert!(!root.join("docs").join("Renamed.md").exists()); + assert_eq!(moved["documentId"].as_str(), Some("local-md:Renamed.md")); + + let copied = + execute_local_tree_command(&root_uri, "copy", "local-md:Renamed.md", None, None) + .expect("copy loose markdown"); + assert!(root.join("Renamed 2.md").is_file()); + assert_eq!( + copied["documentId"].as_str(), + Some("local-md:Renamed~202.md") + ); + + let deleted = + execute_local_tree_command(&root_uri, "delete", "local-md:Renamed.md", None, None) + .expect("delete loose markdown"); + assert!(!root.join("Renamed.md").exists()); + assert!(root + .join(".mnote") + .join("trash") + .join("Renamed.md") + .is_file()); + assert_eq!(deleted["resourceKind"].as_str(), Some("markdown")); + + let restored = + execute_local_tree_command(&root_uri, "restore", "local-md:Renamed.md", None, None) + .expect("restore loose markdown"); + assert!(root.join("Renamed.md").is_file()); + assert_eq!(restored["documentId"].as_str(), Some("local-md:Renamed.md")); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_tree_command_delete_folder_moves_directory_to_trash() { + let root = temp_root("mnote-local-delete-folder"); + init_workspace(&root); + std::fs::create_dir_all(root.join("Folder").join("Nested")).expect("create folder"); + std::fs::write(root.join("Folder").join("Nested").join("note.txt"), "note") + .expect("write nested file"); + let root_uri = format!("file://{}", root.display()); + + let folder_id = format!("local-dir:{}", encode_local_id_segment("Folder")); + let result = execute_local_tree_command(&root_uri, "delete", &folder_id, None, None) + .expect("delete folder"); + + assert!( + !root.join("Folder").exists(), + "Folder should move away from root" + ); + let trash_path = result["trashPath"].as_str().expect("trashPath"); + assert!( + root.join(trash_path) + .join("Nested") + .join("note.txt") + .is_file(), + "folder contents should exist in trash" + ); + assert_eq!(result["resourceKind"].as_str(), Some("local_directory")); + assert_eq!( + result["trashEntryId"].as_str(), + Some("local-dir-trash:Folder") + ); + + let _ = std::fs::remove_dir_all(&root); + } + #[test] fn local_markdown_save_refreshes_search_index_after_write() { let root = temp_root("mnote-local-save-refresh-search-index"); @@ -6500,45 +7717,6 @@ fn main() {} let _ = std::fs::remove_dir_all(&root); } - #[test] - fn local_markdown_asset_upload_copies_next_to_markdown_with_relative_path() { - let root = temp_root("mnote-local-markdown-asset-upload"); - init_workspace(&root); - std::fs::create_dir_all(root.join("docs")).expect("create docs"); - std::fs::write(root.join("docs").join("README.md"), "# Assets\n").expect("write md"); - std::fs::create_dir_all(root.join("docs").join("README.assets")).expect("create assets"); - std::fs::write( - root.join("docs").join("README.assets").join("photo.png"), - b"old", - ) - .expect("write existing asset"); - let root_uri = format!("file://{}", root.display()); - - let asset = write_local_markdown_asset( - &root_uri, - "local-md:docs~2FREADME.md", - "image", - LocalUploadFile { - name: "photo.png".to_string(), - content_type: "image/png".to_string(), - bytes: b"new-image".to_vec(), - }, - ) - .expect("upload asset"); - - assert_eq!(asset["sourcePath"], "README.assets/photo-1.png"); - assert_eq!(asset["file_url"], "README.assets/photo-1.png"); - assert_eq!(asset["asset_type"], "image"); - assert_eq!(asset["sourceKind"], "local_folder"); - assert_eq!( - std::fs::read(root.join("docs").join("README.assets").join("photo-1.png")) - .expect("read copied asset"), - b"new-image" - ); - - let _ = std::fs::remove_dir_all(&root); - } - #[tokio::test] async fn local_file_open_rejects_root_escape() { let root = temp_root("mnote-local-file-open-root-escape"); @@ -6618,4 +7796,503 @@ fn main() {} let _ = std::fs::remove_dir_all(&root); let _ = std::fs::remove_dir_all(&policy_root); } + + #[tokio::test] + async fn local_file_open_sets_image_and_markdown_content_type() { + let root = temp_root("mnote-local-file-open-content-type"); + init_workspace(&root); + std::fs::write(root.join("photo.jpg"), b"jpg").expect("write image"); + std::fs::write(root.join("note.md"), "# Note\n").expect("write markdown"); + let root_uri = format!("file://{}", root.display()); + let mut headers = HeaderMap::new(); + headers.insert("x-mnote-actor-id", "user_test".parse().unwrap()); + headers.insert("x-mnote-actor-type", "user".parse().unwrap()); + let context = RequestContext::from_http_parts( + &Method::GET, + &"/api/local-folder/files/open".parse().expect("uri"), + &headers, + ); + + let (_, image_headers, _) = open_local_file( + Extension(context.clone()), + Query(LocalFileOpenQuery { + root_uri: root_uri.clone(), + path: "photo.jpg".into(), + download: None, + }), + ) + .await + .expect("open image"); + assert_eq!( + image_headers + .get(axum::http::header::CONTENT_TYPE) + .and_then(|v| v.to_str().ok()), + Some("image/jpeg") + ); + + let (_, markdown_headers, _) = open_local_file( + Extension(context), + Query(LocalFileOpenQuery { + root_uri, + path: "note.md".into(), + download: None, + }), + ) + .await + .expect("open markdown"); + assert_eq!( + markdown_headers + .get(axum::http::header::CONTENT_TYPE) + .and_then(|v| v.to_str().ok()), + Some("text/markdown; charset=utf-8") + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[tokio::test] + async fn local_file_open_sets_pdf_and_office_content_type() { + let root = temp_root("mnote-local-file-open-office-content-type"); + init_workspace(&root); + std::fs::write(root.join("spec.pdf"), b"pdf").expect("write pdf"); + std::fs::write(root.join("report.docx"), b"docx").expect("write docx"); + let root_uri = format!("file://{}", root.display()); + let mut headers = HeaderMap::new(); + headers.insert("x-mnote-actor-id", "user_test".parse().unwrap()); + headers.insert("x-mnote-actor-type", "user".parse().unwrap()); + let context = RequestContext::from_http_parts( + &Method::GET, + &"/api/local-folder/files/open".parse().expect("uri"), + &headers, + ); + + let (_, pdf_headers, _) = open_local_file( + Extension(context.clone()), + Query(LocalFileOpenQuery { + root_uri: root_uri.clone(), + path: "spec.pdf".into(), + download: None, + }), + ) + .await + .expect("open pdf"); + assert_eq!( + pdf_headers + .get(axum::http::header::CONTENT_TYPE) + .and_then(|v| v.to_str().ok()), + Some("application/pdf") + ); + + let (_, office_headers, _) = open_local_file( + Extension(context), + Query(LocalFileOpenQuery { + root_uri, + path: "report.docx".into(), + download: None, + }), + ) + .await + .expect("open docx"); + assert_eq!( + office_headers + .get(axum::http::header::CONTENT_TYPE) + .and_then(|v| v.to_str().ok()), + Some("application/vnd.openxmlformats-officedocument.wordprocessingml.document") + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_file_tree_classifies_mindmap_and_office_assets() { + let root = temp_root("mnote-local-filetree-resource-kinds"); + init_workspace(&root); + std::fs::create_dir_all(root.join("Page")).expect("create page dir"); + std::fs::write(root.join("Page").join("Page.md"), "").expect("write md"); + std::fs::write(root.join("Page").join("思维导图123456.json"), "{}").expect("write mindmap"); + std::fs::write(root.join("Page").join("report.docx"), b"docx").expect("write docx"); + let root_uri = format!("file://{}", root.display()); + + let snapshot = load_local_folder_file_tree_snapshot(&root_uri).expect("file tree"); + let items = snapshot.projection["items"].as_array().expect("items"); + let mindmap = items + .iter() + .find(|item| item["title"].as_str() == Some("思维导图123456.json")) + .expect("mindmap row"); + assert_eq!(mindmap["rowKind"].as_str(), Some("asset")); + assert_eq!(mindmap["iconHint"].as_str(), Some("mindmap")); + assert_eq!( + mindmap["resourceMeta"]["workspacePath"]["objectIdentity"]["objectKind"].as_str(), + Some("mindmap") + ); + + let office = items + .iter() + .find(|item| item["title"].as_str() == Some("report.docx")) + .expect("office row"); + assert_eq!(office["rowKind"].as_str(), Some("asset")); + assert_eq!(office["iconHint"].as_str(), Some("office")); + assert_eq!( + office["resourceMeta"]["workspacePath"]["objectIdentity"]["objectKind"].as_str(), + Some("only_office") + ); + + let _ = std::fs::remove_dir_all(&root); + } + + // ── Gap A2 BufferStore 运行时接入集成测试 ──────────────────────── + + #[test] + fn document_buffer_mark_saved_after_page_body_write() { + let root = temp_root("mnote-buf-save-after-write"); + std::fs::write(root.join("README.md"), "# Old\n").expect("write md"); + let root_uri = format!("file://{}", root.display()); + + let store = crate::document_buffer_store::BufferStore::new(); + let ws_path = crate::document_buffer_store::build_local_folder_workspace_path( + &local_workspace_id(&root), + &root_uri, + "README.md", + "local-md:README.md", + ); + // 模拟编辑器打开文档:先初始化 buffer + store.get_or_create(&ws_path); + + // 经过 write_local_markdown_page_body 保存入口 + write_local_markdown_page_body( + &core_protocol::PageBodyWriteRequest { + document_id: "local-md:README.md".into(), + workspace_id: String::new(), + source_kind: core_protocol::WorkspaceSourceKind::LocalFolder, + root_uri: root_uri.clone(), + expected_file_version: None, + base_content_hash: None, + content_format: "editorBlocks".into(), + content: serde_json::json!([ + {"type":"heading","props":{"level":1},"content":[{"type":"text","text":"Written"}]} + ]), + editor_source: Some("unit-test".into()), + }, + Some(&store), + ) + .expect("write_local_markdown_page_body"); + + // 验证 buffer store 已被消费 + let buf = store + .get_by_path(&ws_path) + .expect("buffer should exist after write"); + assert_eq!( + buf.dirty_state, + core_protocol::DocBufferDirtyState::Clean, + "保存后 buffer 应为 Clean" + ); + assert!(buf.file_version.is_some(), "file_version 应被更新"); + assert!(buf.last_saved_at.is_some(), "last_saved_at 应被更新"); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn document_buffer_marks_external_modified_from_local_folder_event() { + let store = crate::document_buffer_store::BufferStore::new(); + let ws_path = crate::document_buffer_store::build_local_folder_workspace_path( + "ws_test", + "file:///tmp/test-root", + "doc.md", + "local-md:doc.md", + ); + // 模拟编辑器打开文档:Clean 状态 buffer + store.get_or_create(&ws_path); + + // 模拟 watcher 事件调用 + let result = store.mark_external_modified(&ws_path, Some("external-editor".into())); + assert!(result.is_some(), "外部修改应返回 buffer"); + + let buf = result.unwrap(); + assert_eq!( + buf.dirty_state, + core_protocol::DocBufferDirtyState::ExternalModified, + "Clean buffer 受外部修改后应变为 ExternalModified" + ); + assert_eq!(buf.external_actor.as_deref(), Some("external-editor")); + } + + #[test] + fn document_buffer_marks_stale_from_local_folder_event_when_dirty() { + let store = crate::document_buffer_store::BufferStore::new(); + let ws_path = crate::document_buffer_store::build_local_folder_workspace_path( + "ws_test", + "file:///tmp/test-root", + "doc.md", + "local-md:doc.md", + ); + // 模拟编辑器打开并且有未保存修改:Dirty 状态 buffer + let buf = store.get_or_create(&ws_path); + let mut dirty_buf = buf; + dirty_buf.mark_dirty("sha256:dirty_content".into()); + let key = crate::document_buffer_store::BufferKey::from_workspace_path(&ws_path); + store.update(&key, dirty_buf); + + // 模拟 watcher 事件调用 + let result = store.mark_external_modified(&ws_path, Some("vim".into())); + assert!(result.is_some(), "外部修改应返回 buffer"); + + let buf = result.unwrap(); + assert_eq!( + buf.dirty_state, + core_protocol::DocBufferDirtyState::Stale, + "Dirty buffer 受外部修改后应变为 Stale" + ); + assert_eq!(buf.external_actor.as_deref(), Some("vim")); + } + + #[test] + fn local_tree_command_create_page_creates_timestamped_nested_bundle() { + let root = temp_root("mnote-local-tree-create-page-timestamp"); + init_workspace(&root); + let root_uri = format!("file://{}", root.display()); + + let result = execute_local_tree_command(&root_uri, "create", "", None, Some("新页面")) + .expect("create page with default title"); + + let relative_path = result["relativePath"].as_str().expect("relativePath"); + let document_id = result["documentId"].as_str().expect("documentId"); + + // 应形如“新页面HHMMSS/新页面HHMMSS.md”。 + assert!( + relative_path.starts_with("新页面"), + "relativePath should start with 新页面, got: {relative_path}" + ); + assert!( + relative_path.ends_with(".md"), + "relativePath should end with .md, got: {relative_path}" + ); + assert!( + relative_path.len() > "新页面.md".len(), + "expected timestamp suffix" + ); + + let (dir, file) = relative_path.split_once('/').expect("nested bundle path"); + assert_eq!(file, format!("{dir}.md")); + assert!( + root.join(dir).is_dir(), + "bundle directory should exist: {}", + dir + ); + + // Markdown 文件应已创建。 + assert!( + root.join(relative_path).is_file(), + "markdown file should exist: {relative_path}" + ); + + // documentId 继续使用路径型身份。 + assert!( + document_id.starts_with("local-md:"), + "documentId should be path-based" + ); + assert_eq!(result["action"], "create"); + assert_eq!(result["sourceKind"], "local_folder"); + + // 页面标题来自文件名,默认正文不再写第二个标题真相。 + let content = std::fs::read_to_string(root.join(relative_path)).expect("read markdown"); + assert!( + content.is_empty(), + "new page body should be empty: {content}" + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_page_tree_projects_nested_bundle_as_page_node() { + let root = temp_root("mnote-local-page-tree-nested-bundle"); + init_workspace(&root); + let root_uri = format!("file://{}", root.display()); + + // 构造 Root/Root.md + Root/Child/Child.md。 + std::fs::create_dir_all(root.join("Root")).expect("create Root dir"); + std::fs::write(root.join("Root").join("Root.md"), "# Body Root\n").expect("write Root.md"); + std::fs::create_dir_all(root.join("Root").join("Child")).expect("create Child dir"); + std::fs::write( + root.join("Root").join("Child").join("Child.md"), + "# Body Child\n", + ) + .expect("write Child.md"); + + // 读取页面树。 + let snapshot = load_local_folder_page_tree_snapshot(&root_uri).expect("load page tree"); + let items = snapshot.projection["items"].as_array().expect("items"); + + // 找到 Root 页面节点和 Child 页面节点。 + let root_node = items + .iter() + .find(|item| { + item["title"].as_str() == Some("Root") + && item["resourceMeta"]["resourceKind"].as_str() == Some("document") + }) + .expect("Root page node"); + + let child_node = items + .iter() + .find(|item| { + item["title"].as_str() == Some("Child") + && item["resourceMeta"]["resourceKind"].as_str() == Some("document") + }) + .expect("Child page node"); + + // Child 的父节点应是 Root 的 documentId。 + let root_doc_id = root_node["resourceMeta"]["documentId"] + .as_str() + .or_else(|| root_node["nodeId"].as_str()) + .expect("root documentId"); + assert_eq!(child_node["parentNodeId"].as_str(), Some(root_doc_id)); + assert_eq!(root_doc_id, "local-md:Root~2FRoot.md"); + + // Root bundle 目录不应额外生成 page-group 行。 + let page_group_for_root = items.iter().find(|item| { + item["rowId"] + .as_str() + .map_or(false, |id| id.contains("page-group:Root")) + }); + assert!( + page_group_for_root.is_none(), + "should not have page-group for Root" + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_file_tree_keeps_nested_bundle_filesystem_details() { + let root = temp_root("mnote-local-file-tree-nested-bundle"); + init_workspace(&root); + let root_uri = format!("file://{}", root.display()); + + // 构造 Root/Root.md + Root/Child/Child.md。 + std::fs::create_dir_all(root.join("Root")).expect("create Root dir"); + std::fs::write(root.join("Root").join("Root.md"), "# Root\n").expect("write Root.md"); + std::fs::create_dir_all(root.join("Root").join("Child")).expect("create Child dir"); + std::fs::write( + root.join("Root").join("Child").join("Child.md"), + "# Child\n", + ) + .expect("write Child.md"); + + // 读取文件树。 + let snapshot = load_local_folder_file_tree_snapshot(&root_uri).expect("load file tree"); + let items = snapshot.projection["items"].as_array().expect("items"); + + // 文件树应保留 Root 文件夹和其中的 Root.md 真实条目。 + let root_md = items.iter().find(|item| { + item["title"].as_str() == Some("Root.md") + && item["resourceMeta"]["resourceKind"].as_str() == Some("markdown") + }); + assert!( + root_md.is_some(), + "file tree should have Root.md as markdown row" + ); + + let root_folder = items.iter().find(|item| { + item["title"].as_str() == Some("Root") + && item["resourceMeta"]["resourceKind"].as_str() == Some("folder") + }); + assert!( + root_folder.is_some(), + "file tree should have Root as folder row" + ); + + // Child.md 应作为 Root/Child 文件夹下的真实文件条目存在。 + let child_md = items.iter().find(|item| { + item["title"].as_str() == Some("Child.md") + && item["resourceMeta"]["resourceKind"].as_str() == Some("markdown") + }); + assert!( + child_md.is_some(), + "file tree should have Child.md under Root" + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_markdown_asset_upload_copies_next_to_markdown_with_relative_path() { + let root = temp_root("mnote-local-markdown-asset-upload"); + init_workspace(&root); + std::fs::create_dir_all(root.join("docs")).expect("create docs"); + std::fs::create_dir_all(root.join("docs").join("README")).expect("create page dir"); + std::fs::write( + root.join("docs").join("README").join("README.md"), + "# Assets\n", + ) + .expect("write md"); + std::fs::create_dir_all(root.join("docs").join("README")).expect("create page dir"); + std::fs::write(root.join("docs").join("README").join("photo.png"), b"old") + .expect("write existing asset"); + let root_uri = format!("file://{}", root.display()); + + let asset = write_local_markdown_asset( + &root_uri, + "local-md:docs~2FREADME~2FREADME.md", + "image", + LocalUploadFile { + name: "photo.png".to_string(), + content_type: "image/png".to_string(), + bytes: b"new-image".to_vec(), + }, + ) + .expect("upload asset"); + + assert_eq!(asset["sourcePath"], "photo-1.png"); + assert_eq!(asset["file_url"], "photo-1.png"); + assert_eq!(asset["asset_type"], "image"); + assert_eq!(asset["sourceKind"], "local_folder"); + assert_eq!( + std::fs::read(root.join("docs").join("README").join("photo-1.png")) + .expect("read copied asset"), + b"new-image" + ); + + let _ = std::fs::remove_dir_all(&root); + } + + #[test] + fn local_rename_markdown_page_renames_nested_bundle() { + let root = temp_root("mnote-local-rename-nested-bundle"); + init_workspace(&root); + let root_uri = format!("file://{}", root.display()); + + // 构造 Old/Old.md + Old/Child.md。 + std::fs::create_dir_all(root.join("Old")).expect("create Old dir"); + std::fs::write(root.join("Old").join("Old.md"), "# Old\n").expect("write Old.md"); + std::fs::write(root.join("Old").join("Child.md"), "# Child\n").expect("write Child.md"); + + // 将 Old 重命名为 New。 + let old_document_id = "local-md:Old~2FOld.md"; + let result = + execute_local_tree_command(&root_uri, "rename", old_document_id, None, Some("New")) + .expect("rename page"); + + // New/New.md 应存在。 + assert!( + root.join("New").join("New.md").is_file(), + "New/New.md should exist" + ); + // New/Child.md 应存在。 + assert!( + root.join("New").join("Child.md").is_file(), + "New/Child.md should exist" + ); + // Old/ 不应再存在。 + assert!( + !root.join("Old").exists(), + "Old/ directory should not exist" + ); + + assert_eq!(result["action"], "rename"); + assert_eq!(result["sourceKind"], "local_folder"); + assert_eq!(result["documentId"].as_str(), Some("local-md:New~2FNew.md")); + + let _ = std::fs::remove_dir_all(&root); + } } diff --git a/rust/crates/mnote-web/src/routes/local_markdown_parser.rs b/rust/crates/mnote-web/src/routes/local_markdown_parser.rs index 9395d8dd..84fd0a33 100644 --- a/rust/crates/mnote-web/src/routes/local_markdown_parser.rs +++ b/rust/crates/mnote-web/src/routes/local_markdown_parser.rs @@ -5,7 +5,6 @@ use serde_json::{json, Map, Value}; #[derive(Debug, Clone)] pub struct ParsedLocalMarkdownPage { pub title: String, - pub mnote_id: Option, pub body: String, } @@ -37,6 +36,14 @@ enum MarkdownBlock { alignments: Vec, rows: Vec, }, + Image { + alt: String, + source_path: String, + }, + Mindmap { + name: String, + source_path: String, + }, Media { name: String, source_path: String, @@ -71,18 +78,10 @@ struct MarkdownInlineStyles { } pub fn parse_markdown_page(markdown: &str, file_name: &str) -> ParsedLocalMarkdownPage { - let (frontmatter, body) = split_frontmatter(markdown); - let title = frontmatter - .as_deref() - .and_then(|content| read_frontmatter_field(content, "title")) - .or_else(|| extract_first_h1_title(body)) - .unwrap_or_else(|| file_stem_title(file_name)); - let mnote_id = frontmatter - .as_deref() - .and_then(|content| read_frontmatter_field(content, "mnote_id")); + let (_, body) = split_frontmatter(markdown); + let title = file_stem_title(file_name); ParsedLocalMarkdownPage { title, - mnote_id, body: body.to_string(), } } @@ -97,7 +96,12 @@ pub fn parse_markdown_attachment_link(trimmed: &str) -> Option<(String, String)> .unwrap_or(trimmed) .strip_prefix('[')?; let (label, rest) = value.split_once("](")?; - let target = rest.strip_suffix(')')?.trim(); + let raw_target = rest.strip_suffix(')')?.trim(); + let target = raw_target + .strip_prefix('<') + .and_then(|value| value.strip_suffix('>')) + .unwrap_or(raw_target) + .trim(); if target.is_empty() || target.starts_with("http://") || target.starts_with("https://") @@ -179,6 +183,14 @@ fn append_ast_block<'a>(node: &'a AstNode<'a>, blocks: &mut Vec) } fn append_ast_paragraph<'a>(node: &'a AstNode<'a>, blocks: &mut Vec) { + if let Some((alt, source_path)) = paragraph_image(node) { + blocks.push(MarkdownBlock::Image { alt, source_path }); + return; + } + if let Some((name, source_path)) = paragraph_mindmap(node) { + blocks.push(MarkdownBlock::Mindmap { name, source_path }); + return; + } if let Some((name, source_path)) = paragraph_attachment_media(node) { blocks.push(MarkdownBlock::Media { name, source_path }); return; @@ -350,6 +362,28 @@ fn paragraph_attachment_media<'a>(node: &'a AstNode<'a>) -> Option<(String, Stri link_attachment_media(first) } +fn paragraph_mindmap<'a>(node: &'a AstNode<'a>) -> Option<(String, String)> { + let mut children = node.children(); + let first = children.next()?; + if children.next().is_some() { + return None; + } + link_mindmap(first) +} + +fn paragraph_image<'a>(node: &'a AstNode<'a>) -> Option<(String, String)> { + let mut children = node.children(); + let first = children.next()?; + if children.next().is_some() { + return None; + } + let NodeValue::Image(link) = &first.data.borrow().value else { + return None; + }; + let alt = collect_plain_text(first).trim().to_string(); + Some((alt, link.url.clone())) +} + fn paragraph_leading_attachment_media<'a>( node: &'a AstNode<'a>, ) -> Option<(String, String, Vec)> { @@ -377,6 +411,33 @@ fn link_attachment_media<'a>(node: &'a AstNode<'a>) -> Option<(String, String)> parse_markdown_attachment_link(&format!("[{}]({})", collect_plain_text(node), link.url)) } +fn link_mindmap<'a>(node: &'a AstNode<'a>) -> Option<(String, String)> { + let NodeValue::Link(link) = &node.data.borrow().value else { + return None; + }; + let target = link.url.trim(); + let file_name = std::path::Path::new(target) + .file_name() + .and_then(|value| value.to_str()) + .unwrap_or(target) + .trim(); + let lower = file_name.to_ascii_lowercase(); + let is_mindmap = lower.ends_with(".mindmap.json") + || (file_name.starts_with("思维导图") && lower.ends_with(".json")); + if !is_mindmap { + return None; + } + let name = collect_plain_text(node).trim().to_string(); + Some(( + if name.is_empty() { + "思维导图".to_string() + } else { + name + }, + target.to_string(), + )) +} + fn markdown_ast_document_to_blocks(document: &MarkdownAstDocument) -> Value { Value::Array( document @@ -438,6 +499,29 @@ fn markdown_block_to_json(block: &MarkdownBlock, block_number: usize) -> Value { MarkdownBlock::Table { alignments, rows } => { table_block_to_json(alignments, rows, block_number) } + MarkdownBlock::Image { alt, source_path } => json!({ + "id": format!("local-block-{block_number}"), + "type": "image", + "props": { + "src": source_path, + "alt": alt, + "title": alt, + }, + "content": [], + "children": [], + }), + MarkdownBlock::Mindmap { name, source_path } => json!({ + "id": format!("local-block-{block_number}"), + "type": "mindmap", + "props": { + "name": name, + "sourcePath": source_path, + "mindmapId": source_path, + "rootNodeId": "root", + }, + "content": [], + "children": [], + }), MarkdownBlock::Media { name, source_path } => json!({ "id": format!("local-block-{block_number}"), "type": "media", @@ -634,32 +718,6 @@ pub(crate) fn split_frontmatter(markdown: &str) -> (Option, &str) { (None, normalized) } -fn read_frontmatter_field(frontmatter: &str, key: &str) -> Option { - frontmatter.lines().find_map(|line| { - let (candidate_key, value) = line.split_once(':')?; - if candidate_key.trim() != key { - return None; - } - let trimmed = value.trim().trim_matches('"').trim_matches('\'').trim(); - if trimmed.is_empty() { - None - } else { - Some(trimmed.to_string()) - } - }) -} - -fn extract_first_h1_title(body: &str) -> Option { - body.lines().find_map(|line| { - let trimmed = line.trim(); - trimmed - .strip_prefix("# ") - .map(str::trim) - .filter(|value| !value.is_empty()) - .map(ToOwned::to_owned) - }) -} - pub(crate) fn file_stem_title(file_name: &str) -> String { std::path::Path::new(file_name) .file_stem() @@ -669,3 +727,21 @@ pub(crate) fn file_stem_title(file_name: &str) -> String { .unwrap_or(file_name) .to_string() } + +#[cfg(test)] +mod tests { + use super::markdown_to_blocks; + + #[test] + fn markdown_image_parses_as_image_block() { + let blocks = markdown_to_blocks("![示例图片](assets/photo.jpg)\n"); + let first = blocks + .as_array() + .and_then(|items| items.first()) + .expect("first block"); + + assert_eq!(first["type"].as_str(), Some("image")); + assert_eq!(first["props"]["src"].as_str(), Some("assets/photo.jpg")); + assert_eq!(first["props"]["alt"].as_str(), Some("示例图片")); + } +} diff --git a/rust/crates/mnote-web/src/routes/local_search_index.rs b/rust/crates/mnote-web/src/routes/local_search_index.rs index bf5873c5..9f4c1611 100644 --- a/rust/crates/mnote-web/src/routes/local_search_index.rs +++ b/rust/crates/mnote-web/src/routes/local_search_index.rs @@ -1,4 +1,5 @@ use crate::error::WebError; +use crate::routes::local_folder_source::encode_local_id_segment; use crate::routes::local_markdown_parser::{ parse_markdown_attachment_link, parse_markdown_page, split_frontmatter, }; @@ -411,11 +412,7 @@ fn index_markdown_file(root_path: &Path, path: &Path) -> Result, pub root_node_id: Option, pub workspace_id: Option, + pub source_kind: Option, + pub root_uri: Option, } #[derive(Debug, Deserialize)] @@ -38,6 +44,8 @@ pub struct MindmapCommandRequest { pub workspace_id: Option, pub data: Option, pub create_only: Option, + pub source_kind: Option, + pub root_uri: Option, } fn default_mindmap_data() -> Value { @@ -81,6 +89,25 @@ fn read_workspace_id_from_meta(meta: &Value) -> Option { .map(ToOwned::to_owned) } +fn is_local_folder_source(source_kind: Option<&str>) -> bool { + source_kind + .map(str::trim) + .is_some_and(|value| value == "local_folder") +} + +fn local_root_uri<'a>( + query_root_uri: Option<&'a str>, + body_root_uri: Option<&'a str>, +) -> Result<&'a str, WebError> { + query_root_uri + .or(body_root_uri) + .map(str::trim) + .filter(|value| !value.is_empty()) + .ok_or_else(|| { + WebError::bad_request_code("local_folder_root_required", "缺少本地思维导图 rootUri") + }) +} + async fn resolve_mindmap_workspace_id( state: &AppState, context: &RequestContext, @@ -122,6 +149,29 @@ pub async fn get_mindmap( ) .with_context(&context)); } + if is_local_folder_source(params.source_kind.as_deref()) { + let root_uri = local_root_uri(params.root_uri.as_deref(), None)?; + ensure_local_workspace_read_access(&context, root_uri) + .map_err(|error| error.with_context(&context))?; + let data = read_local_mindmap_data(root_uri, document_id, mindmap_id) + .map_err(|error| error.with_context(&context))?; + let query_name = resolve_query_name(¶ms); + let result = execute_runtime_query_against_data( + &context, + params.workspace_id.as_deref(), + RuntimeQueryEnvelopeWire { + name: query_name.into(), + payload: json!({ + "documentId": document_id, + "mindmapId": mindmap_id, + "rootNodeId": params.root_node_id, + "workspaceId": params.workspace_id, + }), + }, + data, + )?; + return Ok((StatusCode::OK, response_headers(), Json(result))); + } let effective_workspace_id = resolve_effective_workspace_id(&context, params.workspace_id.as_deref(), false)?; let query_name = resolve_query_name(¶ms); @@ -148,6 +198,7 @@ pub async fn apply_mindmap_command( State(state): State, Extension(context): Extension, Path((document_id, mindmap_id)): Path<(String, String)>, + Query(params): Query, Json(body): Json, ) -> Result<(StatusCode, HeaderMap, Json), WebError> { let document_id = document_id.trim(); @@ -170,6 +221,101 @@ pub async fn apply_mindmap_command( ) .with_context(&context)); } + + let local_source_kind = body + .source_kind + .as_deref() + .or(params.source_kind.as_deref()); + if is_local_folder_source(local_source_kind) { + let root_uri = local_root_uri(params.root_uri.as_deref(), body.root_uri.as_deref())?; + ensure_local_workspace_access(&context, root_uri) + .map_err(|error| error.with_context(&context))?; + if command_name == Some("mindmap.command.apply") { + let current = read_local_mindmap_data(root_uri, document_id, mindmap_id) + .map_err(|error| error.with_context(&context))?; + let applied = apply_mindmap_kernel_commands_to_value(¤t, &body.commands) + .map_err(|error| WebError::bad_request(error.message).with_context(&context))?; + if !applied.errors.is_empty() { + return Err(WebError::bad_request_code( + "mindmap_command_failed", + applied.errors.join("; "), + ) + .with_context(&context) + .with_header("x-error-phase", "local_mindmap_command_apply")); + } + let write_result = write_local_mindmap_data( + root_uri, + document_id, + mindmap_id, + applied.data.clone(), + false, + ) + .map_err(|error| error.with_context(&context))?; + let projection = execute_runtime_query_against_data( + &context, + body.workspace_id.as_deref(), + RuntimeQueryEnvelopeWire { + name: "mindmap.simple_mind_map_scene.get".into(), + payload: json!({ + "documentId": document_id, + "mindmapId": mindmap_id, + "workspaceId": body.workspace_id, + }), + }, + applied.data, + )?; + return Ok(( + StatusCode::OK, + response_headers(), + Json(json!({ + "ok": true, + "sourceKind": "local_folder", + "commandName": "mindmap.command.apply", + "applied": applied.applied, + "errors": applied.errors, + "projectionRevision": body.projection_revision, + "writeResult": write_result, + "kernelRevision": projection.get("kernelRevision").cloned().unwrap_or(json!(1)), + "root": projection.get("root").cloned().unwrap_or(Value::Null), + })), + )); + } + + let data = body.data.unwrap_or_else(default_mindmap_data); + let write_result = write_local_mindmap_data( + root_uri, + document_id, + mindmap_id, + data.clone(), + body.create_only.unwrap_or(false), + ) + .map_err(|error| error.with_context(&context))?; + let projection = execute_runtime_query_against_data( + &context, + body.workspace_id.as_deref(), + RuntimeQueryEnvelopeWire { + name: "mindmap.simple_mind_map_scene.get".into(), + payload: json!({ + "documentId": document_id, + "mindmapId": mindmap_id, + "workspaceId": body.workspace_id, + }), + }, + data, + )?; + return Ok(( + StatusCode::OK, + response_headers(), + Json(json!({ + "ok": true, + "sourceKind": "local_folder", + "commandName": "mindmaps.put", + "writeResult": write_result, + "kernelRevision": projection.get("kernelRevision").cloned().unwrap_or(json!(1)), + "root": projection.get("root").cloned().unwrap_or(Value::Null), + })), + )); + } let effective_workspace_id = resolve_mindmap_workspace_id(&state, &context, body.workspace_id.as_deref(), document_id) .await?; @@ -323,6 +469,7 @@ mod tests { use axum::body::{to_bytes, Body}; use axum::http::{Request, StatusCode}; use serde_json::{json, Value}; + use std::path::PathBuf; use tower::util::ServiceExt; fn app() -> axum::Router { @@ -354,6 +501,26 @@ mod tests { })) } + fn temp_root(name: &str) -> PathBuf { + let root = std::env::temp_dir().join(format!("{}-{}", name, std::process::id())); + let _ = std::fs::remove_dir_all(&root); + std::fs::create_dir_all(&root).expect("create temp root"); + root + } + + fn encode_query_value(value: &str) -> String { + value.replace(':', "%3A").replace('/', "%2F") + } + + fn init_local_workspace(root: &PathBuf) -> String { + let root_uri = format!("file://{}", root.display()); + crate::routes::local_folder_source::initialize_local_workspace_for_actor( + "dev-user", &root_uri, + ) + .expect("init local workspace"); + root_uri + } + #[tokio::test] async fn mindmap_put_derives_workspace_and_returns_tree_artifacts() { let response = app() @@ -450,4 +617,142 @@ mod tests { }) ); } + + #[tokio::test] + async fn local_folder_mindmap_put_writes_file_and_get_reads_back() { + let root = temp_root("mnote-local-mindmap-api-put-get"); + let root_uri = init_local_workspace(&root); + std::fs::create_dir_all(root.join("Page")).expect("create page dir"); + std::fs::write(root.join("Page").join("Page.md"), "").expect("write page"); + let encoded_root = encode_query_value(&root_uri); + let encoded_mindmap_id = encode_query_value("思维导图123456.json"); + + let put_response = app() + .oneshot( + Request::builder() + .method("POST") + .uri(format!( + "/api/mindmap/local-md:Page~2FPage.md/{encoded_mindmap_id}?sourceKind=local_folder&rootUri={encoded_root}" + )) + .header("content-type", "application/json") + .header("x-mnote-actor-id", "dev-user") + .header("x-mnote-actor-type", "user") + .body(Body::from( + json!({ + "data": { + "data": {"text": "本地主题", "uid": "root"}, + "children": [] + }, + "createOnly": false + }) + .to_string(), + )) + .expect("request"), + ) + .await + .expect("response"); + assert_eq!(put_response.status(), StatusCode::OK); + + let put_body = to_bytes(put_response.into_body(), usize::MAX) + .await + .expect("body"); + let put_payload: Value = serde_json::from_slice(&put_body).expect("json"); + assert_eq!(put_payload["sourceKind"], "local_folder"); + assert_eq!(put_payload["commandName"], "mindmaps.put"); + assert_eq!( + put_payload["writeResult"]["relativePath"], + "Page/思维导图123456.json" + ); + assert!( + root.join("Page").join("思维导图123456.json").is_file(), + "mindmap json should be persisted next to the page markdown" + ); + + let get_response = app() + .oneshot( + Request::builder() + .uri(format!( + "/api/mindmap/local-md:Page~2FPage.md/{encoded_mindmap_id}?sourceKind=local_folder&rootUri={encoded_root}&view=simple_mind_map_scene" + )) + .header("x-mnote-actor-id", "dev-user") + .header("x-mnote-actor-type", "user") + .body(Body::empty()) + .expect("request"), + ) + .await + .expect("response"); + assert_eq!(get_response.status(), StatusCode::OK); + let get_body = to_bytes(get_response.into_body(), usize::MAX) + .await + .expect("body"); + let get_payload: Value = serde_json::from_slice(&get_body).expect("json"); + assert_eq!(get_payload["root"]["data"]["text"], "本地主题"); + + let _ = std::fs::remove_dir_all(&root); + } + + #[tokio::test] + async fn local_folder_mindmap_command_apply_updates_persisted_file() { + let root = temp_root("mnote-local-mindmap-api-command-apply"); + let root_uri = init_local_workspace(&root); + std::fs::create_dir_all(root.join("Page")).expect("create page dir"); + std::fs::write(root.join("Page").join("Page.md"), "").expect("write page"); + std::fs::write( + root.join("Page").join("思维导图123456.json"), + json!({ + "data": {"text": "旧主题", "uid": "root"}, + "children": [] + }) + .to_string(), + ) + .expect("write mindmap"); + let encoded_root = encode_query_value(&root_uri); + let encoded_mindmap_id = encode_query_value("思维导图123456.json"); + + let response = app() + .oneshot( + Request::builder() + .method("POST") + .uri(format!( + "/api/mindmap/local-md:Page~2FPage.md/{encoded_mindmap_id}?sourceKind=local_folder&rootUri={encoded_root}" + )) + .header("content-type", "application/json") + .header("x-mnote-actor-id", "dev-user") + .header("x-mnote-actor-type", "user") + .body(Body::from( + json!({ + "commandName": "mindmap.command.apply", + "commands": [ + { + "type": "updateText", + "mindmapId": "思维导图123456.json", + "nodeId": "root", + "text": "新主题" + } + ], + "projectionRevision": 1 + }) + .to_string(), + )) + .expect("request"), + ) + .await + .expect("response"); + + assert_eq!(response.status(), StatusCode::OK); + let body = to_bytes(response.into_body(), usize::MAX) + .await + .expect("body"); + let payload: Value = serde_json::from_slice(&body).expect("json"); + assert_eq!(payload["sourceKind"], "local_folder"); + assert_eq!(payload["commandName"], "mindmap.command.apply"); + assert_eq!(payload["root"]["data"]["text"], "新主题"); + + let saved = std::fs::read_to_string(root.join("Page").join("思维导图123456.json")) + .expect("read saved mindmap"); + let saved_json: Value = serde_json::from_str(&saved).expect("saved json"); + assert_eq!(saved_json["data"]["text"], "新主题"); + + let _ = std::fs::remove_dir_all(&root); + } } diff --git a/rust/crates/mnote-web/src/routes/mindmap_shell.rs b/rust/crates/mnote-web/src/routes/mindmap_shell.rs index 77865f26..967c3d7a 100644 --- a/rust/crates/mnote-web/src/routes/mindmap_shell.rs +++ b/rust/crates/mnote-web/src/routes/mindmap_shell.rs @@ -3,27 +3,46 @@ use crate::context::RequestContext; use crate::error::WebError; use crate::routes::web_shell::{ build_page_aggregate_snapshot, load_file_tree_html, load_sidebar_tree_html, - load_workspace_shell_projection, + load_workspace_shell_projection, render_local_file_tree_html, render_local_sidebar_tree_html, }; use crate::ssr::pages::mindmap::MindmapPage; use crate::workspace_shell::render_workspace_shell_sidebar_html; -use axum::extract::{Extension, Path, State}; +use axum::extract::{Extension, Path, Query, State}; use axum::http::{HeaderMap, HeaderName, HeaderValue}; use axum::response::{Html, IntoResponse, Response}; +use serde::Deserialize; use serde_json::json; const HEADER_MNOTE_WEB_OWNER: &str = "x-mnote-web-owner"; const HEADER_MNOTE_WEB_SHELL: &str = "x-mnote-web-shell"; +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct MindmapShellQuery { + pub source_kind: Option, + pub root_uri: Option, + pub workspace_id: Option, +} + pub async fn mindmap_object_shell( State(state): State, Extension(context): Extension, Path((doc_id, mindmap_id)): Path<(String, String)>, + Query(query): Query, ) -> Result { let default_workspace_name = format!("{} 的空间", state.config().dev_user_name); - let aggregate = build_page_aggregate_snapshot(&state, &context, &doc_id, None, None, None) - .await - .ok(); + let source_kind = query.source_kind.as_deref(); + let root_uri = query.root_uri.as_deref(); + let aggregate = build_page_aggregate_snapshot( + &state, + &context, + &doc_id, + query.workspace_id.as_deref(), + source_kind, + root_uri, + ) + .await + .ok(); let workspace_id = aggregate .as_ref() .map(|value| value.identity.workspace_id.clone()) @@ -33,44 +52,69 @@ pub async fn mindmap_object_shell( .map(|value| value.head.title.trim().to_string()) .filter(|value| !value.is_empty()) .unwrap_or_else(|| "思维导图".to_string()); - let (workspace_name, sidebar_tree_html, workspace_sidebar_html) = - if let Some(workspace_id) = workspace_id.as_deref() { - let workspace_projection = load_workspace_shell_projection( - state.config(), - &context, - workspace_id, - Some(&doc_id), - &default_workspace_name, - ) - .await; - let sidebar_tree_html = - load_sidebar_tree_html(state.config(), &context, workspace_id, Some(&doc_id)) - .await - .unwrap_or_default(); - let active_filetree_row_id = format!("asset:{mindmap_id}"); - let file_tree_html = load_file_tree_html( - state.config(), - &context, - workspace_id, - Some(&doc_id), - Some(active_filetree_row_id.as_str()), - ) - .await - .unwrap_or_default(); - let workspace_name = workspace_projection.workspace_name.clone(); - let workspace_sidebar_html = render_workspace_shell_sidebar_html( - &workspace_projection, - Some(sidebar_tree_html.as_str()), - Some(file_tree_html.as_str()), - ); - ( - Some(workspace_name), - Some(sidebar_tree_html), - Some(workspace_sidebar_html), - ) - } else { - (None, None, None) - }; + let is_local_folder = source_kind.map(str::trim) == Some("local_folder"); + let (workspace_name, sidebar_tree_html, workspace_sidebar_html) = if is_local_folder { + let root_uri = root_uri.unwrap_or_default(); + let sidebar_tree_html = + render_local_sidebar_tree_html(root_uri, Some(&doc_id)).unwrap_or_default(); + let file_tree_html = + render_local_file_tree_html(root_uri, Some(&doc_id)).unwrap_or_default(); + let workspace_projection = load_workspace_shell_projection( + state.config(), + &context, + workspace_id.as_deref().unwrap_or("local-folder"), + Some(&doc_id), + &default_workspace_name, + ) + .await; + let workspace_name = workspace_projection.workspace_name.clone(); + let workspace_sidebar_html = render_workspace_shell_sidebar_html( + &workspace_projection, + Some(sidebar_tree_html.as_str()), + Some(file_tree_html.as_str()), + ); + ( + Some(workspace_name), + Some(sidebar_tree_html), + Some(workspace_sidebar_html), + ) + } else if let Some(workspace_id) = workspace_id.as_deref() { + let workspace_projection = load_workspace_shell_projection( + state.config(), + &context, + workspace_id, + Some(&doc_id), + &default_workspace_name, + ) + .await; + let sidebar_tree_html = + load_sidebar_tree_html(state.config(), &context, workspace_id, Some(&doc_id)) + .await + .unwrap_or_default(); + let active_filetree_row_id = format!("asset:{mindmap_id}"); + let file_tree_html = load_file_tree_html( + state.config(), + &context, + workspace_id, + Some(&doc_id), + Some(active_filetree_row_id.as_str()), + ) + .await + .unwrap_or_default(); + let workspace_name = workspace_projection.workspace_name.clone(); + let workspace_sidebar_html = render_workspace_shell_sidebar_html( + &workspace_projection, + Some(sidebar_tree_html.as_str()), + Some(file_tree_html.as_str()), + ); + ( + Some(workspace_name), + Some(sidebar_tree_html), + Some(workspace_sidebar_html), + ) + } else { + (None, None, None) + }; let editor_bootstrap = json!({ "documentId": format!("__mindmap_object__:{doc_id}:{mindmap_id}"), "workspaceId": workspace_id @@ -99,6 +143,8 @@ pub async fn mindmap_object_shell( "documentId": doc_id, "mindmapId": mindmap_id }, + "sourceKind": source_kind.unwrap_or("convex_workspace"), + "rootUri": root_uri.unwrap_or(""), "revision": serde_json::Value::Null, "conflictDetectionKey": serde_json::Value::Null, "pageOptions": { @@ -114,6 +160,8 @@ pub async fn mindmap_object_shell( "shell": "mindmap", "documentId": doc_id, "mindmapId": mindmap_id, + "sourceKind": source_kind.unwrap_or("convex_workspace"), + "rootUri": root_uri.unwrap_or(""), "projection": { "schema": "mnote.mindmap.simple_mind_map_scene.v1", "runtime": "simple-mind-map", @@ -151,7 +199,7 @@ pub async fn mindmap_object_shell( {} - + {} @@ -162,6 +210,8 @@ pub async fn mindmap_object_shell( crate::ssr::MNOTE_CSS, escape_html(&doc_id), escape_html(&mindmap_id), + escape_html(source_kind.unwrap_or("convex_workspace")), + escape_html(root_uri.unwrap_or("")), body_content, escape_script_json(&editor_bootstrap_json), escape_script_json(&contract_json), diff --git a/rust/crates/mnote-web/src/routes/tree.rs b/rust/crates/mnote-web/src/routes/tree.rs index 4b6b97be..09d38b56 100644 --- a/rust/crates/mnote-web/src/routes/tree.rs +++ b/rust/crates/mnote-web/src/routes/tree.rs @@ -443,48 +443,8 @@ pub(crate) fn collect_page_tree_render_rows(projection: &Value) -> Vec) -> String { - let source = asset_id - .map(str::trim) - .filter(|value| !value.is_empty()) - .unwrap_or(raw.trim()); - let digits = source - .chars() - .rev() - .take_while(|ch| ch.is_ascii_digit()) - .collect::() - .chars() - .rev() - .collect::(); - let suffix = if digits.len() >= 4 { - digits[digits.len().saturating_sub(4)..].to_string() - } else { - source - .trim_start_matches("mindmap") - .trim_start_matches(|ch| ch == '-' || ch == '_') - .chars() - .take(6) - .collect::() - }; - if suffix.trim().is_empty() { - "思维导图.json".to_string() - } else { - format!("思维导图-{suffix}.json") - } -} - -fn normalize_filetree_mindmap_title( - raw_title: &str, - asset_id: Option<&str>, - icon_kind: &str, - resource_kind: Option<&str>, -) -> String { +fn normalize_filetree_mindmap_title(raw_title: &str) -> String { let title = raw_title.trim(); - let is_mindmap = icon_kind == "mindmap" || resource_kind == Some("mindmap"); - let generated = title.starts_with("mindmap-") || title.starts_with("mindmap_"); - if is_mindmap && (generated || title.chars().count() > 24) { - return short_mindmap_file_name(title, asset_id); - } if title.is_empty() { "无标题".to_string() } else { @@ -592,14 +552,7 @@ pub(crate) fn collect_filetree_render_rows( .map(str::trim) .filter(|value| !value.is_empty()) .map(ToOwned::to_owned), - title: normalize_filetree_mindmap_title( - raw_title, - asset_id.as_deref(), - &icon_kind, - resource_meta - .and_then(|meta| meta.get("resourceKind")) - .and_then(Value::as_str), - ), + title: normalize_filetree_mindmap_title(raw_title), depth: item.get("depth").and_then(Value::as_u64).unwrap_or(0) as u32, expandable: item .get("expandable") @@ -7336,8 +7289,10 @@ mod tests { .expect("body"); let html = String::from_utf8(body.to_vec()).expect("utf8"); assert!(html.contains("local_folder")); - assert!(html.contains("Frontmatter Title")); - assert!(html.contains("Child H1")); + assert!(html.contains("README")); + assert!(html.contains("child")); + assert!(!html.contains("Frontmatter Title")); + assert!(!html.contains("Child H1")); assert!(html.contains(">docs<") || html.contains("docs")); assert!(!html.contains("image.png")); } @@ -7380,8 +7335,23 @@ mod tests { .as_str() .expect("document id") .to_string(); - assert!(root.join("新页面.md").exists()); - assert!(root.join(".mnote").join("page-ids.json").exists()); + let created_relative_path = payload["result"]["execution"]["relativePath"] + .as_str() + .expect("created relative path"); + let (created_dir, created_file) = created_relative_path + .split_once('/') + .expect("created nested bundle path"); + assert!(created_dir.starts_with("新页面")); + assert_eq!(created_file, format!("{created_dir}.md")); + assert!(root.join(created_dir).join(created_file).exists()); + assert_eq!( + document_id, + format!( + "local-md:{}", + crate::routes::local_folder_source::encode_local_id_segment(created_relative_path) + ) + ); + assert!(!root.join(".mnote").join("page-ids.json").exists()); let rename_response = app() .oneshot( @@ -7406,8 +7376,18 @@ mod tests { "{}", String::from_utf8_lossy(&rename_body) ); - assert!(!root.join("新页面.md").exists()); - assert!(root.join("重命名页面.md").exists()); + assert!(!root.join(created_dir).exists()); + assert!(root.join("重命名页面").join("重命名页面.md").exists()); + let rename_payload: Value = serde_json::from_slice(&rename_body).expect("rename json"); + let renamed_document_id = rename_payload["result"]["documentId"] + .as_str() + .expect("renamed document id") + .to_string(); + assert_eq!( + renamed_document_id, + "local-md:~E9~87~8D~E5~91~BD~E5~90~8D~E9~A1~B5~E9~9D~A2~2F~E9~87~8D~E5~91~BD~E5~90~8D~E9~A1~B5~E9~9D~A2.md" + ); + assert!(!root.join(".mnote").join("page-ids.json").exists()); std::fs::create_dir_all(root.join("docs")).expect("create docs dir"); let move_response = app() @@ -7417,15 +7397,38 @@ mod tests { .uri("/api/tree/commands") .header("content-type", "application/json") .body(Body::from(format!( - r#"{{"action":"move","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{document_id}","parentId":"local-dir:docs","sortOrder":0}}"# + r#"{{"action":"move","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{renamed_document_id}","parentId":"local-dir:docs","sortOrder":0}}"# ))) .expect("request"), ) .await .expect("response"); - assert_eq!(move_response.status(), StatusCode::OK); - assert!(!root.join("重命名页面.md").exists()); - assert!(root.join("docs").join("重命名页面.md").exists()); + let move_status = move_response.status(); + let move_body = axum::body::to_bytes(move_response.into_body(), usize::MAX) + .await + .expect("move body"); + assert_eq!( + move_status, + StatusCode::OK, + "{}", + String::from_utf8_lossy(&move_body) + ); + assert!(!root.join("重命名页面").exists()); + assert!(root + .join("docs") + .join("重命名页面") + .join("重命名页面.md") + .exists()); + let move_payload: Value = serde_json::from_slice(&move_body).expect("move json"); + let moved_document_id = move_payload["result"]["documentId"] + .as_str() + .expect("moved document id") + .to_string(); + assert_eq!( + moved_document_id, + "local-md:docs~2F~E9~87~8D~E5~91~BD~E5~90~8D~E9~A1~B5~E9~9D~A2~2F~E9~87~8D~E5~91~BD~E5~90~8D~E9~A1~B5~E9~9D~A2.md" + ); + assert!(!root.join(".mnote").join("page-ids.json").exists()); let copy_response = app() .oneshot( @@ -7434,7 +7437,7 @@ mod tests { .uri("/api/tree/commands") .header("content-type", "application/json") .body(Body::from(format!( - r#"{{"action":"copy","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{document_id}","parentId":"local-dir:docs"}}"# + r#"{{"action":"copy","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{moved_document_id}","parentId":"local-dir:docs"}}"# ))) .expect("request"), ) @@ -7455,7 +7458,11 @@ mod tests { .as_str() .expect("copied document id") .to_string(); - assert!(root.join("docs").join("重命名页面 2.md").exists()); + assert!(root + .join("docs") + .join("重命名页面 2") + .join("重命名页面 2.md") + .exists()); let folder_response = app() .oneshot( @@ -7480,20 +7487,22 @@ mod tests { .uri("/api/tree/commands") .header("content-type", "application/json") .body(Body::from(format!( - r#"{{"action":"delete","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{document_id}"}}"# + r#"{{"action":"delete","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{moved_document_id}"}}"# ))) .expect("request"), ) .await .expect("response"); assert_eq!(delete_response.status(), StatusCode::OK); - assert!(!root.join("docs").join("重命名页面.md").exists()); + assert!(!root.join("docs").join("重命名页面").exists()); assert!(root .join(".mnote") .join("trash") + .join("重命名页面") .join("重命名页面.md") .exists()); assert!(root.join(".mnote").join("trash-index.json").exists()); + assert!(!root.join(".mnote").join("page-ids.json").exists()); let restore_response = app() .oneshot( @@ -7502,14 +7511,33 @@ mod tests { .uri("/api/tree/commands") .header("content-type", "application/json") .body(Body::from(format!( - r#"{{"action":"restore","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{document_id}"}}"# + r#"{{"action":"restore","sourceKind":"local_folder","rootUri":"{root_uri}","documentId":"{moved_document_id}"}}"# ))) .expect("request"), ) .await .expect("response"); - assert_eq!(restore_response.status(), StatusCode::OK); - assert!(root.join("docs").join("重命名页面.md").exists()); + let restore_status = restore_response.status(); + let restore_body = axum::body::to_bytes(restore_response.into_body(), usize::MAX) + .await + .expect("restore body"); + assert_eq!( + restore_status, + StatusCode::OK, + "{}", + String::from_utf8_lossy(&restore_body) + ); + assert!(root + .join("docs") + .join("重命名页面") + .join("重命名页面.md") + .exists()); + let restore_payload: Value = serde_json::from_slice(&restore_body).expect("restore json"); + assert_eq!( + restore_payload["result"]["documentId"].as_str(), + Some(moved_document_id.as_str()) + ); + assert!(!root.join(".mnote").join("page-ids.json").exists()); let purge_response = app() .oneshot( @@ -7525,7 +7553,7 @@ mod tests { .await .expect("response"); assert_eq!(purge_response.status(), StatusCode::OK); - assert!(!root.join("docs").join("重命名页面 2.md").exists()); + assert!(!root.join("docs").join("重命名页面 2").exists()); let _ = std::fs::remove_dir_all(&root); } diff --git a/rust/crates/mnote-web/src/routes/web_shell.rs b/rust/crates/mnote-web/src/routes/web_shell.rs index de98f24a..1bef3ea0 100644 --- a/rust/crates/mnote-web/src/routes/web_shell.rs +++ b/rust/crates/mnote-web/src/routes/web_shell.rs @@ -213,7 +213,7 @@ pub async fn document_page_shell( {} - + {} @@ -228,6 +228,8 @@ pub async fn document_page_shell( escape_html(title), crate::ssr::MNOTE_CSS, escape_html(&document_id), + escape_html(primary_source_kind.unwrap_or("convex_workspace")), + escape_html(primary_root_uri.unwrap_or("")), secondary_requested, secondary_invalid, body_content, @@ -557,11 +559,24 @@ pub(crate) fn render_document_title_controller_script() -> &'static str { if (!response.ok || !payload || payload.ok !== true) { throw new Error(payload?.error?.message || payload?.message || `title_failed_${response.status}`); } - writeLastSavedTitle(title); - updateVisibleTitle(input, title, currentTarget.documentId); + const result = payload?.result || {}; + const nextDocumentId = String(result.documentId || result.id || currentTarget.documentId || '').trim(); + const previousDocumentId = currentTarget.documentId; + const nextTitle = String(result.title || title || '无标题').trim() || '无标题'; + if (nextDocumentId) { + input.setAttribute('data-document-id', nextDocumentId); + } + writeLastSavedTitle(nextTitle); + updateVisibleTitle(input, nextTitle, nextDocumentId || currentTarget.documentId); setStatus(input, 'saved'); window.dispatchEvent(new CustomEvent('tree:title-updated', { - detail: { documentId: currentTarget.documentId, workspaceId: currentTarget.workspaceId || null, title, payload }, + detail: { + documentId: nextDocumentId || currentTarget.documentId, + previousDocumentId, + workspaceId: currentTarget.workspaceId || null, + title: nextTitle, + payload, + }, })); } catch (error) { setStatus(input, 'error', error instanceof Error ? error.message : String(error)); @@ -896,6 +911,8 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const mindmapId = firstNonEmptyText( block?.props?.mindmapId, block?.props?.mindmap_id, + block?.props?.sourcePath, + block?.props?.source_path, block?.mindmapId, block?.mindmap_id, data?.mindmapId, @@ -1023,10 +1040,84 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { return textToTiptapDocument(fallbackText); }; - const pageBodyTiptapDocument = (body, fallbackText = '') => { + const decodeLocalIdSegment = (segment) => { + const encoded = String(segment || '').replace(/~([0-9a-fA-F]{2})/g, '%$1'); + try { + return decodeURIComponent(encoded); + } catch (_) { + return String(segment || '').replace(/~2F/g, '/').replace(/~20/g, ' '); + } + }; + + const localMarkdownRelativePathFromDocumentId = (documentId) => { + const raw = String(documentId || '').trim(); + const segment = raw.startsWith('local-md:') ? raw.slice('local-md:'.length) : raw; + return decodeLocalIdSegment(segment).replace(/^\/+/, ''); + }; + + const localMarkdownDirectoryFromDocumentId = (documentId) => { + const relativePath = localMarkdownRelativePathFromDocumentId(documentId); + const slash = relativePath.lastIndexOf('/'); + return slash >= 0 ? relativePath.slice(0, slash) : ''; + }; + + const isExternalOrSpecialUrl = (value) => { + const text = String(value || '').trim(); + return !text + || text.startsWith('#') + || text.startsWith('data:') + || text.startsWith('blob:') + || text.startsWith('mailto:') + || text.startsWith('http://') + || text.startsWith('https://') + || text.startsWith('/api/'); + }; + + const normalizeLocalAssetRelativePath = (value, context) => { + const text = String(value || '').trim(); + if (!text || isExternalOrSpecialUrl(text)) return text; + if (text.startsWith('/')) return text.replace(/^\/+/, ''); + const baseDir = localMarkdownDirectoryFromDocumentId(context?.documentId); + return (baseDir ? `${baseDir}/${text}` : text) + .split('/') + .filter((part) => part && part !== '.') + .join('/'); + }; + + const localFileOpenUrlForTiptap = (value, context) => { + if (!context || context.sourceKind !== 'local_folder' || !context.rootUri) return value; + const relativePath = normalizeLocalAssetRelativePath(value, context); + if (!relativePath || isExternalOrSpecialUrl(relativePath)) return value; + const url = new URL('/api/local-folder/files/open', window.location.origin); + url.searchParams.set('rootUri', context.rootUri); + url.searchParams.set('path', relativePath); + return url.toString(); + }; + + const localizeTiptapAssetUrls = (node, context) => { + if (!node || typeof node !== 'object') return node; + if (node.type === 'image' && node.attrs && typeof node.attrs.src === 'string') { + node.attrs = { ...node.attrs, src: localFileOpenUrlForTiptap(node.attrs.src, context) }; + } + if (Array.isArray(node.marks)) { + node.marks = node.marks.map((mark) => { + if (!mark || mark.type !== 'link' || !mark.attrs || typeof mark.attrs.href !== 'string') return mark; + return { ...mark, attrs: { ...mark.attrs, href: localFileOpenUrlForTiptap(mark.attrs.href, context) } }; + }); + } + if (Array.isArray(node.content)) { + node.content = node.content.map((child) => localizeTiptapAssetUrls(child, context)); + } + return node; + }; + + const pageBodyTiptapDocument = (body, fallbackText = '', context = null) => { + if (String(body?.projectionSource || body?.projection_source || '') === 'local_markdown.content' && body?.content) { + return localizeTiptapAssetUrls(toTiptapDocument(body.content, fallbackText), context); + } const blockDocument = body?.blockDocument || body?.block_document || body?.editorDocument || body?.editor_document || null; - if (blockDocument) return toTiptapDocument(blockDocument, fallbackText); - return toTiptapDocument(body?.content, fallbackText); + if (blockDocument) return localizeTiptapAssetUrls(toTiptapDocument(blockDocument, fallbackText), context); + return localizeTiptapAssetUrls(toTiptapDocument(body?.content, fallbackText), context); }; const inlineTextNodes = (node) => { @@ -1089,6 +1180,8 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const mindmapId = firstNonEmptyText( attrs?.mindmapId, attrs?.mindmap_id, + attrs?.sourcePath, + attrs?.source_path, data?.mindmapId, data?.mindmap_id, data?.id, @@ -1106,10 +1199,20 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const tiptapNodeToEditorBlock = (node, index) => { const blockId = blockIdOf(node, index); if (node?.type === 'paragraph' && node?.attrs?.mnoteBlockType === 'mindmap') { + const mindmapId = firstNonEmptyText( + node?.attrs?.mindmapId, + node?.attrs?.mindmap_id, + node?.attrs?.sourcePath, + node?.attrs?.source_path, + blockId + ); return { blockId, blockType: 'mindmap', - props: mindmapPropsFromAttrs(node?.attrs, blockId), + props: { + ...mindmapPropsFromAttrs(node?.attrs, blockId), + sourcePath: mindmapId, + }, contentNodes: [], childBlockIds: [], }; @@ -1577,6 +1680,15 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { return flattenText(pageBodyTiptapDocument(body)).replace(/\n{3,}/g, '\n\n').trim(); }; + const shouldRetryTransientEmptyLocalAggregate = (session, nextAggregate) => { + if (!session || session.sourceKind !== 'local_folder') return false; + if (!sessionHasRecentExternalSignal(session)) return false; + if (!sessionPlainText(session)) return false; + return !aggregatePlainText(nextAggregate); + }; + + const delay = (ms) => new Promise((resolve) => window.setTimeout(resolve, ms)); + const conflictEnvelopeFromResponse = (payload) => ( payload?.error?.details?.conflict || payload?.details?.conflict @@ -1610,7 +1722,7 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const nextBody = nextAggregate?.body || {}; const nextPermissions = nextAggregate?.head?.permissions || {}; const nextConflictKey = conflictDetectionKeyFromBody(nextBody); - const nextTiptapDocument = pageBodyTiptapDocument(nextBody); + const nextTiptapDocument = pageBodyTiptapDocument(nextBody, '', session); const nextSerialized = JSON.stringify(nextTiptapDocument); const nextRevision = Number.isInteger(nextBody.revision) ? nextBody.revision : revisionFromConflictKey(nextConflictKey); session.latestAggregate = nextAggregate; @@ -1937,6 +2049,7 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { }; const scheduleSessionExternalRefresh = (session, source) => { + if (!session || session.views.size === 0) return; if (session.externalRefreshTimer) return; session.externalRefreshSource = source || session.externalRefreshSource || 'mnote-web-external-change'; session.externalRefreshTimer = window.setTimeout(() => { @@ -1949,6 +2062,7 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const refreshSessionFromExternalChange = async (session, source) => { if (document.hidden) return; + if (!session || session.views.size === 0) return; if (session.sourceKind === 'local_folder' && !session.rootUri) return; try { const response = await fetch(pageAggregateUrl({ @@ -1973,11 +2087,26 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { markSessionExternalConflict(session, conflictMessageFromEnvelope(session, conflictEnvelope)); return; } - const nextAggregate = payload?.result; + let nextAggregate = payload?.result; + if (shouldRetryTransientEmptyLocalAggregate(session, nextAggregate)) { + await delay(500); + try { + const retryAggregate = await fetchLatestSessionAggregate(session); + if (aggregatePlainText(retryAggregate)) { + nextAggregate = retryAggregate; + } else { + markSessionExternalConflict(session, '检测到外部编辑器正在写入空内容,已暂停自动刷新以保护当前编辑区。'); + return; + } + } catch (_retryError) { + markSessionExternalConflict(session, externalConflictMessage); + return; + } + } const nextBody = nextAggregate?.body || {}; const nextPermissions = nextAggregate?.head?.permissions || {}; const nextConflictKey = conflictDetectionKeyFromBody(nextBody); - const nextTiptapDocument = pageBodyTiptapDocument(nextBody); + const nextTiptapDocument = pageBodyTiptapDocument(nextBody, '', session); const nextSerialized = JSON.stringify(nextTiptapDocument); const contentChanged = nextSerialized !== session.currentSerialized; session.externalChangePending = false; @@ -2036,11 +2165,17 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const payload = parseLocalFolderEventPayload(event); if (!payload) return; Array.from(channel.sessions.values()).forEach((targetSession) => { + if (!targetSession || targetSession.views.size === 0) return; const documentId = typeof payload.documentId === 'string' ? payload.documentId.trim() : ''; const eventKind = String(payload.eventKind || ''); const mayAffectMissingDocument = eventKind.includes('Remove') || eventKind.includes('Name'); const targetsCurrentDocument = Boolean(documentId && documentId === targetSession.documentId); if (documentId && !targetsCurrentDocument && !mayAffectMissingDocument) return; + if (targetsCurrentDocument && targetSession.saving) { + targetSession.externalChangePending = false; + targetSession.lastSelfSaveSignalAt = Date.now(); + return; + } targetSession.lastExternalChangeSignalAt = Date.now(); targetSession.externalChangePending = true; if (targetsCurrentDocument && (targetSession.hasExternalConflict || sessionHasRecentLocalInput(targetSession) || targetSession.dirty || targetSession.saveTimer || targetSession.saving)) { @@ -2256,8 +2391,8 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const conflictDetectionKey = conflictDetectionKeyFromBody(pageBody); const pageBodyRevision = Number.isInteger(pageBody.revision) ? pageBody.revision : null; const keyRevision = revisionFromConflictKey(conflictDetectionKey); - const tiptapDocument = pageBodyTiptapDocument(pageBody); const sourceKind = normalizeSessionSourceKind(runtimeDescriptor.bootstrap); + const tiptapDocument = pageBodyTiptapDocument(pageBody, '', runtimeDescriptor.bootstrap); const session = { key: buildDocumentSessionKey(runtimeDescriptor.bootstrap), documentId: runtimeDescriptor.bootstrap.documentId, @@ -2282,6 +2417,7 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { externalChangePending: false, externalRefreshSource: '', lastExternalChangeSignalAt: 0, + lastSelfSaveSignalAt: 0, lastUserInputAt: 0, status: 'booting', error: null, @@ -3498,10 +3634,16 @@ mod tests { assert!(html.contains("/api/tree/events")); assert!(html.contains("data-mnote-tree-live-transport")); assert!(html.contains("syncPageAggregateScript(session, nextAggregate);")); - assert!(html.contains("const pageBodyTiptapDocument = (body, fallbackText = '') => {")); + assert!(html.contains( + "const pageBodyTiptapDocument = (body, fallbackText = '', context = null) => {" + )); assert!(html.contains("body?.blockDocument || body?.block_document")); - assert!(html.contains("const nextTiptapDocument = pageBodyTiptapDocument(nextBody);")); - assert!(html.contains("const tiptapDocument = pageBodyTiptapDocument(pageBody);")); + assert!(html.contains("localizeTiptapAssetUrls(toTiptapDocument(body.content")); + assert!(html + .contains("const nextTiptapDocument = pageBodyTiptapDocument(nextBody, '', session);")); + assert!(html.contains( + "const tiptapDocument = pageBodyTiptapDocument(pageBody, '', runtimeDescriptor.bootstrap);" + )); assert!(!html.contains("mnote-web-document-shell")); } @@ -3655,10 +3797,10 @@ mod tests { let root = std::env::temp_dir().join(format!("mnote-local-page-aggregate-{}", std::process::id())); let _ = std::fs::remove_dir_all(&root); - std::fs::create_dir_all(&root).expect("create local root"); + std::fs::create_dir_all(root.join("Local Aggregate")).expect("create local page bundle"); std::fs::write( - root.join("README.md"), - "---\ntitle: Local Aggregate\n---\n# Local Heading\n正文内容\n", + root.join("Local Aggregate").join("Local Aggregate.md"), + "# Local Heading\n正文内容\n", ) .expect("write local md"); @@ -3668,7 +3810,7 @@ mod tests { .oneshot( Request::builder() .uri(format!( - "/api/page-aggregate/local-md:README.md?sourceKind=local_folder&rootUri={root_uri}" + "/api/page-aggregate/local-md:Local~20Aggregate~2FLocal~20Aggregate.md?sourceKind=local_folder&rootUri={root_uri}" )) .header("x-mnote-actor-id", "user_test") .header("x-mnote-actor-type", "user") @@ -3695,7 +3837,7 @@ mod tests { assert_eq!(payload["schema"], "mnote.page_aggregate.v1"); assert_eq!( payload["result"]["identity"]["documentId"], - "local-md:README.md" + "local-md:Local~20Aggregate~2FLocal~20Aggregate.md" ); assert_eq!(payload["result"]["head"]["title"], "Local Aggregate"); assert_eq!(payload["result"]["head"]["permissions"]["readOnly"], false); @@ -3710,10 +3852,19 @@ mod tests { let root = std::env::temp_dir().join(format!("mnote-local-document-shell-{}", std::process::id())); let _ = std::fs::remove_dir_all(&root); - std::fs::create_dir_all(root.join("docs")).expect("create local docs"); - std::fs::write(root.join("README.md"), "# Local Shell\n正文\n").expect("write root md"); - std::fs::write(root.join("docs").join("child.md"), "# Child Page\n") - .expect("write child md"); + std::fs::create_dir_all(root.join("Local Shell")).expect("create local page bundle"); + std::fs::create_dir_all(root.join("docs").join("Child Page")) + .expect("create local child bundle"); + std::fs::write( + root.join("Local Shell").join("Local Shell.md"), + "# Local Shell\n正文\n", + ) + .expect("write root md"); + std::fs::write( + root.join("docs").join("Child Page").join("Child Page.md"), + "# Child Page\n", + ) + .expect("write child md"); std::fs::write(root.join("asset.png"), b"png").expect("write asset"); let root_uri = format!("file://{}", root.display()); @@ -3722,7 +3873,7 @@ mod tests { .oneshot( Request::builder() .uri(format!( - "/documents/local-md:README.md?sourceKind=local_folder&rootUri={root_uri}&treeView=filetree" + "/documents/local-md:Local~20Shell~2FLocal~20Shell.md?sourceKind=local_folder&rootUri={root_uri}&treeView=filetree" )) .header("x-mnote-actor-id", "user_test") .header("x-mnote-actor-type", "user") @@ -3771,6 +3922,10 @@ mod tests { .contains("if (!response.ok) {\n if (session.sourceKind === 'local_folder')")); assert!(html.contains("mayAffectMissingDocument")); assert!(html.contains("eventKind.includes('Remove') || eventKind.includes('Name')")); + assert!(html.contains("targetSession.views.size === 0")); + assert!(html.contains("session.views.size === 0")); + assert!(html.contains("targetSession.saving")); + assert!(html.contains("lastSelfSaveSignalAt")); assert!(html.contains("command: 'replaceContent'")); assert!(html.contains("external-change-conflict")); assert!(html.contains("mnote-editor-conflict-panel")); @@ -3875,6 +4030,8 @@ mod tests { let html = String::from_utf8(body.to_vec()).expect("html"); assert!(html.contains("Spec")); assert!(html.contains("assets/spec.pdf")); + assert!(html.contains(r#"data-mnote-source-kind="local_folder""#)); + assert!(html.contains(r#"data-mnote-root-uri="file://"#)); } #[tokio::test] diff --git a/rust/crates/mnote-web/src/ssr/pages/document.rs b/rust/crates/mnote-web/src/ssr/pages/document.rs index 47f1198d..405e326f 100644 --- a/rust/crates/mnote-web/src/ssr/pages/document.rs +++ b/rust/crates/mnote-web/src/ssr/pages/document.rs @@ -191,6 +191,9 @@ pub fn DocumentPage( /// 是否显示管理员授权入口 #[prop(optional)] show_admin_access_policy: bool, + /// 是否启用树实时流 + #[prop(optional, default = true)] + enable_tree_live: bool, ) -> impl IntoView { let has_page_subtree = page_subtree_json .as_deref() @@ -288,7 +291,7 @@ pub fn DocumentPage( visible: secondary_visible, }; view! { - +
+ {move || if has_active_page { view! {
@@ -81,8 +81,7 @@ pub fn HomePage( type="button" class="mnote-empty-create-page" data-testid="mnote-empty-create-page" - data-mnote-action="create-page" - data-workspace-id={workspace_id_value.clone()} + data-mnote-action="create-local-workspace" >"新建页面" }.into_any() diff --git a/rust/crates/mnote-web/src/ssr/pages/layout.rs b/rust/crates/mnote-web/src/ssr/pages/layout.rs index 33b9be45..a2e5c9ea 100644 --- a/rust/crates/mnote-web/src/ssr/pages/layout.rs +++ b/rust/crates/mnote-web/src/ssr/pages/layout.rs @@ -625,10 +625,16 @@ const SIDEBAR_TREE_JS: &str = r##" return (new URLSearchParams(window.location.search).get('workspaceId') || 'default').trim() || 'default'; } + function currentWorkspaceId() { + return resolveWorkspaceId(document.body); + } + function currentSourceKind() { var params = new URLSearchParams(window.location.search); var fromUrl = (params.get('sourceKind') || '').trim(); if (fromUrl) return fromUrl; + var fromBody = document.body instanceof HTMLElement ? (document.body.getAttribute('data-mnote-source-kind') || '').trim() : ''; + if (fromBody) return fromBody; if ( window.location.pathname === '/' && !(params.get('workspaceId') || '').trim() && @@ -641,7 +647,10 @@ const SIDEBAR_TREE_JS: &str = r##" } function currentRootUri() { - return (new URLSearchParams(window.location.search).get('rootUri') || '').trim(); + var params = new URLSearchParams(window.location.search); + var fromUrl = (params.get('rootUri') || '').trim(); + if (fromUrl) return fromUrl; + return document.body instanceof HTMLElement ? (document.body.getAttribute('data-mnote-root-uri') || '').trim() : ''; } function rememberCloudWorkspaceId(workspaceId) { @@ -691,6 +700,10 @@ const SIDEBAR_TREE_JS: &str = r##" var value = (params.get(name) || '').trim(); if (value) targetUrl.searchParams.set(name, value); }); + var sourceKind = currentSourceKind(); + var rootUri = currentRootUri(); + if (sourceKind && !targetUrl.searchParams.get('sourceKind')) targetUrl.searchParams.set('sourceKind', sourceKind); + if (rootUri && !targetUrl.searchParams.get('rootUri')) targetUrl.searchParams.set('rootUri', rootUri); } function currentWorkspaceSourcePayload() { @@ -700,6 +713,10 @@ const SIDEBAR_TREE_JS: &str = r##" var value = (params.get(name) || '').trim(); if (value) payload[name] = value; }); + var sourceKind = currentSourceKind(); + var rootUri = currentRootUri(); + if (sourceKind && !payload.sourceKind) payload.sourceKind = sourceKind; + if (rootUri && !payload.rootUri) payload.rootUri = rootUri; return payload; } @@ -838,13 +855,19 @@ const SIDEBAR_TREE_JS: &str = r##" document.documentElement.setAttribute('data-mnote-trash-modal-open', 'true'); var content = overlay.querySelector('[data-testid="mnote-trash-modal-content"]'); var sourceKind = currentSourceKind(); - if (sourceKind === 'local_folder') { - renderLocalFolderTrashPlaceholder(content, new URLSearchParams(window.location.search).get('rootUri') || ''); - return; - } var workspaceId = resolveWorkspaceId(trigger || document.body); var url = new URL('/trash', window.location.origin); - if (workspaceId) url.searchParams.set('workspaceId', workspaceId); + if (sourceKind === 'local_folder') { + var rootUri = currentRootUri(); + if (!rootUri) { + renderLocalFolderTrashPlaceholder(content, ''); + return; + } + url.searchParams.set('sourceKind', 'local_folder'); + url.searchParams.set('rootUri', rootUri); + } else if (workspaceId) { + url.searchParams.set('workspaceId', workspaceId); + } fetch(url.toString(), { headers: { 'x-mnote-trash-modal': '1' } }).then(function(response) { return response.text().then(function(html) { if (!response.ok) throw new Error('trash_modal_load_failed_' + response.status); @@ -1294,7 +1317,7 @@ const SIDEBAR_TREE_JS: &str = r##" title: '新页面' }); var nextWorkspaceId = result.workspaceId || workspaceId; - navigateToDocument(result.documentId, nextWorkspaceId, { treeView: activeSidebarTreeMode() }); + navigateToDocument(commandDocumentId(result, ''), nextWorkspaceId, { treeView: activeSidebarTreeMode() }); } function applySidebarTreeTab(mode, shell) { @@ -1450,6 +1473,7 @@ const SIDEBAR_TREE_JS: &str = r##" function commandDocumentId(result, fallback) { var value = result && ( + (result.execution && (result.execution.documentId || result.execution.id || result.execution.nodeId)) || result.documentId || result.id || result.nodeId || @@ -1462,6 +1486,7 @@ const SIDEBAR_TREE_JS: &str = r##" function commandDocumentTitle(result, fallback) { var value = result && ( + (result.execution && result.execution.title) || result.title || (result.document && result.document.title) || (result.node && result.node.title) || @@ -1581,6 +1606,17 @@ const SIDEBAR_TREE_JS: &str = r##" return pageChanged || fileChanged; } + function localCommandNeedsProjectionRefresh(action, result) { + if (currentSourceKind() !== 'local_folder') return false; + if (action === 'create' || action === 'rename' || action === 'move' || action === 'delete' || action === 'archive' || action === 'trash' || action === 'purge') { + return true; + } + if (result && (result.previousDocumentId || result.previousRelativePath || result.relativePath || result.trashPath)) { + return true; + } + return false; + } + function sortOrderFromDelta(data) { var raw = data && (data.sortOrder ?? data.sort_order); var value = Number(raw); @@ -1798,9 +1834,8 @@ const SIDEBAR_TREE_JS: &str = r##" function normalizeMindmapFileTreeTitle(rawTitle, assetId, iconKind, objectIdentity) { var title = String(rawTitle || '').trim(); var isMindmap = iconKind === 'mindmap' || String(objectIdentity && objectIdentity.objectKind || '') === 'mindmap'; - var generated = /^mindmap[-_]/i.test(title); - if (!isMindmap || (!generated && title.length <= 24)) return title || '无标题'; - return shortMindmapFileName(assetId || title); + if (!isMindmap) return title || '无标题'; + return title || shortMindmapFileName(assetId); } function renderFileRows(parentId, grouped, activeId, activeRowId) { @@ -1865,9 +1900,8 @@ const SIDEBAR_TREE_JS: &str = r##" } async function refreshLocalFolderSidebarSnapshot() { - var params = new URLSearchParams(window.location.search); var workspaceId = currentWorkspaceId(); - var rootUri = (params.get('rootUri') || '').trim(); + var rootUri = currentRootUri(); var currentId = currentDocumentId(); if (!workspaceId || !rootUri) return false; @@ -1900,9 +1934,8 @@ const SIDEBAR_TREE_JS: &str = r##" } function startLocalFolderSidebarWatch() { - var params = new URLSearchParams(window.location.search); - if ((params.get('sourceKind') || '').trim() !== 'local_folder') return; - var rootUri = (params.get('rootUri') || '').trim(); + if (currentSourceKind() !== 'local_folder') return; + var rootUri = currentRootUri(); if (!rootUri) return; var revision = ''; var refreshTimer = 0; @@ -2029,11 +2062,29 @@ const SIDEBAR_TREE_JS: &str = r##" return '/onlyoffice?' + params.toString(); } + function buildLocalOnlyOfficeOpenUrl(relativePath, fileName, documentId, assetId) { + var fileType = inferOnlyOfficeFileType(fileName || relativePath || '', ''); + if (!fileType) return ''; + var fileUrl = buildLocalFileOpenUrl(relativePath, false); + if (!fileUrl) return ''; + return buildOnlyOfficeOpenUrl({ + fileUrl: fileUrl, + fileName: fileName || relativePath || '未命名资源', + fileType: fileType, + assetId: assetId || ('local-file:' + relativePath), + documentId: documentId || currentDocumentId() || '', + userId: '', + mode: 'edit' + }); + } + function buildMindmapOpenPath(documentId, assetId) { var doc = String(documentId || '').trim(); var map = String(assetId || '').trim(); if (!doc || !map) return ''; - return '/mindmap/' + encodeURIComponent(doc) + '/' + encodeURIComponent(map); + var targetUrl = new URL('/mindmap/' + encodeURIComponent(doc) + '/' + encodeURIComponent(map), window.location.origin); + copyWorkspaceSourceParams(targetUrl); + return targetUrl.pathname + targetUrl.search; } function navigateToMindmapObject(documentId, assetId, workspaceId) { @@ -2077,7 +2128,11 @@ const SIDEBAR_TREE_JS: &str = r##" var assetId = String(detail && detail.assetId || '').trim(); var assetType = String(detail && detail.assetType || '').trim(); if (assetType === 'mindmap') return true; - return assetId.indexOf('mindmap_') === 0 || assetId.indexOf('mindmap-') === 0; + var fileName = assetId.indexOf('/') >= 0 ? assetId.split('/').pop() : assetId; + return assetId.indexOf('mindmap_') === 0 + || assetId.indexOf('mindmap-') === 0 + || /\.mindmap\.json$/i.test(fileName) + || (/^思维导图/i.test(fileName) && /\.json$/i.test(fileName)); } function localFilePathFromAssetId(assetId) { @@ -2126,6 +2181,18 @@ const SIDEBAR_TREE_JS: &str = r##" if (!assetId) return; var localFilePath = localFilePathFromAssetId(assetId); if (localFilePath) { + var localFileName = localFilePath.split('/').pop() || localFilePath; + if (isMindmapAssetDetail(detail) || String(detail && detail.assetType || '').trim() === 'mindmap') { + document.documentElement.setAttribute('data-mnote-last-mindmap-asset-open-mode', 'local-mindmap-object-shell'); + document.documentElement.setAttribute('data-mnote-last-mindmap-asset-id', assetId); + navigateToMindmapObject(String(detail && detail.documentId || currentDocumentId() || '').trim(), assetId, String(detail.workspaceId || '').trim()); + return; + } + var localOfficeUrl = buildLocalOnlyOfficeOpenUrl(localFilePath, localFileName, String(detail && detail.documentId || currentDocumentId() || '').trim(), assetId); + if (localOfficeUrl) { + window.open(localOfficeUrl, '_blank', 'noopener,noreferrer'); + return; + } var localFileUrl = buildLocalFileOpenUrl(localFilePath, false); if (localFileUrl) window.open(localFileUrl, '_blank', 'noopener,noreferrer'); return; @@ -2267,6 +2334,18 @@ const SIDEBAR_TREE_JS: &str = r##" return String(asset && (asset.sourcePath || asset.file_url || asset.signedUrl || asset.signed_url || asset.thumbnail_url) || '').trim(); } + function localAssetOpenUrl(asset, download) { + if (!isLocalUploadedAsset(asset)) return ''; + var rootUri = String(asset && (asset.rootUri || asset.root_uri) || '').trim() || currentRootUri(); + var rootRelativePath = String(asset && (asset.rootRelativePath || asset.root_relative_path) || '').trim(); + if (!rootUri || !rootRelativePath) return ''; + var url = new URL('/api/local-folder/files/open', window.location.origin); + url.searchParams.set('rootUri', rootUri); + url.searchParams.set('path', rootRelativePath); + if (download) url.searchParams.set('download', 'true'); + return url.toString(); + } + function uploadedAssetType(asset) { return String(asset && (asset.asset_type || asset.assetType || asset.mime_type || '') || '').trim(); } @@ -2360,11 +2439,23 @@ const SIDEBAR_TREE_JS: &str = r##" } function buildOnlyOfficeAssetOpenUrl(asset, userId) { - if (isLocalUploadedAsset(asset)) return ''; var title = uploadedAssetTitle(asset); var fileType = inferOnlyOfficeFileType(title, asset && asset.mime_type); if (!fileType) return ''; var assetId = String(asset && asset.id || '').trim(); + if (isLocalUploadedAsset(asset)) { + var localUrl = localAssetOpenUrl(asset, false); + if (!localUrl) return ''; + return buildOnlyOfficeOpenUrl({ + fileUrl: localUrl, + fileName: title, + fileType: fileType, + assetId: assetId, + documentId: String(asset && (asset.document_id || asset.documentId) || currentDocumentId() || '').trim(), + userId: userId || '', + mode: 'edit' + }); + } return buildOnlyOfficeOpenUrl({ fileUrl: assetId ? '' : uploadedAssetUrl(asset), fileName: title, @@ -2402,14 +2493,17 @@ const SIDEBAR_TREE_JS: &str = r##" legacyOfficeAttachmentIndex = Object.create(null); return legacyOfficeAttachmentIndex; } - legacyOfficeAttachmentIndexPending = fetch( - '/api/tree/projections/file?documentId=' + encodeURIComponent(documentId) + '&workspaceId=' + encodeURIComponent(workspaceId), - { - method: 'GET', - credentials: 'include', - cache: 'no-store' - } - ).then(function(response) { + var projectionUrl = new URL('/api/tree/projections/file', window.location.origin); + projectionUrl.searchParams.set('documentId', documentId); + projectionUrl.searchParams.set('workspaceId', workspaceId); + var sourcePayload = currentWorkspaceSourcePayload(); + if (sourcePayload.sourceKind) projectionUrl.searchParams.set('sourceKind', sourcePayload.sourceKind); + if (sourcePayload.rootUri) projectionUrl.searchParams.set('rootUri', sourcePayload.rootUri); + legacyOfficeAttachmentIndexPending = fetch(projectionUrl.toString(), { + method: 'GET', + credentials: 'include', + cache: 'no-store' + }).then(function(response) { return response.json().catch(function() { return null; }).then(function(payload) { var items = payload && payload.ok && payload.result && Array.isArray(payload.result.items) ? payload.result.items @@ -2581,11 +2675,22 @@ const SIDEBAR_TREE_JS: &str = r##" var container = children || root; var li = document.createElement('li'); li.className = 'tree-node'; + var objectKind = String(asset && (asset.objectKind || asset.resourceKind || '') || '').trim(); + if (!objectKind && (String(asset && (asset.asset_type || asset.assetType) || '').trim() === 'mindmap' || /\.mindmap\.json$/i.test(assetId))) { + objectKind = 'mindmap'; + } + var objectIdentity = { + objectKind: objectKind || 'attachment', + documentId: targetDocumentId || null, + blockId: null, + assetId: assetId + }; li.setAttribute('data-node-id', 'asset:' + assetId); var title = uploadedAssetTitle(asset); var iconKind = uploadedAssetType(asset) || 'file'; + if (objectKind === 'mindmap') iconKind = 'mindmap'; li.innerHTML = - '

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 diff --git a/local-markdown-gfm-design-page.png b/local-markdown-gfm-design-page.png deleted file mode 100644 index 2e95c2913b304a3de7ea0a5a548dddb3cf72f5ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342958 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%0AQk>02LF2( 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