agent-insight 0.5.2 → 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/.env.example +6 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +9 -0
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +51 -3
- package/.next/standalone/.next/routes-manifest.json +60 -0
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page/build-manifest.json +17 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page/next-font-manifest.json +6 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page.js +17 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page.js.map +5 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/(main)/version-analysis/page_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page/build-manifest.json +17 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page/next-font-manifest.json +6 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page.js +17 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page.js.map +5 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/(main)/version-management/page_client-reference-manifest.js +2 -0
- 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/agent-datasets/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent-datasets/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/apikey/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/organization/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/dashboard/stats/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/batch-tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/execute/[jobId]/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 +10 -10
- package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/history/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/history/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/config/backfill-routing/route.js +6 -6
- package/.next/standalone/.next/server/app/api/eval/config/backfill-routing/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/config/create/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/config/reparse/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/config/route.js +6 -6
- package/.next/standalone/.next/server/app/api/eval/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/config/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/evaluation/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/rejudge/route.js +6 -6
- package/.next/standalone/.next/server/app/api/eval/rejudge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/settings/test/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/results/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/results/route.js +5 -5
- package/.next/standalone/.next/server/app/api/eval/trajectory/results/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js +13 -13
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/runs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/evaluation/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/evaluation/cancel/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/fault/diagnosis/session/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/fleet/agent/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route.js +8 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/fleet/agent/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/fleet/breakdowns/route.js +1 -1
- package/.next/standalone/.next/server/app/api/fleet/breakdowns/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/fleet/trends/route.js +2 -2
- package/.next/standalone/.next/server/app/api/fleet/trends/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/guide/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/opencode/session-complete/route.js +3 -3
- package/.next/standalone/.next/server/app/api/ingest/opencode/session-complete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/otel/v1/logs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/otel/v1/metrics/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/otel/v1/traces/route.js +5 -5
- package/.next/standalone/.next/server/app/api/ingest/otel/v1/traces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/end/route.js +9 -9
- package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/end/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/start/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/sync/manifest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/sync/opencode/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/upload/route.js +8 -8
- package/.next/standalone/.next/server/app/api/ingest/upload/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js +8 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/modelconfig/pricing/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/observe/data/route.js +3 -3
- package/.next/standalone/.next/server/app/api/observe/data/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 +13 -13
- 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/executions/[executionId]/analyze-match/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/infra/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js +8 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/tags/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/observe/infra/history/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/poll/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/sources/derive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/sources/overview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/sources/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/sources/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/infra/sources/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/session/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/task-stats/route.js +3 -3
- package/.next/standalone/.next/server/app/api/observe/task-stats/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js +8 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/compare/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js +8 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/observe/version-analysis/tags/[tagId]/traces/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/public/otel/v1/traces/route.js +5 -5
- package/.next/standalone/.next/server/app/api/public/otel/v1/traces/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/quality/agents/route.js +7 -7
- package/.next/standalone/.next/server/app/api/quality/agents/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/quality/backfill/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/quality/executions/route.js +7 -7
- package/.next/standalone/.next/server/app/api/quality/executions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/quality/report/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]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/[runId]/cancel/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-eval/trigger/[skillName]/runs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/upload/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/download/[sessionId]/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-generator/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/sessions/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/plan/items/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/plan/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/skill-opt/sessions/[id]/iterations/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/activate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/benchmark-generate/route.js +7 -7
- package/.next/standalone/.next/server/app/api/skills/[id]/benchmark-generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/runs/route.js +2 -2
- package/.next/standalone/.next/server/app/api/skills/[id]/runs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/toggle/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]/evaluate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/evaluation-summary/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/skills/[id]/versions/[version]/parse-flow/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/automation/push/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/by-name/[name]/analysis-diagnosis/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/resolve/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/by-name/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/logs/route.js +6 -6
- package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/publish/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tags/[id]/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route.js +8 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/tags/[id]/route_client-reference-manifest.js +2 -0
- package/.next/standalone/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/tags/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/tags/route.js +8 -0
- package/.next/standalone/.next/server/app/api/tags/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
- 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 +6 -6
- 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 +6 -6
- 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 +6 -6
- 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 +6 -6
- 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 +6 -6
- 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 +6 -6
- 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 +8 -8
- 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 +8 -8
- 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 -0
- package/.next/standalone/.next/server/app/version-analysis.meta +16 -0
- package/.next/standalone/.next/server/app/version-analysis.rsc +23 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis/__PAGE__.segment.rsc +9 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p/version-analysis.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/!KG1haW4p.segment.rsc +7 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/_full.segment.rsc +23 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/_head.segment.rsc +6 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/_index.segment.rsc +6 -0
- package/.next/standalone/.next/server/app/version-analysis.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/.next/server/app/version-management.html +1 -0
- package/.next/standalone/.next/server/app/version-management.meta +16 -0
- package/.next/standalone/.next/server/app/version-management.rsc +22 -0
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management/__PAGE__.segment.rsc +9 -0
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p/version-management.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/version-management.segments/!KG1haW4p.segment.rsc +7 -0
- package/.next/standalone/.next/server/app/version-management.segments/_full.segment.rsc +22 -0
- package/.next/standalone/.next/server/app/version-management.segments/_head.segment.rsc +6 -0
- package/.next/standalone/.next/server/app/version-management.segments/_index.segment.rsc +6 -0
- package/.next/standalone/.next/server/app/version-management.segments/_tree.segment.rsc +2 -0
- package/.next/standalone/.next/server/app-paths-manifest.json +9 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__096d00c3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__28078c4e._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__4509f30c._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5386e9b4._.js +22 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cb21a03._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__6fe0c73e._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__88e070f0._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__98ce63c7._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f6a4627._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0d1e6e5._.js +22 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c60fa3da._.js +22 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c875b500._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__c8b9af98._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfcf074d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__d754b2c2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e60b9568._.js +22 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8b9c639._.js +22 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__f30eea21._.js +3 -0
- package/.next/standalone/.next/server/chunks/_05c80664._.js +1 -1
- 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/_1c2f3589._.js +1 -1
- package/.next/standalone/.next/server/chunks/{_1a32fa23._.js → _5090183e._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{_e84c3e5f._.js → _6a203624._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{_a0074544._.js → _70b9b972._.js} +1 -1
- package/.next/standalone/.next/server/chunks/_78c6471e._.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/{_547fcde4._.js → _d02fac80._.js} +2 -2
- package/.next/standalone/.next/server/chunks/_d043f698._.js +1 -1
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_fleet_agent_route_actions_b98e2c99.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_modelconfig_pricing_route_actions_bca6856d.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_tags_[id]_route_actions_a6f8b324.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_tags_route_actions_caf13f5f.js +3 -0
- package/.next/standalone/.next/server/chunks/bec2d_app_api_observe_version-analysis_tags_[tagId]_traces_route_actions_ff37f2d3.js +3 -0
- package/.next/standalone/.next/server/chunks/ce889_server_app_api_observe_executions_[executionId]_tags_route_actions_08aa41a4.js +3 -0
- package/.next/standalone/.next/server/chunks/ce889_server_app_api_observe_version-analysis_compare_route_actions_b48ab573.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_266d6cf4._.js +51 -0
- package/.next/standalone/.next/server/chunks/src_lib_5d95b500._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_67530201._.js +51 -0
- package/.next/standalone/.next/server/chunks/src_lib_9513f84d._.js +48 -0
- package/.next/standalone/.next/server/chunks/src_lib_9d09752c._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_a03a423b._.js +48 -0
- package/.next/standalone/.next/server/chunks/src_lib_a2a34aa6._.js +1 -1
- package/.next/standalone/.next/server/chunks/{src_lib_4751db31._.js → src_lib_dc72b90b._.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]__0eb5d21d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__83687057._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__85e7edfe._.js +3 -0
- 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]__c69baa4a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__f82e551e._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_051b1443._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0ae78458._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_400d0da3._.js → _1278164d._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_15e714f2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_2f20fbfc._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_4e720925._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_5aa55aa6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_8b68f69f._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_8d4b753e._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_976dfbab._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/_aab048d0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_be1ffbbf._.js +12 -0
- package/.next/standalone/.next/server/chunks/ssr/_c815e0e7._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/_e4c81263._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_a3d5f9bc._.js → _e5ee8977._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_f634ea15._.js +12 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_(main)_version-analysis_page_actions_479d49a7.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_(main)_version-management_page_actions_aea5ae93.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/{node_modules_a443e166._.js → node_modules_3b1fd8eb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_7680a21d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_bfffaa78._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_2e7afafc._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_cd0b182b._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_accessconfig_install_page_tsx_6f4ef3fc._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_dashboard_page_tsx_7eac7774._.js +1 -1
- 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)_modelconfig_registry_page_tsx_1ead2fd4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_quality_page_tsx_26bb8e80._.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_app_(main)_version-analysis_page_tsx_63ae8791._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_version-management_page_tsx_87fe0372._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_components_ui_select_tsx_4c0f64d8._.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/0257c68e82e9f2b0.js +1 -0
- package/.next/standalone/.next/static/chunks/{8754e0cf40813330.js → 06ac4297aa02f40a.js} +1 -1
- package/.next/standalone/.next/static/chunks/151b95e65092aa16.js +1 -0
- package/.next/standalone/.next/static/chunks/1624a1adcb73d784.js +1 -0
- package/.next/standalone/.next/static/chunks/1f173de64ad85757.js +10 -0
- package/.next/standalone/.next/static/chunks/{4dcd21eef469e66b.js → 2064add303799ffc.js} +1 -1
- package/.next/standalone/.next/static/chunks/2fb55cc737806639.js +1 -0
- package/.next/standalone/.next/static/chunks/3184105f3d2b47a1.js +10 -0
- package/.next/standalone/.next/static/chunks/379315313d164a57.js +1 -0
- package/.next/standalone/.next/static/chunks/39157b51ed6489eb.js +1 -0
- package/.next/standalone/.next/static/chunks/{dc22f906bd43e9a3.js → 46308ae9f83ac112.js} +3 -3
- package/.next/standalone/.next/static/chunks/4d2c017f2f4c9160.css +1 -0
- package/.next/standalone/.next/static/chunks/54538e1a80e53392.js +1 -0
- package/.next/standalone/.next/static/chunks/599fdc4cf6eb9e95.js +1 -0
- package/.next/standalone/.next/static/chunks/5be4d965983c6b40.js +6 -0
- package/.next/standalone/.next/static/chunks/63220d0acc5073cc.js +1 -0
- package/.next/standalone/.next/static/chunks/6da1d3424f804755.js +1 -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/8668d6f4c34d1e67.js +3 -0
- package/.next/standalone/.next/static/chunks/913c61f4f0a12da4.js +1 -0
- package/.next/standalone/.next/static/chunks/97822ca2c186f93d.js +1 -0
- package/.next/{static/chunks/96c7e2e47438553a.js → standalone/.next/static/chunks/98588c35b1e00bea.js} +1 -1
- package/.next/standalone/.next/static/chunks/a99fb4f44f9a41f3.js +1 -0
- package/.next/standalone/.next/static/chunks/b11e37b43e38eb95.js +1 -0
- package/.next/standalone/.next/static/chunks/b223106f6c610a67.js +1 -0
- package/.next/standalone/.next/static/chunks/cc9a7b6a8edabe81.js +1 -0
- package/.next/standalone/.next/static/chunks/cf0b4e5d7b804bf5.js +1 -0
- package/.next/standalone/.next/static/chunks/cfb3924a60d22c64.js +1 -0
- package/.next/standalone/.next/static/chunks/d15d7f6146b85000.js +1 -0
- package/.next/standalone/.next/static/chunks/dee90c3e29cd39bb.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/.next/static/chunks/{bf909bd0ff1898e4.js → f6954ae67d81050e.js} +1 -1
- package/.next/standalone/.next/static/chunks/fc7f5db841a7032a.js +1 -0
- package/.next/standalone/docker-compose.amd64.yml +2 -1
- package/.next/standalone/docker-compose.arm64.yml +11 -0
- package/.next/standalone/node_modules/.prisma/client/edge.js +26 -3
- package/.next/standalone/node_modules/.prisma/client/index-browser.js +23 -0
- package/.next/standalone/node_modules/.prisma/client/index.js +26 -3
- package/.next/standalone/node_modules/.prisma/client/package.json +1 -1
- package/.next/standalone/node_modules/.prisma/client/schema.prisma +39 -0
- package/.next/standalone/node_modules/.prisma/client/wasm.js +23 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/prisma/schema.prisma +38 -0
- package/.next/static/chunks/0257c68e82e9f2b0.js +1 -0
- package/.next/static/chunks/{8754e0cf40813330.js → 06ac4297aa02f40a.js} +1 -1
- package/.next/static/chunks/151b95e65092aa16.js +1 -0
- package/.next/static/chunks/1624a1adcb73d784.js +1 -0
- package/.next/static/chunks/1f173de64ad85757.js +10 -0
- package/.next/static/chunks/{4dcd21eef469e66b.js → 2064add303799ffc.js} +1 -1
- package/.next/static/chunks/2fb55cc737806639.js +1 -0
- package/.next/static/chunks/3184105f3d2b47a1.js +10 -0
- package/.next/static/chunks/379315313d164a57.js +1 -0
- package/.next/static/chunks/39157b51ed6489eb.js +1 -0
- package/.next/static/chunks/{dc22f906bd43e9a3.js → 46308ae9f83ac112.js} +3 -3
- package/.next/static/chunks/4d2c017f2f4c9160.css +1 -0
- package/.next/static/chunks/54538e1a80e53392.js +1 -0
- package/.next/static/chunks/599fdc4cf6eb9e95.js +1 -0
- package/.next/static/chunks/5be4d965983c6b40.js +6 -0
- package/.next/static/chunks/63220d0acc5073cc.js +1 -0
- package/.next/static/chunks/6da1d3424f804755.js +1 -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/8668d6f4c34d1e67.js +3 -0
- package/.next/static/chunks/913c61f4f0a12da4.js +1 -0
- package/.next/static/chunks/97822ca2c186f93d.js +1 -0
- package/.next/{standalone/.next/static/chunks/96c7e2e47438553a.js → static/chunks/98588c35b1e00bea.js} +1 -1
- package/.next/static/chunks/a99fb4f44f9a41f3.js +1 -0
- package/.next/static/chunks/b11e37b43e38eb95.js +1 -0
- package/.next/static/chunks/b223106f6c610a67.js +1 -0
- package/.next/static/chunks/cc9a7b6a8edabe81.js +1 -0
- package/.next/static/chunks/cf0b4e5d7b804bf5.js +1 -0
- package/.next/static/chunks/cfb3924a60d22c64.js +1 -0
- package/.next/static/chunks/d15d7f6146b85000.js +1 -0
- package/.next/static/chunks/dee90c3e29cd39bb.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/.next/static/chunks/{bf909bd0ff1898e4.js → f6954ae67d81050e.js} +1 -1
- package/.next/static/chunks/fc7f5db841a7032a.js +1 -0
- package/package.json +1 -1
- package/prisma/schema.prisma +38 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2574e6ed._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__2710fb53._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8cc92af1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d2e5f60._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd3dc3ab._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_6cb48964._.js +0 -32
- package/.next/standalone/.next/server/chunks/src_lib_a3155704._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_baaf83ef._.js +0 -29
- package/.next/standalone/.next/server/chunks/src_lib_bf0ee699._.js +0 -32
- package/.next/standalone/.next/server/chunks/src_lib_dbf3c792._.js +0 -29
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2ec2bb09._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3cb83dc3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c9cf8076._.js +0 -8
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__fc94ba06._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0141e5c7._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0acdaaae._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_231821bd._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_5d1f8671._.js +0 -12
- package/.next/standalone/.next/server/chunks/ssr/_8bba8b8d._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_96725836._.js +0 -12
- package/.next/standalone/.next/server/chunks/ssr/_b08dc931._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_c4db9cec._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_8bfa35b3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_30858f09._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_f1e06ad8._.js +0 -3
- package/.next/standalone/.next/static/chunks/0b6bd84bf10579a4.js +0 -10
- package/.next/standalone/.next/static/chunks/0bca64d67dceae3f.js +0 -1
- package/.next/standalone/.next/static/chunks/16047b19dda5c90d.js +0 -10
- package/.next/standalone/.next/static/chunks/3a0f454536f3ebc8.js +0 -1
- package/.next/standalone/.next/static/chunks/3d19f62114122bd3.js +0 -1
- package/.next/standalone/.next/static/chunks/3d6127f72467176d.js +0 -1
- package/.next/standalone/.next/static/chunks/44545e70bb7a33b8.js +0 -1
- package/.next/standalone/.next/static/chunks/4e52a5c5e332595a.js +0 -1
- package/.next/standalone/.next/static/chunks/6238734a2f04b1f9.js +0 -1
- package/.next/standalone/.next/static/chunks/66b23011cd8544ad.js +0 -1
- package/.next/standalone/.next/static/chunks/7a758615e3d35d6d.js +0 -1
- package/.next/standalone/.next/static/chunks/7a7dc24eed0484dc.js +0 -1
- package/.next/standalone/.next/static/chunks/7d4fa817c5229801.js +0 -1
- package/.next/standalone/.next/static/chunks/8f18a711543d804a.js +0 -1
- package/.next/standalone/.next/static/chunks/9155a6c07dc0502d.js +0 -6
- package/.next/standalone/.next/static/chunks/94fdb955b1dc512a.js +0 -1
- package/.next/standalone/.next/static/chunks/97b8d7ea5d04e2a2.js +0 -1
- package/.next/standalone/.next/static/chunks/a31bf4e176b5e90c.js +0 -3
- package/.next/standalone/.next/static/chunks/b9597989b5b0abd3.js +0 -1
- package/.next/standalone/.next/static/chunks/d170174df1128338.js +0 -1
- package/.next/standalone/.next/static/chunks/d91c2c0bbe0b59ab.js +0 -1
- package/.next/standalone/.next/static/chunks/e159d293fc72e91b.css +0 -1
- package/.next/standalone/.next/static/chunks/e45a4e085c7ce03c.js +0 -1
- package/.next/standalone/.next/static/chunks/efe225251ea151f0.js +0 -4
- package/.next/standalone/.next/static/chunks/ffd21617593aaafd.js +0 -1
- package/.next/static/chunks/0b6bd84bf10579a4.js +0 -10
- package/.next/static/chunks/0bca64d67dceae3f.js +0 -1
- package/.next/static/chunks/16047b19dda5c90d.js +0 -10
- package/.next/static/chunks/3a0f454536f3ebc8.js +0 -1
- package/.next/static/chunks/3d19f62114122bd3.js +0 -1
- package/.next/static/chunks/3d6127f72467176d.js +0 -1
- package/.next/static/chunks/44545e70bb7a33b8.js +0 -1
- package/.next/static/chunks/4e52a5c5e332595a.js +0 -1
- package/.next/static/chunks/6238734a2f04b1f9.js +0 -1
- package/.next/static/chunks/66b23011cd8544ad.js +0 -1
- package/.next/static/chunks/7a758615e3d35d6d.js +0 -1
- package/.next/static/chunks/7a7dc24eed0484dc.js +0 -1
- package/.next/static/chunks/7d4fa817c5229801.js +0 -1
- package/.next/static/chunks/8f18a711543d804a.js +0 -1
- package/.next/static/chunks/9155a6c07dc0502d.js +0 -6
- package/.next/static/chunks/94fdb955b1dc512a.js +0 -1
- package/.next/static/chunks/97b8d7ea5d04e2a2.js +0 -1
- package/.next/static/chunks/a31bf4e176b5e90c.js +0 -3
- package/.next/static/chunks/b9597989b5b0abd3.js +0 -1
- package/.next/static/chunks/d170174df1128338.js +0 -1
- package/.next/static/chunks/d91c2c0bbe0b59ab.js +0 -1
- package/.next/static/chunks/e159d293fc72e91b.css +0 -1
- package/.next/static/chunks/e45a4e085c7ce03c.js +0 -1
- package/.next/static/chunks/efe225251ea151f0.js +0 -4
- package/.next/static/chunks/ffd21617593aaafd.js +0 -1
- /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_ssgManifest.js +0 -0
- /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_buildManifest.js +0 -0
- /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{iE8084jR9Kgb7Bhs3Xokh → pzAy0mrZCL0PmE4h3HDut}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[814069,e=>{"use strict";var t=e.i(902157),a=e.i(750227);function r(e,n={}){let s=n.maxAgeMs??432e5,i=n.maxTotalBytes??0x10000000,o=n.maxFileBytes??0x4000000,l=n.maxDayDirs??3,u=n.nowMs??Date.now(),d=new Map,c=0,p=0,m=0,f=(e,t)=>{if(!e)return;let a=d.get(e)||{hasShutdown:!1,pids:new Set};t.hasShutdown&&(a.hasShutdown=!0),t.pid&&Number.isFinite(t.pid)&&t.pid>0&&a.pids.add(t.pid),d.set(e,a)};if(!t.default.existsSync(e))return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m};let g=u-s,y=i,h=[];try{h=t.default.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(t=>a.default.join(e,t.name)).sort().reverse().slice(0,l)}catch{return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m}}let w=[];for(let e of h){let r;try{r=t.default.readdirSync(e).filter(e=>e.endsWith(".jsonl"))}catch{continue}for(let n of r){let r,s=a.default.join(e,n);try{r=t.default.statSync(s)}catch{continue}if(r.mtimeMs<g){c++;continue}w.push({file:s,mtimeMs:r.mtimeMs,size:r.size})}}for(let e of(w.sort((e,t)=>t.mtimeMs-e.mtimeMs),w)){if(e.size>o||e.size>y){c++;continue}y-=e.size;let a="";try{a=t.default.readFileSync(e.file,"utf8")}catch{c++;continue}p++,m+=e.size;let r=null;for(let e of a.split("\n")){if(!e.trim())continue;if(e.includes('"kind":"plugin.start"')){let t=e.match(/"pid":\s*(\d+)/),a=t?Number(t[1]):0;Number.isFinite(a)&&a>0&&(r=a);continue}if(!e.includes('"sessionID"'))continue;let t=e.includes('"kind":"plugin.shutdown"');for(let a of e.matchAll(/"sessionID":"([^"]+)"/g))f(a[1],{hasShutdown:t,pid:r||void 0})}}return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m}}e.s(["buildOpencodeTelemetryIndex",()=>r])},230031,e=>e.a(async(t,a)=>{try{var r=e.i(948594),n=e.i(854763),s=e.i(89171),i=e.i(826917),o=e.i(125997),l=e.i(814069),u=e.i(522734),d=e.i(446786),c=e.i(814747),p=t([r,n,o]);[r,n,o]=p.then?(await p)():p;let S=new Map,E=null;function m(e){if(null==e)return null;if(e instanceof Date)return e.getTime();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 f(e,t){let a=Number.parseInt(String(e||""),10);return!Number.isFinite(a)||a<=0?t:a}function g(e){let t,a=(t=m(e),null!=t&&t>0?new Date(t).toISOString():null);return a?{traceStatus:"success",traceCompletedAt:a,traceStatusReason:"session-ended"}:{traceStatus:"running",traceCompletedAt:null,traceStatusReason:"missing-completion-signal"}}function y(e){if(!Number.isFinite(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}let x=new Set(["claudecode","jiuwenswarm","opencode","hermes"]);function h(e){return e.some(e=>{let t=String(e?.role||"").toLowerCase();return("assistant"===t||"subagent"===t)&&!!String(e?.content||"").trim()})}function w(e){let t=String(e.framework??"").toLowerCase();if(!x.has(t)||e.explicitCompleted)return null;let a=e.latestActivityMs||0;return!e.quietLongEnough||a<=0?null:new Date(a).toISOString()}async function R(e,t){var a;let r,s,i=String(e.framework??"").toLowerCase(),p=!!String(e.final_result??e.finalResult??"").trim();if(!p&&!x.has(i))return{autoEvalReady:!1,autoEvalWaitReason:"missing-final-result",traceLastActivityAt:null,traceCompletedAt:null};let f=String(e.task_id||e.taskId||e.upload_id||e.id||"").trim(),g=null;if(f)try{g=await n.db.findSessionByTaskId(f)}catch(e){console.warn(`[Data-API] Failed to load session for auto-eval readiness: ${f}`,e)}let R=function(e){if(Array.isArray(e))return e;if("string"!=typeof e||!e.trim())return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}(g?.interactions);if(!p&&!h(R))return{autoEvalReady:!1,autoEvalWaitReason:"missing-final-result",traceLastActivityAt:null,traceCompletedAt:null};let v=(a=e.timestamp,r=R.reduce((e,t)=>Math.max(e,Math.max(m(t.timeInfo?.completed)||0,m(t.timeInfo?.created)||0,m(t.timing?.completed_at)||0,m(t.timing?.started_at)||0,m(t.completedAt)||0,m(t.completed_at)||0,m(t.timestamp)||0,m(t.createdAt)||0)),0),Math.max(r,m(a)||0)),_=m(g?.endTime),A=(s=Number(process.env.AUTO_EVAL_TRACE_STABLE_MS),Number.isFinite(s)&&s>=0?s:6e4),k=v>0&&Date.now()-v>=A,I=null!=_&&_>0,b="opencode"!==i||I?null:function(e){let t=S.get(e);if(t&&t.expiresAt>Date.now())return t.value;let a=t=>(S.set(e,{value:t,expiresAt:Date.now()+1e4}),t);if(!e)return a(null);let r=(function(){if(E&&E.expiresAt>Date.now())return E.sessions;let{sessions:e,skippedFiles:t,scannedBytes:a}=(0,l.buildOpencodeTelemetryIndex)(process.env.AGENT_INSIGHT_OPENCODE_SPOOL_DIR||c.default.join(d.default.homedir(),u.default.existsSync(c.default.join(d.default.homedir(),".agent-insight"))?".agent-insight":".skill-insight","otel_data","opencode"));return t>0&&console.warn(`[Data-API] opencode 遥测索引:跳过 ${t} 个超龄/超预算/超大文件(已扫 ${Math.round(a/1024/1024)}MB,防 OOM)`),E={expiresAt:Date.now()+3e4,sessions:e},e})().get(e);return a(r?!!r.hasShutdown||(0===r.pids.size?null:!Array.from(r.pids).some(y)&&!0):null)}(f);if("opencode"===i&&!I&&!0===b&&f)try{await n.db.updateSession(f,{endTime:new Date}),(0,o.triggerTrajectoryAutoWatchForTask)(String(e.user||""),f,t)}catch(e){console.warn(`[Data-API] Failed to persist inferred opencode completion for ${f}`,e)}let N=x.has(i)&&k,D=I||!0===b||N;return{autoEvalReady:D,autoEvalWaitReason:D?null:v>0?"trace-still-active":"missing-trace-activity",traceLastActivityAt:v>0?new Date(v).toISOString():null,traceCompletedAt:null!=_&&_>0?new Date(_).toISOString():!0===b?new Date().toISOString():w({framework:i,explicitCompleted:I,latestActivityMs:v,quietLongEnough:k})}}async function v(e){try{let t,{searchParams:a}=new URL(e.url),o=a.get("user")||void 0,l=a.get("query")||void 0,u=a.get("taskId")||void 0,d=a.get("executionId")||void 0,c=a.get("parentExecutionId")||void 0,p=(a.get("taskIds")||"").split(",").map(e=>e.trim()).filter(Boolean).slice(0,200),m=a.get("framework")||void 0,y=a.get("skill")||void 0,h=a.get("agentName")||void 0,w=a.get("summary")||void 0,v="1"===a.get("paginated")||"true"===a.get("paginated"),_="light"===a.get("fields")||"1"===a.get("lightweight"),A=f(a.get("page"),1),S=Math.min(f(a.get("pageSize"),20),100),E=a.get("includeEvaluations"),k="1"===a.get("skipAutoEvalReady")||"true"===a.get("skipAutoEvalReady"),I="1"===a.get("includeSubagents")||"true"===a.get("includeSubagents"),b="1"===a.get("onlySubagents")||"true"===a.get("onlySubagents"),N=a.get("skillVersion"),D=N?parseInt(N,10):void 0,C="1"===E||"true"===E,j=a.get("facet")||void 0;if("skills"===j)return s.NextResponse.json(await (0,r.listObservedSkills)(o));if("values"===j){let e=a.get("column")||"";return s.NextResponse.json(await (0,r.listObservedFieldValues)(e,o))}if(d){let e=await n.db.findExecutionById(d);if(!e)return s.NextResponse.json([]);return s.NextResponse.json([{upload_id:e.id,task_id:e.taskId,framework:e.framework,agentName:e.agentName,timestamp:e.timestamp,final_result:e.finalResult??null,is_subagent:e.isSubagent??!1,parent_execution_id:e.parentExecutionId??null,root_execution_id:e.rootExecutionId??null,agent_session_id:e.agentSessionId??null,subagent_type:e.subagentType??null,subagent_name:e.subagentName??null}])}if("agents"===w){let e=await (0,r.listObservedAgentNames)(o);return s.NextResponse.json({agents:e})}if("traceIds"===w){let e=await (0,r.listObservedTraceIds)(o,h);return s.NextResponse.json({traceIds:e})}let T=a.get("filters");if(T)try{let e=JSON.parse(T);Array.isArray(e)&&(t=e)}catch{}let O={query:l,taskId:u,taskIds:p.length>0?p:void 0,agentName:h,framework:m,skill:y,skillVersion:D,includeSubagents:I,onlySubagents:b,parentExecutionId:c,clauses:t},P=v?await (0,r.readRecordPage)(o,O,{attachEvaluations:C,page:A,pageSize:S,lightweight:_}):null,M=P?P.records:await (0,r.readRecords)(o,O,{attachEvaluations:C,lightweight:_}),q=Array.from(new Set(M.map(e=>e.task_id||e.upload_id||"").filter(Boolean))),F=new Map;if(q.length>0)try{for(let e of(await n.prismaRaw.session.findMany({where:{taskId:{in:q}},select:{taskId:!0,endTime:!0}})))F.set(e.taskId,e.endTime)}catch(e){console.warn("[Data-API] failed to fetch session lifecycle status:",e?.message)}let $=new Map;if(o&&q.length>0)try{for(let e of(await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:o,taskId:{in:q}},orderBy:{createdAt:"desc"},select:{taskId:!0,status:!0,errorMessage:!0,trajectoryScore:!0}})))e.taskId&&!$.has(e.taskId)&&$.set(e.taskId,{status:e.status,errorMessage:e.errorMessage,trajectoryScore:"number"==typeof e.trajectoryScore?e.trajectoryScore:null})}catch(e){console.warn("[Data-API] failed to fetch last eval status:",e?.message)}let U=await Promise.all(M.map(async t=>{let a=t.task_id||t.upload_id||"",r=!!o&&!!a&&(0,i.isActive)(o,a),n=a?$.get(a):null,s=n?.status??null,l=n?.errorMessage??null,u=g(a?F.get(a):null),d=n?.trajectoryScore??null;if(k){let a="success"===u.traceStatus?u:x.has(String(t.framework??"").toLowerCase())?g((await R(t,new URL(e.url).origin)).traceCompletedAt):u;return{...t,is_evaluating:r,last_eval_status:s,last_eval_error:l,trajectory_score:d,trajectoryScore:d,trace_status:a.traceStatus,traceStatus:a.traceStatus,trace_completed_at:a.traceCompletedAt,traceCompletedAt:a.traceCompletedAt,trace_status_reason:a.traceStatusReason,traceStatusReason:a.traceStatusReason}}let c=await R(t,new URL(e.url).origin),p="success"===u.traceStatus?u:g(c.traceCompletedAt);return{...t,is_evaluating:r,last_eval_status:s,last_eval_error:l,trajectory_score:d,trajectoryScore:d,trace_status:p.traceStatus,traceStatus:p.traceStatus,trace_completed_at:p.traceCompletedAt,traceCompletedAt:p.traceCompletedAt,trace_status_reason:p.traceStatusReason,traceStatusReason:p.traceStatusReason,auto_eval_ready:c.autoEvalReady,autoEvalReady:c.autoEvalReady,auto_eval_wait_reason:c.autoEvalWaitReason,trace_last_activity_at:c.traceLastActivityAt}}));if(U.length>0&&console.log(`[Data-API] 📤 Sending ${U.length} records. Top record skills: ${JSON.stringify(U[0].skills)}, is_evaluating: ${U[0].is_evaluating}`),P)return s.NextResponse.json({records:U,total:P.total,page:A,pageSize:S});return s.NextResponse.json(U)}catch(e){return console.error("Read Data Error:",e),s.NextResponse.json({error:"Failed to read data"},{status:500})}}async function _(e){try{let t=await e.json();console.log("[Data-API] 🗑️ Delete request:",{upload_id:t.upload_id,task_id:t.task_id,timestamp:t.timestamp,framework:t.framework,query:t.query?.substring(0,50)});let a=0;if(t.upload_id){console.warn(`[Data-API] delete requested: upload_id=${t.upload_id}`);let e=await n.db.deleteExecution(t.upload_id);a=+!!e,console.log(`[Data-API] 🗑️ Deleted by upload_id: ${t.upload_id}, success: ${e}`)}else t.task_id?(console.warn(`[Data-API] delete requested: task_id=${t.task_id}`),a=await n.db.deleteExecutions({taskId:t.task_id}),console.log(`[Data-API] 🗑️ Deleted by task_id: ${t.task_id}, count: ${a}`)):t.timestamp&&t.framework&&t.query?(console.warn(`[Data-API] delete requested: timestamp=${t.timestamp} framework=${t.framework} query_len=${String(t.query).length}`),a=await n.db.deleteExecutions({timestamp:new Date(t.timestamp),framework:t.framework,query:t.query}),console.log(`[Data-API] 🗑️ Deleted by composite key, count: ${a}`)):console.log("[Data-API] ⚠️ No valid delete criteria provided");return console.log(`[Data-API] ✅ Delete completed, total deleted: ${a}`),s.NextResponse.json({success:!0,count:a})}catch(e){return console.error("[Data-API] ❌ Delete Error:",e),s.NextResponse.json({error:"Failed to delete"},{status:500})}}async function A(e){try{let{task_id:t,upload_id:a,query:i,user_feedback:o,label:l,final_result:u}=await e.json();if(!t&&!a)return s.NextResponse.json({error:"task_id or upload_id is required"},{status:400});if(void 0!==o){let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,user_feedback:o,force_judgment:!1});return s.NextResponse.json({success:e.success,record:e.record,message:"用户反馈已更新"})}if(void 0!==l){let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,label:l,force_judgment:!1});return s.NextResponse.json({success:e.success,record:e.record,message:"Label 已更新"})}if("string"==typeof i){if(!i.trim())return s.NextResponse.json({error:"query must be a non-empty string"},{status:400});let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,query:i.trim(),skip_evaluation:!0,force_query_update:!0});return s.NextResponse.json({success:e.success,record:e.record,message:"Query 已更新"})}if("string"==typeof u){let e=a||t;if(!e)return s.NextResponse.json({error:"upload_id or task_id is required"},{status:400});try{return await n.db.upsertExecution({where:{id:e},create:{id:e,taskId:t,finalResult:u.trim(),judgmentReason:"结果评估中..."},update:{finalResult:u.trim(),judgmentReason:"结果评估中..."}}),(0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,final_result:u.trim(),force_judgment:!0}).catch(e=>{console.error("[Background Re-judgment Error]",e)}),s.NextResponse.json({success:!0,message:"Final Result 已保存,正在后台重新评估"})}catch(e){return console.error("Update Final Result Error:",e),s.NextResponse.json({error:"Failed to update final result"},{status:500})}}return s.NextResponse.json({error:"No valid fields to update"},{status:400})}catch(e){return console.error("Patch/Update Data Error:",e),s.NextResponse.json({error:"Failed to update data"},{status:500})}}e.s(["DELETE",()=>_,"GET",()=>v,"PATCH",()=>A,"QUIET_WINDOW_INFERRED_FRAMEWORKS",0,x,"dynamic",0,"force-dynamic","hasAssistantOutput",()=>h,"inferQuietWindowTraceCompletedAt",()=>w]),a()}catch(e){a(e)}},!1),208881,e=>e.a(async(t,a)=>{try{var r=e.i(747909),n=e.i(174017),s=e.i(996250),i=e.i(759756),o=e.i(561916),l=e.i(174677),u=e.i(869741),d=e.i(316795),c=e.i(487718),p=e.i(995169),m=e.i(47587),f=e.i(666012),g=e.i(570101),y=e.i(626937),h=e.i(10372),w=e.i(193695);e.i(52474);var R=e.i(600220),v=e.i(230031),_=t([v]);[v]=_.then?(await _)():_;let E=new r.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/observe/data/route",pathname:"/api/observe/data",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/observe/data/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:x,workUnitAsyncStorage:k,serverHooks:I}=E;function A(){return(0,s.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:k})}async function S(e,t,a){E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/observe/data/route";r=r.replace(/\/index$/,"")||"/";let s=await E.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,params:_,nextConfig:A,parsedUrl:S,isDraftMode:x,prerenderManifest:k,routerServerContext:I,isOnDemandRevalidate:b,revalidateOnlyGenerated:N,resolvedPathname:D,clientReferenceManifest:C,serverActionsManifest:j}=s,T=(0,u.normalizeAppPath)(r),O=!!(k.dynamicRoutes[T]||k.routes[D]),P=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,S,!1):t.end("This page could not be found"),null);if(O&&!x){let e=!!k.routes[D],t=k.dynamicRoutes[T];if(t&&!1===t.fallback&&!e){if(A.experimental.adapterPath)return await P();throw new w.NoFallbackError}}let M=null;!O||E.isDev||x||(M=D,M="/index"===M?"/":M);let q=!0===E.isDev||!O,F=O&&!q;j&&C&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:C,serverActionsManifest:j});let $=e.method||"GET",U=(0,o.getTracer)(),L=U.getActiveScopeSpan(),H={params:_,prerenderManifest:k,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts},cacheComponents:!!A.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:A.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>E.onRequestError(e,t,r,n,I)},sharedContext:{buildId:v}},B=new d.NodeNextRequest(e),W=new d.NodeNextResponse(t),z=c.NextRequestAdapter.fromNodeNextRequest(B,(0,c.signalFromNodeResponse)(t));try{let s=async e=>E.handle(z,H).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=U.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route");if(n){let t=`${$} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${r}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),u=async i=>{var o,u;let d=async({previousCacheEntry:n})=>{try{if(!l&&b&&N&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await s(i);e.fetchMetrics=H.renderOpts.fetchMetrics;let o=H.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let u=H.renderOpts.collectedTags;if(!O)return await (0,f.sendResponse)(B,W,r,H.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==H.renderOpts.collectedRevalidate&&!(H.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&H.renderOpts.collectedRevalidate,n=void 0===H.renderOpts.collectedExpire||H.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:H.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:b})},!1,I),t}},c=await E.handleResponse({req:e,nextConfig:A,cacheKey:M,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:b,revalidateOnlyGenerated:N,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:l});if(!O)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(u=c.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",b?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,g.fromNodeOutgoingHttpHeaders)(c.value.headers);return l&&O||p.delete(h.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(c.cacheControl)),await (0,f.sendResponse)(B,W,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};L?await u(L):await U.withPropagatedContext(e.headers,()=>U.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${r}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},u))}catch(t){if(t instanceof w.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:T,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:b})},!1,I),O)throw t;return await (0,f.sendResponse)(B,W,new Response(null,{status:500})),null}}e.s(["handler",()=>S,"patchFetch",()=>A,"routeModule",()=>E,"serverHooks",()=>I,"workAsyncStorage",()=>x,"workUnitAsyncStorage",()=>k]),a()}catch(e){a(e)}},!1)];
|
|
1
|
+
module.exports=[814069,e=>{"use strict";var t=e.i(902157),a=e.i(750227);function r(e,n={}){let s=n.maxAgeMs??432e5,i=n.maxTotalBytes??0x10000000,o=n.maxFileBytes??0x4000000,l=n.maxDayDirs??3,u=n.nowMs??Date.now(),d=new Map,c=0,p=0,m=0,f=(e,t)=>{if(!e)return;let a=d.get(e)||{hasShutdown:!1,pids:new Set};t.hasShutdown&&(a.hasShutdown=!0),t.pid&&Number.isFinite(t.pid)&&t.pid>0&&a.pids.add(t.pid),d.set(e,a)};if(!t.default.existsSync(e))return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m};let g=u-s,y=i,h=[];try{h=t.default.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(t=>a.default.join(e,t.name)).sort().reverse().slice(0,l)}catch{return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m}}let w=[];for(let e of h){let r;try{r=t.default.readdirSync(e).filter(e=>e.endsWith(".jsonl"))}catch{continue}for(let n of r){let r,s=a.default.join(e,n);try{r=t.default.statSync(s)}catch{continue}if(r.mtimeMs<g){c++;continue}w.push({file:s,mtimeMs:r.mtimeMs,size:r.size})}}for(let e of(w.sort((e,t)=>t.mtimeMs-e.mtimeMs),w)){if(e.size>o||e.size>y){c++;continue}y-=e.size;let a="";try{a=t.default.readFileSync(e.file,"utf8")}catch{c++;continue}p++,m+=e.size;let r=null;for(let e of a.split("\n")){if(!e.trim())continue;if(e.includes('"kind":"plugin.start"')){let t=e.match(/"pid":\s*(\d+)/),a=t?Number(t[1]):0;Number.isFinite(a)&&a>0&&(r=a);continue}if(!e.includes('"sessionID"'))continue;let t=e.includes('"kind":"plugin.shutdown"');for(let a of e.matchAll(/"sessionID":"([^"]+)"/g))f(a[1],{hasShutdown:t,pid:r||void 0})}}return{sessions:d,skippedFiles:c,scannedFiles:p,scannedBytes:m}}e.s(["buildOpencodeTelemetryIndex",()=>r])},230031,e=>e.a(async(t,a)=>{try{var r=e.i(948594),n=e.i(854763),s=e.i(89171),i=e.i(826917),o=e.i(125997),l=e.i(814069),u=e.i(75539),d=e.i(522734),c=e.i(446786),p=e.i(814747),m=t([r,n,o,u]);[r,n,o,u]=m.then?(await m)():m;let x=new Map,E=null;function f(e){if(null==e)return null;if(e instanceof Date)return e.getTime();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 g(e,t){let a=Number.parseInt(String(e||""),10);return!Number.isFinite(a)||a<=0?t:a}function y(e){let t,a=(t=f(e),null!=t&&t>0?new Date(t).toISOString():null);return a?{traceStatus:"success",traceCompletedAt:a,traceStatusReason:"session-ended"}:{traceStatus:"running",traceCompletedAt:null,traceStatusReason:"missing-completion-signal"}}function h(e){if(!Number.isFinite(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}let k=new Set(["claudecode","jiuwenswarm","opencode","hermes"]);function w(e){return e.some(e=>{let t=String(e?.role||"").toLowerCase();return("assistant"===t||"subagent"===t)&&!!String(e?.content||"").trim()})}function R(e){let t=String(e.framework??"").toLowerCase();if(!k.has(t)||e.explicitCompleted)return null;let a=e.latestActivityMs||0;return!e.quietLongEnough||a<=0?null:new Date(a).toISOString()}async function v(e,t){var a;let r,s,i=String(e.framework??"").toLowerCase(),u=!!String(e.final_result??e.finalResult??"").trim();if(!u&&!k.has(i))return{autoEvalReady:!1,autoEvalWaitReason:"missing-final-result",traceLastActivityAt:null,traceCompletedAt:null};let m=String(e.task_id||e.taskId||e.upload_id||e.id||"").trim(),g=null;if(m)try{g=await n.db.findSessionByTaskId(m)}catch(e){console.warn(`[Data-API] Failed to load session for auto-eval readiness: ${m}`,e)}let y=function(e){if(Array.isArray(e))return e;if("string"!=typeof e||!e.trim())return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}(g?.interactions);if(!u&&!w(y))return{autoEvalReady:!1,autoEvalWaitReason:"missing-final-result",traceLastActivityAt:null,traceCompletedAt:null};let v=(a=e.timestamp,r=y.reduce((e,t)=>Math.max(e,Math.max(f(t.timeInfo?.completed)||0,f(t.timeInfo?.created)||0,f(t.timing?.completed_at)||0,f(t.timing?.started_at)||0,f(t.completedAt)||0,f(t.completed_at)||0,f(t.timestamp)||0,f(t.createdAt)||0)),0),Math.max(r,f(a)||0)),_=f(g?.endTime),A=(s=Number(process.env.AUTO_EVAL_TRACE_STABLE_MS),Number.isFinite(s)&&s>=0?s:6e4),S=v>0&&Date.now()-v>=A,I=null!=_&&_>0,b="opencode"!==i||I?null:function(e){let t=x.get(e);if(t&&t.expiresAt>Date.now())return t.value;let a=t=>(x.set(e,{value:t,expiresAt:Date.now()+1e4}),t);if(!e)return a(null);let r=(function(){if(E&&E.expiresAt>Date.now())return E.sessions;let{sessions:e,skippedFiles:t,scannedBytes:a}=(0,l.buildOpencodeTelemetryIndex)(process.env.AGENT_INSIGHT_OPENCODE_SPOOL_DIR||p.default.join(c.default.homedir(),d.default.existsSync(p.default.join(c.default.homedir(),".agent-insight"))?".agent-insight":".skill-insight","otel_data","opencode"));return t>0&&console.warn(`[Data-API] opencode 遥测索引:跳过 ${t} 个超龄/超预算/超大文件(已扫 ${Math.round(a/1024/1024)}MB,防 OOM)`),E={expiresAt:Date.now()+3e4,sessions:e},e})().get(e);return a(r?!!r.hasShutdown||(0===r.pids.size?null:!Array.from(r.pids).some(h)&&!0):null)}(m);if("opencode"===i&&!I&&!0===b&&m)try{await n.db.updateSession(m,{endTime:new Date}),(0,o.triggerTrajectoryAutoWatchForTask)(String(e.user||""),m,t)}catch(e){console.warn(`[Data-API] Failed to persist inferred opencode completion for ${m}`,e)}let N=k.has(i)&&S,D=I||!0===b||N;return{autoEvalReady:D,autoEvalWaitReason:D?null:v>0?"trace-still-active":"missing-trace-activity",traceLastActivityAt:v>0?new Date(v).toISOString():null,traceCompletedAt:null!=_&&_>0?new Date(_).toISOString():!0===b?new Date().toISOString():R({framework:i,explicitCompleted:I,latestActivityMs:v,quietLongEnough:S})}}async function _(e){try{let t,{searchParams:a}=new URL(e.url),o=a.get("user")||void 0,l=a.get("query")||void 0,d=a.get("taskId")||void 0,c=a.get("executionId")||void 0,p=a.get("parentExecutionId")||void 0,m=(a.get("taskIds")||"").split(",").map(e=>e.trim()).filter(Boolean).slice(0,200),f=a.get("framework")||void 0,h=a.get("skill")||void 0,w=a.get("agentName")||void 0,R=a.get("summary")||void 0,_="1"===a.get("paginated")||"true"===a.get("paginated"),A="light"===a.get("fields")||"1"===a.get("lightweight"),S=g(a.get("page"),1),x=Math.min(g(a.get("pageSize"),20),100),E=a.get("includeEvaluations"),I="1"===a.get("skipAutoEvalReady")||"true"===a.get("skipAutoEvalReady"),b="1"===a.get("includeSubagents")||"true"===a.get("includeSubagents"),N="1"===a.get("onlySubagents")||"true"===a.get("onlySubagents"),D=a.get("skillVersion"),C=D?parseInt(D,10):void 0,T="1"===E||"true"===E,j="1"===a.get("includeTags")||"true"===a.get("includeTags"),O=(a.get("bizTag")||"").split(",").map(e=>e.trim()).filter(Boolean).slice(0,50),P=a.get("facet")||void 0;if("skills"===P)return s.NextResponse.json(await (0,r.listObservedSkills)(o));if("tags"===P)return s.NextResponse.json(await (0,u.listTraceTags)(o||"",a.get("kind")));if("values"===P){let e=a.get("column")||"";return s.NextResponse.json(await (0,r.listObservedFieldValues)(e,o))}if(c){let e=await n.db.findExecutionById(c);if(!e)return s.NextResponse.json([]);return s.NextResponse.json([{upload_id:e.id,task_id:e.taskId,framework:e.framework,agentName:e.agentName,timestamp:e.timestamp,final_result:e.finalResult??null,is_subagent:e.isSubagent??!1,parent_execution_id:e.parentExecutionId??null,root_execution_id:e.rootExecutionId??null,agent_session_id:e.agentSessionId??null,subagent_type:e.subagentType??null,subagent_name:e.subagentName??null}])}if("agents"===R){let e=await (0,r.listObservedAgentNames)(o);return s.NextResponse.json({agents:e})}if("traceIds"===R){let e=await (0,r.listObservedTraceIds)(o,w);return s.NextResponse.json({traceIds:e})}let M=a.get("filters");if(M)try{let e=JSON.parse(M);Array.isArray(e)&&(t=e)}catch{}let q={query:l,taskId:d,taskIds:m.length>0?m:void 0,agentName:w,framework:f,skill:h,skillVersion:C,includeSubagents:b,onlySubagents:N,parentExecutionId:p,clauses:t,businessTagIds:O.length>0?O:void 0},F=_?await (0,r.readRecordPage)(o,q,{attachEvaluations:T,page:S,pageSize:x,lightweight:A,includeTags:j}):null,$=F?F.records:await (0,r.readRecords)(o,q,{attachEvaluations:T,lightweight:A,includeTags:j}),U=Array.from(new Set($.map(e=>e.task_id||e.upload_id||"").filter(Boolean))),L=new Map;if(U.length>0)try{for(let e of(await n.prismaRaw.session.findMany({where:{taskId:{in:U}},select:{taskId:!0,endTime:!0}})))L.set(e.taskId,e.endTime)}catch(e){console.warn("[Data-API] failed to fetch session lifecycle status:",e?.message)}let H=new Map;if(o&&U.length>0)try{for(let e of(await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:o,taskId:{in:U}},orderBy:{createdAt:"desc"},select:{taskId:!0,status:!0,errorMessage:!0,trajectoryScore:!0}})))e.taskId&&!H.has(e.taskId)&&H.set(e.taskId,{status:e.status,errorMessage:e.errorMessage,trajectoryScore:"number"==typeof e.trajectoryScore?e.trajectoryScore:null})}catch(e){console.warn("[Data-API] failed to fetch last eval status:",e?.message)}let B=await Promise.all($.map(async t=>{let a=t.task_id||t.upload_id||"",r=!!o&&!!a&&(0,i.isActive)(o,a),n=a?H.get(a):null,s=n?.status??null,l=n?.errorMessage??null,u=y(a?L.get(a):null),d=n?.trajectoryScore??null;if(I){let a="success"===u.traceStatus?u:k.has(String(t.framework??"").toLowerCase())?y((await v(t,new URL(e.url).origin)).traceCompletedAt):u;return{...t,is_evaluating:r,last_eval_status:s,last_eval_error:l,trajectory_score:d,trajectoryScore:d,trace_status:a.traceStatus,traceStatus:a.traceStatus,trace_completed_at:a.traceCompletedAt,traceCompletedAt:a.traceCompletedAt,trace_status_reason:a.traceStatusReason,traceStatusReason:a.traceStatusReason}}let c=await v(t,new URL(e.url).origin),p="success"===u.traceStatus?u:y(c.traceCompletedAt);return{...t,is_evaluating:r,last_eval_status:s,last_eval_error:l,trajectory_score:d,trajectoryScore:d,trace_status:p.traceStatus,traceStatus:p.traceStatus,trace_completed_at:p.traceCompletedAt,traceCompletedAt:p.traceCompletedAt,trace_status_reason:p.traceStatusReason,traceStatusReason:p.traceStatusReason,auto_eval_ready:c.autoEvalReady,autoEvalReady:c.autoEvalReady,auto_eval_wait_reason:c.autoEvalWaitReason,trace_last_activity_at:c.traceLastActivityAt}}));if(B.length>0&&console.log(`[Data-API] 📤 Sending ${B.length} records. Top record skills: ${JSON.stringify(B[0].skills)}, is_evaluating: ${B[0].is_evaluating}`),F)return s.NextResponse.json({records:B,total:F.total,page:S,pageSize:x});return s.NextResponse.json(B)}catch(e){return console.error("Read Data Error:",e),s.NextResponse.json({error:"Failed to read data"},{status:500})}}async function A(e){try{let t=await e.json();console.log("[Data-API] 🗑️ Delete request:",{upload_id:t.upload_id,task_id:t.task_id,timestamp:t.timestamp,framework:t.framework,query:t.query?.substring(0,50)});let a=0;if(t.upload_id){console.warn(`[Data-API] delete requested: upload_id=${t.upload_id}`);let e=await n.db.deleteExecution(t.upload_id);a=+!!e,console.log(`[Data-API] 🗑️ Deleted by upload_id: ${t.upload_id}, success: ${e}`)}else t.task_id?(console.warn(`[Data-API] delete requested: task_id=${t.task_id}`),a=await n.db.deleteExecutions({taskId:t.task_id}),console.log(`[Data-API] 🗑️ Deleted by task_id: ${t.task_id}, count: ${a}`)):t.timestamp&&t.framework&&t.query?(console.warn(`[Data-API] delete requested: timestamp=${t.timestamp} framework=${t.framework} query_len=${String(t.query).length}`),a=await n.db.deleteExecutions({timestamp:new Date(t.timestamp),framework:t.framework,query:t.query}),console.log(`[Data-API] 🗑️ Deleted by composite key, count: ${a}`)):console.log("[Data-API] ⚠️ No valid delete criteria provided");return console.log(`[Data-API] ✅ Delete completed, total deleted: ${a}`),s.NextResponse.json({success:!0,count:a})}catch(e){return console.error("[Data-API] ❌ Delete Error:",e),s.NextResponse.json({error:"Failed to delete"},{status:500})}}async function S(e){try{let{task_id:t,upload_id:a,query:i,user_feedback:o,label:l,final_result:u}=await e.json();if(!t&&!a)return s.NextResponse.json({error:"task_id or upload_id is required"},{status:400});if(void 0!==o){let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,user_feedback:o,force_judgment:!1});return s.NextResponse.json({success:e.success,record:e.record,message:"用户反馈已更新"})}if(void 0!==l){let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,label:l,force_judgment:!1});return s.NextResponse.json({success:e.success,record:e.record,message:"Label 已更新"})}if("string"==typeof i){if(!i.trim())return s.NextResponse.json({error:"query must be a non-empty string"},{status:400});let e=await (0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,query:i.trim(),skip_evaluation:!0,force_query_update:!0});return s.NextResponse.json({success:e.success,record:e.record,message:"Query 已更新"})}if("string"==typeof u){let e=a||t;if(!e)return s.NextResponse.json({error:"upload_id or task_id is required"},{status:400});try{return await n.db.upsertExecution({where:{id:e},create:{id:e,taskId:t,finalResult:u.trim(),judgmentReason:"结果评估中..."},update:{finalResult:u.trim(),judgmentReason:"结果评估中..."}}),(0,r.saveExecutionRecord)({task_id:t||void 0,upload_id:a||void 0,final_result:u.trim(),force_judgment:!0}).catch(e=>{console.error("[Background Re-judgment Error]",e)}),s.NextResponse.json({success:!0,message:"Final Result 已保存,正在后台重新评估"})}catch(e){return console.error("Update Final Result Error:",e),s.NextResponse.json({error:"Failed to update final result"},{status:500})}}return s.NextResponse.json({error:"No valid fields to update"},{status:400})}catch(e){return console.error("Patch/Update Data Error:",e),s.NextResponse.json({error:"Failed to update data"},{status:500})}}e.s(["DELETE",()=>A,"GET",()=>_,"PATCH",()=>S,"QUIET_WINDOW_INFERRED_FRAMEWORKS",0,k,"dynamic",0,"force-dynamic","hasAssistantOutput",()=>w,"inferQuietWindowTraceCompletedAt",()=>R]),a()}catch(e){a(e)}},!1),208881,e=>e.a(async(t,a)=>{try{var r=e.i(747909),n=e.i(174017),s=e.i(996250),i=e.i(759756),o=e.i(561916),l=e.i(174677),u=e.i(869741),d=e.i(316795),c=e.i(487718),p=e.i(995169),m=e.i(47587),f=e.i(666012),g=e.i(570101),y=e.i(626937),h=e.i(10372),w=e.i(193695);e.i(52474);var R=e.i(600220),v=e.i(230031),_=t([v]);[v]=_.then?(await _)():_;let x=new r.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/observe/data/route",pathname:"/api/observe/data",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/observe/data/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:E,workUnitAsyncStorage:k,serverHooks:I}=x;function A(){return(0,s.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:k})}async function S(e,t,a){x.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/observe/data/route";r=r.replace(/\/index$/,"")||"/";let s=await x.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,params:_,nextConfig:A,parsedUrl:S,isDraftMode:E,prerenderManifest:k,routerServerContext:I,isOnDemandRevalidate:b,revalidateOnlyGenerated:N,resolvedPathname:D,clientReferenceManifest:C,serverActionsManifest:T}=s,j=(0,u.normalizeAppPath)(r),O=!!(k.dynamicRoutes[j]||k.routes[D]),P=async()=>((null==I?void 0:I.render404)?await I.render404(e,t,S,!1):t.end("This page could not be found"),null);if(O&&!E){let e=!!k.routes[D],t=k.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(A.experimental.adapterPath)return await P();throw new w.NoFallbackError}}let M=null;!O||x.isDev||E||(M=D,M="/index"===M?"/":M);let q=!0===x.isDev||!O,F=O&&!q;T&&C&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:C,serverActionsManifest:T});let $=e.method||"GET",U=(0,o.getTracer)(),L=U.getActiveScopeSpan(),H={params:_,prerenderManifest:k,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts},cacheComponents:!!A.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:A.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>x.onRequestError(e,t,r,n,I)},sharedContext:{buildId:v}},B=new d.NodeNextRequest(e),W=new d.NodeNextResponse(t),z=c.NextRequestAdapter.fromNodeNextRequest(B,(0,c.signalFromNodeResponse)(t));try{let s=async e=>x.handle(z,H).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=U.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route");if(n){let t=`${$} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${r}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),u=async i=>{var o,u;let d=async({previousCacheEntry:n})=>{try{if(!l&&b&&N&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await s(i);e.fetchMetrics=H.renderOpts.fetchMetrics;let o=H.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let u=H.renderOpts.collectedTags;if(!O)return await (0,f.sendResponse)(B,W,r,H.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==H.renderOpts.collectedRevalidate&&!(H.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&H.renderOpts.collectedRevalidate,n=void 0===H.renderOpts.collectedExpire||H.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:H.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await x.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:b})},!1,I),t}},c=await x.handleResponse({req:e,nextConfig:A,cacheKey:M,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:b,revalidateOnlyGenerated:N,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:l});if(!O)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(u=c.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",b?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,g.fromNodeOutgoingHttpHeaders)(c.value.headers);return l&&O||p.delete(h.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(c.cacheControl)),await (0,f.sendResponse)(B,W,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};L?await u(L):await U.withPropagatedContext(e.headers,()=>U.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${r}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},u))}catch(t){if(t instanceof w.NoFallbackError||await x.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:b})},!1,I),O)throw t;return await (0,f.sendResponse)(B,W,new Response(null,{status:500})),null}}e.s(["handler",()=>S,"patchFetch",()=>A,"routeModule",()=>x,"serverHooks",()=>I,"workAsyncStorage",()=>E,"workUnitAsyncStorage",()=>k]),a()}catch(e){a(e)}},!1)];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_78c6471e._.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)];
|