mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 18:50:56 +08:00
commit7c8bf8b591Author: defi-failure <159208748+defi-failure@users.noreply.github.com> Date: Thu Nov 6 17:59:38 2025 +0800 fix: add token usage to agent session message commitff8e5ddd27Author: defi-failure <159208748+defi-failure@users.noreply.github.com> Date: Thu Nov 6 17:25:54 2025 +0800 fix: close prompt stream when finish or error chunk received commit530e6516fdAuthor: defi-failure <159208748+defi-failure@users.noreply.github.com> Date: Thu Nov 6 17:19:53 2025 +0800 chore: code cleanup commitab21c0d56cAuthor: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 16:13:36 2025 +0800 feat(SessionItem): implement auto-rename feature for sessions and improve context menu handling - Added a new context menu option to automatically rename sessions based on topics. - Introduced useDeferredValue for managing target session state. - Updated imports to include necessary thunk actions and components. - Enhanced API service to handle optional assistant model in message summary fetching. - Exported renameAgentSessionIfNeeded function for better accessibility in the store. commit21ea8ccf37Merge:ab7b207d2816a92c60Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 15:29:09 2025 +0800 Merge branch 'main' of github.com:CherryHQ/cherry-studio into refactor/heroui-antd # Conflicts: # src/renderer/src/pages/home/Tabs/components/AddButton.tsx # src/renderer/src/pages/home/Tabs/components/SessionItem.tsx # src/renderer/src/pages/home/Tabs/components/Sessions.tsx # src/renderer/src/pages/home/Tabs/components/Topics.tsx # src/renderer/src/pages/paintings/NewApiPage.tsx commitab7b207d29Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 14:50:05 2025 +0800 refactor: streamline event listener management in useAppInit and update ToolPermissionRequestCard styling commit3834c5d402Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 14:21:25 2025 +0800 refactor: enhance API server state management and remove unused initialization in useAppInit commita64b94a41fAuthor: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 13:21:58 2025 +0800 refactor: update OpenAPI documentation paths to include subdirectories for better route coverage commit2e0ff28505Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 12:26:09 2025 +0800 refactor: center align columns in InstalledPluginsList and set AntTable size to small commit84bf94e2ffAuthor: defi-failure <159208748+defi-failure@users.noreply.github.com> Date: Thu Nov 6 12:06:09 2025 +0800 refactor: align create agent model selection with edit agent commit84f2281506Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 11:29:32 2025 +0800 refactor: integrate API server functionality into various components and enhance user notifications commit4e01210df4Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 10:56:38 2025 +0800 refactor: replace ContextMenu with Dropdown in AgentItem and SessionItem components for improved context menu handling commit9df38c7e83Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 10:27:30 2025 +0800 refactor: update AddButton styling to use CSS variable for border radius and remove unused settings hook commit251c269ab3Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 10:11:21 2025 +0800 refactor: remove unused error handling alerts from AssistantsTab component commit9b9640d8d1Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 10:07:26 2025 +0800 refactor: adjust margin styling for UnifiedAddButton component commitedd6b11aa7Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 10:04:01 2025 +0800 refactor: update AddButton styling based on topic position and clean up CSS for root element commit1c0de625d8Author: kangfenmao <kangfenmao@qq.com> Date: Thu Nov 6 09:56:42 2025 +0800 fix: update assistant addition messages for multiple languages commit0ea4dd4e3aAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 21:01:24 2025 +0800 fix: init message api err commitf3bbd4ed44Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 20:42:49 2025 +0800 refactor: remove heroui commitd01609fc36Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 19:08:41 2025 +0800 refactor: migrate heroui/toast to antd message commitf4b14dfc10Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 18:51:29 2025 +0800 refactor: enhance Sessions component layout with styled Scrollbar and adjust UnifiedAddButton margins commit6ae5f69163Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 18:44:13 2025 +0800 refactor: update PluginSettings and ToolingSettings for improved layout and functionality commitfcb0020787Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 18:29:52 2025 +0800 wip commit02265f369eAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 17:26:39 2025 +0800 fix: error block related commit5e22d9d36fAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 17:14:25 2025 +0800 fix: note head nav related commit3f52b7766aAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 16:45:49 2025 +0800 chore: remove dead code commit484622f12bAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 16:43:12 2025 +0800 chore: remove dead code commit2bceb302e0Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 15:33:25 2025 +0800 fix: tool setting related commit5c455f25ebAuthor: dev <verc20.dev@proton.me> Date: Wed Nov 5 13:59:33 2025 +0800 chore: remove dead code commitd1d1dbc046Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 13:51:41 2025 +0800 fix: tool permission card related commitbf4ec23ef7Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 12:22:53 2025 +0800 fix: remove button and modal renaming commit47db5baeb1Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 12:20:36 2025 +0800 fix: plugin setting related commit81fecce552Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 12:16:42 2025 +0800 refactor: enhance ChatNavbarContent structure by replacing Breadcrumbs with custom layout and adding separators commitfc64b6c611Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 12:10:48 2025 +0800 refactor: simplify MessageAgentTools component structure by removing unnecessary wrapper div commite0f383a050Author: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 12:08:32 2025 +0800 fix: update button classes in AddAssistantOrAgentPopup for improved cursor behavior commit720284262fAuthor: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 12:06:58 2025 +0800 refactor: update AgentModal to use TopView for improved modal management and enhance form structure commitb334a2c5beAuthor: kangfenmao <kangfenmao@qq.com> Date: Wed Nov 5 11:40:47 2025 +0800 refactor: replace UpdateDialog with UpdateDialogPopup for better modal handling commit468aebd632Author: dev <verc20.dev@proton.me> Date: Wed Nov 5 10:56:40 2025 +0800 fix: plugins related wip commitbd4a979f62Author: dev <verc20.dev@proton.me> Date: Tue Nov 4 17:46:14 2025 +0800 fix: add button related commitb3316a4dc8Author: dev <verc20.dev@proton.me> Date: Tue Nov 4 17:18:31 2025 +0800 fix: agent tool result related components commit6ca7597a98Author: dev <verc20.dev@proton.me> Date: Tue Nov 4 11:12:01 2025 +0800 fix: lint commit7d0f0b38a6Author: kangfenmao <kangfenmao@qq.com> Date: Tue Nov 4 09:56:32 2025 +0800 wip commit96a607a410Author: kangfenmao <kangfenmao@qq.com> Date: Mon Nov 3 20:23:25 2025 +0800 wip commit235ad16252Author: kangfenmao <kangfenmao@qq.com> Date: Mon Nov 3 20:08:45 2025 +0800 wip commitf23fe1b9e9Author: kangfenmao <kangfenmao@qq.com> Date: Mon Nov 3 19:15:01 2025 +0800 wip commit28fac543fcAuthor: kangfenmao <kangfenmao@qq.com> Date: Mon Nov 3 18:39:39 2025 +0800 wip commit3cc7ee01e2Author: kangfenmao <kangfenmao@qq.com> Date: Mon Nov 3 17:33:13 2025 +0800 wip commit37bdf9e508Author: kangfenmao <kangfenmao@qq.com> Date: Sat Nov 1 19:16:58 2025 +0800 wip commit1bf5104f97Author: kangfenmao <kangfenmao@qq.com> Date: Sat Nov 1 12:12:01 2025 +0800 wip
208 lines
5.5 KiB
TypeScript
208 lines
5.5 KiB
TypeScript
import type { Express } from 'express'
|
|
import swaggerJSDoc from 'swagger-jsdoc'
|
|
import swaggerUi from 'swagger-ui-express'
|
|
|
|
import { loggerService } from '../../services/LoggerService'
|
|
|
|
const logger = loggerService.withContext('OpenAPIMiddleware')
|
|
|
|
const swaggerOptions: swaggerJSDoc.Options = {
|
|
definition: {
|
|
openapi: '3.0.0',
|
|
info: {
|
|
title: 'Cherry Studio API',
|
|
version: '1.0.0',
|
|
description: 'OpenAI-compatible API for Cherry Studio with additional Cherry-specific endpoints',
|
|
contact: {
|
|
name: 'Cherry Studio',
|
|
url: 'https://github.com/CherryHQ/cherry-studio'
|
|
}
|
|
},
|
|
servers: [
|
|
{
|
|
url: 'http://localhost:23333',
|
|
description: 'Local development server'
|
|
}
|
|
],
|
|
components: {
|
|
securitySchemes: {
|
|
BearerAuth: {
|
|
type: 'http',
|
|
scheme: 'bearer',
|
|
bearerFormat: 'JWT',
|
|
description: 'Use the API key from Cherry Studio settings'
|
|
}
|
|
},
|
|
schemas: {
|
|
Error: {
|
|
type: 'object',
|
|
properties: {
|
|
error: {
|
|
type: 'object',
|
|
properties: {
|
|
message: { type: 'string' },
|
|
type: { type: 'string' },
|
|
code: { type: 'string' }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
ChatMessage: {
|
|
type: 'object',
|
|
properties: {
|
|
role: {
|
|
type: 'string',
|
|
enum: ['system', 'user', 'assistant', 'tool']
|
|
},
|
|
content: {
|
|
oneOf: [
|
|
{ type: 'string' },
|
|
{
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
type: { type: 'string' },
|
|
text: { type: 'string' },
|
|
image_url: {
|
|
type: 'object',
|
|
properties: {
|
|
url: { type: 'string' }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
name: { type: 'string' },
|
|
tool_calls: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
id: { type: 'string' },
|
|
type: { type: 'string' },
|
|
function: {
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' },
|
|
arguments: { type: 'string' }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
ChatCompletionRequest: {
|
|
type: 'object',
|
|
required: ['model', 'messages'],
|
|
properties: {
|
|
model: {
|
|
type: 'string',
|
|
description: 'The model to use for completion, in format provider:model-id'
|
|
},
|
|
messages: {
|
|
type: 'array',
|
|
items: { $ref: '#/components/schemas/ChatMessage' }
|
|
},
|
|
temperature: {
|
|
type: 'number',
|
|
minimum: 0,
|
|
maximum: 2,
|
|
default: 1
|
|
},
|
|
max_tokens: {
|
|
type: 'integer',
|
|
minimum: 1
|
|
},
|
|
stream: {
|
|
type: 'boolean',
|
|
default: false
|
|
},
|
|
tools: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
type: { type: 'string' },
|
|
function: {
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' },
|
|
description: { type: 'string' },
|
|
parameters: { type: 'object' }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Model: {
|
|
type: 'object',
|
|
properties: {
|
|
id: { type: 'string' },
|
|
object: { type: 'string', enum: ['model'] },
|
|
created: { type: 'integer' },
|
|
owned_by: { type: 'string' }
|
|
}
|
|
},
|
|
MCPServer: {
|
|
type: 'object',
|
|
properties: {
|
|
id: { type: 'string' },
|
|
name: { type: 'string' },
|
|
command: { type: 'string' },
|
|
args: {
|
|
type: 'array',
|
|
items: { type: 'string' }
|
|
},
|
|
env: { type: 'object' },
|
|
disabled: { type: 'boolean' }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
security: [
|
|
{
|
|
BearerAuth: []
|
|
}
|
|
]
|
|
},
|
|
apis: ['./src/main/apiServer/routes/**/*.ts', './src/main/apiServer/app.ts']
|
|
}
|
|
|
|
export function setupOpenAPIDocumentation(app: Express) {
|
|
try {
|
|
const specs = swaggerJSDoc(swaggerOptions)
|
|
|
|
// Serve OpenAPI JSON
|
|
app.get('/api-docs.json', (_req, res) => {
|
|
res.setHeader('Content-Type', 'application/json')
|
|
res.send(specs)
|
|
})
|
|
|
|
// Serve Swagger UI
|
|
app.use(
|
|
'/api-docs',
|
|
swaggerUi.serve,
|
|
swaggerUi.setup(specs, {
|
|
customCss: `
|
|
.swagger-ui .topbar { display: none; }
|
|
.swagger-ui .info .title { color: #1890ff; }
|
|
`,
|
|
customSiteTitle: 'Cherry Studio API Documentation'
|
|
})
|
|
)
|
|
|
|
logger.info('OpenAPI documentation ready', {
|
|
docsPath: '/api-docs',
|
|
specPath: '/api-docs.json'
|
|
})
|
|
} catch (error) {
|
|
logger.error('Failed to setup OpenAPI documentation', { error })
|
|
}
|
|
}
|