mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-10-06 05:27:48 +08:00
fix: 增加thinking disabled
修改退群监控模板 定时日报保存日报历史
This commit is contained in:
@@ -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: {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user