Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
0e367657
authored
Dec 16, 2025
by
Archer
Committed by
GitHub
Dec 16, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refresh plugins (#6099)
* doc * refresh plugins * perf: loading in install * background index
parent
7bfd02a4
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
26 additions
and
20 deletions
+26
-20
document/content/docs/upgrading/4-14/4144.mdx
+2
-1
document/data/doc-last-modified.json
+6
-6
projects/app/src/pages/api/admin/initFeedbackFlags.ts
+5
-3
projects/app/src/pages/api/admin/initv4144.ts
+1
-1
projects/app/src/pages/config/tool/marketplace.tsx
+12
-9
No files found.
document/content/docs/upgrading/4-14/4144.mdx
View file @
0e367657
...
...
@@ -20,7 +20,8 @@ curl --location --request POST 'https://{{host}}/api/admin/initv4144' \
--header 'Content-Type: application/json'
```
将 4.14.3 中,遗留的 Dataset/local 接口上传的文件,也迁移到 S3 中。
1. 将 4.14.3 中,遗留的 Dataset/local 接口上传的文件,也迁移到 S3 中。
2. 全量计算旧的 chat 中的反馈,增加 flags 值便于筛选。该函数执行较慢,所以放到异步执行,接口不会返回结果,请关注日志中是否打印:Migration feedback completed!
## 🚀 新增内容
...
...
document/data/doc-last-modified.json
View file @
0e367657
...
...
@@ -97,10 +97,10 @@
"document/content/docs/protocol/index.mdx"
:
"2025-07-30T15:38:30+08:00"
,
"document/content/docs/protocol/open-source.en.mdx"
:
"2025-08-05T23:20:39+08:00"
,
"document/content/docs/protocol/open-source.mdx"
:
"2025-08-05T23:20:39+08:00"
,
"document/content/docs/protocol/privacy.en.mdx"
:
"2025-12-1
2T21:30:11
+08:00"
,
"document/content/docs/protocol/privacy.mdx"
:
"2025-12-1
2T21:30:11
+08:00"
,
"document/content/docs/protocol/terms.en.mdx"
:
"2025-12-1
2T21:30:11
+08:00"
,
"document/content/docs/protocol/terms.mdx"
:
"2025-12-1
2T21:30:11
+08:00"
,
"document/content/docs/protocol/privacy.en.mdx"
:
"2025-12-1
5T23:36:54
+08:00"
,
"document/content/docs/protocol/privacy.mdx"
:
"2025-12-1
5T23:36:54
+08:00"
,
"document/content/docs/protocol/terms.en.mdx"
:
"2025-12-1
5T23:36:54
+08:00"
,
"document/content/docs/protocol/terms.mdx"
:
"2025-12-1
5T23:36:54
+08:00"
,
"document/content/docs/toc.en.mdx"
:
"2025-08-04T13:42:36+08:00"
,
"document/content/docs/toc.mdx"
:
"2025-12-09T23:33:32+08:00"
,
"document/content/docs/upgrading/4-10/4100.mdx"
:
"2025-08-02T19:38:37+08:00"
,
...
...
@@ -114,12 +114,12 @@
"document/content/docs/upgrading/4-12/4124.mdx"
:
"2025-09-17T22:29:56+08:00"
,
"document/content/docs/upgrading/4-13/4130.mdx"
:
"2025-11-04T15:06:39+08:00"
,
"document/content/docs/upgrading/4-13/4131.mdx"
:
"2025-09-30T15:47:06+08:00"
,
"document/content/docs/upgrading/4-13/4132.mdx"
:
"2025-1
0-21T11:46:53
+08:00"
,
"document/content/docs/upgrading/4-13/4132.mdx"
:
"2025-1
2-15T11:50:00
+08:00"
,
"document/content/docs/upgrading/4-14/4140.mdx"
:
"2025-11-06T15:43:00+08:00"
,
"document/content/docs/upgrading/4-14/4141.mdx"
:
"2025-11-19T10:15:27+08:00"
,
"document/content/docs/upgrading/4-14/4142.mdx"
:
"2025-11-18T19:27:14+08:00"
,
"document/content/docs/upgrading/4-14/4143.mdx"
:
"2025-11-26T20:52:05+08:00"
,
"document/content/docs/upgrading/4-14/4144.mdx"
:
"2025-12-15T
15:09:13
+08:00"
,
"document/content/docs/upgrading/4-14/4144.mdx"
:
"2025-12-15T
23:36:54
+08:00"
,
"document/content/docs/upgrading/4-8/40.mdx"
:
"2025-08-02T19:38:37+08:00"
,
"document/content/docs/upgrading/4-8/41.mdx"
:
"2025-08-02T19:38:37+08:00"
,
"document/content/docs/upgrading/4-8/42.mdx"
:
"2025-08-02T19:38:37+08:00"
,
...
...
projects/app/src/pages/api/admin/initFeedbackFlags.ts
View file @
0e367657
...
...
@@ -36,12 +36,14 @@ async function createTemporaryIndexes(): Promise<void> {
{
userGoodFeedback
:
1
,
teamId
:
1
,
appId
:
1
,
chatId
:
1
},
{
name
:
'temp_feedback_migration_good'
,
partialFilterExpression
:
{
userGoodFeedback
:
{
$exists
:
true
}
}
partialFilterExpression
:
{
userGoodFeedback
:
{
$exists
:
true
}
},
background
:
true
}
as
any
),
MongoChatItem
.
collection
.
createIndex
({
userBadFeedback
:
1
,
teamId
:
1
,
appId
:
1
,
chatId
:
1
},
{
name
:
'temp_feedback_migration_bad'
,
partialFilterExpression
:
{
userBadFeedback
:
{
$exists
:
true
}
}
partialFilterExpression
:
{
userBadFeedback
:
{
$exists
:
true
}
},
background
:
true
}
as
any
)
]);
...
...
@@ -203,7 +205,7 @@ export async function migrateFeedbackFlags() {
const
durationMinutes
=
(
duration
/
1000
/
60
).
toFixed
(
2
);
addLog
.
info
(
'========================================'
);
addLog
.
info
(
'Migration completed!'
);
addLog
.
info
(
'Migration
feedback
completed!'
);
addLog
.
info
(
`Total:
${
chats
.
length
.
toLocaleString
()}
`
);
addLog
.
info
(
`Succeeded:
${
succeeded
.
toLocaleString
()}
`
);
addLog
.
info
(
`Failed:
${
failed
.
toLocaleString
()}
`
);
...
...
projects/app/src/pages/api/admin/initv4144.ts
View file @
0e367657
...
...
@@ -979,7 +979,7 @@ async function handler(req: NextApiRequest, _res: NextApiResponse) {
addLog
.
info
(
`[Migration
${
batchId
}
] =======================================`
);
// 重新统计每一个 chat 的反馈情况
await
migrateFeedbackFlags
();
migrateFeedbackFlags
();
return
{
batchId
,
...
...
projects/app/src/pages/config/tool/marketplace.tsx
View file @
0e367657
...
...
@@ -8,7 +8,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import
MyBox
from
'@fastgpt/web/components/common/MyBox'
;
import
MyIconButton
from
'@fastgpt/web/components/common/Icon/button'
;
import
MyMenu
from
'@fastgpt/web/components/common/MyMenu'
;
import
{
useState
,
useMemo
,
useRef
,
useEffect
,
useCallback
,
useReducer
}
from
'react'
;
import
{
useState
,
useMemo
,
useRef
,
useEffect
,
useCallback
}
from
'react'
;
import
{
useDebounce
,
useMount
,
useSet
}
from
'ahooks'
;
import
ToolCard
,
{
type
ToolCardItemType
}
from
'@fastgpt/web/components/core/plugin/tool/ToolCard'
;
import
ToolTagFilterBox
from
'@fastgpt/web/components/core/plugin/tool/TagFilterBox'
;
...
...
@@ -153,18 +153,20 @@ const ToolkitMarketplace = ({ marketplaceUrl }: { marketplaceUrl: string }) => {
// Controler
const
{
runAsync
:
handleInstallTool
}
=
useRequest2
(
async
(
tool
:
ToolCardItemType
)
=>
{
const
downloadUrl
=
await
getMarketplaceDownloadURL
(
tool
.
id
);
if
(
!
downloadUrl
)
return
;
const
existingPromise
=
operatingPromisesRef
.
current
.
get
(
tool
.
id
);
if
(
existingPromise
)
{
await
existingPromise
;
return
;
}
const
operationPromise
=
(
async
()
=>
{
installingOrDeletingToolIdsDispatch
.
add
(
tool
.
id
);
installingOrDeletingToolIdsDispatch
.
add
(
tool
.
id
);
const
downloadUrl
=
await
getMarketplaceDownloadURL
(
tool
.
id
);
if
(
!
downloadUrl
)
{
installingOrDeletingToolIdsDispatch
.
remove
(
tool
.
id
);
return
;
}
const
operationPromise
=
(
async
()
=>
{
try
{
await
intallPluginWithUrl
({
downloadUrls
:
[
downloadUrl
]
...
...
@@ -173,10 +175,10 @@ const ToolkitMarketplace = ({ marketplaceUrl }: { marketplaceUrl: string }) => {
if
(
selectedTool
?.
id
===
tool
.
id
)
{
setSelectedTool
((
prev
)
=>
(
prev
?
{
...
prev
,
status
:
3
}
:
null
));
}
await
refreshInstalledPlugins
();
}
finally
{
installingOrDeletingToolIdsDispatch
.
remove
(
tool
.
id
);
operatingPromisesRef
.
current
.
delete
(
tool
.
id
);
await
refreshInstalledPlugins
();
}
})();
operatingPromisesRef
.
current
.
set
(
tool
.
id
,
operationPromise
);
...
...
@@ -213,10 +215,10 @@ const ToolkitMarketplace = ({ marketplaceUrl }: { marketplaceUrl: string }) => {
if
(
selectedTool
?.
id
===
tool
.
id
)
{
setSelectedTool
((
prev
)
=>
(
prev
?
{
...
prev
,
status
:
3
}
:
null
));
}
await
refreshInstalledPlugins
();
}
finally
{
updatingToolIdsDispatch
.
remove
(
tool
.
id
);
operatingPromisesRef
.
current
.
delete
(
tool
.
id
);
await
refreshInstalledPlugins
();
}
})();
...
...
@@ -243,10 +245,10 @@ const ToolkitMarketplace = ({ marketplaceUrl }: { marketplaceUrl: string }) => {
if
(
selectedTool
?.
id
===
tool
.
id
)
{
setSelectedTool
((
prev
)
=>
(
prev
?
{
...
prev
,
status
:
1
}
:
null
));
}
await
refreshInstalledPlugins
();
}
finally
{
installingOrDeletingToolIdsDispatch
.
remove
(
tool
.
id
);
operatingPromisesRef
.
current
.
delete
(
tool
.
id
);
await
refreshInstalledPlugins
();
}
})();
operatingPromisesRef
.
current
.
set
(
tool
.
id
,
operationPromise
);
...
...
@@ -374,6 +376,7 @@ const ToolkitMarketplace = ({ marketplaceUrl }: { marketplaceUrl: string }) => {
onClick=
{
()
=>
router
.
push
(
'/config/tool'
)
}
position=
{
'absolute'
}
top=
{
4
}
zIndex=
{
1000
}
{
...
(
showCompactSearch
?
{
right
:
4
}
:
{
left
:
4
})}
/>
{
!
showCompactSearch
&&
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment