Skip to content

Commit 82ec0ad

Browse files
feat: shared router
1 parent 35776e5 commit 82ec0ad

44 files changed

Lines changed: 429 additions & 80 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎ui/AGENTS.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ Structural responsibilities:
141141
internally to avoid circular access through the aggregate entry.
142142
- Put functions shared by most pages or multiple business modules in `utils/`; detailed placement, file organization, and naming rules are maintained in `src/utils/UTILS_README.md`.
143143
- Treat application, knowledge, model, and tool as the four special resource domains that can span
144-
Workspace, System resource management, and System shared resources. Their route scope, API
144+
Workspace resources, Workspace shared resources, System resource management, and System shared resources. Their route scope, API
145145
selection, reusable cards, and context-specific Actions follow `ROUTE_README.md`,
146-
`API_README.md`, and `VIEW_README.md`; do not extend this three-scope pattern to ordinary pages.
146+
`API_README.md`, and `VIEW_README.md`; do not extend this resource-scope pattern to ordinary pages.
147147
- Import source assets through `src/assets/`; use `public/` only when a file must retain its original filename and URL.
148148

149149
## Entry Points

‎ui/src/api/API_README.md‎

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ src/api/
2323
│ │ ├── conversation.ts # 调试对话、历史会话与语音接口
2424
│ │ ├── application/ # 智能体接口
2525
│ │ ├── knowledge/ # 知识库接口
26+
│ │ ├── shared/ # 工作空间可用的共享模型、工具、知识库查询
2627
│ │ ├── model.ts # 模型接口
2728
│ │ ├── trigger/ # 触发器查询及维护接口
2829
│ │ ├── tool/ # 工具、工具工作流及工具商店接口
@@ -101,7 +102,7 @@ FormData;保存返回完整配置,页面以该返回值作为唯一数据来
101102
多套 API 时,以 `request` 为前缀加业务名区分,例如 `requestModelApi`、`requestToolApi`。
102103
直接导入的 API 保持 PascalCase 命名;请求返回的 Promise 不属于此命名规则。
103104

104-
`application`、`knowledge`、`model`、`tool` 是需要同时考虑 Workspace、System 资源管理和
105+
`application`、`knowledge`、`model`、`tool` 是需要同时考虑 Workspace 普通资源、Workspace 共享资源、System 资源管理和
105106
System 共享资源的四类特殊资源。其接口按真实后端边界分别维护在 `admin/workspace/` 与
106107
`admin/system/` 下,不把不同范围的 URL 合并为页面侧 API Map,也不让卡片或 Action 根据路由拼接
107108
System 接口地址。
@@ -153,7 +154,7 @@ v3 编辑表单提交 `{ name, description }`,标题上限 64、更新说明
153154
`workspace/tool/tool.ts` 的 `getAllTool(query)` 查询支持 `folder_id` 筛选的工作空间工具
154155
非分页列表,用于文件夹菜单和工具选择弹窗。`getToolListWithShared(query)` 请求 `tool/tool_list`,
155156
将响应的 `tools` 与 `shared_tools` 合并为 `ToolItem[]`,用于包含已授权共享工具的选项查询;
156-
按工具类型筛选时使用 `tool_type`。`workspace/shared.ts` 的 `getAllTool(query)` 仅查询共享工具。
157+
按工具类型筛选时使用 `tool_type`。`workspace/shared/tool.ts` 的 `getAllTool(query)` 仅查询共享工具。
157158

158159
### System 共享工具
159160

@@ -200,7 +201,7 @@ MCP 入口加载配置后打开只读及复制弹窗;分词索引入口仅调
200201
`/workspace/<workspaceId>/knowledge/import_knowledge`,响应为 `{ knowledge_id, type }`。
201202
后端校验知识库导出包并创建资源;导入成功后的用户权限和列表刷新由调用页面负责。
202203

