fix: 增加thinking disabled

修改退群监控模板
定时日报保存日报历史
This commit is contained in:
Wxw-Gu
2026-09-01 11:40:14 +08:00
parent 25b72c3d76
commit 1c8bbae1f0
21 changed files with 343 additions and 34 deletions
+14
View File
@@ -437,6 +437,7 @@ function App(): React.ReactElement {
modelConfig: reportTextModelConfig,
visionModelConfig: aiVisionModelConfig
})
const reportHistoryRequestRef = React.useRef(0)
const lastCapturedReportKeyRef = React.useRef('')
React.useEffect(() => {
@@ -531,8 +532,10 @@ function App(): React.ReactElement {
}
const loadGeneratedReports = React.useCallback(async (): Promise<void> => {
const requestId = ++reportHistoryRequestRef.current
try {
const result = await window.api.listGeneratedReports()
if (requestId !== reportHistoryRequestRef.current) return
if (!result.success) {
setReportNotice(result.error || '日报历史加载失败')
return
@@ -543,6 +546,7 @@ function App(): React.ReactElement {
current && reports.some((report) => report.id === current) ? current : null
)
} catch (error) {
if (requestId !== reportHistoryRequestRef.current) return
setReportNotice(error instanceof Error ? error.message : String(error))
}
}, [])
@@ -817,6 +821,15 @@ function App(): React.ReactElement {
void loadGeneratedReports()
}, [isAuthenticated, loadGeneratedReports])
React.useEffect(() => {
if (!isAuthenticated || activePage !== 'report') return
void loadGeneratedReports()
const refreshTimer = window.setInterval(() => {
void loadGeneratedReports()
}, 15_000)
return () => window.clearInterval(refreshTimer)
}, [activePage, isAuthenticated, loadGeneratedReports, reportSection, reportWorkspaceView])
const handleLogin = async (keyInput?: string, accountRootInput?: string): Promise<void> => {
const keyToUse = keyInput || dbKey
let accountRoot = accountRootInput || selectedAccount?.accountRoot
@@ -1597,6 +1610,7 @@ function App(): React.ReactElement {
: summaryDateRange === '7days'
? '近 7 天'
: '今天',
reportDate: reportMetadata.reportDate,
messageCount: reportGeneration.reportMessages.length,
generatedAt: new Date().toISOString(),
generatedImage: reportGeneration.generatedImage || undefined,
@@ -37,8 +37,6 @@ interface ReportGroup {
reports: GeneratedReportRecord[]
}
const DAY_MS = 86400000
const dateKey = (value: string): number => {
const parsed = new Date(value).getTime()
return Number.isFinite(parsed) ? parsed : 0
@@ -62,12 +60,15 @@ const groupLabelFor = (value: string): string => {
if (!Number.isFinite(date.getTime())) return '更早'
const now = new Date()
const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime()
const startOfYesterday = startOfToday - DAY_MS
const time = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime()
const startOfToday = new Date(now)
startOfToday.setHours(0, 0, 0, 0)
const startOfYesterday = new Date(startOfToday)
startOfYesterday.setDate(startOfYesterday.getDate() - 1)
const time = new Date(date)
time.setHours(0, 0, 0, 0)
if (time >= startOfToday) return '今天'
if (time >= startOfYesterday) return '昨天'
if (time.getTime() >= startOfToday.getTime()) return '今天'
if (time.getTime() >= startOfYesterday.getTime()) return '昨天'
if (date.getFullYear() === now.getFullYear()) return `${date.getMonth() + 1}月${date.getDate()}日`
return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`
}
@@ -167,7 +167,8 @@ function GroupExitNotificationTemplate({
/>
<div className="exit-monitor-template-meta">
<span>
支持 {`{user}`}、{`{groupRemark}`}、{`{wxid}`}、{`{time}`}
支持 {`{user}`}、{`{groupRemark}`}、{`{wxid}`}、{`{previousCount}`}、{`{currentCount}`}
、{`{time}`}
</span>
<span>
{draft.length}/{GROUP_EXIT_NOTIFICATION_TEMPLATE_MAX_LENGTH}
@@ -357,6 +357,29 @@ export function AIProviderEditor({
</Select>
<small>Codex 或仅支持 /responses 的中转服务请选择 Responses API。</small>
</label>
<label className="wide">
思考模式
<Select
value={provider.advanced.thinking || 'default'}
onValueChange={(value) =>
patch({
advanced: {
...provider.advanced,
thinking: value as AIProviderConfig['advanced']['thinking']
}
})
}
>
<SelectTrigger aria-label="思考模式">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="default">跟随模型默认</SelectItem>
<SelectItem value="disabled">禁用思考(thinking: disabled)</SelectItem>
</SelectContent>
</Select>
<small>仅 Chat Completions 兼容接口会发送禁用参数。</small>
</label>
<label className="wide ai-provider-stream-toggle" htmlFor="ai-provider-stream">
<span className="ai-provider-stream-toggle-control">
<Checkbox
@@ -98,6 +98,7 @@ export function createProviderFromPreset(presetId = 'deepseek'): AIProviderConfi
maxTokens: 4096,
stream: false,
apiProtocol: 'chat-completions',
thinking: 'default',
extraHeaders: {}
}
}
+21 -8
View File
@@ -919,21 +919,34 @@ export const SUMMARY_TYPE_OPTIONS: {
}
]
export const getSummaryDateRange = (
range: SummaryDateRange
export const getSummaryDateRangeAt = (
range: SummaryDateRange,
now = new Date()
): { startTime: number; endTime: number } => {
const now = new Date()
const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime() / 1000
const endTime = Math.floor(Date.now() / 1000)
const startOfToday = new Date(now)
startOfToday.setHours(0, 0, 0, 0)
const startOfYesterday = new Date(startOfToday)
startOfYesterday.setDate(startOfYesterday.getDate() - 1)
const startOfTodaySeconds = Math.floor(startOfToday.getTime() / 1000)
const endTime = Math.floor(now.getTime() / 1000)
if (range === 'yesterday') {
return { startTime: startOfToday - 86400, endTime: startOfToday - 1 }
return {
startTime: Math.floor(startOfYesterday.getTime() / 1000),
endTime: startOfTodaySeconds - 1
}
}
if (range === '7days') {
return { startTime: startOfToday - 6 * 86400, endTime }
const startOfSevenDayWindow = new Date(startOfToday)
startOfSevenDayWindow.setDate(startOfSevenDayWindow.getDate() - 6)
return { startTime: Math.floor(startOfSevenDayWindow.getTime() / 1000), endTime }
}
return { startTime: startOfToday, endTime }
return { startTime: startOfTodaySeconds, endTime }
}
export const getSummaryDateRange = (
range: SummaryDateRange
): { startTime: number; endTime: number } => getSummaryDateRangeAt(range)
export const isInternalName = (value?: string): boolean => {
const text = String(value || '').trim()
return (