diff --git a/.vscode/settings.json b/.vscode/settings.json
index d0746e5f..ee2a1804 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,9 +1,14 @@
{
"editor.insertSpaces": true,
"editor.detectIndentation": false,
-
+ "editor.formatOnSave": false,
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit",
+ "source.organizeImports": "never"
+ },
+
"editor.tabSize": 2,
-
+
"[typescript]": {
"editor.tabSize": 2,
"editor.insertSpaces": true
@@ -33,4 +38,3 @@
"editor.insertSpaces": true
}
}
-
diff --git a/packages/ui/components.json b/packages/ui/components.json
new file mode 100644
index 00000000..56f749c0
--- /dev/null
+++ b/packages/ui/components.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://shadcn-vue.com/schema.json",
+ "style": "new-york",
+ "typescript": true,
+ "tailwind": {
+ "config": "",
+ "css": "src/style.css",
+ "baseColor": "neutral",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "composables": "@/composables",
+ "utils": "@/lib/utils",
+ "ui": "@/components",
+ "lib": "@/lib"
+ },
+ "iconLibrary": "lucide"
+}
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 73d22b52..352848db 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -4,7 +4,8 @@
"private": true,
"type": "module",
"exports": {
- ".": "./src/index.ts"
+ ".": "./src/index.ts",
+ "./style.css": "./src/style.css"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
diff --git a/packages/ui/src/style.css b/packages/ui/src/style.css
index 237f740a..5a7873ab 100644
--- a/packages/ui/src/style.css
+++ b/packages/ui/src/style.css
@@ -1,144 +1,2 @@
@import "tailwindcss";
@import "tw-animate-css";
-
-@custom-variant dark (&:is(.dark *));
-
-@theme inline {
- --radius-sm: calc(var(--radius) - 4px);
- --radius-md: calc(var(--radius) - 2px);
- --radius-lg: var(--radius);
- --radius-xl: calc(var(--radius) + 4px);
- --color-background: var(--background);
- --color-foreground: var(--foreground);
- --color-card: var(--card);
- --color-card-foreground: var(--card-foreground);
- --color-popover: var(--popover);
- --color-popover-foreground: var(--popover-foreground);
- --color-primary: var(--primary);
- --color-primary-foreground: var(--primary-foreground);
- --color-secondary: var(--secondary);
- --color-secondary-foreground: var(--secondary-foreground);
- --color-muted: var(--muted);
- --color-muted-foreground: var(--muted-foreground);
- --color-accent: var(--accent);
- --color-accent-foreground: var(--accent-foreground);
- --color-destructive: var(--destructive);
- --color-border: var(--border);
- --color-input: var(--input);
- --color-ring: var(--ring);
- --color-chart-1: var(--chart-1);
- --color-chart-2: var(--chart-2);
- --color-chart-3: var(--chart-3);
- --color-chart-4: var(--chart-4);
- --color-chart-5: var(--chart-5);
- --color-sidebar: var(--sidebar);
- --color-sidebar-foreground: var(--sidebar-foreground);
- --color-sidebar-primary: var(--sidebar-primary);
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
- --color-sidebar-accent: var(--sidebar-accent);
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
- --color-sidebar-border: var(--sidebar-border);
- --color-sidebar-ring: var(--sidebar-ring);
-}
-
-:root {
- --radius: 1rem;
- /* Base colors - gray-50 / gray-900 */
- --background: oklch(0.985 0 0); /* gray-50 */
- --foreground: oklch(0.224 0 0); /* gray-900 */
- /* Card - white with gray border */
- --card: oklch(1 0 0); /* white */
- --card-foreground: oklch(0.224 0 0); /* gray-900 */
- /* Popover - white */
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.224 0 0);
- /* Primary - blue-500 */
- --primary: oklch(0.572 0.188 255.29); /* blue-500 */
- --primary-foreground: oklch(1 0 0); /* white */
- /* Secondary - gray-100 */
- --secondary: oklch(0.965 0 0); /* gray-100 */
- --secondary-foreground: oklch(0.224 0 0); /* gray-900 */
- /* Muted - gray-100 / gray-500 */
- --muted: oklch(0.965 0 0); /* gray-100 */
- --muted-foreground: oklch(0.539 0 0); /* gray-500 */
- /* Accent - gray-100 */
- --accent: oklch(0.965 0 0); /* gray-100 */
- --accent-foreground: oklch(0.224 0 0); /* gray-900 */
- /* Destructive - red-500 */
- --destructive: oklch(0.577 0.245 27.325);
- /* Border - gray-200 */
- --border: oklch(0.922 0 0); /* gray-200 */
- --input: oklch(0.922 0 0); /* gray-200 */
- /* Ring - blue-500 */
- --ring: oklch(0.572 0.188 255.29); /* blue-500 */
- /* Charts */
- --chart-1: oklch(0.646 0.222 41.116);
- --chart-2: oklch(0.6 0.118 184.704);
- --chart-3: oklch(0.398 0.07 227.392);
- --chart-4: oklch(0.828 0.189 84.429);
- --chart-5: oklch(0.769 0.188 70.08);
- /* Sidebar - white */
- --sidebar: oklch(1 0 0);
- --sidebar-foreground: oklch(0.224 0 0);
- --sidebar-primary: oklch(0.572 0.188 255.29); /* blue-500 */
- --sidebar-primary-foreground: oklch(1 0 0);
- --sidebar-accent: oklch(0.965 0 0); /* gray-100 */
- --sidebar-accent-foreground: oklch(0.224 0 0);
- --sidebar-border: oklch(0.922 0 0); /* gray-200 */
- --sidebar-ring: oklch(0.572 0.188 255.29); /* blue-500 */
-}
-
-.dark {
- /* Base colors - gray-800 / gray-100 */
- --background: oklch(0.298 0 0); /* gray-800 */
- --foreground: oklch(0.965 0 0); /* gray-100 */
- /* Card - gray-900 with gray-700 border */
- --card: oklch(0.224 0 0); /* gray-900 */
- --card-foreground: oklch(0.965 0 0); /* gray-100 */
- /* Popover - gray-900 */
- --popover: oklch(0.224 0 0);
- --popover-foreground: oklch(0.965 0 0);
- /* Primary - blue-500 */
- --primary: oklch(0.572 0.188 255.29); /* blue-500 */
- --primary-foreground: oklch(1 0 0); /* white */
- /* Secondary - gray-700 */
- --secondary: oklch(0.427 0 0); /* gray-700 */
- --secondary-foreground: oklch(0.965 0 0); /* gray-100 */
- /* Muted - gray-700 / gray-400 */
- --muted: oklch(0.427 0 0); /* gray-700 */
- --muted-foreground: oklch(0.642 0 0); /* gray-400 */
- /* Accent - gray-700 */
- --accent: oklch(0.427 0 0); /* gray-700 */
- --accent-foreground: oklch(0.965 0 0); /* gray-100 */
- /* Destructive - red-500 */
- --destructive: oklch(0.704 0.191 22.216);
- /* Border - gray-700 */
- --border: oklch(0.427 0 0); /* gray-700 */
- --input: oklch(0.427 0 0); /* gray-700 */
- /* Ring - blue-500 */
- --ring: oklch(0.572 0.188 255.29); /* blue-500 */
- /* Charts */
- --chart-1: oklch(0.488 0.243 264.376);
- --chart-2: oklch(0.696 0.17 162.48);
- --chart-3: oklch(0.769 0.188 70.08);
- --chart-4: oklch(0.627 0.265 303.9);
- --chart-5: oklch(0.645 0.246 16.439);
- /* Sidebar - gray-900 */
- --sidebar: oklch(0.224 0 0);
- --sidebar-foreground: oklch(0.965 0 0);
- --sidebar-primary: oklch(0.572 0.188 255.29); /* blue-500 */
- --sidebar-primary-foreground: oklch(1 0 0);
- --sidebar-accent: oklch(0.427 0 0); /* gray-700 */
- --sidebar-accent-foreground: oklch(0.965 0 0);
- --sidebar-border: oklch(0.427 0 0); /* gray-700 */
- --sidebar-ring: oklch(0.572 0.188 255.29); /* blue-500 */
-}
-
-@layer base {
- * {
- @apply border-border outline-ring/50;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
\ No newline at end of file
diff --git a/packages/web/package.json b/packages/web/package.json
index 65992cf6..e5555319 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -9,6 +9,8 @@
"start": "vite preview"
},
"dependencies": {
+ "@jamescoyle/vue-icon": "^0.1.2",
+ "@mdi/js": "^7.4.47",
"@memoh/shared": "workspace:*",
"@memoh/ui": "workspace:*",
"@tailwindcss/vite": "^4.1.18",
diff --git a/packages/web/public/logo.png b/packages/web/public/logo.png
new file mode 100644
index 00000000..7d6543cb
Binary files /dev/null and b/packages/web/public/logo.png differ
diff --git a/packages/web/src/App.vue b/packages/web/src/App.vue
index 31538144..a9f3c2c5 100644
--- a/packages/web/src/App.vue
+++ b/packages/web/src/App.vue
@@ -1,10 +1,8 @@
- Hello
-
\ No newline at end of file
diff --git a/packages/web/src/components/MainContainer/index.vue b/packages/web/src/components/MainContainer/index.vue
new file mode 100644
index 00000000..a9fec0ce
--- /dev/null
+++ b/packages/web/src/components/MainContainer/index.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/web/src/components/Sidebar/index.vue b/packages/web/src/components/Sidebar/index.vue
new file mode 100644
index 00000000..b35b2818
--- /dev/null
+++ b/packages/web/src/components/Sidebar/index.vue
@@ -0,0 +1,103 @@
+
+
+
+
\ No newline at end of file
diff --git a/packages/web/src/layout/mainLayout/index.vue b/packages/web/src/layout/mainLayout/index.vue
new file mode 100644
index 00000000..a55a2a25
--- /dev/null
+++ b/packages/web/src/layout/mainLayout/index.vue
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/web/src/main.ts b/packages/web/src/main.ts
index 1f9340e4..23d5578d 100644
--- a/packages/web/src/main.ts
+++ b/packages/web/src/main.ts
@@ -4,7 +4,6 @@ import App from './App.vue'
import router from './router'
import { createPinia } from 'pinia'
import i18n from './i18n'
-import '@memoh/ui/style.css'
createApp(App)
.use(createPinia())
diff --git a/packages/web/src/pages/chat/index.vue b/packages/web/src/pages/chat/index.vue
new file mode 100644
index 00000000..96f08f48
--- /dev/null
+++ b/packages/web/src/pages/chat/index.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/web/src/pages/login/index.vue b/packages/web/src/pages/login/index.vue
new file mode 100644
index 00000000..70dbff79
--- /dev/null
+++ b/packages/web/src/pages/login/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+ Memoh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/web/src/router.ts b/packages/web/src/router.ts
index 6ee43e8c..ae5e45f1 100644
--- a/packages/web/src/router.ts
+++ b/packages/web/src/router.ts
@@ -1,8 +1,35 @@
import { createRouter, createWebHistory } from 'vue-router'
+
+const routes = [
+ {
+ path: '/',
+ redirect: '/login'
+ },
+ {
+ name: 'Login',
+ path: '/login',
+ component: () => import('@/pages/login/index.vue')
+ }, {
+ name: 'Chat',
+ path: '/chat',
+ component: () => import('@/pages/chat/index.vue'),
+ }
+
+]
+
+
const router = createRouter({
history: createWebHistory(),
- routes: [],
+ routes,
+})
+router.beforeEach((to) => {
+ const token = localStorage.getItem('token')
+ if (to.fullPath !== '/login') {
+ return token ? true : { name: 'Login' }
+ } else {
+ return token ? { name: 'Chat' } : true
+ }
})
export default router
\ No newline at end of file
diff --git a/packages/web/src/style.css b/packages/web/src/style.css
index bc69e207..4d09ef84 100644
--- a/packages/web/src/style.css
+++ b/packages/web/src/style.css
@@ -1,2 +1,122 @@
@import "tailwindcss";
-@import "tw-animate-css";
\ No newline at end of file
+@import "tw-animate-css";
+@custom-variant dark (&:is(.dark *));
+
+:root {
+ --radius: 0.65rem;
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.141 0.005 285.823);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.141 0.005 285.823);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.141 0.005 285.823);
+ --primary: oklch(0.488 0.243 264.376);
+ --primary-foreground: oklch(0.97 0.014 254.604);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --muted: oklch(0.967 0.001 286.375);
+ --muted-foreground: oklch(0.552 0.016 285.938);
+ --accent: oklch(0.967 0.001 286.375);
+ --accent-foreground: oklch(0.21 0.006 285.885);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.92 0.004 286.32);
+ --input: oklch(0.92 0.004 286.32);
+ --ring: oklch(0.708 0 0);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
+ --sidebar-primary: oklch(0.546 0.245 262.881);
+ --sidebar-primary-foreground: oklch(0.97 0.014 254.604);
+ --sidebar-accent: oklch(0.967 0.001 286.375);
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
+ --sidebar-border: oklch(0.92 0.004 286.32);
+ --sidebar-ring: oklch(0.708 0 0);
+}
+
+.dark {
+ --background: oklch(0.141 0.005 285.823);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.21 0.006 285.885);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.21 0.006 285.885);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.488 0.243 264.376);
+ --primary-foreground: oklch(0.97 0.014 254.604);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.274 0.006 286.033);
+ --muted-foreground: oklch(0.705 0.015 286.067);
+ --accent: oklch(0.274 0.006 286.033);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.556 0 0);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --sidebar: oklch(0.21 0.006 285.885);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.623 0.214 259.815);
+ --sidebar-primary-foreground: oklch(0.97 0.014 254.604);
+ --sidebar-accent: oklch(0.274 0.006 286.033);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.439 0 0);
+}
+
+@theme inline {
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-destructive-foreground: var(--destructive-foreground);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+}
+
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
+
+@source "../../ui/src";
diff --git a/packages/web/tsconfig.app.json b/packages/web/tsconfig.app.json
index 8d16e425..de5b78af 100644
--- a/packages/web/tsconfig.app.json
+++ b/packages/web/tsconfig.app.json
@@ -12,5 +12,5 @@
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
- "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
}
diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts
index 5083dfe9..d992b7fe 100644
--- a/packages/web/vite.config.ts
+++ b/packages/web/vite.config.ts
@@ -25,6 +25,7 @@ export default defineConfig({
resolve: {
alias: {
'#': fileURLToPath(new URL('../ui/src', import.meta.url)),
+ '@': fileURLToPath(new URL('./src', import.meta.url))
},
},
})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f96928d6..b545fa1b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -206,6 +206,12 @@ importers:
packages/web:
dependencies:
+ '@jamescoyle/vue-icon':
+ specifier: ^0.1.2
+ version: 0.1.2
+ '@mdi/js':
+ specifier: ^7.4.47
+ version: 7.4.47
'@memoh/shared':
specifier: workspace:*
version: link:../shared
@@ -1390,6 +1396,25 @@ packages:
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'}
+
+ '@jamescoyle/vue-icon@0.1.2':
+ resolution: {integrity: sha512-KFrImXx5TKIi6iQXlnyLEBl4rNosNKbTeRnr70ucTdUaciVmd9qK9d/pZAaKt1Ob/8xNnX2GMp8LisyHdKtEgw==}
+
+ '@jest/expect-utils@29.7.0':
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -1406,6 +1431,13 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@langchain/core@0.3.80':
+ resolution: {integrity: sha512-vcJDV2vk1AlCwSh3aBm/urQ1ZrlXFFBocv11bz/NBUfLWD5/UDNMzwPdaAd2dKvNmTWa9FM2lirLU3+JCf4cRA==}
+ engines: {node: '>=18'}
+
+ '@mdi/js@7.4.47':
+ resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==}
+
'@microsoft/api-extractor-model@7.32.2':
resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==}
@@ -4914,6 +4946,34 @@ snapshots:
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
+
+ '@jamescoyle/vue-icon@0.1.2': {}
+
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 24.10.4
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -4933,6 +4993,28 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@4.3.5))':
+ dependencies:
+ '@cfworker/json-schema': 4.1.1
+ ansi-styles: 5.2.0
+ camelcase: 6.3.0
+ decamelize: 1.2.0
+ js-tiktoken: 1.0.21
+ langsmith: 0.3.87(@opentelemetry/api@1.9.0)(openai@4.104.0(encoding@0.1.13)(ws@8.19.0)(zod@4.3.5))
+ mustache: 4.2.0
+ p-queue: 6.6.2
+ p-retry: 4.6.2
+ uuid: 10.0.0
+ zod: 3.25.76
+ zod-to-json-schema: 3.25.1(zod@3.25.76)
+ transitivePeerDependencies:
+ - '@opentelemetry/api'
+ - '@opentelemetry/exporter-trace-otlp-proto'
+ - '@opentelemetry/sdk-trace-base'
+ - openai
+
+ '@mdi/js@7.4.47': {}
+
'@microsoft/api-extractor-model@7.32.2(@types/node@24.10.4)':
dependencies:
'@microsoft/tsdoc': 0.16.0