203-
`workspace/knowledge/knowledge.ts` 与 `workspace/shared.ts` 的 `getAllKnowledge(query)`
204+
`workspace/knowledge/knowledge.ts` 与 `workspace/shared/knowledge/knowledge.ts` 的 `getAllKnowledge(query)`
204205
分别查询工作空间及共享知识库的非分页列表,返回 `KnowledgeItem[]`,用于关联知识库选择等
205206
需要全量选项的场景。原有 `getKnowledgePage` 继续用于分页列表。
206207

@@ -492,3 +493,30 @@ System 接口由资源管理服务提供;本地开源后端没有对应扩展
492493
版本和执行记录,前缀为 `/system/shared/tool`,调用只传资源 ID,不读取工作空间。
493494
两种 System 工具 API 的 `getToolListWithShared` 查询各自 `/tool_list` 并合并 `tools`、`shared_tools`,
494495
供画布的工具菜单及 MCP 选项使用。系统扩展接口需连接支持相应协议的部署进行联调。
496+
497+
### 知识库文档
498+
499+
`workspace/knowledge/document.ts` 仅维护文档分页查询,路径为
500+
`/workspace/<workspaceId>/knowledge/<knowledgeId>/document/<currentPage>/<pageSize>`。
501+
分页使用 `ParamsPage` / `ResponsePage<DocumentItem>`,支持 `name`、`create_user` 筛选;
502+
文档页传 `resource_type: 'document'`,创建者选项复用 Workspace `common.ts` 的 `getAllUsers`。
503+
类型从 `@/api/types` 导入,命中处理枚举从 `@/api/enums` 导入。API 不接收 loading,不重复包装响应。
504+
505+
### 工作空间共享资源查询
506+
507+
`workspace/shared/` 按最终资源文件拆分:`model.ts` 提供 `getModelList`,`tool.ts` 提供
508+
`getToolPage`、`getAllTool`,`knowledge/knowledge.ts` 提供 `getKnowledgePage`、`getAllKnowledge`、`getKnowledgeDetail`。
509+
上述资源查询沿用 `/system/shared/workspace/<workspaceId>/<resource>`,工作空间 ID 在调用时读取。
510+
调用方直接导入对应资源文件,与普通工作空间 API 同时使用时分别命名为
511+
`SharedModelApi`、`SharedToolApi`、`SharedKnowledgeApi`;目录不提供聚合入口。
512+
513+
`workspace/shared/knowledge/document.ts` 提供 `getDocumentPage(knowledgeId, page, query)`,
514+
请求 `/system/shared/workspace/<workspaceId>/knowledge/<knowledgeId>/document/<currentPage>/<pageSize>`。
515+
共享与普通知识库文档查询统一使用 `ParamsPage`、`ResponsePage<DocumentItem>` 和 `Dict<unknown>`,
516+
不传 loading,不保留 v2 的 `Result` 或下划线分页参数。两个文件各自默认导出 API 对象。
517+
518+
共享知识库 `getKnowledgeDetail(knowledgeId)` 请求知识库资源 `/<knowledgeId>`,返回 `KnowledgeDetail`。
519+
520+
Workspace 共享知识库详情由 `resourceScope: 'workspace-shared'` 选择上述完整共享 API 对象;
521+
普通详情继续使用 `workspace/knowledge/`。共享详情和文档查询不使用 System 共享资源管理 API,
522+
也不回退到普通 Workspace 知识库接口。文档创建者选项沿用共享列表的 System `common.ts` 查询。
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { get } from '../../core/request'
2+
import type { ParamsPage, ResponsePage } from '../../core/types'
3+
import type { Dict, DocumentItem } from '@/api/types'
4+
import { getWorkspaceId } from '@/utils/resource-context'
5+
6+
const getPrefix = (knowledgeId: string) => `/workspace/${getWorkspaceId()}/knowledge/${knowledgeId}/document`
7+
8+
/** 获取文档分页列表,支持名称和创建者筛选。 */
9+
const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict<unknown>) =>
10+
get<ResponsePage<DocumentItem>>(`${getPrefix(knowledgeId)}/${page.currentPage}/${page.pageSize}`, query)
11+
12+
export default { getDocumentPage }

