dsh-llm-verifier 0.1.17 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -11
- package/lib/{caller-D1ZQNsVU.js → caller-DJd_FlrQ.js} +15 -7
- package/lib/caller-DJd_FlrQ.js.map +1 -0
- package/lib/caller.js +1 -1
- package/lib/client.js +683 -71
- package/lib/client.js.map +1 -1
- package/lib/core.js +37 -8
- package/lib/core.js.map +1 -1
- package/lib/index.js +1267 -568
- package/lib/index.js.map +1 -1
- package/lib/types/auto.d.ts +10 -0
- package/lib/types/auto.d.ts.map +1 -1
- package/lib/types/auto.js +86 -22
- package/lib/types/auto.js.map +1 -1
- package/lib/types/cache.d.ts +1 -0
- package/lib/types/cache.d.ts.map +1 -1
- package/lib/types/cache.js +20 -10
- package/lib/types/cache.js.map +1 -1
- package/lib/types/caller.d.ts +3 -0
- package/lib/types/caller.d.ts.map +1 -1
- package/lib/types/caller.js +18 -4
- package/lib/types/caller.js.map +1 -1
- package/lib/types/client-i18n.d.ts +169 -0
- package/lib/types/client-i18n.d.ts.map +1 -1
- package/lib/types/client-i18n.js +172 -14
- package/lib/types/client-i18n.js.map +1 -1
- package/lib/types/client-judges.d.ts +20 -0
- package/lib/types/client-judges.d.ts.map +1 -0
- package/lib/types/client-judges.js +109 -0
- package/lib/types/client-judges.js.map +1 -0
- package/lib/types/client.d.ts +77 -2
- package/lib/types/client.d.ts.map +1 -1
- package/lib/types/client.js +76 -7
- package/lib/types/client.js.map +1 -1
- package/lib/types/config.d.ts +30 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/config.js +118 -3
- package/lib/types/config.js.map +1 -1
- package/lib/types/core.d.ts +16 -0
- package/lib/types/core.d.ts.map +1 -1
- package/lib/types/core.js +51 -7
- package/lib/types/core.js.map +1 -1
- package/lib/types/engine.d.ts +19 -1
- package/lib/types/engine.d.ts.map +1 -1
- package/lib/types/engine.js +315 -29
- package/lib/types/engine.js.map +1 -1
- package/lib/types/images.d.ts +5 -0
- package/lib/types/images.d.ts.map +1 -1
- package/lib/types/images.js +31 -9
- package/lib/types/images.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +149 -43
- package/lib/types/index.js.map +1 -1
- package/lib/types/plan-gate.d.ts.map +1 -1
- package/lib/types/plan-gate.js +7 -7
- package/lib/types/plan-gate.js.map +1 -1
- package/lib/types/router.d.ts +20 -0
- package/lib/types/router.d.ts.map +1 -1
- package/lib/types/router.js +86 -25
- package/lib/types/router.js.map +1 -1
- package/lib/types/session.d.ts.map +1 -1
- package/lib/types/session.js +9 -1
- package/lib/types/session.js.map +1 -1
- package/lib/types/statistics.d.ts +19 -1
- package/lib/types/statistics.d.ts.map +1 -1
- package/lib/types/statistics.js +85 -10
- package/lib/types/statistics.js.map +1 -1
- package/lib/types/team-gate.d.ts +1 -0
- package/lib/types/team-gate.d.ts.map +1 -1
- package/lib/types/team-gate.js +15 -8
- package/lib/types/team-gate.js.map +1 -1
- package/lib/types/top-logprobs.d.ts +1 -1
- package/lib/types/top-logprobs.d.ts.map +1 -1
- package/lib/types/top-logprobs.js +2 -2
- package/lib/types/top-logprobs.js.map +1 -1
- package/package.json +1 -1
- package/src/auto.test.ts +46 -7
- package/src/auto.ts +86 -21
- package/src/cache.test.ts +133 -0
- package/src/cache.ts +19 -8
- package/src/caller.test.ts +191 -3
- package/src/caller.ts +23 -4
- package/src/client-i18n.ts +214 -14
- package/src/client-judges.ts +121 -0
- package/src/client.test.ts +439 -0
- package/src/client.tsx +146 -9
- package/src/config.test.ts +433 -0
- package/src/config.ts +164 -3
- package/src/core.test.ts +76 -0
- package/src/core.ts +53 -7
- package/src/engine.test.ts +427 -1
- package/src/engine.ts +419 -34
- package/src/images.test.ts +16 -1
- package/src/images.ts +28 -6
- package/src/index.test.ts +74 -0
- package/src/index.ts +150 -46
- package/src/parity.test.ts +5 -0
- package/src/plan-gate.test.ts +28 -0
- package/src/plan-gate.ts +7 -7
- package/src/router.test.ts +117 -1
- package/src/router.ts +87 -25
- package/src/session.test.ts +38 -0
- package/src/session.ts +8 -1
- package/src/statistics.test.ts +314 -3
- package/src/statistics.ts +93 -9
- package/src/team-gate.test.ts +70 -1
- package/src/team-gate.ts +17 -8
- package/src/top-logprobs.test.ts +54 -2
- package/src/top-logprobs.ts +2 -2
- package/lib/caller-D1ZQNsVU.js.map +0 -1
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["Button","Input","IconDataOutline16","IconRefreshOutline16"],"sources":["../src/client-i18n.ts","../src/client.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nexport const zh = {\n // Settings Page\n 'settings.title': 'LLM Verifier',\n 'settings.intro': '选择已在 DSH「模型」中配置的模型作为独立裁判。修改后点击页面底部的保存按钮生效。',\n 'settings.loading': '正在读取 DSH 模型和设置…',\n 'settings.retry': '重试',\n 'settings.nsUnregistered': '未注册 Verifier 设置命名空间,请重启 DSH 宿主。',\n\n // Section: Tools\n 'section.tools': '工具',\n 'field.enabled.title': '启用 Verifier 工具',\n 'field.enabled.helpOn': '允许 Agent 调用四个 verifier 工具并向裁判模型发起请求。',\n 'field.enabled.helpOff': '停用后,所有 verifier 工具都会立即返回错误。',\n 'field.enabled.warnDisabled': 'verifier_compare、verifier_select、verifier_track 和 verifier_current_session 当前不可用。',\n\n // Section: Automatic Verification\n 'section.autoVerify': '自动验收',\n 'field.autoVerifyMode.title': '调用策略',\n 'field.autoVerifyMode.help': '手动仅暴露工具;智能在有结构化/高置信证据时路由四工具;严格还会主动执行语义路由并对任何关键操作做最终验收。',\n 'field.autoVerifyMode.manual': '手动',\n 'field.autoVerifyMode.smart': '智能(推荐)',\n 'field.autoVerifyMode.strict': '严格',\n 'field.autoRouteSemantic.title': '混合语义路由',\n 'field.autoRouteSemantic.help': '结构化候选或检查点不足时,由裁判模型保守识别真实的 compare/select/track 对象。智能模式仅在有候选线索时运行;严格模式每次结束边界都会检查。',\n 'field.autoRouteMinConfidence.title': '语义路由置信度',\n 'field.autoRouteMinConfidence.help': '语义识别达到该置信度才执行 compare/select/track;范围 0–1,建议保持 0.9。',\n 'field.autoRouteMaxCandidates.title': '最多候选数',\n 'field.autoRouteMaxCandidates.help': '一次自动 select 最多纳入的真实候选数量,至少 3。',\n 'field.autoRouteMaxPerTask.title': '每任务最多路由',\n 'field.autoRouteMaxPerTask.help': 'compare/select/track 自动路由的任务预算;指纹去重后仍受此上限约束。',\n 'field.autoRouteMaxPerSession.title': '每会话最多路由',\n 'field.autoRouteMaxPerSession.help': '同一会话中 compare/select/track 自动路由总预算。',\n 'field.autoTrackCompletionThreshold.title': '进度完成阈值',\n 'field.autoTrackCompletionThreshold.help': 'track 任一检查点低于该值时 steering 要求 Agent 继续执行;范围 0–1。',\n 'field.autoRouteMaxItemChars.title': '单项证据字符上限',\n 'field.autoRouteMaxItemChars.help': '每个候选或检查点在脱敏后允许发送给裁判的最大字符数。',\n 'field.autoRouteMaxInputChars.title': '路由证据总字符上限',\n 'field.autoRouteMaxInputChars.help': '一次 compare/select/track 所有候选或步骤的总字符预算。',\n 'field.autoMaxModelCallsPerTask.title': '每任务模型调用预算',\n 'field.autoMaxModelCallsPerTask.help': '语义分类、中间路由和最终验收共享的估算模型调用上限。',\n 'field.autoMaxModelCallsPerSession.title': '每会话模型调用预算',\n 'field.autoMaxModelCallsPerSession.help': '整个会话所有自动验证阶段共享的估算模型调用上限。',\n 'field.autoVerifyThreshold.title': '通过阈值',\n 'field.autoVerifyThreshold.help': '会话证据分数达到该值且胜过空工作基线才允许结束;范围 0–1。',\n 'field.autoVerifyRepeats.title': '自动评估轮次',\n 'field.autoVerifyRepeats.help': '每项标准的自动评分重复次数;1 为低成本初筛。',\n 'field.autoVerifyMinToolCalls.title': '智能模式最少工具调用',\n 'field.autoVerifyMinToolCalls.help': '达到此工具证据数量且包含写入/执行类操作时才自动验收。',\n 'field.autoVerifyMaxChars.title': '最大证据字符',\n 'field.autoVerifyMaxChars.help': '发送给裁判前保留的最近会话证据字符数。',\n 'field.autoVerifyMaxPerTask.title': '每任务最多验收',\n 'field.autoVerifyMaxPerTask.help': '低分反馈后允许再次验收的次数上限,防止循环。',\n 'field.autoVerifyMaxPerSession.title': '每会话最多验收',\n 'field.autoVerifyMaxPerSession.help': '同一会话中的自动验收总预算。',\n 'field.autoVerify.warnNotice': '自动路由按 select → compare → track → current_session 的阶段顺序处理;脱敏后的任务、Assistant 轨迹与真实工具输出会发送给所选裁判模型。候选选择或进度不足会 steering 继续工作,最终验收未通过会要求修复并重新验证。',\n\n // Section: Judge Model\n 'section.model': '裁判模型',\n 'field.provider.title': '供应商',\n 'field.provider.help': '当前 DSH 中可路由的模型供应商。',\n 'field.model.title': '模型',\n 'field.model.help': '用作裁判的具体模型。',\n 'field.reasoningEffort.title': '推理强度',\n 'field.reasoningEffort.help': '留空时使用所选模型的默认值。',\n 'field.reasoningEffort.default': '模型默认',\n 'field.maxTokens.title': '最大输出 Token',\n 'field.maxTokens.help': '单次裁判请求允许生成的最大 Token 数。',\n\n // Section: Execution\n 'section.execution': '执行',\n 'field.maxConcurrency.title': '最大并发',\n 'field.maxConcurrency.help': '所有 verifier 工具共享的请求并发上限。',\n 'field.maxRetries.title': '最多重试',\n 'field.maxRetries.help': '限流、超时和短暂网络错误的重试次数。',\n 'field.timeoutMs.title': '请求超时',\n 'field.timeoutMs.help': '单次模型请求的超时时间,单位为毫秒。',\n 'field.cacheMaxEntries.title': '缓存条目上限',\n 'field.cacheMaxEntries.help': '本地持久评分缓存保留的最大条目数。',\n\n // Section: Cost Estimation\n 'section.cost': '费用估算',\n 'field.estimatedInputUsdPerMillion.title': '输入价格',\n 'field.estimatedInputUsdPerMillion.help': '每百万输入 Token 的美元价格,仅用于统计估算。',\n 'field.estimatedOutputUsdPerMillion.title': '输出价格',\n 'field.estimatedOutputUsdPerMillion.help': '每百万输出 Token 的美元价格,仅用于统计估算。',\n\n // Settings Actions & Alerts\n 'settings.catalogFailures': '部分模型目录读取失败',\n 'settings.saved': '设置已保存。',\n 'settings.reload': '重新载入',\n 'settings.save': '保存设置',\n 'settings.saving': '保存中…',\n\n // Statistics Page\n 'stats.pageTitle': 'Verifier 工具统计',\n 'stats.updatedAt': '数据更新于 {time} · 自动记录四个验证工具的实际执行结果',\n 'stats.daysUnit': '{days} 天',\n 'stats.currentSession': '当前会话',\n 'stats.allSessions': '全部会话',\n 'stats.refresh': '刷新',\n 'stats.requestFailed': '统计接口请求失败',\n 'stats.hostRestartHint': '请确认宿主已重启并加载最新版本的 dsh-llm-verifier。',\n 'stats.loading': '正在读取工具运行统计…',\n 'stats.costSummary': '{days} 天估算费用',\n 'stats.callsSummary': '{invocations} 次工具调用 · {calls} 次裁判模型请求',\n 'stats.successCalls': '成功调用',\n 'stats.failedCalls': '失败调用',\n 'stats.avgDuration': '平均耗时',\n\n // Metrics\n 'metric.cacheHitRate': '缓存命中率',\n 'metric.cacheHitNote': '{hits} 命中 / {total} 评分',\n 'metric.tokens': 'Token',\n 'metric.tokensNote': '输入 {input} · 输出 {output}',\n 'metric.avgModelCalls': '平均模型请求',\n 'metric.avgModelCallsNote': '{attempts} 次尝试 · {retries} 次重试',\n 'metric.scoringMode': '评分模式',\n 'metric.scoringModeNote': 'Top-logprobs · 显式标签 {explicit}',\n\n // Chart\n 'chart.title': '每日工具调用与模型请求趋势',\n 'chart.ariaLabel': '每日工具调用与模型请求趋势',\n 'chart.legendToolCalls': '工具调用',\n 'chart.legendModelCalls': '模型请求',\n\n // Tool breakdown table\n 'table.title': '工具运行明细',\n 'table.toolCount': '{count} 类工具',\n 'table.colTool': '工具',\n 'table.colInvocations': '调用',\n 'table.colSuccessRate': '成功率',\n 'table.colAvgDuration': '平均耗时',\n 'table.colModelCalls': '模型请求',\n 'table.colTokens': 'Token',\n 'table.colCacheHits': '缓存命中',\n 'table.colEstimatedCost': '估算费用',\n 'table.empty': '所选范围内还没有 Verifier 工具调用。后续执行会自动出现在这里。',\n\n // Recent invocations\n 'recent.title': '最近调用',\n 'recent.maxCount': '最多 50 条',\n 'recent.empty': '暂无记录',\n\n // Model summary\n 'models.title': '模型汇总',\n 'models.calls': '{calls} 请求',\n 'models.tokens': '{tokens} Token',\n 'models.empty': '暂无模型调用',\n\n // Slot label\n 'slot.statistics': '工具统计',\n 'slot.globalDashboard': 'Verifier 看板',\n 'global.panelTitle': 'LLM Verifier 全局监控中心',\n 'global.panelIntro': '跨会话全局统计、裁判模型效能大盘与任务验收总览。',\n 'guide.verifier.title': 'Verifier 统计',\n 'guide.verifier.desc': '大模型复核工具调用、耗时与成本统计',\n 'field.autoVerifyTeamTasks.title': '自动验收 Team 任务',\n 'field.autoVerifyTeamTasks.help': '当 Agent Teams 中的任务状态变更或进入完成状态时,自动路由进度追踪与任务验收。',\n 'field.autoVerifyPlanMode.title': '计划模式自动预审',\n 'field.autoVerifyPlanMode.help': '在 Agent 调用 exit_plan_mode 提交计划交付人类评审前,自动对计划完整度与风险进行独立预审。',\n 'field.autoVerifySubagents.title': '同时验收子 Agent',\n 'field.autoVerifySubagents.help': '子 Agent(subagent / fork)的会话也执行自动路由与最终验收。默认关闭:子会话同样以真实用户消息播种,被门控会额外消耗裁判预算并可能反复 steering 子 Agent。',\n}\n\nexport type I18nDict = typeof zh\n\nexport const en: I18nDict = {\n // Settings Page\n 'settings.title': 'LLM Verifier',\n 'settings.intro': 'Select a model configured in DSH \"Models\" as an independent judge. Click the Save button at the bottom of the page to apply changes.',\n 'settings.loading': 'Loading DSH models and settings…',\n 'settings.retry': 'Retry',\n 'settings.nsUnregistered': 'Verifier settings namespace is not registered. Restart the DSH host.',\n\n // Section: Tools\n 'section.tools': 'Tools',\n 'field.enabled.title': 'Enable Verifier Tools',\n 'field.enabled.helpOn': 'Allows the Agent to call verifier tools and make requests to the judge model.',\n 'field.enabled.helpOff': 'When disabled, all verifier tools will return an error immediately.',\n 'field.enabled.warnDisabled': 'verifier_compare, verifier_select, verifier_track, and verifier_current_session are currently unavailable.',\n\n // Section: Automatic Verification\n 'section.autoVerify': 'Automatic Verification',\n 'field.autoVerifyMode.title': 'Invocation Policy',\n 'field.autoVerifyMode.help': 'Manual exposes tools only; Smart routes tools when structured/high-confidence evidence is present; Strict actively runs semantic routing and performs final acceptance on any consequential action.',\n 'field.autoVerifyMode.manual': 'Manual',\n 'field.autoVerifyMode.smart': 'Smart (Recommended)',\n 'field.autoVerifyMode.strict': 'Strict',\n 'field.autoRouteSemantic.title': 'Hybrid Semantic Routing',\n 'field.autoRouteSemantic.help': 'When structured candidates or checkpoints are lacking, the judge model conservatively identifies real compare/select/track targets. Smart mode only runs when candidate clues exist; Strict mode checks at every task boundary.',\n 'field.autoRouteMinConfidence.title': 'Semantic Route Confidence',\n 'field.autoRouteMinConfidence.help': 'Minimum confidence required for semantic recognition before executing compare/select/track; range 0–1, 0.9 recommended.',\n 'field.autoRouteMaxCandidates.title': 'Max Candidates',\n 'field.autoRouteMaxCandidates.help': 'Maximum number of real candidates included in an automatic select, at least 3.',\n 'field.autoRouteMaxPerTask.title': 'Max Routes per Task',\n 'field.autoRouteMaxPerTask.help': 'Task budget for automatic compare/select/track routing; still constrained by this cap after fingerprint deduplication.',\n 'field.autoRouteMaxPerSession.title': 'Max Routes per Session',\n 'field.autoRouteMaxPerSession.help': 'Total budget for automatic compare/select/track routing within the same session.',\n 'field.autoTrackCompletionThreshold.title': 'Progress Completion Threshold',\n 'field.autoTrackCompletionThreshold.help': 'When any track checkpoint falls below this score, steering instructs the Agent to continue; range 0–1.',\n 'field.autoRouteMaxItemChars.title': 'Max Chars per Route Item',\n 'field.autoRouteMaxItemChars.help': 'Maximum sanitized character count allowed per candidate or checkpoint when sent to the judge.',\n 'field.autoRouteMaxInputChars.title': 'Total Route Input Chars Cap',\n 'field.autoRouteMaxInputChars.help': 'Total character budget across all candidates or steps in a single compare/select/track call.',\n 'field.autoMaxModelCallsPerTask.title': 'Model Call Budget per Task',\n 'field.autoMaxModelCallsPerTask.help': 'Estimated model call cap shared across semantic classification, intermediate routing, and final acceptance per task.',\n 'field.autoMaxModelCallsPerSession.title': 'Model Call Budget per Session',\n 'field.autoMaxModelCallsPerSession.help': 'Estimated model call cap shared across all automatic verification phases throughout the entire session.',\n 'field.autoVerifyThreshold.title': 'Pass Threshold',\n 'field.autoVerifyThreshold.help': 'Evidence score must meet this threshold and beat the empty-work baseline to allow completion; range 0–1.',\n 'field.autoVerifyRepeats.title': 'Auto Evaluation Repeats',\n 'field.autoVerifyRepeats.help': 'Number of scoring repeats per criterion for auto evaluation; 1 is low-cost preliminary screening.',\n 'field.autoVerifyMinToolCalls.title': 'Min Tool Calls (Smart Mode)',\n 'field.autoVerifyMinToolCalls.help': 'Auto-verification triggers only when reaching this tool evidence count and containing write/exec operations.',\n 'field.autoVerifyMaxChars.title': 'Max Evidence Characters',\n 'field.autoVerifyMaxChars.help': 'Maximum recent session evidence characters retained before sending to the judge.',\n 'field.autoVerifyMaxPerTask.title': 'Max Verifications per Task',\n 'field.autoVerifyMaxPerTask.help': 'Maximum verification attempts allowed after low-score feedback to prevent infinite loops.',\n 'field.autoVerifyMaxPerSession.title': 'Max Verifications per Session',\n 'field.autoVerifyMaxPerSession.help': 'Total auto-verification budget within the same session.',\n 'field.autoVerify.warnNotice': 'Automatic routing follows the phase order: select → compare → track → current_session. Sanitized tasks, Assistant trajectories, and real tool outputs are sent to the judge model. Candidate selection or insufficient progress steers the Agent to keep working; failed final acceptance requires remediation and re-verification.',\n\n // Section: Judge Model\n 'section.model': 'Judge Model',\n 'field.provider.title': 'Provider',\n 'field.provider.help': 'Routable model providers currently available in DSH.',\n 'field.model.title': 'Model',\n 'field.model.help': 'Specific model used as the independent judge.',\n 'field.reasoningEffort.title': 'Reasoning Effort',\n 'field.reasoningEffort.help': 'Leave empty to use the selected model default.',\n 'field.reasoningEffort.default': 'Model Default',\n 'field.maxTokens.title': 'Max Output Tokens',\n 'field.maxTokens.help': 'Maximum tokens allowed in a single judge model completion.',\n\n // Section: Execution\n 'section.execution': 'Execution',\n 'field.maxConcurrency.title': 'Max Concurrency',\n 'field.maxConcurrency.help': 'Maximum concurrent requests shared across all verifier tools.',\n 'field.maxRetries.title': 'Max Retries',\n 'field.maxRetries.help': 'Retry attempts for rate limits, timeouts, and transient network errors.',\n 'field.timeoutMs.title': 'Request Timeout',\n 'field.timeoutMs.help': 'Timeout for a single model request, in milliseconds.',\n 'field.cacheMaxEntries.title': 'Max Cache Entries',\n 'field.cacheMaxEntries.help': 'Maximum entries retained in the local persistent score cache.',\n\n // Section: Cost Estimation\n 'section.cost': 'Cost Estimation',\n 'field.estimatedInputUsdPerMillion.title': 'Input Price',\n 'field.estimatedInputUsdPerMillion.help': 'USD price per million input tokens, for statistical estimation only.',\n 'field.estimatedOutputUsdPerMillion.title': 'Output Price',\n 'field.estimatedOutputUsdPerMillion.help': 'USD price per million output tokens, for statistical estimation only.',\n\n // Settings Actions & Alerts\n 'settings.catalogFailures': 'Some model catalogs failed to load',\n 'settings.saved': 'Settings saved.',\n 'settings.reload': 'Reload',\n 'settings.save': 'Save Settings',\n 'settings.saving': 'Saving…',\n\n // Statistics Page\n 'stats.pageTitle': 'Verifier Tool Statistics',\n 'stats.updatedAt': 'Updated at {time} · Automatically records execution results of the 4 verifier tools',\n 'stats.daysUnit': '{days} Days',\n 'stats.currentSession': 'Current Session',\n 'stats.allSessions': 'All Sessions',\n 'stats.refresh': 'Refresh',\n 'stats.requestFailed': 'Failed to query statistics API',\n 'stats.hostRestartHint': 'Please make sure the host has restarted and loaded the latest version of dsh-llm-verifier.',\n 'stats.loading': 'Loading tool execution statistics…',\n 'stats.costSummary': '{days}-Day Estimated Cost',\n 'stats.callsSummary': '{invocations} tool calls · {calls} judge requests',\n 'stats.successCalls': 'Successful',\n 'stats.failedCalls': 'Failed',\n 'stats.avgDuration': 'Avg Duration',\n\n // Metrics\n 'metric.cacheHitRate': 'Cache Hit Rate',\n 'metric.cacheHitNote': '{hits} hits / {total} scored',\n 'metric.tokens': 'Tokens',\n 'metric.tokensNote': 'Input {input} · Output {output}',\n 'metric.avgModelCalls': 'Avg Model Calls',\n 'metric.avgModelCallsNote': '{attempts} attempts · {retries} retries',\n 'metric.scoringMode': 'Scoring Mode',\n 'metric.scoringModeNote': 'Top-logprobs · Explicit tags {explicit}',\n\n // Chart\n 'chart.title': 'Daily Tool Calls & Model Requests Trend',\n 'chart.ariaLabel': 'Daily tool calls and model requests trend',\n 'chart.legendToolCalls': 'Tool Calls',\n 'chart.legendModelCalls': 'Model Requests',\n\n // Tool breakdown table\n 'table.title': 'Tool Breakdown',\n 'table.toolCount': '{count} Tool Types',\n 'table.colTool': 'Tool',\n 'table.colInvocations': 'Calls',\n 'table.colSuccessRate': 'Success Rate',\n 'table.colAvgDuration': 'Avg Duration',\n 'table.colModelCalls': 'Model Calls',\n 'table.colTokens': 'Tokens',\n 'table.colCacheHits': 'Cache Hits',\n 'table.colEstimatedCost': 'Estimated Cost',\n 'table.empty': 'No verifier tool calls found in the selected range. Subsequent executions will appear here automatically.',\n\n // Recent invocations\n 'recent.title': 'Recent Invocations',\n 'recent.maxCount': 'Max 50',\n 'recent.empty': 'No records',\n\n // Model summary\n 'models.title': 'Model Summary',\n 'models.calls': '{calls} Requests',\n 'models.tokens': '{tokens} Tokens',\n 'models.empty': 'No model calls',\n\n // Slot label\n 'slot.statistics': 'Statistics',\n 'slot.globalDashboard': 'Verifier Dashboard',\n 'global.panelTitle': 'LLM Verifier Global Dashboard',\n 'global.panelIntro': 'Cross-session statistics, judge model metrics, and task acceptance overview.',\n 'guide.verifier.title': 'Verifier Stats',\n 'guide.verifier.desc': 'LLM verifier tool calls, duration and cost statistics',\n 'field.autoVerifyTeamTasks.title': 'Verify Team Tasks',\n 'field.autoVerifyTeamTasks.help': 'Automatically route progress and verify tasks when Agent Teams task status changes or completes.',\n 'field.autoVerifyPlanMode.title': 'Plan Mode Pre-verification',\n 'field.autoVerifyPlanMode.help': 'Automatically pre-verify plan feasibility and risks before exit_plan_mode presents it for user review.',\n 'field.autoVerifySubagents.title': 'Verify Subagent Sessions',\n 'field.autoVerifySubagents.help': 'Also run automatic routing and final acceptance on delegated child sessions. Off by default: child sessions are seeded with a real user message, so gating them spends extra judge budget and can repeatedly steer the subagent.',\n}\n\nexport const dictionaries = { zh, en }\n\nexport const toolLabels: Record<'zh' | 'en', Record<string, string>> = {\n zh: {\n verifier_route_classify: '路由分类',\n verifier_compare: '两项对比',\n verifier_select: '多项优选',\n verifier_track: '进度跟踪',\n verifier_current_session: '会话验收',\n },\n en: {\n verifier_route_classify: 'Route Classification',\n verifier_compare: 'Pairwise Comparison',\n verifier_select: 'Candidate Selection',\n verifier_track: 'Progress Tracking',\n verifier_current_session: 'Session Acceptance',\n },\n}\n\nexport function tFormat(template: string, params?: Record<string, string | number>): string {\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (match, key) => (key in params ? String(params[key]) : match))\n}\n\nexport function detectLanguage(): 'zh' | 'en' {\n if (typeof document === 'undefined') return 'en'\n const lang = (document.documentElement.lang || '').toLowerCase()\n return lang.startsWith('zh') ? 'zh' : 'en'\n}\n\nexport function useLanguage(): 'zh' | 'en' {\n const [lang, setLang] = useState<'zh' | 'en'>(detectLanguage)\n useEffect(() => {\n if (typeof document === 'undefined') return\n const update = () => { setLang(detectLanguage()) }\n update()\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {\n update()\n }\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang'] })\n return () => observer.disconnect()\n }, [])\n return lang\n}\n\nexport function compact(value: number, lang: 'zh' | 'en' = 'en'): string {\n const locale = lang === 'zh' ? 'zh-CN' : 'en-US'\n return new Intl.NumberFormat(locale, { notation: value >= 10_000 ? 'compact' : 'standard', maximumFractionDigits: value >= 1_000 ? 1 : 0 }).format(value)\n}\n\nexport function money(value: number): string {\n return '$' + value.toLocaleString('en-US', { minimumFractionDigits: value < 0.01 ? 4 : 2, maximumFractionDigits: value < 0.01 ? 4 : 2 })\n}\n\nexport function duration(value: number): string {\n if (value < 1000) return Math.round(value) + ' ms'\n if (value < 60_000) return (value / 1000).toFixed(1) + ' s'\n return (value / 60_000).toFixed(1) + ' min'\n}\n\nexport function dateTime(value: number, lang: 'zh' | 'en' = 'en'): string {\n const locale = lang === 'zh' ? 'zh-CN' : 'en-US'\n return new Intl.DateTimeFormat(locale, { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(value)\n}\n","import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { ModelProviderGroup, SettingsNamespaceView } from '@deepseek-ai/dsh-api-remotes/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-slots'\nimport { Button, IconDataOutline16, IconRefreshOutline16, Input } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n zh, en, dictionaries, toolLabels, tFormat, useLanguage, detectLanguage,\n compact, money, duration, dateTime, type I18nDict,\n} from './client-i18n.ts'\n\nexport { zh, en, dictionaries, toolLabels, tFormat, useLanguage, detectLanguage, compact, money, duration, dateTime, type I18nDict }\n\nconst NS = 'llm-verifier'\ninterface Values { enabled: boolean; autoVerifyMode: 'manual'|'smart'|'strict'; autoVerifyThreshold: number; autoVerifyRepeats: number; autoVerifyMinToolCalls: number; autoVerifyMaxChars: number; autoVerifyMaxPerTask: number; autoVerifyMaxPerSession: number; autoRouteSemantic: boolean; autoRouteMinConfidence: number; autoRouteMaxCandidates: number; autoRouteMaxPerTask: number; autoRouteMaxPerSession: number; autoTrackCompletionThreshold: number; autoRouteMaxItemChars: number; autoRouteMaxInputChars: number; autoMaxModelCallsPerTask: number; autoMaxModelCallsPerSession: number; autoVerifyTeamTasks: boolean; autoVerifyPlanMode: boolean; provider: string; model: string; reasoningEffort?: string; maxTokens: number; maxConcurrency: number; maxRetries: number; timeoutMs: number; cacheMaxEntries: number; estimatedInputUsdPerMillion: number; estimatedOutputUsdPerMillion: number; autoVerifySubagents: boolean }\ninterface Loaded { groups: readonly ModelProviderGroup[]; settings: SettingsNamespaceView; writable: boolean; failures: string[] }\ninterface RunStats { calls: number; attempts: number; retries: number; inputTokens: number; cachedInputTokens: number; outputTokens: number; reasoningTokens: number; cacheHits: number; cacheMisses: number; estimatedCostUsd: number; topLogprobScores: number; explicitTagScores: number }\ninterface InvocationRecord { id: string; toolName: string; sessionId?: string; startedAt: number; finishedAt: number; durationMs: number; success: boolean; errorName?: string; errorMessage?: string; provider: string; model: string; stats: RunStats }\ninterface DailyStatistics { date: string; invocations: number; successes: number; failures: number; calls: number; tokens: number; estimatedCostUsd: number; byTool: Record<string, number> }\ninterface ToolStatistics { toolName: string; invocations: number; successes: number; failures: number; successRate: number; averageDurationMs: number; calls: number; tokens: number; cacheHits: number; cacheMisses: number; estimatedCostUsd: number }\ninterface ModelStatistics { provider: string; model: string; invocations: number; calls: number; tokens: number; estimatedCostUsd: number }\ninterface Totals extends RunStats { invocations: number; successes: number; failures: number; successRate: number; averageDurationMs: number; tokens: number; cacheHitRate: number }\ninterface StatisticsOverview { generatedAt: number; fromMs: number; toMs: number; sessionId?: string; totals: Totals; daily: DailyStatistics[]; tools: ToolStatistics[]; models: ModelStatistics[]; recent: InvocationRecord[] }\ninterface VerifierRemote {\n session: {\n modelCatalog(): Promise<{\n ok: boolean\n value: { groups: readonly ModelProviderGroup[]; failures: readonly { id?: string; provider?: string; name?: string; message: string }[] }\n error: { message: string }\n }>\n }\n settings: {\n describe(): Promise<{\n ok: boolean\n value: { writable: boolean; namespaces: readonly SettingsNamespaceView[] }\n error: { message: string }\n }>\n update(\n ns: string,\n patch: Record<string, unknown>,\n expectedRevision: number | undefined,\n ): Promise<{\n ok: boolean\n value: SettingsNamespaceView\n error: { message: string }\n }>\n }\n}\n\ninterface VerifierSettingsProps { remote: VerifierRemote }\ninterface StatisticsPageProps {\n sessionId?: string\n isGlobal?: boolean\n rpc: {\n call(channel: string, endpoint: string, payload: unknown, signal?: AbortSignal): Promise<{ ok: boolean; value?: unknown; error?: { message: string } }>\n }\n}\n\nconst shell: React.CSSProperties = { width: '100%', maxWidth: 720, display: 'flex', flexDirection: 'column', gap: 12, padding: '0 0 32px', color: 'var(--dsw-alias-label-primary)' }\nconst settingsHeading: React.CSSProperties = { margin: 0, fontSize: 16, fontWeight: 500, lineHeight: '24px', color: 'var(--dsw-alias-label-primary)' }\nconst settingsIntro: React.CSSProperties = { margin: 0, fontSize: 14, lineHeight: '22px', color: 'var(--dsw-alias-label-tertiary)' }\nconst group: React.CSSProperties = { width: '100%', display: 'flex', flexDirection: 'column', borderTop: '1px solid var(--dsw-alias-border-l2)' }\nconst groupTitle: React.CSSProperties = { margin: 0, padding: '18px 0 8px', fontSize: 14, fontWeight: 500, lineHeight: '22px', color: 'var(--dsw-alias-label-primary)' }\nconst row: React.CSSProperties = { minHeight: 64, display: 'grid', gridTemplateColumns: 'minmax(180px, 1fr) minmax(230px, 288px)', gap: 24, alignItems: 'center', padding: '12px 0', borderBottom: '1px solid var(--dsw-alias-border-l2)' }\nconst selectStyle: React.CSSProperties = { boxSizing: 'border-box', width: '100%', height: 36, padding: '0 34px 0 12px', borderRadius: 8, color: 'var(--dsw-alias-label-primary)', background: 'var(--dsw-alias-bg-input)', border: '1px solid var(--dsw-alias-border-l2)', font: 'inherit', fontSize: 14, lineHeight: '22px', outline: 'none' }\nconst toggleStyle = (enabled: boolean): React.CSSProperties => ({ position: 'relative', justifySelf: 'end', width: 40, height: 22, padding: 0, border: 0, borderRadius: 999, cursor: 'pointer', transition: 'background .15s ease', background: enabled ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-bg-input)' })\nconst toggleThumbStyle = (enabled: boolean): React.CSSProperties => ({ position: 'absolute', top: 3, left: enabled ? 21 : 3, width: 16, height: 16, borderRadius: '50%', background: 'var(--dsw-static-neutral-00, #fff)', boxShadow: '0 1px 3px rgba(0,0,0,.28)', transition: 'left .15s ease' })\nconst dashboardCard: React.CSSProperties = { border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.13))', background: 'color-mix(in srgb, var(--dsw-alias-bg-module, #171925) 88%, transparent)', borderRadius: 16, boxShadow: '0 12px 36px rgba(0,0,0,.12)' }\nconst muted: React.CSSProperties = { color: 'var(--dsw-text-secondary)', fontSize: 12 }\nconst toolColors: Record<string, string> = { verifier_route_classify: '#d97706', verifier_compare: '#4f8cff', verifier_select: '#8b6df6', verifier_track: '#2fc5c9', verifier_current_session: '#f5a524' }\n\nfunction record(value: unknown): Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : {} }\nfunction values(view: SettingsNamespaceView): Values { const v=record(view.value); const mode=v.autoVerifyMode==='manual'||v.autoVerifyMode==='strict'?v.autoVerifyMode:'smart'; return { enabled:v.enabled!==false,autoVerifyMode:mode,autoVerifyThreshold:Number(v.autoVerifyThreshold??.65),autoVerifyRepeats:Number(v.autoVerifyRepeats??1),autoVerifyMinToolCalls:Number(v.autoVerifyMinToolCalls??3),autoVerifyMaxChars:Number(v.autoVerifyMaxChars??80000),autoVerifyMaxPerTask:Number(v.autoVerifyMaxPerTask??2),autoVerifyMaxPerSession:Number(v.autoVerifyMaxPerSession??8),autoRouteSemantic:v.autoRouteSemantic!==false,autoRouteMinConfidence:Number(v.autoRouteMinConfidence??.9),autoRouteMaxCandidates:Number(v.autoRouteMaxCandidates??8),autoRouteMaxPerTask:Number(v.autoRouteMaxPerTask??2),autoRouteMaxPerSession:Number(v.autoRouteMaxPerSession??8),autoTrackCompletionThreshold:Number(v.autoTrackCompletionThreshold??.8),autoRouteMaxItemChars:Number(v.autoRouteMaxItemChars??20000),autoRouteMaxInputChars:Number(v.autoRouteMaxInputChars??60000),autoMaxModelCallsPerTask:Number(v.autoMaxModelCallsPerTask??64),autoMaxModelCallsPerSession:Number(v.autoMaxModelCallsPerSession??240),autoVerifyTeamTasks:v.autoVerifyTeamTasks!==false,autoVerifyPlanMode:v.autoVerifyPlanMode!==false,provider:String(v.provider??''),model:String(v.model??''),...(typeof v.reasoningEffort==='string'?{reasoningEffort:v.reasoningEffort}:{}),maxTokens:Number(v.maxTokens??32768),maxConcurrency:Number(v.maxConcurrency??8),maxRetries:Number(v.maxRetries??3),timeoutMs:Number(v.timeoutMs??300000),cacheMaxEntries:Number(v.cacheMaxEntries??10000),estimatedInputUsdPerMillion:Number(v.estimatedInputUsdPerMillion??0),estimatedOutputUsdPerMillion:Number(v.estimatedOutputUsdPerMillion??0),autoVerifySubagents:v.autoVerifySubagents===true } }\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n/** The endpoint answered but rejected the request: a transport fallback would only repeat it. */\nclass EndpointError extends Error {}\nfunction Label({title,help}:{title:string;help:string}) { return <div style={{minWidth:0}}><div style={{fontSize:14,fontWeight:400,lineHeight:'22px',color:'var(--dsw-alias-label-primary)'}}>{title}</div><div style={{fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-label-tertiary)',marginTop:2}}>{help}</div></div> }\nfunction GroupTitle({children}:{children:React.ReactNode}) { return <h3 style={groupTitle}>{children}</h3> }\nfunction startOfRange(days: number): number { const date = new Date(); date.setHours(0,0,0,0); date.setDate(date.getDate() - days + 1); return date.getTime() }\nfunction endOfToday(): number { const date = new Date(); date.setHours(0,0,0,0); date.setDate(date.getDate() + 1); return date.getTime() }\n\nexport function VerifierSettings({ remote }: VerifierSettingsProps) {\n const lang = useLanguage()\n const t = dictionaries[lang]\n const [loaded,setLoaded]=useState<Loaded|null>(null); const [draft,setDraft]=useState<Values|null>(null); const [busy,setBusy]=useState(false); const [error,setError]=useState<string|null>(null); const [saved,setSaved]=useState(false); const [editing,setEditing]=useState<Record<string,string>>({})\n const load=async()=>{setError(null);try{const [m,s]=await Promise.all([remote.session.modelCatalog(),remote.settings.describe()]);if(!m.ok)throw new Error(m.error.message);if(!s.ok)throw new Error(s.error.message);const view=s.value.namespaces.find((x:SettingsNamespaceView)=>x.ns===NS);if(!view)throw new Error(t['settings.nsUnregistered']);const next={groups:m.value.groups,settings:view,writable:s.value.writable,failures:m.value.failures.map((f: { id?: string; provider?: string; name?: string; message: string })=>(f.id??f.provider??f.name??'unknown')+': '+f.message)};setLoaded(next);setDraft(values(view));setEditing({})}catch(e){setError(message(e))}}\n useEffect(()=>{void load()},[])\n const models=useMemo(()=>loaded?.groups.find(g=>g.id===draft?.provider)?.models??[],[loaded,draft?.provider])\n const selected=models.find(m=>m.id===draft?.model); const efforts=selected?.reasoning?.efforts??[]\n const patch=<K extends keyof Values>(key:K,value:Values[K])=>{setSaved(false);setDraft(v=>v?{...v,[key]:value}:v)}\n const save=async()=>{if(!loaded||!draft)return;setBusy(true);setSaved(false);setError(null);try{const section={...record(loaded.settings.user),...draft};if(!draft.reasoningEffort)delete section.reasoningEffort;const res=await remote.settings.update(NS,section as never,loaded.settings.revision);if(!res.ok)throw new Error(res.error.message);setLoaded(v=>v?{...v,settings:res.value}:v);setDraft(values(res.value));setEditing({});setSaved(true)}catch(e){setError(message(e))}finally{setBusy(false)}}\n if(!loaded||!draft)return <div style={shell}><h2 style={settingsHeading}>{t['settings.title']}</h2><p style={settingsIntro}>{error??t['settings.loading']}</p>{error&&<div><Button variant=\"outline\" onClick={()=>void load()}>{t['settings.retry']}</Button></div>}</div>\n // Fractional settings are typed character by character, so the raw text is\n // kept while the field has focus: a controlled type=\"number\" input rewrites\n // \"0.\" back to \"0\" and swallows the decimal point. The parsed value is\n // committed on every keystroke that parses, and blur restores canonical text.\n const numeric=(key:keyof Values,min=0)=><Input\n style={{width:'100%',height:36,borderRadius:8}}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={busy}\n aria-label={(t[('field.'+key+'.title') as keyof I18nDict] as string|undefined)??String(key)}\n value={editing[key]??String(draft[key]??'')}\n onChange={e=>{const raw=e.target.value;setEditing(current=>current[key]===raw?current:{...current,[key]:raw});const parsed=Number(raw);if(raw.trim()!==''&&Number.isFinite(parsed)&&parsed>=min)patch(key,parsed as never)}}\n onBlur={()=>setEditing(current=>{if(!(key in current))return current;const next={...current};delete next[key];return next})}\n />\n return <div style={shell}>\n <h2 style={settingsHeading}>{t['settings.title']}</h2>\n <p style={settingsIntro}>{t['settings.intro']}</p>\n\n <section style={group}><GroupTitle>{t['section.tools']}</GroupTitle>\n <div style={row}><Label title={t['field.enabled.title']} help={draft.enabled?t['field.enabled.helpOn']:t['field.enabled.helpOff']}/><button type=\"button\" role=\"switch\" aria-checked={draft.enabled} aria-label={t['field.enabled.title']} onClick={()=>patch('enabled',!draft.enabled)} style={toggleStyle(draft.enabled)}><span style={toggleThumbStyle(draft.enabled)}/></button></div>\n {!draft.enabled&&<p style={{margin:'8px 0 0',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{t['field.enabled.warnDisabled']}</p>}\n </section>\n\n <section style={group}><GroupTitle>{t['section.autoVerify']}</GroupTitle>\n <div style={row}><Label title={t['field.autoVerifyMode.title']} help={t['field.autoVerifyMode.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.autoVerifyMode.title']} value={draft.autoVerifyMode} onChange={e=>patch('autoVerifyMode',e.target.value as Values['autoVerifyMode'])}><option value=\"manual\">{t['field.autoVerifyMode.manual']}</option><option value=\"smart\">{t['field.autoVerifyMode.smart']}</option><option value=\"strict\">{t['field.autoVerifyMode.strict']}</option></select></div>\n <div style={row}><Label title={t['field.autoRouteSemantic.title']} help={t['field.autoRouteSemantic.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoRouteSemantic} aria-label={t['field.autoRouteSemantic.title']} onClick={()=>patch('autoRouteSemantic',!draft.autoRouteSemantic)} style={toggleStyle(draft.autoRouteSemantic)}><span style={toggleThumbStyle(draft.autoRouteSemantic)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifyTeamTasks.title']} help={t['field.autoVerifyTeamTasks.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifyTeamTasks} aria-label={t['field.autoVerifyTeamTasks.title']} onClick={()=>patch('autoVerifyTeamTasks',!(draft.autoVerifyTeamTasks))} style={toggleStyle(draft.autoVerifyTeamTasks)}><span style={toggleThumbStyle(draft.autoVerifyTeamTasks)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifySubagents.title']} help={t['field.autoVerifySubagents.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifySubagents} aria-label={t['field.autoVerifySubagents.title']} onClick={()=>patch('autoVerifySubagents',!draft.autoVerifySubagents)} style={toggleStyle(draft.autoVerifySubagents)}><span style={toggleThumbStyle(draft.autoVerifySubagents)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifyPlanMode.title']} help={t['field.autoVerifyPlanMode.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifyPlanMode} aria-label={t['field.autoVerifyPlanMode.title']} onClick={()=>patch('autoVerifyPlanMode',!(draft.autoVerifyPlanMode))} style={toggleStyle(draft.autoVerifyPlanMode)}><span style={toggleThumbStyle(draft.autoVerifyPlanMode)}/></button></div>\n <div style={row}><Label title={t['field.autoRouteMinConfidence.title']} help={t['field.autoRouteMinConfidence.help']}/>{numeric('autoRouteMinConfidence',0)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxCandidates.title']} help={t['field.autoRouteMaxCandidates.help']}/>{numeric('autoRouteMaxCandidates',3)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxPerTask.title']} help={t['field.autoRouteMaxPerTask.help']}/>{numeric('autoRouteMaxPerTask',1)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxPerSession.title']} help={t['field.autoRouteMaxPerSession.help']}/>{numeric('autoRouteMaxPerSession',1)}</div>\n <div style={row}><Label title={t['field.autoTrackCompletionThreshold.title']} help={t['field.autoTrackCompletionThreshold.help']}/>{numeric('autoTrackCompletionThreshold',0)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxItemChars.title']} help={t['field.autoRouteMaxItemChars.help']}/>{numeric('autoRouteMaxItemChars',100)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxInputChars.title']} help={t['field.autoRouteMaxInputChars.help']}/>{numeric('autoRouteMaxInputChars',1000)}</div>\n <div style={row}><Label title={t['field.autoMaxModelCallsPerTask.title']} help={t['field.autoMaxModelCallsPerTask.help']}/>{numeric('autoMaxModelCallsPerTask',1)}</div>\n <div style={row}><Label title={t['field.autoMaxModelCallsPerSession.title']} help={t['field.autoMaxModelCallsPerSession.help']}/>{numeric('autoMaxModelCallsPerSession',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyThreshold.title']} help={t['field.autoVerifyThreshold.help']}/>{numeric('autoVerifyThreshold',0)}</div>\n <div style={row}><Label title={t['field.autoVerifyRepeats.title']} help={t['field.autoVerifyRepeats.help']}/>{numeric('autoVerifyRepeats',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMinToolCalls.title']} help={t['field.autoVerifyMinToolCalls.help']}/>{numeric('autoVerifyMinToolCalls',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxChars.title']} help={t['field.autoVerifyMaxChars.help']}/>{numeric('autoVerifyMaxChars',1000)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxPerTask.title']} help={t['field.autoVerifyMaxPerTask.help']}/>{numeric('autoVerifyMaxPerTask',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxPerSession.title']} help={t['field.autoVerifyMaxPerSession.help']}/>{numeric('autoVerifyMaxPerSession',1)}</div>\n {draft.autoVerifyMode!=='manual'&&<p style={{margin:'8px 0 0',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{t['field.autoVerify.warnNotice']}</p>}\n </section>\n\n <section style={group}><GroupTitle>{t['section.model']}</GroupTitle>\n <div style={row}><Label title={t['field.provider.title']} help={t['field.provider.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.provider.title']} value={draft.provider} onChange={e=>{const provider=e.target.value;const first=loaded.groups.find(g=>g.id===provider)?.models[0];setDraft({...draft,provider,...(first?{model:first.id,reasoningEffort:first.reasoning?.defaultEffort}:{})})}}>{loaded.groups.map(g=><option key={g.id} value={g.id}>{g.name} · {g.id}</option>)}</select></div>\n <div style={row}><Label title={t['field.model.title']} help={t['field.model.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.model.title']} value={draft.model} onChange={e=>{const model=e.target.value;const found=models.find(m=>m.id===model);setDraft({...draft,model,...(found?.reasoning?.defaultEffort?{reasoningEffort:found.reasoning.defaultEffort}:{reasoningEffort:undefined})})}}>{models.map(m=><option key={m.id} value={m.id}>{m.name} · {m.id}</option>)}</select></div>\n <div style={row}><Label title={t['field.reasoningEffort.title']} help={t['field.reasoningEffort.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.reasoningEffort.title']} value={draft.reasoningEffort??''} onChange={e=>patch('reasoningEffort',e.target.value||undefined)}><option value=\"\">{t['field.reasoningEffort.default']}</option>{efforts.map(e=><option key={e.id} value={e.id}>{e.name}</option>)}</select></div>\n <div style={row}><Label title={t['field.maxTokens.title']} help={t['field.maxTokens.help']}/>{numeric('maxTokens',1)}</div>\n </section>\n\n <section style={group}><GroupTitle>{t['section.execution']}</GroupTitle>\n <div style={row}><Label title={t['field.maxConcurrency.title']} help={t['field.maxConcurrency.help']}/>{numeric('maxConcurrency',1)}</div>\n <div style={row}><Label title={t['field.maxRetries.title']} help={t['field.maxRetries.help']}/>{numeric('maxRetries',0)}</div>\n <div style={row}><Label title={t['field.timeoutMs.title']} help={t['field.timeoutMs.help']}/>{numeric('timeoutMs',1)}</div>\n <div style={row}><Label title={t['field.cacheMaxEntries.title']} help={t['field.cacheMaxEntries.help']}/>{numeric('cacheMaxEntries',1)}</div>\n </section>\n\n <section style={group}><GroupTitle>{t['section.cost']}</GroupTitle>\n <div style={row}><Label title={t['field.estimatedInputUsdPerMillion.title']} help={t['field.estimatedInputUsdPerMillion.help']}/>{numeric('estimatedInputUsdPerMillion',0)}</div>\n <div style={row}><Label title={t['field.estimatedOutputUsdPerMillion.title']} help={t['field.estimatedOutputUsdPerMillion.help']}/>{numeric('estimatedOutputUsdPerMillion',0)}</div>\n </section>\n\n {loaded.failures.length>0&&<div style={{padding:'10px 12px',borderRadius:8,background:'var(--dsw-alias-state-warn-bg)',color:'var(--dsw-alias-state-warn-label)',fontSize:12,lineHeight:'18px'}}><div style={{fontWeight:500,marginBottom:3}}>{t['settings.catalogFailures']}</div>{loaded.failures.map(x=><div key={x}>{x}</div>)}</div>}\n {error&&<p style={{margin:0,fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-error-primary)'}}>{error}</p>}{saved&&<p style={{margin:0,fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-success-primary)'}}>{t['settings.saved']}</p>}\n <div style={{display:'flex',justifyContent:'flex-end',gap:8,paddingTop:4}}><Button variant=\"outline\" disabled={busy} onClick={()=>void load()}>{t['settings.reload']}</Button><Button variant=\"primary\" disabled={busy||!loaded.writable} onClick={()=>void save()}>{busy?t['settings.saving']:t['settings.save']}</Button></div>\n </div>\n}\n\nfunction Metric({ label, value, note, accent }:{label:string;value:string;note:string;accent?:string}) {\n return <div style={{...dashboardCard,padding:'16px 18px',minWidth:0}}><div style={muted}>{label}</div><div style={{fontSize:25,fontWeight:750,lineHeight:1.2,margin:'7px 0 5px',color:accent}}>{value}</div><div style={{...muted,overflow:'hidden',textOverflow:'ellipsis',whiteSpace:'nowrap'}}>{note}</div></div>\n}\n\nfunction TrendChart({ daily, days, lang }:{daily:DailyStatistics[];days:number;lang:'zh'|'en'}) {\n const t = dictionaries[lang]\n const rows=useMemo(()=>{const map=new Map(daily.map(row=>[row.date,row]));const values:DailyStatistics[]=[];const start=new Date(startOfRange(days));for(let i=0;i<days;i+=1){const date=new Date(start);date.setDate(start.getDate()+i);const key=[date.getFullYear(),String(date.getMonth()+1).padStart(2,'0'),String(date.getDate()).padStart(2,'0')].join('-');values.push(map.get(key)??{date:key,invocations:0,successes:0,failures:0,calls:0,tokens:0,estimatedCostUsd:0,byTool:{}})}return values},[daily,days])\n const width=760,height=230,pad={l:44,r:24,t:20,b:38};const innerW=width-pad.l-pad.r,innerH=height-pad.t-pad.b\n const max=Math.max(1,...rows.flatMap(row=>[row.invocations,row.calls]));const x=(index:number)=>pad.l+(rows.length<=1?innerW/2:index*innerW/(rows.length-1));const y=(value:number)=>pad.t+innerH-value/max*innerH\n const points=rows.map((row,index)=>`${x(index)},${y(row.calls)}`).join(' ');const step=rows.length>16?Math.ceil(rows.length/7):Math.max(1,Math.ceil(rows.length/7));const barWidth=Math.max(3,Math.min(18,innerW/Math.max(rows.length,1)*.55))\n return <div style={{width:'100%',overflowX:'auto'}}><svg viewBox={`0 0 ${width} ${height}`} style={{display:'block',width:'100%',minWidth:620,height:'auto'}} aria-label={t['chart.ariaLabel']}>\n {[0,.25,.5,.75,1].map(ratio=><g key={ratio}><line x1={pad.l} x2={width-pad.r} y1={pad.t+innerH*ratio} y2={pad.t+innerH*ratio} stroke=\"rgba(148,163,184,.16)\"/><text x={pad.l-8} y={pad.t+innerH*ratio+4} textAnchor=\"end\" fontSize=\"10\" fill=\"var(--dsw-text-secondary)\">{Math.round(max*(1-ratio))}</text></g>)}\n {rows.map((row,index)=><rect key={row.date} x={x(index)-barWidth/2} y={y(row.invocations)} width={barWidth} height={pad.t+innerH-y(row.invocations)} rx=\"2\" fill=\"#4f8cff\" opacity=\".82\"/>)}\n <polyline points={points} fill=\"none\" stroke=\"#5ed7e8\" strokeWidth=\"2.4\" strokeLinejoin=\"round\" strokeLinecap=\"round\"/>\n {rows.map((row,index)=>index%step===0||index===rows.length-1?<text key={row.date} x={x(index)} y={height-14} textAnchor=\"middle\" fontSize=\"10\" fill=\"var(--dsw-text-secondary)\">{Number(row.date.slice(5,7))}/{Number(row.date.slice(8,10))}</text>:null)}\n </svg><div style={{display:'flex',justifyContent:'center',gap:18,...muted}}><span><i style={{display:'inline-block',width:8,height:8,borderRadius:2,background:'#4f8cff',marginRight:6}}/>{t['chart.legendToolCalls']}</span><span><i style={{display:'inline-block',width:14,height:2,background:'#5ed7e8',marginRight:6,verticalAlign:'middle'}}/>{t['chart.legendModelCalls']}</span></div></div>\n}\n\nexport function StatisticsPage({ sessionId, rpc, isGlobal }: StatisticsPageProps) {\n const lang = useLanguage()\n const t = dictionaries[lang]\n const labels = toolLabels[lang]\n const [days, setDays] = useState(30)\n const [sessionOnly, setSessionOnly] = useState(!isGlobal && Boolean(sessionId))\n const [data, setData] = useState<StatisticsOverview | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [refresh, setRefresh] = useState(0)\n // Data belongs to the range/session that produced it: keeping the previous\n // range's numbers under an error banner reads as if they were current.\n const queryKey = days + '|' + sessionOnly + '|' + String(sessionId ?? '')\n const lastQueryKey = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n const controller = new AbortController()\n setLoading(true); setError(null)\n if (lastQueryKey.current !== undefined && lastQueryKey.current !== queryKey) setData(null)\n lastQueryKey.current = queryKey\n const effectiveSessionId = sessionOnly && sessionId ? String(sessionId) : undefined\n const queryPayload = {\n fromMs: startOfRange(days),\n toMs: endOfToday(),\n timezoneOffsetMinutes: new Date().getTimezoneOffset(),\n recentLimit: 50,\n ...(effectiveSessionId ? { sessionId: effectiveSessionId } : {}),\n }\n\n const fetchOverview = async (): Promise<StatisticsOverview> => {\n if (rpc && typeof rpc.call === 'function') {\n try {\n const result = await rpc.call('/api', 'llm-verifier/statistics', queryPayload, controller.signal)\n if (result && result.ok) {\n return result.value as StatisticsOverview\n }\n if (result && result.ok === false) {\n throw new EndpointError(result.error?.message ?? t['stats.requestFailed'])\n }\n } catch (rpcError) {\n if (controller.signal.aborted) throw rpcError\n // A business rejection is the host's real answer; retrying it over the\n // raw fetch endpoint would only duplicate the request and hide it.\n if (rpcError instanceof EndpointError) throw rpcError\n console.warn('[llm-verifier] rpc.call failed, trying fetch fallback:', rpcError)\n }\n }\n\n try {\n const response = await fetch('/api/llm-verifier/statistics', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(queryPayload),\n signal: controller.signal,\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText || t['stats.requestFailed']}`)\n }\n const data = await response.json()\n if (data && data.ok === true) {\n return data.value as StatisticsOverview\n }\n if (data && data.type === 'server-response' && data.result?.ok === true) {\n return data.result.value as StatisticsOverview\n }\n throw new EndpointError(data?.error?.message ?? data?.result?.error?.message ?? t['stats.requestFailed'])\n } catch (fetchError) {\n if (controller.signal.aborted) throw fetchError\n if (fetchError instanceof EndpointError) throw fetchError\n // Hosts without the exact Fetch route registry only answer on the plugin's own channel.\n if (rpc && typeof rpc.call === 'function') {\n const legacy = await rpc.call('/llm-verifier', 'statistics', queryPayload, controller.signal)\n if (legacy && legacy.ok) return legacy.value as StatisticsOverview\n }\n throw fetchError\n }\n }\n\n void fetchOverview()\n .then(overview => {\n if (!controller.signal.aborted) setData(overview)\n })\n .catch((cause: unknown) => {\n if (!controller.signal.aborted) setError(message(cause))\n })\n .finally(() => {\n if (!controller.signal.aborted) setLoading(false)\n })\n return () => controller.abort()\n }, [days, sessionOnly, sessionId, refresh, rpc, t, queryKey])\n\n const totals = data?.totals\n return <main style={{ height: '100%', overflow: 'auto', boxSizing: 'border-box', padding: '22px clamp(16px, 3vw, 38px) 48px', color: 'var(--dsw-text-primary)', background: 'radial-gradient(circle at 10% 0%, rgba(115,77,255,.09), transparent 32%), radial-gradient(circle at 100% 8%, rgba(47,197,201,.07), transparent 28%)' }}>\n <div style={{ maxWidth: 1180, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: 16 }}>\n <header style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: 16, flexWrap: 'wrap' }}>\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n <span style={{ display: 'grid', placeItems: 'center', width: 34, height: 34, borderRadius: 10, background: 'rgba(79,140,255,.14)', color: '#6da0ff' }}>\n <IconDataOutline16 size={18} />\n </span>\n <h2 style={{ margin: 0, fontSize: 23 }}>{isGlobal ? t['global.panelTitle'] : t['stats.pageTitle']}</h2>\n </div>\n <p style={{ margin: '7px 0 0 44px', ...muted }}>{isGlobal ? t['global.panelIntro'] : tFormat(t['stats.updatedAt'], { time: data ? dateTime(data.generatedAt, lang) : '--' })}</p>\n </div>\n <div style={{ display: 'flex', gap: 8, alignItems: 'center', flexWrap: 'wrap' }}>\n <div style={{ display: 'flex', padding: 3, borderRadius: 10, background: 'var(--dsw-surface-sunken)', border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.12))' }}>\n {[7, 30, 90].map(value => <button key={value} aria-pressed={days === value} onClick={() => setDays(value)} style={{ border: 0, borderRadius: 7, padding: '6px 10px', cursor: 'pointer', color: days === value ? '#fff' : 'var(--dsw-text-secondary)', background: days === value ? '#3f68d8' : 'transparent' }}>{tFormat(t['stats.daysUnit'], { days: value })}</button>)}\n </div>\n {Boolean(sessionId) && <button aria-pressed={sessionOnly} onClick={() => setSessionOnly(value => !value)} style={{ border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.15))', borderRadius: 9, padding: '7px 11px', cursor: 'pointer', color: 'var(--dsw-text-primary)', background: sessionOnly ? 'rgba(79,140,255,.18)' : 'var(--dsw-surface-sunken)' }}>{sessionOnly ? t['stats.currentSession'] : t['stats.allSessions']}</button>}\n <button title={t['stats.refresh']} onClick={() => setRefresh(value => value + 1)} style={{ display: 'grid', placeItems: 'center', width: 34, height: 34, borderRadius: 9, border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.15))', color: 'var(--dsw-text-primary)', background: 'var(--dsw-surface-sunken)', cursor: 'pointer' }}><IconRefreshOutline16 size={16} /></button>\n </div>\n </header>\n {error && <div style={{ ...dashboardCard, padding: 18, borderColor: 'var(--dsw-danger, #e85858)', color: 'var(--dsw-danger, #e85858)' }}>{error}<div style={{ ...muted, marginTop: 6 }}>{t['stats.hostRestartHint']}</div></div>}\n {loading && !data ? <div style={{ ...dashboardCard, padding: 32, textAlign: 'center', ...muted }}>{t['stats.loading']}</div> : <>\n <section style={{ ...dashboardCard, padding: '22px 24px', display: 'grid', gridTemplateColumns: 'minmax(220px,1.4fr) minmax(240px,1fr)', gap: 24, alignItems: 'center' }}>\n <div>\n <div style={muted}>{tFormat(t['stats.costSummary'], { days })}</div>\n <div style={{ fontSize: 38, fontWeight: 780, letterSpacing: '-.03em', margin: '5px 0' }}>{money(totals?.estimatedCostUsd ?? 0)}</div>\n <div style={muted}>{tFormat(t['stats.callsSummary'], { invocations: compact(totals?.invocations ?? 0, lang), calls: compact(totals?.calls ?? 0, lang) })}</div>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr auto', gap: '9px 16px', fontSize: 13 }}>\n <span style={muted}>{t['stats.successCalls']}</span><strong>{compact(totals?.successes ?? 0, lang)} <small style={{ color: '#77d49b' }}>▲ {((totals?.successRate ?? 0) * 100).toFixed(1)}%</small></strong>\n <span style={muted}>{t['stats.failedCalls']}</span><strong>{compact(totals?.failures ?? 0, lang)}</strong>\n <span style={muted}>{t['stats.avgDuration']}</span><strong>{duration(totals?.averageDurationMs ?? 0)}</strong>\n </div>\n </section>\n <section style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit,minmax(180px,1fr))', gap: 12 }}>\n <Metric label={t['metric.cacheHitRate']} value={((totals?.cacheHitRate ?? 0) * 100).toFixed(1) + '%'} note={tFormat(t['metric.cacheHitNote'], { hits: compact(totals?.cacheHits ?? 0, lang), total: compact((totals?.cacheHits ?? 0) + (totals?.cacheMisses ?? 0), lang) })} accent=\"#b7dd64\" />\n <Metric label={t['metric.tokens']} value={compact(totals?.tokens ?? 0, lang)} note={tFormat(t['metric.tokensNote'], { input: compact((totals?.inputTokens ?? 0) + (totals?.cachedInputTokens ?? 0), lang), output: compact(totals?.outputTokens ?? 0, lang) })} />\n <Metric label={t['metric.avgModelCalls']} value={(totals?.invocations ?? 0) > 0 ? ((totals?.calls ?? 0) / (totals?.invocations ?? 1)).toFixed(1) : '0'} note={tFormat(t['metric.avgModelCallsNote'], { attempts: compact(totals?.attempts ?? 0, lang), retries: compact(totals?.retries ?? 0, lang) })} />\n <Metric label={t['metric.scoringMode']} value={compact(totals?.topLogprobScores ?? 0, lang)} note={tFormat(t['metric.scoringModeNote'], { explicit: compact(totals?.explicitTagScores ?? 0, lang) })} />\n </section>\n <section style={{ ...dashboardCard, padding: '18px 20px 16px' }}><div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 4 }}><strong>{t['chart.title']}</strong><span style={muted}>{sessionOnly ? t['stats.currentSession'] : t['stats.allSessions']}</span></div><TrendChart daily={data?.daily ?? []} days={days} lang={lang} /></section>\n <section style={{ ...dashboardCard, padding: '18px 18px 8px', overflow: 'hidden' }}><div style={{ display: 'flex', justifyContent: 'space-between', margin: '0 2px 12px' }}><strong>{t['table.title']}</strong><span style={muted}>{tFormat(t['table.toolCount'], { count: (data?.tools ?? []).length })}</span></div><div style={{ overflowX: 'auto' }}><table style={{ width: '100%', borderCollapse: 'collapse', fontSize: 13, minWidth: 760 }}><thead><tr style={{ textAlign: 'left', color: 'var(--dsw-text-secondary)', background: 'var(--dsw-surface-sunken)' }}>{[t['table.colTool'], t['table.colInvocations'], t['table.colSuccessRate'], t['table.colAvgDuration'], t['table.colModelCalls'], t['table.colTokens'], t['table.colCacheHits'], t['table.colEstimatedCost']].map(value => <th key={value} style={{ padding: '10px 12px', fontWeight: 500 }}>{value}</th>)}</tr></thead><tbody>{(data?.tools ?? []).map(tool => <tr key={tool.toolName} style={{ borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.1))' }}><td style={{ padding: '13px 12px' }}><span style={{ display: 'inline-block', width: 8, height: 8, borderRadius: '50%', background: toolColors[tool.toolName] ?? '#8691a8', marginRight: 8 }} /><strong>{labels[tool.toolName] ?? tool.toolName}</strong><div style={{ ...muted, margin: '3px 0 0 16px' }}>{tool.toolName}</div></td><td style={{ padding: '13px 12px' }}>{compact(tool.invocations, lang)}</td><td style={{ padding: '13px 12px', color: tool.successRate >= .9 ? '#77d49b' : tool.successRate >= .7 ? '#e3bd63' : '#ed7777' }}>{(tool.successRate * 100).toFixed(1)}%</td><td style={{ padding: '13px 12px' }}>{duration(tool.averageDurationMs)}</td><td style={{ padding: '13px 12px' }}>{compact(tool.calls, lang)}</td><td style={{ padding: '13px 12px' }}>{compact(tool.tokens, lang)}</td><td style={{ padding: '13px 12px' }}>{tool.cacheHits}/{tool.cacheHits + tool.cacheMisses}</td><td style={{ padding: '13px 12px' }}>{money(tool.estimatedCostUsd)}</td></tr>)}{(data?.tools.length ?? 0) === 0 && <tr><td colSpan={8} style={{ padding: 28, textAlign: 'center', ...muted }}>{t['table.empty']}</td></tr>}</tbody></table></div></section>\n <section style={{ display: 'grid', gridTemplateColumns: 'minmax(0,1fr) minmax(290px,.45fr)', gap: 16, alignItems: 'start' }}><div style={{ ...dashboardCard, padding: '18px 18px 8px', overflow: 'hidden' }}><div style={{ display: 'flex', justifyContent: 'space-between', margin: '0 2px 12px' }}><strong>{t['recent.title']}</strong><span style={muted}>{t['recent.maxCount']}</span></div><div style={{ maxHeight: 360, overflow: 'auto' }}>{(data?.recent ?? []).map(item => <div key={item.id} style={{ display: 'grid', gridTemplateColumns: 'minmax(170px,1fr) auto', gap: 12, padding: '11px 8px', borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.1))' }}><div><div style={{ display: 'flex', alignItems: 'center', gap: 8 }}><span style={{ width: 7, height: 7, borderRadius: '50%', background: item.success ? '#59c985' : '#e76565' }} /><strong style={{ fontSize: 13 }}>{labels[item.toolName] ?? item.toolName}</strong><span style={muted}>{item.provider}/{item.model}</span></div>{!item.success && <div title={item.errorMessage} style={{ margin: '5px 0 0 15px', fontSize: 11, color: '#e76565', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{item.errorMessage ?? item.errorName}</div>}</div><div style={{ textAlign: 'right' }}><div style={{ fontSize: 12 }}>{duration(item.durationMs)}</div><div style={{ ...muted, marginTop: 3 }}>{dateTime(item.startedAt, lang)}</div></div></div>)}{(data?.recent.length ?? 0) === 0 && <div style={{ padding: 24, textAlign: 'center', ...muted }}>{t['recent.empty']}</div>}</div></div>\n <div style={{ ...dashboardCard, padding: '18px' }}><strong>{t['models.title']}</strong><div style={{ marginTop: 10, display: 'flex', flexDirection: 'column', gap: 10 }}>{(data?.models ?? []).map(model => <div key={model.provider + '\\0' + model.model} style={{ padding: '11px 12px', borderRadius: 10, background: 'var(--dsw-surface-sunken)' }}><div style={{ fontWeight: 650, fontSize: 13, overflow: 'hidden', textOverflow: 'ellipsis' }}>{model.model}</div><div style={{ ...muted, marginTop: 3 }}>{model.provider}</div><div style={{ display: 'flex', justifyContent: 'space-between', marginTop: 9, fontSize: 12 }}><span>{tFormat(t['models.calls'], { calls: compact(model.calls, lang) })}</span><span>{tFormat(t['models.tokens'], { tokens: compact(model.tokens, lang) })}</span><strong>{money(model.estimatedCostUsd)}</strong></div></div>)}{(data?.models.length ?? 0) === 0 && <div style={muted}>{t['models.empty']}</div>}</div></div></section>\n </>}\n </div>\n </main>\n}\n\nexport function VerifierSidebarIcon({ size, active }: { size: number; active?: boolean }) {\n return <span style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: size, height: size, color: active ? 'var(--dsw-alias-brand-primary, #4f8cff)' : 'currentColor' }}><IconDataOutline16 size={Math.min(18, size)} /></span>\n}\n\nexport function GlobalVerifierDashboard({ rpc }: { rpc: any }) {\n return <StatisticsPage rpc={rpc} isGlobal />\n}\n\nexport function RightSidebarVerifierPanel({ rpc, sessionId }: { rpc: any; sessionId?: string }) {\n return (\n <div style={{ height: '100%', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n <StatisticsPage rpc={rpc} sessionId={sessionId} />\n </div>\n )\n}\n\nexport function RightSidebarVerifierTitle() {\n const lang = useLanguage()\n const t = dictionaries[lang]\n return <span style={{ fontSize: 13, fontWeight: 500 }}>{t['slot.statistics']}</span>\n}\n\nexport const inject = ['slots', 'connection', 'remote', 'remote.session', 'remote.settings']\nexport function apply(ctx: ClientContext): void {\n const connection = ctx.get('connection') as any\n const remote = ctx.remote\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'llm-verifier',\n order: 35,\n label: 'LLM Verifier',\n inject: () => ({ remote }),\n }, VerifierSettings as never))\n ctx.slots.inject('conversation.view', () => ctx.slots.register({\n name: 'conversation.view',\n id: 'llm-verifier-statistics',\n order: 30,\n label: () => (detectLanguage() === 'zh' ? zh['slot.statistics'] : en['slot.statistics']),\n inject: () => ({ rpc: connection.rpc }),\n }, StatisticsPage as never))\n const VERIFIER_TAB_KIND = 'llm-verifier'\n const VERIFIER_TAB_ID = 'dsh-llm-verifier'\n\n const registerRightSidebar = (tabs: any): (() => void) | undefined => {\n if (!tabs || typeof tabs.register !== 'function') return undefined\n try {\n const disposer = tabs.register({\n id: VERIFIER_TAB_ID,\n kind: VERIFIER_TAB_KIND,\n priority: 'extension',\n title: () => (detectLanguage() === 'zh' ? zh['slot.statistics'] : en['slot.statistics']),\n guide: [{\n order: 45,\n title: () => (detectLanguage() === 'zh' ? zh['guide.verifier.title'] : en['guide.verifier.title']),\n description: () => (detectLanguage() === 'zh' ? zh['guide.verifier.desc'] : en['guide.verifier.desc']),\n icon: VerifierSidebarIcon,\n }],\n })\n return typeof disposer === 'function' ? disposer : undefined\n } catch (error) {\n console.warn('[llm-verifier] sidebar tab registration failed:', error)\n return undefined\n }\n }\n\n // ctx.inject() already runs its callback as soon as the service exists, so an\n // extra ctx.get() pre-check registered the same tab type twice; the registry\n // throws on a duplicate id and that throw used to be swallowed. The returned\n // disposer is owned by the injecting scope, so a reload cannot leave a stale\n // tab definition behind.\n if (typeof (ctx as any).inject === 'function') {\n try {\n (ctx as any).inject(['sidebarRightTabs'], (subCtx: any) => {\n const subTabs = typeof subCtx?.get === 'function' ? subCtx.get('sidebarRightTabs') : (subCtx as any)?.sidebarRightTabs\n const disposer = registerRightSidebar(subTabs)\n if (disposer) subCtx.effect(() => disposer)\n })\n } catch (error) {\n console.warn('[llm-verifier] sidebar tab injection failed:', error)\n }\n }\n\n ctx.slots.inject('sidebar.right.pane.tab' as never, () => ctx.slots.register({\n name: 'sidebar.right.pane.tab' as never,\n key: VERIFIER_TAB_ID,\n inject: () => ({ rpc: connection.rpc }),\n } as never, RightSidebarVerifierPanel as never))\n\n ctx.slots.inject('sidebar.right.pane.tab.title' as never, () => ctx.slots.register({\n name: 'sidebar.right.pane.tab.title' as never,\n key: VERIFIER_TAB_ID,\n } as never, RightSidebarVerifierTitle as never))\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["Button","Input","IconDataOutline16","IconRefreshOutline16"],"sources":["../src/client-i18n.ts","../src/client-judges.ts","../src/client.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nexport const zh = {\n // Settings Page\n 'settings.title': 'LLM Verifier',\n 'settings.intro': '选择已在 DSH「模型」中配置的模型作为独立裁判。修改后点击页面底部的保存按钮生效。',\n 'settings.loading': '正在读取 DSH 模型和设置…',\n 'settings.retry': '重试',\n 'settings.nsUnregistered': '未注册 Verifier 设置命名空间,请重启 DSH 宿主。',\n\n // Section: Tools\n 'section.tools': '工具',\n 'field.enabled.title': '启用 Verifier 工具',\n 'field.enabled.helpOn': '允许 Agent 调用四个 verifier 工具并向裁判模型发起请求。',\n 'field.enabled.helpOff': '停用后,所有 verifier 工具都会立即返回错误。',\n 'field.enabled.warnDisabled': 'verifier_compare、verifier_select、verifier_track 和 verifier_current_session 当前不可用。',\n\n // Section: Automatic Verification\n 'section.autoVerify': '自动验收',\n 'field.autoVerifyMode.title': '调用策略',\n 'field.autoVerifyMode.help': '手动仅暴露工具;智能在有结构化/高置信证据时路由四工具;严格还会主动执行语义路由并对任何关键操作做最终验收。',\n 'field.autoVerifyMode.manual': '手动',\n 'field.autoVerifyMode.smart': '智能(推荐)',\n 'field.autoVerifyMode.strict': '严格',\n 'field.autoRouteSemantic.title': '混合语义路由',\n 'field.autoRouteSemantic.help': '结构化候选或检查点不足时,由裁判模型保守识别真实的 compare/select/track 对象。智能模式仅在有候选线索时运行;严格模式每次结束边界都会检查。',\n 'field.autoRouteMinConfidence.title': '语义路由置信度',\n 'field.autoRouteMinConfidence.help': '语义识别达到该置信度才执行 compare/select/track;范围 0–1,建议保持 0.9。',\n 'field.autoRouteMaxCandidates.title': '最多候选数',\n 'field.autoRouteMaxCandidates.help': '一次自动 select 最多纳入的真实候选数量,至少 3。',\n 'field.autoRouteMaxPerTask.title': '每任务最多路由',\n 'field.autoRouteMaxPerTask.help': '自动路由(compare/select/track 与语义分类)的任务尝试上限;与「每任务最多验收」共享同一个计数器,实际可用次数是两者之和。',\n 'field.autoRouteMaxPerSession.title': '每会话最多路由',\n 'field.autoRouteMaxPerSession.help': '同一会话中自动路由的尝试上限;与「每会话最多验收」共享计数器,实际可用次数同样是两者之和。',\n 'field.autoTrackCompletionThreshold.title': '进度完成阈值',\n 'field.autoTrackCompletionThreshold.help': 'track 任一检查点低于该值时 steering 要求 Agent 继续执行;范围 0–1。',\n 'field.autoRouteMaxItemChars.title': '单项证据字符上限',\n 'field.autoRouteMaxItemChars.help': '每个候选或检查点在脱敏后允许发送给裁判的最大字符数。',\n 'field.autoRouteMaxInputChars.title': '路由证据总字符上限',\n 'field.autoRouteMaxInputChars.help': '一次 compare/select/track 所有候选或步骤的总字符预算。',\n 'field.autoMaxModelCallsPerTask.title': '每任务模型调用预算',\n 'field.autoMaxModelCallsPerTask.help': '语义分类、中间路由和最终验收共享的估算模型调用上限。',\n 'field.autoMaxModelCallsPerSession.title': '每会话模型调用预算',\n 'field.autoMaxModelCallsPerSession.help': '整个会话所有自动验证阶段共享的估算模型调用上限。',\n 'field.autoVerifyThreshold.title': '通过阈值',\n 'field.autoVerifyThreshold.help': '会话证据分数达到该值且胜过空工作基线才允许结束;范围 0–1。',\n 'field.autoVerifyRepeats.title': '路由评估轮次',\n 'field.autoVerifyRepeats.help': '自动路由(compare / select / track)每项标准的评分重复次数;1 为低成本初筛。',\n 'field.autoVerifyFinalRepeats.title': '最终验收轮次',\n 'field.autoVerifyFinalRepeats.help': '最终会话验收每项标准的评分重复次数;偶数轮会交换 A/B 位置以抵消位置偏好,默认 2。',\n 'field.autoVerifyMinToolCalls.title': '智能模式最少工具调用',\n 'field.autoVerifyMinToolCalls.help': '统计除 Verifier 之外的全部工具调用(含 read/grep 等只读工具);此外还必须存在写入/执行类操作与至少一条成功结果。',\n 'field.autoVerifyMaxChars.title': '最大证据字符',\n 'field.autoVerifyMaxChars.help': '发送给裁判前保留的最近会话证据字符数。',\n 'field.autoVerifyMaxPerTask.title': '每任务最多验收',\n 'field.autoVerifyMaxPerTask.help': '最终验收的任务尝试上限;与「每任务最多路由」共享同一个计数器,实际可用次数是两者之和,用于防止低分反馈形成无限修复循环。',\n 'field.autoVerifyMaxPerSession.title': '每会话最多验收',\n 'field.autoVerifyMaxPerSession.help': '同一会话中最终验收的尝试上限;与「每会话最多路由」共享计数器,实际可用次数同样是两者之和。',\n 'field.autoVerify.warnNotice': '自动路由按 select → compare → track → current_session 的阶段顺序处理;脱敏后的任务、Assistant 轨迹与真实工具输出会发送给所选裁判模型。候选选择或进度不足会 steering 继续工作,最终验收未通过会要求修复并重新验证。',\n 'field.autoMaxModelCallsPerTask.warnBudget': '当前单任务预算为 {current} 次模型调用,低于 {judges} 位裁判完整锦标赛所需的最差情况({required} 次)。建议调大该预算以避免自动路由过早耗尽。',\n 'field.autoMaxModelCallsPerSession.warnBudget': '当前会话预算为 {current} 次模型调用,低于 {judges} 位裁判推荐的最差情况({required} 次)。建议调大该预算以避免会话验证过早耗尽。',\n\n // Section: Judge Model\n 'section.model': '裁判模型',\n 'field.provider.title': '供应商',\n 'field.provider.help': '当前 DSH 中可路由的模型供应商。',\n 'field.model.title': '模型',\n 'field.model.help': '用作裁判的具体模型。',\n 'field.reasoningEffort.title': '推理强度',\n 'field.reasoningEffort.help': '留空时使用所选模型的默认值。',\n 'field.reasoningEffort.default': '模型默认',\n 'field.maxTokens.title': '最大输出 Token',\n 'field.maxTokens.help': '单次裁判请求允许生成的最大 Token 数。',\n 'field.temperature.title': '裁判采样温度',\n 'field.temperature.help': '裁判模型调用的采样温度,范围 0–2;较低值可保证判决的一致与可复现性,默认值为 0.2。',\n 'field.label.title': '裁判标签',\n 'field.label.help': '在统计看板和明细中显示的裁判名称,留空时默认使用模型名称。',\n 'field.label.placeholder': '默认使用模型名称',\n 'field.extraJudges.title': '附加裁判',\n 'field.extraJudges.help': '添加最多 4 个额外裁判模型组成评审团。同一供应商与模型不能重复,且不能与主裁判相同。',\n 'field.extraJudges.add': '添加裁判',\n 'field.extraJudges.remove': '删除',\n 'field.extraJudges.labelTitle': '标签',\n 'field.extraJudges.labelPlaceholder': '自定义标签(可选)',\n 'field.extraJudges.providerAria': '附加裁判 #{index} 供应商',\n 'field.extraJudges.modelAria': '附加裁判 #{index} 模型',\n 'field.extraJudges.effortAria': '附加裁判 #{index} 推理强度',\n 'field.extraJudges.labelAria': '附加裁判 #{index} 标签',\n 'field.extraJudges.removeAria': '删除附加裁判 #{index}',\n 'field.extraJudges.conflictPrimary': '附加裁判 #{index} 与主裁判模型重复({id}),请选择不同模型。',\n 'field.extraJudges.conflictDuplicate': '附加裁判 #{index} 与附加裁判 #{other} 重复({id}),请选择不同模型。',\n\n // Section: Execution\n 'section.execution': '执行',\n 'field.maxConcurrency.title': '最大并发',\n 'field.maxConcurrency.help': '所有 verifier 工具共享的请求并发上限。',\n 'field.maxRetries.title': '最多重试',\n 'field.maxRetries.help': '限流、超时和短暂网络错误的重试次数。',\n 'field.retryBaseDelayMs.title': '重试基础延迟',\n 'field.retryBaseDelayMs.help': '遇到限流或暂时网络错误时重试的基础等待时间,单位为毫秒。',\n 'field.timeoutMs.title': '请求超时',\n 'field.timeoutMs.help': '单次模型请求的超时时间,单位为毫秒。',\n 'field.cacheDir.title': '缓存相对目录',\n 'field.cacheDir.help': '评分持久化缓存存放的相对目录路径(相对于话题目录),不能为空。',\n 'field.cacheMaxEntries.title': '缓存条目上限',\n 'field.cacheMaxEntries.help': '本地持久评分缓存保留的最大条目数。',\n\n // Section: Cost Estimation\n 'section.cost': '费用估算',\n 'field.estimatedInputUsdPerMillion.title': '输入价格',\n 'field.estimatedInputUsdPerMillion.help': '每百万输入 Token 的美元价格,仅用于统计估算。',\n 'field.estimatedOutputUsdPerMillion.title': '输出价格',\n 'field.estimatedOutputUsdPerMillion.help': '每百万输出 Token 的美元价格,仅用于统计估算。',\n\n // Settings Actions & Alerts\n 'settings.catalogFailures': '部分模型目录读取失败',\n 'settings.saved': '设置已保存。',\n 'settings.reload': '重新载入',\n 'settings.save': '保存设置',\n 'settings.saving': '保存中…',\n\n // Statistics Page\n 'stats.pageTitle': 'Verifier 工具统计',\n 'stats.updatedAt': '数据更新于 {time} · 自动记录四个验证工具的实际执行结果',\n 'stats.daysUnit': '{days} 天',\n 'stats.currentSession': '当前会话',\n 'stats.allSessions': '全部会话',\n 'stats.refresh': '刷新',\n 'stats.requestFailed': '统计接口请求失败',\n 'stats.hostRestartHint': '请确认宿主已重启并加载最新版本的 dsh-llm-verifier。',\n 'stats.loading': '正在读取工具运行统计…',\n 'stats.costSummary': '{days} 天估算费用',\n 'stats.callsSummary': '{invocations} 次工具调用 · {calls} 次裁判模型请求',\n 'stats.successCalls': '成功调用',\n 'stats.failedCalls': '失败调用',\n 'stats.avgDuration': '平均耗时',\n 'stats.phase.explicit': '显式调用',\n 'stats.phase.compare': '两项对比',\n 'stats.phase.select': '多项优选',\n 'stats.phase.track': '进度跟踪',\n 'stats.phase.final': '最终验收',\n 'stats.phase.plan_review': '计划预审',\n 'stats.phase.team_task': 'Team 任务',\n 'stats.phase.semantic': '语义路由',\n 'stats.outcome.passed': '通过',\n 'stats.outcome.below-threshold': '未达标',\n 'stats.outcome.tie': '平局',\n 'stats.outcome.error': '异常',\n 'stats.outcome.dropped-over-budget': '超预算丢弃',\n 'stats.outcome.invalid-references': '引用无效',\n 'stats.winner.tie': '平局',\n 'stats.verdict.winner': '胜方 {winner}',\n 'stats.verdict.scoreThreshold': '得分 {score}(阈值 {threshold})',\n 'stats.verdict.scoreOnly': '得分 {score}',\n\n // Metrics\n 'metric.cacheHitRate': '缓存命中率',\n 'metric.cacheHitNote': '{hits} 命中 / {total} 评分',\n 'metric.tokens': 'Token',\n 'metric.tokensNote': '输入 {input} · 输出 {output}',\n 'metric.avgModelCalls': '平均模型请求',\n 'metric.avgModelCallsNote': '{attempts} 次尝试 · {retries} 次重试',\n 'metric.scoringMode': '评分模式',\n 'metric.scoringModeNote': 'Top-logprobs · 显式标签 {explicit}',\n\n // Chart\n 'chart.title': '每日工具调用与模型请求趋势',\n 'chart.ariaLabel': '每日工具调用与模型请求趋势',\n 'chart.legendToolCalls': '工具调用',\n 'chart.legendModelCalls': '模型请求',\n\n // Tool breakdown table\n 'table.title': '工具运行明细',\n 'table.toolCount': '{count} 类工具',\n 'table.colTool': '工具',\n 'table.colInvocations': '调用',\n 'table.colSuccessRate': '成功率',\n 'table.colAvgDuration': '平均耗时',\n 'table.colModelCalls': '模型请求',\n 'table.colTokens': 'Token',\n 'table.colCacheHits': '缓存命中',\n 'table.colEstimatedCost': '估算费用',\n 'table.empty': '所选范围内还没有 Verifier 工具调用。后续执行会自动出现在这里。',\n\n // Recent invocations\n 'recent.title': '最近调用',\n 'recent.maxCount': '最多 50 条',\n 'recent.empty': '暂无记录',\n\n // Model summary\n 'models.title': '模型汇总',\n 'models.calls': '{calls} 请求',\n 'models.tokens': '{tokens} Token',\n 'models.empty': '暂无模型调用',\n\n // Slot label\n 'slot.statistics': '工具统计',\n 'slot.globalDashboard': 'Verifier 看板',\n 'global.panelTitle': 'LLM Verifier 全局监控中心',\n 'global.panelIntro': '跨会话全局统计、裁判模型效能大盘与任务验收总览。',\n 'guide.verifier.title': 'Verifier 统计',\n 'guide.verifier.desc': '大模型复核工具调用、耗时与成本统计',\n 'field.autoVerifyTeamTasks.title': '自动验收 Team 任务',\n 'field.autoVerifyTeamTasks.help': '当 Agent Teams 中的任务状态变更或进入完成状态时,自动路由进度追踪与任务验收。',\n 'field.autoVerifyPlanMode.title': '计划模式自动预审',\n 'field.autoVerifyPlanMode.help': '在 Agent 调用 exit_plan_mode 提交计划交付人类评审前,自动对计划完整度与风险进行独立预审。',\n 'field.autoVerifySubagents.title': '同时验收子 Agent',\n 'field.autoVerifySubagents.help': '子 Agent(subagent / fork)的会话也执行自动路由与最终验收。默认关闭:子会话同样以真实用户消息播种,被门控会额外消耗裁判预算并可能反复 steering 子 Agent。',\n}\n\nexport type I18nDict = typeof zh\n\nexport const en: I18nDict = {\n // Settings Page\n 'settings.title': 'LLM Verifier',\n 'settings.intro': 'Select a model configured in DSH \"Models\" as an independent judge. Click the Save button at the bottom of the page to apply changes.',\n 'settings.loading': 'Loading DSH models and settings…',\n 'settings.retry': 'Retry',\n 'settings.nsUnregistered': 'Verifier settings namespace is not registered. Restart the DSH host.',\n\n // Section: Tools\n 'section.tools': 'Tools',\n 'field.enabled.title': 'Enable Verifier Tools',\n 'field.enabled.helpOn': 'Allows the Agent to call verifier tools and make requests to the judge model.',\n 'field.enabled.helpOff': 'When disabled, all verifier tools will return an error immediately.',\n 'field.enabled.warnDisabled': 'verifier_compare, verifier_select, verifier_track, and verifier_current_session are currently unavailable.',\n\n // Section: Automatic Verification\n 'section.autoVerify': 'Automatic Verification',\n 'field.autoVerifyMode.title': 'Invocation Policy',\n 'field.autoVerifyMode.help': 'Manual exposes tools only; Smart routes tools when structured/high-confidence evidence is present; Strict actively runs semantic routing and performs final acceptance on any consequential action.',\n 'field.autoVerifyMode.manual': 'Manual',\n 'field.autoVerifyMode.smart': 'Smart (Recommended)',\n 'field.autoVerifyMode.strict': 'Strict',\n 'field.autoRouteSemantic.title': 'Hybrid Semantic Routing',\n 'field.autoRouteSemantic.help': 'When structured candidates or checkpoints are lacking, the judge model conservatively identifies real compare/select/track targets. Smart mode only runs when candidate clues exist; Strict mode checks at every task boundary.',\n 'field.autoRouteMinConfidence.title': 'Semantic Route Confidence',\n 'field.autoRouteMinConfidence.help': 'Minimum confidence required for semantic recognition before executing compare/select/track; range 0–1, 0.9 recommended.',\n 'field.autoRouteMaxCandidates.title': 'Max Candidates',\n 'field.autoRouteMaxCandidates.help': 'Maximum number of real candidates included in an automatic select, at least 3.',\n 'field.autoRouteMaxPerTask.title': 'Max Routes per Task',\n 'field.autoRouteMaxPerTask.help': 'Task attempt cap for automatic routing (compare/select/track and semantic classification); shares one counter with \"Max Verifications per Task\", so the effective limit is the sum of both.',\n 'field.autoRouteMaxPerSession.title': 'Max Routes per Session',\n 'field.autoRouteMaxPerSession.help': 'Session attempt cap for automatic routing; shares its counter with \"Max Verifications per Session\" (effective limit is the sum of both).',\n 'field.autoTrackCompletionThreshold.title': 'Progress Completion Threshold',\n 'field.autoTrackCompletionThreshold.help': 'When any track checkpoint falls below this score, steering instructs the Agent to continue; range 0–1.',\n 'field.autoRouteMaxItemChars.title': 'Max Chars per Route Item',\n 'field.autoRouteMaxItemChars.help': 'Maximum sanitized character count allowed per candidate or checkpoint when sent to the judge.',\n 'field.autoRouteMaxInputChars.title': 'Total Route Input Chars Cap',\n 'field.autoRouteMaxInputChars.help': 'Total character budget across all candidates or steps in a single compare/select/track call.',\n 'field.autoMaxModelCallsPerTask.title': 'Model Call Budget per Task',\n 'field.autoMaxModelCallsPerTask.help': 'Estimated model call cap shared across semantic classification, intermediate routing, and final acceptance per task.',\n 'field.autoMaxModelCallsPerSession.title': 'Model Call Budget per Session',\n 'field.autoMaxModelCallsPerSession.help': 'Estimated model call cap shared across all automatic verification phases throughout the entire session.',\n 'field.autoVerifyRepeats.title': 'Routing Repeats',\n 'field.autoVerifyRepeats.help': 'Scoring repeats per criterion for automatic routing (compare / select / track); 1 is low-cost preliminary screening.',\n 'field.autoVerifyFinalRepeats.title': 'Final Acceptance Repeats',\n 'field.autoVerifyFinalRepeats.help': 'Scoring repeats per criterion for the final session acceptance; even rounds swap A/B positions to cancel position bias. Defaults to 2.',\n 'field.autoVerifyThreshold.title': 'Pass Threshold',\n 'field.autoVerifyThreshold.help': 'Evidence score must meet this threshold and beat the empty-work baseline to allow completion; range 0–1.',\n 'field.autoVerifyMinToolCalls.title': 'Min Tool Calls (Smart Mode)',\n 'field.autoVerifyMinToolCalls.help': 'Counts every non-Verifier tool call, read-only tools included; consequential write/exec work and at least one successful result are still required.',\n 'field.autoVerifyMaxChars.title': 'Max Evidence Characters',\n 'field.autoVerifyMaxChars.help': 'Maximum recent session evidence characters retained before sending to the judge.',\n 'field.autoVerifyMaxPerTask.title': 'Max Verifications per Task',\n 'field.autoVerifyMaxPerTask.help': 'Final-acceptance attempt cap per task; shares one counter with \"Max Routes per Task\", so the effective limit is the sum of both. Prevents endless low-score repair loops.',\n 'field.autoVerifyMaxPerSession.title': 'Max Verifications per Session',\n 'field.autoVerifyMaxPerSession.help': 'Final-acceptance attempt cap within one session; shares its counter with \"Max Routes per Session\" (effective limit is the sum of both).',\n 'field.autoVerify.warnNotice': 'Automatic routing follows the phase order: select → compare → track → current_session. Sanitized tasks, Assistant trajectories, and real tool outputs are sent to the judge model. Candidate selection or insufficient progress steers the Agent to keep working; failed final acceptance requires remediation and re-verification.',\n 'field.autoMaxModelCallsPerTask.warnBudget': 'Current task budget ({current} calls) is below the worst-case requirement ({required} calls) for {judges} judge(s) in a full tournament. Consider increasing it to avoid premature budget exhaustion.',\n 'field.autoMaxModelCallsPerSession.warnBudget': 'Current session budget ({current} calls) is below the worst-case requirement ({required} calls) for {judges} judge(s). Consider increasing it to avoid premature budget exhaustion.',\n\n // Section: Judge Model\n 'section.model': 'Judge Model',\n 'field.provider.title': 'Provider',\n 'field.provider.help': 'Routable model providers currently available in DSH.',\n 'field.model.title': 'Model',\n 'field.model.help': 'Specific model used as the independent judge.',\n 'field.reasoningEffort.title': 'Reasoning Effort',\n 'field.reasoningEffort.help': 'Leave empty to use the selected model default.',\n 'field.reasoningEffort.default': 'Model Default',\n 'field.maxTokens.title': 'Max Output Tokens',\n 'field.maxTokens.help': 'Maximum tokens allowed in a single judge model completion.',\n 'field.temperature.title': 'Judge Sampling Temperature',\n 'field.temperature.help': 'Sampling temperature for judge model calls, range 0–2. Lower values make judge verdicts reproducible. Default is 0.2.',\n 'field.label.title': 'Judge Label',\n 'field.label.help': 'Display name for the judge in statistics and dashboards. Defaults to the model name when empty.',\n 'field.label.placeholder': 'Defaults to model name',\n 'field.extraJudges.title': 'Extra Judges',\n 'field.extraJudges.help': 'Add up to 4 extra judge models for ensemble verification. Duplicate provider and model combinations are not allowed, including the primary judge.',\n 'field.extraJudges.add': 'Add Judge',\n 'field.extraJudges.remove': 'Remove',\n 'field.extraJudges.labelTitle': 'Label',\n 'field.extraJudges.labelPlaceholder': 'Custom label (optional)',\n 'field.extraJudges.providerAria': 'Extra judge #{index} provider',\n 'field.extraJudges.modelAria': 'Extra judge #{index} model',\n 'field.extraJudges.effortAria': 'Extra judge #{index} reasoning effort',\n 'field.extraJudges.labelAria': 'Extra judge #{index} label',\n 'field.extraJudges.removeAria': 'Remove extra judge #{index}',\n 'field.extraJudges.conflictPrimary': 'Extra judge #{index} duplicates primary judge ({id}). Please select a different model.',\n 'field.extraJudges.conflictDuplicate': 'Extra judge #{index} duplicates extra judge #{other} ({id}). Please select a different model.',\n\n // Section: Execution\n 'section.execution': 'Execution',\n 'field.maxConcurrency.title': 'Max Concurrency',\n 'field.maxConcurrency.help': 'Maximum concurrent requests shared across all verifier tools.',\n 'field.maxRetries.title': 'Max Retries',\n 'field.maxRetries.help': 'Retry attempts for rate limits, timeouts, and transient network errors.',\n 'field.retryBaseDelayMs.title': 'Retry Base Delay',\n 'field.retryBaseDelayMs.help': 'Base wait time before retrying on rate limits or transient network errors, in milliseconds.',\n 'field.timeoutMs.title': 'Request Timeout',\n 'field.timeoutMs.help': 'Timeout for a single model request, in milliseconds.',\n 'field.cacheDir.title': 'Cache Relative Directory',\n 'field.cacheDir.help': 'Relative directory for persistent score cache (relative to topic directory). Cannot be empty.',\n 'field.cacheMaxEntries.title': 'Max Cache Entries',\n 'field.cacheMaxEntries.help': 'Maximum entries retained in the local persistent score cache.',\n\n // Section: Cost Estimation\n 'section.cost': 'Cost Estimation',\n 'field.estimatedInputUsdPerMillion.title': 'Input Price',\n 'field.estimatedInputUsdPerMillion.help': 'USD price per million input tokens, for statistical estimation only.',\n 'field.estimatedOutputUsdPerMillion.title': 'Output Price',\n 'field.estimatedOutputUsdPerMillion.help': 'USD price per million output tokens, for statistical estimation only.',\n\n // Settings Actions & Alerts\n 'settings.catalogFailures': 'Some model catalogs failed to load',\n 'settings.saved': 'Settings saved.',\n 'settings.reload': 'Reload',\n 'settings.save': 'Save Settings',\n 'settings.saving': 'Saving…',\n\n // Statistics Page\n 'stats.pageTitle': 'Verifier Tool Statistics',\n 'stats.updatedAt': 'Updated at {time} · Automatically records execution results of the 4 verifier tools',\n 'stats.daysUnit': '{days} Days',\n 'stats.currentSession': 'Current Session',\n 'stats.allSessions': 'All Sessions',\n 'stats.refresh': 'Refresh',\n 'stats.requestFailed': 'Failed to query statistics API',\n 'stats.hostRestartHint': 'Please make sure the host has restarted and loaded the latest version of dsh-llm-verifier.',\n 'stats.loading': 'Loading tool execution statistics…',\n 'stats.costSummary': '{days}-Day Estimated Cost',\n 'stats.callsSummary': '{invocations} tool calls · {calls} judge requests',\n 'stats.successCalls': 'Successful',\n 'stats.failedCalls': 'Failed',\n 'stats.avgDuration': 'Avg Duration',\n 'stats.phase.explicit': 'Explicit',\n 'stats.phase.compare': 'Compare',\n 'stats.phase.select': 'Select',\n 'stats.phase.track': 'Track',\n 'stats.phase.final': 'Final Acceptance',\n 'stats.phase.plan_review': 'Plan Review',\n 'stats.phase.team_task': 'Team Task',\n 'stats.phase.semantic': 'Semantic Route',\n 'stats.outcome.passed': 'Passed',\n 'stats.outcome.below-threshold': 'Below Threshold',\n 'stats.outcome.tie': 'Tie',\n 'stats.outcome.error': 'Error',\n 'stats.outcome.dropped-over-budget': 'Dropped (over budget)',\n 'stats.outcome.invalid-references': 'Invalid references',\n 'stats.winner.tie': 'Tie',\n 'stats.verdict.winner': 'Winner {winner}',\n 'stats.verdict.scoreThreshold': 'Score {score} (threshold {threshold})',\n 'stats.verdict.scoreOnly': 'Score {score}',\n\n // Metrics\n 'metric.cacheHitRate': 'Cache Hit Rate',\n 'metric.cacheHitNote': '{hits} hits / {total} scored',\n 'metric.tokens': 'Tokens',\n 'metric.tokensNote': 'Input {input} · Output {output}',\n 'metric.avgModelCalls': 'Avg Model Calls',\n 'metric.avgModelCallsNote': '{attempts} attempts · {retries} retries',\n 'metric.scoringMode': 'Scoring Mode',\n 'metric.scoringModeNote': 'Top-logprobs · Explicit tags {explicit}',\n\n // Chart\n 'chart.title': 'Daily Tool Calls & Model Requests Trend',\n 'chart.ariaLabel': 'Daily tool calls and model requests trend',\n 'chart.legendToolCalls': 'Tool Calls',\n 'chart.legendModelCalls': 'Model Requests',\n\n // Tool breakdown table\n 'table.title': 'Tool Breakdown',\n 'table.toolCount': '{count} Tool Types',\n 'table.colTool': 'Tool',\n 'table.colInvocations': 'Calls',\n 'table.colSuccessRate': 'Success Rate',\n 'table.colAvgDuration': 'Avg Duration',\n 'table.colModelCalls': 'Model Calls',\n 'table.colTokens': 'Tokens',\n 'table.colCacheHits': 'Cache Hits',\n 'table.colEstimatedCost': 'Estimated Cost',\n 'table.empty': 'No verifier tool calls found in the selected range. Subsequent executions will appear here automatically.',\n\n // Recent invocations\n 'recent.title': 'Recent Invocations',\n 'recent.maxCount': 'Max 50',\n 'recent.empty': 'No records',\n\n // Model summary\n 'models.title': 'Model Summary',\n 'models.calls': '{calls} Requests',\n 'models.tokens': '{tokens} Tokens',\n 'models.empty': 'No model calls',\n\n // Slot label\n 'slot.statistics': 'Statistics',\n 'slot.globalDashboard': 'Verifier Dashboard',\n 'global.panelTitle': 'LLM Verifier Global Dashboard',\n 'global.panelIntro': 'Cross-session statistics, judge model metrics, and task acceptance overview.',\n 'guide.verifier.title': 'Verifier Stats',\n 'guide.verifier.desc': 'LLM verifier tool calls, duration and cost statistics',\n 'field.autoVerifyTeamTasks.title': 'Verify Team Tasks',\n 'field.autoVerifyTeamTasks.help': 'Automatically route progress and verify tasks when Agent Teams task status changes or completes.',\n 'field.autoVerifyPlanMode.title': 'Plan Mode Pre-verification',\n 'field.autoVerifyPlanMode.help': 'Automatically pre-verify plan feasibility and risks before exit_plan_mode presents it for user review.',\n 'field.autoVerifySubagents.title': 'Verify Subagent Sessions',\n 'field.autoVerifySubagents.help': 'Also run automatic routing and final acceptance on delegated child sessions. Off by default: child sessions are seeded with a real user message, so gating them spends extra judge budget and can repeatedly steer the subagent.',\n}\n\nexport const dictionaries = { zh, en }\n\nexport const toolLabels: Record<'zh' | 'en', Record<string, string>> = {\n zh: {\n verifier_route_classify: '路由分类',\n verifier_compare: '两项对比',\n verifier_select: '多项优选',\n verifier_track: '进度跟踪',\n verifier_current_session: '会话验收',\n },\n en: {\n verifier_route_classify: 'Route Classification',\n verifier_compare: 'Pairwise Comparison',\n verifier_select: 'Candidate Selection',\n verifier_track: 'Progress Tracking',\n verifier_current_session: 'Session Acceptance',\n },\n}\n\nexport function tFormat(template: string, params?: Record<string, string | number>): string {\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (match, key) => (key in params ? String(params[key]) : match))\n}\n\nexport function detectLanguage(): 'zh' | 'en' {\n if (typeof document === 'undefined') return 'en'\n const lang = (document.documentElement.lang || '').toLowerCase()\n return lang.startsWith('zh') ? 'zh' : 'en'\n}\n\nexport function useLanguage(): 'zh' | 'en' {\n const [lang, setLang] = useState<'zh' | 'en'>(detectLanguage)\n useEffect(() => {\n if (typeof document === 'undefined') return\n const update = () => { setLang(detectLanguage()) }\n update()\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {\n update()\n }\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang'] })\n return () => observer.disconnect()\n }, [])\n return lang\n}\n\nexport function compact(value: number, lang: 'zh' | 'en' = 'en'): string {\n const locale = lang === 'zh' ? 'zh-CN' : 'en-US'\n return new Intl.NumberFormat(locale, { notation: value >= 10_000 ? 'compact' : 'standard', maximumFractionDigits: value >= 1_000 ? 1 : 0 }).format(value)\n}\n\nexport function money(value: number): string {\n return '$' + value.toLocaleString('en-US', { minimumFractionDigits: value < 0.01 ? 4 : 2, maximumFractionDigits: value < 0.01 ? 4 : 2 })\n}\n\nexport function duration(value: number): string {\n if (value < 1000) return Math.round(value) + ' ms'\n if (value < 60_000) return (value / 1000).toFixed(1) + ' s'\n return (value / 60_000).toFixed(1) + ' min'\n}\n\nexport function dateTime(value: number, lang: 'zh' | 'en' = 'en'): string {\n const locale = lang === 'zh' ? 'zh-CN' : 'en-US'\n return new Intl.DateTimeFormat(locale, { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(value)\n}\n\nexport interface VerdictSummary {\n phase?: string\n outcome?: string\n score?: number\n baselineScore?: number\n winner?: 'A' | 'B' | 'tie'\n threshold?: number\n}\n\nexport function resolveCacheDirOnSave(\n draft: string | undefined | null,\n previous?: string | null,\n): string | undefined {\n if (typeof draft === 'string' && draft.trim()) return draft.trim()\n if (typeof previous === 'string' && previous.trim()) return previous.trim()\n return undefined\n}\n\n/** An eight-candidate select: ring + pivot rounds (18 pairs) x three criteria, one repeat. */\nexport const WORST_CASE_ROUTE_CALLS_PER_JUDGE = 54\n/** Final acceptance: three criteria x the default two repeats (one per A/B position). */\nexport const WORST_CASE_FINAL_CALLS_PER_JUDGE = 6\nexport const WORST_CASE_TASK_PER_JUDGE = WORST_CASE_ROUTE_CALLS_PER_JUDGE + WORST_CASE_FINAL_CALLS_PER_JUDGE\nexport const WORST_CASE_SESSION_PER_JUDGE = 160\n\nexport function computeJudgeCount(extraJudgesCount: number): number {\n return 1 + Math.max(0, extraJudgesCount)\n}\n\nexport function computeWorstCaseBudget(judgeCount: number): {\n worstCaseTask: number\n worstCaseSession: number\n} {\n const count = Math.max(1, judgeCount)\n return {\n worstCaseTask: count * WORST_CASE_TASK_PER_JUDGE,\n worstCaseSession: count * WORST_CASE_SESSION_PER_JUDGE,\n }\n}\n\nexport interface BudgetWarningState {\n judgeCount: number\n worstCaseTask: number\n worstCaseSession: number\n warnTask: boolean\n warnSession: boolean\n}\n\nexport function evaluateBudgetWarning(\n autoVerifyMode: string,\n extraJudgesCount: number,\n autoMaxModelCallsPerTask: number,\n autoMaxModelCallsPerSession: number,\n): BudgetWarningState | null {\n if (autoVerifyMode === 'manual') return null\n const judgeCount = computeJudgeCount(extraJudgesCount)\n const { worstCaseTask, worstCaseSession } = computeWorstCaseBudget(judgeCount)\n const warnTask = autoMaxModelCallsPerTask < worstCaseTask\n const warnSession = autoMaxModelCallsPerSession < worstCaseSession\n if (!warnTask && !warnSession) return null\n return { judgeCount, worstCaseTask, worstCaseSession, warnTask, warnSession }\n}\n\nexport function isVerdictFailed(verdict?: VerdictSummary | null, success: boolean = true): boolean {\n if (!success) return true\n if (!verdict) return false\n return verdict.outcome === 'below-threshold' || verdict.outcome === 'error'\n}\n\nexport function formatPercentage(val: number): string {\n if (!Number.isFinite(val)) return '--'\n return `${(val * 100).toFixed(1)}%`\n}\n\nexport function formatVerdictDetails(\n verdict: VerdictSummary,\n t: I18nDict,\n): {\n outcomeText?: string\n phaseText?: string\n scoreText?: string\n winnerText?: string\n isFailed: boolean\n} {\n const isFailed = verdict.outcome === 'below-threshold' || verdict.outcome === 'error'\n const outcomeKey = verdict.outcome ? (`stats.outcome.${verdict.outcome}` as keyof I18nDict) : undefined\n const outcomeText = outcomeKey && t[outcomeKey] ? t[outcomeKey] : verdict.outcome\n\n const phaseKey = verdict.phase ? (`stats.phase.${verdict.phase}` as keyof I18nDict) : undefined\n const phaseText = phaseKey && t[phaseKey] ? t[phaseKey] : verdict.phase\n\n let scoreText: string | undefined\n if (typeof verdict.score === 'number') {\n const scorePct = formatPercentage(verdict.score)\n if (typeof verdict.threshold === 'number') {\n const threshPct = formatPercentage(verdict.threshold)\n scoreText = tFormat(t['stats.verdict.scoreThreshold'], { score: scorePct, threshold: threshPct })\n } else {\n scoreText = tFormat(t['stats.verdict.scoreOnly'], { score: scorePct })\n }\n }\n\n let winnerText: string | undefined\n if (verdict.winner) {\n const winnerValue = verdict.winner === 'tie' ? t['stats.winner.tie'] : verdict.winner\n winnerText = tFormat(t['stats.verdict.winner'], { winner: winnerValue })\n }\n\n return { outcomeText, phaseText, scoreText, winnerText, isFailed }\n}\n\n","export interface ExtraJudgeDraft {\n provider: string\n model: string\n reasoningEffort?: string\n label?: string\n}\n\n// Must stay equal to MAX_EXTRA_JUDGES in src/config.ts: importing it here would pull\n// schemastery into the web-client bundle, so the cap is duplicated deliberately.\nexport const MAX_EXTRA_JUDGES = 4\n\nexport function normalizeExtraJudges(value: unknown): ExtraJudgeDraft[] {\n if (!Array.isArray(value)) return []\n const results: ExtraJudgeDraft[] = []\n for (const item of value) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) continue\n const raw = item as Record<string, unknown>\n if (typeof raw.provider !== 'string' || typeof raw.model !== 'string') continue\n const provider = raw.provider.trim()\n const model = raw.model.trim()\n if (!provider || !model) continue\n\n const draft: ExtraJudgeDraft = { provider, model }\n if (typeof raw.reasoningEffort === 'string') {\n const effort = raw.reasoningEffort.trim()\n if (effort) draft.reasoningEffort = effort\n }\n if (typeof raw.label === 'string') {\n const label = raw.label.trim()\n if (label) draft.label = label\n }\n results.push(draft)\n if (results.length >= MAX_EXTRA_JUDGES) break\n }\n return results\n}\n\nexport function judgeIdentity(provider: string, model: string): string {\n return `${provider.trim()}/${model.trim()}`\n}\n\nexport function judgeConflict(\n primary: { provider: string; model: string },\n judges: readonly ExtraJudgeDraft[],\n): { index: number; duplicateOf: 'primary' | number } | undefined {\n const primaryId = (primary.provider.trim() && primary.model.trim())\n ? judgeIdentity(primary.provider, primary.model)\n : undefined\n\n const seen = new Map<string, number>()\n for (let i = 0; i < judges.length; i++) {\n const judge = judges[i]\n const p = judge.provider.trim()\n const m = judge.model.trim()\n if (!p || !m) continue\n const id = judgeIdentity(p, m)\n if (primaryId !== undefined && id === primaryId) {\n return { index: i, duplicateOf: 'primary' }\n }\n const prev = seen.get(id)\n if (prev !== undefined) {\n return { index: i, duplicateOf: prev }\n }\n seen.set(id, i)\n }\n return undefined\n}\n\nexport function addExtraJudge(\n judges: readonly ExtraJudgeDraft[],\n draft: ExtraJudgeDraft,\n): ExtraJudgeDraft[] {\n if (judges.length >= MAX_EXTRA_JUDGES) {\n return [...judges]\n }\n const provider = draft.provider.trim()\n const model = draft.model.trim()\n const item: ExtraJudgeDraft = { provider, model }\n if (typeof draft.reasoningEffort === 'string') {\n const effort = draft.reasoningEffort.trim()\n if (effort) item.reasoningEffort = effort\n }\n if (typeof draft.label === 'string') {\n const label = draft.label.trim()\n if (label) item.label = label\n }\n return [...judges, item]\n}\n\nexport function removeExtraJudge(\n judges: readonly ExtraJudgeDraft[],\n index: number,\n): ExtraJudgeDraft[] {\n if (index < 0 || index >= judges.length) {\n return [...judges]\n }\n return judges.filter((_, i) => i !== index)\n}\n\nexport function serializeExtraJudges(\n judges: readonly ExtraJudgeDraft[],\n): Array<Record<string, string>> {\n const list = judges.slice(0, MAX_EXTRA_JUDGES)\n const result: Array<Record<string, string>> = []\n for (const judge of list) {\n const provider = judge.provider.trim()\n const model = judge.model.trim()\n if (!provider || !model) continue\n const entry: Record<string, string> = { provider, model }\n if (typeof judge.reasoningEffort === 'string') {\n const effort = judge.reasoningEffort.trim()\n if (effort) entry.reasoningEffort = effort\n }\n if (typeof judge.label === 'string') {\n const label = judge.label.trim()\n if (label) entry.label = label\n }\n result.push(entry)\n }\n return result\n}\n","import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { ModelProviderGroup, SettingsNamespaceView } from '@deepseek-ai/dsh-api-remotes/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-slots'\nimport { Button, IconDataOutline16, IconRefreshOutline16, Input } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n zh, en, dictionaries, toolLabels, tFormat, useLanguage, detectLanguage,\n compact, money, duration, dateTime, type I18nDict,\n type VerdictSummary, resolveCacheDirOnSave,\n WORST_CASE_ROUTE_CALLS_PER_JUDGE, WORST_CASE_FINAL_CALLS_PER_JUDGE, WORST_CASE_TASK_PER_JUDGE, WORST_CASE_SESSION_PER_JUDGE,\n computeJudgeCount, computeWorstCaseBudget, type BudgetWarningState,\n evaluateBudgetWarning, isVerdictFailed, formatPercentage, formatVerdictDetails,\n} from './client-i18n.ts'\nimport {\n type ExtraJudgeDraft,\n MAX_EXTRA_JUDGES,\n normalizeExtraJudges,\n judgeIdentity,\n judgeConflict,\n addExtraJudge,\n removeExtraJudge,\n serializeExtraJudges,\n} from './client-judges.ts'\n\nexport {\n zh, en, dictionaries, toolLabels, tFormat, useLanguage, detectLanguage, compact, money, duration, dateTime, type I18nDict,\n type VerdictSummary, resolveCacheDirOnSave, WORST_CASE_ROUTE_CALLS_PER_JUDGE, WORST_CASE_FINAL_CALLS_PER_JUDGE, WORST_CASE_TASK_PER_JUDGE, WORST_CASE_SESSION_PER_JUDGE,\n computeJudgeCount, computeWorstCaseBudget, type BudgetWarningState, evaluateBudgetWarning, isVerdictFailed,\n formatPercentage, formatVerdictDetails,\n}\n\nconst NS = 'llm-verifier'\nexport interface Values { enabled: boolean; autoVerifyMode: 'manual'|'smart'|'strict'; autoVerifyThreshold: number; autoVerifyRepeats: number; autoVerifyFinalRepeats: number; autoVerifyMinToolCalls: number; autoVerifyMaxChars: number; autoVerifyMaxPerTask: number; autoVerifyMaxPerSession: number; autoRouteSemantic: boolean; autoRouteMinConfidence: number; autoRouteMaxCandidates: number; autoRouteMaxPerTask: number; autoRouteMaxPerSession: number; autoTrackCompletionThreshold: number; autoRouteMaxItemChars: number; autoRouteMaxInputChars: number; autoMaxModelCallsPerTask: number; autoMaxModelCallsPerSession: number; autoVerifyTeamTasks: boolean; autoVerifyPlanMode: boolean; provider: string; model: string; reasoningEffort?: string; maxTokens: number; temperature: number; label?: string; maxConcurrency: number; maxRetries: number; retryBaseDelayMs: number; timeoutMs: number; cacheDir: string; cacheMaxEntries: number; estimatedInputUsdPerMillion: number; estimatedOutputUsdPerMillion: number; autoVerifySubagents: boolean; extraJudges: ExtraJudgeDraft[] }\nexport interface Loaded { groups: readonly ModelProviderGroup[]; settings: SettingsNamespaceView; writable: boolean; failures: string[] }\nexport interface RunStats { calls: number; attempts: number; retries: number; inputTokens: number; cachedInputTokens: number; outputTokens: number; reasoningTokens: number; cacheHits: number; cacheMisses: number; estimatedCostUsd: number; topLogprobScores: number; explicitTagScores: number }\nexport interface InvocationRecord { id: string; toolName: string; sessionId?: string; startedAt: number; finishedAt: number; durationMs: number; success: boolean; errorName?: string; errorMessage?: string; provider: string; model: string; stats: RunStats; verdict?: VerdictSummary }\ninterface DailyStatistics { date: string; invocations: number; successes: number; failures: number; calls: number; tokens: number; estimatedCostUsd: number; byTool: Record<string, number> }\ninterface ToolStatistics { toolName: string; invocations: number; successes: number; failures: number; successRate: number; averageDurationMs: number; calls: number; tokens: number; cacheHits: number; cacheMisses: number; estimatedCostUsd: number }\ninterface ModelStatistics { provider: string; model: string; invocations: number; calls: number; tokens: number; estimatedCostUsd: number }\ninterface Totals extends RunStats { invocations: number; successes: number; failures: number; successRate: number; averageDurationMs: number; tokens: number; cacheHitRate: number }\ninterface StatisticsOverview { generatedAt: number; fromMs: number; toMs: number; sessionId?: string; totals: Totals; daily: DailyStatistics[]; tools: ToolStatistics[]; models: ModelStatistics[]; recent: InvocationRecord[] }\ninterface VerifierRemote {\n session: {\n modelCatalog(): Promise<{\n ok: boolean\n value: { groups: readonly ModelProviderGroup[]; failures: readonly { id?: string; provider?: string; name?: string; message: string }[] }\n error: { message: string }\n }>\n }\n settings: {\n describe(): Promise<{\n ok: boolean\n value: { writable: boolean; namespaces: readonly SettingsNamespaceView[] }\n error: { message: string }\n }>\n update(\n ns: string,\n patch: Record<string, unknown>,\n expectedRevision: number | undefined,\n ): Promise<{\n ok: boolean\n value: SettingsNamespaceView\n error: { message: string }\n }>\n }\n}\n\ninterface VerifierSettingsProps { remote: VerifierRemote }\ninterface StatisticsPageProps {\n sessionId?: string\n isGlobal?: boolean\n rpc: {\n call(channel: string, endpoint: string, payload: unknown, signal?: AbortSignal): Promise<{ ok: boolean; value?: unknown; error?: { message: string } }>\n }\n}\n\nconst shell: React.CSSProperties = { width: '100%', maxWidth: 720, display: 'flex', flexDirection: 'column', gap: 12, padding: '0 0 32px', color: 'var(--dsw-alias-label-primary)' }\nconst settingsHeading: React.CSSProperties = { margin: 0, fontSize: 16, fontWeight: 500, lineHeight: '24px', color: 'var(--dsw-alias-label-primary)' }\nconst settingsIntro: React.CSSProperties = { margin: 0, fontSize: 14, lineHeight: '22px', color: 'var(--dsw-alias-label-tertiary)' }\nconst group: React.CSSProperties = { width: '100%', display: 'flex', flexDirection: 'column', borderTop: '1px solid var(--dsw-alias-border-l2)' }\nconst groupTitle: React.CSSProperties = { margin: 0, padding: '18px 0 8px', fontSize: 14, fontWeight: 500, lineHeight: '22px', color: 'var(--dsw-alias-label-primary)' }\nconst row: React.CSSProperties = { minHeight: 64, display: 'grid', gridTemplateColumns: 'minmax(180px, 1fr) minmax(230px, 288px)', gap: 24, alignItems: 'center', padding: '12px 0', borderBottom: '1px solid var(--dsw-alias-border-l2)' }\nconst selectStyle: React.CSSProperties = { boxSizing: 'border-box', width: '100%', height: 36, padding: '0 34px 0 12px', borderRadius: 8, color: 'var(--dsw-alias-label-primary)', background: 'var(--dsw-alias-bg-input)', border: '1px solid var(--dsw-alias-border-l2)', font: 'inherit', fontSize: 14, lineHeight: '22px', outline: 'none' }\nconst toggleStyle = (enabled: boolean): React.CSSProperties => ({ position: 'relative', justifySelf: 'end', width: 40, height: 22, padding: 0, border: 0, borderRadius: 999, cursor: 'pointer', transition: 'background .15s ease', background: enabled ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-bg-input)' })\nconst toggleThumbStyle = (enabled: boolean): React.CSSProperties => ({ position: 'absolute', top: 3, left: enabled ? 21 : 3, width: 16, height: 16, borderRadius: '50%', background: 'var(--dsw-static-neutral-00, #fff)', boxShadow: '0 1px 3px rgba(0,0,0,.28)', transition: 'left .15s ease' })\nconst dashboardCard: React.CSSProperties = { border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.13))', background: 'color-mix(in srgb, var(--dsw-alias-bg-module, #171925) 88%, transparent)', borderRadius: 16, boxShadow: '0 12px 36px rgba(0,0,0,.12)' }\nconst muted: React.CSSProperties = { color: 'var(--dsw-text-secondary)', fontSize: 12 }\nconst toolColors: Record<string, string> = { verifier_route_classify: '#d97706', verifier_compare: '#4f8cff', verifier_select: '#8b6df6', verifier_track: '#2fc5c9', verifier_current_session: '#f5a524' }\n\nfunction record(value: unknown): Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value) ? value as Record<string, unknown> : {} }\nfunction values(view: SettingsNamespaceView): Values { const v=record(view.value); const mode=v.autoVerifyMode==='manual'||v.autoVerifyMode==='strict'?v.autoVerifyMode:'smart'; return { enabled:v.enabled!==false,autoVerifyMode:mode,autoVerifyThreshold:Number(v.autoVerifyThreshold??.65),autoVerifyRepeats:Number(v.autoVerifyRepeats??1),autoVerifyFinalRepeats:Number(v.autoVerifyFinalRepeats??2),autoVerifyMinToolCalls:Number(v.autoVerifyMinToolCalls??3),autoVerifyMaxChars:Number(v.autoVerifyMaxChars??80000),autoVerifyMaxPerTask:Number(v.autoVerifyMaxPerTask??2),autoVerifyMaxPerSession:Number(v.autoVerifyMaxPerSession??8),autoRouteSemantic:v.autoRouteSemantic!==false,autoRouteMinConfidence:Number(v.autoRouteMinConfidence??.9),autoRouteMaxCandidates:Number(v.autoRouteMaxCandidates??8),autoRouteMaxPerTask:Number(v.autoRouteMaxPerTask??2),autoRouteMaxPerSession:Number(v.autoRouteMaxPerSession??8),autoTrackCompletionThreshold:Number(v.autoTrackCompletionThreshold??.8),autoRouteMaxItemChars:Number(v.autoRouteMaxItemChars??20000),autoRouteMaxInputChars:Number(v.autoRouteMaxInputChars??60000),autoMaxModelCallsPerTask:Number(v.autoMaxModelCallsPerTask??96),autoMaxModelCallsPerSession:Number(v.autoMaxModelCallsPerSession??240),autoVerifyTeamTasks:v.autoVerifyTeamTasks!==false,autoVerifyPlanMode:v.autoVerifyPlanMode!==false,provider:String(v.provider??''),model:String(v.model??''),...(typeof v.reasoningEffort==='string'?{reasoningEffort:v.reasoningEffort}:{}),maxTokens:Number(v.maxTokens??32768),temperature:Number(v.temperature??0.2),...(typeof v.label==='string'&&v.label.trim()?{label:v.label.trim()}:{}),maxConcurrency:Number(v.maxConcurrency??8),maxRetries:Number(v.maxRetries??3),retryBaseDelayMs:Number(v.retryBaseDelayMs??500),timeoutMs:Number(v.timeoutMs??300000),cacheDir:typeof v.cacheDir==='string'&&v.cacheDir.trim()?v.cacheDir.trim():'verifier',cacheMaxEntries:Number(v.cacheMaxEntries??10000),estimatedInputUsdPerMillion:Number(v.estimatedInputUsdPerMillion??0),estimatedOutputUsdPerMillion:Number(v.estimatedOutputUsdPerMillion??0),autoVerifySubagents:v.autoVerifySubagents===true,extraJudges:normalizeExtraJudges(v.extraJudges) } }\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n/** The endpoint answered but rejected the request: a transport fallback would only repeat it. */\nclass EndpointError extends Error {}\nfunction Label({title,help}:{title:string;help:string}) { return <div style={{minWidth:0}}><div style={{fontSize:14,fontWeight:400,lineHeight:'22px',color:'var(--dsw-alias-label-primary)'}}>{title}</div><div style={{fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-label-tertiary)',marginTop:2}}>{help}</div></div> }\nfunction GroupTitle({children}:{children:React.ReactNode}) { return <h3 style={groupTitle}>{children}</h3> }\nfunction startOfRange(days: number): number { const date = new Date(); date.setHours(0,0,0,0); date.setDate(date.getDate() - days + 1); return date.getTime() }\nfunction endOfToday(): number { const date = new Date(); date.setHours(0,0,0,0); date.setDate(date.getDate() + 1); return date.getTime() }\n\nexport function VerifierSettings({ remote }: VerifierSettingsProps) {\n const lang = useLanguage()\n const t = dictionaries[lang]\n const [loaded,setLoaded]=useState<Loaded|null>(null); const [draft,setDraft]=useState<Values|null>(null); const [busy,setBusy]=useState(false); const [error,setError]=useState<string|null>(null); const [saved,setSaved]=useState(false); const [editing,setEditing]=useState<Record<string,string>>({})\n const load=async()=>{setError(null);try{const [m,s]=await Promise.all([remote.session.modelCatalog(),remote.settings.describe()]);if(!m.ok)throw new Error(m.error.message);if(!s.ok)throw new Error(s.error.message);const view=s.value.namespaces.find((x:SettingsNamespaceView)=>x.ns===NS);if(!view)throw new Error(t['settings.nsUnregistered']);const next={groups:m.value.groups,settings:view,writable:s.value.writable,failures:m.value.failures.map((f: { id?: string; provider?: string; name?: string; message: string })=>(f.id??f.provider??f.name??'unknown')+': '+f.message)};setLoaded(next);setDraft(values(view));setEditing({})}catch(e){setError(message(e))}}\n useEffect(()=>{void load()},[])\n const models=useMemo(()=>loaded?.groups.find(g=>g.id===draft?.provider)?.models??[],[loaded,draft?.provider])\n const selected=models.find(m=>m.id===draft?.model); const efforts=selected?.reasoning?.efforts??[]\n const patch=<K extends keyof Values>(key:K,value:Values[K])=>{setSaved(false);setDraft(v=>v?{...v,[key]:value}:v)}\n const conflict = useMemo(() => (draft ? judgeConflict({ provider: draft.provider, model: draft.model }, draft.extraJudges) : undefined), [draft?.provider, draft?.model, draft?.extraJudges])\n const addJudge = () => {\n if (!loaded || !draft || draft.extraJudges.length >= MAX_EXTRA_JUDGES) return\n const firstGroup = loaded.groups[0]\n const firstProvider = firstGroup?.id ?? ''\n const firstModelObj = firstGroup?.models[0]\n const firstModel = firstModelObj?.id ?? ''\n const defaultEffort = firstModelObj?.reasoning?.defaultEffort\n const newJudge: ExtraJudgeDraft = {\n provider: firstProvider,\n model: firstModel,\n ...(defaultEffort ? { reasoningEffort: defaultEffort } : {}),\n }\n patch('extraJudges', addExtraJudge(draft.extraJudges, newJudge))\n }\n const removeJudge = (idx: number) => {\n if (!draft) return\n patch('extraJudges', removeExtraJudge(draft.extraJudges, idx))\n }\n const updateJudge = (idx: number, updates: Partial<ExtraJudgeDraft>) => {\n if (!draft) return\n const next = draft.extraJudges.map((j, i) => (i === idx ? { ...j, ...updates } : j))\n patch('extraJudges', next)\n }\n const budgetWarning = useMemo(() => {\n if (!draft) return null\n return evaluateBudgetWarning(\n draft.autoVerifyMode,\n draft.extraJudges.length,\n draft.autoMaxModelCallsPerTask,\n draft.autoMaxModelCallsPerSession,\n )\n }, [draft?.autoVerifyMode, draft?.extraJudges.length, draft?.autoMaxModelCallsPerTask, draft?.autoMaxModelCallsPerSession])\n const save=async()=>{if(!loaded||!draft||conflict)return;setBusy(true);setSaved(false);setError(null);try{const section={...record(loaded.settings.user),...draft,extraJudges:serializeExtraJudges(draft.extraJudges)};if(!draft.reasoningEffort)delete section.reasoningEffort;if(!draft.label||!draft.label.trim())delete section.label;else section.label=draft.label.trim();const resolvedCacheDir=resolveCacheDirOnSave(draft.cacheDir,values(loaded.settings).cacheDir);if(!resolvedCacheDir)delete (section as {cacheDir?:string}).cacheDir;else section.cacheDir=resolvedCacheDir;const res=await remote.settings.update(NS,section as never,loaded.settings.revision);if(!res.ok)throw new Error(res.error.message);setLoaded(v=>v?{...v,settings:res.value}:v);setDraft(values(res.value));setEditing({});setSaved(true)}catch(e){setError(message(e))}finally{setBusy(false)}}\n if(!loaded||!draft)return <div style={shell}><h2 style={settingsHeading}>{t['settings.title']}</h2><p style={settingsIntro}>{error??t['settings.loading']}</p>{error&&<div><Button variant=\"outline\" onClick={()=>void load()}>{t['settings.retry']}</Button></div>}</div>\n // Fractional settings are typed character by character, so the raw text is\n // kept while the field has focus: a controlled type=\"number\" input rewrites\n // \"0.\" back to \"0\" and swallows the decimal point. The parsed value is\n // committed on every keystroke that parses, and blur restores canonical text.\n const numeric=(key:keyof Values,min=0)=><Input\n style={{width:'100%',height:36,borderRadius:8}}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={busy}\n aria-label={(t[('field.'+key+'.title') as keyof I18nDict] as string|undefined)??String(key)}\n value={editing[key]??String(draft[key]??'')}\n onChange={e=>{const raw=e.target.value;setEditing(current=>current[key]===raw?current:{...current,[key]:raw});const parsed=Number(raw);if(raw.trim()!==''&&Number.isFinite(parsed)&&parsed>=min)patch(key,parsed as never)}}\n onBlur={()=>setEditing(current=>{if(!(key in current))return current;const next={...current};delete next[key];return next})}\n />\n const textField=(key:keyof Values,placeholder?:string)=><Input\n style={{width:'100%',height:36,borderRadius:8}}\n type=\"text\"\n disabled={busy}\n placeholder={placeholder}\n aria-label={(t[('field.'+key+'.title') as keyof I18nDict] as string|undefined)??String(key)}\n value={String(draft[key]??'')}\n onChange={e=>patch(key,e.target.value as never)}\n />\n return <div style={shell}>\n <h2 style={settingsHeading}>{t['settings.title']}</h2>\n <p style={settingsIntro}>{t['settings.intro']}</p>\n\n <section style={group}><GroupTitle>{t['section.tools']}</GroupTitle>\n <div style={row}><Label title={t['field.enabled.title']} help={draft.enabled?t['field.enabled.helpOn']:t['field.enabled.helpOff']}/><button type=\"button\" role=\"switch\" aria-checked={draft.enabled} aria-label={t['field.enabled.title']} onClick={()=>patch('enabled',!draft.enabled)} style={toggleStyle(draft.enabled)}><span style={toggleThumbStyle(draft.enabled)}/></button></div>\n {!draft.enabled&&<p style={{margin:'8px 0 0',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{t['field.enabled.warnDisabled']}</p>}\n </section>\n\n <section style={group}><GroupTitle>{t['section.autoVerify']}</GroupTitle>\n <div style={row}><Label title={t['field.autoVerifyMode.title']} help={t['field.autoVerifyMode.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.autoVerifyMode.title']} value={draft.autoVerifyMode} onChange={e=>patch('autoVerifyMode',e.target.value as Values['autoVerifyMode'])}><option value=\"manual\">{t['field.autoVerifyMode.manual']}</option><option value=\"smart\">{t['field.autoVerifyMode.smart']}</option><option value=\"strict\">{t['field.autoVerifyMode.strict']}</option></select></div>\n <div style={row}><Label title={t['field.autoRouteSemantic.title']} help={t['field.autoRouteSemantic.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoRouteSemantic} aria-label={t['field.autoRouteSemantic.title']} onClick={()=>patch('autoRouteSemantic',!draft.autoRouteSemantic)} style={toggleStyle(draft.autoRouteSemantic)}><span style={toggleThumbStyle(draft.autoRouteSemantic)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifyTeamTasks.title']} help={t['field.autoVerifyTeamTasks.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifyTeamTasks} aria-label={t['field.autoVerifyTeamTasks.title']} onClick={()=>patch('autoVerifyTeamTasks',!(draft.autoVerifyTeamTasks))} style={toggleStyle(draft.autoVerifyTeamTasks)}><span style={toggleThumbStyle(draft.autoVerifyTeamTasks)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifySubagents.title']} help={t['field.autoVerifySubagents.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifySubagents} aria-label={t['field.autoVerifySubagents.title']} onClick={()=>patch('autoVerifySubagents',!draft.autoVerifySubagents)} style={toggleStyle(draft.autoVerifySubagents)}><span style={toggleThumbStyle(draft.autoVerifySubagents)}/></button></div>\n <div style={row}><Label title={t['field.autoVerifyPlanMode.title']} help={t['field.autoVerifyPlanMode.help']}/><button type=\"button\" role=\"switch\" aria-checked={draft.autoVerifyPlanMode} aria-label={t['field.autoVerifyPlanMode.title']} onClick={()=>patch('autoVerifyPlanMode',!(draft.autoVerifyPlanMode))} style={toggleStyle(draft.autoVerifyPlanMode)}><span style={toggleThumbStyle(draft.autoVerifyPlanMode)}/></button></div>\n <div style={row}><Label title={t['field.autoRouteMinConfidence.title']} help={t['field.autoRouteMinConfidence.help']}/>{numeric('autoRouteMinConfidence',0)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxCandidates.title']} help={t['field.autoRouteMaxCandidates.help']}/>{numeric('autoRouteMaxCandidates',3)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxPerTask.title']} help={t['field.autoRouteMaxPerTask.help']}/>{numeric('autoRouteMaxPerTask',1)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxPerSession.title']} help={t['field.autoRouteMaxPerSession.help']}/>{numeric('autoRouteMaxPerSession',1)}</div>\n <div style={row}><Label title={t['field.autoTrackCompletionThreshold.title']} help={t['field.autoTrackCompletionThreshold.help']}/>{numeric('autoTrackCompletionThreshold',0)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxItemChars.title']} help={t['field.autoRouteMaxItemChars.help']}/>{numeric('autoRouteMaxItemChars',100)}</div>\n <div style={row}><Label title={t['field.autoRouteMaxInputChars.title']} help={t['field.autoRouteMaxInputChars.help']}/>{numeric('autoRouteMaxInputChars',1000)}</div>\n <div style={row}><Label title={t['field.autoMaxModelCallsPerTask.title']} help={t['field.autoMaxModelCallsPerTask.help']}/>{numeric('autoMaxModelCallsPerTask',1)}</div>\n {budgetWarning?.warnTask&&<p style={{margin:'-4px 0 10px',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{tFormat(t['field.autoMaxModelCallsPerTask.warnBudget'],{current:draft.autoMaxModelCallsPerTask,required:budgetWarning.worstCaseTask,judges:budgetWarning.judgeCount})}</p>}\n <div style={row}><Label title={t['field.autoMaxModelCallsPerSession.title']} help={t['field.autoMaxModelCallsPerSession.help']}/>{numeric('autoMaxModelCallsPerSession',1)}</div>\n {budgetWarning?.warnSession&&<p style={{margin:'-4px 0 10px',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{tFormat(t['field.autoMaxModelCallsPerSession.warnBudget'],{current:draft.autoMaxModelCallsPerSession,required:budgetWarning.worstCaseSession,judges:budgetWarning.judgeCount})}</p>}\n <div style={row}><Label title={t['field.autoVerifyThreshold.title']} help={t['field.autoVerifyThreshold.help']}/>{numeric('autoVerifyThreshold',0)}</div>\n <div style={row}><Label title={t['field.autoVerifyRepeats.title']} help={t['field.autoVerifyRepeats.help']}/>{numeric('autoVerifyRepeats',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyFinalRepeats.title']} help={t['field.autoVerifyFinalRepeats.help']}/>{numeric('autoVerifyFinalRepeats',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMinToolCalls.title']} help={t['field.autoVerifyMinToolCalls.help']}/>{numeric('autoVerifyMinToolCalls',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxChars.title']} help={t['field.autoVerifyMaxChars.help']}/>{numeric('autoVerifyMaxChars',1000)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxPerTask.title']} help={t['field.autoVerifyMaxPerTask.help']}/>{numeric('autoVerifyMaxPerTask',1)}</div>\n <div style={row}><Label title={t['field.autoVerifyMaxPerSession.title']} help={t['field.autoVerifyMaxPerSession.help']}/>{numeric('autoVerifyMaxPerSession',1)}</div>\n {draft.autoVerifyMode!=='manual'&&<p style={{margin:'8px 0 0',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{t['field.autoVerify.warnNotice']}</p>}\n </section>\n\n <section style={group}><GroupTitle>{t['section.model']}</GroupTitle>\n <div style={row}><Label title={t['field.provider.title']} help={t['field.provider.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.provider.title']} value={draft.provider} onChange={e=>{const provider=e.target.value;const first=loaded.groups.find(g=>g.id===provider)?.models[0];setDraft({...draft,provider,...(first?{model:first.id,reasoningEffort:first.reasoning?.defaultEffort}:{})})}}>{loaded.groups.map(g=><option key={g.id} value={g.id}>{g.name} · {g.id}</option>)}</select></div>\n <div style={row}><Label title={t['field.model.title']} help={t['field.model.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.model.title']} value={draft.model} onChange={e=>{const model=e.target.value;const found=models.find(m=>m.id===model);setDraft({...draft,model,...(found?.reasoning?.defaultEffort?{reasoningEffort:found.reasoning.defaultEffort}:{reasoningEffort:undefined})})}}>{models.map(m=><option key={m.id} value={m.id}>{m.name} · {m.id}</option>)}</select></div>\n <div style={row}><Label title={t['field.reasoningEffort.title']} help={t['field.reasoningEffort.help']}/><select style={selectStyle} disabled={busy} aria-label={t['field.reasoningEffort.title']} value={draft.reasoningEffort??''} onChange={e=>patch('reasoningEffort',e.target.value||undefined)}><option value=\"\">{t['field.reasoningEffort.default']}</option>{efforts.map(e=><option key={e.id} value={e.id}>{e.name}</option>)}</select></div>\n <div style={row}><Label title={t['field.maxTokens.title']} help={t['field.maxTokens.help']}/>{numeric('maxTokens',1)}</div>\n <div style={row}><Label title={t['field.temperature.title']} help={t['field.temperature.help']}/>{numeric('temperature',0)}</div>\n <div style={row}><Label title={t['field.label.title']} help={t['field.label.help']}/><Input style={{width:'100%',height:36,borderRadius:8}} type=\"text\" disabled={busy} placeholder={draft.model||t['field.label.placeholder']} aria-label={t['field.label.title']} value={draft.label??''} onChange={e=>patch('label',e.target.value||undefined)}/></div>\n <div style={{...row,gridTemplateColumns:'minmax(180px, 1fr) auto',minHeight:48}}><Label title={t['field.extraJudges.title']} help={t['field.extraJudges.help']}/><Button variant=\"outline\" disabled={busy||draft.extraJudges.length>=MAX_EXTRA_JUDGES} onClick={addJudge}>{t['field.extraJudges.add']}</Button></div>\n {draft.extraJudges.length>0&&<div style={{display:'flex',flexDirection:'column',gap:8,padding:'10px 0',borderBottom:'1px solid var(--dsw-alias-border-l2)'}}>\n <div style={{display:'grid',gridTemplateColumns:'minmax(110px, 1.2fr) minmax(120px, 1.3fr) minmax(95px, 1fr) minmax(95px, 1fr) auto',gap:8,fontSize:12,color:'var(--dsw-alias-label-tertiary)',paddingBottom:2}}>\n <div>{t['field.provider.title']}</div>\n <div>{t['field.model.title']}</div>\n <div>{t['field.reasoningEffort.title']}</div>\n <div>{t['field.extraJudges.labelTitle']}</div>\n <div/>\n </div>\n {draft.extraJudges.map((judge,idx)=>{\n const judgeGroup=loaded.groups.find(g=>g.id===judge.provider)\n const judgeModels=judgeGroup?.models??[]\n const judgeModel=judgeModels.find(m=>m.id===judge.model)\n const judgeEfforts=judgeModel?.reasoning?.efforts??[]\n return <div key={idx} style={{display:'grid',gridTemplateColumns:'minmax(110px, 1.2fr) minmax(120px, 1.3fr) minmax(95px, 1fr) minmax(95px, 1fr) auto',gap:8,alignItems:'center'}}>\n <select style={selectStyle} disabled={busy} aria-label={tFormat(t['field.extraJudges.providerAria'],{index:idx+1})} value={judge.provider} onChange={e=>{\n const newProvider=e.target.value\n const targetGroup=loaded.groups.find(g=>g.id===newProvider)\n const firstM=targetGroup?.models[0]\n updateJudge(idx,{\n provider:newProvider,\n model:firstM?.id??'',\n ...(firstM?.reasoning?.defaultEffort?{reasoningEffort:firstM.reasoning.defaultEffort}:{reasoningEffort:undefined}),\n })\n }}>\n {!loaded.groups.some(g=>g.id===judge.provider)&&judge.provider&&<option value={judge.provider}>{judge.provider}</option>}\n {loaded.groups.map(g=><option key={g.id} value={g.id}>{g.name} · {g.id}</option>)}\n </select>\n <select style={selectStyle} disabled={busy} aria-label={tFormat(t['field.extraJudges.modelAria'],{index:idx+1})} value={judge.model} onChange={e=>{\n const newModel=e.target.value\n const found=judgeModels.find(m=>m.id===newModel)\n updateJudge(idx,{\n model:newModel,\n ...(found?.reasoning?.defaultEffort?{reasoningEffort:found.reasoning.defaultEffort}:{reasoningEffort:undefined}),\n })\n }}>\n {!judgeModels.some(m=>m.id===judge.model)&&judge.model&&<option value={judge.model}>{judge.model}</option>}\n {judgeModels.map(m=><option key={m.id} value={m.id}>{m.name} · {m.id}</option>)}\n </select>\n <select style={selectStyle} disabled={busy} aria-label={tFormat(t['field.extraJudges.effortAria'],{index:idx+1})} value={judge.reasoningEffort??''} onChange={e=>updateJudge(idx,{reasoningEffort:e.target.value||undefined})}>\n <option value=\"\">{t['field.reasoningEffort.default']}</option>\n {judgeEfforts.map(ef=><option key={ef.id} value={ef.id}>{ef.name}</option>)}\n </select>\n <Input style={{width:'100%',height:36,borderRadius:8}} type=\"text\" disabled={busy} placeholder={t['field.extraJudges.labelPlaceholder']} aria-label={tFormat(t['field.extraJudges.labelAria'],{index:idx+1})} value={judge.label??''} onChange={e=>updateJudge(idx,{label:e.target.value})}/>\n <Button variant=\"outline\" disabled={busy} aria-label={tFormat(t['field.extraJudges.removeAria'],{index:idx+1})} onClick={()=>removeJudge(idx)}>{t['field.extraJudges.remove']}</Button>\n </div>\n })}\n </div>}\n {conflict&&<p style={{margin:'8px 0 0',fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-warn-label)'}}>{conflict.duplicateOf==='primary'?tFormat(t['field.extraJudges.conflictPrimary'],{index:conflict.index+1,id:judgeIdentity(draft.extraJudges[conflict.index]?.provider??'',draft.extraJudges[conflict.index]?.model??'')}):tFormat(t['field.extraJudges.conflictDuplicate'],{index:conflict.index+1,other:conflict.duplicateOf+1,id:judgeIdentity(draft.extraJudges[conflict.index]?.provider??'',draft.extraJudges[conflict.index]?.model??'')})}</p>}\n </section>\n\n <section style={group}><GroupTitle>{t['section.execution']}</GroupTitle>\n <div style={row}><Label title={t['field.maxConcurrency.title']} help={t['field.maxConcurrency.help']}/>{numeric('maxConcurrency',1)}</div>\n <div style={row}><Label title={t['field.maxRetries.title']} help={t['field.maxRetries.help']}/>{numeric('maxRetries',0)}</div>\n <div style={row}><Label title={t['field.retryBaseDelayMs.title']} help={t['field.retryBaseDelayMs.help']}/>{numeric('retryBaseDelayMs',1)}</div>\n <div style={row}><Label title={t['field.timeoutMs.title']} help={t['field.timeoutMs.help']}/>{numeric('timeoutMs',1)}</div>\n <div style={row}><Label title={t['field.cacheDir.title']} help={t['field.cacheDir.help']}/>{textField('cacheDir','verifier')}</div>\n <div style={row}><Label title={t['field.cacheMaxEntries.title']} help={t['field.cacheMaxEntries.help']}/>{numeric('cacheMaxEntries',1)}</div>\n </section>\n\n <section style={group}><GroupTitle>{t['section.cost']}</GroupTitle>\n <div style={row}><Label title={t['field.estimatedInputUsdPerMillion.title']} help={t['field.estimatedInputUsdPerMillion.help']}/>{numeric('estimatedInputUsdPerMillion',0)}</div>\n <div style={row}><Label title={t['field.estimatedOutputUsdPerMillion.title']} help={t['field.estimatedOutputUsdPerMillion.help']}/>{numeric('estimatedOutputUsdPerMillion',0)}</div>\n </section>\n\n {loaded.failures.length>0&&<div style={{padding:'10px 12px',borderRadius:8,background:'var(--dsw-alias-state-warn-bg)',color:'var(--dsw-alias-state-warn-label)',fontSize:12,lineHeight:'18px'}}><div style={{fontWeight:500,marginBottom:3}}>{t['settings.catalogFailures']}</div>{loaded.failures.map(x=><div key={x}>{x}</div>)}</div>}\n {error&&<p style={{margin:0,fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-error-primary)'}}>{error}</p>}{saved&&<p style={{margin:0,fontSize:12,lineHeight:'18px',color:'var(--dsw-alias-state-success-primary)'}}>{t['settings.saved']}</p>}\n <div style={{display:'flex',justifyContent:'flex-end',gap:8,paddingTop:4}}><Button variant=\"outline\" disabled={busy} onClick={()=>void load()}>{t['settings.reload']}</Button><Button variant=\"primary\" disabled={busy||!loaded.writable||Boolean(conflict)} onClick={()=>void save()}>{busy?t['settings.saving']:t['settings.save']}</Button></div>\n </div>\n}\n\nfunction Metric({ label, value, note, accent }:{label:string;value:string;note:string;accent?:string}) {\n return <div style={{...dashboardCard,padding:'16px 18px',minWidth:0}}><div style={muted}>{label}</div><div style={{fontSize:25,fontWeight:750,lineHeight:1.2,margin:'7px 0 5px',color:accent}}>{value}</div><div style={{...muted,overflow:'hidden',textOverflow:'ellipsis',whiteSpace:'nowrap'}}>{note}</div></div>\n}\n\nfunction TrendChart({ daily, days, lang }:{daily:DailyStatistics[];days:number;lang:'zh'|'en'}) {\n const t = dictionaries[lang]\n const rows=useMemo(()=>{const map=new Map(daily.map(row=>[row.date,row]));const values:DailyStatistics[]=[];const start=new Date(startOfRange(days));for(let i=0;i<days;i+=1){const date=new Date(start);date.setDate(start.getDate()+i);const key=[date.getFullYear(),String(date.getMonth()+1).padStart(2,'0'),String(date.getDate()).padStart(2,'0')].join('-');values.push(map.get(key)??{date:key,invocations:0,successes:0,failures:0,calls:0,tokens:0,estimatedCostUsd:0,byTool:{}})}return values},[daily,days])\n const width=760,height=230,pad={l:44,r:24,t:20,b:38};const innerW=width-pad.l-pad.r,innerH=height-pad.t-pad.b\n const max=Math.max(1,...rows.flatMap(row=>[row.invocations,row.calls]));const x=(index:number)=>pad.l+(rows.length<=1?innerW/2:index*innerW/(rows.length-1));const y=(value:number)=>pad.t+innerH-value/max*innerH\n const points=rows.map((row,index)=>`${x(index)},${y(row.calls)}`).join(' ');const step=rows.length>16?Math.ceil(rows.length/7):Math.max(1,Math.ceil(rows.length/7));const barWidth=Math.max(3,Math.min(18,innerW/Math.max(rows.length,1)*.55))\n return <div style={{width:'100%',overflowX:'auto'}}><svg viewBox={`0 0 ${width} ${height}`} style={{display:'block',width:'100%',minWidth:620,height:'auto'}} aria-label={t['chart.ariaLabel']}>\n {[0,.25,.5,.75,1].map(ratio=><g key={ratio}><line x1={pad.l} x2={width-pad.r} y1={pad.t+innerH*ratio} y2={pad.t+innerH*ratio} stroke=\"rgba(148,163,184,.16)\"/><text x={pad.l-8} y={pad.t+innerH*ratio+4} textAnchor=\"end\" fontSize=\"10\" fill=\"var(--dsw-text-secondary)\">{Math.round(max*(1-ratio))}</text></g>)}\n {rows.map((row,index)=><rect key={row.date} x={x(index)-barWidth/2} y={y(row.invocations)} width={barWidth} height={pad.t+innerH-y(row.invocations)} rx=\"2\" fill=\"#4f8cff\" opacity=\".82\"/>)}\n <polyline points={points} fill=\"none\" stroke=\"#5ed7e8\" strokeWidth=\"2.4\" strokeLinejoin=\"round\" strokeLinecap=\"round\"/>\n {rows.map((row,index)=>index%step===0||index===rows.length-1?<text key={row.date} x={x(index)} y={height-14} textAnchor=\"middle\" fontSize=\"10\" fill=\"var(--dsw-text-secondary)\">{Number(row.date.slice(5,7))}/{Number(row.date.slice(8,10))}</text>:null)}\n </svg><div style={{display:'flex',justifyContent:'center',gap:18,...muted}}><span><i style={{display:'inline-block',width:8,height:8,borderRadius:2,background:'#4f8cff',marginRight:6}}/>{t['chart.legendToolCalls']}</span><span><i style={{display:'inline-block',width:14,height:2,background:'#5ed7e8',marginRight:6,verticalAlign:'middle'}}/>{t['chart.legendModelCalls']}</span></div></div>\n}\n\nexport function StatisticsPage({ sessionId, rpc, isGlobal }: StatisticsPageProps) {\n const lang = useLanguage()\n const t = dictionaries[lang]\n const labels = toolLabels[lang]\n const [days, setDays] = useState(30)\n const [sessionOnly, setSessionOnly] = useState(!isGlobal && Boolean(sessionId))\n const [data, setData] = useState<StatisticsOverview | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [refresh, setRefresh] = useState(0)\n // Data belongs to the range/session that produced it: keeping the previous\n // range's numbers under an error banner reads as if they were current.\n const queryKey = days + '|' + sessionOnly + '|' + String(sessionId ?? '')\n const lastQueryKey = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n const controller = new AbortController()\n setLoading(true); setError(null)\n if (lastQueryKey.current !== undefined && lastQueryKey.current !== queryKey) setData(null)\n lastQueryKey.current = queryKey\n const effectiveSessionId = sessionOnly && sessionId ? String(sessionId) : undefined\n const queryPayload = {\n fromMs: startOfRange(days),\n toMs: endOfToday(),\n timezoneOffsetMinutes: new Date().getTimezoneOffset(),\n recentLimit: 50,\n ...(effectiveSessionId ? { sessionId: effectiveSessionId } : {}),\n }\n\n const fetchOverview = async (): Promise<StatisticsOverview> => {\n if (rpc && typeof rpc.call === 'function') {\n try {\n const result = await rpc.call('/api', 'llm-verifier/statistics', queryPayload, controller.signal)\n if (result && result.ok) {\n return result.value as StatisticsOverview\n }\n if (result && result.ok === false) {\n throw new EndpointError(result.error?.message ?? t['stats.requestFailed'])\n }\n } catch (rpcError) {\n if (controller.signal.aborted) throw rpcError\n // A business rejection is the host's real answer; retrying it over the\n // raw fetch endpoint would only duplicate the request and hide it.\n if (rpcError instanceof EndpointError) throw rpcError\n console.warn('[llm-verifier] rpc.call failed, trying fetch fallback:', rpcError)\n }\n }\n\n try {\n const response = await fetch('/api/llm-verifier/statistics', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(queryPayload),\n signal: controller.signal,\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText || t['stats.requestFailed']}`)\n }\n const data = await response.json()\n if (data && data.ok === true) {\n return data.value as StatisticsOverview\n }\n if (data && data.type === 'server-response' && data.result?.ok === true) {\n return data.result.value as StatisticsOverview\n }\n throw new EndpointError(data?.error?.message ?? data?.result?.error?.message ?? t['stats.requestFailed'])\n } catch (fetchError) {\n if (controller.signal.aborted) throw fetchError\n if (fetchError instanceof EndpointError) throw fetchError\n // Hosts without the exact Fetch route registry only answer on the plugin's own channel.\n if (rpc && typeof rpc.call === 'function') {\n const legacy = await rpc.call('/llm-verifier', 'statistics', queryPayload, controller.signal)\n if (legacy && legacy.ok) return legacy.value as StatisticsOverview\n }\n throw fetchError\n }\n }\n\n void fetchOverview()\n .then(overview => {\n if (!controller.signal.aborted) setData(overview)\n })\n .catch((cause: unknown) => {\n if (!controller.signal.aborted) setError(message(cause))\n })\n .finally(() => {\n if (!controller.signal.aborted) setLoading(false)\n })\n return () => controller.abort()\n }, [days, sessionOnly, sessionId, refresh, rpc, t, queryKey])\n\n const totals = data?.totals\n return <main style={{ height: '100%', overflow: 'auto', boxSizing: 'border-box', padding: '22px clamp(16px, 3vw, 38px) 48px', color: 'var(--dsw-text-primary)', background: 'radial-gradient(circle at 10% 0%, rgba(115,77,255,.09), transparent 32%), radial-gradient(circle at 100% 8%, rgba(47,197,201,.07), transparent 28%)' }}>\n <div style={{ maxWidth: 1180, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: 16 }}>\n <header style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: 16, flexWrap: 'wrap' }}>\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n <span style={{ display: 'grid', placeItems: 'center', width: 34, height: 34, borderRadius: 10, background: 'rgba(79,140,255,.14)', color: '#6da0ff' }}>\n <IconDataOutline16 size={18} />\n </span>\n <h2 style={{ margin: 0, fontSize: 23 }}>{isGlobal ? t['global.panelTitle'] : t['stats.pageTitle']}</h2>\n </div>\n <p style={{ margin: '7px 0 0 44px', ...muted }}>{isGlobal ? t['global.panelIntro'] : tFormat(t['stats.updatedAt'], { time: data ? dateTime(data.generatedAt, lang) : '--' })}</p>\n </div>\n <div style={{ display: 'flex', gap: 8, alignItems: 'center', flexWrap: 'wrap' }}>\n <div style={{ display: 'flex', padding: 3, borderRadius: 10, background: 'var(--dsw-surface-sunken)', border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.12))' }}>\n {[7, 30, 90].map(value => <button key={value} aria-pressed={days === value} onClick={() => setDays(value)} style={{ border: 0, borderRadius: 7, padding: '6px 10px', cursor: 'pointer', color: days === value ? '#fff' : 'var(--dsw-text-secondary)', background: days === value ? '#3f68d8' : 'transparent' }}>{tFormat(t['stats.daysUnit'], { days: value })}</button>)}\n </div>\n {Boolean(sessionId) && <button aria-pressed={sessionOnly} onClick={() => setSessionOnly(value => !value)} style={{ border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.15))', borderRadius: 9, padding: '7px 11px', cursor: 'pointer', color: 'var(--dsw-text-primary)', background: sessionOnly ? 'rgba(79,140,255,.18)' : 'var(--dsw-surface-sunken)' }}>{sessionOnly ? t['stats.currentSession'] : t['stats.allSessions']}</button>}\n <button title={t['stats.refresh']} onClick={() => setRefresh(value => value + 1)} style={{ display: 'grid', placeItems: 'center', width: 34, height: 34, borderRadius: 9, border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.15))', color: 'var(--dsw-text-primary)', background: 'var(--dsw-surface-sunken)', cursor: 'pointer' }}><IconRefreshOutline16 size={16} /></button>\n </div>\n </header>\n {error && <div style={{ ...dashboardCard, padding: 18, borderColor: 'var(--dsw-danger, #e85858)', color: 'var(--dsw-danger, #e85858)' }}>{error}<div style={{ ...muted, marginTop: 6 }}>{t['stats.hostRestartHint']}</div></div>}\n {loading && !data ? <div style={{ ...dashboardCard, padding: 32, textAlign: 'center', ...muted }}>{t['stats.loading']}</div> : <>\n <section style={{ ...dashboardCard, padding: '22px 24px', display: 'grid', gridTemplateColumns: 'minmax(220px,1.4fr) minmax(240px,1fr)', gap: 24, alignItems: 'center' }}>\n <div>\n <div style={muted}>{tFormat(t['stats.costSummary'], { days })}</div>\n <div style={{ fontSize: 38, fontWeight: 780, letterSpacing: '-.03em', margin: '5px 0' }}>{money(totals?.estimatedCostUsd ?? 0)}</div>\n <div style={muted}>{tFormat(t['stats.callsSummary'], { invocations: compact(totals?.invocations ?? 0, lang), calls: compact(totals?.calls ?? 0, lang) })}</div>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr auto', gap: '9px 16px', fontSize: 13 }}>\n <span style={muted}>{t['stats.successCalls']}</span><strong>{compact(totals?.successes ?? 0, lang)} <small style={{ color: '#77d49b' }}>▲ {((totals?.successRate ?? 0) * 100).toFixed(1)}%</small></strong>\n <span style={muted}>{t['stats.failedCalls']}</span><strong>{compact(totals?.failures ?? 0, lang)}</strong>\n <span style={muted}>{t['stats.avgDuration']}</span><strong>{duration(totals?.averageDurationMs ?? 0)}</strong>\n </div>\n </section>\n <section style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit,minmax(180px,1fr))', gap: 12 }}>\n <Metric label={t['metric.cacheHitRate']} value={((totals?.cacheHitRate ?? 0) * 100).toFixed(1) + '%'} note={tFormat(t['metric.cacheHitNote'], { hits: compact(totals?.cacheHits ?? 0, lang), total: compact((totals?.cacheHits ?? 0) + (totals?.cacheMisses ?? 0), lang) })} accent=\"#b7dd64\" />\n <Metric label={t['metric.tokens']} value={compact(totals?.tokens ?? 0, lang)} note={tFormat(t['metric.tokensNote'], { input: compact((totals?.inputTokens ?? 0) + (totals?.cachedInputTokens ?? 0), lang), output: compact(totals?.outputTokens ?? 0, lang) })} />\n <Metric label={t['metric.avgModelCalls']} value={(totals?.invocations ?? 0) > 0 ? ((totals?.calls ?? 0) / (totals?.invocations ?? 1)).toFixed(1) : '0'} note={tFormat(t['metric.avgModelCallsNote'], { attempts: compact(totals?.attempts ?? 0, lang), retries: compact(totals?.retries ?? 0, lang) })} />\n <Metric label={t['metric.scoringMode']} value={compact(totals?.topLogprobScores ?? 0, lang)} note={tFormat(t['metric.scoringModeNote'], { explicit: compact(totals?.explicitTagScores ?? 0, lang) })} />\n </section>\n <section style={{ ...dashboardCard, padding: '18px 20px 16px' }}><div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 4 }}><strong>{t['chart.title']}</strong><span style={muted}>{sessionOnly ? t['stats.currentSession'] : t['stats.allSessions']}</span></div><TrendChart daily={data?.daily ?? []} days={days} lang={lang} /></section>\n <section style={{ ...dashboardCard, padding: '18px 18px 8px', overflow: 'hidden' }}><div style={{ display: 'flex', justifyContent: 'space-between', margin: '0 2px 12px' }}><strong>{t['table.title']}</strong><span style={muted}>{tFormat(t['table.toolCount'], { count: (data?.tools ?? []).length })}</span></div><div style={{ overflowX: 'auto' }}><table style={{ width: '100%', borderCollapse: 'collapse', fontSize: 13, minWidth: 760 }}><thead><tr style={{ textAlign: 'left', color: 'var(--dsw-text-secondary)', background: 'var(--dsw-surface-sunken)' }}>{[t['table.colTool'], t['table.colInvocations'], t['table.colSuccessRate'], t['table.colAvgDuration'], t['table.colModelCalls'], t['table.colTokens'], t['table.colCacheHits'], t['table.colEstimatedCost']].map(value => <th key={value} style={{ padding: '10px 12px', fontWeight: 500 }}>{value}</th>)}</tr></thead><tbody>{(data?.tools ?? []).map(tool => <tr key={tool.toolName} style={{ borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.1))' }}><td style={{ padding: '13px 12px' }}><span style={{ display: 'inline-block', width: 8, height: 8, borderRadius: '50%', background: toolColors[tool.toolName] ?? '#8691a8', marginRight: 8 }} /><strong>{labels[tool.toolName] ?? tool.toolName}</strong><div style={{ ...muted, margin: '3px 0 0 16px' }}>{tool.toolName}</div></td><td style={{ padding: '13px 12px' }}>{compact(tool.invocations, lang)}</td><td style={{ padding: '13px 12px', color: tool.successRate >= .9 ? '#77d49b' : tool.successRate >= .7 ? '#e3bd63' : '#ed7777' }}>{(tool.successRate * 100).toFixed(1)}%</td><td style={{ padding: '13px 12px' }}>{duration(tool.averageDurationMs)}</td><td style={{ padding: '13px 12px' }}>{compact(tool.calls, lang)}</td><td style={{ padding: '13px 12px' }}>{compact(tool.tokens, lang)}</td><td style={{ padding: '13px 12px' }}>{tool.cacheHits}/{tool.cacheHits + tool.cacheMisses}</td><td style={{ padding: '13px 12px' }}>{money(tool.estimatedCostUsd)}</td></tr>)}{(data?.tools.length ?? 0) === 0 && <tr><td colSpan={8} style={{ padding: 28, textAlign: 'center', ...muted }}>{t['table.empty']}</td></tr>}</tbody></table></div></section>\n <section style={{ display: 'grid', gridTemplateColumns: 'minmax(0,1fr) minmax(290px,.45fr)', gap: 16, alignItems: 'start' }}><div style={{ ...dashboardCard, padding: '18px 18px 8px', overflow: 'hidden' }}><div style={{ display: 'flex', justifyContent: 'space-between', margin: '0 2px 12px' }}><strong>{t['recent.title']}</strong><span style={muted}>{t['recent.maxCount']}</span></div><div style={{ maxHeight: 360, overflow: 'auto' }}>{(data?.recent ?? []).map(item => {\n const verdictInfo = item.verdict ? formatVerdictDetails(item.verdict, t) : undefined\n const failed = !item.success || (verdictInfo ? verdictInfo.isFailed : false)\n return <div key={item.id} style={{ display: 'grid', gridTemplateColumns: 'minmax(170px,1fr) auto', gap: 12, padding: '11px 8px', borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.1))' }}>\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span style={{ width: 7, height: 7, borderRadius: '50%', background: failed ? '#e76565' : '#59c985' }} />\n <strong style={{ fontSize: 13 }}>{labels[item.toolName] ?? item.toolName}</strong>\n <span style={muted}>{item.provider}/{item.model}</span>\n </div>\n {!item.success && <div title={item.errorMessage} style={{ margin: '5px 0 0 15px', fontSize: 11, color: '#e76565', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{item.errorMessage ?? item.errorName}</div>}\n {item.verdict && verdictInfo && <div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: 6, margin: '6px 0 0 15px', fontSize: 11 }}>\n {verdictInfo.outcomeText && <span style={{ padding: '1px 5px', borderRadius: 4, fontWeight: 500, fontSize: 11, background: verdictInfo.isFailed ? 'rgba(231,101,101,.16)' : item.verdict.outcome === 'tie' ? 'rgba(227,189,99,.16)' : 'rgba(89,201,133,.16)', color: verdictInfo.isFailed ? '#e76565' : item.verdict.outcome === 'tie' ? '#e3bd63' : '#77d49b', border: `1px solid ${verdictInfo.isFailed ? 'rgba(231,101,101,.3)' : item.verdict.outcome === 'tie' ? 'rgba(227,189,99,.3)' : 'rgba(89,201,133,.3)'}` }}>{verdictInfo.outcomeText}</span>}\n {verdictInfo.phaseText && <span style={{ padding: '1px 5px', borderRadius: 4, background: 'var(--dsw-surface-sunken)', color: 'var(--dsw-text-secondary)', border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,.1))' }}>{verdictInfo.phaseText}</span>}\n {verdictInfo.scoreText && <span style={{ color: (typeof item.verdict.threshold === 'number' && typeof item.verdict.score === 'number' && item.verdict.score < item.verdict.threshold) ? '#e76565' : 'var(--dsw-text-primary)' }}>{verdictInfo.scoreText}</span>}\n {verdictInfo.winnerText && <span style={{ color: 'var(--dsw-text-secondary)' }}>{verdictInfo.winnerText}</span>}\n </div>}\n </div>\n <div style={{ textAlign: 'right' }}><div style={{ fontSize: 12 }}>{duration(item.durationMs)}</div><div style={{ ...muted, marginTop: 3 }}>{dateTime(item.startedAt, lang)}</div></div>\n </div>\n })}{(data?.recent.length ?? 0) === 0 && <div style={{ padding: 24, textAlign: 'center', ...muted }}>{t['recent.empty']}</div>}</div></div>\n <div style={{ ...dashboardCard, padding: '18px' }}><strong>{t['models.title']}</strong><div style={{ marginTop: 10, display: 'flex', flexDirection: 'column', gap: 10 }}>{(data?.models ?? []).map(model => <div key={model.provider + '\\0' + model.model} style={{ padding: '11px 12px', borderRadius: 10, background: 'var(--dsw-surface-sunken)' }}><div style={{ fontWeight: 650, fontSize: 13, overflow: 'hidden', textOverflow: 'ellipsis' }}>{model.model}</div><div style={{ ...muted, marginTop: 3 }}>{model.provider}</div><div style={{ display: 'flex', justifyContent: 'space-between', marginTop: 9, fontSize: 12 }}><span>{tFormat(t['models.calls'], { calls: compact(model.calls, lang) })}</span><span>{tFormat(t['models.tokens'], { tokens: compact(model.tokens, lang) })}</span><strong>{money(model.estimatedCostUsd)}</strong></div></div>)}{(data?.models.length ?? 0) === 0 && <div style={muted}>{t['models.empty']}</div>}</div></div></section>\n </>}\n </div>\n </main>\n}\n\nexport function VerifierSidebarIcon({ size, active }: { size: number; active?: boolean }) {\n return <span style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: size, height: size, color: active ? 'var(--dsw-alias-brand-primary, #4f8cff)' : 'currentColor' }}><IconDataOutline16 size={Math.min(18, size)} /></span>\n}\n\nexport function GlobalVerifierDashboard({ rpc }: { rpc: any }) {\n return <StatisticsPage rpc={rpc} isGlobal />\n}\n\nexport function RightSidebarVerifierPanel({ rpc, sessionId }: { rpc: any; sessionId?: string }) {\n return (\n <div style={{ height: '100%', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n <StatisticsPage rpc={rpc} sessionId={sessionId} />\n </div>\n )\n}\n\nexport function RightSidebarVerifierTitle() {\n const lang = useLanguage()\n const t = dictionaries[lang]\n return <span style={{ fontSize: 13, fontWeight: 500 }}>{t['slot.statistics']}</span>\n}\n\nexport const inject = ['slots', 'connection', 'remote', 'remote.session', 'remote.settings']\nexport function apply(ctx: ClientContext): void {\n const connection = ctx.get('connection') as any\n const remote = ctx.remote\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'llm-verifier',\n order: 35,\n label: 'LLM Verifier',\n inject: () => ({ remote }),\n }, VerifierSettings as never))\n ctx.slots.inject('conversation.view', () => ctx.slots.register({\n name: 'conversation.view',\n id: 'llm-verifier-statistics',\n order: 30,\n label: () => (detectLanguage() === 'zh' ? zh['slot.statistics'] : en['slot.statistics']),\n inject: () => ({ rpc: connection.rpc }),\n }, StatisticsPage as never))\n const VERIFIER_TAB_KIND = 'llm-verifier'\n const VERIFIER_TAB_ID = 'dsh-llm-verifier'\n\n const registerRightSidebar = (tabs: any): (() => void) | undefined => {\n if (!tabs || typeof tabs.register !== 'function') return undefined\n try {\n const disposer = tabs.register({\n id: VERIFIER_TAB_ID,\n kind: VERIFIER_TAB_KIND,\n priority: 'extension',\n title: () => (detectLanguage() === 'zh' ? zh['slot.statistics'] : en['slot.statistics']),\n guide: [{\n order: 45,\n title: () => (detectLanguage() === 'zh' ? zh['guide.verifier.title'] : en['guide.verifier.title']),\n description: () => (detectLanguage() === 'zh' ? zh['guide.verifier.desc'] : en['guide.verifier.desc']),\n icon: VerifierSidebarIcon,\n }],\n })\n return typeof disposer === 'function' ? disposer : undefined\n } catch (error) {\n console.warn('[llm-verifier] sidebar tab registration failed:', error)\n return undefined\n }\n }\n\n // ctx.inject() already runs its callback as soon as the service exists, so an\n // extra ctx.get() pre-check registered the same tab type twice; the registry\n // throws on a duplicate id and that throw used to be swallowed. The returned\n // disposer is owned by the injecting scope, so a reload cannot leave a stale\n // tab definition behind.\n if (typeof (ctx as any).inject === 'function') {\n try {\n (ctx as any).inject(['sidebarRightTabs'], (subCtx: any) => {\n const subTabs = typeof subCtx?.get === 'function' ? subCtx.get('sidebarRightTabs') : (subCtx as any)?.sidebarRightTabs\n const disposer = registerRightSidebar(subTabs)\n if (disposer) subCtx.effect(() => disposer)\n })\n } catch (error) {\n console.warn('[llm-verifier] sidebar tab injection failed:', error)\n }\n }\n\n ctx.slots.inject('sidebar.right.pane.tab' as never, () => ctx.slots.register({\n name: 'sidebar.right.pane.tab' as never,\n key: VERIFIER_TAB_ID,\n inject: () => ({ rpc: connection.rpc }),\n } as never, RightSidebarVerifierPanel as never))\n\n ctx.slots.inject('sidebar.right.pane.tab.title' as never, () => ctx.slots.register({\n name: 'sidebar.right.pane.tab.title' as never,\n key: VERIFIER_TAB_ID,\n } as never, RightSidebarVerifierTitle as never))\n}\n"],"mappings":"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"}
|