diff --git a/eslint.config.mjs b/eslint.config.mjs
index 732ab0fd..8f9c5b64 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -6,7 +6,7 @@ import vue from 'eslint-plugin-vue'
export default [
...tseslint.configs.recommended,
...vue.configs['flat/recommended'],
- { ignores: ['**/node_modules/**', '**/dist/**'] },
+ { ignores: ['**/node_modules/**', '**/dist/**', 'packages/sdk/src/**'] },
{
files: ['packages/**/*.{js,jsx,ts,tsx}', 'agent/**/*.{js,jsx,ts,tsx}'],
languageOptions: {
diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts
index 2f674795..836c0519 100644
--- a/openapi-ts.config.ts
+++ b/openapi-ts.config.ts
@@ -16,5 +16,5 @@ export default defineConfig({
},
'@hey-api/client-fetch',
'@pinia/colada',
- ]
-});
\ No newline at end of file
+ ],
+})
\ No newline at end of file
diff --git a/packages/cli/package.json b/packages/cli/package.json
index f2d9894f..986bf916 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -18,7 +18,6 @@
},
"dependencies": {
"@elysiajs/eden": "^1.4.6",
- "@memoh/shared": "workspace:*",
"elysia": "latest",
"commander": "^12.1.0",
"chalk": "^5.4.1",
diff --git a/packages/shared/README.md b/packages/shared/README.md
deleted file mode 100644
index 6554adbe..00000000
--- a/packages/shared/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# @memoh/shared
diff --git a/packages/shared/package.json b/packages/shared/package.json
deleted file mode 100644
index 6e841596..00000000
--- a/packages/shared/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "@memoh/shared",
- "version": "1.0.0",
- "description": "",
- "exports": {
- ".": "./src/index.ts"
- },
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "packageManager": "pnpm@10.27.0"
-}
diff --git a/packages/shared/src/chatInfo.ts b/packages/shared/src/chatInfo.ts
deleted file mode 100644
index 3a11d13b..00000000
--- a/packages/shared/src/chatInfo.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface robot{
- description: string
- time: Date,
- id: string | number,
- type: string,
- action: 'robot',
- state:'thinking'|'generate'|'complete'
-}
-
-export interface user{
- description: string,
- time: Date,
- id: number | string,
- action:'user'
-}
\ No newline at end of file
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
deleted file mode 100644
index f23cc870..00000000
--- a/packages/shared/src/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from './model'
-export * from './schedule'
-export * from './platform'
-export * from './mcp'
-export * from './chatInfo'
diff --git a/packages/shared/src/mcp.ts b/packages/shared/src/mcp.ts
deleted file mode 100644
index da2993b1..00000000
--- a/packages/shared/src/mcp.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-export interface BaseMCPConnection {
- type: string
- name: string
-}
-
-export interface StdioMCPConnection extends BaseMCPConnection {
- type: 'stdio'
- command: string
- args: string[]
- env: Record
- cwd: string
-}
-
-export interface BaseHTTPMCPConnection extends BaseMCPConnection {
- url: string
- headers: Record
-}
-
-export interface HTTPMCPConnection extends BaseHTTPMCPConnection {
- type: 'http'
-}
-
-export interface SSEMCPConnection extends BaseHTTPMCPConnection {
- type: 'sse'
-}
-
-export type MCPConnection =
- | StdioMCPConnection
- | HTTPMCPConnection
- | SSEMCPConnection
-
-
-export interface MCPListItem{
- id: string;
- type: string;
- name: string;
- config: {
- cwd: string;
- env: Record;
- args: string[];
- type: string;
- command: string;
- };
- active: boolean;
- user: string;
- createdAt: string;
- updatedAt: string;
-}
\ No newline at end of file
diff --git a/packages/shared/src/model.ts b/packages/shared/src/model.ts
deleted file mode 100644
index 56b0c6fd..00000000
--- a/packages/shared/src/model.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-export enum ModelClientType {
- OPENAI = 'openai',
- ANTHROPIC = 'anthropic',
- GOOGLE = 'google',
-}
-
-export enum ModelType {
- CHAT = 'chat',
- EMBEDDING = 'embedding',
-}
-
-export interface BaseModel {
- /**
- * @description The unique identifier for the model
- * @example 'gpt-4o'
- */
- modelId: string
-
- /**
- * @description The base URL for the model
- * @example 'https://api.openai.com/v1'
- */
- baseUrl: string
-
- /**
- * @description The API key for the model
- * @example 'sk-1234567890'
- */
- apiKey: string
-
- /**
- * @description The client type for the model
- * @enum {ModelClientType}
- */
- clientType: ModelClientType
-
- /**
- * @description The display name for the model
- * @example 'GPT 4o'
- */
- name?: string
-
- /**
- * @description The model type
- * @enum {ModelType}
- * @default {ModelType.CHAT}
- */
- type?: ModelType
-}
-
-export interface EmbeddingModel extends BaseModel {
- type?: ModelType.EMBEDDING
-
- /**
- * @description The dimensions of the embedding
- * @example 1536
- */
- dimensions: number
-}
-
-export interface ChatModel extends BaseModel {
- type?: ModelType.CHAT
-}
-
-export type Model = EmbeddingModel | ChatModel
-
-
-// 表格当中model的类型
-export interface ModelList {
- apiKey: string,
- baseUrl: string,
- clientType: 'OpenAI' | 'Anthropic' | 'Google',
- modelId: string,
- name: string,
- type: 'chat' | 'embedding',
- id: string,
- defaultChatModel: boolean,
- defaultEmbeddingModel: boolean,
- defaultSummaryModel: boolean
-}
-
-export interface ProviderInfo{
- api_key: string;
- base_url: string;
- client_type: string;
- metadata: Record<'additionalProp1',object>;
- name: string;
-}
-
-export interface ModelInfo{
- dimensions:number
- is_multimodal:boolean
- input?: string[]
- llm_provider_id:string
- model_id:string
- name:string
- type: string
- enable_as?:string
-}
-
-export const clientType = ['openai', 'anthropic', 'google', 'ollama'] as const
diff --git a/packages/shared/src/platform.ts b/packages/shared/src/platform.ts
deleted file mode 100644
index bc371c73..00000000
--- a/packages/shared/src/platform.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export interface Platform {
- id: string
- name: string
- // endpoint: string
- config: Record
- active: boolean
-}
\ No newline at end of file
diff --git a/packages/shared/src/schedule.ts b/packages/shared/src/schedule.ts
deleted file mode 100644
index e08ca076..00000000
--- a/packages/shared/src/schedule.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export interface Schedule {
- id?: string
- pattern: string
- name: string
- description: string
- command: string
- maxCalls?: number | null
-}
\ No newline at end of file
diff --git a/packages/web/demo.md b/packages/web/demo.md
deleted file mode 100644
index 163438bb..00000000
--- a/packages/web/demo.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Markdown 语法测试文档
-
-## 1. 标题层级
-### 一级标题
-#### 二级标题
-##### 三级标题
-###### 六级标题
-
-## 2. 文本格式
-**粗体文本**
-*斜体文本*
-~~删除线文本~~
-`代码片段`
-
-> 引用文本
-> 可以多行
-
-## 3. 列表
-
-### 无序列表
-- 项目一
-- 项目二
- - 子项目
-- 项目三
-
-### 有序列表
-1. 第一步
-2. 第二步
-3. 第三步
-
-## 4. 链接与图片
-[百度](https://www.baidu.com)
-
-
-## 5. 表格
-| 姓名 | 年龄 | 职业 |
-|------|------|------|
-| 张三 | 25 | 开发 |
-| 李四 | 30 | 测试 |
-
-## 6. 代码块
-```python
-def hello_world():
- print("Hello, World!")
\ No newline at end of file
diff --git a/packages/web/package.json b/packages/web/package.json
index 3fe77d4a..626e4107 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -9,7 +9,6 @@
"start": "vite preview"
},
"dependencies": {
- "@memoh/shared": "workspace:*",
"@memoh/ui": "workspace:*",
"@memoh/sdk": "workspace:*",
"@pinia/colada": "^0.21.1",
diff --git a/packages/web/src/components/add-provider/index.vue b/packages/web/src/components/add-provider/index.vue
index e198257c..f304eba9 100644
--- a/packages/web/src/components/add-provider/index.vue
+++ b/packages/web/src/components/add-provider/index.vue
@@ -89,7 +89,7 @@
@@ -152,7 +152,7 @@ import {
import { toTypedSchema } from '@vee-validate/zod'
import z from 'zod'
import { useForm } from 'vee-validate'
-import { clientType } from '@memoh/shared'
+import { CLIENT_TYPES } from '@/composables/api/useProviders'
import { useCreateProvider } from '@/composables/api/useProviders'
const open = defineModel('open')
diff --git a/packages/web/src/components/chat-list/robot-chat/index.vue b/packages/web/src/components/chat-list/assistant-chat/index.vue
similarity index 60%
rename from packages/web/src/components/chat-list/robot-chat/index.vue
rename to packages/web/src/components/chat-list/assistant-chat/index.vue
index 4f9f35a3..b9339e30 100644
--- a/packages/web/src/components/chat-list/robot-chat/index.vue
+++ b/packages/web/src/components/chat-list/assistant-chat/index.vue
@@ -4,14 +4,11 @@
-
- {{ robotSay.type }}
-
-
+
@@ -20,14 +17,22 @@
diff --git a/packages/web/src/components/chat-list/index.vue b/packages/web/src/components/chat-list/index.vue
index 1f6defc2..03a4ba82 100644
--- a/packages/web/src/components/chat-list/index.vue
+++ b/packages/web/src/components/chat-list/index.vue
@@ -4,16 +4,16 @@
class="flex flex-col gap-4"
>
-
@@ -21,14 +21,15 @@
diff --git a/packages/web/src/components/chat-list/user-chat/index.vue b/packages/web/src/components/chat-list/user-chat/index.vue
index e8b24046..8e8a3512 100644
--- a/packages/web/src/components/chat-list/user-chat/index.vue
+++ b/packages/web/src/components/chat-list/user-chat/index.vue
@@ -4,14 +4,21 @@
class="leading-7 not-first:mt-6 max-w-[90%] ml-auto text-muted-foreground bg-[#F9F9F9] p-4 rounded-xl rounded-tr-none break-all dark:bg-[#1C1917]
"
>
- {{ userSay.description }}
+ {{ textContent }}
\ No newline at end of file
+
+const textContent = computed(() => {
+ const block = props.message.blocks.find(b => b.type === 'text')
+ return block?.type === 'text' ? block.content : ''
+})
+
diff --git a/packages/web/src/components/create-mcp/index.vue b/packages/web/src/components/create-mcp/index.vue
index e2e72d63..7fe96a2e 100644
--- a/packages/web/src/components/create-mcp/index.vue
+++ b/packages/web/src/components/create-mcp/index.vue
@@ -260,7 +260,7 @@ import z from 'zod'
import { toTypedSchema } from '@vee-validate/zod'
import { useForm } from 'vee-validate'
import { ref, inject, watch } from 'vue'
-import { type MCPListItem as MCPType } from '@memoh/shared'
+import { type MCPListItem as MCPType } from '@/composables/api/useMcp'
import { useKeyValueTags } from '@/composables/useKeyValueTags'
import { useCreateOrUpdateMcp } from '@/composables/api/useMcp'
diff --git a/packages/web/src/components/create-model/index.vue b/packages/web/src/components/create-model/index.vue
index 3b48ba7c..81ef6681 100644
--- a/packages/web/src/components/create-model/index.vue
+++ b/packages/web/src/components/create-model/index.vue
@@ -172,7 +172,7 @@ import { useForm } from 'vee-validate'
import { inject, computed, watch, nextTick, type Ref, ref } from 'vue'
import { toTypedSchema } from '@vee-validate/zod'
import z from 'zod'
-import { type ModelInfo } from '@memoh/shared'
+import { type ModelInfo } from '@/composables/api/useModels'
import { useCreateModel, useUpdateModel } from '@/composables/api/useModels'
const formSchema = toTypedSchema(z.object({
diff --git a/packages/web/src/composables/api/useMcp.ts b/packages/web/src/composables/api/useMcp.ts
index fe09a4ff..5ba29910 100644
--- a/packages/web/src/composables/api/useMcp.ts
+++ b/packages/web/src/composables/api/useMcp.ts
@@ -1,9 +1,24 @@
import { fetchApi } from '@/utils/request'
import { useQuery, useMutation, useQueryCache } from '@pinia/colada'
-import { type MCPListItem } from '@memoh/shared'
-
// ---- Types ----
+export interface MCPListItem {
+ id: string
+ type: string
+ name: string
+ config: {
+ cwd: string
+ env: Record
+ args: string[]
+ type: string
+ command: string
+ }
+ active: boolean
+ user: string
+ createdAt: string
+ updatedAt: string
+}
+
export interface McpListResponse {
items: MCPListItem[]
}
diff --git a/packages/web/src/composables/api/useModels.ts b/packages/web/src/composables/api/useModels.ts
index 27b459fd..d40f84fd 100644
--- a/packages/web/src/composables/api/useModels.ts
+++ b/packages/web/src/composables/api/useModels.ts
@@ -1,10 +1,20 @@
import { fetchApi } from '@/utils/request'
import { useQuery, useMutation, useQueryCache } from '@pinia/colada'
-import { type ModelInfo } from '@memoh/shared'
import type { Ref } from 'vue'
// ---- Types ----
+export interface ModelInfo {
+ dimensions: number
+ is_multimodal: boolean
+ input?: string[]
+ llm_provider_id: string
+ model_id: string
+ name: string
+ type: string
+ enable_as?: string
+}
+
export interface CreateModelRequest {
model_id: string
type: string
diff --git a/packages/web/src/composables/api/useProviders.ts b/packages/web/src/composables/api/useProviders.ts
index a1f3f547..63a854f5 100644
--- a/packages/web/src/composables/api/useProviders.ts
+++ b/packages/web/src/composables/api/useProviders.ts
@@ -1,10 +1,19 @@
import { fetchApi } from '@/utils/request'
import { useQuery, useMutation, useQueryCache } from '@pinia/colada'
-import { type ProviderInfo } from '@memoh/shared'
import type { Ref } from 'vue'
// ---- Types ----
+export interface ProviderInfo {
+ api_key: string
+ base_url: string
+ client_type: string
+ metadata: Record<'additionalProp1', object>
+ name: string
+}
+
+export const CLIENT_TYPES = ['openai', 'anthropic', 'google', 'ollama'] as const
+
export type ProviderWithId = ProviderInfo & { id: string }
export interface CreateProviderRequest {
diff --git a/packages/web/src/pages/bots/components/model-select.vue b/packages/web/src/pages/bots/components/model-select.vue
index 2210c6ee..2164390d 100644
--- a/packages/web/src/pages/bots/components/model-select.vue
+++ b/packages/web/src/pages/bots/components/model-select.vue
@@ -89,7 +89,7 @@ import {
ScrollArea,
} from '@memoh/ui'
import { computed, ref, watch } from 'vue'
-import type { ModelInfo } from '@memoh/shared'
+import type { ModelInfo } from '@/composables/api/useModels'
import type { ProviderWithId } from '@/composables/api/useProviders'
const props = defineProps<{
diff --git a/packages/web/src/pages/mcp/index.vue b/packages/web/src/pages/mcp/index.vue
index b50d7d17..c5ef896f 100644
--- a/packages/web/src/pages/mcp/index.vue
+++ b/packages/web/src/pages/mcp/index.vue
@@ -17,7 +17,7 @@ import {
Badge,
Button
} from '@memoh/ui'
-import { type MCPListItem as MCPType } from '@memoh/shared'
+import { type MCPListItem as MCPType } from '@/composables/api/useMcp'
import { i18nRef } from '@/i18n'
import { useMcpList, useDeleteMcp } from '@/composables/api/useMcp'
diff --git a/packages/web/src/pages/models/components/model-item.vue b/packages/web/src/pages/models/components/model-item.vue
index c607f56d..b0077bad 100644
--- a/packages/web/src/pages/models/components/model-item.vue
+++ b/packages/web/src/pages/models/components/model-item.vue
@@ -43,7 +43,7 @@ import {
Button,
} from '@memoh/ui'
import ConfirmPopover from '@/components/confirm-popover/index.vue'
-import { type ModelInfo } from '@memoh/shared'
+import { type ModelInfo } from '@/composables/api/useModels'
defineProps<{
model: ModelInfo
diff --git a/packages/web/src/pages/models/components/model-list.vue b/packages/web/src/pages/models/components/model-list.vue
index 9208e6cf..23cbddac 100644
--- a/packages/web/src/pages/models/components/model-list.vue
+++ b/packages/web/src/pages/models/components/model-list.vue
@@ -51,7 +51,7 @@ import {
} from '@memoh/ui'
import CreateModel from '@/components/create-model/index.vue'
import ModelItem from './model-item.vue'
-import { type ModelInfo } from '@memoh/shared'
+import { type ModelInfo } from '@/composables/api/useModels'
defineProps<{
providerId: string | undefined
diff --git a/packages/web/src/pages/models/components/provider-form.vue b/packages/web/src/pages/models/components/provider-form.vue
index f43f7aa8..b316bc8a 100644
--- a/packages/web/src/pages/models/components/provider-form.vue
+++ b/packages/web/src/pages/models/components/provider-form.vue
@@ -100,7 +100,7 @@ import { computed, watch } from 'vue'
import { toTypedSchema } from '@vee-validate/zod'
import z from 'zod'
import { useForm } from 'vee-validate'
-import { type ProviderInfo } from '@memoh/shared'
+import { type ProviderInfo } from '@/composables/api/useProviders'
const props = defineProps<{
provider: Partial | undefined
diff --git a/packages/web/src/pages/models/index.vue b/packages/web/src/pages/models/index.vue
index 85174575..7a568683 100644
--- a/packages/web/src/pages/models/index.vue
+++ b/packages/web/src/pages/models/index.vue
@@ -28,9 +28,8 @@ import {
EmptyMedia,
EmptyTitle,
} from '@memoh/ui'
-import { type ProviderInfo } from '@memoh/shared'
+import { type ProviderInfo, CLIENT_TYPES } from '@/composables/api/useProviders'
import AddProvider from '@/components/add-provider/index.vue'
-import { clientType } from '@memoh/shared'
import { useProviderList } from '@/composables/api/useProviders'
const filterProvider = ref('')
@@ -141,7 +140,7 @@ const openStatus = reactive({
diff --git a/packages/web/src/pages/models/model-setting.vue b/packages/web/src/pages/models/model-setting.vue
index 992f06ad..733d6738 100644
--- a/packages/web/src/pages/models/model-setting.vue
+++ b/packages/web/src/pages/models/model-setting.vue
@@ -32,7 +32,8 @@ import { Separator } from '@memoh/ui'
import ProviderForm from './components/provider-form.vue'
import ModelList from './components/model-list.vue'
import { computed, inject, provide, reactive, ref, toRef, watch } from 'vue'
-import { type ProviderInfo, type ModelInfo } from '@memoh/shared'
+import { type ModelInfo } from '@/composables/api/useModels'
+import { type ProviderInfo } from '@/composables/api/useProviders'
import {
useUpdateProvider,
useDeleteProvider,
diff --git a/packages/web/src/types/index.ts b/packages/web/src/types/index.ts
deleted file mode 100644
index e69de29b..00000000
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 188f729d..45b4c24e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,9 +109,6 @@ importers:
'@elysiajs/eden':
specifier: ^1.4.6
version: 1.4.6(elysia@1.4.22(@sinclair/typebox@0.34.47)(@types/bun@1.3.8)(exact-mirror@0.2.6(@sinclair/typebox@0.34.47))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))
- '@memoh/shared':
- specifier: workspace:*
- version: link:../shared
chalk:
specifier: ^5.4.1
version: 5.6.2
@@ -149,8 +146,6 @@ importers:
packages/sdk: {}
- packages/shared: {}
-
packages/ui:
dependencies:
'@tailwindcss/vite':
@@ -259,9 +254,6 @@ importers:
'@memoh/sdk':
specifier: workspace:*
version: link:../sdk
- '@memoh/shared':
- specifier: workspace:*
- version: link:../shared
'@memoh/ui':
specifier: workspace:*
version: link:../ui