From 1895d56e516e22aa85e056eede0c2f7ebf5a2672 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Thu, 30 Oct 2025 12:20:33 +0800 Subject: [PATCH 1/4] Install packages --- modules/tool/packages/test1/DESIGN.md | 24 +++++++++ modules/tool/packages/test1/README.md | 13 +++++ modules/tool/packages/test1/config.ts | 52 +++++++++++++++++++ modules/tool/packages/test1/index.ts | 10 ++++ modules/tool/packages/test1/logo.svg | 20 +++++++ modules/tool/packages/test1/package.json | 17 ++++++ modules/tool/packages/test1/src/index.ts | 28 ++++++++++ .../tool/packages/test1/test/index.test.ts | 8 +++ 8 files changed, 172 insertions(+) create mode 100644 modules/tool/packages/test1/DESIGN.md create mode 100644 modules/tool/packages/test1/README.md create mode 100644 modules/tool/packages/test1/config.ts create mode 100644 modules/tool/packages/test1/index.ts create mode 100644 modules/tool/packages/test1/logo.svg create mode 100644 modules/tool/packages/test1/package.json create mode 100644 modules/tool/packages/test1/src/index.ts create mode 100644 modules/tool/packages/test1/test/index.test.ts diff --git a/modules/tool/packages/test1/DESIGN.md b/modules/tool/packages/test1/DESIGN.md new file mode 100644 index 00000000..86458c8a --- /dev/null +++ b/modules/tool/packages/test1/DESIGN.md @@ -0,0 +1,24 @@ +# xxx 系统工具 + +## 参考信息 + +### 参考文档 + +### 测试密钥环境变量名 + +### 工具集/子工具列表 + +描述工具集名称,以及子工具,子工具需要包含 ID,名字,哪些输入输出,例如: + +``` +工具集名:Redis 操作,需要填写 redis 链接字符串做为密钥。 + +子工具列表: +1. get;获取缓存了;输入 key;输出 value和是否存在 +2. set;设置缓存;输入 key,value,ttl;输出是否成功 +3. del;删除缓存;输入 key;输出是否成功 +``` + +--- + +下面由 AI 生成完整的设计文档 \ No newline at end of file diff --git a/modules/tool/packages/test1/README.md b/modules/tool/packages/test1/README.md new file mode 100644 index 00000000..aa6ec764 --- /dev/null +++ b/modules/tool/packages/test1/README.md @@ -0,0 +1,13 @@ +# example tool + +Write the introduction for your tool here. + +You can insert a picture with following markdown + +```markdown +Insert a assets picture (you need to put you picture file in the assets dir) +![](./assets/pic.png) + +Or insert a public pic +![](https://picsum.photos/200) +``` diff --git a/modules/tool/packages/test1/config.ts b/modules/tool/packages/test1/config.ts new file mode 100644 index 00000000..e70cec4e --- /dev/null +++ b/modules/tool/packages/test1/config.ts @@ -0,0 +1,52 @@ +import { defineTool } from '@tool/type'; +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + WorkflowIOValueTypeEnum +} from '@tool/type/fastgpt'; +import { ToolTagEnum } from '@tool/type/tags'; + +export default defineTool({ + name: { + 'zh-CN': '模版工具', + en: 'Template tool' + }, + tags: [ToolTagEnum.enum.tools], + description: { + 'zh-CN': '描述', + en: 'description' + }, + toolDescription: + 'tool description for ai to use, fallback to English description if not provided', + secretInputConfig: [ + { + key: 'apiKey', + label: 'API Key', + description: '可以在 xxx 获取', + required: true, + inputType: 'secret' + } + ], + versionList: [ + { + value: '0.1.0', + description: 'Default version', + inputs: [ + { + key: 'formatStr', + label: '格式化字符串', + renderTypeList: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference], + valueType: WorkflowIOValueTypeEnum.string + } + ], + outputs: [ + { + valueType: WorkflowIOValueTypeEnum.string, + key: 'time', + label: '时间', + description: '当前时间' + } + ] + } + ] +}); diff --git a/modules/tool/packages/test1/index.ts b/modules/tool/packages/test1/index.ts new file mode 100644 index 00000000..d698ed48 --- /dev/null +++ b/modules/tool/packages/test1/index.ts @@ -0,0 +1,10 @@ +import config from './config'; +import { InputType, OutputType, tool as toolCb } from './src'; +import { exportTool } from '@tool/utils/tool'; + +export default exportTool({ + toolCb, + InputType, + OutputType, + config +}); diff --git a/modules/tool/packages/test1/logo.svg b/modules/tool/packages/test1/logo.svg new file mode 100644 index 00000000..1e4b9a3d --- /dev/null +++ b/modules/tool/packages/test1/logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/modules/tool/packages/test1/package.json b/modules/tool/packages/test1/package.json new file mode 100644 index 00000000..9f45f2f5 --- /dev/null +++ b/modules/tool/packages/test1/package.json @@ -0,0 +1,17 @@ +{ + "name": "@fastgpt-plugins/tool-test1", + "module": "index.ts", + "type": "module", + "scripts": { + "build": "bun ../../../../scripts/build.ts" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "zod": "^3.24.3" + } +} diff --git a/modules/tool/packages/test1/src/index.ts b/modules/tool/packages/test1/src/index.ts new file mode 100644 index 00000000..5f1bd641 --- /dev/null +++ b/modules/tool/packages/test1/src/index.ts @@ -0,0 +1,28 @@ +import { format } from 'date-fns'; +import { z } from 'zod'; +import axios from 'next'; +export const InputType = z.object({ + apiKey: z.string(), + formatStr: z.string().optional().default('yyyy-MM-dd HH:mm:ss') +}); + +export const OutputType = z.object({ + time: z.string() +}); + +export async function tool({ + apiKey, + formatStr +}: z.infer): Promise> { + // 请求数据 + // const result = await fetch('https://api.example.com/data', { + // method: 'POST', + // body: JSON.stringify({ + // apiKey + // }) + // }); + + return { + time: format(new Date(), formatStr) + }; +} diff --git a/modules/tool/packages/test1/test/index.test.ts b/modules/tool/packages/test1/test/index.test.ts new file mode 100644 index 00000000..b70e289f --- /dev/null +++ b/modules/tool/packages/test1/test/index.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from 'vitest'; +import tool from '..'; + +test(async () => { + expect(tool.name).toBeDefined(); + expect(tool.description).toBeDefined(); + expect(tool.cb).toBeDefined(); +}); From ac5d3a9e90b176fde717c881c86058014e20b991 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Thu, 30 Oct 2025 14:56:36 +0800 Subject: [PATCH 2/4] fix: tag union field --- modules/tool/packages/test1/DESIGN.md | 24 --------- modules/tool/packages/test1/README.md | 13 ----- modules/tool/packages/test1/config.ts | 52 ------------------- modules/tool/packages/test1/index.ts | 10 ---- modules/tool/packages/test1/logo.svg | 20 ------- modules/tool/packages/test1/package.json | 17 ------ modules/tool/packages/test1/src/index.ts | 28 ---------- .../tool/packages/test1/test/index.test.ts | 8 --- 8 files changed, 172 deletions(-) delete mode 100644 modules/tool/packages/test1/DESIGN.md delete mode 100644 modules/tool/packages/test1/README.md delete mode 100644 modules/tool/packages/test1/config.ts delete mode 100644 modules/tool/packages/test1/index.ts delete mode 100644 modules/tool/packages/test1/logo.svg delete mode 100644 modules/tool/packages/test1/package.json delete mode 100644 modules/tool/packages/test1/src/index.ts delete mode 100644 modules/tool/packages/test1/test/index.test.ts diff --git a/modules/tool/packages/test1/DESIGN.md b/modules/tool/packages/test1/DESIGN.md deleted file mode 100644 index 86458c8a..00000000 --- a/modules/tool/packages/test1/DESIGN.md +++ /dev/null @@ -1,24 +0,0 @@ -# xxx 系统工具 - -## 参考信息 - -### 参考文档 - -### 测试密钥环境变量名 - -### 工具集/子工具列表 - -描述工具集名称,以及子工具,子工具需要包含 ID,名字,哪些输入输出,例如: - -``` -工具集名:Redis 操作,需要填写 redis 链接字符串做为密钥。 - -子工具列表: -1. get;获取缓存了;输入 key;输出 value和是否存在 -2. set;设置缓存;输入 key,value,ttl;输出是否成功 -3. del;删除缓存;输入 key;输出是否成功 -``` - ---- - -下面由 AI 生成完整的设计文档 \ No newline at end of file diff --git a/modules/tool/packages/test1/README.md b/modules/tool/packages/test1/README.md deleted file mode 100644 index aa6ec764..00000000 --- a/modules/tool/packages/test1/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# example tool - -Write the introduction for your tool here. - -You can insert a picture with following markdown - -```markdown -Insert a assets picture (you need to put you picture file in the assets dir) -![](./assets/pic.png) - -Or insert a public pic -![](https://picsum.photos/200) -``` diff --git a/modules/tool/packages/test1/config.ts b/modules/tool/packages/test1/config.ts deleted file mode 100644 index e70cec4e..00000000 --- a/modules/tool/packages/test1/config.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { defineTool } from '@tool/type'; -import { - FlowNodeInputTypeEnum, - FlowNodeOutputTypeEnum, - WorkflowIOValueTypeEnum -} from '@tool/type/fastgpt'; -import { ToolTagEnum } from '@tool/type/tags'; - -export default defineTool({ - name: { - 'zh-CN': '模版工具', - en: 'Template tool' - }, - tags: [ToolTagEnum.enum.tools], - description: { - 'zh-CN': '描述', - en: 'description' - }, - toolDescription: - 'tool description for ai to use, fallback to English description if not provided', - secretInputConfig: [ - { - key: 'apiKey', - label: 'API Key', - description: '可以在 xxx 获取', - required: true, - inputType: 'secret' - } - ], - versionList: [ - { - value: '0.1.0', - description: 'Default version', - inputs: [ - { - key: 'formatStr', - label: '格式化字符串', - renderTypeList: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference], - valueType: WorkflowIOValueTypeEnum.string - } - ], - outputs: [ - { - valueType: WorkflowIOValueTypeEnum.string, - key: 'time', - label: '时间', - description: '当前时间' - } - ] - } - ] -}); diff --git a/modules/tool/packages/test1/index.ts b/modules/tool/packages/test1/index.ts deleted file mode 100644 index d698ed48..00000000 --- a/modules/tool/packages/test1/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import config from './config'; -import { InputType, OutputType, tool as toolCb } from './src'; -import { exportTool } from '@tool/utils/tool'; - -export default exportTool({ - toolCb, - InputType, - OutputType, - config -}); diff --git a/modules/tool/packages/test1/logo.svg b/modules/tool/packages/test1/logo.svg deleted file mode 100644 index 1e4b9a3d..00000000 --- a/modules/tool/packages/test1/logo.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - diff --git a/modules/tool/packages/test1/package.json b/modules/tool/packages/test1/package.json deleted file mode 100644 index 9f45f2f5..00000000 --- a/modules/tool/packages/test1/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@fastgpt-plugins/tool-test1", - "module": "index.ts", - "type": "module", - "scripts": { - "build": "bun ../../../../scripts/build.ts" - }, - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "zod": "^3.24.3" - } -} diff --git a/modules/tool/packages/test1/src/index.ts b/modules/tool/packages/test1/src/index.ts deleted file mode 100644 index 5f1bd641..00000000 --- a/modules/tool/packages/test1/src/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { format } from 'date-fns'; -import { z } from 'zod'; -import axios from 'next'; -export const InputType = z.object({ - apiKey: z.string(), - formatStr: z.string().optional().default('yyyy-MM-dd HH:mm:ss') -}); - -export const OutputType = z.object({ - time: z.string() -}); - -export async function tool({ - apiKey, - formatStr -}: z.infer): Promise> { - // 请求数据 - // const result = await fetch('https://api.example.com/data', { - // method: 'POST', - // body: JSON.stringify({ - // apiKey - // }) - // }); - - return { - time: format(new Date(), formatStr) - }; -} diff --git a/modules/tool/packages/test1/test/index.test.ts b/modules/tool/packages/test1/test/index.test.ts deleted file mode 100644 index b70e289f..00000000 --- a/modules/tool/packages/test1/test/index.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect, test } from 'vitest'; -import tool from '..'; - -test(async () => { - expect(tool.name).toBeDefined(); - expect(tool.description).toBeDefined(); - expect(tool.cb).toBeDefined(); -}); From fa0b732a68e59e1fd8f8cf428761303b5a6fcac4 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Tue, 4 Nov 2025 11:35:33 +0800 Subject: [PATCH 3/4] update sdk --- modules/model/constants.ts | 4 +--- sdk/package.json | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/model/constants.ts b/modules/model/constants.ts index 061ae19e..fa2d89ec 100644 --- a/modules/model/constants.ts +++ b/modules/model/constants.ts @@ -202,13 +202,11 @@ export const ModelProviders = Object.entries(ModelProviderMap) return 0; }); -export type ModelProviderIdType = keyof typeof ModelProviderMap; - export type AiproxyMapProviderType = Record< number, { name: I18nStringStrictType | string; - provider: ModelProviderIdType; // Use to sort,get avatar + provider?: string; // Use to sort,get avatar avatar?: string; } >; diff --git a/sdk/package.json b/sdk/package.json index 27f32bdd..077988fe 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@fastgpt-sdk/plugin", - "version": "0.2.14", + "version": "0.2.15", "description": "fastgpt-plugin sdk", "main": "dist/client.js", "types": "dist/client.d.ts", From 19d272b454e88b8eeb48eb7022713bd983626fe0 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Tue, 4 Nov 2025 15:09:28 +0800 Subject: [PATCH 4/4] issue template --- .github/ISSUE_TEMPLATE/bugs.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bugs.md diff --git a/.github/ISSUE_TEMPLATE/bugs.md b/.github/ISSUE_TEMPLATE/bugs.md new file mode 100644 index 00000000..ea6f7c92 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bugs.md @@ -0,0 +1,30 @@ +--- +name: 问题反馈 +about: 详细清晰的描述你遇到的问题 +title: '' +labels: bug +assignees: '' +--- + +**例行检查** + +[//]: # '方框内填 x 表示打钩' + +- [ ] 我已确认目前没有类似 issue +- [ ] 我已完整查看过项目 README,以及[项目文档](https://doc.fastgpt.io/docs/introduction/) +- [ ] 我使用了自己的 key,并确认我的 key 是可正常使用的 +- [ ] 我理解并愿意跟进此 issue,协助测试和提供反馈 +- [x] 我理解并认可上述内容,并理解项目维护者精力有限,**不遵循规则的 issue 可能会被无视或直接关闭** + +**你的版本** + +- [ ] 公有云版本 +- [ ] 私有部署版本, 具体版本号: + +**问题描述, 日志截图,配置文件等** + +**复现步骤** + +**预期结果** + +**相关截图**