From 892579704e4dfcf325d39f841a996f20560f1886 Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Sat, 24 Jan 2026 07:13:14 +0530 Subject: [PATCH 01/18] feat(app)[editor]: add a intial floating button for ai implementation --- apps/app/package.json | 1 + .../main_section/text_editor/fab/index.svelte | 44 +++++++++++++++++++ .../main_section/text_editor/index.svelte | 2 + bun.lock | 2 + 4 files changed, 49 insertions(+) create mode 100644 apps/app/src/components/main_section/text_editor/fab/index.svelte diff --git a/apps/app/package.json b/apps/app/package.json index 6ad6339f..5c307036 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -17,6 +17,7 @@ "@iconify-json/famicons": "^1.2.2", "@iconify-json/line-md": "^1.2.14", "@sveltejs/vite-plugin-svelte": "^6.2.4", + "@iconify-json/healthicons": "^1.2.12", "@tauri-apps/cli": "^2.9.6", "@testing-library/svelte": "^5.3.1", "@tsconfig/svelte": "^5.0.6", diff --git a/apps/app/src/components/main_section/text_editor/fab/index.svelte b/apps/app/src/components/main_section/text_editor/fab/index.svelte new file mode 100644 index 00000000..f5ac6c75 --- /dev/null +++ b/apps/app/src/components/main_section/text_editor/fab/index.svelte @@ -0,0 +1,44 @@ + + +
+ +
+
+
+ + + + + + {#each items as item} + + {/each} +
diff --git a/apps/app/src/components/main_section/text_editor/index.svelte b/apps/app/src/components/main_section/text_editor/index.svelte index 60702a5d..58470cc4 100644 --- a/apps/app/src/components/main_section/text_editor/index.svelte +++ b/apps/app/src/components/main_section/text_editor/index.svelte @@ -6,6 +6,7 @@ import { toast } from 'svelte-sonner'; import Editor from './editor/index.svelte'; import MobileToolbar from './editor_toolbar_mobile/index.svelte'; + import FloatingActionButton from './fab/index.svelte'; import { editor_view } from './editor_state.svelte'; import { focused_subtree } from '@/components/sidebar_section/file_manager/states.svelte'; @@ -92,6 +93,7 @@ /> + {#if current_platform_type == 'mobile' && mobile_toolbar_visible && editor_view.data} diff --git a/bun.lock b/bun.lock index 6928c152..7f4d7bc8 100644 --- a/bun.lock +++ b/bun.lock @@ -52,6 +52,7 @@ "@iconify-json/famicons": "^1.2.2", "@iconify-json/line-md": "^1.2.14", "@sveltejs/vite-plugin-svelte": "^6.2.4", + "@iconify-json/healthicons": "^1.2.12", "@tauri-apps/cli": "^2.9.6", "@testing-library/svelte": "^5.3.1", "@tsconfig/svelte": "^5.0.6", @@ -234,6 +235,7 @@ "@iconify-json/famicons": ["@iconify-json/famicons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-mFgrUk2CYKeFe9EHh6XWdtVDkX344OTb3E6X7RaOp6iwW9saJH/kknNFZRZ2UFQCcFl3RNSTN6IRpCRsRppFxw=="], "@iconify-json/line-md": ["@iconify-json/line-md@1.2.14", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ZlgQyMcptcni3wEua+ij9hXEuYmlHKlf38/fZT4Qhds07naE9NeEmE0tqWMHAtkir+r9VRTTz3jXzwXWkLZiCg=="], + "@iconify-json/healthicons": ["@iconify-json/healthicons@1.2.12", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-0ohosj8zla9Bf+OT0wPYASVp1OvLzkdBof/B03lzGWmC5FzkvtFeAa4TtzLMCOVaeToIpT6JPs9kSfp7dJifdA=="], "@iconify-json/tabler": ["@iconify-json/tabler@1.2.28", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-HKF7K9Ba67GdB2b2tYWF1DS2Ydpxmo1Fsda7bQRwKUPYOiYM99F7rgJp6BN7TFQiRmCaxilfro6FQeCMSjuV1g=="], From 061308398f31bc078b4477aa32295d10917462cd Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 08:56:09 +0530 Subject: [PATCH 02/18] refac(app): rename root_folder_selector component to workpsace_selector --- apps/app/src/App.svelte | 2 +- .../root_folder_selector/states.svelte.ts | 3 --- .../index.svelte | 17 +++++++---------- .../operations.svelte.ts | 6 +++--- .../general/workspace_selector/states.svelte.ts | 3 +++ .../sidebar_section/bottom_sidebar.svelte | 2 +- apps/app/src/lib/window_listeners/index.ts | 2 +- 7 files changed, 16 insertions(+), 19 deletions(-) delete mode 100644 apps/app/src/components/general/root_folder_selector/states.svelte.ts rename apps/app/src/components/general/{root_folder_selector => workspace_selector}/index.svelte (92%) rename apps/app/src/components/general/{root_folder_selector => workspace_selector}/operations.svelte.ts (92%) create mode 100644 apps/app/src/components/general/workspace_selector/states.svelte.ts diff --git a/apps/app/src/App.svelte b/apps/app/src/App.svelte index fd686a94..4507888c 100644 --- a/apps/app/src/App.svelte +++ b/apps/app/src/App.svelte @@ -1,5 +1,5 @@ - +
(root_folder_picker_dialog_state.open = false)} + onclick={() => (workspace_picker_dialog_open_state.data = false)} > ✕ diff --git a/apps/app/src/components/general/root_folder_selector/operations.svelte.ts b/apps/app/src/components/general/workspace_selector/operations.svelte.ts similarity index 92% rename from apps/app/src/components/general/root_folder_selector/operations.svelte.ts rename to apps/app/src/components/general/workspace_selector/operations.svelte.ts index 6a93a22a..c12488cf 100644 --- a/apps/app/src/components/general/root_folder_selector/operations.svelte.ts +++ b/apps/app/src/components/general/workspace_selector/operations.svelte.ts @@ -7,7 +7,7 @@ import { opened_filenode, workspace_root_path, } from '@/lib/global_states/index.svelte'; -import { root_folder_picker_dialog_state } from '@/components/general/root_folder_selector/states.svelte'; +import { workspace_picker_dialog_open_state } from '@/components/general//workspace_selector/states.svelte'; import { type Workspace, type GenericPath } from '@/types'; import { LazyStore } from '@tauri-apps/plugin-store'; import { toast } from 'svelte-sonner'; @@ -27,7 +27,7 @@ export async function update_workspace( ) { try { // Prerequisites - root_folder_picker_dialog_state.open = false; + workspace_picker_dialog_open_state.data = false; const { path, document_top_tree_uri, last_filenode_path } = new_workspace; if (old_workspace_root_path === path) return; reset_ui_states(); @@ -50,7 +50,7 @@ export async function update_workspace( } catch (e) { reset_ui_states(); toast.error('Error Opening Folder: \n' + e); - root_folder_picker_dialog_state.open = true; + workspace_picker_dialog_open_state.data = true; } } diff --git a/apps/app/src/components/general/workspace_selector/states.svelte.ts b/apps/app/src/components/general/workspace_selector/states.svelte.ts new file mode 100644 index 00000000..6c8ab053 --- /dev/null +++ b/apps/app/src/components/general/workspace_selector/states.svelte.ts @@ -0,0 +1,3 @@ +export const workspace_picker_dialog_open_state = $state({ + data: false, +}); diff --git a/apps/app/src/components/sidebar_section/bottom_sidebar.svelte b/apps/app/src/components/sidebar_section/bottom_sidebar.svelte index 0bb66cbc..e8f34ae5 100644 --- a/apps/app/src/components/sidebar_section/bottom_sidebar.svelte +++ b/apps/app/src/components/sidebar_section/bottom_sidebar.svelte @@ -1,6 +1,6 @@
Date: Thu, 5 Feb 2026 11:09:28 +0530 Subject: [PATCH 03/18] feat(app): add initial app setting component --- apps/app/src/App.svelte | 2 + .../general/app_settings/index.svelte | 28 ++++++++++++ .../general/app_settings/states.svelte.ts | 3 ++ .../sidebar_section/bottom_sidebar.svelte | 43 ++++++++++++------- 4 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 apps/app/src/components/general/app_settings/index.svelte create mode 100644 apps/app/src/components/general/app_settings/states.svelte.ts diff --git a/apps/app/src/App.svelte b/apps/app/src/App.svelte index 4507888c..4daa2760 100644 --- a/apps/app/src/App.svelte +++ b/apps/app/src/App.svelte @@ -4,6 +4,7 @@ import GlobalContextMenu from '@/components/general/context_menu/index.svelte'; import { Toaster } from 'svelte-sonner'; import Main from '@/components/main_section/index.svelte'; + import AppSettings from '@/components/general/app_settings/index.svelte'; import { attach_window_listeners } from '@/lib/window_listeners'; import { drawer_open } from '@/lib/global_states/index.svelte'; $effect(() => { @@ -16,6 +17,7 @@ class="drawer select-none h-full lg:drawer-open selection:bg-[rgb(from_var(--color-accent)_r_g_b_/_0.2)] isolate" > + + import { current_platform_type } from '@/lib/file_system'; + import { app_settings_dialog_open_state } from './states.svelte'; + + + + + diff --git a/apps/app/src/components/general/app_settings/states.svelte.ts b/apps/app/src/components/general/app_settings/states.svelte.ts new file mode 100644 index 00000000..4f044976 --- /dev/null +++ b/apps/app/src/components/general/app_settings/states.svelte.ts @@ -0,0 +1,3 @@ +export const app_settings_dialog_open_state = $state<{ data: boolean }>({ + data: false, +}); diff --git a/apps/app/src/components/sidebar_section/bottom_sidebar.svelte b/apps/app/src/components/sidebar_section/bottom_sidebar.svelte index e8f34ae5..6b517c6f 100644 --- a/apps/app/src/components/sidebar_section/bottom_sidebar.svelte +++ b/apps/app/src/components/sidebar_section/bottom_sidebar.svelte @@ -1,24 +1,35 @@
- + +
From 77499e1cd53683ec9ea94b6f5c326cec59b92cbb Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 11:09:51 +0530 Subject: [PATCH 04/18] fix(app)[ui]: show floating action button on mobile only --- apps/app/src/components/main_section/text_editor/index.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/app/src/components/main_section/text_editor/index.svelte b/apps/app/src/components/main_section/text_editor/index.svelte index 58470cc4..3c9b3e3e 100644 --- a/apps/app/src/components/main_section/text_editor/index.svelte +++ b/apps/app/src/components/main_section/text_editor/index.svelte @@ -93,7 +93,9 @@ />
- +{#if current_platform_type == 'mobile'} + +{/if} {#if current_platform_type == 'mobile' && mobile_toolbar_visible && editor_view.data} From c4d5880431a555fb59841de9bb2e95f7811cb28a Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 11:10:21 +0530 Subject: [PATCH 05/18] fix(app)[ui]: fix max width not working, add border to the modal --- .../general/workspace_selector/index.svelte | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/apps/app/src/components/general/workspace_selector/index.svelte b/apps/app/src/components/general/workspace_selector/index.svelte index 34f98c1e..46e7f40b 100644 --- a/apps/app/src/components/general/workspace_selector/index.svelte +++ b/apps/app/src/components/general/workspace_selector/index.svelte @@ -44,22 +44,10 @@ From e080eed5cefede01483484a5af463dde9bd10e7c Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 19:40:33 +0530 Subject: [PATCH 06/18] feat!(app)[lm]: add LM model features like text summarization, rephrase and configs to settings --- apps/app/package.json | 9 +- .../general/app_settings/editor/index.svelte | 15 ++ .../editor/lm_config/index.svelte | 136 ++++++++++++++++++ .../editor/lm_config/list_models.svelte | 77 ++++++++++ .../app_settings/editor/lm_config/onclick.ts | 28 ++++ .../general/app_settings/index.svelte | 80 ++++++++--- .../general/app_settings/sidebar_items.ts | 20 +++ .../text_editor/editor/context_menu.ts | 29 ++++ apps/app/src/lib/features/nlp/index.ts | 49 +++++++ .../app/src/lib/features/nlp/states.svelte.ts | 5 + bun.lock | 62 +++++++- 11 files changed, 487 insertions(+), 23 deletions(-) create mode 100644 apps/app/src/components/general/app_settings/editor/index.svelte create mode 100644 apps/app/src/components/general/app_settings/editor/lm_config/index.svelte create mode 100644 apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte create mode 100644 apps/app/src/components/general/app_settings/editor/lm_config/onclick.ts create mode 100644 apps/app/src/components/general/app_settings/sidebar_items.ts create mode 100644 apps/app/src/lib/features/nlp/index.ts create mode 100644 apps/app/src/lib/features/nlp/states.svelte.ts diff --git a/apps/app/package.json b/apps/app/package.json index 5c307036..0f2d20d3 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -15,9 +15,10 @@ "devDependencies": { "@0x-jerry/unocss-preset-daisyui": "0.2.3", "@iconify-json/famicons": "^1.2.2", + "@iconify-json/healthicons": "^1.2.12", "@iconify-json/line-md": "^1.2.14", + "@iconify-json/ri": "^1.2.9", "@sveltejs/vite-plugin-svelte": "^6.2.4", - "@iconify-json/healthicons": "^1.2.12", "@tauri-apps/cli": "^2.9.6", "@testing-library/svelte": "^5.3.1", "@tsconfig/svelte": "^5.0.6", @@ -35,6 +36,10 @@ "vitest": "^4.0.18" }, "dependencies": { + "@ai-sdk/anthropic": "^3.0.36", + "@ai-sdk/google": "^3.0.21", + "@ai-sdk/openai": "^3.0.25", + "@ai-sdk/provider": "^3.0.7", "@iconify-json/carbon": "^1.2.18", "@iconify-json/tabler": "^1.2.26", "@saurl/tauri-plugin-safe-area-insets-css-api": "^0.1.0", @@ -49,6 +54,8 @@ "@unocss/preset-mini": "^66.6.0", "@unocss/reset": "^66.6.0", "@unocss/transformer-variant-group": "^66.6.0", + "ai": "^6.0.70", + "bits-ui": "^2.15.5", "daisyui": "5.4.7", "html2canvas-pro": "^1.6.6", "jspdf": "^3.0.4", diff --git a/apps/app/src/components/general/app_settings/editor/index.svelte b/apps/app/src/components/general/app_settings/editor/index.svelte new file mode 100644 index 00000000..c4900dee --- /dev/null +++ b/apps/app/src/components/general/app_settings/editor/index.svelte @@ -0,0 +1,15 @@ + + +
+

+ Language Model +

+
    +
  • +
  • +
+
diff --git a/apps/app/src/components/general/app_settings/editor/lm_config/index.svelte b/apps/app/src/components/general/app_settings/editor/lm_config/index.svelte new file mode 100644 index 00000000..fdc8dddd --- /dev/null +++ b/apps/app/src/components/general/app_settings/editor/lm_config/index.svelte @@ -0,0 +1,136 @@ + + +
+
+

Select Model Provider

+ (sel_provider = v)} + allowDeselect={true} + > + + {selected_provider_label || 'Select a Model'} + + + + +
+
+ + {#each model_providers as model} + + + {#snippet children({ selected })} + +
+ {model.label}
+ {#if selected} +
+
+
+ {/if} + {/snippet} +
+ {/each} + +
+
+
+
+
+
+
+
+

+ Enter {selected_provider_label} + API Key +

+ + +
+
+
+

+ Enter {selected_provider_label} + Model name +

+ + click to see available models + + {#if models_list_dialog_open} + + {/if} +
+ + +
+ +
diff --git a/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte b/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte new file mode 100644 index 00000000..d4964366 --- /dev/null +++ b/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte @@ -0,0 +1,77 @@ + + + + + diff --git a/apps/app/src/components/general/app_settings/editor/lm_config/onclick.ts b/apps/app/src/components/general/app_settings/editor/lm_config/onclick.ts new file mode 100644 index 00000000..edc3070c --- /dev/null +++ b/apps/app/src/components/general/app_settings/editor/lm_config/onclick.ts @@ -0,0 +1,28 @@ +import { model } from '@/lib/features/nlp/states.svelte'; +import { createGoogleGenerativeAI } from '@ai-sdk/google'; +import { createOpenAI } from '@ai-sdk/openai'; +import { createAnthropic } from '@ai-sdk/anthropic'; + +export function apply_ai_config( + provider: string, + api_key: string, + model_id: string +) { + switch (provider) { + case 'google': + const google = createGoogleGenerativeAI({ apiKey: api_key }); + model.data = google(model_id); + break; + case 'openai': + const openai = createOpenAI({ apiKey: api_key }); + model.data = openai(model_id); + break; + case 'anthropic': + const anthropic = createAnthropic({ apiKey: api_key }); + model.data = anthropic(model_id); + break; + + default: + break; + } +} diff --git a/apps/app/src/components/general/app_settings/index.svelte b/apps/app/src/components/general/app_settings/index.svelte index 0701cd9b..46113eb0 100644 --- a/apps/app/src/components/general/app_settings/index.svelte +++ b/apps/app/src/components/general/app_settings/index.svelte @@ -1,28 +1,70 @@ - -
+ -
+
    + {#each sidebar_items as category_item} +
  • +

    + {category_item.category_label} +

    + +
  • + {/each} +
+ +
+ + + +
+{/if} diff --git a/apps/app/src/components/general/app_settings/sidebar_items.ts b/apps/app/src/components/general/app_settings/sidebar_items.ts new file mode 100644 index 00000000..561c8838 --- /dev/null +++ b/apps/app/src/components/general/app_settings/sidebar_items.ts @@ -0,0 +1,20 @@ +// @unocss-include +export const sidebar_items: { + category_label: string; + items: { + id: string; + label: string; + icon: string; + }[]; +}[] = [ + { + category_label: 'options', + items: [ + { + id: 'editor', + label: 'Editor', + icon: 'i-tabler:pencil-cog', + }, + ], + }, +]; diff --git a/apps/app/src/components/main_section/text_editor/editor/context_menu.ts b/apps/app/src/components/main_section/text_editor/editor/context_menu.ts index 53439a9e..fb785ab9 100644 --- a/apps/app/src/components/main_section/text_editor/editor/context_menu.ts +++ b/apps/app/src/components/main_section/text_editor/editor/context_menu.ts @@ -1,5 +1,6 @@ // @unocss-include +import { get_rephrased_text, get_summarized_text } from '@/lib/features/nlp'; import type { MenuItem } from '@/types'; import type { EditorView } from '@codemirror/view'; import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager'; @@ -24,5 +25,33 @@ export function get_desktop_context_menu(view: EditorView): MenuItem[] { await writeText(selectedText); }, }, + { + divider: true, + label: '', + }, + { + label: 'Rephrase', + icon_class: 'i-tabler:sparkles size-4.5', + action: async () => { + const state = view.state; // 'view' is your EditorView instance + const range = state.selection.main; + const selectedText = state.sliceDoc(range.from, range.to); + const text = await get_rephrased_text(selectedText); + if (!text) return; + view.dispatch(view.state.replaceSelection(text)); + }, + }, + { + label: 'Summarize', + icon_class: 'i-tabler:sparkles size-4.5', + action: async () => { + const state = view.state; // 'view' is your EditorView instance + const range = state.selection.main; + const selectedText = state.sliceDoc(range.from, range.to); + const text = await get_summarized_text(selectedText); + if (!text) return; + view.dispatch(view.state.replaceSelection(text)); + }, + }, ]; } diff --git a/apps/app/src/lib/features/nlp/index.ts b/apps/app/src/lib/features/nlp/index.ts new file mode 100644 index 00000000..e5b9979b --- /dev/null +++ b/apps/app/src/lib/features/nlp/index.ts @@ -0,0 +1,49 @@ +import { generateText } from 'ai'; +import { model } from './states.svelte'; +import { toast } from 'svelte-sonner'; + +export async function get_summarized_text(text: string) { + if (!model.data) { + toast.error('Please Set your Language Model Provider First'); + return; + } + const prompt = ` +You are an Expet Markdown Writter. You job is to Summarize the text given to you to make it clearer, simpler and summarized in a short sentence. + +the markdown text you are given is this: + +'${text}' + +your job is to summarize this text and output only the markdown summary of the text. +DO NOT ouput a confirmation response like "yeah, no problems, i will do that" +DO NOT output a markdown wrapped inside a code block like \`\`\`# Markdown\`\`\`. only output pure markdown +ONLY output the summarized markdown text in the resaponse and nothing else +`; + const { text: summarized_text } = await generateText({ + model: model.data, + prompt, + }); + return summarized_text; +} +export async function get_rephrased_text(text: string) { + if (!model.data) { + toast.error('Please Set your Language Model Provider First'); + return; + } + const prompt = ` +You are an Expet Markdown Writter. You job is to Rephrase the text given to you to and make it clearer, simpler and sound good. + +the markdown text you are given is this: + +'${text}' + +DO NOT ouput a confirmation response like "yeah, no problems, i will do that" +DO NOT output a markdown wrapped inside a code block like \`\`\`# Markdown\`\`\`. only output pure markdown +ONLY output the summarized markdown text in the resaponse and nothing else +`; + const { text: rephrased_text } = await generateText({ + model: model.data, + prompt, + }); + return rephrased_text; +} diff --git a/apps/app/src/lib/features/nlp/states.svelte.ts b/apps/app/src/lib/features/nlp/states.svelte.ts new file mode 100644 index 00000000..3cf951bf --- /dev/null +++ b/apps/app/src/lib/features/nlp/states.svelte.ts @@ -0,0 +1,5 @@ +import type { LanguageModelV3 } from '@ai-sdk/provider'; + +export const model = $state<{ data: LanguageModelV3 | undefined }>({ + data: undefined, +}); diff --git a/bun.lock b/bun.lock index 7f4d7bc8..551a3c02 100644 --- a/bun.lock +++ b/bun.lock @@ -25,6 +25,10 @@ "name": "cherit", "version": "0.0.1", "dependencies": { + "@ai-sdk/anthropic": "^3.0.36", + "@ai-sdk/google": "^3.0.21", + "@ai-sdk/openai": "^3.0.25", + "@ai-sdk/provider": "^3.0.7", "@iconify-json/carbon": "^1.2.18", "@iconify-json/tabler": "^1.2.26", "@saurl/tauri-plugin-safe-area-insets-css-api": "^0.1.0", @@ -39,6 +43,8 @@ "@unocss/preset-mini": "^66.6.0", "@unocss/reset": "^66.6.0", "@unocss/transformer-variant-group": "^66.6.0", + "ai": "^6.0.70", + "bits-ui": "^2.15.5", "daisyui": "5.4.7", "html2canvas-pro": "^1.6.6", "jspdf": "^3.0.4", @@ -50,9 +56,10 @@ "devDependencies": { "@0x-jerry/unocss-preset-daisyui": "0.2.3", "@iconify-json/famicons": "^1.2.2", + "@iconify-json/healthicons": "^1.2.12", "@iconify-json/line-md": "^1.2.14", + "@iconify-json/ri": "^1.2.9", "@sveltejs/vite-plugin-svelte": "^6.2.4", - "@iconify-json/healthicons": "^1.2.12", "@tauri-apps/cli": "^2.9.6", "@testing-library/svelte": "^5.3.1", "@tsconfig/svelte": "^5.0.6", @@ -76,6 +83,18 @@ "@acemir/cssom": ["@acemir/cssom@0.9.31", "", {}, "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.50", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.16" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-BkCUgGTp/iZJuuFBF1wv7GGnrEJg7X7hqbaa+/t4HTBt9dZn3e6NFn5NhPUvo2p5SreUeHEl0As0r2uaVn3K9Q=="], + + "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.59", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.16", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MbtheWHgEFV/8HL1Z6E3hOAsmP73zZlNFg0F0nJAD0Adnjp4J/plqNK00Y896d+dWTw+r0OXzyov9/2wCFjH0Q=="], + + "@ai-sdk/google": ["@ai-sdk/google@3.0.34", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.16" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1tXUr1W5YACXPgtHYWIU3raqMsayp6cMI8NUT4EEzzZSpvHzkkiNWHEr+bGxEGurSUukfo+pE1RKpLwBFOZtJg=="], + + "@ai-sdk/openai": ["@ai-sdk/openai@3.0.37", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.16" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-bcYjT3/58i/C0DN3AnrjiGsAb0kYivZLWWUtgTjsBurHSht/LTEy+w3dw5XQe3FmZwX7Z/mUQCiA3wB/5Kf7ow=="], + + "@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="], + + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.16", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-kBvDqNkt5EwlzF9FujmNhhtl8FYg3e8FO8P5uneKliqfRThWemzBj+wfYr7ZCymAQhTRnwSSz1/SOqhOAwmx9g=="], + "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@asamuzakjp/css-color": ["@asamuzakjp/css-color@4.1.2", "", { "dependencies": { "@csstools/css-calc": "^3.0.0", "@csstools/css-color-parser": "^4.0.1", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0", "lru-cache": "^11.2.5" } }, "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg=="], @@ -230,19 +249,30 @@ "@exodus/bytes": ["@exodus/bytes@1.14.1", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ=="], + "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "@iconify-json/carbon": ["@iconify-json/carbon@1.2.19", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-l89XjtEeSA5fxlxPTNSU9AA+rxaz/Dn0X/ux0/3awR+tAayY8iJqWQu3AKxhchfx3LB/fX1Nv3ZppZzrBAt7aA=="], "@iconify-json/famicons": ["@iconify-json/famicons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-mFgrUk2CYKeFe9EHh6XWdtVDkX344OTb3E6X7RaOp6iwW9saJH/kknNFZRZ2UFQCcFl3RNSTN6IRpCRsRppFxw=="], - "@iconify-json/line-md": ["@iconify-json/line-md@1.2.14", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ZlgQyMcptcni3wEua+ij9hXEuYmlHKlf38/fZT4Qhds07naE9NeEmE0tqWMHAtkir+r9VRTTz3jXzwXWkLZiCg=="], "@iconify-json/healthicons": ["@iconify-json/healthicons@1.2.12", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-0ohosj8zla9Bf+OT0wPYASVp1OvLzkdBof/B03lzGWmC5FzkvtFeAa4TtzLMCOVaeToIpT6JPs9kSfp7dJifdA=="], + "@iconify-json/line-md": ["@iconify-json/line-md@1.2.14", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ZlgQyMcptcni3wEua+ij9hXEuYmlHKlf38/fZT4Qhds07naE9NeEmE0tqWMHAtkir+r9VRTTz3jXzwXWkLZiCg=="], + + "@iconify-json/ri": ["@iconify-json/ri@1.2.10", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-WWMhoncVVM+Xmu9T5fgu2lhYRrKTEWhKk3Com0KiM111EeEsRLiASjpsFKnC/SrB6covhUp95r2mH8tGxhgd5Q=="], + "@iconify-json/tabler": ["@iconify-json/tabler@1.2.28", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-HKF7K9Ba67GdB2b2tYWF1DS2Ydpxmo1Fsda7bQRwKUPYOiYM99F7rgJp6BN7TFQiRmCaxilfro6FQeCMSjuV1g=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], + "@internationalized/date": ["@internationalized/date@3.11.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], @@ -295,6 +325,8 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], "@prosemark/core": ["@prosemark/core@0.0.5", "", { "dependencies": { "@lezer/common": "^1.4.0", "@lezer/markdown": "^1.6.1", "@lezer/yaml": "^1.0.4", "ajv": "^8.17.1", "node-emoji": "^2.2.0" }, "peerDependencies": { "@codemirror/autocomplete": "^6.20.0", "@codemirror/commands": "^6.10.1", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/language": "^6.11.3", "@codemirror/language-data": "^6.5.2", "@codemirror/lint": "^6.9.2", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", "@codemirror/view": "^6.39.4", "@lezer/highlight": "^1.2.0" } }, "sha512-RmSIyvrwxrFXmhx0TTHtMfSH3Cv3e2bl+Oj0v+nz1hvganIfLD8nQ01J9NS+Xj+JWKqpeZzIF8e7Xr6v+D9VTw=="], @@ -365,6 +397,8 @@ "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.2", "", { "dependencies": { "obug": "^2.1.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig=="], + "@swc/helpers": ["@swc/helpers@0.5.19", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA=="], + "@tauri-apps/api": ["@tauri-apps/api@2.10.1", "", {}, "sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw=="], "@tauri-apps/cli": ["@tauri-apps/cli@2.10.0", "", { "optionalDependencies": { "@tauri-apps/cli-darwin-arm64": "2.10.0", "@tauri-apps/cli-darwin-x64": "2.10.0", "@tauri-apps/cli-linux-arm-gnueabihf": "2.10.0", "@tauri-apps/cli-linux-arm64-gnu": "2.10.0", "@tauri-apps/cli-linux-arm64-musl": "2.10.0", "@tauri-apps/cli-linux-riscv64-gnu": "2.10.0", "@tauri-apps/cli-linux-x64-gnu": "2.10.0", "@tauri-apps/cli-linux-x64-musl": "2.10.0", "@tauri-apps/cli-win32-arm64-msvc": "2.10.0", "@tauri-apps/cli-win32-ia32-msvc": "2.10.0", "@tauri-apps/cli-win32-x64-msvc": "2.10.0" }, "bin": { "tauri": "tauri.js" } }, "sha512-ZwT0T+7bw4+DPCSWzmviwq5XbXlM0cNoleDKOYPFYqcZqeKY31KlpoMW/MOON/tOFBPgi31a2v3w9gliqwL2+Q=="], @@ -471,6 +505,8 @@ "@unocss/vite": ["@unocss/vite@66.6.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "@unocss/config": "66.6.2", "@unocss/core": "66.6.2", "@unocss/inspector": "66.6.2", "chokidar": "^5.0.0", "magic-string": "^0.30.21", "pathe": "^2.0.3", "tinyglobby": "^0.2.15", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0" } }, "sha512-HLmzDvde3BJ2C6iromHVE21lmNm4SmGSMlbSbFuLPOmWV11XhhHBkAOzytSxPBRG0dbuo+InSGUM14Ek2d6UDg=="], + "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], + "@vitest/expect": ["@vitest/expect@4.0.18", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.18", "@vitest/utils": "4.0.18", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ=="], "@vitest/mocker": ["@vitest/mocker@4.0.18", "", { "dependencies": { "@vitest/spy": "4.0.18", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ=="], @@ -489,6 +525,8 @@ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "ai": ["ai@6.0.105", "", { "dependencies": { "@ai-sdk/gateway": "3.0.59", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.16", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rp+exWtZS3J0DDvZIfetpKCIg7D3cCsvBPoFN3I67IDTs9aoBZDbpecoIkmNLT+U9RBkoEial3OGHRvme23HCw=="], + "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -505,6 +543,8 @@ "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + "bits-ui": ["bits-ui@2.16.2", "", { "dependencies": { "@floating-ui/core": "^1.7.1", "@floating-ui/dom": "^1.7.1", "esm-env": "^1.1.2", "runed": "^0.35.1", "svelte-toolbelt": "^0.10.6", "tabbable": "^6.2.0" }, "peerDependencies": { "@internationalized/date": "^3.8.1", "svelte": "^5.33.0" } }, "sha512-bgEpRRF7Ck9nRP1pbuKVxpaSMrz+8Pm0y+dmuvlkrSe+uUwIQECef29y6eslFHM6pCAubUh7STrsTLUUp8fzFQ=="], + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], @@ -579,6 +619,8 @@ "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], @@ -615,6 +657,8 @@ "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "iobuffer": ["iobuffer@5.4.0", "", {}, "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -635,6 +679,8 @@ "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "jspdf": ["jspdf@3.0.4", "", { "dependencies": { "@babel/runtime": "^7.28.4", "fast-png": "^6.2.0", "fflate": "^0.8.1" }, "optionalDependencies": { "canvg": "^3.0.11", "core-js": "^3.6.0", "dompurify": "^3.2.4", "html2canvas": "^1.0.0-rc.5" } }, "sha512-dc6oQ8y37rRcHn316s4ngz/nOjayLF/FFxBF4V9zamQKRqXxyiH1zagkCdktdWhtoQId5K20xt1lB90XzkB+hQ=="], @@ -751,7 +797,7 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="], + "runed": ["runed@0.35.1", "", { "dependencies": { "dequal": "^2.0.3", "esm-env": "^1.0.0", "lz-string": "^1.5.0" }, "peerDependencies": { "@sveltejs/kit": "^2.21.0", "svelte": "^5.7.0" }, "optionalPeers": ["@sveltejs/kit"] }, "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q=="], "s.color": ["s.color@0.0.15", "", {}, "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA=="], @@ -777,6 +823,8 @@ "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "suf-log": ["suf-log@2.5.3", "", { "dependencies": { "s.color": "0.0.15" } }, "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow=="], "svelte": ["svelte@5.53.6", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.3", "esm-env": "^1.2.1", "esrap": "^2.2.2", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-lP5DGF3oDDI9fhHcSpaBiJEkFLuS16h92DhM1L5K1lFm0WjOmUh1i2sNkBBk8rkxJRpob0dBE75jRfUzGZUOGA=="], @@ -787,10 +835,14 @@ "svelte-sonner": ["svelte-sonner@1.0.7", "", { "dependencies": { "runed": "^0.28.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-1EUFYmd7q/xfs2qCHwJzGPh9n5VJ3X6QjBN10fof2vxgy8fYE7kVfZ7uGnd7i6fQaWIr5KvXcwYXE/cmTEjk5A=="], + "svelte-toolbelt": ["svelte-toolbelt@0.10.6", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.35.1", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.30.2" } }, "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ=="], + "svg-pathdata": ["svg-pathdata@6.0.3", "", {}, "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw=="], "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + "tauri-plugin-android-fs-api": ["tauri-plugin-android-fs-api@24.2.2", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-w2OVkZExEBuepGBTI5Mlpad8GykbflFb3iWgc351WWuG3Wdndv1F6fT4zvGYdKJ9jDuhS7Rb/yhyCGkLiC1gQg=="], "text-segmentation": ["text-segmentation@1.0.3", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw=="], @@ -815,6 +867,8 @@ "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], @@ -879,6 +933,8 @@ "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "svelte-sonner/runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="], + "unocss-preset-scrollbar/@unocss/preset-mini": ["@unocss/preset-mini@65.5.0", "", { "dependencies": { "@unocss/core": "65.5.0", "@unocss/extractor-arbitrary-variants": "65.5.0", "@unocss/rule-utils": "65.5.0" } }, "sha512-oD2INmEgTOxmFsVceflv4Zs67vz9PRbpg3+CMsJLWgfX4UdQ1H4jZms72+g3N1hhXBvOFwvGvqGaMnrVMRk54g=="], "@unocss/cli/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], From 7857d3819e912ca2e95514be55b40bafc0603544 Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 19:41:55 +0530 Subject: [PATCH 07/18] perf(app): make dialog elements get removed from dom when not visible --- .../general/workspace_selector/index.svelte | 252 +++++++++--------- 1 file changed, 129 insertions(+), 123 deletions(-) diff --git a/apps/app/src/components/general/workspace_selector/index.svelte b/apps/app/src/components/general/workspace_selector/index.svelte index 46e7f40b..7ae9efe4 100644 --- a/apps/app/src/components/general/workspace_selector/index.svelte +++ b/apps/app/src/components/general/workspace_selector/index.svelte @@ -21,6 +21,7 @@ user_activity, update_workspace, } from './operations.svelte'; + import { fade } from 'svelte/transition'; onMount(async () => { const raw = (await user_activity.get('recent_paths')) ?? []; @@ -41,138 +42,143 @@ }); - -
+ -
+ ? 'top-12 right-4' + : 'top-2 right-2'} " + onclick={() => (workspace_picker_dialog_open_state.data = false)} + > + ✕ + + + +
+{/if} From 7271bbc9ca88b0cdc1f25dd8f29b52c99317d8f7 Mon Sep 17 00:00:00 2001 From: keshav-writes-code Date: Thu, 5 Feb 2026 20:39:34 +0530 Subject: [PATCH 08/18] feat(app)[lm]: improve model selection dialog layout and add source attribution --- .../editor/lm_config/list_models.svelte | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte b/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte index d4964366..0c3857f2 100644 --- a/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte +++ b/apps/app/src/components/general/app_settings/editor/lm_config/list_models.svelte @@ -1,4 +1,5 @@ -