agent-insight 0.5.3 → 0.5.4
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/(main)/accessconfig/channels/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/accessconfig/health/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/accessconfig/install/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/accessconfig/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/accessconfig/webhooks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/agents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/dataset/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/dataset/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/run/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/evaluation/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/fault/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(main)/fault/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/infra/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/infra/source/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/infra/sources/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/memory/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/metrics/evaluators/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/metrics/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(main)/metrics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/modelconfig/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/modelconfig/registry/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/modelconfig/web-search/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/optapi/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/quality/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/security/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-eval/grayscale/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-eval/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-eval/trigger/[skillName]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-generator/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-history/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-history/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-opt/[name]/[version]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-opt/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-release/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skills/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/trace/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(main)/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/version-analysis/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/version-management/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.html +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig.rsc +4 -4
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/agents.html +1 -1
- package/.next/standalone/.next/server/app/agents.rsc +5 -5
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/agent/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/batch-tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/execute/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/terminate-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/fault/diagnosis/stream/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/skills-analysis/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js +1 -1
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js +1 -1
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/draft/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/attachments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/files/content/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/files/download/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/files/info/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/files/list/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/iterations/[draftNumber]/apply/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/files/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/user-evaluators/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/dashboard.html +1 -1
- package/.next/standalone/.next/server/app/dashboard.rsc +5 -5
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.html +1 -1
- package/.next/standalone/.next/server/app/dataset.rsc +5 -5
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.rsc +5 -5
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.html +1 -1
- package/.next/standalone/.next/server/app/eval.rsc +5 -5
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.html +1 -1
- package/.next/standalone/.next/server/app/fault.rsc +5 -5
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra/sources.html +1 -1
- package/.next/standalone/.next/server/app/infra/sources.rsc +5 -5
- package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra/sources.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/infra/sources.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/infra/sources.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra.html +1 -1
- package/.next/standalone/.next/server/app/infra.rsc +5 -5
- package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/infra.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/infra.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/infra.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +4 -4
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.html +1 -1
- package/.next/standalone/.next/server/app/memory.rsc +5 -5
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.html +1 -1
- package/.next/standalone/.next/server/app/metrics.rsc +5 -5
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.rsc +5 -5
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +5 -5
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig.rsc +4 -4
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/optapi.html +1 -1
- package/.next/standalone/.next/server/app/optapi.rsc +5 -5
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/quality.html +1 -1
- package/.next/standalone/.next/server/app/quality.rsc +5 -5
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/security.html +1 -1
- package/.next/standalone/.next/server/app/security.rsc +5 -5
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-detail/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/skill-detail.html +1 -1
- package/.next/standalone/.next/server/app/skill-detail.rsc +4 -4
- package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/skill-detail.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.html +2 -2
- package/.next/standalone/.next/server/app/skill-eval/grayscale.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval.html +1 -1
- package/.next/standalone/.next/server/app/skill-eval.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-eval.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.html +1 -1
- package/.next/standalone/.next/server/app/skill-generator.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-generator.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-history.html +1 -1
- package/.next/standalone/.next/server/app/skill-history.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-history.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.html +1 -1
- package/.next/standalone/.next/server/app/skill-opt.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-opt.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-release.html +1 -1
- package/.next/standalone/.next/server/app/skill-release.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skill-release.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skills.html +1 -1
- package/.next/standalone/.next/server/app/skills.rsc +5 -5
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.html +1 -1
- package/.next/standalone/.next/server/app/trace.rsc +7 -7
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-analysis.html +1 -1
- package/.next/standalone/.next/server/app/version-analysis.rsc +5 -5
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-analysis.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/version-analysis.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/version-analysis.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/version-analysis.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-management.html +1 -1
- package/.next/standalone/.next/server/app/version-management.rsc +5 -5
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/version-management.segments/_full.segment.rsc +5 -5
- package/.next/standalone/.next/server/app/version-management.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/version-management.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/version-management.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0d1e6e5._.js +22 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__8b872712._.js → [root-of-the-server]__c60fa3da._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_0ce5f29d._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0e34c123._.js +3 -3
- package/.next/standalone/.next/server/chunks/_5090183e._.js +1 -1
- package/.next/standalone/.next/server/chunks/_adf9e9c5._.js +1 -1
- package/.next/standalone/.next/server/chunks/_b172b746._.js +3 -3
- package/.next/standalone/.next/server/chunks/_cfa898f4._.js +1 -1
- package/.next/standalone/.next/server/chunks/_d02fac80._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_a2a34aa6._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_ea85a447._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_engine_general-agent_970b1dfe._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__143c2f65._.js → [root-of-the-server]__83687057._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b8d3d1c3._.js +8 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__f82e551e._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_11388c48._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_32596a86._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_fault_page_tsx_96431a5d._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_metrics_page_tsx_f1599761._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_trace_page_tsx_41e7865d._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_evaluators_7597c2fd._.js → src_lib_070bb60a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_lib_client_locale-context_tsx_7184d9aa._.js +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/4d2c017f2f4c9160.css +1 -0
- package/.next/standalone/.next/static/chunks/5be4d965983c6b40.js +6 -0
- package/.next/standalone/.next/static/chunks/{04bc84975996b76d.js → 7884153c8f8649dd.js} +1 -1
- package/.next/{static/chunks/6b2552d3da7451ee.js → standalone/.next/static/chunks/85ce12a5c9536a2d.js} +1 -1
- package/.next/standalone/.next/static/chunks/913c61f4f0a12da4.js +1 -0
- package/.next/standalone/.next/static/chunks/{b5e671771efd9e7d.js → b11e37b43e38eb95.js} +1 -1
- package/.next/standalone/.next/static/chunks/cf0b4e5d7b804bf5.js +1 -0
- package/.next/standalone/.next/static/chunks/df6f2eedbe05162e.js +1 -0
- package/.next/standalone/.next/static/chunks/e0af9e5baf811284.js +4 -0
- package/.next/standalone/.next/static/chunks/f61ffd647f90b66c.js +1 -0
- package/.next/standalone/docker-compose.amd64.yml +2 -1
- package/.next/standalone/docker-compose.arm64.yml +11 -0
- package/.next/standalone/package.json +1 -1
- package/.next/static/chunks/4d2c017f2f4c9160.css +1 -0
- package/.next/static/chunks/5be4d965983c6b40.js +6 -0
- package/.next/static/chunks/{04bc84975996b76d.js → 7884153c8f8649dd.js} +1 -1
- package/.next/{standalone/.next/static/chunks/6b2552d3da7451ee.js → static/chunks/85ce12a5c9536a2d.js} +1 -1
- package/.next/static/chunks/913c61f4f0a12da4.js +1 -0
- package/.next/static/chunks/{b5e671771efd9e7d.js → b11e37b43e38eb95.js} +1 -1
- package/.next/static/chunks/cf0b4e5d7b804bf5.js +1 -0
- package/.next/static/chunks/df6f2eedbe05162e.js +1 -0
- package/.next/static/chunks/e0af9e5baf811284.js +4 -0
- package/.next/static/chunks/f61ffd647f90b66c.js +1 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__51f686fd._.js +0 -22
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__90686664._.js +0 -8
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__96628a39._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_bda25b86._.js +0 -3
- package/.next/standalone/.next/static/chunks/0fe047909a490ef0.js +0 -1
- package/.next/standalone/.next/static/chunks/1cb2cee6b2f89fb7.js +0 -1
- package/.next/standalone/.next/static/chunks/25a9b2907e03a172.css +0 -1
- package/.next/standalone/.next/static/chunks/30a686796d86273c.js +0 -1
- package/.next/standalone/.next/static/chunks/4b72abe72a9b6cd9.js +0 -6
- package/.next/standalone/.next/static/chunks/6e6f2418240877c6.js +0 -1
- package/.next/standalone/.next/static/chunks/946d260668afc16b.js +0 -1
- package/.next/standalone/.next/static/chunks/efe225251ea151f0.js +0 -4
- package/.next/static/chunks/0fe047909a490ef0.js +0 -1
- package/.next/static/chunks/1cb2cee6b2f89fb7.js +0 -1
- package/.next/static/chunks/25a9b2907e03a172.css +0 -1
- package/.next/static/chunks/30a686796d86273c.js +0 -1
- package/.next/static/chunks/4b72abe72a9b6cd9.js +0 -6
- package/.next/static/chunks/6e6f2418240877c6.js +0 -1
- package/.next/static/chunks/946d260668afc16b.js +0 -1
- package/.next/static/chunks/efe225251ea151f0.js +0 -4
- /package/.next/standalone/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_ssgManifest.js +0 -0
- /package/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_buildManifest.js +0 -0
- /package/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{VeFGnFbPjqrwSXp9h5AgX → pzAy0mrZCL0PmE4h3HDut}/_ssgManifest.js +0 -0
|
@@ -365,6 +365,6 @@ ${t}
|
|
|
365
365
|
${e}
|
|
366
366
|
|
|
367
367
|
**请提取最终结果:**
|
|
368
|
-
`}e.s(["EXTRACTION_PROMPT",0,t,"generateExtractionPrompt",()=>A])},191878,e=>e.a(async(t,A)=>{try{var r=e.i(522734);e.i(210954);var s=e.i(184599),n=e.i(814747),i=e.i(93387),o=e.i(256451),a=e.i(401682);e.i(419961),e.i(598905);var l=t([a]);[a]=l.then?(await l)():l;let E=(0,i.resolveAgentInsightDataPath)("model_debug.jsonl"),Q={temperature:0,top_p:1,seed:42};function c(e,t,A){try{let s=n.default.dirname(E);r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let i={timestamp:new Date().toISOString(),stage:e,input:t,output:A};r.default.appendFileSync(E,JSON.stringify(i)+"\n")}catch(e){console.error("Log error",e)}}async function g(e){let t=await (0,a.getActiveConfig)(e);if(!t)return{client:null,model:null};let A=t.apiKey||"no-api-key-required",r=t.baseUrl||"https://api.deepseek.com",{customFetch:n}=(0,o.getProxyConfig)();return{client:new s.OpenAI({apiKey:A,baseURL:r,fetch:n}),model:t.model||"deepseek-chat"}}async function h(e,t){let A,r=(A=Number(process.env.JUDGMENT_TIMEOUT_MS||3e5),!Number.isFinite(A)||A<=0?3e5:A),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{return await e({signal:s.signal,timeout:r})}catch(e){if(s.signal.aborted)throw Error(`${t} timeout after ${r}ms`);throw e}finally{clearTimeout(n)}}async function u(t,A,r,s,n){let{client:i,model:o}=await g(s);if(!i||!i.apiKey)return console.warn("LLM Evaluation disabled or missing config. Skipping."),{is_correct:!1,score:0,reason:"请在首页左上角的设置中配置 LLM"};try{let s=A.root_causes||[],a=A.key_actions||[],l=s.map((e,t)=>({id:`RC-${t}`,...e})),g=a.map((e,t)=>({id:`KA-${t}`,...e})),{generateJudgePrompt:u}=e.r(610234),E=[];if(l.length>0){let e=u(t,r,l,[],A.skill_definition,"root_causes"),s=await h(t=>i.chat.completions.create({messages:[{role:"user",content:e}],model:o,...Q},t),"RC Judgment API");console.log(`[Judge API Debug] RC Model: ${o}. Received response choices:`,s?.choices?.length);let n=s.choices?.[0]?.message?.content;if(c("rc_evaluation",{prompt:e},{raw_output:n}),n){let e=n.trim(),t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t)e=t[1];else{let t=e.indexOf("{"),A=e.lastIndexOf("}");-1!==t&&-1!==A&&A>=t&&(e=e.substring(t,A+1))}try{let t=JSON.parse(e);E.push(...t.evaluations||[])}catch(e){console.warn("[Judge] Failed to parse RC result:",e)}}}if(g.length>0){let e=n&&n.length>0?n.map((e,t)=>`步骤${t+1}: [${e.type}] ${e.name} - ${e.description}`).join("\n"):null,s=u(t,e||r,[],g,A.skill_definition,"key_actions",e||null),a=await h(e=>i.chat.completions.create({messages:[{role:"user",content:s}],model:o,...Q},e),"KA Judgment API");console.log(`[Judge API Debug] KA Model: ${o}. Received response choices:`,a?.choices?.length);let l=a.choices?.[0]?.message?.content;if(c("ka_evaluation",{prompt:s},{raw_output:l}),l){let e=l.trim(),t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t)e=t[1];else{let t=e.indexOf("{"),A=e.lastIndexOf("}");-1!==t&&-1!==A&&A>=t&&(e=e.substring(t,A+1))}try{let t=JSON.parse(e);E.push(...t.evaluations||[])}catch(e){console.warn("[Judge] Failed to parse KA result:",e)}}}let d=0,I=0,B=[];l.forEach(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果";d+=A*e.weight,I+=e.weight,B.push(`1. **Root Cause** [${e.content.replace(/\n/g," ")}]: ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`)});let C=new Map,f=[];for(let e of g){let t=e.groupId,A=e.controlFlowType||"required";"conditional"===A&&t?(C.has(t)||C.set(t,[]),C.get(t).push(e)):f.push(e)}for(let[e,t]of C){let e=t.map(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果";return{ka:e,ev:t,match:A,explanation:r}}),A=e.find(e=>e.match>0||!e.explanation.includes("此分支未触发"));if(A){let{ka:t,ev:r,match:s,explanation:n}=A,i=t.branchLabel||"";for(let r of(d+=s*t.weight,I+=t.weight,B.push(`2. **Key Action** [${t.content.replace(/\n/g," ")}] (条件分支${i?" - "+i:""}): ${(100*s).toFixed(0)}% match. ${n} (Weight: ${t.weight})`),e))r.ka.id!==A.ka.id&&B.push(`2. **Key Action** [${r.ka.content.replace(/\n/g," ")}] (条件分支${r.ka.branchLabel?" - "+r.ka.branchLabel:""}): ${(100*r.match).toFixed(0)}% match. ${r.explanation} (该分支未触发,不计入总分)`)}else{let{ka:t,ev:A,match:r,explanation:s}=e[0],n=t.branchLabel||"";d+=0*t.weight,I+=t.weight,B.push(`2. **Key Action** [${t.content.replace(/\n/g," ")}] (条件分支${n?" - "+n:""}): ${(100*r).toFixed(0)}% match. ${s} (所有分支均未触发,Weight: ${t.weight})`);for(let t=1;t<e.length;t++){let A=e[t];B.push(`2. **Key Action** [${A.ka.content.replace(/\n/g," ")}] (条件分支${A.ka.branchLabel?" - "+A.ka.branchLabel:""}): ${(100*A.match).toFixed(0)}% match. ${A.explanation} (该分支未触发,不计入总分)`)}}}f.forEach(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果",s=e.controlFlowType||"required";if("optional"===s)return void B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (可选): ${(100*A).toFixed(0)}% match. ${r} (Weight: 0, 不扣分)`);if("handoff"===s){d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (衔接): ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`);return}if("loop"===s){let t=e.loopCondition||"",s=e.expectedMinCount,n=e.expectedMaxCount;d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (循环${t?" - "+t:""}): ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight}, 预期次数: ${s??"?"}~${n??"?"})`);return}d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}]: ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`)});let p=0;p=I>0?d/I:0;let y=B.map(e=>{let t=e.match(/(\d+)% match/),A=e.match(/\(Weight: ([\d\.]+)\)/);if(t&&A){let e=(parseInt(t[1])/100).toFixed(1),r=parseFloat(A[1]).toFixed(1);return`${e}*${r}`}return null}).filter(e=>e).join(" + "),m=B.map(e=>{let t=e.match(/\(Weight: ([\d\.]+)\)/);return t?parseFloat(t[1]).toFixed(1):null}).filter(e=>e).join(" + "),w=`**Calculation**: (${y}) / (${m}) = ${d.toFixed(2)} / ${I.toFixed(2)} = ${p.toFixed(2)}`;B.push("",w);let D=B.join("\n");return{is_correct:p>=.8,score:p,reason:D}}catch(e){if(console.error("LLM Judgment Error:",e),String(e?.message||"").includes("timeout"))return{is_correct:!1,score:0,reason:"Judgment API failed: timeout"};return{is_correct:!1,score:0,reason:"Judgment API failed"}}}e.s(["judgeAnswer",()=>u]),A()}catch(e){A(e)}},!1),457035,e=>{"use strict";var t=e.i(594559);function A(e){if(!e)return null;try{return(0,t.normalizeEndpoint)(e)}catch{return null}}e.s(["normalizeEndpointUrl",()=>A])},723039,e=>{"use strict";e.i(522734);var t=e.i(814747),A=e.i(844466);let r={},s={};for(let[e,t]of Object.entries(A.default))if(!e.startsWith("_")){if("number"==typeof t.inputTokenPrice&&"number"==typeof t.outputTokenPrice){let A={inputTokenPrice:t.inputTokenPrice,outputTokenPrice:t.outputTokenPrice};"number"==typeof t.cacheReadInputTokenPrice&&(A.cacheReadInputTokenPrice=t.cacheReadInputTokenPrice),"number"==typeof t.cacheCreationInputTokenPrice&&(A.cacheCreationInputTokenPrice=t.cacheCreationInputTokenPrice),r[e]=A}"number"==typeof t.contextWindow&&(s[e]=t.contextWindow)}t.default.join(process.cwd(),"custom-models.json"),e.s([])},852628,e=>{"use strict";function t(e){return"routing"===e||"outcome"===e||"combined"===e?e:"combined"}function A(e,A){let r=t(e);return"combined"===r||r===A}function r(e,A){let r=t(e);return"any"===A?"combined"===r?1:2:r===A?3:2*("combined"===r)}function s(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){let t=e.trim();return t?{skill:t,version:null}:null}if(!e||"object"!=typeof e)return null;let t="skill"in e?e.skill:null,A="string"==typeof t?t.trim():"";if(!A)return null;let r="version"in e?e.version:null,s=null;if("number"==typeof r&&Number.isInteger(r)&&r>=0)s=r;else if("string"==typeof r&&r.trim()){let e=parseInt(r,10);s=Number.isNaN(e)||e<0?null:e}return{skill:A,version:s}}).filter(e=>!!e):[]}e.s(["configSupportsDatasetType",()=>A,"getDatasetTypePriority",()=>r,"normalizeConfigDatasetType",()=>t,"normalizeExpectedSkills",()=>s])},997078,e=>{"use strict";function t(e){return"string"!=typeof e?null:e.trim()||null}function A(e){return"string"!=typeof e?"":e.trim()}function r(e,s="Skill benchmark"){var n,i;let o;return t(e.query)||(n=e.skill,i=e.skillVersion,(o=A(n))?null!=i?`${o} (v${i})`:o:null)||s}e.s(["getConfigSubjectLabel",()=>r,"normalizeConfigQuery",()=>t,"normalizeConfigSkillName",()=>A])},583701,e=>e.a(async(t,A)=>{try{e.i(210954),e.i(256451);var r=e.i(401682),s=t([r]);function n(e){return e.trim().toLowerCase().replace(/[`"'“”‘’]/g,"").replace(/[.,,。!?!?;;::、·…()[\]{}<>]/g," ").replace(/\s+/g," ").trim().replace(/\s/g,"")}function i(e,t){let A=n(e),r=n(t.intent),s=t.anchors.filter(e=>{let t=n(e);return!!t&&A.includes(t)});return{intentMatched:!!(A&&r&&(A===r||A.includes(r)||r.includes(A))),matchedAnchors:s,anchorCoverage:t.anchors.length>0?s.length/t.anchors.length:0}}[r]=s.then?(await s)():s,e.s(["matchQueryToStoredRoutingSignature",()=>i]),A()}catch(e){A(e)}},!1),864778,e=>{"use strict";function t(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}return null}function A(e){let A=0,r=0,s="",n="",i="",o=0,a=0,l=0,c=0,g=0,h=0,u=0,E=0,Q=0,d=Number.MAX_SAFE_INTEGER,I=0;for(let r of e||[]){if(!r)continue;let e=r.role,B="assistant"===e||"subagent"===e;if("assistant"===e){let e="string"==typeof r.content?r.content:"";e&&e.trim()&&(n=e),"string"==typeof r.model&&r.model?s=r.model:"string"==typeof r.modelID&&r.modelID&&(s=r.modelID)}r.agent&&"string"==typeof r.agent&&!i&&(i=r.agent);let C=t(r.timeInfo?.created),f=t(r.timeInfo?.completed),p=t(r.timestamp);if(C&&(d=Math.min(d,C),I=Math.max(I,C)),f&&(I=Math.max(I,f)),p&&(d=Math.min(d,p),I=Math.max(I,p)),!B)continue;h++;let y=r.usage;if(y){let e=function(e){let t=Number(e?.input_tokens??e?.input??0)||0,A=Number(e?.output_tokens??e?.output??0)||0,r=Number(e?.cache?.read??e?.cache_read_input_tokens??0)||0,s=Number(e?.cache?.write??e?.cache_creation_input_tokens??0)||0,n=Number(e?.reasoning??e?.reasoning_tokens??e?.completion_tokens_details?.reasoning_tokens??0)||0,i=e?.reasoning!==void 0&&n>0&&A<n?A+n:A;return{total:e?.total!==void 0?Number(e.total)||0:t+i+r+s,input:t,output:i,cacheRead:r,cacheWrite:s,reasoning:n,maxSingleCallTokens:t+i+r+s}}(y);A+=e.total,o+=e.input,a+=e.output,l+=e.cacheRead,c+=e.cacheWrite,g+=e.reasoning,e.maxSingleCallTokens>Q&&(Q=e.maxSingleCallTokens)}if(Array.isArray(r.tool_calls))for(let e of(u+=r.tool_calls.length,r.tool_calls))(e?.state==="error"||e?.state==="failed")&&E++}return d!==Number.MAX_SAFE_INTEGER&&I>d&&(r=I-d),{model:s||void 0,agentName:i||void 0,final_result:n||void 0,tokens:Math.round(A),latency:r/1e3,input_tokens:Math.round(o),output_tokens:Math.round(a),tool_call_count:u,tool_call_error_count:E,llm_call_count:h,cache_read_input_tokens:Math.round(l),cache_creation_input_tokens:Math.round(c),max_single_call_tokens:Math.round(Q),reasoning_tokens:Math.round(g)}}e.s(["deriveOpencodeExecutionFields",()=>A])},656709,e=>{"use strict";e.s([])},475670,e=>{"use strict";function t(e){return"string"==typeof e?e.trim():""}function A(e,A){let r=[],s=new Set,n=t(A),i=(e,A)=>{let n=t(e);if(!n)return;let i=`${A}:${n}`;s.has(i)||(s.add(i),r.push({name:n,agentType:A}))};for(let A of(n&&i(n,"main"),e||[])){if(!A||"object"!=typeof A)continue;let e=t(A.role).toLowerCase(),r=t(A.subagent_name),s=t(A.agent);if(r){i(r,"subagent");continue}("subagent"===e||"opencode"===e)&&s&&s!==n?i(s,"subagent"):!n&&s&&i(s,"main")}return r}function r(e){return A(e).map(e=>e.name)}e.i(656709),e.s(["extractObservedAgentNames",()=>r,"extractObservedAgentRegistrations",()=>A])},39759,e=>{"use strict";function t(e){let t="string"==typeof e.incomingLabel?e.incomingLabel.trim():void 0;if(void 0!==t){if(!t)return;return t}let A="string"==typeof e.existingLabel?e.existingLabel.trim():"",r="string"==typeof e.skill?e.skill.trim():"",s=e.skillVersion??null;if(A&&!(A&&"without-skill"===A))return A;if(r){let e="number"==typeof s&&Number.isFinite(s)?s:0;return`${r}-v${e}`}return"without-skill"}e.s(["chooseExecutionLabel",()=>t])},799880,e=>{"use strict";function t(e){let t="string"==typeof e?e.trim():"";if(!t||"without-skill"===t)return null;let A=t.match(/^(.+)-v(\d+)$/);if(!A)return null;let r=(A[1]||"").trim(),s=Number(A[2]);return r&&Number.isFinite(s)&&!(s<0)?{skill:r,skill_version:s,skills:[r],invokedSkills:[{name:r,version:s}]}:null}e.s(["parseLabelSkillVersionBinding",()=>t])},925658,e=>{"use strict";e.s([])},761620,e=>e.a(async(t,A)=>{try{e.i(210954),e.i(256451);var r=e.i(401682),s=e.i(309418);e.i(925658),e.i(308229),e.i(522734),e.i(814747);var n=e.i(93387),i=t([r,s]);function o(e){let t=[],A=new Map;if(e.conditionalGroups)for(let t of e.conditionalGroups)for(let e of t.branches)for(let r of e.stepIds)A.set(r,{type:"conditional",group:t});if(e.loopGroups)for(let t of e.loopGroups)for(let e of t.bodyStepIds)A.set(e,{type:"loop",group:t});let r=new Set(e.steps.map(e=>e.id));if(e.conditionalGroups)for(let t of e.conditionalGroups)for(let e of t.branches)for(let s of e.stepIds)r.has(s)||(console.warn(`[FlowParse] ConditionalGroup ${t.id} references invalid stepId ${s}, degrading to required`),A.delete(s));if(e.loopGroups)for(let t of e.loopGroups)for(let e of t.bodyStepIds)r.has(e)||(console.warn(`[FlowParse] LoopGroup ${t.id} references invalid stepId ${e}, degrading to required`),A.delete(e));let s=new Map;if(e.conditionalGroups)for(let t of e.conditionalGroups)s.set(t.id,t.branches.length);for(let r of e.steps){let e=A.get(r.id);if(r.isOptional&&!e){t.push({id:r.id,content:r.name,weight:0,controlFlowType:"optional"});continue}if(e?.type==="conditional"){let A=e.group,n=A.branches.find(e=>e.stepIds.includes(r.id)),i=s.get(A.id)||1;t.push({id:r.id,content:r.name,weight:1/i,controlFlowType:"conditional",condition:A.condition,branchLabel:n?.label,groupId:A.id});continue}if(e?.type==="loop"){let A=e.group;t.push({id:r.id,content:r.name,weight:1,controlFlowType:"loop",loopCondition:A.loopCondition,expectedMinCount:A.expectedMinCount,expectedMaxCount:A.expectedMaxCount,groupId:A.id});continue}if(r.isOptional){t.push({id:r.id,content:r.name,weight:0,controlFlowType:"optional"});continue}t.push({id:r.id,content:r.name,weight:1,controlFlowType:"required"})}return t}function a(e){let t=[];for(let A=0;A<e.length;A++){let{name:r,actions:s}=e[A];for(let e of s)t.push({...e,id:`${r}-${e.id}`,skillSource:r});if(A<e.length-1){let s=e[A+1].name;t.push({id:`handoff-${r}-to-${s}`,content:`从 ${r} 输出衔接至 ${s} 输入`,weight:1,controlFlowType:"handoff",skillSource:`${r}->${s}`})}}return t}[r,s]=i.then?(await i)():i,(0,n.resolveAgentInsightDataPath)("flow_debug.jsonl"),e.s(["extractKeyActionsFromFlow",()=>o,"mergeKeyActionsFromMultipleSkills",()=>a]),A()}catch(e){A(e)}},!1),6325,e=>{"use strict";function t(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}return null}function A(e){let A=e.id??e.message_id??e.messageID;if("string"==typeof A&&A.trim())return`id:${A.trim()}`;let r="string"==typeof e.role?e.role:"unknown",s=t(e.timestamp)??t(e.timeInfo?.created)??t(e.timeInfo?.completed)??0,n="string"==typeof e.subagent_session_id?e.subagent_session_id:"";return`k:${n}:${s}:${r}`}function r(e,r){let s=Array.isArray(e)?e:[],n=Array.isArray(r)?r:[],i=new Map,o=new Map,a=0;for(let e of s){if(!e)continue;let t=A(e);i.has(t)||(i.set(t,e),o.set(t,a++))}for(let e of n){if(!e)continue;let t=A(e),r=i.get(t);r?i.set(t,function(e,t){let A={...e,...t},r="string"==typeof e.content?e.content:"",s="string"==typeof t.content?t.content:"";return r&&!s?A.content=r:r&&s&&s.length<r.length&&(A.content=r),e.subagent_name&&!t.subagent_name&&(A.subagent_name=e.subagent_name),e.agent&&!t.agent&&(A.agent=e.agent),e.subagent_session_id&&!t.subagent_session_id&&(A.subagent_session_id=e.subagent_session_id),A.tool_calls=function(e,t){let A=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[];if(0===A.length)return r;if(0===r.length)return A;let s=new Set,n=[];for(let e of[...A,...r]){let t=function(e){let t=e?.id??e?.callID??e?.callId??e?.call_id;if("string"==typeof t&&t.trim())return`id:${t.trim()}`;let A=e?.function?.name??e?.name??"",r=e?.function?.arguments??e?.arguments??"";return`sig:${A}:${function(e){let t=5381;for(let A=0;A<e.length;A++)t=(t<<5)+t^e.charCodeAt(A);return(t>>>0).toString(16)}(function(e){if(null==e)return"";if("string"==typeof e)return e;try{return JSON.stringify(e)}catch{return String(e)}}(r))}`}(e);s.has(t)||(s.add(t),n.push(e))}return n}(e.tool_calls,t.tool_calls),e.usage&&!t.usage&&(A.usage=e.usage),e.timeInfo&&!t.timeInfo&&(A.timeInfo=e.timeInfo),A}(r,e)):(i.set(t,e),o.set(t,a++))}let l=Array.from(i.entries()).map(([e,A])=>({k:e,v:A,ts:t(A.timestamp)??t(A.timeInfo?.created)??t(A.timeInfo?.completed)??0,order:o.get(e)??0}));return l.sort((e,t)=>e.ts-t.ts||e.order-t.order),l.map(e=>e.v)}e.s(["mergeSessionInteractionsMonotonic",()=>r])},418918,e=>{"use strict";var t=e.i(308033),A=e.i(598905);let r={descriptor:{id:"claude",aliases:["claudecode"],label:"Claude Code",onboard:"watcher",platform:"claude"},normalizeForStorage:t.normalizeClaudeCodeInteractionsForStorage,extractSkills:A.extractSkillsWithVersionsFromClaudeSession},s={descriptor:{id:"hermes",label:"Hermes",onboard:"plugin",platform:"hermes"},capabilities:{skills:!0,subagentTree:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromHermesSession},n={descriptor:{id:"jiuwenswarm",aliases:["jiuwen","openjiuwen"],label:"JiuwenSwarm",onboard:"env",platform:"jiuwenswarm"},capabilities:{subagentTree:!0,skills:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromJiuwenSession},i={descriptor:{id:"langfuse-langgraph",label:"Langfuse-Langgraph",onboard:"env",platform:"langfuse"},capabilities:{skills:!0,subagentTree:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromOpencodeSession},o={descriptor:{id:"openclaw",label:"OpenClaw",onboard:"plugin",platform:"openclaw"},extractSkills:A.extractSkillsWithVersionsFromOpenClawSession},a={descriptor:{id:"opencode",label:"OpenCode",onboard:"plugin",platform:"opencode"},extractSkills:A.extractSkillsWithVersionsFromOpencodeSession},l={descriptor:{id:"unknown",label:"Unknown",onboard:"env"}},c=new Map;for(let e of[a,r,o,s,n,i])for(let t of(c.set(e.descriptor.id.toLowerCase(),e),e.descriptor.aliases??[]))c.set(t.toLowerCase(),e);function g(e){return c.get(String(e??"").trim().toLowerCase())??l}e.s(["getAdapter",()=>g],418918)},536619,e=>{"use strict";[{column:"query",type:"string",label:"查询内容",description:"用户输入 / 问题",syncMode:"textSearch",nullable:!0},{column:"finalResult",type:"string",label:"输出内容",description:"trace 最终输出",syncMode:"textSearch",nullable:!0},{column:"agentName",type:"string",label:"Agent 名",description:"主 Agent 名称",syncMode:"textSearch",nullable:!0},{column:"subagentName",type:"string",label:"子 Agent 名",description:"子 Agent 显示名",syncMode:"textSearch",nullable:!0},{column:"model",type:"string",label:"模型",description:"LLM 模型名",syncMode:"textSearch",nullable:!0},{column:"label",type:"string",label:"标注",description:"人工标注",syncMode:"textSearch",nullable:!0},{column:"framework",type:"stringOptions",label:"框架",description:"采集框架 / 平台",syncMode:"exactOption",nullable:!0},{column:"subagentType",type:"stringOptions",label:"子 Agent 类型",description:"kuafu / general …",syncMode:"exactOption",nullable:!0},{column:"latency",type:"number",label:"耗时",description:"执行时长(秒)",unit:"s",nullable:!0},{column:"tokens",type:"number",label:"Tokens",description:"总 token 数",nullable:!0},{column:"inputTokens",type:"number",label:"输入 Tokens",description:"输入 token 数",nullable:!0},{column:"outputTokens",type:"number",label:"输出 Tokens",description:"输出 token 数",nullable:!0},{column:"cost",type:"number",label:"成本",description:"估算成本($)",unit:"$",nullable:!0},{column:"toolCallCount",type:"number",label:"工具调用数",description:"工具调用次数",nullable:!0},{column:"toolCallErrorCount",type:"number",label:"工具错误数",description:"工具调用失败次数",nullable:!0},{column:"answerScore",type:"number",label:"答案分",description:"答案得分(0–1)",nullable:!0},{column:"skillScore",type:"number",label:"Skill 分",description:"Skill 得分(0–1)",nullable:!0},{column:"skillTriggerRate",type:"number",label:"Skill 触发率",description:"触发率(0–1)",nullable:!0},{column:"timestamp",type:"datetime",label:"时间",description:"trace 起始时间"},{column:"isAnswerCorrect",type:"boolean",label:"答案正确",description:"评测:答案是否正确",nullable:!0},{column:"isSubagent",type:"boolean",label:"是子 Agent",description:"是否子 Agent 执行"},{column:"agents",type:"arrayOptions",label:"Agent(多选)",description:"trace 涉及的 agent",field:"observedAgents",source:"observedAgents",syncMode:"arrayOption",nullable:!0},{column:"skill",type:"arrayOptions",label:"Skill",description:"调用的 skill",source:"executionSkill",syncMode:"arrayOption"},{column:"status",type:"stringOptions",label:"状态",description:"running / success / failed",source:"computed",syncMode:"exactOption"},{column:"ownership",type:"stringOptions",label:"归属",description:"user / system",source:"computed",syncMode:"exactOption"}].map(e=>[e.column,e]),Symbol("invalid"),e.s([],536619)},979029,e=>e.a(async(t,A)=>{try{var r=e.i(309418),s=t([r]);[r]=s.then?(await s)():s,e.s([]),A()}catch(e){A(e)}},!1),904239,e=>e.a(async(t,A)=>{try{var r=e.i(522734),s=e.i(814747),n=e.i(93387),i=e.i(191878),o=e.i(457035),a=e.i(309418);e.i(723039);var l=e.i(852628),c=e.i(997078),g=e.i(583701),h=e.i(864778),u=e.i(475670),E=e.i(39759),Q=e.i(799880),d=e.i(761620),I=e.i(6325),B=e.i(308229);e.i(656709);var C=e.i(264996),f=e.i(418918),p=e.i(598905);e.i(536619);var y=e.i(979029),m=t([i,a,g,d,y]);[i,a,g,d,y]=m.then?(await m)():m;let O=!process.env.DB_HOST,G=/^[a-zA-Z0-9_\-\.]+$/;function w(e){let t=new Set,A=[];for(let r of e.events||[]){if("skill"!==r.kind)continue;let e=r.args&&"object"==typeof r.args?r.args:{},s=e.name??e.skill_name??e.skillName??e.skill;if(null==s||!String(s).trim())continue;let n=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(!G.test(n)||t.has(n))continue;t.add(n);let i=null!=e.version?Number(e.version):null;A.push({name:n,version:null===i||isNaN(i)?null:i})}return A}async function D(e,t){let A=Array.from(new Set(e.filter(e=>null==e.version).map(e=>e.name))),r=new Map;if(A.length>0)try{for(let e of(await a.prisma.skill.findMany({where:{name:{in:A},...t?{OR:[{user:t},{user:null}]}:{}},select:{name:!0,activeVersion:!0}})))"number"==typeof e.activeVersion&&r.set(e.name,e.activeVersion)}catch(e){console.warn("[Data-Service] snapshotSkillVersions lookup failed:",e)}return e.map(e=>null!=e.version?e:{name:e.name,version:r.get(e.name)??null})}async function S(e,t,A={}){if(O&&e)try{if(await a.prismaRaw.executionSkill.deleteMany({where:{executionId:e}}),!t.length)return;let r=new Set,s=[];for(let n of t){if(!n?.name)continue;let t=`${n.name}@@${n.version??""}`;r.has(t)||(r.add(t),s.push({executionId:e,skillName:n.name,skillVersion:n.version??null,isPrimary:null!=A.primaryName&&n.name===A.primaryName,user:A.user??null}))}s.length&&await a.prismaRaw.executionSkill.createMany({data:s})}catch(t){console.warn(`[Data-Service] persistExecutionSkills failed for ${e}:`,t)}}function b(e){if(null==e)return null;if(e instanceof Date)return Number.isFinite(e.getTime())?e.getTime():null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"!=typeof e)return null;let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}[...(process.env.TRACE_SERVICE_OWNERS||"admin,anonymous").split(",").map(e=>e.trim()).filter(Boolean)];let V="未找到匹配的效果评测配置";async function N(e,t,A){let r=(0,c.normalizeConfigQuery)(t);if(!r)return;let s=e.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,"routing")),n=[];for(let e of s){let t=function(e){let t=Array.isArray(e.routing_anchors)?e.routing_anchors.filter(e=>"string"==typeof e&&e.trim()):[];return e.routing_intent?.trim()&&t.length>0?{intent:e.routing_intent.trim(),anchors:t}:null}(e);if(!t)continue;let A=(0,g.matchQueryToStoredRoutingSignature)(r,t);(0!==A.matchedAnchors.length||A.intentMatched)&&n.push({config:e,signature:t,matchedAnchors:A.matchedAnchors,anchorCoverage:A.anchorCoverage,intentMatched:A.intentMatched})}if(0===n.length)return;n.sort((e,t)=>{if(t.matchedAnchors.length!==e.matchedAnchors.length)return t.matchedAnchors.length-e.matchedAnchors.length;if(t.anchorCoverage!==e.anchorCoverage)return t.anchorCoverage-e.anchorCoverage;if(Number(t.intentMatched)!==Number(e.intentMatched))return Number(t.intentMatched)-Number(e.intentMatched);let A=(0,l.getDatasetTypePriority)(e.config.dataset_type,"routing"),r=(0,l.getDatasetTypePriority)(t.config.dataset_type,"routing");if(r!==A)return r-A;let s=e.signature.anchors.join("").length;return t.signature.anchors.join("").length-s});let i=n[0];return i.config.routing_intent=i.signature.intent,i.config.routing_anchors=i.signature.anchors,i.config}function R(e,t){let A=function(e){let t=(0,c.normalizeConfigSkillName)(e.skill);if(t)return{skill:t,version:e.skill_version??null};let A=F(e),r=Array.from(new Map(A.filter(e=>e.name?.trim()).map(e=>[`${e.name.trim()}::${e.version??"any"}`,e])).values());if(1===r.length)return{skill:r[0].name.trim(),version:r[0].version??null}}(t);if(!A)return;let r=(0,c.normalizeConfigQuery)(t.query),s=e.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,"outcome")).filter(e=>(0,c.normalizeConfigSkillName)(e.skill)===A.skill).filter(e=>{let t=e.skillVersion??null;return null===t||t===A.version}).filter(e=>{let t=(0,c.normalizeConfigQuery)(e.query);return!t||t===r});if(0!==s.length)return s.reduce((e,t)=>{let s=(e.skillVersion??null)!==null&&e.skillVersion===A.version,n=(t.skillVersion??null)!==null&&t.skillVersion===A.version;if(s!==n)return n?t:e;let i=(0,c.normalizeConfigQuery)(e.query)===r,o=(0,c.normalizeConfigQuery)(t.query)===r;if(i!==o)return o?t:e;let a=!(0,c.normalizeConfigQuery)(e.query),g=!(0,c.normalizeConfigQuery)(t.query);if(a!==g)return g?t:e;let h=(0,l.getDatasetTypePriority)(e.dataset_type,"outcome");return(0,l.getDatasetTypePriority)(t.dataset_type,"outcome")>h?t:e})}function k(e){if(!e)return[];let t=(0,l.normalizeExpectedSkills)(e.expectedSkills);return t.length>0?t:e.skill?.trim()?[{skill:e.skill.trim(),version:e.skillVersion??null}]:[]}function F(e){return Array.isArray(e.invokedSkills)&&e.invokedSkills.length>0?e.invokedSkills.filter(e=>e?.name?.trim()).map(e=>({name:e.name.trim(),version:e.version??null})):Array.isArray(e.skills)&&e.skills.length>0?e.skills.filter(e=>"string"==typeof e&&e.trim()).map(e=>({name:e.trim(),version:null})):[]}function U(e,t,A){let r=new Map,s=(e,t)=>{let A=e?.trim();if(!A)return;let s=r.get(A)||{skill:A,expected_version:null,invoked_version:null,primary_version:null,is_expected:!1,is_invoked:!1,is_primary:!1,is_outcome_anchor:!1};r.set(A,{...s,...t,expected_version:void 0!==t.expected_version?t.expected_version:s.expected_version,invoked_version:void 0!==t.invoked_version?t.invoked_version:s.invoked_version,primary_version:void 0!==t.primary_version?t.primary_version:s.primary_version,is_expected:t.is_expected??s.is_expected,is_invoked:t.is_invoked??s.is_invoked,is_primary:t.is_primary??s.is_primary,is_outcome_anchor:t.is_outcome_anchor??s.is_outcome_anchor})};for(let A of(s(e.skill,{is_primary:!0,primary_version:e.skill_version??null}),k(t)))s(A.skill,{is_expected:!0,expected_version:A.version??null});for(let t of F(e))s(t.name,{is_invoked:!0,invoked_version:t.version??null});return A?.skill?.trim()&&s(A.skill,{is_outcome_anchor:!0}),Array.from(r.values()).sort((e,t)=>{let A=4*Number(e.is_primary)+2*Number(e.is_invoked)+Number(e.is_expected),r=4*Number(t.is_primary)+2*Number(t.is_invoked)+Number(t.is_expected);return A!==r?r-A:e.skill.localeCompare(t.skill)})}async function _(e,t){if(!e||Array.isArray(e.key_actions)&&e.key_actions.length>0)return;let A=function(e){let t=new Map,A=(e,A)=>{let r=(0,c.normalizeConfigSkillName)(e);if(!r)return;let s=A??null;t.set(`${r}::${s??"any"}`,{skill:r,version:s})};for(let t of(A(e.skill,e.skillVersion??null),(0,l.normalizeExpectedSkills)(e.expectedSkills)))A(t.skill,t.version??null);return Array.from(t.values())}(e);if(0===A.length)return;let r=[];for(let e of A){let A=await a.db.findSkill(e.skill,t||null);if(!A)continue;let s=e.version??A.activeVersion??A.versions?.[0]?.version??null;if(null==s)continue;let n=await a.db.findParsedFlow(A.id,s,t||null);if(!n?.flowJson)continue;let i=JSON.parse(n.flowJson),o=(0,d.extractKeyActionsFromFlow)(i).map(t=>({...t,skillSource:t.skillSource||e.skill}));o.length>0&&r.push({name:e.skill,actions:o})}if(0===r.length)return;let s=1===r.length?r[0].actions:(0,d.mergeKeyActionsFromMultipleSkills)(r);e.key_actions=s.map(e=>({content:e.content,weight:e.weight,..."required"!==e.controlFlowType?{controlFlowType:e.controlFlowType}:{},...e.condition?{condition:e.condition}:{},...e.branchLabel?{branchLabel:e.branchLabel}:{},...e.loopCondition?{loopCondition:e.loopCondition}:{},...void 0!==e.expectedMinCount?{expectedMinCount:e.expectedMinCount}:{},...void 0!==e.expectedMaxCount?{expectedMaxCount:e.expectedMaxCount}:{},...e.groupId?{groupId:e.groupId}:{}})),e.extractedKeyActions=s;try{await a.db.updateConfig(e.id,{keyActions:JSON.stringify(e.key_actions),extractedKeyActions:JSON.stringify(s)}),console.log(`[AutoExtract] Auto-filled key_actions for config ${e.id} from ${A.map(e=>e.skill).join(", ")}`)}catch(e){console.error("[AutoExtract] Error updating config with extracted key_actions:",e)}}async function M(e,t,A){let r=F(e),s=U(e,t);if(!t)return{status:"missing",expected_skills:[],invoked_skills:r,matched_skills:[],matched_anchors:[],expected_count:0,matched_count:0,is_correct:!1,trigger_rate:null,skill_breakdown:s.map(e=>({skill:e.skill,expected:e.is_expected,invoked:e.is_invoked,matched:!1,status:e.is_invoked?"unexpected":"not_applicable",expected_version:e.expected_version,invoked_version:e.invoked_version}))};let n=k(t),i=[],o=0,g=new Map,h=n.filter(e=>null!==e.version&&!r.some(t=>t.name===e.skill&&null!==t.version)).map(e=>e.skill);if(h.length>0)try{for(let e of(await a.db.findSkills({name:{in:h},user:A||null})))g.set(e.name,e)}catch(e){console.error("[RoutingEvaluation] Error fetching skills for version check:",e)}for(let e of n){let t=r.find(t=>t.name===e.skill);if(!t)continue;let A=!1;if(null===e.version)A=!0;else if(null!==t.version)A=t.version===e.version;else{let t=g.get(e.skill);A=(t?t.activeVersion||0:null)===e.version}A&&(o+=1,i.push({skill:e.skill,expected_version:e.version,invoked_version:t.version??null}))}let u=s.map(e=>{let t=i.some(t=>t.skill===e.skill),A="not_applicable";return e.is_expected?A=t?"matched":"missed":e.is_invoked&&(A="unexpected"),{skill:e.skill,expected:e.is_expected,invoked:e.is_invoked,matched:t,status:A,expected_version:e.expected_version,invoked_version:e.invoked_version}});return{status:"available",matched_config_id:t.id,matched_query:(0,c.normalizeConfigQuery)(t.query)||void 0,matched_intent:t.routing_intent||void 0,matched_anchors:t.routing_anchors||[],dataset_type:(0,l.normalizeConfigDatasetType)(t.dataset_type),expected_skills:n,invoked_skills:r,matched_skills:i,expected_count:n.length,matched_count:o,is_correct:o>0,trigger_rate:n.length>0?o/n.length:null,skill_breakdown:u}}async function T(e,t,A){let r=e.query?await N(t,e.query,A??e.user??null):void 0,s=R(t,e),n=await M(e,r,A??e.user??null),i=e.task_id||e.upload_id||"",o=null;if(i)try{let e=await a.db.findExecutionMatch(i);e&&(o={matchJson:e.matchJson??null,matchedAt:e.matchedAt??null,mode:e.mode??null})}catch{o=null}return{...e,routing_evaluation:n,outcome_evaluation:function(e,t,A,r){let s=U(e,A,t),n=(e,t)=>s.map(A=>{let s="context_only";A.is_primary?s="primary":A.is_invoked?s="invoked":A.is_expected&&(s="expected_only");let n=r?.status==="available"?r.skill_breakdown.find(e=>e.skill===A.skill)?.status||"not_applicable":"missing_dataset";return{skill:A.skill,version:A.invoked_version??A.primary_version??A.expected_version??null,role:s,is_primary:A.is_primary,is_invoked:A.is_invoked,is_expected:A.is_expected,routing_status:n,shares_execution_outcome:!0,score:e,is_correct:t}});if(!t)return{status:"missing",is_correct:null,score:null,reason:e.judgment_reason||V,standard_answer_present:!1,root_cause_count:0,key_action_count:0,skill_breakdown:n(null,null)};let i="结果评估中..."===e.judgment_reason?"pending":"available",o="pending"===i?null:e.answer_score??null,a="pending"===i?null:e.is_answer_correct??null;return{status:i,matched_config_id:t.id,matched_query:(0,c.normalizeConfigQuery)(t.query)||void 0,matched_skill:(0,c.normalizeConfigSkillName)(t.skill)||void 0,matched_skill_version:t.skillVersion??null,dataset_type:(0,l.normalizeConfigDatasetType)(t.dataset_type),is_correct:a,score:o,reason:e.judgment_reason||void 0,standard_answer_present:!!t.standard_answer,root_cause_count:t.root_causes?.length??0,key_action_count:t.key_actions?.length??0,skill_breakdown:n(o,a)}}(e,s,r,n),execution_match:o}}let J=(0,n.resolveAgentInsightDataPath)(),P=s.default.join(J,"evaluation_result.json"),W="1"===process.env.AUDIT_DATA_MUTATIONS||"true"===process.env.AUDIT_DATA_MUTATIONS;async function L(e,t="any"){let A={};e&&(A.OR=[{user:e},{user:null}]);let r=(await a.db.findConfigs(A)).map(e=>{let t=(t,A)=>{if(t)try{return JSON.parse(t)}catch(t){console.error(`[readConfig] Failed to parse ${A} for config ${e.id}:`,t);return}};return{id:e.id,query:e.query??null,dataset_type:(0,l.normalizeConfigDatasetType)(e.datasetType),skill:e.skill,skillVersion:e.skillVersion,routing_intent:e.routingIntent||void 0,routing_anchors:t(e.routingAnchors,"routingAnchors"),expectedSkills:(0,l.normalizeExpectedSkills)(t(e.expectedSkills,"expectedSkills")),standard_answer:e.standardAnswer||"",root_causes:t(e.rootCauses,"rootCauses"),key_actions:t(e.keyActions,"keyActions"),extractedKeyActions:t(e.extractedKeyActions,"extractedKeyActions"),parse_status:e.parseStatus||"completed"}});return"any"===t?r:r.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,t))}async function v(e){var t,A,s,n;let l,g=e.upload_id||e.task_id||crypto.randomUUID();if(e.task_id)try{let t={taskId:e.task_id};e.framework&&(t.framework=e.framework);let A=await a.db.findExecutions(t,{timestamp:"desc"});if(A&&A.length>0&&A[0]?.id){let t=A.find(t=>t.id===e.task_id),r=t&&t.id?t.id:A[0].id;r!==g&&(g=r)}}catch{}let d=null,y=await a.db.findExecutionById(g);y&&(d={...y,upload_id:y.id,task_id:y.taskId||void 0,query:y.query||void 0,framework:y.framework||void 0,tokens:y.tokens??void 0,cost:y.cost??void 0,latency:y.latency??void 0,timestamp:y.timestamp?.toISOString?.()||y.timestamp,final_result:y.finalResult||void 0,skill:y.skill||void 0,skills:y.skills?JSON.parse(y.skills):void 0,invokedSkills:y.invokedSkills?(()=>{try{return JSON.parse(y.invokedSkills)}catch{return}})():void 0,is_skill_correct:y.isSkillCorrect??!1,is_answer_correct:y.isAnswerCorrect??null,answer_score:y.answerScore??void 0,skill_score:y.skillScore??void 0,judgment_reason:y.judgmentReason||void 0,failures:y.failures?JSON.parse(y.failures):void 0,skill_issues:y.skillIssues?JSON.parse(y.skillIssues):void 0,label:y.label||void 0,user:y.user||void 0,skill_version:y.skillVersion??void 0,expected_skill_version:y.expectedSkillVersion??null,skill_trigger_rate:y.skillTriggerRate??null,model:y.model||void 0,tool_call_count:y.toolCallCount??void 0,llm_call_count:y.llmCallCount??void 0,input_tokens:y.inputTokens??void 0,output_tokens:y.outputTokens??void 0,tool_call_error_count:y.toolCallErrorCount??void 0,cache_read_input_tokens:y.cacheReadInputTokens??void 0,cache_creation_input_tokens:y.cacheCreationInputTokens??void 0,max_single_call_tokens:y.maxSingleCallTokens??void 0});let m=d?{...d}:{},F=!!d;F||m.timestamp||e.timestamp?e.timestamp&&(m.timestamp=e.timestamp):m.timestamp=new Date().toISOString();let U=!!e.force_query_update,M="string"==typeof d?.query?d.query.trim():"",v="string"==typeof e.query?e.query.trim():"",x=!1;if("string"==typeof e.label){let t=(0,Q.parseLabelSkillVersionBinding)(e.label);t&&(e.skill=t.skill,e.skill_version=t.skill_version,e.skills=t.skills,e.invokedSkills=t.invokedSkills,x=!0)}m={...m,...e};let H=function(e){let{isUpdate:t,existingSkillVersion:A,incomingSkillVersion:r,explicitRewrite:s}=e;return!t||null==A||s?{resolved:r,blocked:!1}:r===A?{resolved:A,blocked:!1}:{resolved:A,blocked:!0}}({isUpdate:F,existingSkillVersion:d?.skill_version??null,incomingSkillVersion:m.skill_version??null,explicitRewrite:x});if(H.blocked&&console.warn(`[Data-Service] Preserving existing skill_version for execution ${g}: existing=${d?.skill_version}, incoming=${m.skill_version} blocked. Skill version is immutable history; only NULL → value or explicit label-binding rewrite is allowed.`),m.skill_version=H.resolved??void 0,!m.agentName&&m.agent&&(m.agentName=m.agent),M&&!U?m.query=M:!M&&v?m.query=v:"string"!=typeof m.query||m.query.trim()?"string"==typeof m.query&&(m.query=m.query.trim()):m.query=void 0,!m.upload_id&&m.task_id&&(m.upload_id=m.task_id),!m.task_id&&m.upload_id&&(m.task_id=m.upload_id),m.upload_id=g,(!m.label||!m.model||!m.user)&&m.task_id){let e=await a.db.findSessionByTaskId(m.task_id);e&&(!m.label&&e.label&&(m.label=e.label),!m.model&&e.model&&(m.model=e.model),!m.user&&e.user&&(m.user=e.user))}if(!m.user){let e=(process.env.AGENT_INSIGHT_DEFAULT_INGEST_USER||"").trim()||null;if(e)m.user=e,console.log(`[Data-Service] No user on record for task ${m.task_id}, defaulting to AGENT_INSIGHT_DEFAULT_INGEST_USER=${e}`);else try{let e=a.db.getClient();if("query"in e){let t=await e.query('SELECT username FROM "User" LIMIT 1');t.rows[0]&&(m.user=t.rows[0].username,console.log(`[Data-Service] Fallback resolved user for task ${m.task_id} to: ${m.user}`))}}catch(e){console.warn("[Data-Service] Fallback user lookup failed:",e)}}let G=e.Token||e.token||e.tokens;void 0!==G&&(m.tokens=Number(G)),void 0!==e.tool_call_count&&(m.tool_call_count=Number(e.tool_call_count)),void 0!==e.llm_call_count&&(m.llm_call_count=Number(e.llm_call_count)),void 0!==e.input_tokens&&(m.input_tokens=Number(e.input_tokens)),void 0!==e.output_tokens&&(m.output_tokens=Number(e.output_tokens)),void 0!==e.tool_call_error_count&&(m.tool_call_error_count=Number(e.tool_call_error_count)),void 0!==e.cache_read_input_tokens&&(m.cache_read_input_tokens=Number(e.cache_read_input_tokens)),void 0!==e.cache_creation_input_tokens&&(m.cache_creation_input_tokens=Number(e.cache_creation_input_tokens)),void 0!==e.max_single_call_tokens&&(m.max_single_call_tokens=Number(e.max_single_call_tokens)),void 0!==e.reasoning_tokens&&(m.reasoning_tokens=Number(e.reasoning_tokens));let J=null;if(m.task_id&&m.interactions){let e=(0,f.getAdapter)(m.framework),t=t=>e.normalizeForStorage?.(t)??t,A="string"==typeof m.interactions?(()=>{try{return JSON.parse(m.interactions)}catch{return[]}})():m.interactions;J=A=t(A);try{let r=m.session_merge_strategy||e.sessionMergeStrategy||"monotonic";if("snapshot-replace"!==r){let e=await a.db.findSessionByTaskId(m.task_id),r=e?.interactions?(()=>{try{return JSON.parse(e.interactions)}catch{return[]}})():[];r=t(r),Array.isArray(r)&&r.length>0&&(J=(0,I.mergeSessionInteractionsMonotonic)(r,A))}else if("true"!==process.env.AGENT_INSIGHT_JIUWEN_ALLOW_SHRINK){let e=await a.db.findSessionByTaskId(m.task_id),r=e?.interactions?(()=>{try{return JSON.parse(e.interactions)}catch{return[]}})():[];r=t(r);let s=Array.isArray(r)?r.length:0,n=Array.isArray(A)?A.length:0;if(s>0&&n<s)return console.warn(`[Data-Service] snapshot-replace 退化护栏:拒绝用更小快照覆盖 task ${m.task_id}(incoming ${n} < existing ${s} interactions),保留现有记录。设 AGENT_INSIGHT_JIUWEN_ALLOW_SHRINK=true 可放行。`),{success:!0,record:m}}}catch(e){e&&"object"==typeof e&&"task_id"in m&&console.warn("[Data-Service] snapshot-replace 退化检查异常,按原逻辑继续:",e?.message||e)}J=t(J),m.interactions=J;let r=function(e){if(Array.isArray(e))for(let t of e){if(!t||"object"!=typeof t||"user"!==String(t.role||"").toLowerCase())continue;let e="string"==typeof t.content?t.content.trim():"";if(e)return e}}(J);if(r&&function(e,t){let A="string"==typeof e?e.trim():"";if(!A)return!0;let r="string"==typeof t?t.trim().toLowerCase():"";return!!r&&A.toLowerCase()===`${r} session`}(m.query,m.framework)&&(m.query=r),"opencode"===m.framework&&Array.isArray(J)){let e=(0,h.deriveOpencodeExecutionFields)(J);e.model&&(m.model=e.model),e.final_result&&(m.final_result=e.final_result),e.agentName&&!m.agentName&&(m.agentName=e.agentName),m.tokens=e.tokens,m.latency=e.latency,m.input_tokens=e.input_tokens,m.output_tokens=e.output_tokens,m.tool_call_count=e.tool_call_count,m.tool_call_error_count=e.tool_call_error_count,m.llm_call_count=e.llm_call_count,m.cache_read_input_tokens=e.cache_read_input_tokens,m.cache_creation_input_tokens=e.cache_creation_input_tokens,m.max_single_call_tokens=e.max_single_call_tokens,m.reasoning_tokens=e.reasoning_tokens}}let q=!1,j=m.is_answer_correct||!1,K=m.judgment_reason||V;m.skill_trigger_rate=null;let Z=await L(m.user);if(Z.length>0){let A=await N(Z,m.query,m.user),r=R(Z,m);if(A){let e=Array.isArray(m.invokedSkills)?m.invokedSkills:[],t=(Array.isArray(m.skills)?m.skills:[]).map(e=>({name:e,version:null})),r=k(A);if(r.length>0){let A=e.length>0?e:t;if(A.length>0){let e=0,t=r.filter(e=>e.skill?.trim()),s=t.map(e=>e.skill.trim()),n=new Map;if(s.length>0)try{for(let e of(await a.db.findSkills({name:{in:s},user:m.user||null})))n.set(e.name,e)}catch(e){console.error("[Judgment] Error fetching skills for version check:",e)}for(let r of t){let t=r.skill.trim(),s=r.version??null,i=A.find(e=>e.name===t);if(i){let A=!1;if(null===s)A=!0;else if(null!==i.version)A=i.version===s;else{let e=n.get(t);A=!!e&&(e.activeVersion||0)===s}A&&(e++,q||(q=!0))}}t.length>0&&(m.skill_trigger_rate=e/t.length)}}m.is_skill_correct=q}if(r){if(await _(r,m.user),void 0!==m.final_result){let s=!0;if(F&&!e.force_judgment&&d&&d.query===m.query&&d.final_result===m.final_result&&(s=!1),e.skip_internal_judgment&&(s=!1),s&&!m.skip_evaluation){let e,s=(m.skill||r.skill||A?.skill||"").trim();if(s)try{let t=await a.db.findSkill(s,m.user||null);if(t){let A=r.skillVersion??m.skill_version??t.activeVersion??0,s=t.versions?.find(e=>e.version===A);if(s&&s.content)e=s.content,(void 0===m.skill_version||null===m.skill_version)&&(m.skill_version=s.version);else if(t.versions&&t.versions.length>0){let A=t.versions[0];A&&A.content&&(e=A.content,(void 0===m.skill_version||null===m.skill_version)&&(m.skill_version=A.version))}}}catch(e){console.error("[Judgment] Error fetching skill definition:",e)}let n=null;try{let e=await a.db.findExecutionMatch(m.task_id||m.upload_id||"");e?.extractedSteps&&(n="string"==typeof e.extractedSteps?JSON.parse(e.extractedSteps):e.extractedSteps)}catch(e){console.warn("[Judgment] Failed to load execution steps for KA evaluation:",e)}let o=await (0,i.judgeAnswer)((t=m,(0,c.getConfigSubjectLabel)({query:t.query,skill:t.skill||r?.skill||null,skillVersion:t.skill_version??r?.skillVersion??null},"Skill execution benchmark")),{standard_answer_example:r.standard_answer,root_causes:r.root_causes,key_actions:r.key_actions,skill_definition:e},m.final_result,m.user,n);j=o.is_correct,m.answer_score=o.score,K=o.reason||"Judged by Evaluation Model"}}}else(!F||e.force_judgment)&&(j=!1,K=V,m.answer_score=null)}e.skip_evaluation&&(m.answer_score=null,j=!1,K="结果评估中..."),m.is_skill_correct=q,m.is_answer_correct=j,m.judgment_reason=K,m=await T(m,Z,m.user);let $=Array.isArray(m.skills)&&m.skills.length>0?m.skills[0]:void 0;if($){let e=function(){if(!r.default.existsSync(P))return{};try{return JSON.parse(r.default.readFileSync(P,"utf-8"))}catch{return{}}}()[$];e&&(m.skill_score=parseFloat(e))}if(m.label=(0,E.chooseExecutionLabel)({existingLabel:d?.label,incomingLabel:e.label,skill:m.skill,skillVersion:m.skill_version??null}),m.framework){let e=m.framework,t=m.user||null;for(let A of(0,u.extractObservedAgentRegistrations)(J,m.agentName))try{let r=await a.prisma.registeredAgent.findFirst({where:{platform:e,name:A.name,user:t}});if(!r)try{r=await a.prisma.registeredAgent.create({data:{platform:e,name:A.name,user:t,agentOwnership:(0,C.isInternalSystemAgentTrace)(A.name)?"system":"user",agentType:"main"===A.agentType?m.agentType||"main":"subagent"}})}catch(s){(r=await a.prisma.registeredAgent.findFirst({where:{platform:e,name:A.name,user:t}}))||console.warn(`[Data-Service] register observed agent failed (non-fatal): ${A.name}`,s)}r&&"main"===A.agentType&&A.name===m.agentName&&(l=r.id)}catch(e){console.warn(`[Data-Service] observed-agent registration error (non-fatal): ${A.name}`,e)}}let X=Array.isArray(J)&&J.length>0?JSON.stringify((0,u.extractObservedAgentNames)(J)):null;if(await a.db.upsertExecution({where:{id:g},create:{id:g,taskId:m.task_id,query:m.query,framework:m.framework,tokens:m.tokens,cost:m.cost,latency:m.latency,timestamp:m.timestamp?new Date(m.timestamp):new Date,finalResult:m.final_result,skill:m.skill,skills:m.skills?JSON.stringify(m.skills):null,invokedSkills:m.invokedSkills?JSON.stringify(m.invokedSkills):null,isSkillCorrect:m.is_skill_correct,isAnswerCorrect:m.is_answer_correct,answerScore:m.answer_score,skillScore:m.skill_score,judgmentReason:m.judgment_reason,failures:m.failures?JSON.stringify(m.failures):null,skillIssues:m.skill_issues?JSON.stringify(m.skill_issues):null,label:m.label,user:m.user,agentName:m.agentName,agentId:l,skillVersion:m.skill_version,model:m.model,endpoint:(0,o.normalizeEndpointUrl)(m.endpoint),toolCallCount:m.tool_call_count,llmCallCount:m.llm_call_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,toolCallErrorCount:m.tool_call_error_count,skillTriggerRate:m.skill_trigger_rate,cacheReadInputTokens:m.cache_read_input_tokens,cacheCreationInputTokens:m.cache_creation_input_tokens,maxSingleCallTokens:m.max_single_call_tokens,reasoningTokens:m.reasoning_tokens,observedAgents:X},update:{taskId:m.task_id,query:m.query,framework:m.framework,tokens:m.tokens,cost:m.cost,latency:m.latency,timestamp:m.timestamp?new Date(m.timestamp):new Date,finalResult:m.final_result,skill:m.skill,skills:m.skills?JSON.stringify(m.skills):null,invokedSkills:m.invokedSkills?JSON.stringify(m.invokedSkills):null,isSkillCorrect:m.is_skill_correct,isAnswerCorrect:m.is_answer_correct,answerScore:m.answer_score,skillScore:m.skill_score,judgmentReason:m.judgment_reason,failures:m.failures?JSON.stringify(m.failures):null,skillIssues:m.skill_issues?JSON.stringify(m.skill_issues):null,label:m.label,user:m.user,agentName:m.agentName,agentId:l,skillVersion:m.skill_version,model:m.model,endpoint:(0,o.normalizeEndpointUrl)(m.endpoint),toolCallCount:m.tool_call_count,llmCallCount:m.llm_call_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,toolCallErrorCount:m.tool_call_error_count,skillTriggerRate:m.skill_trigger_rate,cacheReadInputTokens:m.cache_read_input_tokens,cacheCreationInputTokens:m.cache_creation_input_tokens,maxSingleCallTokens:m.max_single_call_tokens,reasoningTokens:m.reasoning_tokens,observedAgents:X}}),e.upload_id&&e.task_id&&e.upload_id!==g)try{let t=await a.db.findExecutionById(e.upload_id);t&&t.taskId===e.task_id&&(W&&console.warn(`[Data-Audit] deleteExecution (dedup on save): upload_id=${e.upload_id} task_id=${e.task_id} recordId=${g}`),await a.db.deleteExecution(e.upload_id))}catch{}if(O)try{let e=Array.isArray(J)&&J.length>0,t=(A=x?Array.isArray(m.invokedSkills)?m.invokedSkills:[]:e?function(e,t){if(!Array.isArray(t)||0===t.length)return[];if("opencode"===e||"hermes"===e||"langfuse-langgraph"===e){let e=(0,B.buildAgentCallTree)(t);return e?w(e):[]}return function(e,t){if(!Array.isArray(t))return null;let A=(0,p.normalizeInteractions)(t);return(0,f.getAdapter)(e).extractSkills?.(A)??null}(e,t)??[]}(m.framework,J):Array.isArray(m.invokedSkills)?m.invokedSkills:[],s=m.skill??null,n=m.skill_version??null,s&&"number"==typeof n?A.map(e=>e.name===s&&null==e.version?{...e,version:n}:e):A),r=await D(t,m.user);await S(g,r,{user:m.user,primaryName:m.skill??null}),await a.prismaRaw.execution.update({where:{id:g},data:{skills:r.length?JSON.stringify(r.map(e=>e.name)):null,invokedSkills:r.length?JSON.stringify(r):null}})}catch(e){console.warn(`[Data-Service] root ExecutionSkill persist failed for ${g}:`,e)}if(("opencode"===m.framework||"hermes"===m.framework||"langfuse-langgraph"===m.framework)&&m.task_id&&Array.isArray(J))try{await Y({parentExecutionId:g,parentTaskId:m.task_id,parentFramework:m.framework,parentUser:m.user,interactions:J})}catch(e){console.warn(`[Data-Service] deriveSubagentExecutions failed for parent=${g}:`,e)}let z=m.trace_completed_at?new Date(m.trace_completed_at):null,ee=null!=z&&Number.isFinite(z.getTime()),et=!ee&&"hermes"===m.framework&&"string"==typeof m.final_result&&m.final_result.trim()?function(e){if(!Array.isArray(e))return null;let t=e.flatMap(e=>{let t=e&&"object"==typeof e?e:{},A=t.timeInfo&&"object"==typeof t.timeInfo?t.timeInfo:{},r=t.timing&&"object"==typeof t.timing?t.timing:{};return[b(A.completed),b(A.created),b(r.completed_at),b(r.started_at),b(t.completedAt),b(t.completed_at),b(t.timestamp),b(t.createdAt)]}).filter(e=>null!=e&&Number.isFinite(e)&&e>0).reduce((e,t)=>Math.max(e,t),0);return t>0?new Date(t):null}(J):null,eA=ee?z:et;!ee&&et&&(m.trace_completed_at=et);let er=null!=eA&&Number.isFinite(eA.getTime());return m.task_id&&J&&(await a.db.upsertSession(m.task_id,{taskId:m.task_id,query:m.query,label:m.label,user:m.user,model:m.model,interactions:JSON.stringify(J),...er?{endTime:eA}:{}},{query:m.query,label:m.label,user:m.user,model:m.model,interactions:JSON.stringify(J)}),er&&await a.db.updateSession(m.task_id,{endTime:eA}),"opencode"===m.framework&&!0===m.opencode_cli_completed&&await a.db.updateSession(m.task_id,{endTime:new Date})),{success:!0,record:m}}function x(e){if(null==e)return"";if("string"==typeof e){let t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return x(JSON.parse(t))}catch{}return e}return Array.isArray(e)?e.map(e=>x(e?.text??e?.content??e)).filter(Boolean).join("\n"):"object"==typeof e?x(e.text??e.content??""):String(e)}async function Y(e){let{parentExecutionId:t,parentTaskId:A,parentFramework:r,parentUser:s,interactions:n}=e;if(!Array.isArray(n)||0===n.length)return;let i=(0,B.buildAgentCallTree)(n);if(!i)return void await H(t,new Set);let o=[],l=new Set;if((0,B.walkTree)(i,e=>{if(!e||0===e.depth)return;let t="string"==typeof e.sessionId?e.sessionId.trim():"";!t||t===A||l.has(t)||(l.add(t),o.push({node:e,sessionId:t,parentNodeId:e.parentId}))}),0===o.length)return;o.sort((e,t)=>e.node.depth-t.node.depth);let c=new Map;c.set(i.id,t);let g=new Set;for(let e of o){let{node:A,sessionId:i,parentNodeId:o}=e,l=c.get(o)??t,h=`${l}__sub__${i}`;c.set(A.id,h),g.add(h);let E=new Set,Q=[],d=e=>{for(let t of e.interactionIndices||[])E.add(t);for(let t of(Array.isArray(e.systemPrompts)&&e.systemPrompts.length>0&&e.sessionId&&Q.push({sessionId:e.sessionId,entries:e.systemPrompts}),e.children||[]))d(t)};d(A);let I=[...E].sort((e,t)=>e-t).map(e=>n[e]).filter(Boolean),B=[];for(let e of Q)for(let t of e.entries)B.push({role:"system",content:t.text,subagent_session_id:e.sessionId,system_prompt_sha256:t.sha256,system_prompt_length:t.length,system_prompt_modelID:t.modelID,system_prompt_providerID:t.providerID});let C=[...B,...I],f=function(e,t){let A=(e.interactionIndices||[]).map(e=>t[e]).filter(Boolean),r=A.map(e=>x(e?.content).trim()).filter(Boolean),s=r[0]||e.agentName||e.sessionId,n=(e.events||[]).filter(e=>"llm"===e.kind),i=n.filter(e=>{let t=e.usage;return!!t&&((t.total||0)>0||(t.input||0)>0||(t.output||0)>0||(t.reasoning||0)>0)}),o=e.interactionIndices?.[0],a=n.filter(e=>e.interactionIndex!==o&&(!!e.summary?.trim()||(e.interaction?.tool_calls?.length||0)>0)).length,l=(e.events||[]).filter(e=>"tool"===e.kind||"skill"===e.kind||"task"===e.kind),c=A.map(e=>e?.model??e?.modelID).find(e=>"string"==typeof e&&e.trim())||null;return{query:s,finalResult:r.length>1?r[r.length-1]:null,model:c,tokens:e.stats.totalTokens,inputTokens:e.stats.inputTokens,outputTokens:e.stats.outputTokens,reasoningTokens:e.stats.reasoningTokens,cacheReadInputTokens:e.stats.cacheReadTokens,cacheCreationInputTokens:e.stats.cacheWriteTokens,latency:e.stats.durationMs??null,llmCallCount:i.length||a,toolCallCount:l.length,toolCallErrorCount:l.filter(function e(t){let A=Array.isArray(t?.interaction?.tool_calls)?t.interaction.tool_calls:[],r=t?._toolCallId,s=A.find(e=>!r||e?.id===r),n=String(s?.state||"").toLowerCase();if("error"===n||"failed"===n)return!0;let i=t?.output??s?.output??s?.result;if(i&&"object"==typeof i){let e=String(i.status||i.state||"").toLowerCase();return"error"===e||"failed"===e||!!i.error}if("string"==typeof i&&i.trim().startsWith("{"))try{return e({...t,output:JSON.parse(i),interaction:void 0})}catch{}return!1}).length}}(A,n),p=((function(e,t){let A=String(t||"").trim();if(!A)return null;for(let t of e)for(let e of Array.isArray(t?.tool_calls)?t.tool_calls:[]){let t=e?.function?.name??e?.name;if("task"!==t)continue;let r=function(e){let t=e?.function?.arguments??e?.arguments;if(t&&"object"==typeof t&&!Array.isArray(t))return t;if("string"!=typeof t)return{};try{let e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}(e);if(String(r.subagent_session_id??r.session_id??r.agent_session_id??"").trim()!==A)continue;let s=x(r.description??r.task_description??r.prompt??r.subagent_type).trim();if(s)return s}return null})(n,i)||f.query).slice(0,500),y=w(A);if(O)try{y=await D(y,s)}catch(e){console.warn(`[Data-Service] sub skill version snapshot failed sub=${i}:`,e)}let m=A.startedAt?new Date(A.startedAt):new Date,b=A.endedAt?new Date(A.endedAt):null,N={taskId:i,framework:r,timestamp:m,agentName:A.agentName??null,user:s??null,query:p,finalResult:f.finalResult,model:f.model,tokens:f.tokens,inputTokens:f.inputTokens,outputTokens:f.outputTokens,reasoningTokens:f.reasoningTokens,cacheReadInputTokens:f.cacheReadInputTokens,cacheCreationInputTokens:f.cacheCreationInputTokens,latency:f.latency,llmCallCount:f.llmCallCount,toolCallCount:f.toolCallCount,toolCallErrorCount:f.toolCallErrorCount,skills:y.length?JSON.stringify(y.map(e=>e.name)):null,invokedSkills:y.length?JSON.stringify(y):null,parentExecutionId:l,rootExecutionId:t,agentSessionId:i,subagentType:A.subagentType??null,subagentName:A.agentName??null,isSubagent:!0,observedAgents:JSON.stringify((0,u.extractObservedAgentNames)(C))};try{await a.db.upsertExecution({where:{id:h},create:{id:h,...N},update:{...N}})}catch(e){console.warn(`[Data-Service] upsertExecution(sub) failed sub=${i}:`,e);continue}if(O)try{await S(h,y,{user:s??null})}catch(e){console.warn(`[Data-Service] sub ExecutionSkill persist failed sub=${i}:`,e)}try{await a.db.upsertSession(i,{taskId:i,label:A.agentName??null,user:s??null,query:p,interactions:JSON.stringify(C),...b?{endTime:b}:{}},{label:A.agentName??null,user:s??null,query:p,interactions:JSON.stringify(C),...b?{endTime:b}:{}})}catch(e){console.warn(`[Data-Service] upsertSession(sub) failed sub=${i}:`,e)}}await H(t,g)}async function H(e,t){try{for(let A of(await a.db.findExecutions({rootExecutionId:e,isSubagent:!0},{timestamp:"desc"})))if(!(!A?.id||t.has(A.id)))try{await a.db.deleteExecution(A.id)}catch(e){console.warn(`[Data-Service] sweepStaleSubagents: deleteExecution(${A.id}) failed:`,e)}}catch(t){console.warn(`[Data-Service] sweepStaleSubagents query failed root=${e}:`,t)}}process.env.READ_RECORDS_HYDRATE_BATCH_SIZE,e.s(["saveExecutionRecord",()=>v]),A()}catch(e){A(e)}},!1)];
|
|
368
|
+
`}e.s(["EXTRACTION_PROMPT",0,t,"generateExtractionPrompt",()=>A])},191878,e=>e.a(async(t,A)=>{try{var r=e.i(522734);e.i(210954);var s=e.i(184599),n=e.i(814747),i=e.i(93387),o=e.i(256451),a=e.i(401682);e.i(419961),e.i(598905);var l=t([a]);[a]=l.then?(await l)():l;let E=(0,i.resolveAgentInsightDataPath)("model_debug.jsonl"),Q={temperature:0,top_p:1,seed:42};function c(e,t,A){try{let s=n.default.dirname(E);r.default.existsSync(s)||r.default.mkdirSync(s,{recursive:!0});let i={timestamp:new Date().toISOString(),stage:e,input:t,output:A};r.default.appendFileSync(E,JSON.stringify(i)+"\n")}catch(e){console.error("Log error",e)}}async function g(e){let t=await (0,a.getActiveConfig)(e);if(!t)return{client:null,model:null};let A=t.apiKey||"no-api-key-required",r=t.baseUrl||"https://api.deepseek.com",{customFetch:n}=(0,o.getProxyConfig)();return{client:new s.OpenAI({apiKey:A,baseURL:r,fetch:n}),model:t.model||"deepseek-chat"}}async function h(e,t){let A,r=(A=Number(process.env.JUDGMENT_TIMEOUT_MS||3e5),!Number.isFinite(A)||A<=0?3e5:A),s=new AbortController,n=setTimeout(()=>s.abort(),r);try{return await e({signal:s.signal,timeout:r})}catch(e){if(s.signal.aborted)throw Error(`${t} timeout after ${r}ms`);throw e}finally{clearTimeout(n)}}async function u(t,A,r,s,n){let{client:i,model:o}=await g(s);if(!i||!i.apiKey)return console.warn("LLM Evaluation disabled or missing config. Skipping."),{is_correct:!1,score:0,reason:"请在首页左上角的设置中配置 LLM"};try{let s=A.root_causes||[],a=A.key_actions||[],l=s.map((e,t)=>({id:`RC-${t}`,...e})),g=a.map((e,t)=>({id:`KA-${t}`,...e})),{generateJudgePrompt:u}=e.r(610234),E=[];if(l.length>0){let e=u(t,r,l,[],A.skill_definition,"root_causes"),s=await h(t=>i.chat.completions.create({messages:[{role:"user",content:e}],model:o,...Q},t),"RC Judgment API");console.log(`[Judge API Debug] RC Model: ${o}. Received response choices:`,s?.choices?.length);let n=s.choices?.[0]?.message?.content;if(c("rc_evaluation",{prompt:e},{raw_output:n}),n){let e=n.trim(),t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t)e=t[1];else{let t=e.indexOf("{"),A=e.lastIndexOf("}");-1!==t&&-1!==A&&A>=t&&(e=e.substring(t,A+1))}try{let t=JSON.parse(e);E.push(...t.evaluations||[])}catch(e){console.warn("[Judge] Failed to parse RC result:",e)}}}if(g.length>0){let e=n&&n.length>0?n.map((e,t)=>`步骤${t+1}: [${e.type}] ${e.name} - ${e.description}`).join("\n"):null,s=u(t,e||r,[],g,A.skill_definition,"key_actions",e||null),a=await h(e=>i.chat.completions.create({messages:[{role:"user",content:s}],model:o,...Q},e),"KA Judgment API");console.log(`[Judge API Debug] KA Model: ${o}. Received response choices:`,a?.choices?.length);let l=a.choices?.[0]?.message?.content;if(c("ka_evaluation",{prompt:s},{raw_output:l}),l){let e=l.trim(),t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t)e=t[1];else{let t=e.indexOf("{"),A=e.lastIndexOf("}");-1!==t&&-1!==A&&A>=t&&(e=e.substring(t,A+1))}try{let t=JSON.parse(e);E.push(...t.evaluations||[])}catch(e){console.warn("[Judge] Failed to parse KA result:",e)}}}let d=0,I=0,B=[];l.forEach(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果";d+=A*e.weight,I+=e.weight,B.push(`1. **Root Cause** [${e.content.replace(/\n/g," ")}]: ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`)});let C=new Map,f=[];for(let e of g){let t=e.groupId,A=e.controlFlowType||"required";"conditional"===A&&t?(C.has(t)||C.set(t,[]),C.get(t).push(e)):f.push(e)}for(let[e,t]of C){let e=t.map(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果";return{ka:e,ev:t,match:A,explanation:r}}),A=e.find(e=>e.match>0||!e.explanation.includes("此分支未触发"));if(A){let{ka:t,ev:r,match:s,explanation:n}=A,i=t.branchLabel||"";for(let r of(d+=s*t.weight,I+=t.weight,B.push(`2. **Key Action** [${t.content.replace(/\n/g," ")}] (条件分支${i?" - "+i:""}): ${(100*s).toFixed(0)}% match. ${n} (Weight: ${t.weight})`),e))r.ka.id!==A.ka.id&&B.push(`2. **Key Action** [${r.ka.content.replace(/\n/g," ")}] (条件分支${r.ka.branchLabel?" - "+r.ka.branchLabel:""}): ${(100*r.match).toFixed(0)}% match. ${r.explanation} (该分支未触发,不计入总分)`)}else{let{ka:t,ev:A,match:r,explanation:s}=e[0],n=t.branchLabel||"";d+=0*t.weight,I+=t.weight,B.push(`2. **Key Action** [${t.content.replace(/\n/g," ")}] (条件分支${n?" - "+n:""}): ${(100*r).toFixed(0)}% match. ${s} (所有分支均未触发,Weight: ${t.weight})`);for(let t=1;t<e.length;t++){let A=e[t];B.push(`2. **Key Action** [${A.ka.content.replace(/\n/g," ")}] (条件分支${A.ka.branchLabel?" - "+A.ka.branchLabel:""}): ${(100*A.match).toFixed(0)}% match. ${A.explanation} (该分支未触发,不计入总分)`)}}}f.forEach(e=>{let t=E.find(t=>t.id===e.id),A=t?Math.max(0,Math.min(1,Number(t.match_score))):0,r=t?.explanation||"未找到评分结果",s=e.controlFlowType||"required";if("optional"===s)return void B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (可选): ${(100*A).toFixed(0)}% match. ${r} (Weight: 0, 不扣分)`);if("handoff"===s){d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (衔接): ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`);return}if("loop"===s){let t=e.loopCondition||"",s=e.expectedMinCount,n=e.expectedMaxCount;d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}] (循环${t?" - "+t:""}): ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight}, 预期次数: ${s??"?"}~${n??"?"})`);return}d+=A*e.weight,I+=e.weight,B.push(`2. **Key Action** [${e.content.replace(/\n/g," ")}]: ${(100*A).toFixed(0)}% match. ${r} (Weight: ${e.weight})`)});let p=0;p=I>0?d/I:0;let y=B.map(e=>{let t=e.match(/(\d+)% match/),A=e.match(/\(Weight: ([\d\.]+)\)/);if(t&&A){let e=(parseInt(t[1])/100).toFixed(1),r=parseFloat(A[1]).toFixed(1);return`${e}*${r}`}return null}).filter(e=>e).join(" + "),m=B.map(e=>{let t=e.match(/\(Weight: ([\d\.]+)\)/);return t?parseFloat(t[1]).toFixed(1):null}).filter(e=>e).join(" + "),w=`**Calculation**: (${y}) / (${m}) = ${d.toFixed(2)} / ${I.toFixed(2)} = ${p.toFixed(2)}`;B.push("",w);let D=B.join("\n");return{is_correct:p>=.8,score:p,reason:D}}catch(e){if(console.error("LLM Judgment Error:",e),String(e?.message||"").includes("timeout"))return{is_correct:!1,score:0,reason:"Judgment API failed: timeout"};return{is_correct:!1,score:0,reason:"Judgment API failed"}}}e.s(["judgeAnswer",()=>u]),A()}catch(e){A(e)}},!1),457035,e=>{"use strict";var t=e.i(594559);function A(e){if(!e)return null;try{return(0,t.normalizeEndpoint)(e)}catch{return null}}e.s(["normalizeEndpointUrl",()=>A])},723039,e=>{"use strict";e.i(522734);var t=e.i(814747),A=e.i(844466);let r={},s={};for(let[e,t]of Object.entries(A.default))if(!e.startsWith("_")){if("number"==typeof t.inputTokenPrice&&"number"==typeof t.outputTokenPrice){let A={inputTokenPrice:t.inputTokenPrice,outputTokenPrice:t.outputTokenPrice};"number"==typeof t.cacheReadInputTokenPrice&&(A.cacheReadInputTokenPrice=t.cacheReadInputTokenPrice),"number"==typeof t.cacheCreationInputTokenPrice&&(A.cacheCreationInputTokenPrice=t.cacheCreationInputTokenPrice),r[e]=A}"number"==typeof t.contextWindow&&(s[e]=t.contextWindow)}t.default.join(process.cwd(),"custom-models.json"),e.s([])},852628,e=>{"use strict";function t(e){return"routing"===e||"outcome"===e||"combined"===e?e:"combined"}function A(e,A){let r=t(e);return"combined"===r||r===A}function r(e,A){let r=t(e);return"any"===A?"combined"===r?1:2:r===A?3:2*("combined"===r)}function s(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){let t=e.trim();return t?{skill:t,version:null}:null}if(!e||"object"!=typeof e)return null;let t="skill"in e?e.skill:null,A="string"==typeof t?t.trim():"";if(!A)return null;let r="version"in e?e.version:null,s=null;if("number"==typeof r&&Number.isInteger(r)&&r>=0)s=r;else if("string"==typeof r&&r.trim()){let e=parseInt(r,10);s=Number.isNaN(e)||e<0?null:e}return{skill:A,version:s}}).filter(e=>!!e):[]}e.s(["configSupportsDatasetType",()=>A,"getDatasetTypePriority",()=>r,"normalizeConfigDatasetType",()=>t,"normalizeExpectedSkills",()=>s])},997078,e=>{"use strict";function t(e){return"string"!=typeof e?null:e.trim()||null}function A(e){return"string"!=typeof e?"":e.trim()}function r(e,s="Skill benchmark"){var n,i;let o;return t(e.query)||(n=e.skill,i=e.skillVersion,(o=A(n))?null!=i?`${o} (v${i})`:o:null)||s}e.s(["getConfigSubjectLabel",()=>r,"normalizeConfigQuery",()=>t,"normalizeConfigSkillName",()=>A])},583701,e=>e.a(async(t,A)=>{try{e.i(210954),e.i(256451);var r=e.i(401682),s=t([r]);function n(e){return e.trim().toLowerCase().replace(/[`"'“”‘’]/g,"").replace(/[.,,。!?!?;;::、·…()[\]{}<>]/g," ").replace(/\s+/g," ").trim().replace(/\s/g,"")}function i(e,t){let A=n(e),r=n(t.intent),s=t.anchors.filter(e=>{let t=n(e);return!!t&&A.includes(t)});return{intentMatched:!!(A&&r&&(A===r||A.includes(r)||r.includes(A))),matchedAnchors:s,anchorCoverage:t.anchors.length>0?s.length/t.anchors.length:0}}[r]=s.then?(await s)():s,e.s(["matchQueryToStoredRoutingSignature",()=>i]),A()}catch(e){A(e)}},!1),864778,e=>{"use strict";function t(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}return null}function A(e){let A=0,r=0,s="",n="",i="",o=0,a=0,l=0,c=0,g=0,h=0,u=0,E=0,Q=0,d=Number.MAX_SAFE_INTEGER,I=0;for(let r of e||[]){if(!r)continue;let e=r.role,B="assistant"===e||"subagent"===e;if("assistant"===e){let e="string"==typeof r.content?r.content:"";e&&e.trim()&&(n=e),"string"==typeof r.model&&r.model?s=r.model:"string"==typeof r.modelID&&r.modelID&&(s=r.modelID)}r.agent&&"string"==typeof r.agent&&!i&&(i=r.agent);let C=t(r.timeInfo?.created),f=t(r.timeInfo?.completed),p=t(r.timestamp);if(C&&(d=Math.min(d,C),I=Math.max(I,C)),f&&(I=Math.max(I,f)),p&&(d=Math.min(d,p),I=Math.max(I,p)),!B)continue;h++;let y=r.usage;if(y){let e=function(e){let t=Number(e?.input_tokens??e?.input??0)||0,A=Number(e?.output_tokens??e?.output??0)||0,r=Number(e?.cache?.read??e?.cache_read_input_tokens??0)||0,s=Number(e?.cache?.write??e?.cache_creation_input_tokens??0)||0,n=Number(e?.reasoning??e?.reasoning_tokens??e?.completion_tokens_details?.reasoning_tokens??0)||0,i=e?.reasoning!==void 0&&n>0&&A<n?A+n:A;return{total:e?.total!==void 0?Number(e.total)||0:t+i+r+s,input:t,output:i,cacheRead:r,cacheWrite:s,reasoning:n,maxSingleCallTokens:t+i+r+s}}(y);A+=e.total,o+=e.input,a+=e.output,l+=e.cacheRead,c+=e.cacheWrite,g+=e.reasoning,e.maxSingleCallTokens>Q&&(Q=e.maxSingleCallTokens)}if(Array.isArray(r.tool_calls))for(let e of(u+=r.tool_calls.length,r.tool_calls))(e?.state==="error"||e?.state==="failed")&&E++}return d!==Number.MAX_SAFE_INTEGER&&I>d&&(r=I-d),{model:s||void 0,agentName:i||void 0,final_result:n||void 0,tokens:Math.round(A),latency:r/1e3,input_tokens:Math.round(o),output_tokens:Math.round(a),tool_call_count:u,tool_call_error_count:E,llm_call_count:h,cache_read_input_tokens:Math.round(l),cache_creation_input_tokens:Math.round(c),max_single_call_tokens:Math.round(Q),reasoning_tokens:Math.round(g)}}e.s(["deriveOpencodeExecutionFields",()=>A])},656709,e=>{"use strict";e.s([])},475670,e=>{"use strict";function t(e){return"string"==typeof e?e.trim():""}function A(e,A){let r=[],s=new Set,n=t(A),i=(e,A)=>{let n=t(e);if(!n)return;let i=`${A}:${n}`;s.has(i)||(s.add(i),r.push({name:n,agentType:A}))};for(let A of(n&&i(n,"main"),e||[])){if(!A||"object"!=typeof A)continue;let e=t(A.role).toLowerCase(),r=t(A.subagent_name),s=t(A.agent);if(r){i(r,"subagent");continue}("subagent"===e||"opencode"===e)&&s&&s!==n?i(s,"subagent"):!n&&s&&i(s,"main")}return r}function r(e){return A(e).map(e=>e.name)}e.i(656709),e.s(["extractObservedAgentNames",()=>r,"extractObservedAgentRegistrations",()=>A])},39759,e=>{"use strict";function t(e){let t="string"==typeof e.incomingLabel?e.incomingLabel.trim():void 0;if(void 0!==t){if(!t)return;return t}let A="string"==typeof e.existingLabel?e.existingLabel.trim():"",r="string"==typeof e.skill?e.skill.trim():"",s=e.skillVersion??null;if(A&&!(A&&"without-skill"===A))return A;if(r){let e="number"==typeof s&&Number.isFinite(s)?s:0;return`${r}-v${e}`}return"without-skill"}e.s(["chooseExecutionLabel",()=>t])},799880,e=>{"use strict";function t(e){let t="string"==typeof e?e.trim():"";if(!t||"without-skill"===t)return null;let A=t.match(/^(.+)-v(\d+)$/);if(!A)return null;let r=(A[1]||"").trim(),s=Number(A[2]);return r&&Number.isFinite(s)&&!(s<0)?{skill:r,skill_version:s,skills:[r],invokedSkills:[{name:r,version:s}]}:null}e.s(["parseLabelSkillVersionBinding",()=>t])},925658,e=>{"use strict";e.s([])},761620,e=>e.a(async(t,A)=>{try{e.i(210954),e.i(256451);var r=e.i(401682),s=e.i(309418);e.i(925658),e.i(308229),e.i(522734),e.i(814747);var n=e.i(93387),i=t([r,s]);function o(e){let t=[],A=new Map;if(e.conditionalGroups)for(let t of e.conditionalGroups)for(let e of t.branches)for(let r of e.stepIds)A.set(r,{type:"conditional",group:t});if(e.loopGroups)for(let t of e.loopGroups)for(let e of t.bodyStepIds)A.set(e,{type:"loop",group:t});let r=new Set(e.steps.map(e=>e.id));if(e.conditionalGroups)for(let t of e.conditionalGroups)for(let e of t.branches)for(let s of e.stepIds)r.has(s)||(console.warn(`[FlowParse] ConditionalGroup ${t.id} references invalid stepId ${s}, degrading to required`),A.delete(s));if(e.loopGroups)for(let t of e.loopGroups)for(let e of t.bodyStepIds)r.has(e)||(console.warn(`[FlowParse] LoopGroup ${t.id} references invalid stepId ${e}, degrading to required`),A.delete(e));let s=new Map;if(e.conditionalGroups)for(let t of e.conditionalGroups)s.set(t.id,t.branches.length);for(let r of e.steps){let e=A.get(r.id);if(r.isOptional&&!e){t.push({id:r.id,content:r.name,weight:0,controlFlowType:"optional"});continue}if(e?.type==="conditional"){let A=e.group,n=A.branches.find(e=>e.stepIds.includes(r.id)),i=s.get(A.id)||1;t.push({id:r.id,content:r.name,weight:1/i,controlFlowType:"conditional",condition:A.condition,branchLabel:n?.label,groupId:A.id});continue}if(e?.type==="loop"){let A=e.group;t.push({id:r.id,content:r.name,weight:1,controlFlowType:"loop",loopCondition:A.loopCondition,expectedMinCount:A.expectedMinCount,expectedMaxCount:A.expectedMaxCount,groupId:A.id});continue}if(r.isOptional){t.push({id:r.id,content:r.name,weight:0,controlFlowType:"optional"});continue}t.push({id:r.id,content:r.name,weight:1,controlFlowType:"required"})}return t}function a(e){let t=[];for(let A=0;A<e.length;A++){let{name:r,actions:s}=e[A];for(let e of s)t.push({...e,id:`${r}-${e.id}`,skillSource:r});if(A<e.length-1){let s=e[A+1].name;t.push({id:`handoff-${r}-to-${s}`,content:`从 ${r} 输出衔接至 ${s} 输入`,weight:1,controlFlowType:"handoff",skillSource:`${r}->${s}`})}}return t}[r,s]=i.then?(await i)():i,(0,n.resolveAgentInsightDataPath)("flow_debug.jsonl"),e.s(["extractKeyActionsFromFlow",()=>o,"mergeKeyActionsFromMultipleSkills",()=>a]),A()}catch(e){A(e)}},!1),6325,e=>{"use strict";function t(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}return null}function A(e){let A=e.id??e.message_id??e.messageID;if("string"==typeof A&&A.trim())return`id:${A.trim()}`;let r="string"==typeof e.role?e.role:"unknown",s=t(e.timestamp)??t(e.timeInfo?.created)??t(e.timeInfo?.completed)??0,n="string"==typeof e.subagent_session_id?e.subagent_session_id:"";return`k:${n}:${s}:${r}`}function r(e,r){let s=Array.isArray(e)?e:[],n=Array.isArray(r)?r:[],i=new Map,o=new Map,a=0;for(let e of s){if(!e)continue;let t=A(e);i.has(t)||(i.set(t,e),o.set(t,a++))}for(let e of n){if(!e)continue;let t=A(e),r=i.get(t);r?i.set(t,function(e,t){let A={...e,...t},r="string"==typeof e.content?e.content:"",s="string"==typeof t.content?t.content:"";return r&&!s?A.content=r:r&&s&&s.length<r.length&&(A.content=r),e.subagent_name&&!t.subagent_name&&(A.subagent_name=e.subagent_name),e.agent&&!t.agent&&(A.agent=e.agent),e.subagent_session_id&&!t.subagent_session_id&&(A.subagent_session_id=e.subagent_session_id),A.tool_calls=function(e,t){let A=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[];if(0===A.length)return r;if(0===r.length)return A;let s=new Set,n=[];for(let e of[...A,...r]){let t=function(e){let t=e?.id??e?.callID??e?.callId??e?.call_id;if("string"==typeof t&&t.trim())return`id:${t.trim()}`;let A=e?.function?.name??e?.name??"",r=e?.function?.arguments??e?.arguments??"";return`sig:${A}:${function(e){let t=5381;for(let A=0;A<e.length;A++)t=(t<<5)+t^e.charCodeAt(A);return(t>>>0).toString(16)}(function(e){if(null==e)return"";if("string"==typeof e)return e;try{return JSON.stringify(e)}catch{return String(e)}}(r))}`}(e);s.has(t)||(s.add(t),n.push(e))}return n}(e.tool_calls,t.tool_calls),e.usage&&!t.usage&&(A.usage=e.usage),e.timeInfo&&!t.timeInfo&&(A.timeInfo=e.timeInfo),A}(r,e)):(i.set(t,e),o.set(t,a++))}let l=Array.from(i.entries()).map(([e,A])=>({k:e,v:A,ts:t(A.timestamp)??t(A.timeInfo?.created)??t(A.timeInfo?.completed)??0,order:o.get(e)??0}));return l.sort((e,t)=>e.ts-t.ts||e.order-t.order),l.map(e=>e.v)}e.s(["mergeSessionInteractionsMonotonic",()=>r])},418918,e=>{"use strict";var t=e.i(308033),A=e.i(598905);let r={descriptor:{id:"claude",aliases:["claudecode"],label:"Claude Code",onboard:"watcher",platform:"claude"},normalizeForStorage:t.normalizeClaudeCodeInteractionsForStorage,extractSkills:A.extractSkillsWithVersionsFromClaudeSession},s={descriptor:{id:"hermes",label:"Hermes",onboard:"plugin",platform:"hermes"},capabilities:{skills:!0,subagentTree:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromHermesSession},n={descriptor:{id:"jiuwenswarm",aliases:["jiuwen","openjiuwen"],label:"JiuwenSwarm",onboard:"env",platform:"jiuwenswarm"},capabilities:{subagentTree:!0,skills:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromJiuwenSession},i={descriptor:{id:"langfuse-langgraph",label:"Langfuse-Langgraph",onboard:"env",platform:"langfuse"},capabilities:{skills:!0,subagentTree:!0},sessionMergeStrategy:"snapshot-replace",extractSkills:A.extractSkillsWithVersionsFromOpencodeSession},o={descriptor:{id:"openclaw",label:"OpenClaw",onboard:"plugin",platform:"openclaw"},extractSkills:A.extractSkillsWithVersionsFromOpenClawSession},a={descriptor:{id:"opencode",label:"OpenCode",onboard:"plugin",platform:"opencode"},extractSkills:A.extractSkillsWithVersionsFromOpencodeSession},l={descriptor:{id:"unknown",label:"Unknown",onboard:"env"}},c=new Map;for(let e of[a,r,o,s,n,i])for(let t of(c.set(e.descriptor.id.toLowerCase(),e),e.descriptor.aliases??[]))c.set(t.toLowerCase(),e);function g(e){return c.get(String(e??"").trim().toLowerCase())??l}e.s(["getAdapter",()=>g],418918)},536619,e=>{"use strict";[{column:"query",type:"string",label:"查询内容",description:"用户输入 / 问题",syncMode:"textSearch",nullable:!0},{column:"finalResult",type:"string",label:"输出内容",description:"trace 最终输出",syncMode:"textSearch",nullable:!0},{column:"agentName",type:"string",label:"Agent 名",description:"主 Agent 名称",syncMode:"textSearch",nullable:!0},{column:"subagentName",type:"string",label:"子 Agent 名",description:"子 Agent 显示名",syncMode:"textSearch",nullable:!0},{column:"model",type:"string",label:"模型",description:"LLM 模型名",syncMode:"textSearch",nullable:!0},{column:"label",type:"string",label:"标注",description:"人工标注",syncMode:"textSearch",nullable:!0},{column:"framework",type:"stringOptions",label:"框架",description:"采集框架 / 平台",syncMode:"exactOption",nullable:!0},{column:"subagentType",type:"stringOptions",label:"子 Agent 类型",description:"kuafu / general …",syncMode:"exactOption",nullable:!0},{column:"latency",type:"number",label:"耗时",description:"执行时长(秒)",unit:"s",nullable:!0},{column:"tokens",type:"number",label:"Tokens",description:"总 token 数",nullable:!0},{column:"inputTokens",type:"number",label:"输入 Tokens",description:"输入 token 数",nullable:!0},{column:"outputTokens",type:"number",label:"输出 Tokens",description:"输出 token 数",nullable:!0},{column:"cost",type:"number",label:"成本",description:"估算成本($)",unit:"$",nullable:!0},{column:"toolCallCount",type:"number",label:"工具调用数",description:"工具调用次数",nullable:!0},{column:"toolCallErrorCount",type:"number",label:"工具错误数",description:"工具调用失败次数",nullable:!0},{column:"answerScore",type:"number",label:"答案分",description:"答案得分(0–1)",nullable:!0},{column:"skillScore",type:"number",label:"Skill 分",description:"Skill 得分(0–1)",nullable:!0},{column:"skillTriggerRate",type:"number",label:"Skill 触发率",description:"触发率(0–1)",nullable:!0},{column:"timestamp",type:"datetime",label:"时间",description:"trace 起始时间"},{column:"isAnswerCorrect",type:"boolean",label:"答案正确",description:"评测:答案是否正确",nullable:!0},{column:"isSubagent",type:"boolean",label:"是子 Agent",description:"是否子 Agent 执行"},{column:"agents",type:"arrayOptions",label:"Agent(多选)",description:"trace 涉及的 agent",field:"observedAgents",source:"observedAgents",syncMode:"arrayOption",nullable:!0},{column:"skill",type:"arrayOptions",label:"Skill",description:"调用的 skill",source:"executionSkill",syncMode:"arrayOption"},{column:"status",type:"stringOptions",label:"状态",description:"running / success / failed",source:"computed",syncMode:"exactOption"},{column:"ownership",type:"stringOptions",label:"归属",description:"user / system",source:"computed",syncMode:"exactOption"}].map(e=>[e.column,e]),Symbol("invalid"),e.s([],536619)},979029,e=>e.a(async(t,A)=>{try{var r=e.i(309418),s=t([r]);[r]=s.then?(await s)():s,e.s([]),A()}catch(e){A(e)}},!1),904239,e=>e.a(async(t,A)=>{try{var r=e.i(522734),s=e.i(814747),n=e.i(93387),i=e.i(191878),o=e.i(457035),a=e.i(309418);e.i(723039);var l=e.i(852628),c=e.i(997078),g=e.i(583701),h=e.i(864778),u=e.i(475670),E=e.i(39759),Q=e.i(799880),d=e.i(761620),I=e.i(6325),B=e.i(308229);e.i(656709);var C=e.i(264996),f=e.i(418918),p=e.i(598905);e.i(536619);var y=e.i(979029),m=t([i,a,g,d,y]);[i,a,g,d,y]=m.then?(await m)():m;let O=!process.env.DB_HOST,G=/^[a-zA-Z0-9_\-\.]+$/;function w(e){let t=new Set,A=[];for(let r of e.events||[]){if("skill"!==r.kind)continue;let e=r.args&&"object"==typeof r.args?r.args:{},s=e.name??e.skill_name??e.skillName??e.skill;if(null==s||!String(s).trim())continue;let n=String(s).trim().replace(/^['"]+|['"]+$/g,"");if(!G.test(n)||t.has(n))continue;t.add(n);let i=null!=e.version?Number(e.version):null;A.push({name:n,version:null===i||isNaN(i)?null:i})}return A}async function D(e,t){let A=Array.from(new Set(e.filter(e=>null==e.version).map(e=>e.name))),r=new Map;if(A.length>0)try{for(let e of(await a.prisma.skill.findMany({where:{name:{in:A},...t?{OR:[{user:t},{user:null}]}:{}},select:{name:!0,activeVersion:!0}})))"number"==typeof e.activeVersion&&r.set(e.name,e.activeVersion)}catch(e){console.warn("[Data-Service] snapshotSkillVersions lookup failed:",e)}return e.map(e=>null!=e.version?e:{name:e.name,version:r.get(e.name)??null})}async function S(e,t,A={}){if(O&&e)try{if(await a.prismaRaw.executionSkill.deleteMany({where:{executionId:e}}),!t.length)return;let r=new Set,s=[];for(let n of t){if(!n?.name)continue;let t=`${n.name}@@${n.version??""}`;r.has(t)||(r.add(t),s.push({executionId:e,skillName:n.name,skillVersion:n.version??null,isPrimary:null!=A.primaryName&&n.name===A.primaryName,user:A.user??null}))}s.length&&await a.prismaRaw.executionSkill.createMany({data:s})}catch(t){console.warn(`[Data-Service] persistExecutionSkills failed for ${e}:`,t)}}function b(e){if(null==e)return null;if(e instanceof Date)return Number.isFinite(e.getTime())?e.getTime():null;if("number"==typeof e&&Number.isFinite(e))return e;if("string"!=typeof e)return null;let t=e.trim();if(!t)return null;if(/^\d+$/.test(t)){let e=Number(t);return Number.isFinite(e)?e:null}let A=Date.parse(t);return Number.isFinite(A)?A:null}[...(process.env.TRACE_SERVICE_OWNERS||"admin,anonymous").split(",").map(e=>e.trim()).filter(Boolean)];let V="未找到匹配的效果评测配置";async function N(e,t,A){let r=(0,c.normalizeConfigQuery)(t);if(!r)return;let s=e.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,"routing")),n=[];for(let e of s){let t=function(e){let t=Array.isArray(e.routing_anchors)?e.routing_anchors.filter(e=>"string"==typeof e&&e.trim()):[];return e.routing_intent?.trim()&&t.length>0?{intent:e.routing_intent.trim(),anchors:t}:null}(e);if(!t)continue;let A=(0,g.matchQueryToStoredRoutingSignature)(r,t);(0!==A.matchedAnchors.length||A.intentMatched)&&n.push({config:e,signature:t,matchedAnchors:A.matchedAnchors,anchorCoverage:A.anchorCoverage,intentMatched:A.intentMatched})}if(0===n.length)return;n.sort((e,t)=>{if(t.matchedAnchors.length!==e.matchedAnchors.length)return t.matchedAnchors.length-e.matchedAnchors.length;if(t.anchorCoverage!==e.anchorCoverage)return t.anchorCoverage-e.anchorCoverage;if(Number(t.intentMatched)!==Number(e.intentMatched))return Number(t.intentMatched)-Number(e.intentMatched);let A=(0,l.getDatasetTypePriority)(e.config.dataset_type,"routing"),r=(0,l.getDatasetTypePriority)(t.config.dataset_type,"routing");if(r!==A)return r-A;let s=e.signature.anchors.join("").length;return t.signature.anchors.join("").length-s});let i=n[0];return i.config.routing_intent=i.signature.intent,i.config.routing_anchors=i.signature.anchors,i.config}function R(e,t){let A=function(e){let t=(0,c.normalizeConfigSkillName)(e.skill);if(t)return{skill:t,version:e.skill_version??null};let A=F(e),r=Array.from(new Map(A.filter(e=>e.name?.trim()).map(e=>[`${e.name.trim()}::${e.version??"any"}`,e])).values());if(1===r.length)return{skill:r[0].name.trim(),version:r[0].version??null}}(t);if(!A)return;let r=(0,c.normalizeConfigQuery)(t.query),s=e.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,"outcome")).filter(e=>(0,c.normalizeConfigSkillName)(e.skill)===A.skill).filter(e=>{let t=e.skillVersion??null;return null===t||t===A.version}).filter(e=>{let t=(0,c.normalizeConfigQuery)(e.query);return!t||t===r});if(0!==s.length)return s.reduce((e,t)=>{let s=(e.skillVersion??null)!==null&&e.skillVersion===A.version,n=(t.skillVersion??null)!==null&&t.skillVersion===A.version;if(s!==n)return n?t:e;let i=(0,c.normalizeConfigQuery)(e.query)===r,o=(0,c.normalizeConfigQuery)(t.query)===r;if(i!==o)return o?t:e;let a=!(0,c.normalizeConfigQuery)(e.query),g=!(0,c.normalizeConfigQuery)(t.query);if(a!==g)return g?t:e;let h=(0,l.getDatasetTypePriority)(e.dataset_type,"outcome");return(0,l.getDatasetTypePriority)(t.dataset_type,"outcome")>h?t:e})}function k(e){if(!e)return[];let t=(0,l.normalizeExpectedSkills)(e.expectedSkills);return t.length>0?t:e.skill?.trim()?[{skill:e.skill.trim(),version:e.skillVersion??null}]:[]}function F(e){return Array.isArray(e.invokedSkills)&&e.invokedSkills.length>0?e.invokedSkills.filter(e=>e?.name?.trim()).map(e=>({name:e.name.trim(),version:e.version??null})):Array.isArray(e.skills)&&e.skills.length>0?e.skills.filter(e=>"string"==typeof e&&e.trim()).map(e=>({name:e.trim(),version:null})):[]}function U(e,t,A){let r=new Map,s=(e,t)=>{let A=e?.trim();if(!A)return;let s=r.get(A)||{skill:A,expected_version:null,invoked_version:null,primary_version:null,is_expected:!1,is_invoked:!1,is_primary:!1,is_outcome_anchor:!1};r.set(A,{...s,...t,expected_version:void 0!==t.expected_version?t.expected_version:s.expected_version,invoked_version:void 0!==t.invoked_version?t.invoked_version:s.invoked_version,primary_version:void 0!==t.primary_version?t.primary_version:s.primary_version,is_expected:t.is_expected??s.is_expected,is_invoked:t.is_invoked??s.is_invoked,is_primary:t.is_primary??s.is_primary,is_outcome_anchor:t.is_outcome_anchor??s.is_outcome_anchor})};for(let A of(s(e.skill,{is_primary:!0,primary_version:e.skill_version??null}),k(t)))s(A.skill,{is_expected:!0,expected_version:A.version??null});for(let t of F(e))s(t.name,{is_invoked:!0,invoked_version:t.version??null});return A?.skill?.trim()&&s(A.skill,{is_outcome_anchor:!0}),Array.from(r.values()).sort((e,t)=>{let A=4*Number(e.is_primary)+2*Number(e.is_invoked)+Number(e.is_expected),r=4*Number(t.is_primary)+2*Number(t.is_invoked)+Number(t.is_expected);return A!==r?r-A:e.skill.localeCompare(t.skill)})}async function _(e,t){if(!e||Array.isArray(e.key_actions)&&e.key_actions.length>0)return;let A=function(e){let t=new Map,A=(e,A)=>{let r=(0,c.normalizeConfigSkillName)(e);if(!r)return;let s=A??null;t.set(`${r}::${s??"any"}`,{skill:r,version:s})};for(let t of(A(e.skill,e.skillVersion??null),(0,l.normalizeExpectedSkills)(e.expectedSkills)))A(t.skill,t.version??null);return Array.from(t.values())}(e);if(0===A.length)return;let r=[];for(let e of A){let A=await a.db.findSkill(e.skill,t||null);if(!A)continue;let s=e.version??A.activeVersion??A.versions?.[0]?.version??null;if(null==s)continue;let n=await a.db.findParsedFlow(A.id,s,t||null);if(!n?.flowJson)continue;let i=JSON.parse(n.flowJson),o=(0,d.extractKeyActionsFromFlow)(i).map(t=>({...t,skillSource:t.skillSource||e.skill}));o.length>0&&r.push({name:e.skill,actions:o})}if(0===r.length)return;let s=1===r.length?r[0].actions:(0,d.mergeKeyActionsFromMultipleSkills)(r);e.key_actions=s.map(e=>({content:e.content,weight:e.weight,..."required"!==e.controlFlowType?{controlFlowType:e.controlFlowType}:{},...e.condition?{condition:e.condition}:{},...e.branchLabel?{branchLabel:e.branchLabel}:{},...e.loopCondition?{loopCondition:e.loopCondition}:{},...void 0!==e.expectedMinCount?{expectedMinCount:e.expectedMinCount}:{},...void 0!==e.expectedMaxCount?{expectedMaxCount:e.expectedMaxCount}:{},...e.groupId?{groupId:e.groupId}:{}})),e.extractedKeyActions=s;try{await a.db.updateConfig(e.id,{keyActions:JSON.stringify(e.key_actions),extractedKeyActions:JSON.stringify(s)}),console.log(`[AutoExtract] Auto-filled key_actions for config ${e.id} from ${A.map(e=>e.skill).join(", ")}`)}catch(e){console.error("[AutoExtract] Error updating config with extracted key_actions:",e)}}async function M(e,t,A){let r=F(e),s=U(e,t);if(!t)return{status:"missing",expected_skills:[],invoked_skills:r,matched_skills:[],matched_anchors:[],expected_count:0,matched_count:0,is_correct:!1,trigger_rate:null,skill_breakdown:s.map(e=>({skill:e.skill,expected:e.is_expected,invoked:e.is_invoked,matched:!1,status:e.is_invoked?"unexpected":"not_applicable",expected_version:e.expected_version,invoked_version:e.invoked_version}))};let n=k(t),i=[],o=0,g=new Map,h=n.filter(e=>null!==e.version&&!r.some(t=>t.name===e.skill&&null!==t.version)).map(e=>e.skill);if(h.length>0)try{for(let e of(await a.db.findSkills({name:{in:h},user:A||null})))g.set(e.name,e)}catch(e){console.error("[RoutingEvaluation] Error fetching skills for version check:",e)}for(let e of n){let t=r.find(t=>t.name===e.skill);if(!t)continue;let A=!1;if(null===e.version)A=!0;else if(null!==t.version)A=t.version===e.version;else{let t=g.get(e.skill);A=(t?t.activeVersion||0:null)===e.version}A&&(o+=1,i.push({skill:e.skill,expected_version:e.version,invoked_version:t.version??null}))}let u=s.map(e=>{let t=i.some(t=>t.skill===e.skill),A="not_applicable";return e.is_expected?A=t?"matched":"missed":e.is_invoked&&(A="unexpected"),{skill:e.skill,expected:e.is_expected,invoked:e.is_invoked,matched:t,status:A,expected_version:e.expected_version,invoked_version:e.invoked_version}});return{status:"available",matched_config_id:t.id,matched_query:(0,c.normalizeConfigQuery)(t.query)||void 0,matched_intent:t.routing_intent||void 0,matched_anchors:t.routing_anchors||[],dataset_type:(0,l.normalizeConfigDatasetType)(t.dataset_type),expected_skills:n,invoked_skills:r,matched_skills:i,expected_count:n.length,matched_count:o,is_correct:o>0,trigger_rate:n.length>0?o/n.length:null,skill_breakdown:u}}async function T(e,t,A){let r=e.query?await N(t,e.query,A??e.user??null):void 0,s=R(t,e),n=await M(e,r,A??e.user??null),i=e.task_id||e.upload_id||"",o=null;if(i)try{let e=await a.db.findExecutionMatch(i);e&&(o={matchJson:e.matchJson??null,matchedAt:e.matchedAt??null,mode:e.mode??null})}catch{o=null}return{...e,routing_evaluation:n,outcome_evaluation:function(e,t,A,r){let s=U(e,A,t),n=(e,t)=>s.map(A=>{let s="context_only";A.is_primary?s="primary":A.is_invoked?s="invoked":A.is_expected&&(s="expected_only");let n=r?.status==="available"?r.skill_breakdown.find(e=>e.skill===A.skill)?.status||"not_applicable":"missing_dataset";return{skill:A.skill,version:A.invoked_version??A.primary_version??A.expected_version??null,role:s,is_primary:A.is_primary,is_invoked:A.is_invoked,is_expected:A.is_expected,routing_status:n,shares_execution_outcome:!0,score:e,is_correct:t}});if(!t)return{status:"missing",is_correct:null,score:null,reason:e.judgment_reason||V,standard_answer_present:!1,root_cause_count:0,key_action_count:0,skill_breakdown:n(null,null)};let i="结果评估中..."===e.judgment_reason?"pending":"available",o="pending"===i?null:e.answer_score??null,a="pending"===i?null:e.is_answer_correct??null;return{status:i,matched_config_id:t.id,matched_query:(0,c.normalizeConfigQuery)(t.query)||void 0,matched_skill:(0,c.normalizeConfigSkillName)(t.skill)||void 0,matched_skill_version:t.skillVersion??null,dataset_type:(0,l.normalizeConfigDatasetType)(t.dataset_type),is_correct:a,score:o,reason:e.judgment_reason||void 0,standard_answer_present:!!t.standard_answer,root_cause_count:t.root_causes?.length??0,key_action_count:t.key_actions?.length??0,skill_breakdown:n(o,a)}}(e,s,r,n),execution_match:o}}let J=(0,n.resolveAgentInsightDataPath)(),P=s.default.join(J,"evaluation_result.json"),W="1"===process.env.AUDIT_DATA_MUTATIONS||"true"===process.env.AUDIT_DATA_MUTATIONS;async function L(e,t="any"){let A={};e&&(A.OR=[{user:e},{user:null}]);let r=(await a.db.findConfigs(A)).map(e=>{let t=(t,A)=>{if(t)try{return JSON.parse(t)}catch(t){console.error(`[readConfig] Failed to parse ${A} for config ${e.id}:`,t);return}};return{id:e.id,query:e.query??null,dataset_type:(0,l.normalizeConfigDatasetType)(e.datasetType),skill:e.skill,skillVersion:e.skillVersion,routing_intent:e.routingIntent||void 0,routing_anchors:t(e.routingAnchors,"routingAnchors"),expectedSkills:(0,l.normalizeExpectedSkills)(t(e.expectedSkills,"expectedSkills")),standard_answer:e.standardAnswer||"",root_causes:t(e.rootCauses,"rootCauses"),key_actions:t(e.keyActions,"keyActions"),extractedKeyActions:t(e.extractedKeyActions,"extractedKeyActions"),parse_status:e.parseStatus||"completed"}});return"any"===t?r:r.filter(e=>(0,l.configSupportsDatasetType)(e.dataset_type,t))}async function v(e){var t,A,s,n;let l,g=e.upload_id||e.task_id||crypto.randomUUID();if(e.task_id)try{let t={taskId:e.task_id};e.framework&&(t.framework=e.framework);let A=await a.db.findExecutions(t,{timestamp:"desc"});if(A&&A.length>0&&A[0]?.id){let t=A.find(t=>t.id===e.task_id),r=t&&t.id?t.id:A[0].id;r!==g&&(g=r)}}catch{}let d=null,y=await a.db.findExecutionById(g);y&&(d={...y,upload_id:y.id,task_id:y.taskId||void 0,query:y.query||void 0,framework:y.framework||void 0,tokens:y.tokens??void 0,cost:y.cost??void 0,latency:y.latency??void 0,timestamp:y.timestamp?.toISOString?.()||y.timestamp,final_result:y.finalResult||void 0,skill:y.skill||void 0,skills:y.skills?JSON.parse(y.skills):void 0,invokedSkills:y.invokedSkills?(()=>{try{return JSON.parse(y.invokedSkills)}catch{return}})():void 0,is_skill_correct:y.isSkillCorrect??!1,is_answer_correct:y.isAnswerCorrect??null,answer_score:y.answerScore??void 0,skill_score:y.skillScore??void 0,judgment_reason:y.judgmentReason||void 0,failures:y.failures?JSON.parse(y.failures):void 0,skill_issues:y.skillIssues?JSON.parse(y.skillIssues):void 0,label:y.label||void 0,user:y.user||void 0,skill_version:y.skillVersion??void 0,expected_skill_version:y.expectedSkillVersion??null,skill_trigger_rate:y.skillTriggerRate??null,model:y.model||void 0,tool_call_count:y.toolCallCount??void 0,llm_call_count:y.llmCallCount??void 0,input_tokens:y.inputTokens??void 0,output_tokens:y.outputTokens??void 0,tool_call_error_count:y.toolCallErrorCount??void 0,cache_read_input_tokens:y.cacheReadInputTokens??void 0,cache_creation_input_tokens:y.cacheCreationInputTokens??void 0,max_single_call_tokens:y.maxSingleCallTokens??void 0});let m=d?{...d}:{},F=!!d;F||m.timestamp||e.timestamp?e.timestamp&&(m.timestamp=e.timestamp):m.timestamp=new Date().toISOString();let U=!!e.force_query_update,M="string"==typeof d?.query?d.query.trim():"",v="string"==typeof e.query?e.query.trim():"",x=!1;if("string"==typeof e.label){let t=(0,Q.parseLabelSkillVersionBinding)(e.label);t&&(e.skill=t.skill,e.skill_version=t.skill_version,e.skills=t.skills,e.invokedSkills=t.invokedSkills,x=!0)}m={...m,...e};let H=function(e){let{isUpdate:t,existingSkillVersion:A,incomingSkillVersion:r,explicitRewrite:s}=e;return!t||null==A||s?{resolved:r,blocked:!1}:r===A?{resolved:A,blocked:!1}:{resolved:A,blocked:!0}}({isUpdate:F,existingSkillVersion:d?.skill_version??null,incomingSkillVersion:m.skill_version??null,explicitRewrite:x});if(H.blocked&&console.warn(`[Data-Service] Preserving existing skill_version for execution ${g}: existing=${d?.skill_version}, incoming=${m.skill_version} blocked. Skill version is immutable history; only NULL → value or explicit label-binding rewrite is allowed.`),m.skill_version=H.resolved??void 0,!m.agentName&&m.agent&&(m.agentName=m.agent),M&&!U?m.query=M:!M&&v?m.query=v:"string"!=typeof m.query||m.query.trim()?"string"==typeof m.query&&(m.query=m.query.trim()):m.query=void 0,!m.upload_id&&m.task_id&&(m.upload_id=m.task_id),!m.task_id&&m.upload_id&&(m.task_id=m.upload_id),m.upload_id=g,(!m.label||!m.model||!m.user)&&m.task_id){let e=await a.db.findSessionByTaskId(m.task_id);e&&(!m.label&&e.label&&(m.label=e.label),!m.model&&e.model&&(m.model=e.model),!m.user&&e.user&&(m.user=e.user))}if(!m.user){let e=(process.env.AGENT_INSIGHT_DEFAULT_INGEST_USER||"").trim()||null;if(e)m.user=e,console.log(`[Data-Service] No user on record for task ${m.task_id}, defaulting to AGENT_INSIGHT_DEFAULT_INGEST_USER=${e}`);else try{let e=a.db.getClient();if("query"in e){let t=await e.query('SELECT username FROM "User" LIMIT 1');t.rows[0]&&(m.user=t.rows[0].username,console.log(`[Data-Service] Fallback resolved user for task ${m.task_id} to: ${m.user}`))}}catch(e){console.warn("[Data-Service] Fallback user lookup failed:",e)}}let G=e.Token||e.token||e.tokens;void 0!==G&&(m.tokens=Number(G)),void 0!==e.tool_call_count&&(m.tool_call_count=Number(e.tool_call_count)),void 0!==e.llm_call_count&&(m.llm_call_count=Number(e.llm_call_count)),void 0!==e.input_tokens&&(m.input_tokens=Number(e.input_tokens)),void 0!==e.output_tokens&&(m.output_tokens=Number(e.output_tokens)),void 0!==e.tool_call_error_count&&(m.tool_call_error_count=Number(e.tool_call_error_count)),void 0!==e.cache_read_input_tokens&&(m.cache_read_input_tokens=Number(e.cache_read_input_tokens)),void 0!==e.cache_creation_input_tokens&&(m.cache_creation_input_tokens=Number(e.cache_creation_input_tokens)),void 0!==e.max_single_call_tokens&&(m.max_single_call_tokens=Number(e.max_single_call_tokens)),void 0!==e.reasoning_tokens&&(m.reasoning_tokens=Number(e.reasoning_tokens));let J=null;if(m.task_id&&m.interactions){let e=(0,f.getAdapter)(m.framework),t=t=>e.normalizeForStorage?.(t)??t,A="string"==typeof m.interactions?(()=>{try{return JSON.parse(m.interactions)}catch{return[]}})():m.interactions;J=A=t(A);try{let r=m.session_merge_strategy||e.sessionMergeStrategy||"monotonic";if("snapshot-replace"!==r){let e=await a.db.findSessionByTaskId(m.task_id),r=e?.interactions?(()=>{try{return JSON.parse(e.interactions)}catch{return[]}})():[];r=t(r),Array.isArray(r)&&r.length>0&&(J=(0,I.mergeSessionInteractionsMonotonic)(r,A))}else if("true"!==process.env.AGENT_INSIGHT_JIUWEN_ALLOW_SHRINK){let e=await a.db.findSessionByTaskId(m.task_id),r=e?.interactions?(()=>{try{return JSON.parse(e.interactions)}catch{return[]}})():[];r=t(r);let s=Array.isArray(r)?r.length:0,n=Array.isArray(A)?A.length:0;if(s>0&&n<s)return console.warn(`[Data-Service] snapshot-replace 退化护栏:拒绝用更小快照覆盖 task ${m.task_id}(incoming ${n} < existing ${s} interactions),保留现有记录。设 AGENT_INSIGHT_JIUWEN_ALLOW_SHRINK=true 可放行。`),{success:!0,record:m}}}catch(e){e&&"object"==typeof e&&"task_id"in m&&console.warn("[Data-Service] snapshot-replace 退化检查异常,按原逻辑继续:",e?.message||e)}J=t(J),m.interactions=J;let r=function(e){if(Array.isArray(e))for(let t of e){if(!t||"object"!=typeof t||"user"!==String(t.role||"").toLowerCase())continue;let e="string"==typeof t.content?t.content.trim():"";if(e)return e}}(J);if(r&&function(e,t){let A="string"==typeof e?e.trim():"";if(!A)return!0;let r="string"==typeof t?t.trim().toLowerCase():"";return!!r&&A.toLowerCase()===`${r} session`}(m.query,m.framework)&&(m.query=r),"opencode"===m.framework&&Array.isArray(J)){let e=(0,h.deriveOpencodeExecutionFields)(J);e.model&&(m.model=e.model),e.final_result&&(m.final_result=e.final_result),e.agentName&&!m.agentName&&(m.agentName=e.agentName),m.tokens=e.tokens,m.latency=e.latency,m.input_tokens=e.input_tokens,m.output_tokens=e.output_tokens,m.tool_call_count=e.tool_call_count,m.tool_call_error_count=e.tool_call_error_count,m.llm_call_count=e.llm_call_count,m.cache_read_input_tokens=e.cache_read_input_tokens,m.cache_creation_input_tokens=e.cache_creation_input_tokens,m.max_single_call_tokens=e.max_single_call_tokens,m.reasoning_tokens=e.reasoning_tokens}}let q=!1,j=m.is_answer_correct||!1,K=m.judgment_reason||V;m.skill_trigger_rate=null;let Z=await L(m.user);if(Z.length>0){let A=await N(Z,m.query,m.user),r=R(Z,m);if(A){let e=Array.isArray(m.invokedSkills)?m.invokedSkills:[],t=(Array.isArray(m.skills)?m.skills:[]).map(e=>({name:e,version:null})),r=k(A);if(r.length>0){let A=e.length>0?e:t;if(A.length>0){let e=0,t=r.filter(e=>e.skill?.trim()),s=t.map(e=>e.skill.trim()),n=new Map;if(s.length>0)try{for(let e of(await a.db.findSkills({name:{in:s},user:m.user||null})))n.set(e.name,e)}catch(e){console.error("[Judgment] Error fetching skills for version check:",e)}for(let r of t){let t=r.skill.trim(),s=r.version??null,i=A.find(e=>e.name===t);if(i){let A=!1;if(null===s)A=!0;else if(null!==i.version)A=i.version===s;else{let e=n.get(t);A=!!e&&(e.activeVersion||0)===s}A&&(e++,q||(q=!0))}}t.length>0&&(m.skill_trigger_rate=e/t.length)}}m.is_skill_correct=q}if(r){if(await _(r,m.user),void 0!==m.final_result){let s=!0;if(F&&!e.force_judgment&&d&&d.query===m.query&&d.final_result===m.final_result&&(s=!1),e.skip_internal_judgment&&(s=!1),s&&!m.skip_evaluation){let e,s=(m.skill||r.skill||A?.skill||"").trim();if(s)try{let t=await a.db.findSkill(s,m.user||null);if(t){let A=r.skillVersion??m.skill_version??t.activeVersion??0,s=t.versions?.find(e=>e.version===A);if(s&&s.content)e=s.content,(void 0===m.skill_version||null===m.skill_version)&&(m.skill_version=s.version);else if(t.versions&&t.versions.length>0){let A=t.versions[0];A&&A.content&&(e=A.content,(void 0===m.skill_version||null===m.skill_version)&&(m.skill_version=A.version))}}}catch(e){console.error("[Judgment] Error fetching skill definition:",e)}let n=null;try{let e=await a.db.findExecutionMatch(m.task_id||m.upload_id||"");e?.extractedSteps&&(n="string"==typeof e.extractedSteps?JSON.parse(e.extractedSteps):e.extractedSteps)}catch(e){console.warn("[Judgment] Failed to load execution steps for KA evaluation:",e)}let o=await (0,i.judgeAnswer)((t=m,(0,c.getConfigSubjectLabel)({query:t.query,skill:t.skill||r?.skill||null,skillVersion:t.skill_version??r?.skillVersion??null},"Skill execution benchmark")),{standard_answer_example:r.standard_answer,root_causes:r.root_causes,key_actions:r.key_actions,skill_definition:e},m.final_result,m.user,n);j=o.is_correct,m.answer_score=o.score,K=o.reason||"Judged by Evaluation Model"}}}else(!F||e.force_judgment)&&(j=!1,K=V,m.answer_score=null)}e.skip_evaluation&&(m.answer_score=null,j=!1,K="结果评估中..."),m.is_skill_correct=q,m.is_answer_correct=j,m.judgment_reason=K,m=await T(m,Z,m.user);let $=Array.isArray(m.skills)&&m.skills.length>0?m.skills[0]:void 0;if($){let e=function(){if(!r.default.existsSync(P))return{};try{return JSON.parse(r.default.readFileSync(P,"utf-8"))}catch{return{}}}()[$];e&&(m.skill_score=parseFloat(e))}if(m.label=(0,E.chooseExecutionLabel)({existingLabel:d?.label,incomingLabel:e.label,skill:m.skill,skillVersion:m.skill_version??null}),m.framework){let e=m.framework,t=m.user||null;for(let A of(0,u.extractObservedAgentRegistrations)(J,m.agentName))try{let r=await a.prisma.registeredAgent.findFirst({where:{platform:e,name:A.name,user:t}});if(!r)try{r=await a.prisma.registeredAgent.create({data:{platform:e,name:A.name,user:t,agentOwnership:(0,C.isInternalSystemAgentTrace)(A.name)?"system":"user",agentType:"main"===A.agentType?m.agentType||"main":"subagent"}})}catch(s){(r=await a.prisma.registeredAgent.findFirst({where:{platform:e,name:A.name,user:t}}))||console.warn(`[Data-Service] register observed agent failed (non-fatal): ${A.name}`,s)}r&&"main"===A.agentType&&A.name===m.agentName&&(l=r.id)}catch(e){console.warn(`[Data-Service] observed-agent registration error (non-fatal): ${A.name}`,e)}}let X=Array.isArray(J)&&J.length>0?JSON.stringify((0,u.extractObservedAgentNames)(J)):null;if(await a.db.upsertExecution({where:{id:g},create:{id:g,taskId:m.task_id,query:m.query,framework:m.framework,tokens:m.tokens,cost:m.cost,latency:m.latency,timestamp:m.timestamp?new Date(m.timestamp):new Date,finalResult:m.final_result,skill:m.skill,skills:m.skills?JSON.stringify(m.skills):null,invokedSkills:m.invokedSkills?JSON.stringify(m.invokedSkills):null,isSkillCorrect:m.is_skill_correct,isAnswerCorrect:m.is_answer_correct,answerScore:m.answer_score,skillScore:m.skill_score,judgmentReason:m.judgment_reason,failures:m.failures?JSON.stringify(m.failures):null,skillIssues:m.skill_issues?JSON.stringify(m.skill_issues):null,label:m.label,user:m.user,agentName:m.agentName,agentId:l,skillVersion:m.skill_version,model:m.model,endpoint:(0,o.normalizeEndpointUrl)(m.endpoint),toolCallCount:m.tool_call_count,llmCallCount:m.llm_call_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,toolCallErrorCount:m.tool_call_error_count,skillTriggerRate:m.skill_trigger_rate,cacheReadInputTokens:m.cache_read_input_tokens,cacheCreationInputTokens:m.cache_creation_input_tokens,maxSingleCallTokens:m.max_single_call_tokens,reasoningTokens:m.reasoning_tokens,observedAgents:X},update:{taskId:m.task_id,query:m.query,framework:m.framework,tokens:m.tokens,cost:m.cost,latency:m.latency,timestamp:m.timestamp?new Date(m.timestamp):new Date,finalResult:m.final_result,skill:m.skill,skills:m.skills?JSON.stringify(m.skills):null,invokedSkills:m.invokedSkills?JSON.stringify(m.invokedSkills):null,isSkillCorrect:m.is_skill_correct,isAnswerCorrect:m.is_answer_correct,answerScore:m.answer_score,skillScore:m.skill_score,judgmentReason:m.judgment_reason,failures:m.failures?JSON.stringify(m.failures):null,skillIssues:m.skill_issues?JSON.stringify(m.skill_issues):null,label:m.label,user:m.user,agentName:m.agentName,agentId:l,skillVersion:m.skill_version,model:m.model,endpoint:(0,o.normalizeEndpointUrl)(m.endpoint),toolCallCount:m.tool_call_count,llmCallCount:m.llm_call_count,inputTokens:m.input_tokens,outputTokens:m.output_tokens,toolCallErrorCount:m.tool_call_error_count,skillTriggerRate:m.skill_trigger_rate,cacheReadInputTokens:m.cache_read_input_tokens,cacheCreationInputTokens:m.cache_creation_input_tokens,maxSingleCallTokens:m.max_single_call_tokens,reasoningTokens:m.reasoning_tokens,observedAgents:X}}),e.upload_id&&e.task_id&&e.upload_id!==g)try{let t=await a.db.findExecutionById(e.upload_id);t&&t.taskId===e.task_id&&(W&&console.warn(`[Data-Audit] deleteExecution (dedup on save): upload_id=${e.upload_id} task_id=${e.task_id} recordId=${g}`),await a.db.deleteExecution(e.upload_id))}catch{}if(O)try{let e=Array.isArray(J)&&J.length>0,t=(A=x?Array.isArray(m.invokedSkills)?m.invokedSkills:[]:e?function(e,t){if(!Array.isArray(t)||0===t.length)return[];if("opencode"===e||"hermes"===e||"langfuse-langgraph"===e){let e=(0,B.buildAgentCallTree)(t);return e?w(e):[]}return function(e,t){if(!Array.isArray(t))return null;let A=(0,p.normalizeInteractions)(t);return(0,f.getAdapter)(e).extractSkills?.(A)??null}(e,t)??[]}(m.framework,J):Array.isArray(m.invokedSkills)?m.invokedSkills:[],s=m.skill??null,n=m.skill_version??null,s&&"number"==typeof n?A.map(e=>e.name===s&&null==e.version?{...e,version:n}:e):A),r=await D(t,m.user);await S(g,r,{user:m.user,primaryName:m.skill??null}),await a.prismaRaw.execution.update({where:{id:g},data:{skills:r.length?JSON.stringify(r.map(e=>e.name)):null,invokedSkills:r.length?JSON.stringify(r):null}})}catch(e){console.warn(`[Data-Service] root ExecutionSkill persist failed for ${g}:`,e)}if(("opencode"===m.framework||"hermes"===m.framework||"langfuse-langgraph"===m.framework)&&m.task_id&&Array.isArray(J))try{await Y({parentExecutionId:g,parentTaskId:m.task_id,parentFramework:m.framework,parentUser:m.user,interactions:J})}catch(e){console.warn(`[Data-Service] deriveSubagentExecutions failed for parent=${g}:`,e)}let z=m.trace_completed_at?new Date(m.trace_completed_at):null,ee=null!=z&&Number.isFinite(z.getTime()),et=!ee&&"hermes"===m.framework&&"string"==typeof m.final_result&&m.final_result.trim()?function(e){if(!Array.isArray(e))return null;let t=e.flatMap(e=>{let t=e&&"object"==typeof e?e:{},A=t.timeInfo&&"object"==typeof t.timeInfo?t.timeInfo:{},r=t.timing&&"object"==typeof t.timing?t.timing:{};return[b(A.completed),b(A.created),b(r.completed_at),b(r.started_at),b(t.completedAt),b(t.completed_at),b(t.timestamp),b(t.createdAt)]}).filter(e=>null!=e&&Number.isFinite(e)&&e>0).reduce((e,t)=>Math.max(e,t),0);return t>0?new Date(t):null}(J):null,eA=ee?z:et;!ee&&et&&(m.trace_completed_at=et);let er=null!=eA&&Number.isFinite(eA.getTime());return m.task_id&&J&&(await a.db.upsertSession(m.task_id,{taskId:m.task_id,query:m.query,label:m.label,user:m.user,model:m.model,interactions:JSON.stringify(J),...er?{endTime:eA}:{}},{query:m.query,label:m.label,user:m.user,model:m.model,interactions:JSON.stringify(J)}),er&&await a.db.updateSession(m.task_id,{endTime:eA}),"opencode"===m.framework&&!0===m.opencode_cli_completed&&await a.db.updateSession(m.task_id,{endTime:new Date})),{success:!0,record:m}}function x(e){if(null==e)return"";if("string"==typeof e){let t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return x(JSON.parse(t))}catch{}return e}return Array.isArray(e)?e.map(e=>x(e?.text??e?.content??e)).filter(Boolean).join("\n"):"object"==typeof e?x(e.text??e.content??""):String(e)}async function Y(e){let{parentExecutionId:t,parentTaskId:A,parentFramework:r,parentUser:s,interactions:n}=e;if(!Array.isArray(n)||0===n.length)return;let i=(0,B.buildAgentCallTree)(n);if(!i)return void await H(t,new Set);let o=[],l=new Set;if((0,B.walkTree)(i,e=>{if(!e||0===e.depth)return;let t="string"==typeof e.sessionId?e.sessionId.trim():"";!t||t===A||l.has(t)||(l.add(t),o.push({node:e,sessionId:t,parentNodeId:e.parentId}))}),0===o.length)return;o.sort((e,t)=>e.node.depth-t.node.depth);let c=new Map;c.set(i.id,t);let g=new Set;for(let e of o){let{node:A,sessionId:i,parentNodeId:o}=e,l=c.get(o)??t,h=`${l}__sub__${i}`;c.set(A.id,h),g.add(h);let E=new Set,Q=[],d=e=>{for(let t of e.interactionIndices||[])E.add(t);for(let t of(Array.isArray(e.systemPrompts)&&e.systemPrompts.length>0&&e.sessionId&&Q.push({sessionId:e.sessionId,entries:e.systemPrompts}),e.children||[]))d(t)};d(A);let I=[...E].sort((e,t)=>e-t).map(e=>n[e]).filter(Boolean),B=[];for(let e of Q)for(let t of e.entries)B.push({role:"system",content:t.text,subagent_session_id:e.sessionId,system_prompt_sha256:t.sha256,system_prompt_length:t.length,system_prompt_modelID:t.modelID,system_prompt_providerID:t.providerID});let C=[...B,...I],f=function(e,t){let A=(e.interactionIndices||[]).map(e=>t[e]).filter(Boolean),r=A.map(e=>x(e?.content).trim()).filter(Boolean),s=r[0]||e.agentName||e.sessionId,n=(e.events||[]).filter(e=>"llm"===e.kind),i=n.filter(e=>{let t=e.usage;return!!t&&((t.total||0)>0||(t.input||0)>0||(t.output||0)>0||(t.reasoning||0)>0)}),o=e.interactionIndices?.[0],a=n.filter(e=>e.interactionIndex!==o&&(!!e.summary?.trim()||(e.interaction?.tool_calls?.length||0)>0)).length,l=(e.events||[]).filter(e=>"tool"===e.kind||"skill"===e.kind||"task"===e.kind),c=A.map(e=>e?.model??e?.modelID).find(e=>"string"==typeof e&&e.trim())||null;return{query:s,finalResult:r.length>1?r[r.length-1]:null,model:c,tokens:e.stats.totalTokens,inputTokens:e.stats.inputTokens,outputTokens:e.stats.outputTokens,reasoningTokens:e.stats.reasoningTokens,cacheReadInputTokens:e.stats.cacheReadTokens,cacheCreationInputTokens:e.stats.cacheWriteTokens,latency:null!=e.stats.durationMs?e.stats.durationMs/1e3:null,llmCallCount:i.length||a,toolCallCount:l.length,toolCallErrorCount:l.filter(function e(t){let A=Array.isArray(t?.interaction?.tool_calls)?t.interaction.tool_calls:[],r=t?._toolCallId,s=A.find(e=>!r||e?.id===r),n=String(s?.state||"").toLowerCase();if("error"===n||"failed"===n)return!0;let i=t?.output??s?.output??s?.result;if(i&&"object"==typeof i){let e=String(i.status||i.state||"").toLowerCase();return"error"===e||"failed"===e||!!i.error}if("string"==typeof i&&i.trim().startsWith("{"))try{return e({...t,output:JSON.parse(i),interaction:void 0})}catch{}return!1}).length}}(A,n),p=((function(e,t){let A=String(t||"").trim();if(!A)return null;for(let t of e)for(let e of Array.isArray(t?.tool_calls)?t.tool_calls:[]){let t=e?.function?.name??e?.name;if("task"!==t)continue;let r=function(e){let t=e?.function?.arguments??e?.arguments;if(t&&"object"==typeof t&&!Array.isArray(t))return t;if("string"!=typeof t)return{};try{let e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}(e);if(String(r.subagent_session_id??r.session_id??r.agent_session_id??"").trim()!==A)continue;let s=x(r.description??r.task_description??r.prompt??r.subagent_type).trim();if(s)return s}return null})(n,i)||f.query).slice(0,500),y=w(A);if(O)try{y=await D(y,s)}catch(e){console.warn(`[Data-Service] sub skill version snapshot failed sub=${i}:`,e)}let m=A.startedAt?new Date(A.startedAt):new Date,b=A.endedAt?new Date(A.endedAt):null,N={taskId:i,framework:r,timestamp:m,agentName:A.agentName??null,user:s??null,query:p,finalResult:f.finalResult,model:f.model,tokens:f.tokens,inputTokens:f.inputTokens,outputTokens:f.outputTokens,reasoningTokens:f.reasoningTokens,cacheReadInputTokens:f.cacheReadInputTokens,cacheCreationInputTokens:f.cacheCreationInputTokens,latency:f.latency,llmCallCount:f.llmCallCount,toolCallCount:f.toolCallCount,toolCallErrorCount:f.toolCallErrorCount,skills:y.length?JSON.stringify(y.map(e=>e.name)):null,invokedSkills:y.length?JSON.stringify(y):null,parentExecutionId:l,rootExecutionId:t,agentSessionId:i,subagentType:A.subagentType??null,subagentName:A.agentName??null,isSubagent:!0,observedAgents:JSON.stringify((0,u.extractObservedAgentNames)(C))};try{await a.db.upsertExecution({where:{id:h},create:{id:h,...N},update:{...N}})}catch(e){console.warn(`[Data-Service] upsertExecution(sub) failed sub=${i}:`,e);continue}if(O)try{await S(h,y,{user:s??null})}catch(e){console.warn(`[Data-Service] sub ExecutionSkill persist failed sub=${i}:`,e)}try{await a.db.upsertSession(i,{taskId:i,label:A.agentName??null,user:s??null,query:p,interactions:JSON.stringify(C),...b?{endTime:b}:{}},{label:A.agentName??null,user:s??null,query:p,interactions:JSON.stringify(C),...b?{endTime:b}:{}})}catch(e){console.warn(`[Data-Service] upsertSession(sub) failed sub=${i}:`,e)}}await H(t,g)}async function H(e,t){try{for(let A of(await a.db.findExecutions({rootExecutionId:e,isSubagent:!0},{timestamp:"desc"})))if(!(!A?.id||t.has(A.id)))try{await a.db.deleteExecution(A.id)}catch(e){console.warn(`[Data-Service] sweepStaleSubagents: deleteExecution(${A.id}) failed:`,e)}}catch(t){console.warn(`[Data-Service] sweepStaleSubagents query failed root=${e}:`,t)}}process.env.READ_RECORDS_HYDRATE_BATCH_SIZE,e.s(["saveExecutionRecord",()=>v]),A()}catch(e){A(e)}},!1)];
|
|
369
369
|
|
|
370
370
|
//# sourceMappingURL=_5090183e._.js.map
|
|
@@ -49,7 +49,7 @@ ${t}`))}function L(){let e=new AbortController;return e.abort(Object.definePrope
|
|
|
49
49
|
当前配置的 Skill:**${w}**${e}
|
|
50
50
|
`,y=_?`${n}
|
|
51
51
|
[附加指令]
|
|
52
|
-
${_}`:n,v={name:s.name,version:s.version,semanticVersion:s.semanticVersion,source:s.source}}let E=(0,c.buildPermissionsForWorkspace)(g),S=String(t.sessionId||"").trim();if(!S){let e=await a.createSession({title:t.sessionTitle||`general-agent \xb7 ${r} \xb7 ${u}`,permission:E,directory:g});if(!(S=String(e?.id??"")))throw Error("failed to create opencode session")}if(t.systemAgentName){let e=await (0,f.getSystemAgentId)("opencode",t.systemAgentName),n=(0,f.findSystemAgentDefinition)("opencode",t.systemAgentName);(0,p.tagOpencodeSession)(S,{agentName:t.systemAgentName,agentId:e,skill:n?.traceSkill||t.skill||t.tagSkill,displayQuery:s,user:r})}let R={...await b(r),...t.model||{}};if(console.log("[general-agent] final model config:",{providerID:R.providerID,modelID:R.modelID,baseURL:R.baseURL,hasApiKey:!!R.apiKey,apiKeyPrefix:R.apiKey?R.apiKey.slice(0,8)+"...":"(none)"}),!R.apiKey)throw Error("model.apiKey missing: configure an active model in your user settings, or set GENERAL_AGENT_API_KEY / OPENCODE_API_KEY / DEEPSEEK_API_KEY env, or pass model.apiKey explicitly");let k={text:s,agent:t.agent||process.env.OPENCODE_AGENT||"build",model:R,modelOptions:t.modelOptions||{temperature:.7,maxTokens:2048},permission:E,directory:g,...y?{system:y}:{}},x=t.interactionPolicy||"auto-allow",A=[];if("manual"===x){if(!t.handlers?.onPermission||!t.handlers?.onQuestion)throw Error("interactionPolicy='manual' requires both handlers.onPermission and handlers.onQuestion")}else{let e="auto-allow"===x?"once":"reject";i=t=>(A.push({kind:"permission",id:t.id,reply:e,meta:{title:t.title,type:t.type,pattern:t.pattern,callID:t.callID},ts:Date.now()}),e),l=e=>(A.push({kind:"question",id:e.id,reply:null,meta:{questions:e.questions,messageID:e.messageID},ts:Date.now()}),null)}let T=t.handlers||{},D=T.onPermission?async e=>{let t=await T.onPermission(e);return A.push({kind:"permission",id:e.id,reply:t,meta:{title:e.title,type:e.type,pattern:e.pattern,callID:e.callID,fromCaller:!0},ts:Date.now()}),t}:i,O=T.onQuestion?async e=>{let t=await T.onQuestion(e);return A.push({kind:"question",id:e.id,reply:t??null,meta:{questions:e.questions,messageID:e.messageID,fromCaller:!0},ts:Date.now()}),t}:l,P={...T,onPermission:D,onQuestion:O},N={streamTimeoutMs:t.timeoutMs??3e5,idleTimeoutMs:6e4,...t.chatOptions||{}};console.log("[general-agent] calling client.chat, sessionId:",S);let C=await a.chat(S,k,P,N);if(console.log("[general-agent] client.chat done:",{textLen:C.text.length,stats:C.stats}),t.recordTraceAs)try{let{recordEvaluatorExecution:r}=await e.A(481022);await r(a,{taskId:S,agentName:t.recordTraceAs,user:t.user,query:t.query,skill:v?.name??t.skill??t.tagSkill,skillVersion:v?.version??t.skillVersion,fallbackOutput:C.text})}catch(e){console.warn(`[general-agent] recordTraceAs failed for session ${S}:`,e?.message||e)}let j={totalTokens:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}}};try{let{normalizeEvaluatorExecutionInteractions:t}=await e.A(481022),r=await a.listMessages(S),n=(0,h.deriveOpencodeExecutionFields)(t(Array.isArray(r)?r:[]));j={totalTokens:n.tokens,tokens:{input:n.input_tokens,output:n.output_tokens,reasoning:n.reasoning_tokens,cache:{read:n.cache_read_input_tokens,write:n.cache_creation_input_tokens}}}}catch(e){console.warn(`[general-agent] token usage derivation failed for session ${S}:`,e?.message||e)}return{sessionId:S,workspaceDir:g,skillResolved:null!==v,skillMeta:v,output:C.text,fullOutput:C.transcriptText||C.text,interactions:A,stats:{...C.stats,...j}}}e.s(["runGeneralAgent",()=>v]),r()}catch(e){r(e)}},!1),981706,e=>{"use strict";let t=globalThis;t.__wittyPendingMap??(t.__wittyPendingMap=new Map),e.s([])},662979,e=>{"use strict";e.i(902157),e.i(750227),e.s([])},57741,e=>e.a(async(t,r)=>{try{var n=e.i(718139),s=e.i(526005);e.i(991819),e.i(981706);var a=e.i(910541);e.i(662979),e.i(239482);var i=t([n,s,a]);[n,s,a]=i.then?(await i)():i,e.s([]),r()}catch(e){r(e)}},!1),100024,e=>{"use strict";function t(e,t,r){let n;return!(!(n=e instanceof Error?e.message:String(e||"")).trim()||n.includes("[no-evaluable-case]")||n.includes("缺少预期结果")||n.includes("expectedOutput")||n.includes("trace 没有实际输入")||n.includes("Session.interactions JSON 解析失败")||n.includes("Session 不存在或 interactions 为空")||n.includes("读取数据集失败")||n.includes("未匹配到可评测 case")||n.includes("评估数据集不存在")||n.includes("写入评测结果失败")||n.includes("结果输出提取失败")||n.includes("不允许派发子代理")||e instanceof Error&&"AbortError"===e.name||n.includes("已终止")||n.includes("用户中止")||n.includes("aborted: user terminated"))&&(Number.isFinite(t)?Math.floor(t):1)<=Math.max(0,Math.floor(r))}e.s(["shouldRetryGrayscaleEval",()=>t])},722633,e=>{"use strict";let t=/服务重启|服务中断|server[ _-]*restart|restarted|(stale)|\(stale\)/i,r="服务中断,评测未完成,请点击「重评」重试";function n(e,n){let s;if("evaluating"===e.status&&e.sessionId||"fail"===e.status&&e.sessionId&&(s=[e.output,e.failureDetail,...(e.evaluations||[]).map(e=>e.errorMessage||"")].filter(Boolean).join(" "),t.test(s))){let t=e.evaluations||[],n=t.filter(e=>"done"===e.status),s=t.some(e=>"pending"===e.status||"running"===e.status||"failed"===e.status);if("number"==typeof e.score&&n.length>0&&!s)return e.status="pass",e.failureType=void 0,e.failureDetail=void 0,e.output=void 0,e.evalRetryPending=!1,e.evaluationClaimId=void 0,e.evaluations=n,!0;let a=t.map(e=>"pending"===e.status||"running"===e.status?{...e,status:"failed",errorMessage:r}:e);return e.status="fail",e.failureType=void 0,e.failureDetail=void 0,e.output=r,e.score=void 0,e.evalRetryPending=!1,e.evaluationClaimId=void 0,e.evaluationResultId=void 0,e.evaluatorRunId=void 0,e.evaluations=a.length>0?a:[{status:"failed",errorMessage:r}],!0}return("running"===e.status||"pending"===e.status||"evaluating"===e.status)&&(e.status="fail",e.failureType="agent_error",e.failureDetail=e.failureDetail||n,e.output=e.output||"服务重启中断",!0)}e.s(["reconcileStaleGrayscaleRun",()=>n])},320427,e=>e.a(async(t,r)=>{try{let e_;var n=e.i(885298),s=e.i(309418),a=e.i(57741),i=e.i(718139),o=e.i(18193),l=e.i(100024),u=e.i(722633),c=e.i(567169),d=e.i(904239),p=t([s,a,i,c,d]);function f(e){let t=_(e.evaluators||e.evaluationBatchEvaluators,e.evaluatorId);return{...e,autoEval:!0,recordTriggerDetails:!0,evaluatorId:t[0]||"",evaluators:t}}[s,a,i,c,d]=p.then?(await p)():p;let eE="preset-agent-task-completion",eS="preset-agent-trace-quality",eR=new Set([eE,eS]),ek={[eE]:"Agent 任务完成度",[eS]:"Agent 轨迹质量"},ex=((e_=globalThis).__grayscaleServerStartTime||(e_.__grayscaleServerStartTime=Date.now()),e_.__grayscaleServerStartTime),eA=Number(process.env.GRAYSCALE_AGENT_TIMEOUT_MS)||18e4,eT=Number(process.env.GRAYSCALE_AGENT_IDLE_TIMEOUT_MS)||45e3;class eD extends Error{constructor(e="agent execution timed out"){super(e),this.name="GrayscaleAgentTimeoutError"}}class eO extends Error{failureType;constructor(e,t){super(t),this.name="GrayscaleAgentInteractionError",this.failureType=e}}function h(){return globalThis.__grayscaleRunStore||(globalThis.__grayscaleRunStore=new Map),globalThis.__grayscaleRunStore}function g(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}function m(e){return JSON.parse(JSON.stringify(e))}function y(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.source||"").trim(),r=String(e.grayscaleTaskId||"").trim(),n=String(e.caseId||"").trim(),s=String(e.side||"").trim(),a=String(e.executionTraceId||"").trim(),i=String(e.evaluationClaimId||"").trim(),o="number"==typeof e.runIndex&&Number.isFinite(e.runIndex)?Math.floor(e.runIndex):NaN,l="number"==typeof e.roundIndex&&Number.isFinite(e.roundIndex)?Math.floor(e.roundIndex):NaN,u="number"==typeof e.evaluationAttempt&&Number.isFinite(e.evaluationAttempt)?Math.floor(e.evaluationAttempt):NaN;return"grayscale-ab"===t&&r&&n&&("a"===s||"b"===s)&&a&&i&&Number.isFinite(o)&&Number.isFinite(l)&&Number.isFinite(u)?{source:"grayscale-ab",grayscaleTaskId:r,caseId:n,side:s,runIndex:o,roundIndex:l,executionTraceId:a,evaluationClaimId:i,evaluationAttempt:u}:null}function b(e){let t=g(e,null);return t&&"object"==typeof t?y(t.grayscaleBinding):null}function v(e,t){return!!e&&"grayscale-ab"===e.source&&e.grayscaleTaskId===t.taskId&&e.caseId===t.caseId&&e.side===t.side&&e.runIndex===t.run.runIndex&&e.roundIndex===t.run.roundIndex&&e.executionTraceId===String(t.run.sessionId||"").trim()&&(!0===t.allowClaimMismatch||e.evaluationClaimId===String(t.expectedClaimId||t.run.evaluationClaimId||"").trim())}function w(e,t){return(e||[]).findIndex(e=>e.runIndex===t.runIndex&&e.roundIndex===t.roundIndex&&e.caseId===t.caseId)}function I(e){return e>=80?"good":e>=50?"warn":"poor"}function _(e,t){let r=Array.isArray(e)?e:e?[e]:[],n=Array.from(new Set(r.map(e=>String(e||"").trim()).map(e=>"trace-quality-evaluator"===e?eS:e).filter(e=>eR.has(e))));if(n.length>0)return n;let s="trace-quality-evaluator"===t?eS:String(t||"").trim();return eR.has(s)?[s]:[]}function E(e){return Array.from(new Set([...Array.isArray(e.linkedDatasetIds)?e.linkedDatasetIds:[],e.selectedDatasetId||""].map(e=>String(e||"").trim()).filter(Boolean)))}async function S(e,t){let r=E(t),n=new Map;for(let t of r){let r=await (0,c.findAgentDataset)(e,t).catch(()=>null);if(r)for(let e of r.cases)n.has(e.id)||n.set(e.id,{datasetId:r.id,caseEntry:e})}return n}function R(e,t){let r=new Map((e.evaluations||[]).map(e=>[e.evaluatorId,e]));return t.filter(e=>{let t=r.get(e);return!t||"failed"===t.status||"pending"===t.status})}function k(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function x(e){let t=g(e,null);if(!t||"object"!=typeof t)return null;let r=t.resultEvaluation&&"object"==typeof t.resultEvaluation?t.resultEvaluation:null;return k(r?.score)??k(t.score)}function A(e){let t=g(e,null);if(!t||"object"!=typeof t)return"";let r=t.resultEvaluation&&"object"==typeof t.resultEvaluation?t.resultEvaluation:null;for(let e of[t.evaluatorSessionId,r?.evaluatorSessionId])if("string"==typeof e&&e.trim())return e.trim();return""}function T(e){let t=g(e,null);if(!t||"object"!=typeof t)return"";let r=t.evaluatorSessionId;return"string"==typeof r&&r.trim()?r.trim():""}function D(e,t){let r=_(t&&t.length>0?t:C(e.rawAnalysisJson)),n=x(e.rawAnalysisJson),s=N(e.rawAnalysisJson),a=A(e.rawAnalysisJson),i="number"==typeof e.trajectoryScore?e.trajectoryScore:null,o=T(e.rawAnalysisJson);return r.map(t=>{if("pending"===e.status||"running"===e.status)return{evaluatorId:t,evaluatorName:ek[t]||t,status:"running"===e.status?"running":"pending",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id};if(t===eE){let r="number"==typeof n?Math.round(100*n):void 0,i="failed"===e.status||"number"!=typeof r;return{evaluatorId:t,evaluatorName:ek[t],status:i?"failed":"done",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id,evaluationTraceId:a||void 0,score:r,errorMessage:i?s||e.errorMessage||"任务完成度评测失败":void 0}}let r="number"==typeof i?Math.round(100*i):void 0,l="failed"===e.status||"number"!=typeof r;return{evaluatorId:t,evaluatorName:ek[t]||t,status:l?"failed":"done",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id,evaluationTraceId:o||void 0,score:r,errorMessage:l?e.errorMessage||"轨迹质量评测失败":void 0}})}function O(e,t){if(!t)return!0;let r=e.updatedAt instanceof Date?e.updatedAt.getTime():0,n=t.updatedAt instanceof Date?t.updatedAt.getTime():0;return r>=n}function P(e,t){let r=new Map;for(let t of e||[])eR.has(t.evaluatorId)&&r.set(t.evaluatorId,t);for(let e of t)r.set(e.evaluatorId,e);return Array.from(r.values())}function N(e){let t=g(e,null),r=t&&"object"==typeof t?t.resultEvaluationError:null;return"string"==typeof r?r.trim():""}function C(e){let t=g(e,null),r=t&&"object"==typeof t?t.selectedEvaluators:null;return Array.isArray(r)?r.map(e=>String(e||"").trim()).filter(Boolean):[]}function j(e,t=240){let r="string"==typeof e?e:JSON.stringify(e??"");return r?r.length>t?`${r.slice(0,t)}...`:r:""}async function $(e){let t=e.query.trim(),r=e.output.trim();if(!e.sessionId||!t&&!r)return;let n=new Date().toISOString();await (0,d.saveExecutionRecord)({task_id:e.sessionId,upload_id:e.sessionId,query:t||void 0,framework:"opencode",user:e.user,agent:e.agentName,agentName:e.agentName,final_result:r||void 0,skill:e.skill,skill_version:e.skillVersion??void 0,interactions:[...t?[{role:"user",content:t,timestamp:n}]:[],...r?[{role:"assistant",content:r,timestamp:n,agent:e.agentName}]:[]],skip_evaluation:!0,skip_internal_judgment:!0,failures:[],skill_issues:[],force_query_update:!0,opencode_cli_completed:!0})}function M(e){return"number"!=typeof e||!Number.isFinite(e)||e<=0?null:e>1e3?e/1e3:e}function L(e){if("number"==typeof e.tokens&&Number.isFinite(e.tokens)&&e.tokens>0)return Math.round(e.tokens);let t=[e.inputTokens,e.outputTokens,e.cacheReadInputTokens,e.cacheCreationInputTokens,e.reasoningTokens].reduce((e,t)=>e+("number"==typeof t&&Number.isFinite(t)?t:0),0);return t>0?Math.round(t):null}async function U(e,t){let r=await s.prisma.grayscaleTask.findFirst({where:{id:e,user:t}});if(!r)return null;let n=f(g(r.configJson,{}));return!n.skillId&&r.skillId&&(n.skillId=r.skillId),!n.versionBId&&r.skillVersionId&&(n.versionBId=r.skillVersionId),{...r,configJson:n,caseStatesJson:g(r.caseStatesJson,{}),rawCaseStatesJson:r.caseStatesJson}}async function q(e,t,r,n,a){return(await s.prisma.grayscaleTask.updateMany({where:{id:e,user:t,...null!=a?{caseStatesJson:a}:{}},data:{configJson:JSON.stringify(f(r)),caseStatesJson:JSON.stringify(n)}})).count>0}function B(e,t){let{rawCaseStatesJson:r,...s}=e;return n.NextResponse.json({...s,activeRun:t})}async function J(e){X(e.states,e.caseId);let t=e.states[e.caseId][e.side],r=w(t.runs,e.nextRun);r>=0&&(t.runs[r]=m(e.nextRun)),e.sidePatch&&Object.assign(t,e.sidePatch),e.states[e.caseId][e.side]=Y(t,t.runCount||t.runs?.length||0);for(let t=0;t<5;t++){let r=await U(e.taskId,e.user);if(!r)break;X(r.caseStatesJson,e.caseId);let n=r.caseStatesJson[e.caseId][e.side],s=w(n.runs,e.nextRun);if(s<0)break;let a=n.runs[s];if(e.expectedEvaluationClaimId&&a.evaluationClaimId&&a.evaluationClaimId!==e.expectedEvaluationClaimId){e.states[e.caseId][e.side]=m(r.caseStatesJson[e.caseId][e.side]);break}if(n.runs[s]=m(e.nextRun),e.sidePatch&&Object.assign(n,e.sidePatch),r.caseStatesJson[e.caseId][e.side]=Y(n,n.runCount||n.runs?.length||0),e.touchLatestResultAt&&F(r.configJson),await q(e.taskId,e.user,r.configJson,r.caseStatesJson,r.rawCaseStatesJson))return e.states[e.caseId][e.side]=m(r.caseStatesJson[e.caseId][e.side]),!0;await new Promise(e=>setTimeout(e,15+20*t))}return!1}function F(e){e.latestResultAt=new Date().toISOString()}function G(e,t=new Date().toISOString()){e.completedAt=t}function H(e,t,r){let n=P(e.evaluations,D(t)),s=function(e){let t=(e||[]).filter(e=>"done"===e.status&&"number"==typeof e.score&&Number.isFinite(e.score)).map(e=>e.score);if(0!==t.length)return Math.round(t.reduce((e,t)=>e+t,0)/t.length)}(n),a=n.some(e=>"failed"===e.status),i=n.some(e=>"pending"===e.status||"running"===e.status);e.evaluatorRunId=t.evaluatorRunId||r||e.evaluatorRunId,e.evaluationResultId=t.id||e.evaluationResultId,e.evaluationTraceId=A(t.rawAnalysisJson)||T(t.rawAnalysisJson)||e.evaluationTraceId,e.evaluations=n,e.status=i?"evaluating":a?"fail":"number"==typeof s?"pass":"fail","number"==typeof s?(e.score=s,e.tier=I(s)):(delete e.score,delete e.tier),"fail"===e.status&&(e.output=t.errorMessage||n.find(e=>"failed"===e.status)?.errorMessage||e.output||"评测失败"),("done"===t.status||"failed"===t.status)&&G(e,t.updatedAt instanceof Date?t.updatedAt.toISOString():void 0)}function W(e){if(!e?.skillId||!e.skillName||!e.skillVersionId||"number"!=typeof e.skillVersion)throw Error("task is not bound to a skill version");let t=String(e.configJson.skillId||"").trim();if(t&&t!==e.skillId)throw Error("task skill binding cannot be changed");let r=String(e.configJson.versionBId||"").trim();if(r&&r!==e.skillVersionId)throw Error("task skill version binding cannot be changed");e.configJson.skillId=e.skillId,e.configJson.versionBId=e.skillVersionId}async function V(e,t){if(!e||!t||"__NONE__"===t)return null;let r=await s.prisma.skillVersion.findFirst({where:{id:t,skillId:e},include:{Skill:!0}});return r?.Skill?.name?{skillName:String(r.Skill.name),version:Number(r.version)}:null}function X(e,t){e[t]||(e[t]={a:{status:"pending",runs:[]},b:{status:"pending",runs:[]}}),e[t].a.runs||(e[t].a.runs=[]),e[t].b.runs||(e[t].b.runs=[])}function z(e){return Object.values(e).some(e=>["a","b"].some(t=>"running"===e[t].status||"evaluating"===e[t].status||(e[t].runs||[]).some(e=>"running"===e.status||"evaluating"===e.status)))}function Y(e,t){let r=e.runs||[],n=Math.max(0,Number(t)||0),s=n>0&&r.length>n?r.slice(-n):r,a=n||s.length,i=s.filter(e=>"executed"===e.status||"pass"===e.status),o=s.filter(e=>"executed"===e.status||"evaluating"===e.status||"pass"===e.status||"fail"===e.status&&!!e.sessionId),l=s.filter(e=>"fail"===e.status),u=s.some(e=>"evaluating"===e.status),c=s.some(e=>"running"===e.status||"pending"===e.status),d=s.filter(e=>"number"==typeof e.score),p=o.map(e=>"string"==typeof e.timeCost?Number.parseFloat(e.timeCost):0).filter(e=>Number.isFinite(e)&&e>0),f=p.length>0?p.reduce((e,t)=>e+t,0)/p.length:0,h=o.filter(e=>"number"==typeof e.tokenUsage),g=h.length>0?Math.round(h.reduce((e,t)=>e+(t.tokenUsage||0),0)/h.length):0,m=d.length>0?Math.round(d.reduce((e,t)=>e+(t.score||0),0)/d.length):void 0,y=o.map(e=>e.sessionId).filter(Boolean),b=o.reduce((e,t)=>e+(t.toolCallCount||0),0),v=Array.from(new Set(o.flatMap(e=>e.toolCalls||[]))).slice(0,8),w="pending";return d.length>=a&&a>0?w="pass":l.length>=a&&a>0?w="fail":i.length+l.length>=a&&a>0?w="executed":u?w="evaluating":(c||i.length>0)&&(w="running"),{...e,status:w,runs:r,runCount:t,timeCost:p.length>0?`${f.toFixed(1)}s`:void 0,tokenUsage:g||void 0,output:[...o].reverse()[0]?.output||e.output,sessionId:y[0]||e.sessionId,traceIds:y,score:m,tier:null==m?void 0:I(m),skillTriggered:o.some(e=>e.skillTriggered),toolCallCount:b,toolCalls:v}}async function K(e){let t=Array.from(new Set(Object.values(e).flatMap(e=>["a","b"].flatMap(t=>e[t].runs||[])).map(e=>e.sessionId).filter(e=>!!e)));if(0===t.length)return!1;let r=await s.prisma.execution.findMany({where:{taskId:{in:t}},select:{taskId:!0,latency:!0,tokens:!0,inputTokens:!0,outputTokens:!0,cacheReadInputTokens:!0,cacheCreationInputTokens:!0,reasoningTokens:!0}});if(0===r.length)return!1;let n=new Map;for(let e of r){if(!e.taskId)continue;let t=M(e.latency),r=L(e);n.set(e.taskId,{timeCost:null==t?void 0:`${t.toFixed(1)}s`,tokenUsage:null==r?void 0:r})}let a=!1;for(let t of Object.values(e))for(let e of["a","b"]){let r=!1;for(let s of t[e].runs||[]){if(!s.sessionId)continue;let e=n.get(s.sessionId);e&&(e.timeCost&&s.timeCost!==e.timeCost&&(s.timeCost=e.timeCost,r=!0),"number"==typeof e.tokenUsage&&s.tokenUsage!==e.tokenUsage&&(s.tokenUsage=e.tokenUsage,r=!0))}r&&(t[e]=Y(t[e],t[e].runCount||t[e].runs?.length||0),a=!0)}return a}function Q(e){return String(e||"").trim()}function Z(e){if(e instanceof Date)return e.getTime();if("number"==typeof e)return e;if("string"==typeof e){let t=Number(e);if(Number.isFinite(t))return t;let r=Date.parse(e);return Number.isFinite(r)?r:0}return 0}async function ee(e){let t=await S(e.user,e.config);if(0===t.size)return!1;let r=[],n=await V(e.config.skillId,e.config.versionAId),a=await V(e.config.skillId,e.config.versionBId),i=new Set(Object.values(e.states).flatMap(e=>["a","b"].flatMap(t=>e[t].runs||[])).map(e=>e.sessionId).filter(e=>!!e));for(let[s,i]of Object.entries(e.states)){let e=Q(t.get(s)?.caseEntry.input);if(e)for(let t of["a","b"]){let o="a"===t?n:a;for(let n of i[t].runs||[])!n.sessionId&&("running"===n.status||function(e){if("fail"!==e.status||e.sessionId)return!1;let t=`${e.failureDetail||""}
|
|
52
|
+
${_}`:n,v={name:s.name,version:s.version,semanticVersion:s.semanticVersion,source:s.source}}let E=(0,c.buildPermissionsForWorkspace)(g),S=String(t.sessionId||"").trim();if(!S){let e=await a.createSession({title:t.sessionTitle||`general-agent \xb7 ${r} \xb7 ${u}`,permission:E,directory:g});if(!(S=String(e?.id??"")))throw Error("failed to create opencode session")}let R=t.systemAgentName?(0,f.findSystemAgentDefinition)("opencode",t.systemAgentName):void 0,k=v?.name??t.skill??t.tagSkill??R?.traceSkill;if(t.systemAgentName){let e=await (0,f.getSystemAgentId)("opencode",t.systemAgentName);(0,p.tagOpencodeSession)(S,{agentName:t.systemAgentName,agentId:e,skill:k,displayQuery:s,user:r})}let x={...await b(r),...t.model||{}};if(console.log("[general-agent] final model config:",{providerID:x.providerID,modelID:x.modelID,baseURL:x.baseURL,hasApiKey:!!x.apiKey,apiKeyPrefix:x.apiKey?x.apiKey.slice(0,8)+"...":"(none)"}),!x.apiKey)throw Error("model.apiKey missing: configure an active model in your user settings, or set GENERAL_AGENT_API_KEY / OPENCODE_API_KEY / DEEPSEEK_API_KEY env, or pass model.apiKey explicitly");let A={text:s,agent:t.agent||process.env.OPENCODE_AGENT||"build",model:x,modelOptions:t.modelOptions||{temperature:.7,maxTokens:2048},permission:E,directory:g,...y?{system:y}:{}},T=t.interactionPolicy||"auto-allow",D=[];if("manual"===T){if(!t.handlers?.onPermission||!t.handlers?.onQuestion)throw Error("interactionPolicy='manual' requires both handlers.onPermission and handlers.onQuestion")}else{let e="auto-allow"===T?"once":"reject";i=t=>(D.push({kind:"permission",id:t.id,reply:e,meta:{title:t.title,type:t.type,pattern:t.pattern,callID:t.callID},ts:Date.now()}),e),l=e=>(D.push({kind:"question",id:e.id,reply:null,meta:{questions:e.questions,messageID:e.messageID},ts:Date.now()}),null)}let O=t.handlers||{},P=O.onPermission?async e=>{let t=await O.onPermission(e);return D.push({kind:"permission",id:e.id,reply:t,meta:{title:e.title,type:e.type,pattern:e.pattern,callID:e.callID,fromCaller:!0},ts:Date.now()}),t}:i,N=O.onQuestion?async e=>{let t=await O.onQuestion(e);return D.push({kind:"question",id:e.id,reply:t??null,meta:{questions:e.questions,messageID:e.messageID,fromCaller:!0},ts:Date.now()}),t}:l,C={...O,onPermission:P,onQuestion:N},j={streamTimeoutMs:t.timeoutMs??3e5,idleTimeoutMs:6e4,...t.chatOptions||{}};console.log("[general-agent] calling client.chat, sessionId:",S);let $=await a.chat(S,A,C,j);if(console.log("[general-agent] client.chat done:",{textLen:$.text.length,stats:$.stats}),t.recordTraceAs)try{let{recordEvaluatorExecution:r}=await e.A(481022);await r(a,{taskId:S,agentName:t.recordTraceAs,user:t.user,query:t.query,skill:k,skillVersion:v?.version??t.skillVersion,fallbackOutput:$.text})}catch(e){console.warn(`[general-agent] recordTraceAs failed for session ${S}:`,e?.message||e)}let M={totalTokens:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}}};try{let{normalizeEvaluatorExecutionInteractions:t}=await e.A(481022),r=await a.listMessages(S),n=(0,h.deriveOpencodeExecutionFields)(t(Array.isArray(r)?r:[]));M={totalTokens:n.tokens,tokens:{input:n.input_tokens,output:n.output_tokens,reasoning:n.reasoning_tokens,cache:{read:n.cache_read_input_tokens,write:n.cache_creation_input_tokens}}}}catch(e){console.warn(`[general-agent] token usage derivation failed for session ${S}:`,e?.message||e)}return{sessionId:S,workspaceDir:g,skillResolved:null!==v,skillMeta:v,output:$.text,fullOutput:$.transcriptText||$.text,interactions:D,stats:{...$.stats,...M}}}e.s(["runGeneralAgent",()=>v]),r()}catch(e){r(e)}},!1),981706,e=>{"use strict";let t=globalThis;t.__wittyPendingMap??(t.__wittyPendingMap=new Map),e.s([])},662979,e=>{"use strict";e.i(902157),e.i(750227),e.s([])},57741,e=>e.a(async(t,r)=>{try{var n=e.i(718139),s=e.i(526005);e.i(991819),e.i(981706);var a=e.i(910541);e.i(662979),e.i(239482);var i=t([n,s,a]);[n,s,a]=i.then?(await i)():i,e.s([]),r()}catch(e){r(e)}},!1),100024,e=>{"use strict";function t(e,t,r){let n;return!(!(n=e instanceof Error?e.message:String(e||"")).trim()||n.includes("[no-evaluable-case]")||n.includes("缺少预期结果")||n.includes("expectedOutput")||n.includes("trace 没有实际输入")||n.includes("Session.interactions JSON 解析失败")||n.includes("Session 不存在或 interactions 为空")||n.includes("读取数据集失败")||n.includes("未匹配到可评测 case")||n.includes("评估数据集不存在")||n.includes("写入评测结果失败")||n.includes("结果输出提取失败")||n.includes("不允许派发子代理")||e instanceof Error&&"AbortError"===e.name||n.includes("已终止")||n.includes("用户中止")||n.includes("aborted: user terminated"))&&(Number.isFinite(t)?Math.floor(t):1)<=Math.max(0,Math.floor(r))}e.s(["shouldRetryGrayscaleEval",()=>t])},722633,e=>{"use strict";let t=/服务重启|服务中断|server[ _-]*restart|restarted|(stale)|\(stale\)/i,r="服务中断,评测未完成,请点击「重评」重试";function n(e,n){let s;if("evaluating"===e.status&&e.sessionId||"fail"===e.status&&e.sessionId&&(s=[e.output,e.failureDetail,...(e.evaluations||[]).map(e=>e.errorMessage||"")].filter(Boolean).join(" "),t.test(s))){let t=e.evaluations||[],n=t.filter(e=>"done"===e.status),s=t.some(e=>"pending"===e.status||"running"===e.status||"failed"===e.status);if("number"==typeof e.score&&n.length>0&&!s)return e.status="pass",e.failureType=void 0,e.failureDetail=void 0,e.output=void 0,e.evalRetryPending=!1,e.evaluationClaimId=void 0,e.evaluations=n,!0;let a=t.map(e=>"pending"===e.status||"running"===e.status?{...e,status:"failed",errorMessage:r}:e);return e.status="fail",e.failureType=void 0,e.failureDetail=void 0,e.output=r,e.score=void 0,e.evalRetryPending=!1,e.evaluationClaimId=void 0,e.evaluationResultId=void 0,e.evaluatorRunId=void 0,e.evaluations=a.length>0?a:[{status:"failed",errorMessage:r}],!0}return("running"===e.status||"pending"===e.status||"evaluating"===e.status)&&(e.status="fail",e.failureType="agent_error",e.failureDetail=e.failureDetail||n,e.output=e.output||"服务重启中断",!0)}e.s(["reconcileStaleGrayscaleRun",()=>n])},320427,e=>e.a(async(t,r)=>{try{let e_;var n=e.i(885298),s=e.i(309418),a=e.i(57741),i=e.i(718139),o=e.i(18193),l=e.i(100024),u=e.i(722633),c=e.i(567169),d=e.i(904239),p=t([s,a,i,c,d]);function f(e){let t=_(e.evaluators||e.evaluationBatchEvaluators,e.evaluatorId);return{...e,autoEval:!0,recordTriggerDetails:!0,evaluatorId:t[0]||"",evaluators:t}}[s,a,i,c,d]=p.then?(await p)():p;let eE="preset-agent-task-completion",eS="preset-agent-trace-quality",eR=new Set([eE,eS]),ek={[eE]:"Agent 任务完成度",[eS]:"Agent 轨迹质量"},ex=((e_=globalThis).__grayscaleServerStartTime||(e_.__grayscaleServerStartTime=Date.now()),e_.__grayscaleServerStartTime),eA=Number(process.env.GRAYSCALE_AGENT_TIMEOUT_MS)||18e4,eT=Number(process.env.GRAYSCALE_AGENT_IDLE_TIMEOUT_MS)||45e3;class eD extends Error{constructor(e="agent execution timed out"){super(e),this.name="GrayscaleAgentTimeoutError"}}class eO extends Error{failureType;constructor(e,t){super(t),this.name="GrayscaleAgentInteractionError",this.failureType=e}}function h(){return globalThis.__grayscaleRunStore||(globalThis.__grayscaleRunStore=new Map),globalThis.__grayscaleRunStore}function g(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}function m(e){return JSON.parse(JSON.stringify(e))}function y(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.source||"").trim(),r=String(e.grayscaleTaskId||"").trim(),n=String(e.caseId||"").trim(),s=String(e.side||"").trim(),a=String(e.executionTraceId||"").trim(),i=String(e.evaluationClaimId||"").trim(),o="number"==typeof e.runIndex&&Number.isFinite(e.runIndex)?Math.floor(e.runIndex):NaN,l="number"==typeof e.roundIndex&&Number.isFinite(e.roundIndex)?Math.floor(e.roundIndex):NaN,u="number"==typeof e.evaluationAttempt&&Number.isFinite(e.evaluationAttempt)?Math.floor(e.evaluationAttempt):NaN;return"grayscale-ab"===t&&r&&n&&("a"===s||"b"===s)&&a&&i&&Number.isFinite(o)&&Number.isFinite(l)&&Number.isFinite(u)?{source:"grayscale-ab",grayscaleTaskId:r,caseId:n,side:s,runIndex:o,roundIndex:l,executionTraceId:a,evaluationClaimId:i,evaluationAttempt:u}:null}function b(e){let t=g(e,null);return t&&"object"==typeof t?y(t.grayscaleBinding):null}function v(e,t){return!!e&&"grayscale-ab"===e.source&&e.grayscaleTaskId===t.taskId&&e.caseId===t.caseId&&e.side===t.side&&e.runIndex===t.run.runIndex&&e.roundIndex===t.run.roundIndex&&e.executionTraceId===String(t.run.sessionId||"").trim()&&(!0===t.allowClaimMismatch||e.evaluationClaimId===String(t.expectedClaimId||t.run.evaluationClaimId||"").trim())}function w(e,t){return(e||[]).findIndex(e=>e.runIndex===t.runIndex&&e.roundIndex===t.roundIndex&&e.caseId===t.caseId)}function I(e){return e>=80?"good":e>=50?"warn":"poor"}function _(e,t){let r=Array.isArray(e)?e:e?[e]:[],n=Array.from(new Set(r.map(e=>String(e||"").trim()).map(e=>"trace-quality-evaluator"===e?eS:e).filter(e=>eR.has(e))));if(n.length>0)return n;let s="trace-quality-evaluator"===t?eS:String(t||"").trim();return eR.has(s)?[s]:[]}function E(e){return Array.from(new Set([...Array.isArray(e.linkedDatasetIds)?e.linkedDatasetIds:[],e.selectedDatasetId||""].map(e=>String(e||"").trim()).filter(Boolean)))}async function S(e,t){let r=E(t),n=new Map;for(let t of r){let r=await (0,c.findAgentDataset)(e,t).catch(()=>null);if(r)for(let e of r.cases)n.has(e.id)||n.set(e.id,{datasetId:r.id,caseEntry:e})}return n}function R(e,t){let r=new Map((e.evaluations||[]).map(e=>[e.evaluatorId,e]));return t.filter(e=>{let t=r.get(e);return!t||"failed"===t.status||"pending"===t.status})}function k(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function x(e){let t=g(e,null);if(!t||"object"!=typeof t)return null;let r=t.resultEvaluation&&"object"==typeof t.resultEvaluation?t.resultEvaluation:null;return k(r?.score)??k(t.score)}function A(e){let t=g(e,null);if(!t||"object"!=typeof t)return"";let r=t.resultEvaluation&&"object"==typeof t.resultEvaluation?t.resultEvaluation:null;for(let e of[t.evaluatorSessionId,r?.evaluatorSessionId])if("string"==typeof e&&e.trim())return e.trim();return""}function T(e){let t=g(e,null);if(!t||"object"!=typeof t)return"";let r=t.evaluatorSessionId;return"string"==typeof r&&r.trim()?r.trim():""}function D(e,t){let r=_(t&&t.length>0?t:C(e.rawAnalysisJson)),n=x(e.rawAnalysisJson),s=N(e.rawAnalysisJson),a=A(e.rawAnalysisJson),i="number"==typeof e.trajectoryScore?e.trajectoryScore:null,o=T(e.rawAnalysisJson);return r.map(t=>{if("pending"===e.status||"running"===e.status)return{evaluatorId:t,evaluatorName:ek[t]||t,status:"running"===e.status?"running":"pending",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id};if(t===eE){let r="number"==typeof n?Math.round(100*n):void 0,i="failed"===e.status||"number"!=typeof r;return{evaluatorId:t,evaluatorName:ek[t],status:i?"failed":"done",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id,evaluationTraceId:a||void 0,score:r,errorMessage:i?s||e.errorMessage||"任务完成度评测失败":void 0}}let r="number"==typeof i?Math.round(100*i):void 0,l="failed"===e.status||"number"!=typeof r;return{evaluatorId:t,evaluatorName:ek[t]||t,status:l?"failed":"done",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.id,evaluationTraceId:o||void 0,score:r,errorMessage:l?e.errorMessage||"轨迹质量评测失败":void 0}})}function O(e,t){if(!t)return!0;let r=e.updatedAt instanceof Date?e.updatedAt.getTime():0,n=t.updatedAt instanceof Date?t.updatedAt.getTime():0;return r>=n}function P(e,t){let r=new Map;for(let t of e||[])eR.has(t.evaluatorId)&&r.set(t.evaluatorId,t);for(let e of t)r.set(e.evaluatorId,e);return Array.from(r.values())}function N(e){let t=g(e,null),r=t&&"object"==typeof t?t.resultEvaluationError:null;return"string"==typeof r?r.trim():""}function C(e){let t=g(e,null),r=t&&"object"==typeof t?t.selectedEvaluators:null;return Array.isArray(r)?r.map(e=>String(e||"").trim()).filter(Boolean):[]}function j(e,t=240){let r="string"==typeof e?e:JSON.stringify(e??"");return r?r.length>t?`${r.slice(0,t)}...`:r:""}async function $(e){let t=e.query.trim(),r=e.output.trim();if(!e.sessionId||!t&&!r)return;let n=new Date().toISOString();await (0,d.saveExecutionRecord)({task_id:e.sessionId,upload_id:e.sessionId,query:t||void 0,framework:"opencode",user:e.user,agent:e.agentName,agentName:e.agentName,final_result:r||void 0,skill:e.skill,skill_version:e.skillVersion??void 0,interactions:[...t?[{role:"user",content:t,timestamp:n}]:[],...r?[{role:"assistant",content:r,timestamp:n,agent:e.agentName}]:[]],skip_evaluation:!0,skip_internal_judgment:!0,failures:[],skill_issues:[],force_query_update:!0,opencode_cli_completed:!0})}function M(e){return"number"!=typeof e||!Number.isFinite(e)||e<=0?null:e>1e3?e/1e3:e}function L(e){if("number"==typeof e.tokens&&Number.isFinite(e.tokens)&&e.tokens>0)return Math.round(e.tokens);let t=[e.inputTokens,e.outputTokens,e.cacheReadInputTokens,e.cacheCreationInputTokens,e.reasoningTokens].reduce((e,t)=>e+("number"==typeof t&&Number.isFinite(t)?t:0),0);return t>0?Math.round(t):null}async function U(e,t){let r=await s.prisma.grayscaleTask.findFirst({where:{id:e,user:t}});if(!r)return null;let n=f(g(r.configJson,{}));return!n.skillId&&r.skillId&&(n.skillId=r.skillId),!n.versionBId&&r.skillVersionId&&(n.versionBId=r.skillVersionId),{...r,configJson:n,caseStatesJson:g(r.caseStatesJson,{}),rawCaseStatesJson:r.caseStatesJson}}async function q(e,t,r,n,a){return(await s.prisma.grayscaleTask.updateMany({where:{id:e,user:t,...null!=a?{caseStatesJson:a}:{}},data:{configJson:JSON.stringify(f(r)),caseStatesJson:JSON.stringify(n)}})).count>0}function B(e,t){let{rawCaseStatesJson:r,...s}=e;return n.NextResponse.json({...s,activeRun:t})}async function J(e){X(e.states,e.caseId);let t=e.states[e.caseId][e.side],r=w(t.runs,e.nextRun);r>=0&&(t.runs[r]=m(e.nextRun)),e.sidePatch&&Object.assign(t,e.sidePatch),e.states[e.caseId][e.side]=Y(t,t.runCount||t.runs?.length||0);for(let t=0;t<5;t++){let r=await U(e.taskId,e.user);if(!r)break;X(r.caseStatesJson,e.caseId);let n=r.caseStatesJson[e.caseId][e.side],s=w(n.runs,e.nextRun);if(s<0)break;let a=n.runs[s];if(e.expectedEvaluationClaimId&&a.evaluationClaimId&&a.evaluationClaimId!==e.expectedEvaluationClaimId){e.states[e.caseId][e.side]=m(r.caseStatesJson[e.caseId][e.side]);break}if(n.runs[s]=m(e.nextRun),e.sidePatch&&Object.assign(n,e.sidePatch),r.caseStatesJson[e.caseId][e.side]=Y(n,n.runCount||n.runs?.length||0),e.touchLatestResultAt&&F(r.configJson),await q(e.taskId,e.user,r.configJson,r.caseStatesJson,r.rawCaseStatesJson))return e.states[e.caseId][e.side]=m(r.caseStatesJson[e.caseId][e.side]),!0;await new Promise(e=>setTimeout(e,15+20*t))}return!1}function F(e){e.latestResultAt=new Date().toISOString()}function G(e,t=new Date().toISOString()){e.completedAt=t}function H(e,t,r){let n=P(e.evaluations,D(t)),s=function(e){let t=(e||[]).filter(e=>"done"===e.status&&"number"==typeof e.score&&Number.isFinite(e.score)).map(e=>e.score);if(0!==t.length)return Math.round(t.reduce((e,t)=>e+t,0)/t.length)}(n),a=n.some(e=>"failed"===e.status),i=n.some(e=>"pending"===e.status||"running"===e.status);e.evaluatorRunId=t.evaluatorRunId||r||e.evaluatorRunId,e.evaluationResultId=t.id||e.evaluationResultId,e.evaluationTraceId=A(t.rawAnalysisJson)||T(t.rawAnalysisJson)||e.evaluationTraceId,e.evaluations=n,e.status=i?"evaluating":a?"fail":"number"==typeof s?"pass":"fail","number"==typeof s?(e.score=s,e.tier=I(s)):(delete e.score,delete e.tier),"fail"===e.status&&(e.output=t.errorMessage||n.find(e=>"failed"===e.status)?.errorMessage||e.output||"评测失败"),("done"===t.status||"failed"===t.status)&&G(e,t.updatedAt instanceof Date?t.updatedAt.toISOString():void 0)}function W(e){if(!e?.skillId||!e.skillName||!e.skillVersionId||"number"!=typeof e.skillVersion)throw Error("task is not bound to a skill version");let t=String(e.configJson.skillId||"").trim();if(t&&t!==e.skillId)throw Error("task skill binding cannot be changed");let r=String(e.configJson.versionBId||"").trim();if(r&&r!==e.skillVersionId)throw Error("task skill version binding cannot be changed");e.configJson.skillId=e.skillId,e.configJson.versionBId=e.skillVersionId}async function V(e,t){if(!e||!t||"__NONE__"===t)return null;let r=await s.prisma.skillVersion.findFirst({where:{id:t,skillId:e},include:{Skill:!0}});return r?.Skill?.name?{skillName:String(r.Skill.name),version:Number(r.version)}:null}function X(e,t){e[t]||(e[t]={a:{status:"pending",runs:[]},b:{status:"pending",runs:[]}}),e[t].a.runs||(e[t].a.runs=[]),e[t].b.runs||(e[t].b.runs=[])}function z(e){return Object.values(e).some(e=>["a","b"].some(t=>"running"===e[t].status||"evaluating"===e[t].status||(e[t].runs||[]).some(e=>"running"===e.status||"evaluating"===e.status)))}function Y(e,t){let r=e.runs||[],n=Math.max(0,Number(t)||0),s=n>0&&r.length>n?r.slice(-n):r,a=n||s.length,i=s.filter(e=>"executed"===e.status||"pass"===e.status),o=s.filter(e=>"executed"===e.status||"evaluating"===e.status||"pass"===e.status||"fail"===e.status&&!!e.sessionId),l=s.filter(e=>"fail"===e.status),u=s.some(e=>"evaluating"===e.status),c=s.some(e=>"running"===e.status||"pending"===e.status),d=s.filter(e=>"number"==typeof e.score),p=o.map(e=>"string"==typeof e.timeCost?Number.parseFloat(e.timeCost):0).filter(e=>Number.isFinite(e)&&e>0),f=p.length>0?p.reduce((e,t)=>e+t,0)/p.length:0,h=o.filter(e=>"number"==typeof e.tokenUsage),g=h.length>0?Math.round(h.reduce((e,t)=>e+(t.tokenUsage||0),0)/h.length):0,m=d.length>0?Math.round(d.reduce((e,t)=>e+(t.score||0),0)/d.length):void 0,y=o.map(e=>e.sessionId).filter(Boolean),b=o.reduce((e,t)=>e+(t.toolCallCount||0),0),v=Array.from(new Set(o.flatMap(e=>e.toolCalls||[]))).slice(0,8),w="pending";return d.length>=a&&a>0?w="pass":l.length>=a&&a>0?w="fail":i.length+l.length>=a&&a>0?w="executed":u?w="evaluating":(c||i.length>0)&&(w="running"),{...e,status:w,runs:r,runCount:t,timeCost:p.length>0?`${f.toFixed(1)}s`:void 0,tokenUsage:g||void 0,output:[...o].reverse()[0]?.output||e.output,sessionId:y[0]||e.sessionId,traceIds:y,score:m,tier:null==m?void 0:I(m),skillTriggered:o.some(e=>e.skillTriggered),toolCallCount:b,toolCalls:v}}async function K(e){let t=Array.from(new Set(Object.values(e).flatMap(e=>["a","b"].flatMap(t=>e[t].runs||[])).map(e=>e.sessionId).filter(e=>!!e)));if(0===t.length)return!1;let r=await s.prisma.execution.findMany({where:{taskId:{in:t}},select:{taskId:!0,latency:!0,tokens:!0,inputTokens:!0,outputTokens:!0,cacheReadInputTokens:!0,cacheCreationInputTokens:!0,reasoningTokens:!0}});if(0===r.length)return!1;let n=new Map;for(let e of r){if(!e.taskId)continue;let t=M(e.latency),r=L(e);n.set(e.taskId,{timeCost:null==t?void 0:`${t.toFixed(1)}s`,tokenUsage:null==r?void 0:r})}let a=!1;for(let t of Object.values(e))for(let e of["a","b"]){let r=!1;for(let s of t[e].runs||[]){if(!s.sessionId)continue;let e=n.get(s.sessionId);e&&(e.timeCost&&s.timeCost!==e.timeCost&&(s.timeCost=e.timeCost,r=!0),"number"==typeof e.tokenUsage&&s.tokenUsage!==e.tokenUsage&&(s.tokenUsage=e.tokenUsage,r=!0))}r&&(t[e]=Y(t[e],t[e].runCount||t[e].runs?.length||0),a=!0)}return a}function Q(e){return String(e||"").trim()}function Z(e){if(e instanceof Date)return e.getTime();if("number"==typeof e)return e;if("string"==typeof e){let t=Number(e);if(Number.isFinite(t))return t;let r=Date.parse(e);return Number.isFinite(r)?r:0}return 0}async function ee(e){let t=await S(e.user,e.config);if(0===t.size)return!1;let r=[],n=await V(e.config.skillId,e.config.versionAId),a=await V(e.config.skillId,e.config.versionBId),i=new Set(Object.values(e.states).flatMap(e=>["a","b"].flatMap(t=>e[t].runs||[])).map(e=>e.sessionId).filter(e=>!!e));for(let[s,i]of Object.entries(e.states)){let e=Q(t.get(s)?.caseEntry.input);if(e)for(let t of["a","b"]){let o="a"===t?n:a;for(let n of i[t].runs||[])!n.sessionId&&("running"===n.status||function(e){if("fail"!==e.status||e.sessionId)return!1;let t=`${e.failureDetail||""}
|
|
53
53
|
${e.output||""}`;return"agent_error"===e.failureType&&/服务重启中断|server .*restart|restarted/i.test(t)}(n))&&r.push({caseId:s,side:t,run:n,query:e,version:o})}}if(0===r.length)return!1;let o=await s.prisma.execution.findMany({where:{user:e.user,agentName:{in:["grayscale-baseline-agent","grayscale-skill-agent"]}},select:{taskId:!0,query:!0,agentName:!0,finalResult:!0,skill:!0,skillVersion:!0,latency:!0,tokens:!0,toolCallCount:!0,timestamp:!0,inputTokens:!0,outputTokens:!0,cacheReadInputTokens:!0,cacheCreationInputTokens:!0,reasoningTokens:!0}});if(0===o.length)return!1;let l=[...o].sort((e,t)=>Z(t.timestamp)-Z(e.timestamp)),u=!1;for(let e of r){let t=e.version?"grayscale-skill-agent":"grayscale-baseline-agent",r=l.find(r=>!(!r.taskId||i.has(r.taskId))&&r.agentName===t&&Q(r.query)===e.query&&(e.version?Q(r.skill)===e.version.skillName&&Number(r.skillVersion)===Number(e.version.version):!Q(r.skill)));if(!r?.taskId)continue;e.run.status="executed",e.run.sessionId=r.taskId,e.run.traceIds=[r.taskId],e.run.output=r.finalResult||e.run.output||"";let n=M(r.latency);null!=n&&(e.run.timeCost=`${n.toFixed(1)}s`);let s=L(r);null!=s&&(e.run.tokenUsage=s),e.run.skillTriggered=!!e.version,e.run.toolCallCount="number"==typeof r.toolCallCount?r.toolCallCount:e.run.toolCallCount,i.add(r.taskId),u=!0}if(u)for(let t of(F(e.config),Object.values(e.states)))for(let e of["a","b"])t[e]=Y(t[e],t[e].runCount||t[e].runs?.length||0);return u}async function et(e,t,r,n){let a=Array.from(new Set(Object.values(n).flatMap(e=>["a","b"].flatMap(t=>[e[t].evaluatorRunId,...(e[t].runs||[]).map(e=>e.evaluatorRunId)])).filter(e=>!!e))),i=Array.from(new Set(Object.values(n).flatMap(e=>["a","b"].flatMap(t=>(e[t].runs||[]).map(e=>e.evaluationResultId))).filter(e=>!!e)));if(0===a.length&&0===i.length)return!1;let o=[];a.length>0&&o.push({evaluatorRunId:{in:a}}),i.length>0&&o.push({id:{in:i}});let l=await s.prisma.trajectoryEvalResult.findMany({where:1===o.length?{user:t,...o[0]}:{user:t,OR:o}});if(0===l.length)return!1;let u=[];for(let e of l){let t=function(e){var t;let r;if("done"!==e.status)return"";let n=C(e.rawAnalysisJson).some(e=>"preset-agent-task-completion"===e||"preset-agent-trace-quality"===e||"trace-quality-evaluator"===e),s="number"==typeof e.trajectoryScore||null!=x(e.rawAnalysisJson)||D(e).some(e=>"done"===e.status&&"number"==typeof e.score),a=(t=e.rawAnalysisJson,!!(r=g(t,null))&&"object"==typeof r&&!!r.resultEvaluation&&"object"==typeof r.resultEvaluation&&!!r.resultEvaluation),i=!!A(e.rawAnalysisJson);return n&&!i?N(e.rawAnalysisJson)||"评测完成记录缺少评测 session id":s&&(a||i)?"":N(e.rawAnalysisJson)||"评测完成记录缺少评测输出或评测 session id"}(e);if(t){u.push({row:e,reason:t});continue}if("pending"!==e.status&&"running"!==e.status)continue;let r=e.updatedAt instanceof Date?e.updatedAt.getTime():0;!(r<=0)&&(Date.now()-r>9e5?u.push({row:e,reason:`评测超时(>${Math.round(15)}min 无进展)`}):r<ex&&u.push({row:e,reason:"服务重启中断, 请重新评测"}))}if(u.length>0)for(let{row:e,reason:r}of u)"done"===e.status&&e.id?await ec(t,[e.id],r).catch(()=>{}):e.evaluatorRunId&&e.taskId?await el(t,e.evaluatorRunId,[e.taskId],r).catch(()=>{}):e.id&&await eu(t,[e.id],r).catch(()=>{}),e.status="failed",e.errorMessage=e.errorMessage||r;let c=new Map,d=new Map,p=new Map;for(let e of l){e.id&&c.set(e.id,e);let t=b(e.rawAnalysisJson),r=t?.evaluationClaimId||"";r&&O(e,d.get(r))&&d.set(r,e);let n=t?[t.grayscaleTaskId,t.caseId,t.side,t.runIndex,t.roundIndex,t.executionTraceId].join("|"):"";n&&ep(e.status)&&O(e,p.get(n))&&p.set(n,e)}let f=!1;for(let t of Object.values(n))for(let r of["a","b"]){for(let n of t[r].runs||[]){if(!n.sessionId)continue;let s=!1,a=(n.evaluationResultId?c.get(n.evaluationResultId):void 0)||(n.evaluationClaimId?d.get(n.evaluationClaimId):void 0);if(a||(s=!!(a=p.get(function(e,t,r,n){let s=String(n.sessionId||"").trim();return s?[e,t,r,n.runIndex,n.roundIndex,s].join("|"):""}(e,n.caseId,r,n)))),!a)continue;let i=b(a.rawAnalysisJson);if(!v(i,{taskId:e,caseId:n.caseId,side:r,run:n,allowClaimMismatch:s}))continue;let o=JSON.stringify({status:n.status,evaluatorRunId:n.evaluatorRunId,evaluationResultId:n.evaluationResultId,evaluationTraceId:n.evaluationTraceId,score:n.score,tier:n.tier,evaluations:n.evaluations||[],output:n.output,completedAt:n.completedAt});H(n,a,t[r].evaluatorRunId),o!==JSON.stringify({status:n.status,evaluatorRunId:n.evaluatorRunId,evaluationResultId:n.evaluationResultId,evaluationTraceId:n.evaluationTraceId,score:n.score,tier:n.tier,evaluations:n.evaluations||[],output:n.output,completedAt:n.completedAt})&&(f=!0)}let n=Y(t[r],t[r].runCount||t[r].runs?.length||0);(t[r].status!==n.status||t[r].score!==n.score)&&(f=!0),t[r]=n}return f&&F(r),f}async function er(e,t,r,n){let s=[...e],a=Array.from({length:Math.max(1,Math.min(t,e.length||1))},async()=>{for(;s.length>0;){if(n?.aborted)return;let e=s.shift();if(!e)return;await r(e)}});await Promise.all(a)}async function en(e){let t,{target:r}=e,n=e.states[r.caseId],s=r.run;s.status="running",s.executionAttempts=(s.executionAttempts||0)+1,delete s.evaluatorRunId,delete s.evaluationResultId,delete s.evaluationTraceId,delete s.score,delete s.tier,delete s.evaluations,delete s.sessionId,delete s.traceIds,delete s.tokenUsage,delete s.skillTriggered,delete s.toolCallCount,delete s.toolCalls,delete s.failureType,delete s.failureDetail,s.output=void 0,s.timeCost=void 0,n[r.side]=Y(n[r.side],e.totalRunsPerSide),await q(e.taskId,e.user,e.config,e.states);let a=Date.now(),o=[],l="",u=new AbortController;e.parentSignal&&(e.parentSignal.aborted?u.abort():e.parentSignal.addEventListener("abort",()=>u.abort(),{once:!0}));let c=!1,d=null;try{var p;let n,f=new Promise((e,t)=>{d=setTimeout(()=>{c=!0,u.abort(),t(new eD(`agent_timeout: exceeded ${Math.round(eA/1e3)}s${l?`; last_tool=${l}`:""}`))},eA)}),h=e.version?"grayscale-skill-agent":"grayscale-baseline-agent",g=(0,i.runGeneralAgent)({user:e.user,query:e.caseMap.get(r.caseId).input,skill:e.version?.skillName,skillVersion:e.version?.version,tagSkill:e.version?.skillName??void 0,system:(p=e.version,n="你当前处于自动化 A/B 灰度测评后台执行环境。\n这是非交互运行:没有用户窗口,也没有人工确认通道。\n禁止向用户提问,禁止请求人工确认,禁止等待外部输入。\n如果某个工具、文件、目录、网络或系统能力不可用,立即停止依赖该能力的路径,直接在最终答案中说明受限原因。\n不要反复重试同一个权限受限、不可读、超时或需要确认的操作。\n不要读取当前任务无关的外部目录或文件;只使用当前 workspace、已加载 Skill、用户输入和可直接访问的信息。\n最终答案必须直接回应用户原始输入;若因环境限制无法完成,给出简短、明确的失败原因。",p?`${n}
|
|
54
54
|
你是 B 侧 Skill 执行 Agent:必须按已加载 Skill 的流程执行任务。`:`${n}
|
|
55
55
|
你是 A 侧基线对照 Agent:不加载任何 Skill,仅基于模型自身知识直接回答用户问题。`),interactionPolicy:"auto-deny",systemAgentName:h,ephemeralServer:!0,recordTraceAs:h,sessionTitle:`grayscale ${r.side.toUpperCase()} r${r.roundIndex} \xb7 ${e.user} \xb7 ${e.taskId}`,workspaceTag:`grayscale-${e.taskId}-${r.side}-${r.caseId}-r${r.roundIndex}`,timeoutMs:eA,chatOptions:{idleTimeoutMs:eT,signal:u.signal},handlers:{onTool:e=>{if("start"===e.phase&&e.name&&o.push(e.name),e.name){let t=e.status||e.phase;l=`${e.name}:${t}`}}}});t=g,g.catch(()=>{});let m=await Promise.race([g,f]);if(c)throw new eD(`agent_timeout: exceeded ${Math.round(eA/1e3)}s${l?`; last_tool=${l}`:""}`);let y=function(e){let t=e.interactions.find(e=>"permission"===e.kind&&"reject"===e.reply);if(t){let e=j(t.meta?.title||t.meta?.type||"permission"),r=j(t.meta?.pattern||"");return{failureType:"permission_blocked",message:`permission_blocked: ${e}${r?` (${r})`:""}`}}return e.interactions.find(e=>"question"===e.kind)?{failureType:"question_blocked",message:"question_blocked: background A/B execution cannot answer agent questions"}:null}(m);if(y)throw new eO(y.failureType,y.message);s.status="executed",s.output=m.output||"",s.timeCost=`${((Date.now()-a)/1e3).toFixed(1)}s`,s.tokenUsage=function(e){let t=e||{};for(let e of[t.totalTokens,t.tokenUsage,t.tokens]){if("number"==typeof e&&Number.isFinite(e))return Math.round(e);if(e&&"object"==typeof e){let t=e,r=["input","output","reasoning","cache"].reduce((e,r)=>{let n=t[r];return e+("number"==typeof n&&Number.isFinite(n)?n:0)},0);if(r>0)return Math.round(r)}}return 0}(m.stats),s.sessionId=m.sessionId,s.traceIds=[m.sessionId],s.skillTriggered=!!e.version&&(o.includes("load_skill")||m.skillResolved),s.toolCallCount=m.stats?.toolCallCount||o.length,s.toolCalls=Array.from(new Set(o)).slice(0,8),G(s),await $({sessionId:m.sessionId,user:e.user,query:e.caseMap.get(r.caseId).input,output:m.output||"",agentName:h,skill:e.version?.skillName??void 0,skillVersion:e.version?.version})}catch(t){let e=function(e){if(e instanceof eO)return{failureType:e.failureType,message:e.message};if(e instanceof eD)return{failureType:"agent_timeout",message:e.message};let t=e instanceof Error?e.message:String(e);return/timeout|timed out|aborted/i.test(t)?{failureType:"agent_timeout",message:t}:/permission|denied|not allowed|unauthorized|forbidden/i.test(t)?{failureType:"permission_blocked",message:t}:{failureType:"agent_error",message:t}}(t);s.status="fail",s.failureType=e.failureType,s.failureDetail=l?`${e.message}; last_tool=${l}`:e.message,s.output=s.failureDetail,s.timeCost=`${((Date.now()-a)/1e3).toFixed(1)}s`,s.toolCallCount=o.length,s.toolCalls=Array.from(new Set(o)).slice(0,8),G(s)}finally{if(d&&clearTimeout(d),u.abort(),t)try{await t}catch{}F(e.config),n[r.side]=Y(n[r.side],e.totalRunsPerSide),await q(e.taskId,e.user,e.config,e.states)}}async function es(e,t,r,n,s,a,i,o,l={}){let u={user:t,...s?{datasetId:s}:{},...E(r).length>0?{datasetIds:E(r)}:{},pairs:[n],...o?{grayscaleBinding:o}:{},...r.evaluationBatchTitle?{taskTitle:r.evaluationBatchTitle}:{}};r.evaluationBatchId&&!1!==l.appendToBatch?u.evaluatorRunId=r.evaluationBatchId:u.evaluators=_(i||r.evaluators,a||r.evaluatorId);let c=await fetch(`${e}/api/eval/trajectory/run`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)}),d=await c.json().catch(()=>({}));if(!c.ok||!d.evaluatorRunId)throw Error(d.error||"failed to start trajectory evaluation");let p=Array.isArray(d.created)?d.created:[],f=p.length>0?String(p[0]?.id||"").trim():"";if(!f)throw Error("failed to bind trajectory evaluation result");return{evaluatorRunId:String(d.evaluatorRunId),evaluationResultId:f}}async function ea(e){let t=s.prisma.trajectoryEvalResult,r={user:e.user,taskId:e.sessionId,status:{in:["done","failed"]}},n=e.evaluatorRunId?await t.findFirst({where:{...r,evaluatorRunId:e.evaluatorRunId},orderBy:{updatedAt:"desc"}}):null;return n||(n=await t.findFirst({where:r,orderBy:{updatedAt:"desc"}})),!!n&&(e.run.evaluations=(e.run.evaluations||[]).filter(e=>"done"===e.status),e.run.failureType=void 0,e.run.failureDetail=void 0,H(e.run,n,e.evaluatorRunId),!0)}async function ei(e,t,r){let n=!1;for(let s of Object.values(r))for(let r of["a","b"]){let a=!1;for(let n of s[r].runs||[]){if("fail"!==n.status||n.failureType||!n.sessionId)continue;let r=n.status,s=n.score;await ea({user:e,run:n,sessionId:n.sessionId,evaluatorRunId:t.evaluationBatchId||n.evaluatorRunId}).catch(()=>!1)&&(n.status!==r||n.score!==s)&&(a=!0)}a&&(s[r]=Y(s[r],s[r].runCount||s[r].runs?.length||0),n=!0)}return n}async function eo(e,t,r){await s.prisma.trajectoryEvalResult.updateMany({where:{user:e,evaluatorRunId:t,status:{in:["pending","running"]}},data:{status:"failed",errorMessage:r}})}async function el(e,t,r,n){let a=Array.from(new Set(r.map(e=>e.trim()).filter(Boolean)));0===a.length?await eo(e,t,n):await s.prisma.trajectoryEvalResult.updateMany({where:{user:e,evaluatorRunId:t,taskId:{in:a},status:{in:["pending","running"]}},data:{status:"failed",errorMessage:n}})}async function eu(e,t,r){let n=Array.from(new Set(t.map(e=>e.trim()).filter(Boolean)));0!==n.length&&await s.prisma.trajectoryEvalResult.updateMany({where:{user:e,id:{in:n},status:{in:["pending","running"]}},data:{status:"failed",errorMessage:r}})}async function ec(e,t,r){let n=Array.from(new Set(t.map(e=>e.trim()).filter(Boolean)));0!==n.length&&await s.prisma.trajectoryEvalResult.updateMany({where:{user:e,id:{in:n}},data:{status:"failed",errorMessage:r}})}async function ed(e){let t,r,{target:n}=e,s=_(e.evaluatorIds||e.config.evaluators,e.evaluatorId||e.config.evaluatorId),a=(n.run.evaluationAttempts||0)+1,i=`gclaim_${Date.now()}_${Math.random().toString(36).slice(2,10)}`;n.run.status="evaluating",delete n.run.evalRetryPending,n.run.evaluationAttempts=a,n.run.evaluationClaimId=i,n.run.evaluationStartedAt=new Date().toISOString(),n.run.evaluations=P(n.run.evaluations,s.map(e=>({evaluatorId:e,evaluatorName:ek[e]||e,status:"running"}))),delete n.run.evaluationResultId,delete n.run.evaluationTraceId,delete n.run.score,delete n.run.tier,n.run.output=void 0,await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:n.caseId,side:n.side,nextRun:n.run,sidePatch:{evaluatorRunId:void 0},touchLatestResultAt:!0});let o=!1;try{let o={source:"grayscale-ab",grayscaleTaskId:e.taskId,caseId:n.caseId,side:n.side,runIndex:n.run.runIndex,roundIndex:n.run.roundIndex,executionTraceId:n.run.sessionId,evaluationClaimId:i,evaluationAttempt:a},l=await es(e.origin,e.user,e.config,{caseId:n.caseId,taskId:n.run.sessionId},e.caseDatasetIdByCaseId?.get(n.caseId),e.evaluatorId,s,o,{appendToBatch:e.appendToBatch});t=l.evaluatorRunId,r=l.evaluationResultId,n.run.evaluatorRunId=t,n.run.evaluationResultId=r,e.states[n.caseId][n.side].evaluatorRunId=t,await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:n.caseId,side:n.side,nextRun:n.run,expectedEvaluationClaimId:i,sidePatch:{evaluatorRunId:t},touchLatestResultAt:!0}),await ef({taskId:e.taskId,user:e.user,origin:e.origin,states:e.states,caseId:n.caseId,side:n.side,run:n.run,evaluationResultId:r,evaluatorRunId:t,expectedEvaluationClaimId:i,config:e.config})?await K(e.states):(n.run.status="evaluating",n.run.output=void 0)}catch(l){let a=l instanceof Error?l.message:String(l);/no valid tasks to run/i.test(a)&&n.run.sessionId&&(o=await ea({user:e.user,run:n.run,sessionId:n.run.sessionId,evaluatorRunId:e.config.evaluationBatchId||t||void 0}).catch(()=>!1)),o?n.run.evalRetryPending=!1:(r?await eu(e.user,[r],a).catch(()=>{}):t&&await el(e.user,t,n.run.sessionId?[n.run.sessionId]:[],a).catch(()=>{}),n.run.status="fail",n.run.evaluations=P(n.run.evaluations,s.map(e=>({evaluatorId:e,evaluatorName:ek[e]||e,status:"failed",evaluatorRunId:t,evaluationResultId:r,errorMessage:a}))),n.run.output=a,G(n.run)),await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:n.caseId,side:n.side,nextRun:n.run,expectedEvaluationClaimId:i,sidePatch:t?{evaluatorRunId:t}:void 0,touchLatestResultAt:!0}).catch(()=>{})}if(!o&&"fail"===n.run.status&&!n.run.failureType){let e=n.run.output||n.run.evaluations?.find(e=>"failed"===e.status)?.errorMessage||"";(0,l.shouldRetryGrayscaleEval)(e,n.run.evaluationAttempts||1,2)&&(n.run.status="evaluating",n.run.evalRetryPending=!0,n.run.output=void 0,delete n.run.completedAt,n.run.evaluations=(n.run.evaluations||[]).map(e=>"failed"===e.status?{...e,status:"pending",errorMessage:void 0}:e))}F(e.config),await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:n.caseId,side:n.side,nextRun:n.run,expectedEvaluationClaimId:i,sidePatch:t?{evaluatorRunId:t}:void 0,touchLatestResultAt:!0}).catch(()=>{})}function ep(e){return"done"===e||"failed"===e}async function ef(e){let t="evaluation timed out";for(let t=0;t<180;t++){let t=await fetch(`${e.origin}/api/eval/trajectory/results/${encodeURIComponent(e.evaluationResultId)}?user=${encodeURIComponent(e.user)}`),n=await t.json().catch(()=>({}));if(t.ok){var r;let t=(r=n.rawAnalysis,y(r&&"object"==typeof r&&!Array.isArray(r)?r.grayscaleBinding:null));if(String(n.id||"").trim()!==e.evaluationResultId)throw Error(`evaluation result id mismatch: expected ${e.evaluationResultId}, got ${String(n.id||"").trim()||"N/A"}`);if(String(n.taskId||"").trim()!==String(e.run.sessionId||"").trim())throw Error(`evaluation result trace mismatch: expected ${String(e.run.sessionId||"").trim()||"N/A"}, got ${String(n.taskId||"").trim()||"N/A"}`);if(!v(t,{taskId:e.taskId,caseId:e.caseId,side:e.side,run:e.run,expectedClaimId:e.expectedEvaluationClaimId}))throw Error("evaluation result binding mismatch");if(ep(n.status)){let t={id:n.id,evaluatorRunId:n.evaluatorRunId||e.evaluatorRunId,status:n.status,taskId:n.taskId,trajectoryScore:n.trajectoryScore,errorMessage:n.errorMessage,rawAnalysisJson:JSON.stringify(n.rawAnalysis||{}),updatedAt:n.updatedAt?new Date(n.updatedAt):void 0};return H(e.run,t,e.evaluatorRunId),await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:e.caseId,side:e.side,nextRun:e.run,expectedEvaluationClaimId:e.expectedEvaluationClaimId,sidePatch:{evaluatorRunId:e.evaluatorRunId},touchLatestResultAt:!0}),!0}}else if(404!==t.status)throw Error(n.error||"failed to load trajectory evaluation result");await new Promise(e=>setTimeout(e,2e3))}try{let t=await fetch(`${e.origin}/api/eval/trajectory/results/${encodeURIComponent(e.evaluationResultId)}?user=${encodeURIComponent(e.user)}`),r=await t.json().catch(()=>({}));if(t.ok&&!ep(r.status))return!1}catch{}throw await eu(e.user,[e.evaluationResultId],t),("evaluating"===e.run.status||"running"===e.run.status)&&(e.run.status="fail",e.run.output=t,e.run.evaluations=P(e.run.evaluations,_(e.run.evaluations?.map(e=>e.evaluatorId)||[]).map(r=>({evaluatorId:r,evaluatorName:ek[r]||r,status:"failed",evaluatorRunId:e.evaluatorRunId,evaluationResultId:e.evaluationResultId,errorMessage:t}))),G(e.run),await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:e.caseId,side:e.side,nextRun:e.run,expectedEvaluationClaimId:e.expectedEvaluationClaimId,sidePatch:{evaluatorRunId:e.evaluatorRunId},touchLatestResultAt:!0}).catch(()=>{})),Error(t)}async function eh(e,t,r,n){r.evaluationBatchId=n;try{await s.prisma.grayscaleTask.updateMany({where:{id:e,user:t},data:{configJson:JSON.stringify(f(r))}})}catch(e){console.warn("[grayscale] persist evaluationBatchId failed:",e?.message)}}async function eg(e){let t=[],r=_(e.evaluatorIds||e.config.evaluators,e.evaluatorId||e.config.evaluatorId),n=await S(e.user,e.config),s=new Map(Array.from(n.entries()).map(([e,t])=>[e,t.datasetId]));for(let n of e.caseIds){let s=e.states[n];if(s)for(let a of["a","b"])for(let i of s[a].runs||[]){let s=e.onlyMissingEvaluation?R(i,r):r;(!e.onlyMissingEvaluation||0!==s.length)&&("executed"===i.status||"pass"===i.status||e.onlyMissingEvaluation&&"evaluating"===i.status)&&i.sessionId&&t.push({caseId:n,side:a,run:i,evaluatorIds:s})}}if(0===t.length)return null;let a=[],i=Math.max(1,Number(e.config.agentMaxConcurrency||t.length)),l=async t=>{await er(t,i,async t=>{if(e.parentSignal?.aborted){t.run.status="fail",t.run.output="用户终止",G(t.run);return}let r=t.run.evaluatorRunId;try{await (0,o.withBackgroundOpencodeSlot)(()=>ed({...e,target:t,caseDatasetIdByCaseId:s,evaluatorIds:t.evaluatorIds,appendToBatch:!0}),{taskType:"grayscale-eval",user:e.user,label:`eval-${t.side}-${t.caseId}`,displayOnly:!0,signal:e.parentSignal})}catch(r){if(e.parentSignal?.aborted||r?.name==="AbortError"){t.run.status="fail",t.run.output="用户终止",G(t.run);return}throw r}t.run.evaluatorRunId&&t.run.evaluatorRunId!==r&&a.push(t.run.evaluatorRunId)},e.parentSignal)};if(!e.config.evaluationBatchId&&t.length>0){await l([t[0]]);let r=t[0].run.evaluatorRunId;r&&await eh(e.taskId,e.user,e.config,r),await l(t.slice(1))}else await l(t);for(let e=1;e<=2;e++){let e=t.filter(e=>e.run.evalRetryPending&&e.run.sessionId).map(e=>({...e,evaluatorIds:R(e.run,r)})).filter(e=>(e.evaluatorIds||[]).length>0);if(0===e.length)break;await l(e)}for(let r of t.filter(e=>e.run.evalRetryPending))r.run.evalRetryPending=!1,r.run.status="fail",G(r.run),await J({taskId:e.taskId,user:e.user,config:e.config,states:e.states,caseId:r.caseId,side:r.side,nextRun:r.run,touchLatestResultAt:!0}).catch(()=>{});return a[a.length-1]||null}async function em(e){let{taskId:t,user:r,origin:n,evaluatorId:s}=e,a=`${r}:${t}`,i=await U(t,r);if(!i)throw Error("task not found");W(i);let l={...i.configJson,skillId:i.skillId,evaluatorId:s||i.configJson.evaluatorId,evaluators:_(e.evaluatorIds||i.configJson.evaluators,s||i.configJson.evaluatorId),agentMaxConcurrency:e.agentMaxConcurrency||i.configJson.agentMaxConcurrency,evaluationBatchTitle:i.configJson.evaluationBatchTitle||i.taskName},u=E(l);if(0===u.length)throw Error("dataset is required");let c=await S(r,l);if(0===c.size)throw Error("dataset not found");let d=Math.max(1,Number(l.runCount||e.caseIds.length||1)),p=Math.max(1,Number(l.repeatRounds||1)),f=e.caseIds.slice(0,d);if(f.length!==d)throw Error(`selected case count ${f.length} does not match runCount ${d}`);for(let e of f)if(!c.get(e)?.caseEntry.input?.trim())throw Error(`case ${e} not found or missing input`);let g=await V(l.skillId,l.versionAId),m=await V(l.skillId,l.versionBId),y={};for(let e of f)y[e]={a:{status:"pending",runs:[],runCount:p},b:{status:"pending",runs:[],runCount:p}};let b=[];for(let e=1;e<=p;e++)for(let t of f)for(let r of["a","b"]){let n={status:"pending",caseId:t,runIndex:e,roundIndex:e};y[t][r].runs=[...y[t][r].runs||[],n],b.push({caseId:t,side:r,roundIndex:e,runIndex:e,run:n})}for(let e of f)for(let t of["a","b"])y[e][t]=Y(y[e][t],p);await q(t,r,l,y);let v=Math.max(1,Number(l.agentMaxConcurrency||2*d)),w=h().get(a)?.abortController?.signal,I=e=>{e.run.status="fail",e.run.failureType="agent_error",e.run.failureDetail="用户终止",e.run.output=e.run.output||"用户终止",G(e.run),y[e.caseId][e.side]=Y(y[e.caseId][e.side],p)},R=async e=>{await er(e,v,async e=>{if(w?.aborted)return void I(e);let n="a"===e.side?g:m,s=m?.skillName||g?.skillName||null;try{await (0,o.withBackgroundOpencodeSlot)(()=>en({taskId:t,user:r,config:l,states:y,caseMap:new Map(Array.from(c.entries()).map(([e,t])=>[e,t.caseEntry])),totalRunsPerSide:p,version:n,referenceSkillName:s,target:e,parentSignal:w}),{taskType:"grayscale-ab",user:r,label:`grayscale-${e.side}-${e.caseId}-r${e.roundIndex}`,skill:n?.skillName,skillVersion:n?.version??null,signal:w})}catch(t){if(w?.aborted||t?.name==="AbortError")return void I(e);throw t}},w)};await R(b);for(let e=1;e<=2&&!w?.aborted;e++){let e=b.filter(e=>"fail"===e.run.status&&"agent_error"===e.run.failureType);if(0===e.length)break;await R(e)}!1===l.autoEval||w?.aborted||(h().set(a,{taskId:t,runId:h().get(a)?.runId||"",status:"evaluating",startedAt:Date.now(),abortController:h().get(a)?.abortController}),await eg({taskId:t,user:r,origin:n,config:l,states:y,caseIds:f,evaluatorId:s,evaluatorIds:l.evaluators,parentSignal:w}))}async function ey(e){let t=await U(e.taskId,e.user);if(!t)throw Error("task not found");W(t);let r={...t.configJson,skillId:t.skillId,evaluatorId:e.evaluatorId||t.configJson.evaluatorId,evaluators:_(e.evaluatorIds||t.configJson.evaluators,e.evaluatorId||t.configJson.evaluatorId),evaluationBatchTitle:t.configJson.evaluationBatchTitle||t.taskName},n=t.caseStatesJson||{},s=e.caseIds.length>0?e.caseIds:Object.keys(n);if(!await eg({taskId:e.taskId,user:e.user,origin:e.origin,config:r,states:n,caseIds:s,evaluatorId:e.evaluatorId,evaluatorIds:r.evaluators,onlyMissingEvaluation:e.onlyMissingEvaluation}))throw Error("no executed agent sessions to evaluate")}async function eb(e,{params:t}){try{let{taskId:r}=await t,s=e.nextUrl.searchParams.get("user")||"";if(!s||!r)return n.NextResponse.json({error:"user and taskId are required"},{status:400});let a=await U(r,s);if(!a)return n.NextResponse.json({error:"task not found"},{status:404});let i=await K(a.caseStatesJson),o=await ee({user:s,config:a.configJson,states:a.caseStatesJson}),l=await et(r,s,a.configJson,a.caseStatesJson),c=await ei(s,a.configJson,a.caseStatesJson),d=`${s}:${r}`,p=!1;if(!h().get(d)&&z(a.caseStatesJson)){let e=a.caseStatesJson;for(let t of Object.keys(e))for(let r of["a","b"]){let n=e[t][r];if(!n)continue;let s=!1;for(let e of n.runs||[])(0,u.reconcileStaleGrayscaleRun)(e,"服务重启中断, 请重新评测")&&(s=!0,p=!0);if(s){e[t][r]=Y(n,n.runCount||n.runs?.length||0);let s=e[t][r];("running"===s.status||"evaluating"===s.status)&&(s.status="fail",s.output=s.output||"服务重启中断")}}}if((p||i||o||l||c)&&!await q(r,s,a.configJson,a.caseStatesJson,a.rawCaseStatesJson)){let e=await U(r,s);if(e)return B(e,h().get(`${s}:${r}`)||null)}let f=`${s}:${r}`;return h().get(f)&&!z(a.caseStatesJson)&&h().delete(f),B(a,h().get(`${s}:${r}`)||null)}catch(e){return console.error("[GRAYSCALE_TASKS_GET_ONE] Failed:",e),n.NextResponse.json({error:"Failed to fetch task"},{status:500})}}async function ev(e,{params:t}){try{let{taskId:r}=await t,s=await e.json().catch(()=>({})),a=String(s.user||"").trim(),i=String(s.action||"start"),o=Array.isArray(s.caseIds)?s.caseIds.map(e=>String(e||"").trim()).filter(Boolean):[],l="string"==typeof s.evaluatorId?s.evaluatorId.trim():void 0,u=_(s.evaluators,l),c="number"==typeof s.agentMaxConcurrency&&Number.isFinite(s.agentMaxConcurrency)?Math.max(1,Math.floor(s.agentMaxConcurrency)):void 0,d=!0===s.onlyMissingEvaluation;if(!a||!r)return n.NextResponse.json({error:"user and taskId are required"},{status:400});if(0===o.length&&"start"===i)return n.NextResponse.json({error:"caseIds are required"},{status:400});let p=`${a}:${r}`;if("abort"===i){let e=h().get(p);if(e)try{e.abortController?.abort()}catch{}let t=0,s=["running","evaluating","pending"];try{let e=await U(r,a);if(e){let n=e.caseStatesJson||{};for(let e of Object.keys(n))for(let r of["a","b"]){let a=n[e][r];if(!a)continue;for(let e of a.runs||[])s.includes(e.status)&&(e.status="fail",e.failureType="agent_error",e.failureDetail="用户终止",e.output=e.output||"用户终止",t++);n[e][r]=Y(a,a.runCount||a.runs?.length||0);let i=n[e][r];("running"===i.status||"evaluating"===i.status)&&(i.status="fail",i.output=i.output||"用户终止")}t>0&&await q(r,a,e.configJson,n)}}catch(e){console.warn("[GRAYSCALE_TASKS_ABORT] persist fail patch failed:",e)}return e&&h().delete(p),n.NextResponse.json({ok:!0,aborted:!0,hadActiveRun:!!e,patchedCount:t})}let f="evaluate"===i&&d;if(h().has(p)&&!f)return n.NextResponse.json({error:"task is already running"},{status:409});let g=await U(r,a);if(!g)return n.NextResponse.json({error:"task not found"},{status:404});try{W(g)}catch(e){return n.NextResponse.json({error:e instanceof Error?e.message:"invalid task skill binding"},{status:400})}let m=e.nextUrl.origin,y=`gray_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,b=new AbortController;return f||h().set(p,{taskId:r,runId:y,status:"evaluate"===i?"evaluating":"running",startedAt:Date.now(),abortController:b}),("evaluate"===i?ey({taskId:r,user:a,origin:m,caseIds:o,evaluatorId:l,evaluatorIds:u,onlyMissingEvaluation:d}):em({taskId:r,user:a,origin:m,caseIds:o,evaluatorId:l,evaluatorIds:u,agentMaxConcurrency:c})).catch(async e=>{console.error("[GRAYSCALE_TASKS_RUN] Failed:",e);let t=await U(r,a).catch(()=>null);if(t){let n=t.caseStatesJson||{};for(let t of o.length>0?o:Object.keys(n))for(let r of(X(n,t),["a","b"]))("running"===n[t][r].status||"evaluating"===n[t][r].status)&&(n[t][r].status="fail",n[t][r].output=e instanceof Error?e.message:String(e));await q(r,a,t.configJson,n).catch(()=>{})}}).finally(()=>{f||h().delete(p)}),n.NextResponse.json({ok:!0,runId:y})}catch(e){return console.error("[GRAYSCALE_TASKS_POST] Failed:",e),n.NextResponse.json({error:e instanceof Error?e.message:"Failed to start task"},{status:500})}}async function ew(e,{params:t}){try{let{taskId:r}=await t,{user:a,taskName:i,configJson:o,caseStatesJson:l}=await e.json();if(!a||!r)return n.NextResponse.json({error:"user and taskId are required"},{status:400});let u={},c=await s.prisma.grayscaleTask.findFirst({where:{id:r,user:a}});if(!c)return n.NextResponse.json({error:"task not found"},{status:404});if(void 0!==o){let e=o&&"object"==typeof o&&!Array.isArray(o)?f({...o}):{},t=String(e.skillId||"").trim();if(t&&t!==c.skillId)return n.NextResponse.json({error:"task skill binding cannot be changed"},{status:400});let r=String(e.versionBId||"").trim();if(r&&r!==c.skillVersionId)return n.NextResponse.json({error:"task skill version binding cannot be changed"},{status:400});if(e.skillId=c.skillId,e.versionBId=c.skillVersionId,!String(e.evaluationBatchId||"").trim()){let t="";try{t=String(JSON.parse(c.configJson||"{}").evaluationBatchId||"").trim()}catch{}t&&(e.evaluationBatchId=t)}u.configJson=JSON.stringify(e)}if(void 0!==l&&(u.caseStatesJson=JSON.stringify(l)),"string"==typeof i&&i.trim()){let e=i.trim();if(e!==c.taskName&&await s.prisma.grayscaleTask.findFirst({where:{user:a,skillName:c.skillName,skillVersion:c.skillVersion,taskName:e,NOT:{id:r}}}))return n.NextResponse.json({error:"该版本下已存在同名 A/B 任务,请换一个名字"},{status:409});u.taskName=e}if(0===Object.keys(u).length)return n.NextResponse.json({error:"Nothing to update"},{status:400});await s.prisma.grayscaleTask.updateMany({where:{id:r,user:a},data:u});let d=await s.prisma.grayscaleTask.findFirst({where:{id:r,user:a}});if(!d)return n.NextResponse.json({error:"task not found"},{status:404});return n.NextResponse.json({...d,configJson:{...f(JSON.parse(d.configJson||"{}")),skillId:d.skillId,versionBId:d.skillVersionId},caseStatesJson:JSON.parse(d.caseStatesJson||"{}")})}catch(e){return console.error("[GRAYSCALE_TASKS_PATCH] Failed:",e),n.NextResponse.json({error:"Failed to update task"},{status:500})}}async function eI(){let e,t=["running","evaluating","pending"];try{e=await s.prisma.grayscaleTask.findMany({select:{id:!0,user:!0,caseStatesJson:!0}})}catch{return 0}let r=0;for(let n of e){let e;try{e=JSON.parse(n.caseStatesJson||"{}")}catch{continue}let a=!1;for(let r of Object.keys(e))for(let n of["a","b"]){let s=e[r]?.[n];if(!s)continue;let i=!1;for(let e of s.runs||[])(0,u.reconcileStaleGrayscaleRun)(e,"服务重启中断(启动回收)")&&(i=!0,a=!0);if(i){e[r][n]=Y(s,s.runCount||s.runs?.length||0);let a=e[r][n];t.includes(a.status)&&(a.status="fail",a.output=a.output||"服务重启中断")}}if(a)try{await s.prisma.grayscaleTask.updateMany({where:{id:n.id,user:n.user},data:{caseStatesJson:JSON.stringify(e)}}),r++}catch{}}return r}e.s(["GET",()=>eb,"PATCH",()=>ew,"POST",()=>ev,"dynamic",0,"force-dynamic","reapStaleGrayscaleRunsAtStartup",()=>eI]),r()}catch(e){r(e)}},!1)];
|