dsh-llm-verifier 0.1.13 → 0.1.16
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/LICENSE +22 -22
- package/README.md +328 -301
- package/cordis.patch.yml +4 -4
- package/lib/caller-BWwSVNZf.js.map +1 -0
- package/lib/client.js +176 -14
- package/lib/client.js.map +1 -0
- package/lib/core.js.map +1 -0
- package/lib/index.js +400 -51
- package/lib/index.js.map +1 -0
- package/lib/types/auto.d.ts.map +1 -0
- package/lib/types/auto.js +8 -2
- package/lib/types/auto.js.map +1 -0
- package/lib/types/cache.d.ts.map +1 -0
- package/lib/types/cache.js.map +1 -0
- package/lib/types/caller.d.ts.map +1 -0
- package/lib/types/caller.js.map +1 -0
- package/lib/types/client-i18n.d.ts +27 -0
- package/lib/types/client-i18n.d.ts.map +1 -0
- package/lib/types/client-i18n.js +18 -0
- package/lib/types/client-i18n.js.map +1 -0
- package/lib/types/client.d.ts +15 -2
- package/lib/types/client.d.ts.map +1 -0
- package/lib/types/client.js +137 -10
- package/lib/types/client.js.map +1 -0
- package/lib/types/config.d.ts +4 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +5 -3
- package/lib/types/config.js.map +1 -0
- package/lib/types/core.d.ts.map +1 -0
- package/lib/types/core.js.map +1 -0
- package/lib/types/engine.d.ts.map +1 -0
- package/lib/types/engine.js.map +1 -0
- package/lib/types/images.d.ts.map +1 -0
- package/lib/types/images.js.map +1 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +162 -9
- package/lib/types/index.js.map +1 -0
- package/lib/types/plan-gate.d.ts +27 -0
- package/lib/types/plan-gate.d.ts.map +1 -0
- package/lib/types/plan-gate.js +60 -0
- package/lib/types/plan-gate.js.map +1 -0
- package/lib/types/router.d.ts +28 -32
- package/lib/types/router.d.ts.map +1 -0
- package/lib/types/router.js +41 -9
- package/lib/types/router.js.map +1 -0
- package/lib/types/session.d.ts +11 -0
- package/lib/types/session.d.ts.map +1 -0
- package/lib/types/session.js +41 -11
- package/lib/types/session.js.map +1 -0
- package/lib/types/statistics.d.ts.map +1 -0
- package/lib/types/statistics.js.map +1 -0
- package/lib/types/team-gate.d.ts +20 -0
- package/lib/types/team-gate.d.ts.map +1 -0
- package/lib/types/team-gate.js +59 -0
- package/lib/types/team-gate.js.map +1 -0
- package/lib/types/top-logprobs.d.ts.map +1 -0
- package/lib/types/top-logprobs.js.map +1 -0
- package/lib/types/topic-storage.d.ts.map +1 -0
- package/lib/types/topic-storage.js.map +1 -0
- package/package.json +114 -112
- package/src/auto.test.ts +95 -86
- package/src/auto.ts +140 -133
- package/src/cache.ts +115 -115
- package/src/caller.test.ts +34 -34
- package/src/caller.ts +151 -151
- package/src/client-i18n.ts +18 -0
- package/src/client.tsx +383 -213
- package/src/config.ts +189 -183
- package/src/core.test.ts +71 -71
- package/src/core.ts +205 -205
- package/src/engine.test.ts +136 -136
- package/src/engine.ts +140 -140
- package/src/images.ts +33 -33
- package/src/index.ts +394 -247
- package/src/parity.test.ts +85 -85
- package/src/plan-gate.test.ts +56 -0
- package/src/plan-gate.ts +66 -0
- package/src/router.test.ts +107 -89
- package/src/router.ts +361 -309
- package/src/session.test.ts +71 -36
- package/src/session.ts +132 -103
- package/src/statistics.test.ts +80 -80
- package/src/statistics.ts +328 -328
- package/src/team-gate.test.ts +92 -0
- package/src/team-gate.ts +80 -0
- package/src/top-logprobs.test.ts +84 -84
- package/src/top-logprobs.ts +153 -153
- package/src/topic-storage.test.ts +31 -31
- package/src/topic-storage.ts +42 -42
|
@@ -0,0 +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 settings namespace is not registered. Restart the DSH host.',\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}\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}\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, 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 }\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??48),autoMaxModelCallsPerSession:Number(v.autoMaxModelCallsPerSession??160),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) } }\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(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)\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))}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])=>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));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 const numeric=(key:keyof Values,min=0)=><Input style={{width:'100%',height:36,borderRadius:8}} type=\"number\" min={min} value={String(draft[key])} onChange={e=>patch(key,Number(e.target.value) as never)} />\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} 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.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} 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} 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} 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\n useEffect(() => {\n const controller = new AbortController()\n setLoading(true); setError(null)\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 Error(result.error?.message ?? t['stats.requestFailed'])\n }\n } catch (rpcError) {\n if (controller.signal.aborted) 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 Error(data?.error?.message ?? data?.result?.error?.message ?? t['stats.requestFailed'])\n } catch (fetchError) {\n if (controller.signal.aborted) 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 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])\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} 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 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 ?? 0 })}</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) => {\n if (!tabs || typeof tabs.register !== 'function') return\n try {\n 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 } catch {}\n }\n\n const existingTabs = typeof (ctx as any).get === 'function' ? (ctx as any).get('sidebarRightTabs') : undefined\n if (existingTabs) {\n registerRightSidebar(existingTabs)\n }\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 if (subTabs) registerRightSidebar(subTabs)\n })\n } catch {}\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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"}
|
package/lib/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["/** Pure scoring and Probabilistic Pivot Tournament primitives. */\n\nexport interface Criterion {\n id: string\n name: string\n description: string\n}\n\nexport interface TokenAlternative {\n token: string\n logprob: number\n}\n\nexport interface CompletionLogprobs {\n text: string\n tokens: string[]\n positions: TokenAlternative[][]\n}\n\nexport interface CandidateScore {\n index: number\n score: number\n}\n\nexport const GRANULARITY = 20\nexport const LETTERS = Array.from({ length: GRANULARITY }, (_, index) => String.fromCharCode(65 + index))\nexport const SCALE_DESCRIPTION = [\n 'Rate how likely the agent correctly solved the task on a 20-point scale using letters A through T:',\n ' A = clearly and completely succeeded with verified output (best)',\n ' B-D = succeeded with only minor issues',\n ' E-G = above average, mostly correct with some issues',\n ' H-J = uncertain, leans toward success',\n ' K-M = uncertain, leans toward failure',\n ' N-P = below average, significant issues remain',\n ' Q-S = failed with some partial progress',\n ' T = clearly and completely failed (worst)',\n].join('\\n')\n\nexport const DEFAULT_CRITERIA: Criterion[] = [\n {\n id: 'specification',\n name: 'Specification Adherence',\n description: 'Re-read the task description and check exact requirements: file paths, output formats, naming, and explicit constraints. Penalize a solution that solves a similar but different problem.',\n },\n {\n id: 'output_match',\n name: 'Output Match',\n description: 'Find the final verification command and compare its actual stdout/stderr to the required output. Reward only evidence literally visible in observed output; do not trust narration.',\n },\n {\n id: 'error_signals',\n name: 'Error Signal Detection',\n description: 'Scan especially later steps for unresolved errors, tracebacks, non-zero exits, command-not-found, missing files, compilation failures, and test failures. Score only unresolved error evidence.',\n },\n]\n\nexport const DEFAULT_GROUND_TRUTH_NOTE = \"**IMPORTANT:** Focus on observed tool and terminal output as ground truth. Do NOT trust the agent's self-assessment or claims of success.\"\n\nexport function normalizeScoreLetter(token: string): string | undefined {\n let value = token.trim()\n if (value.startsWith('>')) value = value.slice(1).trim()\n const match = /^([A-T])$/i.exec(value)\n return match?.[1]?.toUpperCase()\n}\n\nfunction letterValue(letter: string): number {\n return GRANULARITY - (letter.charCodeAt(0) - 65)\n}\n\nfunction findTagLogprobs(tokens: readonly string[], positions: readonly TokenAlternative[][], tag: string): TokenAlternative[] | undefined {\n if (tokens.length === 0 || positions.length === 0) return undefined\n for (const suffix of [tag, tag.slice(0, -1)]) {\n let found: TokenAlternative[] | undefined\n let text = ''\n for (let index = 0; index < tokens.length; index += 1) {\n text += tokens[index]\n if (text.trimEnd().endsWith(suffix) && index + 1 < positions.length) found = positions[index + 1]\n }\n if (found !== undefined) return found\n }\n return undefined\n}\n\nexport function extractScore(completion: CompletionLogprobs, tag: string): number {\n const alternatives = findTagLogprobs(completion.tokens, completion.positions, tag)\n const probabilities = new Map<number, number>()\n for (const alternative of alternatives ?? []) {\n const letter = normalizeScoreLetter(alternative.token)\n if (letter === undefined || !Number.isFinite(alternative.logprob)) continue\n const value = letterValue(letter)\n probabilities.set(value, Math.max(probabilities.get(value) ?? 0, Math.exp(alternative.logprob)))\n }\n if (probabilities.size > 0) {\n let probability = 0\n let expectation = 0\n for (const [value, p] of probabilities) {\n probability += p\n expectation += value * p\n }\n if (probability > 0) return (expectation / probability - 1) / (GRANULARITY - 1)\n }\n const name = tag.slice(1, -1)\n const regex = new RegExp('<' + name + '>\\\\s*(.+?)\\\\s*</' + name + '>', 'gi')\n let last: RegExpExecArray | null = null\n for (let match = regex.exec(completion.text); match !== null; match = regex.exec(completion.text)) last = match\n const letter = normalizeScoreLetter(last?.[1] ?? '')\n if (letter === undefined) throw new Error('llm-verifier: verifier response did not contain a valid ' + tag + ' A-T score')\n return (letterValue(letter) - 1) / (GRANULARITY - 1)\n}\n\nexport function buildPairwisePrompt(problem: string, traceA: string, traceB: string, criterion: Criterion, groundTruthNote = DEFAULT_GROUND_TRUTH_NOTE): string {\n return [\n 'You are an expert evaluator of AI coding agents. You will see a task description and two agent trajectories, then evaluate them on ONE specific criterion, stated at the end.',\n groundTruthNote,\n '**Task:**\\n' + problem,\n '**Trajectory A:**\\n' + traceA,\n '**Trajectory B:**\\n' + traceB,\n '**Rating Scale:**\\n' + SCALE_DESCRIPTION,\n '**Evaluation Guideline — ' + criterion.name + ':**\\n' + criterion.description,\n 'Score each trajectory ONLY on this specific criterion (\"' + criterion.name + '\"). Ignore other aspects that are not relevant to it.',\n 'Reason it through first, then END your reply with exactly these two lines and nothing after them. Replace each placeholder with a single letter A-T, keeping the spaces around the letter exactly as shown:\\n<score_A> LETTER_A_TO_T </score_A>\\n<score_B> LETTER_A_TO_T </score_B>',\n 'Begin your analysis now.',\n ].join('\\n\\n')\n}\n\nexport function buildProgressPrompt(problem: string, steps: readonly string[], checkpoints: readonly number[]): string {\n const trajectory = steps.map((step, index) => '=== Agent Step ' + (index + 1) + ' ===\\n' + step.trim()).join('\\n\\n')\n const tags = checkpoints.map((_, index) => '<c' + (index + 1) + '>LETTER</c' + (index + 1) + '>').join('\\n')\n return [\n \"You are a strict, skeptical evaluator of agent task attempts. Trust observed output — NOT the agent's narration.\",\n '**Task instruction:**\\n' + problem.trim(),\n '**Agent trajectory (' + steps.length + ' agent steps):**\\n' + trajectory,\n \"Score whether the agent's CURRENT state at each checkpoint would actually satisfy the task's hidden grader.\",\n 'Use A through T where A = certainly NO, H-M = uncertain, N-S = leans YES, and T = essentially certain YES with matching observed verification.',\n 'Effort and confident narration are not evidence. A state without real verification should not exceed K. Scores may decrease after regressions.',\n 'The checkpoints are:\\n' + checkpoints.map((step, index) => ' Checkpoint ' + (index + 1) + ' = state right after Agent Step ' + step).join('\\n'),\n 'Output EXACTLY these lines and nothing else:\\n' + tags,\n ].join('\\n\\n')\n}\n\n/** Progress uses A=NO..T=YES, the reverse of pairwise success scoring. */\nexport function extractProgressScore(completion: CompletionLogprobs, tag: string): number {\n return 1 - extractScore(completion, tag)\n}\n\nexport function bradleyTerry(rewardA: number, rewardB: number): number {\n return 1 / (1 + Math.exp(-(rewardA - rewardB)))\n}\n\nexport function seededRandom(seed: number): () => number {\n let state = seed >>> 0\n return () => {\n state = (state + 0x6D2B79F5) >>> 0\n let value = state\n value = Math.imul(value ^ value >>> 15, value | 1)\n value ^= value + Math.imul(value ^ value >>> 7, value | 61)\n return ((value ^ value >>> 14) >>> 0) / 4294967296\n }\n}\n\nexport function ringCycle(count: number, seed = 0): Array<[number, number]> {\n if (count <= 1) return []\n const permutation = Array.from({ length: count }, (_, index) => index)\n const random = seededRandom(seed)\n for (let index = count - 1; index > 0; index -= 1) {\n const other = Math.floor(random() * (index + 1))\n ;[permutation[index], permutation[other]] = [permutation[other]!, permutation[index]!]\n }\n return permutation.map((candidate, index) => [candidate, permutation[(index + 1) % count]!] as [number, number])\n}\n\nexport function pivotRoundPairs(count: number, pivots: readonly number[]): Array<[number, number]> {\n const pivotSet = new Set(pivots)\n const pairs: Array<[number, number]> = []\n for (let candidate = 0; candidate < count; candidate += 1) {\n if (!pivotSet.has(candidate)) for (const pivot of pivots) pairs.push([candidate, pivot])\n }\n const sorted = [...pivots].sort((a, b) => a - b)\n for (let left = 0; left < sorted.length; left += 1) {\n for (let right = left + 1; right < sorted.length; right += 1) pairs.push([sorted[left]!, sorted[right]!])\n }\n return pairs\n}\n\nexport function accumulatePairs(pairs: readonly [number, number][], rewards: ReadonlyMap<string, readonly [number, number]>, wins: number[], counts: number[]): void {\n for (const [a, b] of pairs) {\n const reward = rewards.get(a + ',' + b) ?? [0.5, 0.5]\n const probability = bradleyTerry(reward[0], reward[1])\n wins[a] = (wins[a] ?? 0) + probability\n counts[a] = (counts[a] ?? 0) + 1\n wins[b] = (wins[b] ?? 0) + 1 - probability\n counts[b] = (counts[b] ?? 0) + 1\n }\n}\n\nexport function topPivots(wins: readonly number[], counts: readonly number[], requested: number): number[] {\n return Array.from({ length: wins.length }, (_, index) => index)\n .sort((a, b) => ((wins[b] ?? 0) / (counts[b] || 1)) - ((wins[a] ?? 0) / (counts[a] || 1)) || a - b)\n .slice(0, Math.min(requested, wins.length))\n}\n\nexport function rankScores(wins: readonly number[], counts: readonly number[]): CandidateScore[] {\n return Array.from({ length: wins.length }, (_, index) => ({ index, score: (wins[index] ?? 0) / (counts[index] || 1) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n}\n"],"mappings":"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"}
|