‎ui/src/api/admin/workspace/shared.ts‎

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { get } from '../../../core/request'
2+
import type { ParamsPage, ResponsePage } from '../../../core/types'
3+
import type { Dict, DocumentItem } from '@/api/types'
4+
import { getWorkspaceId } from '@/utils/resource-context'
5+
6+
const getPrefix = (knowledgeId: string) => `/system/shared/workspace/${getWorkspaceId()}/knowledge/${knowledgeId}/document`
7+
8+
/** 获取工作空间共享知识库的文档分页列表。 */
9+
const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict<unknown>) =>
10+
get<ResponsePage<DocumentItem>>(`${getPrefix(knowledgeId)}/${page.currentPage}/${page.pageSize}`, query)
11+
12+
export default { getDocumentPage }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { get } from '../../../core/request'
2+
import type { ParamsPage, ResponsePage } from '../../../core/types'
3+
import type { Dict, KnowledgeDetail, KnowledgeItem } from '@/api/types'
4+
import { getWorkspaceId } from '@/utils/resource-context'
5+
6+
const getPrefix = () => `/system/shared/workspace/${getWorkspaceId()}/knowledge`
7+
8+
/** 获取工作空间共享的知识库分页列表。 */
9+
const getKnowledgePage = (page: ParamsPage, query?: Dict<unknown>) =>
10+
get<ResponsePage<KnowledgeItem>>(`${getPrefix()}/${page.currentPage}/${page.pageSize}`, query)
11+
12+
/** 获取工作空间共享的不分页知识库列表。 */
13+
const getAllKnowledge = (query?: Dict<unknown>) => get<KnowledgeItem[]>(getPrefix(), query)
14+
15+
/** 获取工作空间共享的知识库详情。 */
16+
const getKnowledgeDetail = (knowledgeId: string) => get<KnowledgeDetail>(`${getPrefix()}/${knowledgeId}`)
17+
18+
export default { getKnowledgePage, getAllKnowledge, getKnowledgeDetail }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { get } from '../../core/request'
2+
import type { Dict, ModelItem } from '@/api/types'
3+
import { getWorkspaceId } from '@/utils/resource-context'
4+
5+
const getPrefix = () => `/system/shared/workspace/${getWorkspaceId()}/model`
6+
7+
/** 获取工作空间共享的模型列表。 */
8+
const getModelList = (query?: Dict<unknown>) => {
9+
return get<ModelItem[]>(getPrefix(), query)
10+
}
11+
12+
export default { getModelList }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { get } from '../../core/request'
2+
import type { ParamsPage, ResponsePage } from '../../core/types'
3+
import type { Dict, ToolItem } from '@/api/types'
4+
import { getWorkspaceId } from '@/utils/resource-context'
5+
6+
const getPrefix = () => `/system/shared/workspace/${getWorkspaceId()}/tool`
7+
8+
/** 获取工作空间共享的分页工具列表。 */
9+
const getToolPage = (page: ParamsPage, query?: Dict<unknown>) => {
10+
return get<ResponsePage<ToolItem>>(`${getPrefix()}/${page.currentPage}/${page.pageSize}`, query)
11+
}
12+
13+
/** 获取工作空间共享的不分页工具列表。 */
14+
const getAllTool = (query?: Dict<unknown>) => {
15+
return get<ToolItem[]>(getPrefix(), query)
16+
}
17+
18+
export default { getToolPage, getAllTool }

‎ui/src/api/enums/document.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/** 文档命中处理方式。 */
2+
export const DOCUMENT_HIT_HANDLING = { OPTIMIZATION: 'optimization', DIRECTLY_RETURN: 'directly_return' } as const

‎ui/src/api/enums/index.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ export * from './knowledge'
1010
export * from './trigger'
1111
export * from './file'
1212
export * from './state'
13+
14+
export * from './document'

0 commit comments

Comments
 (0)