agent-insight 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +6 -0
- package/.next/standalone/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/infra/source/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/quality/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-history/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skills/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.html +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.html +1 -1
- package/.next/standalone/.next/server/app/agents.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- 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.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.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.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.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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/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/breakdowns/route.js.nft.json +1 -1
- 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.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.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.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/setup/opencode-offline-fix/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route/build-manifest.json +11 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js +7 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route_client-reference-manifest.js +2 -0
- 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.nft.json +1 -1
- 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.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/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.nft.json +1 -1
- 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.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.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.nft.json +1 -1
- 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.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/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 +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.html +1 -1
- package/.next/standalone/.next/server/app/dataset.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.html +1 -1
- package/.next/standalone/.next/server/app/eval.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.html +1 -1
- package/.next/standalone/.next/server/app/fault.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra/sources.html +1 -1
- package/.next/standalone/.next/server/app/infra/sources.rsc +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/infra/sources.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.html +1 -1
- package/.next/standalone/.next/server/app/infra.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/infra.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/infra.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.html +1 -1
- package/.next/standalone/.next/server/app/metrics.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.html +1 -1
- package/.next/standalone/.next/server/app/optapi.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.html +1 -1
- package/.next/standalone/.next/server/app/quality.rsc +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.html +1 -1
- package/.next/standalone/.next/server/app/security.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.html +1 -1
- package/.next/standalone/.next/server/app/skill-detail.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.html +1 -1
- package/.next/standalone/.next/server/app/skill-eval.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.html +1 -1
- package/.next/standalone/.next/server/app/skill-generator.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.html +1 -1
- package/.next/standalone/.next/server/app/skill-history.rsc +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.html +1 -1
- package/.next/standalone/.next/server/app/skill-opt.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.html +1 -1
- package/.next/standalone/.next/server/app/skill-release.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.html +1 -1
- package/.next/standalone/.next/server/app/skills.rsc +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.html +1 -1
- package/.next/standalone/.next/server/app/trace.rsc +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__edc6a75f._.js +3 -0
- package/.next/standalone/.next/server/chunks/ce889_server_app_api_ingest_setup_opencode-offline-fix_route_actions_13b9e7e1.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_c4a195e5.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_a3d5f9bc._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0ec17dda._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_2906b362._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_3ad6a908._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_6e2c1036._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_a443e166._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_c49ac16a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_cf1f3d2c._.js +2 -2
- 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/1ee0fbf466669cb8.js +1 -0
- package/.next/standalone/.next/static/chunks/3a0f454536f3ebc8.js +1 -0
- package/.next/standalone/.next/static/chunks/4dcd21eef469e66b.js +1 -0
- package/.next/{static/chunks/7e6eb6ade82c4979.js → standalone/.next/static/chunks/b40cbbf52dfd5473.js} +1 -1
- package/.next/standalone/.next/static/chunks/ec50621fcfea9f71.js +287 -0
- package/.next/standalone/Dockerfile +10 -2
- package/.next/standalone/Evaluation_and_Research/agent_evaluator_industry_research.md +260 -0
- package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna.md +1379 -0
- package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_2.md +1312 -0
- package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_3.md +712 -0
- package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_4.md +1228 -0
- package/.next/standalone/docker-compose.amd64.yml +10 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/opencode-offline-fix.ps1 +93 -0
- package/.next/standalone/scripts/opencode_tui_plugin.tsx +23 -1
- package/.next/static/chunks/1ee0fbf466669cb8.js +1 -0
- package/.next/static/chunks/3a0f454536f3ebc8.js +1 -0
- package/.next/static/chunks/4dcd21eef469e66b.js +1 -0
- package/.next/{standalone/.next/static/chunks/7e6eb6ade82c4979.js → static/chunks/b40cbbf52dfd5473.js} +1 -1
- package/.next/static/chunks/ec50621fcfea9f71.js +287 -0
- package/README.md +76 -60
- package/package.json +1 -1
- package/scripts/opencode-offline-fix.ps1 +93 -0
- package/scripts/opencode_tui_plugin.tsx +23 -1
- package/.next/standalone/.next/static/chunks/13ea6fabf1d0af65.js +0 -287
- package/.next/standalone/.next/static/chunks/74a2b1d10a1772b4.js +0 -1
- package/.next/standalone/.next/static/chunks/94042ce1cf94ccfd.js +0 -1
- package/.next/standalone/.next/static/chunks/965c5a1f38c3d7db.js +0 -1
- package/.next/standalone/scripts/activate_telemetry.sh +0 -202
- package/.next/standalone/scripts/insight-paths.js +0 -33
- package/.next/standalone/scripts/opencode_otel_schema.ts +0 -73
- package/.next/standalone/scripts/opencode_plugin.ts +0 -1063
- package/.next/static/chunks/13ea6fabf1d0af65.js +0 -287
- package/.next/static/chunks/74a2b1d10a1772b4.js +0 -1
- package/.next/static/chunks/94042ce1cf94ccfd.js +0 -1
- package/.next/static/chunks/965c5a1f38c3d7db.js +0 -1
- package/scripts/activate_telemetry.sh +0 -202
- package/scripts/insight-paths.js +0 -33
- package/scripts/opencode_otel_schema.ts +0 -73
- package/scripts/opencode_plugin.ts +0 -1063
- /package/.next/standalone/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_ssgManifest.js +0 -0
- /package/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_buildManifest.js +0 -0
- /package/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{uwRBb8F1kIm0K4LV3Jkwa → iE8084jR9Kgb7Bhs3Xokh}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[901411,e=>{"use strict";var n=e.i(747909),t=e.i(174017),i=e.i(996250),o=e.i(759756),s=e.i(561916),_=e.i(174677),r=e.i(869741),a=e.i(316795),E=e.i(487718),l=e.i(995169),I=e.i(47587),T=e.i(666012),N=e.i(570101),S=e.i(626937),c=e.i(10372),h=e.i(193695);e.i(52474);var d=e.i(600220),O=e.i(89171);function u(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function g(e){return e.replace(/`/g,"``").replace(/"/g,'`"').replace(/\$/g,"`$")}async function $(e){let n,t,i=e.headers.get("x-forwarded-host")||e.headers.get("host")||"127.0.0.1:3000",o=e.headers.get("x-forwarded-proto")||"https",s=new URL(e.url),_=process.env.NEXT_PUBLIC_URL_PREFIX||"",r=`${o}://${i}${_}`,a=s.searchParams.get("key")||s.searchParams.get("apiKey")||"",E=s.searchParams.get("yes")??s.searchParams.get("y")??s.searchParams.get("noninteractive"),l=null!==E&&!["0","false","no"].includes(E.trim().toLowerCase()),I=(s.searchParams.get("frameworks")||s.searchParams.get("framework")||"opencode").trim()||"opencode",T=s.searchParams.get("nokey")??s.searchParams.get("no-key"),N=null!==T&&!["0","false","no"].includes(T.trim().toLowerCase());if("windows"==(n=e.headers.get("user-agent")||"",(t=e.headers.get("x-platform")||"")?"windows"===t.toLowerCase()?"windows":"unix":n.toLowerCase().includes("windows")?"windows":"unix")){let e=["# =============================================================================\n# Agent-insight One-Click Setup (PowerShell)\n# =============================================================================\n",'$AGENT_INSIGHT_HOST = "'+g(r)+'"','$AGENT_INSIGHT_BASE_URL = "'+g(r)+'"','$AGENT_INSIGHT_SETUP_API_KEY = "'+g(a)+'"','\nWrite-Host "🚀 Fetching Agent-insight telemetry components from $AGENT_INSIGHT_BASE_URL..."\n\n# 0. Check Node.js version\n$nodeCmd = Get-Command node -ErrorAction SilentlyContinue\nif (-not $nodeCmd) {\n Write-Host "❌ Error: Node.js is not installed." -ForegroundColor Red\n Write-Host " Agent-insight requires Node.js 20 or higher."\n Write-Host " Please install Node.js: https://nodejs.org/"\n exit 1\n}\n\n$nodeVersion = (node -v 2>$null) -replace "^v", ""\n$nodeMajor = $nodeVersion.Split(".")[0]\nif ([int]$nodeMajor -lt 20) {\n Write-Host "❌ Error: Node.js version $nodeVersion is not supported." -ForegroundColor Red\n Write-Host " Agent-insight requires Node.js 20 or higher."\n Write-Host " Please upgrade your Node.js version: https://nodejs.org/"\n exit 1\n}\nWrite-Host "✅ Node.js version: $nodeVersion"\n\n# 1. Setup Directories\n$homeDir = $env:USERPROFILE\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.agent-insight" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.agent-insight\\logs" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\skills" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.claude\\projects" | Out-Null\nNew-Item -ItemType Directory -Force -Path ".opencode\\skills" | Out-Null\nWrite-Host "📂 Created necessary directories"\n\n# 2. Interactive Framework Selection with inquirer\nWrite-Host ""\n\n$SELECTOR_SCRIPT = "$homeDir\\.agent-insight\\framework_selector.mjs"\n$SELECTOR_RESULT = "$homeDir\\.agent-insight\\.selector_result"\n\n# Install inquirer and tsx if not already installed\nSet-Location "$homeDir\\.agent-insight"\nif (-not (Test-Path "package.json")) {\n \'{"name": "agent-insight-setup", "version": "1.0.0", "type": "module", "dependencies": {}}\' | Out-File -FilePath "package.json" -Encoding utf8\n}\nif (-not (Test-Path "node_modules\\inquirer") -or -not (Test-Path "node_modules\\tsx")) {\n Write-Host "📦 Installing dependencies for interactive selection..."\n npm install inquirer tsx --save 2>$null\n}\n\n$selectorContent = @\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'Hermes\', value: \'hermes\' },\n { name: \'JiuwenSwarm\', value: \'jiuwen\' }\n];\n\nasync function select() {\n console.log(\'\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Agent-insight ✨ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');\n console.log(\'\');\n console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');\n console.log(\'\');\n\n const answers = await inquirer.prompt([\n {\n type: \'checkbox\',\n name: \'frameworks\',\n message: \'集成到:\',\n choices: frameworks,\n default: [\'opencode\'],\n pageSize: 10,\n loop: false\n }\n ]);\n\n const selected = answers.frameworks;\n \n if (selected.length > 0) {\n console.log(\'\');\n console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');\n selected.forEach(fw => {\n const name = frameworks.find(f => f.value === fw)?.name || fw;\n console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);\n });\n console.log(\'\');\n } else {\n console.log(\'\');\n console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');\n console.log(\'\');\n }\n\n const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.agent-insight\\\\.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\n\'@\n\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location "$homeDir\\.agent-insight"\nnpx -y tsx $SELECTOR_SCRIPT\n\n# Read the selection result from file\nif (Test-Path $SELECTOR_RESULT) {\n $SELECTED_FRAMEWORKS = Get-Content $SELECTOR_RESULT\n Remove-Item $SELECTOR_RESULT -Force\n} else {\n $SELECTED_FRAMEWORKS = ""\n}\n\n# Set installation flags based on selection\n$INSTALL_OPENCODE = $false\n$INSTALL_CLAUDE = $false\n$INSTALL_HERMES = $false\n$INSTALL_JIUWEN = $false\n\nif ($SELECTED_FRAMEWORKS -match "opencode") {\n $INSTALL_OPENCODE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "claude") {\n $INSTALL_CLAUDE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "hermes") {\n $INSTALL_HERMES = $true\n}\nif ($SELECTED_FRAMEWORKS -match "jiuwen") {\n $INSTALL_JIUWEN = $true\n}\n\n# Exit if nothing selected\nif (-not $INSTALL_OPENCODE -and -not $INSTALL_CLAUDE -and -not $INSTALL_HERMES -and -not $INSTALL_JIUWEN) {\n Write-Host "⚠️ 未选择任何框架组件,将跳过插件安装。"\n Write-Host " 继续执行配置步骤..."\n Write-Host ""\n}\n\n# 3. Download Components\nif ($INSTALL_OPENCODE) {\n Write-Host "⏬ Downloading OpenCode Plugin..."\n $opencodeConfigDir = Join-Path $homeDir ".config\\opencode"\n New-Item -ItemType Directory -Path (Join-Path $opencodeConfigDir "plugins") -Force | Out-Null\n Remove-Item -Path (Join-Path $opencodeConfigDir "plugins\\Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $homeDir ".opencode\\plugins\\Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $homeDir ".opencode\\plugins\\Witty-Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode" -OutFile (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts")\n Write-Host "⏬ Downloading OpenCode Uploader..."\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-uploader" -OutFile (Join-Path $homeDir ".agent-insight\\opencode_uploader_client.js")\n Write-Host "⏬ Downloading OpenCode TUI Plugin..."\n $tuiPluginPath = (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.tui.tsx")\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-tui" -OutFile $tuiPluginPath\n $tuiConfigFile = (Join-Path $opencodeConfigDir "tui.json")\n try {\n $data = @{}\n if (Test-Path $tuiConfigFile) {\n $raw = Get-Content $tuiConfigFile -Raw\n if ($raw -and $raw.Trim()) { $data = $raw | ConvertFrom-Json }\n }\n if (-not $data.plugin) { $data | Add-Member -MemberType NoteProperty -Name plugin -Value @() -Force }\n if ($data.plugin -notcontains $tuiPluginPath) { $data.plugin += $tuiPluginPath }\n $data | ConvertTo-Json -Depth 10 | Set-Content -Path $tuiConfigFile -Encoding UTF8\n } catch {\n Write-Host "⚠️ Failed to patch tui.json for TUI plugin."\n }\n}\n\nif ($INSTALL_CLAUDE) {\n Write-Host "🛰️ Claude Code will use official OpenTelemetry logs; no session-file watcher is required."\n}\n\nif ($INSTALL_HERMES) {\n Write-Host "Installing Agent Insight Hermes plugin..."\n $hermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }\n $hermesPluginDir = Join-Path $hermesHome "plugins\\agent_insight_hermes"\n New-Item -ItemType Directory -Path $hermesPluginDir -Force | Out-Null\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/hermes-plugin" -OutFile (Join-Path $hermesPluginDir "__init__.py")\n @("name: agent_insight_hermes", "version: 0.2.0", "description: Agent Insight telemetry for Hermes", "provides_hooks:", " - pre_llm_call", " - post_llm_call", " - pre_api_request", " - post_api_request", " - api_request_error", " - pre_tool_call", " - post_tool_call", " - subagent_start", " - subagent_stop", " - on_session_end") | Set-Content -Path (Join-Path $hermesPluginDir "plugin.yaml") -Encoding UTF8\n $hermesCmd = Get-Command hermes -ErrorAction SilentlyContinue\n if ($hermesCmd) {\n & $hermesCmd.Source plugins enable agent_insight_hermes\n } else {\n Write-Host "Warning: hermes command not found. The plugin files were installed; enable agent_insight_hermes after installing Hermes."\n }\n}\n\nif ($INSTALL_JIUWEN) {\n Write-Host "⏬ Installing Agent-insight JiuwenSwarm extension..."\n $jwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }\n $jwExtDir = Join-Path $jwHome "extensions\\agent-insight-observability"\n New-Item -ItemType Directory -Path $jwExtDir -Force | Out-Null\n New-Item -ItemType Directory -Path (Join-Path $jwHome "config") -Force | Out-Null\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/jiuwen-extension" -OutFile (Join-Path $jwExtDir "extension.py")\n @(\'id: agent-insight-observability\', \'name: agent-insight-observability\', \'version: 0.1.0\', \'description: Zero-code observability onboarding for JiuwenSwarm via agent-core OTLP.\', \'author: agent-insight\', \'min_jiuwenswarm_version: "0.2.0"\', \'dependencies: {}\', \'config_schema:\', \' type: object\') | Set-Content -Path (Join-Path $jwExtDir "extension.yaml") -Encoding UTF8\n Write-Host "✅ JiuwenSwarm extension installed at $jwExtDir"\n}\n\n# 4. Configure ~/.agent-insight/.env\n$AGENT_INSIGHT_CONFIG_FILE = "$homeDir\\.agent-insight\\.env"\n$EXISTING_KEY = ""\n$EXISTING_HOST = ""\n$EXISTING_SHOW_TASK_STATS = ""\n$EXISTING_UPLOAD_SINCE_MS = ""\nif (Test-Path $AGENT_INSIGHT_CONFIG_FILE) {\n $content = Get-Content $AGENT_INSIGHT_CONFIG_FILE\n $keyLine = $content | Select-String \'^AGENT_INSIGHT_API_KEY=\' | Select-Object -First 1\n $hostLine = $content | Select-String \'^AGENT_INSIGHT_HOST=\' | Select-Object -First 1\n $showLine = $content | Select-String \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' | Select-Object -First 1\n $sinceLine = $content | Select-String \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' | Select-Object -First 1\n if ($keyLine) {\n $EXISTING_KEY = $keyLine.Line.Substring(\'AGENT_INSIGHT_API_KEY=\'.Length)\n }\n if ($hostLine) {\n $EXISTING_HOST = $hostLine.Line.Substring(\'AGENT_INSIGHT_HOST=\'.Length)\n }\n if ($showLine) {\n $EXISTING_SHOW_TASK_STATS = $showLine.Line.Substring(\'AGENT_INSIGHT_SHOW_TASK_STATS=\'.Length)\n }\n if ($sinceLine) {\n $EXISTING_UPLOAD_SINCE_MS = $sinceLine.Line.Substring(\'AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\'.Length)\n }\n}\n\n# -- API Key Logic --\n$FINAL_KEY = if ($AGENT_INSIGHT_SETUP_API_KEY) { $AGENT_INSIGHT_SETUP_API_KEY } else { $EXISTING_KEY }\nif ($AGENT_INSIGHT_SETUP_API_KEY) {\n Write-Host "🔑 Using API Key from setup URL."\n} elseif ($EXISTING_KEY) {\n Write-Host "🔑 Found existing API Key."\n $USE_EXISTING = Read-Host "👉 Use existing key? (y/N, Default: y)"\n if ($USE_EXISTING -match \'^[Nn]$\') {\n $FINAL_KEY = Read-Host "👉 Please enter your NEW API Key"\n }\n} else {\n Write-Host "🔑 AGENT_INSIGHT_API_KEY is not set."\n $FINAL_KEY = Read-Host "👉 Please enter your API Key"\n}\n\n# -- Host Logic --\n$FINAL_HOST = $AGENT_INSIGHT_HOST\nif ($EXISTING_HOST -and ($EXISTING_HOST -ne $AGENT_INSIGHT_HOST)) {\n Write-Host "🌐 Current Host in config: $EXISTING_HOST"\n Write-Host "🌐 New Host detected: $AGENT_INSIGHT_HOST"\n $CHANGE_HOST = Read-Host "👉 Change to new Host? (y/N, Default: y)"\n if ($CHANGE_HOST -match \'^[Nn]$\') {\n $FINAL_HOST = $EXISTING_HOST\n }\n} elseif (-not $EXISTING_HOST) {\n $FINAL_HOST = $AGENT_INSIGHT_HOST\n}\n\n$FINAL_SHOW_TASK_STATS = $EXISTING_SHOW_TASK_STATS\nif (-not $FINAL_SHOW_TASK_STATS) {\n $FINAL_SHOW_TASK_STATS = "true"\n}\n\nif (-not $FINAL_KEY) {\n Write-Host "⚠️ Warning: No API Key provided. Telemetry upload will fail until you set it in $AGENT_INSIGHT_CONFIG_FILE"\n}\n\n# -- Per-account isolation: namespace opencode spool/checkpoint by API-key hash --\n$CLIENT_KEY_HASH = ([System.BitConverter]::ToString(([System.Security.Cryptography.SHA256]::Create()).ComputeHash([System.Text.Encoding]::UTF8.GetBytes([string]$FINAL_KEY))) -replace \'-\',\'\').ToLower().Substring(0,16)\n$NOW_MS = [string][long]([DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds())\nif ($EXISTING_UPLOAD_SINCE_MS -and ($FINAL_KEY -eq $EXISTING_KEY)) { $UPLOAD_SINCE_MS = $EXISTING_UPLOAD_SINCE_MS } else { $UPLOAD_SINCE_MS = $NOW_MS }\n\nWrite-Host "⚙️ Updating configuration..."\nNew-Item -ItemType File -Path $AGENT_INSIGHT_CONFIG_FILE -Force | Out-Null\nCopy-Item $AGENT_INSIGHT_CONFIG_FILE "$AGENT_INSIGHT_CONFIG_FILE.bak"\n$content = Get-Content "$AGENT_INSIGHT_CONFIG_FILE.bak"\n$content | Where-Object { $_ -notmatch \'^AGENT_INSIGHT_HOST=\' -and $_ -notmatch \'^AGENT_INSIGHT_API_KEY=\' -and $_ -notmatch \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' -and $_ -notmatch \'^AGENT_INSIGHT_RETENTION_DAYS=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_SPOOL_DIR=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOADER=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=\' -and $_ -notmatch \'^AGENT_INSIGHT_MAX_TOOL_IO=\' -and $_ -notmatch \'^AGENT_INSIGHT_MAX_EVENT_STRING=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLIENT_KEY_HASH=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_CHECKPOINT=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' } | Set-Content $AGENT_INSIGHT_CONFIG_FILE\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_HOST=$FINAL_HOST"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_API_KEY=$FINAL_KEY"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_RETENTION_DAYS=10"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=true"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLIENT_KEY_HASH=$CLIENT_KEY_HASH"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_SPOOL_DIR=$homeDir\\.agent-insight\\otel_data\\opencode\\$CLIENT_KEY_HASH"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_CHECKPOINT=$homeDir\\.agent-insight\\opencode_uploader_checkpoint_$CLIENT_KEY_HASH.json"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=$UPLOAD_SINCE_MS"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOADER=$homeDir\\.agent-insight\\opencode_uploader_client.js"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=$homeDir\\.agent-insight\\otel_data\\claude"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=file:$homeDir\\.agent-insight\\claude_raw_bodies"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_MAX_TOOL_IO=4000"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_MAX_EVENT_STRING=20000"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=15000"\nRemove-Item "$AGENT_INSIGHT_CONFIG_FILE.bak" -Force\n\n# 6.4 Configure Agent Insight Hermes plugin\nif ($INSTALL_HERMES) {\n $hermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }\n $hermesPluginDir = Join-Path $hermesHome "plugins\\agent_insight_hermes"\n New-Item -ItemType Directory -Path $hermesPluginDir -Force | Out-Null\n $hermesConfig = @{ host = $FINAL_HOST.TrimEnd("/"); api_key = $FINAL_KEY; service_name = "hermes"; max_content_chars = 200000; spool_dir = (Join-Path $skillInsightDir "data\\hermes-otel-spool"); log_file = (Join-Path $skillInsightDir "logs\\hermes-plugin.log") } | ConvertTo-Json\n Set-Content -Path (Join-Path $hermesPluginDir "config.json") -Value $hermesConfig -Encoding UTF8\n Write-Host "Agent Insight Hermes config written to $hermesPluginDir\\config.json"\n}\n\n# 6.45 Configure JiuwenSwarm telemetry (workspace config\\.env, read by the extension)\nif ($INSTALL_JIUWEN) {\n $jwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }\n $jwEnv = Join-Path $jwHome "config\\.env"\n $jwExtParent = Join-Path $jwHome "extensions"\n $jwOtlpEndpoint = $FINAL_HOST.TrimEnd("/") + "/api/ingest/otel/v1/traces"\n New-Item -ItemType Directory -Path (Join-Path $jwHome "config") -Force | Out-Null\n New-Item -ItemType File -Path $jwEnv -Force | Out-Null\n $jwPrev = Get-Content $jwEnv\n $prevExtLine = $jwPrev | Select-String \'^EXTENSION_DIRS=\' | Select-Object -First 1\n # 去掉历史值可能带的成对引号(模板默认 EXTENSION_DIRS=""),否则拼出 "";<dir> 会破坏 dotenv 解析\n $prevExtDirs = if ($prevExtLine) { $prevExtLine.Line.Substring(\'EXTENSION_DIRS=\'.Length).Trim(\'"\').Trim("\'") } else { "jiuwenswarm/extensions" }\n if (-not $prevExtDirs) { $prevExtDirs = "jiuwenswarm/extensions" }\n if ($prevExtDirs.Split(";") -notcontains $jwExtParent) { $newExtDirs = "$prevExtDirs;$jwExtParent" } else { $newExtDirs = $prevExtDirs }\n $jwPrev | Where-Object { $_ -notmatch \'^OTEL_ENABLED=\' -and $_ -notmatch \'^AGENT_INSIGHT_OTLP_ENDPOINT=\' -and $_ -notmatch \'^AGENT_INSIGHT_API_KEY=\' -and $_ -notmatch \'^EXTENSION_DIRS=\' } | Set-Content $jwEnv\n Add-Content $jwEnv "OTEL_ENABLED=true"\n Add-Content $jwEnv "AGENT_INSIGHT_OTLP_ENDPOINT=$jwOtlpEndpoint"\n Add-Content $jwEnv "AGENT_INSIGHT_API_KEY=$FINAL_KEY"\n Add-Content $jwEnv "EXTENSION_DIRS=$newExtDirs"\n Write-Host "✅ JiuwenSwarm telemetry configured -> $jwOtlpEndpoint (service=jiuwenswarm)"\n}\nWrite-Host "✅ Configuration updated at $AGENT_INSIGHT_CONFIG_FILE"\n\n# 6.5 Configure Claude Code official OTel logs\nif ($INSTALL_CLAUDE) {\n $claudeOtelScript = @\'\nfunction Invoke-SkillInsightClaude {\n $envFile = Join-Path $env:USERPROFILE ".agent-insight\\.env"\n if (Test-Path $envFile) {\n Get-Content $envFile | ForEach-Object {\n if ($_ -match "^([^#=]+)=(.*)$") { [Environment]::SetEnvironmentVariable($matches[1], $matches[2], "Process") }\n }\n }\n $siHost = if ($env:AGENT_INSIGHT_HOST) { $env:AGENT_INSIGHT_HOST } else { "127.0.0.1:3000" }\n if ($siHost -notmatch "^https?://") { $siHost = "http://$siHost" }\n $siHost = $siHost.TrimEnd("/")\n $env:CLAUDE_CODE_ENABLE_TELEMETRY = "1"\n $env:OTEL_LOGS_EXPORTER = "otlp"\n if (-not $env:OTEL_METRICS_EXPORTER) { $env:OTEL_METRICS_EXPORTER = "none" }\n $env:OTEL_EXPORTER_OTLP_LOGS_PROTOCOL = "http/json"\n $env:OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = "$siHost/api/ingest/otel/v1/logs"\n $env:OTEL_EXPORTER_OTLP_HEADERS = "x-witty-api-key=$($env:AGENT_INSIGHT_API_KEY)"\n $env:OTEL_LOG_USER_PROMPTS = "1"\n $env:OTEL_LOG_TOOL_DETAILS = "1"\n $env:OTEL_LOG_TOOL_CONTENT = "1"\n $rawBodyDir = Join-Path $env:USERPROFILE ".agent-insight\\claude_raw_bodies"\n New-Item -ItemType Directory -Path $rawBodyDir -Force | Out-Null\n if (-not $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES) { $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES = "file:$rawBodyDir" }\n $env:OTEL_LOG_RAW_API_BODIES = $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES\n $cmd = Get-Command claude -CommandType Application -ErrorAction SilentlyContinue\n if (-not $cmd) { throw "claude executable not found in PATH" }\n & $cmd.Source @args\n}\nSet-Alias claude Invoke-SkillInsightClaude\n\'@\n $claudeOtelPath = "$homeDir\\.agent-insight\\claude_otel_env.ps1"\n Set-Content -Path $claudeOtelPath -Value $claudeOtelScript -Encoding UTF8\n $profileDir = Split-Path $PROFILE -Parent\n if ($profileDir) { New-Item -ItemType Directory -Path $profileDir -Force | Out-Null }\n $profileText = if (Test-Path $PROFILE) { Get-Content $PROFILE -Raw } else { "" }\n if (-not ($profileText.Contains(".agent-insight\\claude_otel_env.ps1") -or $profileText.Contains(".agent-insight/claude_otel_env.ps1"))) {\n Add-Content -Path $PROFILE -Value ""\n Add-Content -Path $PROFILE -Value "# Skill-Insight Claude Code OTel"\n Add-Content -Path $PROFILE -Value ". `"$claudeOtelPath`""\n }\n Write-Host "✅ Claude Code OTel env installed at $claudeOtelPath"\n Write-Host " Restart PowerShell or run: . `"$claudeOtelPath`""\n Get-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n Remove-Item "$homeDir\\.agent-insight\\claude_watcher_client.ts", "$homeDir\\.agent-insight\\start_claude_watcher.ps1", "$homeDir\\.agent-insight\\stop_claude_watcher.ps1", "$homeDir\\.agent-insight\\claude_watcher.pid" -Force -ErrorAction SilentlyContinue\n Write-Host "🧹 Removed legacy Claude session-file watcher if it was installed."\n}\n\n# 7. Create Watcher Startup/Stop Scripts\n$NEEDS_WATCHER_SCRIPTS = $false\nif ($INSTALL_OPENCODE) {\n $NEEDS_WATCHER_SCRIPTS = $true\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "📝 Creating watcher management scripts..."\n\n if ($INSTALL_OPENCODE) {\n $startScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*opencode_uploader_client.js*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nGet-Process | Where-Object { $_.CommandLine -like "*skill-insight-opencode-uploader-loop*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nNew-Item -ItemType Directory -Path "$env:USERPROFILE\\.agent-insight\\logs" -Force | Out-Null\n$intervalSec = if ($env:AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC) { $env:AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC } else { "300" }\n$logFile = "$env:USERPROFILE\\.agent-insight\\logs\\opencode_uploader.log"\n$uploaderPath = "$env:USERPROFILE\\.agent-insight\\opencode_uploader_client.js"\n$runtime = if (Get-Command node -ErrorAction SilentlyContinue) { "node" } elseif (Get-Command bun -ErrorAction SilentlyContinue) { "bun" } else { $null }\nif (-not $runtime) {\n Add-Content $logFile "[$(Get-Date)] Skipped: node/bun not installed"\n return\n}\n# Sentinel marker in script body so it can be matched by CommandLine search.\n$loopBody = @"\n# skill-insight-opencode-uploader-loop\nwhile (`$true) {\n & `"$runtime`" `"$uploaderPath`" *>> `"$logFile`"\n Start-Sleep -Seconds $intervalSec\n}\n"@\n$proc = Start-Process -FilePath "powershell" -ArgumentList "-NoProfile", "-Command", $loopBody -PassThru -WindowStyle Hidden\nSet-Content "$env:USERPROFILE\\.agent-insight\\opencode_uploader.pid" $proc.Id\nWrite-Host "OpenCode uploader daemon started with PID $($proc.Id) (interval=${intervalSec}s)"\n\'@\n Set-Content -Path "$homeDir\\.agent-insight\\start_opencode_uploader.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*skill-insight-opencode-uploader-loop*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nGet-Process | Where-Object { $_.CommandLine -like "*opencode_uploader_client.js*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.agent-insight\\opencode_uploader.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenCode uploader daemon stopped"\n\'@\n Set-Content -Path "$homeDir\\.agent-insight\\stop_opencode_uploader.ps1" -Value $stopScript -Encoding UTF8\n }\n\n $combinedStart = \'Write-Host "Starting Agent-Insight watchers..."\'\n if ($INSTALL_OPENCODE) { $combinedStart += [char]10 + "& `"$homeDir\\.agent-insight\\start_opencode_uploader.ps1`"" }\n $combinedStart += [char]10 + \'Write-Host "All watchers started!"\'\n Set-Content -Path "$homeDir\\.agent-insight\\start_watchers.ps1" -Value $combinedStart -Encoding UTF8\n\n $combinedStop = \'Write-Host "Stopping Agent-Insight watchers..."\'\n if ($INSTALL_OPENCODE) { $combinedStop += [char]10 + "& `"$homeDir\\.agent-insight\\stop_opencode_uploader.ps1`"" }\n $combinedStop += [char]10 + \'Write-Host "All watchers stopped!"\'\n Set-Content -Path "$homeDir\\.agent-insight\\stop_watchers.ps1" -Value $combinedStop -Encoding UTF8\n}\n\n# 8. Start Watchers Now\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "🚀 Starting telemetry watchers..."\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n & "$homeDir\\.agent-insight\\start_watchers.ps1"\n } else {\n Write-Host "⚠️ Node.js (npx) not found. Skipping watcher startup."\n }\n}\n\n# 10. Final Summary\nWrite-Host ""\nWrite-Host "🌟 Agent-Insight Telemetry: READY"\nWrite-Host "------------------------------------------------"\nWrite-Host "Installed Components:"\nif ($INSTALL_OPENCODE) { Write-Host " ✅ OpenCode Plugin: $opencodeConfigDir\\plugins\\Witty-Skill-Insight.ts" }\nif ($INSTALL_OPENCODE) { Write-Host " ✅ OpenCode Uploader Daemon: ~/.agent-insight/opencode_uploader_client.js (5-min poll)" }\nif ($INSTALL_CLAUDE) { Write-Host " ✅ Claude Code OTel: ~/.agent-insight/claude_otel_env.ps1" }\nif ($INSTALL_HERMES) { $summaryHermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }; Write-Host " ✅ Agent Insight Hermes Plugin: $summaryHermesHome\\plugins\\agent_insight_hermes\\config.json" }\nif ($INSTALL_JIUWEN) { $summaryJwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }; Write-Host " ✅ JiuwenSwarm Extension: $summaryJwHome\\extensions\\agent-insight-observability (telemetry in config\\.env)" }\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "Watcher Management:"\n Write-Host " Start all: ~/.agent-insight/start_watchers.ps1"\n Write-Host " Stop all: ~/.agent-insight/stop_watchers.ps1"\n Write-Host " Logs: ~/.agent-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) { Write-Host " 1. Run: opencode run \'hello\'" }\nif ($INSTALL_CLAUDE) { Write-Host " 2. Restart PowerShell, then run: claude" }\nif ($INSTALL_HERMES) { Write-Host " 3. Restart Hermes or start a new Hermes conversation" }\nWrite-Host "------------------------------------------------"'].join("\n");return new O.NextResponse(e,{headers:{"Content-Type":"text/plain; charset=utf-8"}})}{let e=function(e,n,t,i=!1,o="opencode",s=!1){return["#!/bin/bash\n# =============================================================================\n# Agent-insight One-Click Setup\n# =============================================================================\n",'AGENT_INSIGHT_HOST="'+u(e)+'"','AGENT_INSIGHT_BASE_URL="'+u(n)+'"','AGENT_INSIGHT_SETUP_API_KEY="'+u(t)+'"','OPENCODE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/opencode"\n\n# ── 非交互模式(-y / --yes):全程无提示,默认只装 opencode ─────────────────────\n# curl -sSf "<host>/api/ingest/setup" | bash -s -- -y\n# URL 直接带: curl -sSf "<host>/api/ingest/setup?yes=1" | bash\n# env: curl -sSf "<host>/api/ingest/setup" | AGENT_INSIGHT_NONINTERACTIVE=1 bash\n# 指定框架: ... | bash -s -- -y --frameworks=opencode,claude\n# 强制无 key: ... ?yes=1&nokey=1 或 bash -s -- -y --no-key(清空本机已有 key,切共享账号)',"NONINTERACTIVE="+(i?"true":"false"),'NONINTERACTIVE_FRAMEWORKS="'+u(o||"opencode")+'"',"FORCE_NO_KEY="+(s?"true":"false"),'for arg in "$@"; do\n case "$arg" in\n -y|--yes|--non-interactive|--noninteractive) NONINTERACTIVE=true ;;\n --no-key|--nokey) FORCE_NO_KEY=true ;;\n --frameworks=*) NONINTERACTIVE=true; NONINTERACTIVE_FRAMEWORKS="${arg#*=}" ;;\n esac\ndone\nif [ "${AGENT_INSIGHT_NONINTERACTIVE:-}" = "1" ] || [ "${AGENT_INSIGHT_NONINTERACTIVE:-}" = "true" ]; then NONINTERACTIVE=true; fi\nif [ "$NONINTERACTIVE" = "true" ]; then echo "🤖 非交互模式:跳过所有提示,安装框架 = $NONINTERACTIVE_FRAMEWORKS"; fi\n\necho "🚀 Fetching Agent-insight telemetry components from $AGENT_INSIGHT_BASE_URL..."\n\n# 0. Check Node.js version\nif ! command -v node &> /dev/null; then\n echo "❌ Error: Node.js is not installed."\n echo " Agent-insight requires Node.js 20 or higher."\n echo " Please install Node.js: https://nodejs.org/"\n exit 1\nfi\n\nNODE_VERSION=$(node -v 2>/dev/null | sed "s/v//")\nNODE_MAJOR=$(echo "$NODE_VERSION" | cut -d. -f1)\nif [ "$NODE_MAJOR" -lt 20 ]; then\n echo "❌ Error: Node.js version $NODE_VERSION is not supported."\n echo " Agent-insight requires Node.js 20 or higher."\n echo " Please upgrade your Node.js version: https://nodejs.org/"\n exit 1\nfi\necho "✅ Node.js version: $NODE_VERSION"\n\n# 1. Setup Directories\nmkdir -p "$HOME/.agent-insight"\nmkdir -p "$HOME/.agent-insight/logs"\nmkdir -p "$OPENCODE_CONFIG_DIR/plugins"\nmkdir -p "$HOME/.opencode/skills"\nmkdir -p "$HOME/.claude/projects"\nmkdir -p ".opencode/skills"\nmkdir -p "$HOME/.agent-insight/example"\necho "📂 Created necessary directories"\n\n# 1b. Download built-in example messages log (for the bundled "messages 日志分析" dataset / demo traces)\nif curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/example-messages" -o "$HOME/.agent-insight/example/messages"; then\n echo "📄 Example log ready at $HOME/.agent-insight/example/messages"\nelse\n echo "⚠️ Skipped example messages log download (non-fatal)"\nfi\n\n# 2. Framework Selection(非交互模式跳过 inquirer,直接用 $NONINTERACTIVE_FRAMEWORKS)\necho ""\n\nif [ "$NONINTERACTIVE" = "true" ]; then\n SELECTED_FRAMEWORKS="$NONINTERACTIVE_FRAMEWORKS"\nelse\n\nSELECTOR_SCRIPT="$HOME/.agent-insight/framework_selector.mjs"\nSELECTOR_RESULT="$HOME/.agent-insight/.selector_result"\n\n# Install inquirer and tsx if not already installed\ncd "$HOME/.agent-insight"\nif [ ! -f "package.json" ]; then\n echo \'{"name": "agent-insight-setup", "version": "1.0.0", "type": "module", "dependencies": {}}\' > package.json\nfi\nif [ ! -d "node_modules/inquirer" ] || [ ! -d "node_modules/tsx" ]; then\n echo "📦 Installing dependencies for interactive selection..."\n npm install inquirer tsx --save 2>/dev/null\nfi\n\ncat > "$SELECTOR_SCRIPT" << \'SELECTOR_EOF\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'Hermes\', value: \'hermes\' },\n { name: \'JiuwenSwarm\', value: \'jiuwen\' }\n];\n\nasync function select() {\n console.log(\'\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Agent-insight ✨ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');\n console.log(\'\');\n console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');\n console.log(\'\');\n\n const answers = await inquirer.prompt([\n {\n type: \'checkbox\',\n name: \'frameworks\',\n message: \'集成到:\',\n choices: frameworks,\n default: [\'opencode\'],\n pageSize: 10,\n loop: false\n }\n ]);\n\n const selected = answers.frameworks;\n \n if (selected.length > 0) {\n console.log(\'\');\n console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');\n selected.forEach(fw => {\n const name = frameworks.find(f => f.value === fw)?.name || fw;\n console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);\n });\n console.log(\'\');\n } else {\n console.log(\'\');\n console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');\n console.log(\'\');\n }\n\n const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.HOME + \'/.agent-insight/.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\nSELECTOR_EOF\n\n# Run the selector interactively from /dev/tty\nexport SELECTOR_RESULT_FILE="$SELECTOR_RESULT"\ncd "$HOME/.agent-insight" && npx -y tsx "$SELECTOR_SCRIPT" < /dev/tty\n\n# Read the selection result from file\nif [ -f "$SELECTOR_RESULT" ]; then\n SELECTED_FRAMEWORKS=$(cat "$SELECTOR_RESULT")\n rm -f "$SELECTOR_RESULT"\nelse\n SELECTED_FRAMEWORKS=""\nfi\nfi # end: 交互 vs 非交互 框架选择\n\n# Set installation flags based on selection\nINSTALL_OPENCODE=false\nINSTALL_CLAUDE=false\nINSTALL_HERMES=false\nINSTALL_JIUWEN=false\n\nif [[ "$SELECTED_FRAMEWORKS" == *"opencode"* ]]; then\n INSTALL_OPENCODE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"claude"* ]]; then\n INSTALL_CLAUDE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"hermes"* ]]; then\n INSTALL_HERMES=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"jiuwen"* ]]; then\n INSTALL_JIUWEN=true\nfi\n\n# Exit if nothing selected\nif [ "$INSTALL_OPENCODE" = "false" ] && [ "$INSTALL_CLAUDE" = "false" ] && [ "$INSTALL_HERMES" = "false" ] && [ "$INSTALL_JIUWEN" = "false" ]; then\n echo "⚠️ 未选择任何框架组件,将跳过插件安装。"\n echo " 继续执行配置步骤..."\n echo ""\nfi\n\n# 3. Download Components\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n echo "⏬ Downloading OpenCode Plugin..."\n rm -f "$OPENCODE_CONFIG_DIR/plugins/Skill-Insight.ts" "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts" 2>/dev/null || true\n rm -f "$HOME/.opencode/plugins/Skill-Insight.ts" "$HOME/.opencode/plugins/Witty-Skill-Insight.ts" 2>/dev/null || true\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"\n echo "⏬ Downloading OpenCode Uploader..."\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-uploader" -o "$HOME/.agent-insight/opencode_uploader_client.js"\n echo "⏬ Installing OpenCode commands..."\n mkdir -p "$OPENCODE_CONFIG_DIR/commands"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-commands/si-optimizer" -o "$OPENCODE_CONFIG_DIR/commands/si-optimizer.md"\n echo "⏬ Downloading OpenCode TUI Plugin..."\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-tui" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n export TUI_PLUGIN_PATH="$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n export TUI_CONFIG_FILE="$OPENCODE_CONFIG_DIR/tui.json"\n if command -v node &> /dev/null; then\n node - <<\'NODE\'\nconst fs = require("fs");\nconst path = require("path");\nconst file = process.env.TUI_CONFIG_FILE;\nconst pluginPath = process.env.TUI_PLUGIN_PATH;\nlet data = {};\ntry {\n if (fs.existsSync(file)) {\n const text = fs.readFileSync(file, "utf8");\n data = text && text.trim() ? JSON.parse(text) : {};\n }\n} catch {}\nif (!data || typeof data !== "object") data = {};\nconst list = Array.isArray(data.plugin) ? data.plugin.slice() : [];\nif (pluginPath && !list.includes(pluginPath)) list.push(pluginPath);\ndata.plugin = list;\nfs.mkdirSync(path.dirname(file), { recursive: true });\nfs.writeFileSync(file, JSON.stringify(data, null, 2));\nNODE\n else\n echo "⚠️ node not found; skip TUI plugin config patch."\n fi\nfi\n\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n echo "🛰️ Claude Code will use official OpenTelemetry logs; no session-file watcher is required."\nfi\n\nif [ "$INSTALL_HERMES" = "true" ]; then\n echo "Installing Agent Insight Hermes plugin..."\n HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"\n HERMES_PLUGIN_DIR="$HERMES_HOME/plugins/agent_insight_hermes"\n mkdir -p "$HERMES_PLUGIN_DIR"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/hermes-plugin" -o "$HERMES_PLUGIN_DIR/__init__.py"\n cat > "$HERMES_PLUGIN_DIR/plugin.yaml" <<\'HERMES_PLUGIN_EOF\'\nname: agent_insight_hermes\nversion: 0.2.0\ndescription: Agent Insight telemetry for Hermes\nprovides_hooks:\n - pre_llm_call\n - post_llm_call\n - pre_api_request\n - post_api_request\n - api_request_error\n - pre_tool_call\n - post_tool_call\n - subagent_start\n - subagent_stop\n - on_session_end\nHERMES_PLUGIN_EOF\n if command -v hermes >/dev/null 2>&1; then\n hermes plugins enable agent_insight_hermes || echo "Warning: enable the plugin manually with: hermes plugins enable agent_insight_hermes"\n else\n echo "Warning: hermes command not found. The plugin files were installed; enable agent_insight_hermes after installing Hermes."\n fi\nfi\n\nif [ "$INSTALL_JIUWEN" = "true" ]; then\n echo "⏬ Installing Agent-insight JiuwenSwarm extension..."\n JW_HOME="${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}"\n JW_EXT_DIR="$JW_HOME/extensions/agent-insight-observability"\n mkdir -p "$JW_EXT_DIR" "$JW_HOME/config"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/jiuwen-extension" -o "$JW_EXT_DIR/extension.py"\n cat > "$JW_EXT_DIR/extension.yaml" <<\'JIUWEN_EXT_EOF\'\nid: agent-insight-observability\nname: agent-insight-observability\nversion: 0.1.0\ndescription: Zero-code observability onboarding for JiuwenSwarm via agent-core OTLP.\nauthor: agent-insight\nmin_jiuwenswarm_version: "0.2.0"\ndependencies: {}\nconfig_schema:\n type: object\nJIUWEN_EXT_EOF\n echo "✅ JiuwenSwarm extension installed at $JW_EXT_DIR"\nfi\n\n# 4. Configure ~/.agent-insight/.env\nAGENT_INSIGHT_CONFIG_FILE="$HOME/.agent-insight/.env"\nEXISTING_KEY=""\nEXISTING_HOST=""\nEXISTING_SHOW_TASK_STATS=""\nif [ -f "$AGENT_INSIGHT_CONFIG_FILE" ]; then\n EXISTING_KEY=$(grep \'^AGENT_INSIGHT_API_KEY=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_HOST=$(grep \'^AGENT_INSIGHT_HOST=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_SHOW_TASK_STATS=$(grep \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_UPLOAD_SINCE_MS=$(grep \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\nfi\n\n# -- API Key Logic --\nFINAL_KEY="${AGENT_INSIGHT_SETUP_API_KEY:-$EXISTING_KEY}"\nif [ "$FORCE_NO_KEY" = "true" ]; then\n FINAL_KEY=""\n echo "🔑 --no-key:强制无 key(清空本机已有 key),数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。"\nelif [ "$NONINTERACTIVE" = "true" ]; then\n if [ -n "$FINAL_KEY" ]; then\n echo "🔑 Using API Key (from setup URL / existing config)."\n else\n echo "🔑 非交互模式且未提供 API Key —— 以「无 key」方式上报,数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。"\n fi\nelif [ -n "$AGENT_INSIGHT_SETUP_API_KEY" ]; then\n echo "🔑 Using API Key from setup URL."\nelif [ -n "$EXISTING_KEY" ]; then\n echo "🔑 Found existing API Key."\n read -p "👉 Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty\n if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then\n read -p "👉 Please enter your NEW API Key: " FINAL_KEY < /dev/tty\n fi\nelse\n echo "🔑 AGENT_INSIGHT_API_KEY is not set."\n read -p "👉 Please enter your API Key: " FINAL_KEY < /dev/tty\nfi\n\n# -- Host Logic --\nFINAL_HOST="$AGENT_INSIGHT_HOST"\nif [ "$NONINTERACTIVE" != "true" ] && [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$AGENT_INSIGHT_HOST" ]; then\n echo "🌐 Current Host in config: $EXISTING_HOST"\n echo "🌐 New Host detected: $AGENT_INSIGHT_HOST"\n read -p "👉 Change to new Host? (y/N, Default: y): " CHANGE_HOST < /dev/tty\n if [[ "$CHANGE_HOST" =~ ^[Nn]$ ]]; then\n FINAL_HOST="$EXISTING_HOST"\n fi\nelif [ -z "$EXISTING_HOST" ]; then\n FINAL_HOST="$AGENT_INSIGHT_HOST"\nfi\n\nFINAL_SHOW_TASK_STATS="$EXISTING_SHOW_TASK_STATS"\nif [ -z "$FINAL_SHOW_TASK_STATS" ]; then\n FINAL_SHOW_TASK_STATS="true"\nfi\n\nif [ -z "$FINAL_KEY" ]; then\n if [ "$NONINTERACTIVE" = "true" ] || [ "$FORCE_NO_KEY" = "true" ]; then\n echo "ℹ️ 未配置 API Key:以「无 key」方式上报,数据归到服务端默认共享账号(需服务端已配 AGENT_INSIGHT_DEFAULT_INGEST_USER)。"\n else\n echo "⚠️ Warning: No API Key provided. Telemetry upload will fail until you set it in $AGENT_INSIGHT_CONFIG_FILE"\n fi\nfi\n\n# -- Per-account isolation: hash the API key so opencode spool/checkpoint are\n# namespaced per account. Switching accounts on the same machine no longer\n# replays another account\'s history under the current key.\nCLIENT_KEY_HASH=$(printf \'%s\' "$FINAL_KEY" | { shasum -a 256 2>/dev/null || sha256sum; } | cut -c1-16)\nNOW_MS=$(node -e \'process.stdout.write(String(Date.now()))\' 2>/dev/null || echo $(( $(date +%s) * 1000 )))\n# Keep an existing baseline when re-installing the SAME key; reset to now for a\n# new/changed key so only traces produced after THIS install are uploaded.\nif [ -n "$EXISTING_UPLOAD_SINCE_MS" ] && [ "$FINAL_KEY" = "$EXISTING_KEY" ]; then\n UPLOAD_SINCE_MS="$EXISTING_UPLOAD_SINCE_MS"\nelse\n UPLOAD_SINCE_MS="$NOW_MS"\nfi\n\necho "⚙️ Updating configuration..."\ntouch "$AGENT_INSIGHT_CONFIG_FILE"\ncp "$AGENT_INSIGHT_CONFIG_FILE" "${AGENT_INSIGHT_CONFIG_FILE}.bak"\ngrep -v "^AGENT_INSIGHT_HOST=" "${AGENT_INSIGHT_CONFIG_FILE}.bak" | grep -v "^AGENT_INSIGHT_API_KEY=" | grep -v "^AGENT_INSIGHT_SHOW_TASK_STATS=" | grep -v "^AGENT_INSIGHT_RETENTION_DAYS=" | grep -v "^AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=" | grep -v "^AGENT_INSIGHT_OPENCODE_SPOOL_DIR=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOADER=" | grep -v "^AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=" | grep -v "^AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=" | grep -v "^AGENT_INSIGHT_MAX_TOOL_IO=" | grep -v "^AGENT_INSIGHT_MAX_EVENT_STRING=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=" | grep -v "^AGENT_INSIGHT_CLIENT_KEY_HASH=" | grep -v "^AGENT_INSIGHT_OPENCODE_CHECKPOINT=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=" > "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_HOST=$FINAL_HOST" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_API_KEY=$FINAL_KEY" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_RETENTION_DAYS=10" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=true" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLIENT_KEY_HASH=$CLIENT_KEY_HASH" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_SPOOL_DIR=$HOME/.agent-insight/otel_data/opencode/$CLIENT_KEY_HASH" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_CHECKPOINT=$HOME/.agent-insight/opencode_uploader_checkpoint_$CLIENT_KEY_HASH.json" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=$UPLOAD_SINCE_MS" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOADER=$HOME/.agent-insight/opencode_uploader_client.js" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=$HOME/.agent-insight/otel_data/claude" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=file:$HOME/.agent-insight/claude_raw_bodies" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_MAX_TOOL_IO=4000" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_MAX_EVENT_STRING=20000" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=15000" >> "$AGENT_INSIGHT_CONFIG_FILE"\nrm "${AGENT_INSIGHT_CONFIG_FILE}.bak"\necho "✅ Configuration updated at $AGENT_INSIGHT_CONFIG_FILE"\n\n# 6.4 Configure Agent Insight Hermes plugin\nif [ "$INSTALL_HERMES" = "true" ]; then\n HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"\n HERMES_PLUGIN_DIR="$HERMES_HOME/plugins/agent_insight_hermes"\n mkdir -p "$HERMES_PLUGIN_DIR"\n cat > "$HERMES_PLUGIN_DIR/config.json" <<HERMES_CONFIG_EOF\n{\n "host": "${FINAL_HOST%/}",\n "api_key": "$FINAL_KEY",\n "service_name": "hermes",\n "max_content_chars": 200000,\n "spool_dir": "$HOME/.agent-insight/data/hermes-otel-spool",\n "log_file": "$HOME/.agent-insight/logs/hermes-plugin.log"\n}\nHERMES_CONFIG_EOF\n echo "Agent Insight Hermes config written to $HERMES_PLUGIN_DIR/config.json"\nfi\n\n# 6.45 Configure JiuwenSwarm telemetry (workspace config/.env, read by the extension)\nif [ "$INSTALL_JIUWEN" = "true" ]; then\n JW_HOME="${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}"\n JW_ENV="$JW_HOME/config/.env"\n JW_EXT_PARENT="$JW_HOME/extensions"\n JW_OTLP_ENDPOINT="${FINAL_HOST%/}/api/ingest/otel/v1/traces"\n mkdir -p "$JW_HOME/config"\n touch "$JW_ENV"\n cp "$JW_ENV" "${JW_ENV}.bak"\n # EXTENSION_DIRS: 保留既有(默认 jiuwenswarm/extensions) + 追加我们的目录(去重)\n PREV_EXT_DIRS=$(grep \'^EXTENSION_DIRS=\' "${JW_ENV}.bak" | head -n 1 | cut -d\'=\' -f2-)\n # 去掉历史值可能带的成对双引号:jiuwenswarm 模板默认 EXTENSION_DIRS="",\n # 直接拼接会写出 "";<dir>,python-dotenv 无法解析整行而丢弃 → 扩展目录失效。\n PREV_EXT_DIRS="${PREV_EXT_DIRS#\\"}"; PREV_EXT_DIRS="${PREV_EXT_DIRS%\\"}"\n if [ -z "$PREV_EXT_DIRS" ]; then PREV_EXT_DIRS="jiuwenswarm/extensions"; fi\n case ";$PREV_EXT_DIRS;" in\n *";$JW_EXT_PARENT;"*) NEW_EXT_DIRS="$PREV_EXT_DIRS" ;;\n *) NEW_EXT_DIRS="$PREV_EXT_DIRS;$JW_EXT_PARENT" ;;\n esac\n grep -v \'^OTEL_ENABLED=\' "${JW_ENV}.bak" | grep -v \'^AGENT_INSIGHT_OTLP_ENDPOINT=\' | grep -v \'^AGENT_INSIGHT_API_KEY=\' | grep -v \'^EXTENSION_DIRS=\' > "$JW_ENV"\n echo "OTEL_ENABLED=true" >> "$JW_ENV"\n echo "AGENT_INSIGHT_OTLP_ENDPOINT=$JW_OTLP_ENDPOINT" >> "$JW_ENV"\n echo "AGENT_INSIGHT_API_KEY=$FINAL_KEY" >> "$JW_ENV"\n echo "EXTENSION_DIRS=$NEW_EXT_DIRS" >> "$JW_ENV"\n rm -f "${JW_ENV}.bak"\n echo "✅ JiuwenSwarm telemetry configured -> $JW_OTLP_ENDPOINT (service=jiuwenswarm)"\n echo " 重启 JiuwenSwarm(agentserver)后,agent/LLM/tool trace 自动上报。"\nfi\n\n# 6.5 Configure Claude Code official OTel logs\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n cat > "$HOME/.agent-insight/claude_otel_env.sh" << \'CLAUDE_OTEL_EOF\'\n# Agent-Insight Claude Code OpenTelemetry integration\nunalias claude 2>/dev/null || true\n\n_skill_insight_claude_load_env() {\n if [ -f "$HOME/.agent-insight/.env" ]; then\n set -a\n . "$HOME/.agent-insight/.env"\n set +a\n fi\n}\n\nclaude() {\n _skill_insight_claude_load_env\n local _si_host="${AGENT_INSIGHT_HOST:-127.0.0.1:3000}"\n case "$_si_host" in http://*|https://*) ;; *) _si_host="http://$_si_host" ;; esac\n _si_host="${_si_host%/}"\n mkdir -p "$HOME/.agent-insight/claude_raw_bodies" 2>/dev/null || true\n env \\\n CLAUDE_CODE_ENABLE_TELEMETRY=1 \\\n OTEL_LOGS_EXPORTER=otlp \\\n OTEL_METRICS_EXPORTER="${OTEL_METRICS_EXPORTER:-none}" \\\n OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/json \\\n OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="$_si_host/api/ingest/otel/v1/logs" \\\n OTEL_EXPORTER_OTLP_HEADERS="x-witty-api-key=${AGENT_INSIGHT_API_KEY:-}" \\\n OTEL_LOG_USER_PROMPTS=1 \\\n OTEL_LOG_TOOL_DETAILS=1 \\\n OTEL_LOG_TOOL_CONTENT=1 \\\n OTEL_LOG_RAW_API_BODIES="${AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES:-file:$HOME/.agent-insight/claude_raw_bodies}" \\\n claude "$@"\n}\nCLAUDE_OTEL_EOF\n SHELL_RC="$HOME/.zshrc"\n [ -f "$HOME/.bashrc" ] && SHELL_RC="$HOME/.bashrc"\n if [ -f "$SHELL_RC" ] && ! grep -q "\\.agent-insight/claude_otel_env\\.sh" "$SHELL_RC"; then\n echo "" >> "$SHELL_RC"\n echo "# Agent-Insight Claude Code OTel" >> "$SHELL_RC"\n echo "source \\"$HOME/.agent-insight/claude_otel_env.sh\\"" >> "$SHELL_RC"\n fi\n echo "✅ Claude Code OTel env installed at $HOME/.agent-insight/claude_otel_env.sh"\n echo " Restart your terminal or run: source $HOME/.agent-insight/claude_otel_env.sh"\n pkill -f "claude_watcher_client.ts" 2>/dev/null || true\n rm -f "$HOME/.agent-insight/claude_watcher_client.ts" "$HOME/.agent-insight/start_claude_watcher.sh" "$HOME/.agent-insight/stop_claude_watcher.sh" "$HOME/.agent-insight/claude_watcher.pid"\n echo "🧹 Removed legacy Claude session-file watcher if it was installed."\nfi\n\n# 7. Create Watcher Startup/Stop Scripts\nNEEDS_WATCHER_SCRIPTS=false\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n NEEDS_WATCHER_SCRIPTS=true\nfi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "📝 Creating watcher management scripts..."\n\n if [ "$INSTALL_OPENCODE" = "true" ]; then\n cat > "$HOME/.agent-insight/start_opencode_uploader.sh" << \'OPENCODE_UP_EOF\'\n#!/bin/bash\n# Kill any previous instance (the sentinel string lets pkill -f find the loop).\npkill -f "skill-insight-opencode-uploader-loop" 2>/dev/null\npkill -f "opencode_uploader_client.js" 2>/dev/null\nmkdir -p "$HOME/.agent-insight/logs"\nINTERVAL_SEC="${AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC:-300}"\nLOG_FILE="$HOME/.agent-insight/logs/opencode_uploader.log"\nif command -v node >/dev/null 2>&1; then\n RUNTIME=node\nelif command -v bun >/dev/null 2>&1; then\n RUNTIME=bun\nelse\n echo "[$(date)] Skipped: node/bun not installed" >> "$LOG_FILE"\n exit 0\nfi\n# Loop body has a sentinel comment so `pkill -f skill-insight-opencode-uploader-loop` matches.\nnohup bash -c "\n# skill-insight-opencode-uploader-loop\nwhile true; do\n \\"$RUNTIME\\" \\"$HOME/.agent-insight/opencode_uploader_client.js\\" >> \\"$LOG_FILE\\" 2>&1\n sleep \\"$INTERVAL_SEC\\"\ndone" > /dev/null 2>&1 &\necho $! > "$HOME/.agent-insight/opencode_uploader.pid"\necho "OpenCode uploader daemon started with PID $(cat $HOME/.agent-insight/opencode_uploader.pid) (interval=${INTERVAL_SEC}s)"\nOPENCODE_UP_EOF\n chmod +x "$HOME/.agent-insight/start_opencode_uploader.sh"\n\n cat > "$HOME/.agent-insight/stop_opencode_uploader.sh" << \'STOP_OPENCODE_UP_EOF\'\n#!/bin/bash\npkill -f "skill-insight-opencode-uploader-loop" 2>/dev/null\npkill -f "opencode_uploader_client.js" 2>/dev/null\nPID_FILE="$HOME/.agent-insight/opencode_uploader.pid"\nif [ -f "$PID_FILE" ]; then kill "$(cat $PID_FILE)" 2>/dev/null; rm -f "$PID_FILE"; fi\necho "OpenCode uploader daemon stopped"\nSTOP_OPENCODE_UP_EOF\n chmod +x "$HOME/.agent-insight/stop_opencode_uploader.sh"\n fi\n\n cat > "$HOME/.agent-insight/start_watchers.sh" << \'WATCHER_HEADER\'\n#!/bin/bash\necho "Starting Agent-Insight watchers..."\nWATCHER_HEADER\n if [ "$INSTALL_OPENCODE" = "true" ]; then echo \'"$HOME/.agent-insight/start_opencode_uploader.sh"\' >> "$HOME/.agent-insight/start_watchers.sh"; fi\n echo \'echo "All watchers started!"\' >> "$HOME/.agent-insight/start_watchers.sh"\n chmod +x "$HOME/.agent-insight/start_watchers.sh"\n\n cat > "$HOME/.agent-insight/stop_watchers.sh" << \'STOP_HEADER\'\n#!/bin/bash\necho "Stopping Agent-Insight watchers..."\nSTOP_HEADER\n if [ "$INSTALL_OPENCODE" = "true" ]; then echo \'"$HOME/.agent-insight/stop_opencode_uploader.sh"\' >> "$HOME/.agent-insight/stop_watchers.sh"; fi\n echo \'echo "All watchers stopped!"\' >> "$HOME/.agent-insight/stop_watchers.sh"\n chmod +x "$HOME/.agent-insight/stop_watchers.sh"\nfi\n\n# 8. Start Watchers Now\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "🚀 Starting telemetry watchers..."\n if command -v npx &> /dev/null; then\n "$HOME/.agent-insight/start_watchers.sh"\n else\n echo "⚠️ Node.js (npx) not found. Skipping watcher startup."\n fi\nfi\n\n# 10. Final Summary\necho ""\necho "🌟 Agent-Insight Telemetry: READY"\necho "------------------------------------------------"\necho "Installed Components:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Plugin: $OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"; fi\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Command: ~/.config/opencode/commands/si-optimizer.md"; fi\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Uploader Daemon: ~/.agent-insight/opencode_uploader_client.js (5-min poll)"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " ✅ Claude Code OTel: ~/.agent-insight/claude_otel_env.sh"; fi\nif [ "$INSTALL_HERMES" = "true" ]; then echo " ✅ Agent Insight Hermes Plugin: ${HERMES_HOME:-$HOME/.hermes}/plugins/agent_insight_hermes/config.json"; fi\nif [ "$INSTALL_JIUWEN" = "true" ]; then echo " ✅ JiuwenSwarm Extension: ${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}/extensions/agent-insight-observability (telemetry in config/.env)"; fi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "Watcher Management:"\n echo " Start all: ~/.agent-insight/start_watchers.sh"\n echo " Stop all: ~/.agent-insight/stop_watchers.sh"\n echo " Logs: ~/.agent-insight/logs/"\nfi\n\necho ""\necho "Usage:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " 1. Run: opencode run \'hello\'"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " 2. Restart terminal, then run: claude"; fi\nif [ "$INSTALL_HERMES" = "true" ]; then echo " 3. Restart Hermes or start a new Hermes conversation"; fi\necho "------------------------------------------------"'].join("\n")}(r,r,a,l,I,N);return new O.NextResponse(e,{headers:{"Content-Type":"text/x-shellscript"}})}}e.s(["GET",()=>$],640112);var p=e.i(640112);let A=new n.AppRouteRouteModule({definition:{kind:t.RouteKind.APP_ROUTE,page:"/api/ingest/setup/route",pathname:"/api/ingest/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ingest/setup/route.ts",nextConfigOutput:"standalone",userland:p}),{workAsyncStorage:m,workUnitAsyncStorage:L,serverHooks:H}=A;function G(){return(0,i.patchFetch)({workAsyncStorage:m,workUnitAsyncStorage:L})}async function C(e,n,i){A.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let O="/api/ingest/setup/route";O=O.replace(/\/index$/,"")||"/";let u=await A.prepare(e,n,{srcPage:O,multiZoneDraftMode:!1});if(!u)return n.statusCode=400,n.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:g,params:$,nextConfig:p,parsedUrl:m,isDraftMode:L,prerenderManifest:H,routerServerContext:G,isOnDemandRevalidate:C,revalidateOnlyGenerated:f,resolvedPathname:R,clientReferenceManifest:P,serverActionsManifest:D}=u,F=(0,r.normalizeAppPath)(O),w=!!(H.dynamicRoutes[F]||H.routes[R]),v=async()=>((null==G?void 0:G.render404)?await G.render404(e,n,m,!1):n.end("This page could not be found"),null);if(w&&!L){let e=!!H.routes[R],n=H.dynamicRoutes[F];if(n&&!1===n.fallback&&!e){if(p.experimental.adapterPath)return await v();throw new h.NoFallbackError}}let y=null;!w||A.isDev||L||(y="/index"===(y=R)?"/":y);let W=!0===A.isDev||!w,M=w&&!W;D&&P&&(0,_.setManifestsSingleton)({page:O,clientReferenceManifest:P,serverActionsManifest:D});let U=e.method||"GET",x=(0,s.getTracer)(),b=x.getActiveScopeSpan(),k={params:$,prerenderManifest:H,renderOpts:{experimental:{authInterrupts:!!p.experimental.authInterrupts},cacheComponents:!!p.cacheComponents,supportsDynamicResponse:W,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:p.cacheLife,waitUntil:i.waitUntil,onClose:e=>{n.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(n,t,i,o)=>A.onRequestError(e,n,i,o,G)},sharedContext:{buildId:g}},K=new a.NodeNextRequest(e),j=new a.NodeNextResponse(n),J=E.NextRequestAdapter.fromNodeNextRequest(K,(0,E.signalFromNodeResponse)(n));try{let _=async e=>A.handle(J,k).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":n.statusCode,"next.rsc":!1});let t=x.getRootSpanAttributes();if(!t)return;if(t.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${t.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=t.get("next.route");if(i){let n=`${U} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":n}),e.updateName(n)}else e.updateName(`${U} ${O}`)}),r=!!(0,o.getRequestMeta)(e,"minimalMode"),a=async o=>{var s,a;let E=async({previousCacheEntry:t})=>{try{if(!r&&C&&f&&!t)return n.statusCode=404,n.setHeader("x-nextjs-cache","REVALIDATED"),n.end("This page could not be found"),null;let s=await _(o);e.fetchMetrics=k.renderOpts.fetchMetrics;let a=k.renderOpts.pendingWaitUntil;a&&i.waitUntil&&(i.waitUntil(a),a=void 0);let E=k.renderOpts.collectedTags;if(!w)return await (0,T.sendResponse)(K,j,s,k.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),n=(0,N.toNodeOutgoingHttpHeaders)(s.headers);E&&(n[c.NEXT_CACHE_TAGS_HEADER]=E),!n["content-type"]&&e.type&&(n["content-type"]=e.type);let t=void 0!==k.renderOpts.collectedRevalidate&&!(k.renderOpts.collectedRevalidate>=c.INFINITE_CACHE)&&k.renderOpts.collectedRevalidate,i=void 0===k.renderOpts.collectedExpire||k.renderOpts.collectedExpire>=c.INFINITE_CACHE?void 0:k.renderOpts.collectedExpire;return{value:{kind:d.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:n},cacheControl:{revalidate:t,expire:i}}}}catch(n){throw(null==t?void 0:t.isStale)&&await A.onRequestError(e,n,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,I.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,G),n}},l=await A.handleResponse({req:e,nextConfig:p,cacheKey:y,routeKind:t.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:H,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:f,responseGenerator:E,waitUntil:i.waitUntil,isMinimalMode:r});if(!w)return null;if((null==l||null==(s=l.value)?void 0:s.kind)!==d.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(a=l.value)?void 0:a.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});r||n.setHeader("x-nextjs-cache",C?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),L&&n.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let h=(0,N.fromNodeOutgoingHttpHeaders)(l.value.headers);return r&&w||h.delete(c.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||n.getHeader("Cache-Control")||h.get("Cache-Control")||h.set("Cache-Control",(0,S.getCacheControlHeader)(l.cacheControl)),await (0,T.sendResponse)(K,j,new Response(l.value.body,{headers:h,status:l.value.status||200})),null};b?await a(b):await x.withPropagatedContext(e.headers,()=>x.trace(l.BaseServerSpan.handleRequest,{spanName:`${U} ${O}`,kind:s.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},a))}catch(n){if(n instanceof h.NoFallbackError||await A.onRequestError(e,n,{routerKind:"App Router",routePath:F,routeType:"route",revalidateReason:(0,I.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:C})},!1,G),w)throw n;return await (0,T.sendResponse)(K,j,new Response(null,{status:500})),null}}e.s(["handler",()=>C,"patchFetch",()=>G,"routeModule",()=>A,"serverHooks",()=>H,"workAsyncStorage",()=>m,"workUnitAsyncStorage",()=>L],901411)}];
|
|
1
|
+
module.exports=[901411,e=>{"use strict";var n=e.i(747909),t=e.i(174017),i=e.i(996250),o=e.i(759756),s=e.i(561916),_=e.i(174677),r=e.i(869741),E=e.i(316795),a=e.i(487718),l=e.i(995169),I=e.i(47587),N=e.i(666012),T=e.i(570101),S=e.i(626937),c=e.i(10372),h=e.i(193695);e.i(52474);var d=e.i(600220),O=e.i(89171);function u(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function $(e){return e.replace(/`/g,"``").replace(/"/g,'`"').replace(/\$/g,"`$")}async function g(e){let n,t,i=e.headers.get("x-forwarded-host")||e.headers.get("host")||"127.0.0.1:3000",o=e.headers.get("x-forwarded-proto")||"https",s=new URL(e.url),_=process.env.NEXT_PUBLIC_URL_PREFIX||"",r=`${o}://${i}${_}`,E=s.searchParams.get("key")||s.searchParams.get("apiKey")||"",a=s.searchParams.get("yes")??s.searchParams.get("y")??s.searchParams.get("noninteractive"),l=null!==a&&!["0","false","no"].includes(a.trim().toLowerCase()),I=(s.searchParams.get("frameworks")||s.searchParams.get("framework")||"opencode").trim()||"opencode",N=s.searchParams.get("nokey")??s.searchParams.get("no-key"),T=null!==N&&!["0","false","no"].includes(N.trim().toLowerCase());if("windows"==(n=e.headers.get("user-agent")||"",(t=e.headers.get("x-platform")||"")?"windows"===t.toLowerCase()?"windows":"unix":n.toLowerCase().includes("windows")?"windows":"unix")){let e=function(e,n,t,i=!1,o="opencode",s=!1){return["# =============================================================================\n# Agent-insight One-Click Setup (PowerShell)\n# =============================================================================\n",'$AGENT_INSIGHT_HOST = "'+$(e)+'"','$AGENT_INSIGHT_BASE_URL = "'+$(n)+'"','$AGENT_INSIGHT_SETUP_API_KEY = "'+$(t)+'"','\n# ── 非交互模式(?yes=1 / ?nokey=1,或 env):全程无提示,默认只装 opencode ──────\n# iex (irm "<host>/api/ingest/setup?yes=1&nokey=1")\n# 或 env: $env:AGENT_INSIGHT_NONINTERACTIVE=1; $env:AGENT_INSIGHT_NO_KEY=1',"$NONINTERACTIVE = $"+(i?"true":"false"),'$NONINTERACTIVE_FRAMEWORKS = "'+$(o||"opencode")+'"',"$FORCE_NO_KEY = $"+(s?"true":"false"),'if ($env:AGENT_INSIGHT_NONINTERACTIVE -eq "1" -or $env:AGENT_INSIGHT_NONINTERACTIVE -eq "true") { $NONINTERACTIVE = $true }\nif ($env:AGENT_INSIGHT_NO_KEY -eq "1" -or $env:AGENT_INSIGHT_NO_KEY -eq "true") { $FORCE_NO_KEY = $true }\nif ($NONINTERACTIVE) { Write-Host "🤖 非交互模式:跳过所有提示,安装框架 = $NONINTERACTIVE_FRAMEWORKS" }\n\nWrite-Host "🚀 Fetching Agent-insight telemetry components from $AGENT_INSIGHT_BASE_URL..."\n\n# 0. Check Node.js version\n$nodeCmd = Get-Command node -ErrorAction SilentlyContinue\nif (-not $nodeCmd) {\n Write-Host "❌ Error: Node.js is not installed." -ForegroundColor Red\n Write-Host " Agent-insight requires Node.js 20 or higher."\n Write-Host " Please install Node.js: https://nodejs.org/"\n exit 1\n}\n\n$nodeVersion = (node -v 2>$null) -replace "^v", ""\n$nodeMajor = $nodeVersion.Split(".")[0]\nif ([int]$nodeMajor -lt 20) {\n Write-Host "❌ Error: Node.js version $nodeVersion is not supported." -ForegroundColor Red\n Write-Host " Agent-insight requires Node.js 20 or higher."\n Write-Host " Please upgrade your Node.js version: https://nodejs.org/"\n exit 1\n}\nWrite-Host "✅ Node.js version: $nodeVersion"\n\n# 1. Setup Directories\n$homeDir = $env:USERPROFILE\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.agent-insight" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.agent-insight\\logs" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.opencode\\skills" | Out-Null\nNew-Item -ItemType Directory -Force -Path "$homeDir\\.claude\\projects" | Out-Null\nNew-Item -ItemType Directory -Force -Path ".opencode\\skills" | Out-Null\nWrite-Host "📂 Created necessary directories"\n\n# 2. Framework Selection(非交互模式跳过 inquirer,用默认 $NONINTERACTIVE_FRAMEWORKS)\nWrite-Host ""\n\nif ($NONINTERACTIVE) {\n $SELECTED_FRAMEWORKS = $NONINTERACTIVE_FRAMEWORKS\n} else {\n\n$SELECTOR_SCRIPT = "$homeDir\\.agent-insight\\framework_selector.mjs"\n$SELECTOR_RESULT = "$homeDir\\.agent-insight\\.selector_result"\n\n# Install inquirer and tsx if not already installed\nSet-Location "$homeDir\\.agent-insight"\nif (-not (Test-Path "package.json")) {\n \'{"name": "agent-insight-setup", "version": "1.0.0", "type": "module", "dependencies": {}}\' | Out-File -FilePath "package.json" -Encoding utf8\n}\nif (-not (Test-Path "node_modules\\inquirer") -or -not (Test-Path "node_modules\\tsx")) {\n Write-Host "📦 Installing dependencies for interactive selection..."\n npm install inquirer tsx --save 2>$null\n}\n\n$selectorContent = @\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'Hermes\', value: \'hermes\' },\n { name: \'JiuwenSwarm\', value: \'jiuwen\' }\n];\n\nasync function select() {\n console.log(\'\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Agent-insight ✨ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');\n console.log(\'\');\n console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');\n console.log(\'\');\n\n const answers = await inquirer.prompt([\n {\n type: \'checkbox\',\n name: \'frameworks\',\n message: \'集成到:\',\n choices: frameworks,\n default: [\'opencode\'],\n pageSize: 10,\n loop: false\n }\n ]);\n\n const selected = answers.frameworks;\n \n if (selected.length > 0) {\n console.log(\'\');\n console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');\n selected.forEach(fw => {\n const name = frameworks.find(f => f.value === fw)?.name || fw;\n console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);\n });\n console.log(\'\');\n } else {\n console.log(\'\');\n console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');\n console.log(\'\');\n }\n\n const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.USERPROFILE + \'\\\\.agent-insight\\\\.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\n\'@\n\nSet-Content -Path $SELECTOR_SCRIPT -Value $selectorContent -Encoding UTF8\n\n# Run the selector interactively\n$env:SELECTOR_RESULT_FILE = $SELECTOR_RESULT\nSet-Location "$homeDir\\.agent-insight"\nnpx -y tsx $SELECTOR_SCRIPT\n\n# Read the selection result from file\nif (Test-Path $SELECTOR_RESULT) {\n $SELECTED_FRAMEWORKS = Get-Content $SELECTOR_RESULT\n Remove-Item $SELECTOR_RESULT -Force\n} else {\n $SELECTED_FRAMEWORKS = ""\n}\n} # end: 交互 vs 非交互 框架选择\n\n# Set installation flags based on selection\n$INSTALL_OPENCODE = $false\n$INSTALL_CLAUDE = $false\n$INSTALL_HERMES = $false\n$INSTALL_JIUWEN = $false\n\nif ($SELECTED_FRAMEWORKS -match "opencode") {\n $INSTALL_OPENCODE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "claude") {\n $INSTALL_CLAUDE = $true\n}\nif ($SELECTED_FRAMEWORKS -match "hermes") {\n $INSTALL_HERMES = $true\n}\nif ($SELECTED_FRAMEWORKS -match "jiuwen") {\n $INSTALL_JIUWEN = $true\n}\n\n# Exit if nothing selected\nif (-not $INSTALL_OPENCODE -and -not $INSTALL_CLAUDE -and -not $INSTALL_HERMES -and -not $INSTALL_JIUWEN) {\n Write-Host "⚠️ 未选择任何框架组件,将跳过插件安装。"\n Write-Host " 继续执行配置步骤..."\n Write-Host ""\n}\n\n# 3. Download Components\nif ($INSTALL_OPENCODE) {\n Write-Host "⏬ Downloading OpenCode Plugin..."\n $opencodeConfigDir = Join-Path $homeDir ".config\\opencode"\n New-Item -ItemType Directory -Path (Join-Path $opencodeConfigDir "plugins") -Force | Out-Null\n Remove-Item -Path (Join-Path $opencodeConfigDir "plugins\\Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $homeDir ".opencode\\plugins\\Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $homeDir ".opencode\\plugins\\Witty-Skill-Insight.ts") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.tui.tsx") -Force -ErrorAction SilentlyContinue\n Remove-Item -Path (Join-Path $homeDir ".opencode\\plugins\\Witty-Skill-Insight.tui.tsx") -Force -ErrorAction SilentlyContinue\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode" -OutFile (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.ts")\n Write-Host "⏬ Downloading OpenCode Uploader..."\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-uploader" -OutFile (Join-Path $homeDir ".agent-insight\\opencode_uploader_client.js")\n # TUI 插件是终端(TUI)专用统计页脚,依赖 solid-js/@opentui/solid;\n # 非交互(desktop/headless/共享账户)用不到,历史上会因缺依赖拖垮 opencode 启动 → 跳过\n if ($NONINTERACTIVE) {\n Write-Host "⏭️ 非交互模式:跳过 TUI 统计插件(仅终端 TUI 需要)。"\n } else {\n Write-Host "⏬ Downloading OpenCode TUI Plugin..."\n $tuiPluginPath = (Join-Path $opencodeConfigDir "plugins\\Witty-Skill-Insight.tui.tsx")\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-tui" -OutFile $tuiPluginPath\n $tuiConfigFile = (Join-Path $opencodeConfigDir "tui.json")\n try {\n $data = @{}\n if (Test-Path $tuiConfigFile) {\n $raw = Get-Content $tuiConfigFile -Raw\n if ($raw -and $raw.Trim()) { $data = $raw | ConvertFrom-Json }\n }\n if (-not $data.plugin) { $data | Add-Member -MemberType NoteProperty -Name plugin -Value @() -Force }\n if ($data.plugin -notcontains $tuiPluginPath) { $data.plugin += $tuiPluginPath }\n $data | ConvertTo-Json -Depth 10 | Set-Content -Path $tuiConfigFile -Encoding UTF8\n } catch {\n Write-Host "⚠️ Failed to patch tui.json for TUI plugin."\n }\n }\n}\n\nif ($INSTALL_CLAUDE) {\n Write-Host "🛰️ Claude Code will use official OpenTelemetry logs; no session-file watcher is required."\n}\n\nif ($INSTALL_HERMES) {\n Write-Host "Installing Agent Insight Hermes plugin..."\n $hermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }\n $hermesPluginDir = Join-Path $hermesHome "plugins\\agent_insight_hermes"\n New-Item -ItemType Directory -Path $hermesPluginDir -Force | Out-Null\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/hermes-plugin" -OutFile (Join-Path $hermesPluginDir "__init__.py")\n @("name: agent_insight_hermes", "version: 0.2.0", "description: Agent Insight telemetry for Hermes", "provides_hooks:", " - pre_llm_call", " - post_llm_call", " - pre_api_request", " - post_api_request", " - api_request_error", " - pre_tool_call", " - post_tool_call", " - subagent_start", " - subagent_stop", " - on_session_end") | Set-Content -Path (Join-Path $hermesPluginDir "plugin.yaml") -Encoding UTF8\n $hermesCmd = Get-Command hermes -ErrorAction SilentlyContinue\n if ($hermesCmd) {\n & $hermesCmd.Source plugins enable agent_insight_hermes\n } else {\n Write-Host "Warning: hermes command not found. The plugin files were installed; enable agent_insight_hermes after installing Hermes."\n }\n}\n\nif ($INSTALL_JIUWEN) {\n Write-Host "⏬ Installing Agent-insight JiuwenSwarm extension..."\n $jwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }\n $jwExtDir = Join-Path $jwHome "extensions\\agent-insight-observability"\n New-Item -ItemType Directory -Path $jwExtDir -Force | Out-Null\n New-Item -ItemType Directory -Path (Join-Path $jwHome "config") -Force | Out-Null\n Invoke-WebRequest -Uri "$AGENT_INSIGHT_BASE_URL/api/setup/jiuwen-extension" -OutFile (Join-Path $jwExtDir "extension.py")\n @(\'id: agent-insight-observability\', \'name: agent-insight-observability\', \'version: 0.1.0\', \'description: Zero-code observability onboarding for JiuwenSwarm via agent-core OTLP.\', \'author: agent-insight\', \'min_jiuwenswarm_version: "0.2.0"\', \'dependencies: {}\', \'config_schema:\', \' type: object\') | Set-Content -Path (Join-Path $jwExtDir "extension.yaml") -Encoding UTF8\n Write-Host "✅ JiuwenSwarm extension installed at $jwExtDir"\n}\n\n# 4. Configure ~/.agent-insight/.env\n$AGENT_INSIGHT_CONFIG_FILE = "$homeDir\\.agent-insight\\.env"\n$EXISTING_KEY = ""\n$EXISTING_HOST = ""\n$EXISTING_SHOW_TASK_STATS = ""\n$EXISTING_UPLOAD_SINCE_MS = ""\nif (Test-Path $AGENT_INSIGHT_CONFIG_FILE) {\n $content = Get-Content $AGENT_INSIGHT_CONFIG_FILE\n $keyLine = $content | Select-String \'^AGENT_INSIGHT_API_KEY=\' | Select-Object -First 1\n $hostLine = $content | Select-String \'^AGENT_INSIGHT_HOST=\' | Select-Object -First 1\n $showLine = $content | Select-String \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' | Select-Object -First 1\n $sinceLine = $content | Select-String \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' | Select-Object -First 1\n if ($keyLine) {\n $EXISTING_KEY = $keyLine.Line.Substring(\'AGENT_INSIGHT_API_KEY=\'.Length)\n }\n if ($hostLine) {\n $EXISTING_HOST = $hostLine.Line.Substring(\'AGENT_INSIGHT_HOST=\'.Length)\n }\n if ($showLine) {\n $EXISTING_SHOW_TASK_STATS = $showLine.Line.Substring(\'AGENT_INSIGHT_SHOW_TASK_STATS=\'.Length)\n }\n if ($sinceLine) {\n $EXISTING_UPLOAD_SINCE_MS = $sinceLine.Line.Substring(\'AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\'.Length)\n }\n}\n\n# -- API Key Logic --\n$FINAL_KEY = if ($AGENT_INSIGHT_SETUP_API_KEY) { $AGENT_INSIGHT_SETUP_API_KEY } else { $EXISTING_KEY }\nif ($FORCE_NO_KEY) {\n $FINAL_KEY = ""\n Write-Host "🔑 --no-key:强制无 key(清空本机已有 key),数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。"\n} elseif ($NONINTERACTIVE) {\n if ($FINAL_KEY) { Write-Host "🔑 Using API Key (from setup URL / existing config)." }\n else { Write-Host "🔑 非交互模式且未提供 API Key —— 以「无 key」方式上报,数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。" }\n} elseif ($AGENT_INSIGHT_SETUP_API_KEY) {\n Write-Host "🔑 Using API Key from setup URL."\n} elseif ($EXISTING_KEY) {\n Write-Host "🔑 Found existing API Key."\n $USE_EXISTING = Read-Host "👉 Use existing key? (y/N, Default: y)"\n if ($USE_EXISTING -match \'^[Nn]$\') {\n $FINAL_KEY = Read-Host "👉 Please enter your NEW API Key"\n }\n} else {\n Write-Host "🔑 AGENT_INSIGHT_API_KEY is not set."\n $FINAL_KEY = Read-Host "👉 Please enter your API Key"\n}\n\n# -- Host Logic --\n$FINAL_HOST = $AGENT_INSIGHT_HOST\nif (-not $NONINTERACTIVE -and $EXISTING_HOST -and ($EXISTING_HOST -ne $AGENT_INSIGHT_HOST)) {\n Write-Host "🌐 Current Host in config: $EXISTING_HOST"\n Write-Host "🌐 New Host detected: $AGENT_INSIGHT_HOST"\n $CHANGE_HOST = Read-Host "👉 Change to new Host? (y/N, Default: y)"\n if ($CHANGE_HOST -match \'^[Nn]$\') {\n $FINAL_HOST = $EXISTING_HOST\n }\n} elseif (-not $EXISTING_HOST) {\n $FINAL_HOST = $AGENT_INSIGHT_HOST\n}\n\n$FINAL_SHOW_TASK_STATS = $EXISTING_SHOW_TASK_STATS\nif (-not $FINAL_SHOW_TASK_STATS) {\n $FINAL_SHOW_TASK_STATS = "true"\n}\n\nif (-not $FINAL_KEY) {\n if ($NONINTERACTIVE -or $FORCE_NO_KEY) {\n Write-Host "ℹ️ 未配置 API Key:以「无 key」方式上报,数据归到服务端默认共享账号(需服务端已配 AGENT_INSIGHT_DEFAULT_INGEST_USER)。"\n } else {\n Write-Host "⚠️ Warning: No API Key provided. Telemetry upload will fail until you set it in $AGENT_INSIGHT_CONFIG_FILE"\n }\n}\n\n# -- Per-account isolation: namespace opencode spool/checkpoint by API-key hash --\n$CLIENT_KEY_HASH = ([System.BitConverter]::ToString(([System.Security.Cryptography.SHA256]::Create()).ComputeHash([System.Text.Encoding]::UTF8.GetBytes([string]$FINAL_KEY))) -replace \'-\',\'\').ToLower().Substring(0,16)\n$NOW_MS = [string][long]([DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds())\nif ($EXISTING_UPLOAD_SINCE_MS -and ($FINAL_KEY -eq $EXISTING_KEY)) { $UPLOAD_SINCE_MS = $EXISTING_UPLOAD_SINCE_MS } else { $UPLOAD_SINCE_MS = $NOW_MS }\n\nWrite-Host "⚙️ Updating configuration..."\nNew-Item -ItemType File -Path $AGENT_INSIGHT_CONFIG_FILE -Force | Out-Null\nCopy-Item $AGENT_INSIGHT_CONFIG_FILE "$AGENT_INSIGHT_CONFIG_FILE.bak"\n$content = Get-Content "$AGENT_INSIGHT_CONFIG_FILE.bak"\n$content | Where-Object { $_ -notmatch \'^AGENT_INSIGHT_HOST=\' -and $_ -notmatch \'^AGENT_INSIGHT_API_KEY=\' -and $_ -notmatch \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' -and $_ -notmatch \'^AGENT_INSIGHT_RETENTION_DAYS=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_SPOOL_DIR=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOADER=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=\' -and $_ -notmatch \'^AGENT_INSIGHT_MAX_TOOL_IO=\' -and $_ -notmatch \'^AGENT_INSIGHT_MAX_EVENT_STRING=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=\' -and $_ -notmatch \'^AGENT_INSIGHT_CLIENT_KEY_HASH=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_CHECKPOINT=\' -and $_ -notmatch \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' } | Set-Content $AGENT_INSIGHT_CONFIG_FILE\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_HOST=$FINAL_HOST"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_API_KEY=$FINAL_KEY"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_RETENTION_DAYS=10"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=true"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLIENT_KEY_HASH=$CLIENT_KEY_HASH"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_SPOOL_DIR=$homeDir\\.agent-insight\\otel_data\\opencode\\$CLIENT_KEY_HASH"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_CHECKPOINT=$homeDir\\.agent-insight\\opencode_uploader_checkpoint_$CLIENT_KEY_HASH.json"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=$UPLOAD_SINCE_MS"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOADER=$homeDir\\.agent-insight\\opencode_uploader_client.js"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=$homeDir\\.agent-insight\\otel_data\\claude"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=file:$homeDir\\.agent-insight\\claude_raw_bodies"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_MAX_TOOL_IO=4000"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_MAX_EVENT_STRING=20000"\nAdd-Content $AGENT_INSIGHT_CONFIG_FILE "AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=15000"\nRemove-Item "$AGENT_INSIGHT_CONFIG_FILE.bak" -Force\n\n# 6.4 Configure Agent Insight Hermes plugin\nif ($INSTALL_HERMES) {\n $hermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }\n $hermesPluginDir = Join-Path $hermesHome "plugins\\agent_insight_hermes"\n New-Item -ItemType Directory -Path $hermesPluginDir -Force | Out-Null\n $hermesConfig = @{ host = $FINAL_HOST.TrimEnd("/"); api_key = $FINAL_KEY; service_name = "hermes"; max_content_chars = 200000; spool_dir = (Join-Path $skillInsightDir "data\\hermes-otel-spool"); log_file = (Join-Path $skillInsightDir "logs\\hermes-plugin.log") } | ConvertTo-Json\n Set-Content -Path (Join-Path $hermesPluginDir "config.json") -Value $hermesConfig -Encoding UTF8\n Write-Host "Agent Insight Hermes config written to $hermesPluginDir\\config.json"\n}\n\n# 6.45 Configure JiuwenSwarm telemetry (workspace config\\.env, read by the extension)\nif ($INSTALL_JIUWEN) {\n $jwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }\n $jwEnv = Join-Path $jwHome "config\\.env"\n $jwExtParent = Join-Path $jwHome "extensions"\n $jwOtlpEndpoint = $FINAL_HOST.TrimEnd("/") + "/api/ingest/otel/v1/traces"\n New-Item -ItemType Directory -Path (Join-Path $jwHome "config") -Force | Out-Null\n New-Item -ItemType File -Path $jwEnv -Force | Out-Null\n $jwPrev = Get-Content $jwEnv\n $prevExtLine = $jwPrev | Select-String \'^EXTENSION_DIRS=\' | Select-Object -First 1\n # 去掉历史值可能带的成对引号(模板默认 EXTENSION_DIRS=""),否则拼出 "";<dir> 会破坏 dotenv 解析\n $prevExtDirs = if ($prevExtLine) { $prevExtLine.Line.Substring(\'EXTENSION_DIRS=\'.Length).Trim(\'"\').Trim("\'") } else { "jiuwenswarm/extensions" }\n if (-not $prevExtDirs) { $prevExtDirs = "jiuwenswarm/extensions" }\n if ($prevExtDirs.Split(";") -notcontains $jwExtParent) { $newExtDirs = "$prevExtDirs;$jwExtParent" } else { $newExtDirs = $prevExtDirs }\n $jwPrev | Where-Object { $_ -notmatch \'^OTEL_ENABLED=\' -and $_ -notmatch \'^AGENT_INSIGHT_OTLP_ENDPOINT=\' -and $_ -notmatch \'^AGENT_INSIGHT_API_KEY=\' -and $_ -notmatch \'^EXTENSION_DIRS=\' } | Set-Content $jwEnv\n Add-Content $jwEnv "OTEL_ENABLED=true"\n Add-Content $jwEnv "AGENT_INSIGHT_OTLP_ENDPOINT=$jwOtlpEndpoint"\n Add-Content $jwEnv "AGENT_INSIGHT_API_KEY=$FINAL_KEY"\n Add-Content $jwEnv "EXTENSION_DIRS=$newExtDirs"\n Write-Host "✅ JiuwenSwarm telemetry configured -> $jwOtlpEndpoint (service=jiuwenswarm)"\n}\nWrite-Host "✅ Configuration updated at $AGENT_INSIGHT_CONFIG_FILE"\n\n# 6.5 Configure Claude Code official OTel logs\nif ($INSTALL_CLAUDE) {\n $claudeOtelScript = @\'\nfunction Invoke-SkillInsightClaude {\n $envFile = Join-Path $env:USERPROFILE ".agent-insight\\.env"\n if (Test-Path $envFile) {\n Get-Content $envFile | ForEach-Object {\n if ($_ -match "^([^#=]+)=(.*)$") { [Environment]::SetEnvironmentVariable($matches[1], $matches[2], "Process") }\n }\n }\n $siHost = if ($env:AGENT_INSIGHT_HOST) { $env:AGENT_INSIGHT_HOST } else { "127.0.0.1:3000" }\n if ($siHost -notmatch "^https?://") { $siHost = "http://$siHost" }\n $siHost = $siHost.TrimEnd("/")\n $env:CLAUDE_CODE_ENABLE_TELEMETRY = "1"\n $env:OTEL_LOGS_EXPORTER = "otlp"\n if (-not $env:OTEL_METRICS_EXPORTER) { $env:OTEL_METRICS_EXPORTER = "none" }\n $env:OTEL_EXPORTER_OTLP_LOGS_PROTOCOL = "http/json"\n $env:OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = "$siHost/api/ingest/otel/v1/logs"\n $env:OTEL_EXPORTER_OTLP_HEADERS = "x-witty-api-key=$($env:AGENT_INSIGHT_API_KEY)"\n $env:OTEL_LOG_USER_PROMPTS = "1"\n $env:OTEL_LOG_TOOL_DETAILS = "1"\n $env:OTEL_LOG_TOOL_CONTENT = "1"\n $rawBodyDir = Join-Path $env:USERPROFILE ".agent-insight\\claude_raw_bodies"\n New-Item -ItemType Directory -Path $rawBodyDir -Force | Out-Null\n if (-not $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES) { $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES = "file:$rawBodyDir" }\n $env:OTEL_LOG_RAW_API_BODIES = $env:AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES\n $cmd = Get-Command claude -CommandType Application -ErrorAction SilentlyContinue\n if (-not $cmd) { throw "claude executable not found in PATH" }\n & $cmd.Source @args\n}\nSet-Alias claude Invoke-SkillInsightClaude\n\'@\n $claudeOtelPath = "$homeDir\\.agent-insight\\claude_otel_env.ps1"\n Set-Content -Path $claudeOtelPath -Value $claudeOtelScript -Encoding UTF8\n $profileDir = Split-Path $PROFILE -Parent\n if ($profileDir) { New-Item -ItemType Directory -Path $profileDir -Force | Out-Null }\n $profileText = if (Test-Path $PROFILE) { Get-Content $PROFILE -Raw } else { "" }\n if (-not ($profileText.Contains(".agent-insight\\claude_otel_env.ps1") -or $profileText.Contains(".agent-insight/claude_otel_env.ps1"))) {\n Add-Content -Path $PROFILE -Value ""\n Add-Content -Path $PROFILE -Value "# Skill-Insight Claude Code OTel"\n Add-Content -Path $PROFILE -Value ". `"$claudeOtelPath`""\n }\n Write-Host "✅ Claude Code OTel env installed at $claudeOtelPath"\n Write-Host " Restart PowerShell or run: . `"$claudeOtelPath`""\n Get-Process | Where-Object { $_.CommandLine -like "*claude_watcher_client.ts*" } | Stop-Process -Force -ErrorAction SilentlyContinue\n Remove-Item "$homeDir\\.agent-insight\\claude_watcher_client.ts", "$homeDir\\.agent-insight\\start_claude_watcher.ps1", "$homeDir\\.agent-insight\\stop_claude_watcher.ps1", "$homeDir\\.agent-insight\\claude_watcher.pid" -Force -ErrorAction SilentlyContinue\n Write-Host "🧹 Removed legacy Claude session-file watcher if it was installed."\n}\n\n# 7. Create Watcher Startup/Stop Scripts\n$NEEDS_WATCHER_SCRIPTS = $false\nif ($INSTALL_OPENCODE) {\n $NEEDS_WATCHER_SCRIPTS = $true\n}\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "📝 Creating watcher management scripts..."\n\n if ($INSTALL_OPENCODE) {\n $startScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*opencode_uploader_client.js*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nGet-Process | Where-Object { $_.CommandLine -like "*skill-insight-opencode-uploader-loop*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nNew-Item -ItemType Directory -Path "$env:USERPROFILE\\.agent-insight\\logs" -Force | Out-Null\n$intervalSec = if ($env:AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC) { $env:AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC } else { "300" }\n$logFile = "$env:USERPROFILE\\.agent-insight\\logs\\opencode_uploader.log"\n$uploaderPath = "$env:USERPROFILE\\.agent-insight\\opencode_uploader_client.js"\n$runtime = if (Get-Command node -ErrorAction SilentlyContinue) { "node" } elseif (Get-Command bun -ErrorAction SilentlyContinue) { "bun" } else { $null }\nif (-not $runtime) {\n Add-Content $logFile "[$(Get-Date)] Skipped: node/bun not installed"\n return\n}\n# Sentinel marker in script body so it can be matched by CommandLine search.\n$loopBody = @"\n# skill-insight-opencode-uploader-loop\nwhile (`$true) {\n & `"$runtime`" `"$uploaderPath`" *>> `"$logFile`"\n Start-Sleep -Seconds $intervalSec\n}\n"@\n$proc = Start-Process -FilePath "powershell" -ArgumentList "-NoProfile", "-Command", $loopBody -PassThru -WindowStyle Hidden\nSet-Content "$env:USERPROFILE\\.agent-insight\\opencode_uploader.pid" $proc.Id\nWrite-Host "OpenCode uploader daemon started with PID $($proc.Id) (interval=${intervalSec}s)"\n\'@\n Set-Content -Path "$homeDir\\.agent-insight\\start_opencode_uploader.ps1" -Value $startScript -Encoding UTF8\n\n $stopScript = @\'\nGet-Process | Where-Object { $_.CommandLine -like "*skill-insight-opencode-uploader-loop*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nGet-Process | Where-Object { $_.CommandLine -like "*opencode_uploader_client.js*" } | Stop-Process -Force -ErrorAction SilentlyContinue\nRemove-Item "$env:USERPROFILE\\.agent-insight\\opencode_uploader.pid" -Force -ErrorAction SilentlyContinue\nWrite-Host "OpenCode uploader daemon stopped"\n\'@\n Set-Content -Path "$homeDir\\.agent-insight\\stop_opencode_uploader.ps1" -Value $stopScript -Encoding UTF8\n }\n\n $combinedStart = \'Write-Host "Starting Agent-Insight watchers..."\'\n if ($INSTALL_OPENCODE) { $combinedStart += [char]10 + "& `"$homeDir\\.agent-insight\\start_opencode_uploader.ps1`"" }\n $combinedStart += [char]10 + \'Write-Host "All watchers started!"\'\n Set-Content -Path "$homeDir\\.agent-insight\\start_watchers.ps1" -Value $combinedStart -Encoding UTF8\n\n $combinedStop = \'Write-Host "Stopping Agent-Insight watchers..."\'\n if ($INSTALL_OPENCODE) { $combinedStop += [char]10 + "& `"$homeDir\\.agent-insight\\stop_opencode_uploader.ps1`"" }\n $combinedStop += [char]10 + \'Write-Host "All watchers stopped!"\'\n Set-Content -Path "$homeDir\\.agent-insight\\stop_watchers.ps1" -Value $combinedStop -Encoding UTF8\n}\n\n# 8. Start Watchers Now\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "🚀 Starting telemetry watchers..."\n if (Get-Command npx -ErrorAction SilentlyContinue) {\n & "$homeDir\\.agent-insight\\start_watchers.ps1"\n } else {\n Write-Host "⚠️ Node.js (npx) not found. Skipping watcher startup."\n }\n}\n\n# 10. Final Summary\nWrite-Host ""\nWrite-Host "🌟 Agent-Insight Telemetry: READY"\nWrite-Host "------------------------------------------------"\nWrite-Host "Installed Components:"\nif ($INSTALL_OPENCODE) { Write-Host " ✅ OpenCode Plugin: $opencodeConfigDir\\plugins\\Witty-Skill-Insight.ts" }\nif ($INSTALL_OPENCODE) { Write-Host " ✅ OpenCode Uploader Daemon: ~/.agent-insight/opencode_uploader_client.js (5-min poll)" }\nif ($INSTALL_CLAUDE) { Write-Host " ✅ Claude Code OTel: ~/.agent-insight/claude_otel_env.ps1" }\nif ($INSTALL_HERMES) { $summaryHermesHome = if ($env:HERMES_HOME) { $env:HERMES_HOME } else { Join-Path $homeDir ".hermes" }; Write-Host " ✅ Agent Insight Hermes Plugin: $summaryHermesHome\\plugins\\agent_insight_hermes\\config.json" }\nif ($INSTALL_JIUWEN) { $summaryJwHome = if ($env:JIUWENSWARM_DATA_DIR) { $env:JIUWENSWARM_DATA_DIR } else { Join-Path $homeDir ".jiuwenswarm" }; Write-Host " ✅ JiuwenSwarm Extension: $summaryJwHome\\extensions\\agent-insight-observability (telemetry in config\\.env)" }\n\nif ($NEEDS_WATCHER_SCRIPTS) {\n Write-Host ""\n Write-Host "Watcher Management:"\n Write-Host " Start all: ~/.agent-insight/start_watchers.ps1"\n Write-Host " Stop all: ~/.agent-insight/stop_watchers.ps1"\n Write-Host " Logs: ~/.agent-insight/logs/"\n}\n\nWrite-Host ""\nWrite-Host "Usage:"\nif ($INSTALL_OPENCODE) { Write-Host " 1. Run: opencode run \'hello\'" }\nif ($INSTALL_CLAUDE) { Write-Host " 2. Restart PowerShell, then run: claude" }\nif ($INSTALL_HERMES) { Write-Host " 3. Restart Hermes or start a new Hermes conversation" }\nWrite-Host "------------------------------------------------"'].join("\n")}(r,r,E,l,I,T);return new O.NextResponse(e,{headers:{"Content-Type":"text/plain; charset=utf-8"}})}{let e=function(e,n,t,i=!1,o="opencode",s=!1){return["#!/bin/bash\n# =============================================================================\n# Agent-insight One-Click Setup\n# =============================================================================\n",'AGENT_INSIGHT_HOST="'+u(e)+'"','AGENT_INSIGHT_BASE_URL="'+u(n)+'"','AGENT_INSIGHT_SETUP_API_KEY="'+u(t)+'"','OPENCODE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/opencode"\n\n# ── 非交互模式(-y / --yes):全程无提示,默认只装 opencode ─────────────────────\n# curl -sSf "<host>/api/ingest/setup" | bash -s -- -y\n# URL 直接带: curl -sSf "<host>/api/ingest/setup?yes=1" | bash\n# env: curl -sSf "<host>/api/ingest/setup" | AGENT_INSIGHT_NONINTERACTIVE=1 bash\n# 指定框架: ... | bash -s -- -y --frameworks=opencode,claude\n# 强制无 key: ... ?yes=1&nokey=1 或 bash -s -- -y --no-key(清空本机已有 key,切共享账号)',"NONINTERACTIVE="+(i?"true":"false"),'NONINTERACTIVE_FRAMEWORKS="'+u(o||"opencode")+'"',"FORCE_NO_KEY="+(s?"true":"false"),'for arg in "$@"; do\n case "$arg" in\n -y|--yes|--non-interactive|--noninteractive) NONINTERACTIVE=true ;;\n --no-key|--nokey) FORCE_NO_KEY=true ;;\n --frameworks=*) NONINTERACTIVE=true; NONINTERACTIVE_FRAMEWORKS="${arg#*=}" ;;\n esac\ndone\nif [ "${AGENT_INSIGHT_NONINTERACTIVE:-}" = "1" ] || [ "${AGENT_INSIGHT_NONINTERACTIVE:-}" = "true" ]; then NONINTERACTIVE=true; fi\nif [ "$NONINTERACTIVE" = "true" ]; then echo "🤖 非交互模式:跳过所有提示,安装框架 = $NONINTERACTIVE_FRAMEWORKS"; fi\n\necho "🚀 Fetching Agent-insight telemetry components from $AGENT_INSIGHT_BASE_URL..."\n\n# 0. Check Node.js version\nif ! command -v node &> /dev/null; then\n echo "❌ Error: Node.js is not installed."\n echo " Agent-insight requires Node.js 20 or higher."\n echo " Please install Node.js: https://nodejs.org/"\n exit 1\nfi\n\nNODE_VERSION=$(node -v 2>/dev/null | sed "s/v//")\nNODE_MAJOR=$(echo "$NODE_VERSION" | cut -d. -f1)\nif [ "$NODE_MAJOR" -lt 20 ]; then\n echo "❌ Error: Node.js version $NODE_VERSION is not supported."\n echo " Agent-insight requires Node.js 20 or higher."\n echo " Please upgrade your Node.js version: https://nodejs.org/"\n exit 1\nfi\necho "✅ Node.js version: $NODE_VERSION"\n\n# 1. Setup Directories\nmkdir -p "$HOME/.agent-insight"\nmkdir -p "$HOME/.agent-insight/logs"\nmkdir -p "$OPENCODE_CONFIG_DIR/plugins"\nmkdir -p "$HOME/.opencode/skills"\nmkdir -p "$HOME/.claude/projects"\nmkdir -p ".opencode/skills"\nmkdir -p "$HOME/.agent-insight/example"\necho "📂 Created necessary directories"\n\n# 1b. Download built-in example messages log (for the bundled "messages 日志分析" dataset / demo traces)\nif curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/example-messages" -o "$HOME/.agent-insight/example/messages"; then\n echo "📄 Example log ready at $HOME/.agent-insight/example/messages"\nelse\n echo "⚠️ Skipped example messages log download (non-fatal)"\nfi\n\n# 2. Framework Selection(非交互模式跳过 inquirer,直接用 $NONINTERACTIVE_FRAMEWORKS)\necho ""\n\nif [ "$NONINTERACTIVE" = "true" ]; then\n SELECTED_FRAMEWORKS="$NONINTERACTIVE_FRAMEWORKS"\nelse\n\nSELECTOR_SCRIPT="$HOME/.agent-insight/framework_selector.mjs"\nSELECTOR_RESULT="$HOME/.agent-insight/.selector_result"\n\n# Install inquirer and tsx if not already installed\ncd "$HOME/.agent-insight"\nif [ ! -f "package.json" ]; then\n echo \'{"name": "agent-insight-setup", "version": "1.0.0", "type": "module", "dependencies": {}}\' > package.json\nfi\nif [ ! -d "node_modules/inquirer" ] || [ ! -d "node_modules/tsx" ]; then\n echo "📦 Installing dependencies for interactive selection..."\n npm install inquirer tsx --save 2>/dev/null\nfi\n\ncat > "$SELECTOR_SCRIPT" << \'SELECTOR_EOF\'\nimport inquirer from \'inquirer\';\nimport fs from \'fs\';\n\nconst frameworks = [\n { name: \'OpenCode\', value: \'opencode\' },\n { name: \'Claude Code\', value: \'claude\' },\n { name: \'Hermes\', value: \'hermes\' },\n { name: \'JiuwenSwarm\', value: \'jiuwen\' }\n];\n\nasync function select() {\n console.log(\'\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╔══════════════════════════════════════════════════════════╗\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[1m\\x1b[36m%s\\x1b[0m\', \'║ ✨ Agent-insight ✨ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'║ ║\');\n console.log(\'\\x1b[36m%s\\x1b[0m\', \'╚══════════════════════════════════════════════════════════╝\');\n console.log(\'\');\n console.log(\'\\x1b[90m%s\\x1b[0m\', \' 提示: ↑↓ 移动 | 空格 选择 | a 全选 | i 反选 | Enter 确认\');\n console.log(\'\');\n\n const answers = await inquirer.prompt([\n {\n type: \'checkbox\',\n name: \'frameworks\',\n message: \'集成到:\',\n choices: frameworks,\n default: [\'opencode\'],\n pageSize: 10,\n loop: false\n }\n ]);\n\n const selected = answers.frameworks;\n \n if (selected.length > 0) {\n console.log(\'\');\n console.log(\'\\x1b[32m%s\\x1b[0m\', \'✅ 将安装以下组件:\');\n selected.forEach(fw => {\n const name = frameworks.find(f => f.value === fw)?.name || fw;\n console.log(\'\\x1b[32m%s\\x1b[0m\', \' • \' + name);\n });\n console.log(\'\');\n } else {\n console.log(\'\');\n console.log(\'\\x1b[33m%s\\x1b[0m\', \'⚠️ 未选择任何组件,将不进行安装。\');\n console.log(\'\');\n }\n\n const resultFile = process.env.SELECTOR_RESULT_FILE || process.env.HOME + \'/.agent-insight/.selector_result\';\n fs.writeFileSync(resultFile, selected.join(\',\'));\n}\n\nselect().catch(err => {\n console.error(\'Error:\', err);\n process.exit(1);\n});\nSELECTOR_EOF\n\n# Run the selector interactively from /dev/tty\nexport SELECTOR_RESULT_FILE="$SELECTOR_RESULT"\ncd "$HOME/.agent-insight" && npx -y tsx "$SELECTOR_SCRIPT" < /dev/tty\n\n# Read the selection result from file\nif [ -f "$SELECTOR_RESULT" ]; then\n SELECTED_FRAMEWORKS=$(cat "$SELECTOR_RESULT")\n rm -f "$SELECTOR_RESULT"\nelse\n SELECTED_FRAMEWORKS=""\nfi\nfi # end: 交互 vs 非交互 框架选择\n\n# Set installation flags based on selection\nINSTALL_OPENCODE=false\nINSTALL_CLAUDE=false\nINSTALL_HERMES=false\nINSTALL_JIUWEN=false\n\nif [[ "$SELECTED_FRAMEWORKS" == *"opencode"* ]]; then\n INSTALL_OPENCODE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"claude"* ]]; then\n INSTALL_CLAUDE=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"hermes"* ]]; then\n INSTALL_HERMES=true\nfi\nif [[ "$SELECTED_FRAMEWORKS" == *"jiuwen"* ]]; then\n INSTALL_JIUWEN=true\nfi\n\n# Exit if nothing selected\nif [ "$INSTALL_OPENCODE" = "false" ] && [ "$INSTALL_CLAUDE" = "false" ] && [ "$INSTALL_HERMES" = "false" ] && [ "$INSTALL_JIUWEN" = "false" ]; then\n echo "⚠️ 未选择任何框架组件,将跳过插件安装。"\n echo " 继续执行配置步骤..."\n echo ""\nfi\n\n# 3. Download Components\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n echo "⏬ Downloading OpenCode Plugin..."\n rm -f "$OPENCODE_CONFIG_DIR/plugins/Skill-Insight.ts" "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts" "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx" 2>/dev/null || true\n rm -f "$HOME/.opencode/plugins/Skill-Insight.ts" "$HOME/.opencode/plugins/Witty-Skill-Insight.ts" "$HOME/.opencode/plugins/Witty-Skill-Insight.tui.tsx" 2>/dev/null || true\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"\n echo "⏬ Downloading OpenCode Uploader..."\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-uploader" -o "$HOME/.agent-insight/opencode_uploader_client.js"\n echo "⏬ Installing OpenCode commands..."\n mkdir -p "$OPENCODE_CONFIG_DIR/commands"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-commands/si-optimizer" -o "$OPENCODE_CONFIG_DIR/commands/si-optimizer.md"\n # TUI 插件是终端(TUI)专用的统计页脚,依赖 solid-js/@opentui/solid;\n # 非交互(desktop/headless/共享账户)场景用不到,历史上还会因缺依赖拖垮 opencode 启动 → 跳过\n if [ "$NONINTERACTIVE" = "true" ]; then\n echo "⏭️ 非交互模式:跳过 TUI 统计插件(仅终端 TUI 需要)。"\n else\n echo "⏬ Downloading OpenCode TUI Plugin..."\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/opencode-tui" -o "$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n export TUI_PLUGIN_PATH="$OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.tui.tsx"\n export TUI_CONFIG_FILE="$OPENCODE_CONFIG_DIR/tui.json"\n if command -v node &> /dev/null; then\n node - <<\'NODE\'\nconst fs = require("fs");\nconst path = require("path");\nconst file = process.env.TUI_CONFIG_FILE;\nconst pluginPath = process.env.TUI_PLUGIN_PATH;\nlet data = {};\ntry {\n if (fs.existsSync(file)) {\n const text = fs.readFileSync(file, "utf8");\n data = text && text.trim() ? JSON.parse(text) : {};\n }\n} catch {}\nif (!data || typeof data !== "object") data = {};\nconst list = Array.isArray(data.plugin) ? data.plugin.slice() : [];\nif (pluginPath && !list.includes(pluginPath)) list.push(pluginPath);\ndata.plugin = list;\nfs.mkdirSync(path.dirname(file), { recursive: true });\nfs.writeFileSync(file, JSON.stringify(data, null, 2));\nNODE\n else\n echo "⚠️ node not found; skip TUI plugin config patch."\n fi\n fi\nfi\n\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n echo "🛰️ Claude Code will use official OpenTelemetry logs; no session-file watcher is required."\nfi\n\nif [ "$INSTALL_HERMES" = "true" ]; then\n echo "Installing Agent Insight Hermes plugin..."\n HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"\n HERMES_PLUGIN_DIR="$HERMES_HOME/plugins/agent_insight_hermes"\n mkdir -p "$HERMES_PLUGIN_DIR"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/hermes-plugin" -o "$HERMES_PLUGIN_DIR/__init__.py"\n cat > "$HERMES_PLUGIN_DIR/plugin.yaml" <<\'HERMES_PLUGIN_EOF\'\nname: agent_insight_hermes\nversion: 0.2.0\ndescription: Agent Insight telemetry for Hermes\nprovides_hooks:\n - pre_llm_call\n - post_llm_call\n - pre_api_request\n - post_api_request\n - api_request_error\n - pre_tool_call\n - post_tool_call\n - subagent_start\n - subagent_stop\n - on_session_end\nHERMES_PLUGIN_EOF\n if command -v hermes >/dev/null 2>&1; then\n hermes plugins enable agent_insight_hermes || echo "Warning: enable the plugin manually with: hermes plugins enable agent_insight_hermes"\n else\n echo "Warning: hermes command not found. The plugin files were installed; enable agent_insight_hermes after installing Hermes."\n fi\nfi\n\nif [ "$INSTALL_JIUWEN" = "true" ]; then\n echo "⏬ Installing Agent-insight JiuwenSwarm extension..."\n JW_HOME="${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}"\n JW_EXT_DIR="$JW_HOME/extensions/agent-insight-observability"\n mkdir -p "$JW_EXT_DIR" "$JW_HOME/config"\n curl -sSf "$AGENT_INSIGHT_BASE_URL/api/setup/jiuwen-extension" -o "$JW_EXT_DIR/extension.py"\n cat > "$JW_EXT_DIR/extension.yaml" <<\'JIUWEN_EXT_EOF\'\nid: agent-insight-observability\nname: agent-insight-observability\nversion: 0.1.0\ndescription: Zero-code observability onboarding for JiuwenSwarm via agent-core OTLP.\nauthor: agent-insight\nmin_jiuwenswarm_version: "0.2.0"\ndependencies: {}\nconfig_schema:\n type: object\nJIUWEN_EXT_EOF\n echo "✅ JiuwenSwarm extension installed at $JW_EXT_DIR"\nfi\n\n# 4. Configure ~/.agent-insight/.env\nAGENT_INSIGHT_CONFIG_FILE="$HOME/.agent-insight/.env"\nEXISTING_KEY=""\nEXISTING_HOST=""\nEXISTING_SHOW_TASK_STATS=""\nif [ -f "$AGENT_INSIGHT_CONFIG_FILE" ]; then\n EXISTING_KEY=$(grep \'^AGENT_INSIGHT_API_KEY=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_HOST=$(grep \'^AGENT_INSIGHT_HOST=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_SHOW_TASK_STATS=$(grep \'^AGENT_INSIGHT_SHOW_TASK_STATS=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\n EXISTING_UPLOAD_SINCE_MS=$(grep \'^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=\' "$AGENT_INSIGHT_CONFIG_FILE" | head -n 1 | cut -d\'=\' -f2-)\nfi\n\n# -- API Key Logic --\nFINAL_KEY="${AGENT_INSIGHT_SETUP_API_KEY:-$EXISTING_KEY}"\nif [ "$FORCE_NO_KEY" = "true" ]; then\n FINAL_KEY=""\n echo "🔑 --no-key:强制无 key(清空本机已有 key),数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。"\nelif [ "$NONINTERACTIVE" = "true" ]; then\n if [ -n "$FINAL_KEY" ]; then\n echo "🔑 Using API Key (from setup URL / existing config)."\n else\n echo "🔑 非交互模式且未提供 API Key —— 以「无 key」方式上报,数据归到服务端 AGENT_INSIGHT_DEFAULT_INGEST_USER 指定的共享账号。"\n fi\nelif [ -n "$AGENT_INSIGHT_SETUP_API_KEY" ]; then\n echo "🔑 Using API Key from setup URL."\nelif [ -n "$EXISTING_KEY" ]; then\n echo "🔑 Found existing API Key."\n read -p "👉 Use existing key? (y/N, Default: y): " USE_EXISTING < /dev/tty\n if [[ "$USE_EXISTING" =~ ^[Nn]$ ]]; then\n read -p "👉 Please enter your NEW API Key: " FINAL_KEY < /dev/tty\n fi\nelse\n echo "🔑 AGENT_INSIGHT_API_KEY is not set."\n read -p "👉 Please enter your API Key: " FINAL_KEY < /dev/tty\nfi\n\n# -- Host Logic --\nFINAL_HOST="$AGENT_INSIGHT_HOST"\nif [ "$NONINTERACTIVE" != "true" ] && [ -n "$EXISTING_HOST" ] && [ "$EXISTING_HOST" != "$AGENT_INSIGHT_HOST" ]; then\n echo "🌐 Current Host in config: $EXISTING_HOST"\n echo "🌐 New Host detected: $AGENT_INSIGHT_HOST"\n read -p "👉 Change to new Host? (y/N, Default: y): " CHANGE_HOST < /dev/tty\n if [[ "$CHANGE_HOST" =~ ^[Nn]$ ]]; then\n FINAL_HOST="$EXISTING_HOST"\n fi\nelif [ -z "$EXISTING_HOST" ]; then\n FINAL_HOST="$AGENT_INSIGHT_HOST"\nfi\n\nFINAL_SHOW_TASK_STATS="$EXISTING_SHOW_TASK_STATS"\nif [ -z "$FINAL_SHOW_TASK_STATS" ]; then\n FINAL_SHOW_TASK_STATS="true"\nfi\n\nif [ -z "$FINAL_KEY" ]; then\n if [ "$NONINTERACTIVE" = "true" ] || [ "$FORCE_NO_KEY" = "true" ]; then\n echo "ℹ️ 未配置 API Key:以「无 key」方式上报,数据归到服务端默认共享账号(需服务端已配 AGENT_INSIGHT_DEFAULT_INGEST_USER)。"\n else\n echo "⚠️ Warning: No API Key provided. Telemetry upload will fail until you set it in $AGENT_INSIGHT_CONFIG_FILE"\n fi\nfi\n\n# -- Per-account isolation: hash the API key so opencode spool/checkpoint are\n# namespaced per account. Switching accounts on the same machine no longer\n# replays another account\'s history under the current key.\nCLIENT_KEY_HASH=$(printf \'%s\' "$FINAL_KEY" | { shasum -a 256 2>/dev/null || sha256sum; } | cut -c1-16)\nNOW_MS=$(node -e \'process.stdout.write(String(Date.now()))\' 2>/dev/null || echo $(( $(date +%s) * 1000 )))\n# Keep an existing baseline when re-installing the SAME key; reset to now for a\n# new/changed key so only traces produced after THIS install are uploaded.\nif [ -n "$EXISTING_UPLOAD_SINCE_MS" ] && [ "$FINAL_KEY" = "$EXISTING_KEY" ]; then\n UPLOAD_SINCE_MS="$EXISTING_UPLOAD_SINCE_MS"\nelse\n UPLOAD_SINCE_MS="$NOW_MS"\nfi\n\necho "⚙️ Updating configuration..."\ntouch "$AGENT_INSIGHT_CONFIG_FILE"\ncp "$AGENT_INSIGHT_CONFIG_FILE" "${AGENT_INSIGHT_CONFIG_FILE}.bak"\ngrep -v "^AGENT_INSIGHT_HOST=" "${AGENT_INSIGHT_CONFIG_FILE}.bak" | grep -v "^AGENT_INSIGHT_API_KEY=" | grep -v "^AGENT_INSIGHT_SHOW_TASK_STATS=" | grep -v "^AGENT_INSIGHT_RETENTION_DAYS=" | grep -v "^AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=" | grep -v "^AGENT_INSIGHT_OPENCODE_SPOOL_DIR=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOADER=" | grep -v "^AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=" | grep -v "^AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=" | grep -v "^AGENT_INSIGHT_MAX_TOOL_IO=" | grep -v "^AGENT_INSIGHT_MAX_EVENT_STRING=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=" | grep -v "^AGENT_INSIGHT_CLIENT_KEY_HASH=" | grep -v "^AGENT_INSIGHT_OPENCODE_CHECKPOINT=" | grep -v "^AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=" > "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_HOST=$FINAL_HOST" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_API_KEY=$FINAL_KEY" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_SHOW_TASK_STATS=$FINAL_SHOW_TASK_STATS" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_RETENTION_DAYS=10" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_OTEL_ENABLE=true" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLIENT_KEY_HASH=$CLIENT_KEY_HASH" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_SPOOL_DIR=$HOME/.agent-insight/otel_data/opencode/$CLIENT_KEY_HASH" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_CHECKPOINT=$HOME/.agent-insight/opencode_uploader_checkpoint_$CLIENT_KEY_HASH.json" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOAD_SINCE_MS=$UPLOAD_SINCE_MS" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOADER=$HOME/.agent-insight/opencode_uploader_client.js" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLAUDE_OTEL_SPOOL_DIR=$HOME/.agent-insight/otel_data/claude" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES=file:$HOME/.agent-insight/claude_raw_bodies" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_MAX_TOOL_IO=4000" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_MAX_EVENT_STRING=20000" >> "$AGENT_INSIGHT_CONFIG_FILE"\necho "AGENT_INSIGHT_OPENCODE_UPLOAD_COOLDOWN_MS=15000" >> "$AGENT_INSIGHT_CONFIG_FILE"\nrm "${AGENT_INSIGHT_CONFIG_FILE}.bak"\necho "✅ Configuration updated at $AGENT_INSIGHT_CONFIG_FILE"\n\n# 6.4 Configure Agent Insight Hermes plugin\nif [ "$INSTALL_HERMES" = "true" ]; then\n HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"\n HERMES_PLUGIN_DIR="$HERMES_HOME/plugins/agent_insight_hermes"\n mkdir -p "$HERMES_PLUGIN_DIR"\n cat > "$HERMES_PLUGIN_DIR/config.json" <<HERMES_CONFIG_EOF\n{\n "host": "${FINAL_HOST%/}",\n "api_key": "$FINAL_KEY",\n "service_name": "hermes",\n "max_content_chars": 200000,\n "spool_dir": "$HOME/.agent-insight/data/hermes-otel-spool",\n "log_file": "$HOME/.agent-insight/logs/hermes-plugin.log"\n}\nHERMES_CONFIG_EOF\n echo "Agent Insight Hermes config written to $HERMES_PLUGIN_DIR/config.json"\nfi\n\n# 6.45 Configure JiuwenSwarm telemetry (workspace config/.env, read by the extension)\nif [ "$INSTALL_JIUWEN" = "true" ]; then\n JW_HOME="${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}"\n JW_ENV="$JW_HOME/config/.env"\n JW_EXT_PARENT="$JW_HOME/extensions"\n JW_OTLP_ENDPOINT="${FINAL_HOST%/}/api/ingest/otel/v1/traces"\n mkdir -p "$JW_HOME/config"\n touch "$JW_ENV"\n cp "$JW_ENV" "${JW_ENV}.bak"\n # EXTENSION_DIRS: 保留既有(默认 jiuwenswarm/extensions) + 追加我们的目录(去重)\n PREV_EXT_DIRS=$(grep \'^EXTENSION_DIRS=\' "${JW_ENV}.bak" | head -n 1 | cut -d\'=\' -f2-)\n # 去掉历史值可能带的成对双引号:jiuwenswarm 模板默认 EXTENSION_DIRS="",\n # 直接拼接会写出 "";<dir>,python-dotenv 无法解析整行而丢弃 → 扩展目录失效。\n PREV_EXT_DIRS="${PREV_EXT_DIRS#\\"}"; PREV_EXT_DIRS="${PREV_EXT_DIRS%\\"}"\n if [ -z "$PREV_EXT_DIRS" ]; then PREV_EXT_DIRS="jiuwenswarm/extensions"; fi\n case ";$PREV_EXT_DIRS;" in\n *";$JW_EXT_PARENT;"*) NEW_EXT_DIRS="$PREV_EXT_DIRS" ;;\n *) NEW_EXT_DIRS="$PREV_EXT_DIRS;$JW_EXT_PARENT" ;;\n esac\n grep -v \'^OTEL_ENABLED=\' "${JW_ENV}.bak" | grep -v \'^AGENT_INSIGHT_OTLP_ENDPOINT=\' | grep -v \'^AGENT_INSIGHT_API_KEY=\' | grep -v \'^EXTENSION_DIRS=\' > "$JW_ENV"\n echo "OTEL_ENABLED=true" >> "$JW_ENV"\n echo "AGENT_INSIGHT_OTLP_ENDPOINT=$JW_OTLP_ENDPOINT" >> "$JW_ENV"\n echo "AGENT_INSIGHT_API_KEY=$FINAL_KEY" >> "$JW_ENV"\n echo "EXTENSION_DIRS=$NEW_EXT_DIRS" >> "$JW_ENV"\n rm -f "${JW_ENV}.bak"\n echo "✅ JiuwenSwarm telemetry configured -> $JW_OTLP_ENDPOINT (service=jiuwenswarm)"\n echo " 重启 JiuwenSwarm(agentserver)后,agent/LLM/tool trace 自动上报。"\nfi\n\n# 6.5 Configure Claude Code official OTel logs\nif [ "$INSTALL_CLAUDE" = "true" ]; then\n cat > "$HOME/.agent-insight/claude_otel_env.sh" << \'CLAUDE_OTEL_EOF\'\n# Agent-Insight Claude Code OpenTelemetry integration\nunalias claude 2>/dev/null || true\n\n_skill_insight_claude_load_env() {\n if [ -f "$HOME/.agent-insight/.env" ]; then\n set -a\n . "$HOME/.agent-insight/.env"\n set +a\n fi\n}\n\nclaude() {\n _skill_insight_claude_load_env\n local _si_host="${AGENT_INSIGHT_HOST:-127.0.0.1:3000}"\n case "$_si_host" in http://*|https://*) ;; *) _si_host="http://$_si_host" ;; esac\n _si_host="${_si_host%/}"\n mkdir -p "$HOME/.agent-insight/claude_raw_bodies" 2>/dev/null || true\n env \\\n CLAUDE_CODE_ENABLE_TELEMETRY=1 \\\n OTEL_LOGS_EXPORTER=otlp \\\n OTEL_METRICS_EXPORTER="${OTEL_METRICS_EXPORTER:-none}" \\\n OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/json \\\n OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="$_si_host/api/ingest/otel/v1/logs" \\\n OTEL_EXPORTER_OTLP_HEADERS="x-witty-api-key=${AGENT_INSIGHT_API_KEY:-}" \\\n OTEL_LOG_USER_PROMPTS=1 \\\n OTEL_LOG_TOOL_DETAILS=1 \\\n OTEL_LOG_TOOL_CONTENT=1 \\\n OTEL_LOG_RAW_API_BODIES="${AGENT_INSIGHT_CLAUDE_OTEL_RAW_API_BODIES:-file:$HOME/.agent-insight/claude_raw_bodies}" \\\n claude "$@"\n}\nCLAUDE_OTEL_EOF\n SHELL_RC="$HOME/.zshrc"\n [ -f "$HOME/.bashrc" ] && SHELL_RC="$HOME/.bashrc"\n if [ -f "$SHELL_RC" ] && ! grep -q "\\.agent-insight/claude_otel_env\\.sh" "$SHELL_RC"; then\n echo "" >> "$SHELL_RC"\n echo "# Agent-Insight Claude Code OTel" >> "$SHELL_RC"\n echo "source \\"$HOME/.agent-insight/claude_otel_env.sh\\"" >> "$SHELL_RC"\n fi\n echo "✅ Claude Code OTel env installed at $HOME/.agent-insight/claude_otel_env.sh"\n echo " Restart your terminal or run: source $HOME/.agent-insight/claude_otel_env.sh"\n pkill -f "claude_watcher_client.ts" 2>/dev/null || true\n rm -f "$HOME/.agent-insight/claude_watcher_client.ts" "$HOME/.agent-insight/start_claude_watcher.sh" "$HOME/.agent-insight/stop_claude_watcher.sh" "$HOME/.agent-insight/claude_watcher.pid"\n echo "🧹 Removed legacy Claude session-file watcher if it was installed."\nfi\n\n# 7. Create Watcher Startup/Stop Scripts\nNEEDS_WATCHER_SCRIPTS=false\nif [ "$INSTALL_OPENCODE" = "true" ]; then\n NEEDS_WATCHER_SCRIPTS=true\nfi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "📝 Creating watcher management scripts..."\n\n if [ "$INSTALL_OPENCODE" = "true" ]; then\n cat > "$HOME/.agent-insight/start_opencode_uploader.sh" << \'OPENCODE_UP_EOF\'\n#!/bin/bash\n# Kill any previous instance (the sentinel string lets pkill -f find the loop).\npkill -f "skill-insight-opencode-uploader-loop" 2>/dev/null\npkill -f "opencode_uploader_client.js" 2>/dev/null\nmkdir -p "$HOME/.agent-insight/logs"\nINTERVAL_SEC="${AGENT_INSIGHT_OPENCODE_UPLOADER_INTERVAL_SEC:-300}"\nLOG_FILE="$HOME/.agent-insight/logs/opencode_uploader.log"\nif command -v node >/dev/null 2>&1; then\n RUNTIME=node\nelif command -v bun >/dev/null 2>&1; then\n RUNTIME=bun\nelse\n echo "[$(date)] Skipped: node/bun not installed" >> "$LOG_FILE"\n exit 0\nfi\n# Loop body has a sentinel comment so `pkill -f skill-insight-opencode-uploader-loop` matches.\nnohup bash -c "\n# skill-insight-opencode-uploader-loop\nwhile true; do\n \\"$RUNTIME\\" \\"$HOME/.agent-insight/opencode_uploader_client.js\\" >> \\"$LOG_FILE\\" 2>&1\n sleep \\"$INTERVAL_SEC\\"\ndone" > /dev/null 2>&1 &\necho $! > "$HOME/.agent-insight/opencode_uploader.pid"\necho "OpenCode uploader daemon started with PID $(cat $HOME/.agent-insight/opencode_uploader.pid) (interval=${INTERVAL_SEC}s)"\nOPENCODE_UP_EOF\n chmod +x "$HOME/.agent-insight/start_opencode_uploader.sh"\n\n cat > "$HOME/.agent-insight/stop_opencode_uploader.sh" << \'STOP_OPENCODE_UP_EOF\'\n#!/bin/bash\npkill -f "skill-insight-opencode-uploader-loop" 2>/dev/null\npkill -f "opencode_uploader_client.js" 2>/dev/null\nPID_FILE="$HOME/.agent-insight/opencode_uploader.pid"\nif [ -f "$PID_FILE" ]; then kill "$(cat $PID_FILE)" 2>/dev/null; rm -f "$PID_FILE"; fi\necho "OpenCode uploader daemon stopped"\nSTOP_OPENCODE_UP_EOF\n chmod +x "$HOME/.agent-insight/stop_opencode_uploader.sh"\n fi\n\n cat > "$HOME/.agent-insight/start_watchers.sh" << \'WATCHER_HEADER\'\n#!/bin/bash\necho "Starting Agent-Insight watchers..."\nWATCHER_HEADER\n if [ "$INSTALL_OPENCODE" = "true" ]; then echo \'"$HOME/.agent-insight/start_opencode_uploader.sh"\' >> "$HOME/.agent-insight/start_watchers.sh"; fi\n echo \'echo "All watchers started!"\' >> "$HOME/.agent-insight/start_watchers.sh"\n chmod +x "$HOME/.agent-insight/start_watchers.sh"\n\n cat > "$HOME/.agent-insight/stop_watchers.sh" << \'STOP_HEADER\'\n#!/bin/bash\necho "Stopping Agent-Insight watchers..."\nSTOP_HEADER\n if [ "$INSTALL_OPENCODE" = "true" ]; then echo \'"$HOME/.agent-insight/stop_opencode_uploader.sh"\' >> "$HOME/.agent-insight/stop_watchers.sh"; fi\n echo \'echo "All watchers stopped!"\' >> "$HOME/.agent-insight/stop_watchers.sh"\n chmod +x "$HOME/.agent-insight/stop_watchers.sh"\nfi\n\n# 8. Start Watchers Now\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "🚀 Starting telemetry watchers..."\n if command -v npx &> /dev/null; then\n "$HOME/.agent-insight/start_watchers.sh"\n else\n echo "⚠️ Node.js (npx) not found. Skipping watcher startup."\n fi\nfi\n\n# 10. Final Summary\necho ""\necho "🌟 Agent-Insight Telemetry: READY"\necho "------------------------------------------------"\necho "Installed Components:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Plugin: $OPENCODE_CONFIG_DIR/plugins/Witty-Skill-Insight.ts"; fi\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Command: ~/.config/opencode/commands/si-optimizer.md"; fi\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " ✅ OpenCode Uploader Daemon: ~/.agent-insight/opencode_uploader_client.js (5-min poll)"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " ✅ Claude Code OTel: ~/.agent-insight/claude_otel_env.sh"; fi\nif [ "$INSTALL_HERMES" = "true" ]; then echo " ✅ Agent Insight Hermes Plugin: ${HERMES_HOME:-$HOME/.hermes}/plugins/agent_insight_hermes/config.json"; fi\nif [ "$INSTALL_JIUWEN" = "true" ]; then echo " ✅ JiuwenSwarm Extension: ${JIUWENSWARM_DATA_DIR:-$HOME/.jiuwenswarm}/extensions/agent-insight-observability (telemetry in config/.env)"; fi\n\nif [ "$NEEDS_WATCHER_SCRIPTS" = "true" ]; then\n echo ""\n echo "Watcher Management:"\n echo " Start all: ~/.agent-insight/start_watchers.sh"\n echo " Stop all: ~/.agent-insight/stop_watchers.sh"\n echo " Logs: ~/.agent-insight/logs/"\nfi\n\necho ""\necho "Usage:"\nif [ "$INSTALL_OPENCODE" = "true" ]; then echo " 1. Run: opencode run \'hello\'"; fi\nif [ "$INSTALL_CLAUDE" = "true" ]; then echo " 2. Restart terminal, then run: claude"; fi\nif [ "$INSTALL_HERMES" = "true" ]; then echo " 3. Restart Hermes or start a new Hermes conversation"; fi\necho "------------------------------------------------"'].join("\n")}(r,r,E,l,I,T);return new O.NextResponse(e,{headers:{"Content-Type":"text/x-shellscript"}})}}e.s(["GET",()=>g],640112);var A=e.i(640112);let p=new n.AppRouteRouteModule({definition:{kind:t.RouteKind.APP_ROUTE,page:"/api/ingest/setup/route",pathname:"/api/ingest/setup",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ingest/setup/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:m,workUnitAsyncStorage:H,serverHooks:L}=p;function C(){return(0,i.patchFetch)({workAsyncStorage:m,workUnitAsyncStorage:H})}async function G(e,n,i){p.isDev&&(0,o.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let O="/api/ingest/setup/route";O=O.replace(/\/index$/,"")||"/";let u=await p.prepare(e,n,{srcPage:O,multiZoneDraftMode:!1});if(!u)return n.statusCode=400,n.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve()),null;let{buildId:$,params:g,nextConfig:A,parsedUrl:m,isDraftMode:H,prerenderManifest:L,routerServerContext:C,isOnDemandRevalidate:G,revalidateOnlyGenerated:R,resolvedPathname:f,clientReferenceManifest:P,serverActionsManifest:D}=u,F=(0,r.normalizeAppPath)(O),w=!!(L.dynamicRoutes[F]||L.routes[f]),v=async()=>((null==C?void 0:C.render404)?await C.render404(e,n,m,!1):n.end("This page could not be found"),null);if(w&&!H){let e=!!L.routes[f],n=L.dynamicRoutes[F];if(n&&!1===n.fallback&&!e){if(A.experimental.adapterPath)return await v();throw new h.NoFallbackError}}let y=null;!w||p.isDev||H||(y="/index"===(y=f)?"/":y);let W=!0===p.isDev||!w,U=w&&!W;D&&P&&(0,_.setManifestsSingleton)({page:O,clientReferenceManifest:P,serverActionsManifest:D});let M=e.method||"GET",x=(0,s.getTracer)(),b=x.getActiveScopeSpan(),k={params:g,prerenderManifest:L,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts},cacheComponents:!!A.cacheComponents,supportsDynamicResponse:W,incrementalCache:(0,o.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:A.cacheLife,waitUntil:i.waitUntil,onClose:e=>{n.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(n,t,i,o)=>p.onRequestError(e,n,i,o,C)},sharedContext:{buildId:$}},K=new E.NodeNextRequest(e),j=new E.NodeNextResponse(n),J=a.NextRequestAdapter.fromNodeNextRequest(K,(0,a.signalFromNodeResponse)(n));try{let _=async e=>p.handle(J,k).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":n.statusCode,"next.rsc":!1});let t=x.getRootSpanAttributes();if(!t)return;if(t.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${t.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=t.get("next.route");if(i){let n=`${M} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":n}),e.updateName(n)}else e.updateName(`${M} ${O}`)}),r=!!(0,o.getRequestMeta)(e,"minimalMode"),E=async o=>{var s,E;let a=async({previousCacheEntry:t})=>{try{if(!r&&G&&R&&!t)return n.statusCode=404,n.setHeader("x-nextjs-cache","REVALIDATED"),n.end("This page could not be found"),null;let s=await _(o);e.fetchMetrics=k.renderOpts.fetchMetrics;let E=k.renderOpts.pendingWaitUntil;E&&i.waitUntil&&(i.waitUntil(E),E=void 0);let a=k.renderOpts.collectedTags;if(!w)return await (0,N.sendResponse)(K,j,s,k.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),n=(0,T.toNodeOutgoingHttpHeaders)(s.headers);a&&(n[c.NEXT_CACHE_TAGS_HEADER]=a),!n["content-type"]&&e.type&&(n["content-type"]=e.type);let t=void 0!==k.renderOpts.collectedRevalidate&&!(k.renderOpts.collectedRevalidate>=c.INFINITE_CACHE)&&k.renderOpts.collectedRevalidate,i=void 0===k.renderOpts.collectedExpire||k.renderOpts.collectedExpire>=c.INFINITE_CACHE?void 0:k.renderOpts.collectedExpire;return{value:{kind:d.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:n},cacheControl:{revalidate:t,expire:i}}}}catch(n){throw(null==t?void 0:t.isStale)&&await p.onRequestError(e,n,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,I.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:G})},!1,C),n}},l=await p.handleResponse({req:e,nextConfig:A,cacheKey:y,routeKind:t.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:L,isRoutePPREnabled:!1,isOnDemandRevalidate:G,revalidateOnlyGenerated:R,responseGenerator:a,waitUntil:i.waitUntil,isMinimalMode:r});if(!w)return null;if((null==l||null==(s=l.value)?void 0:s.kind)!==d.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(E=l.value)?void 0:E.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});r||n.setHeader("x-nextjs-cache",G?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),H&&n.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let h=(0,T.fromNodeOutgoingHttpHeaders)(l.value.headers);return r&&w||h.delete(c.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||n.getHeader("Cache-Control")||h.get("Cache-Control")||h.set("Cache-Control",(0,S.getCacheControlHeader)(l.cacheControl)),await (0,N.sendResponse)(K,j,new Response(l.value.body,{headers:h,status:l.value.status||200})),null};b?await E(b):await x.withPropagatedContext(e.headers,()=>x.trace(l.BaseServerSpan.handleRequest,{spanName:`${M} ${O}`,kind:s.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},E))}catch(n){if(n instanceof h.NoFallbackError||await p.onRequestError(e,n,{routerKind:"App Router",routePath:F,routeType:"route",revalidateReason:(0,I.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:G})},!1,C),w)throw n;return await (0,N.sendResponse)(K,j,new Response(null,{status:500})),null}}e.s(["handler",()=>G,"patchFetch",()=>C,"routeModule",()=>p,"serverHooks",()=>L,"workAsyncStorage",()=>m,"workUnitAsyncStorage",()=>H],901411)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_c4a195e5.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[225581,a=>{"use strict";a.s(["default",0,function(a,b){return a*=1,b*=1,function(c){return a*(1-c)+b*c}}])},439776,339679,516936,a=>{"use strict";function b(a,b,c){a.prototype=b.prototype=c,c.constructor=a}function c(a,b){var c=Object.create(a.prototype);for(var d in b)c[d]=b[d];return c}function d(){}a.s(["default",0,b,"extend",()=>c],339679);var e="\\s*([+-]?\\d+)\\s*",f="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",g="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",h=/^#([0-9a-f]{3,8})$/,i=RegExp(`^rgb\\(${e},${e},${e}\\)$`),j=RegExp(`^rgb\\(${g},${g},${g}\\)$`),k=RegExp(`^rgba\\(${e},${e},${e},${f}\\)$`),l=RegExp(`^rgba\\(${g},${g},${g},${f}\\)$`),m=RegExp(`^hsl\\(${f},${g},${g}\\)$`),n=RegExp(`^hsla\\(${f},${g},${g},${f}\\)$`),o={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32};function p(){return this.rgb().formatHex()}function q(){return this.rgb().formatRgb()}function r(a){var b,c;return a=(a+"").trim().toLowerCase(),(b=h.exec(a))?(c=b[1].length,b=parseInt(b[1],16),6===c?s(b):3===c?new w(b>>8&15|b>>4&240,b>>4&15|240&b,(15&b)<<4|15&b,1):8===c?t(b>>24&255,b>>16&255,b>>8&255,(255&b)/255):4===c?t(b>>12&15|b>>8&240,b>>8&15|b>>4&240,b>>4&15|240&b,((15&b)<<4|15&b)/255):null):(b=i.exec(a))?new w(b[1],b[2],b[3],1):(b=j.exec(a))?new w(255*b[1]/100,255*b[2]/100,255*b[3]/100,1):(b=k.exec(a))?t(b[1],b[2],b[3],b[4]):(b=l.exec(a))?t(255*b[1]/100,255*b[2]/100,255*b[3]/100,b[4]):(b=m.exec(a))?C(b[1],b[2]/100,b[3]/100,1):(b=n.exec(a))?C(b[1],b[2]/100,b[3]/100,b[4]):o.hasOwnProperty(a)?s(o[a]):"transparent"===a?new w(NaN,NaN,NaN,0):null}function s(a){return new w(a>>16&255,a>>8&255,255&a,1)}function t(a,b,c,d){return d<=0&&(a=b=c=NaN),new w(a,b,c,d)}function u(a){return(a instanceof d||(a=r(a)),a)?new w((a=a.rgb()).r,a.g,a.b,a.opacity):new w}function v(a,b,c,d){return 1==arguments.length?u(a):new w(a,b,c,null==d?1:d)}function w(a,b,c,d){this.r=+a,this.g=+b,this.b=+c,this.opacity=+d}function x(){return`#${B(this.r)}${B(this.g)}${B(this.b)}`}function y(){let a=z(this.opacity);return`${1===a?"rgb(":"rgba("}${A(this.r)}, ${A(this.g)}, ${A(this.b)}${1===a?")":`, ${a})`}`}function z(a){return isNaN(a)?1:Math.max(0,Math.min(1,a))}function A(a){return Math.max(0,Math.min(255,Math.round(a)||0))}function B(a){return((a=A(a))<16?"0":"")+a.toString(16)}function C(a,b,c,d){return d<=0?a=b=c=NaN:c<=0||c>=1?a=b=NaN:b<=0&&(a=NaN),new E(a,b,c,d)}function D(a){if(a instanceof E)return new E(a.h,a.s,a.l,a.opacity);if(a instanceof d||(a=r(a)),!a)return new E;if(a instanceof E)return a;var b=(a=a.rgb()).r/255,c=a.g/255,e=a.b/255,f=Math.min(b,c,e),g=Math.max(b,c,e),h=NaN,i=g-f,j=(g+f)/2;return i?(h=b===g?(c-e)/i+(c<e)*6:c===g?(e-b)/i+2:(b-c)/i+4,i/=j<.5?g+f:2-g-f,h*=60):i=j>0&&j<1?0:h,new E(h,i,j,a.opacity)}function E(a,b,c,d){this.h=+a,this.s=+b,this.l=+c,this.opacity=+d}function F(a){return(a=(a||0)%360)<0?a+360:a}function G(a){return Math.max(0,Math.min(1,a||0))}function H(a,b,c){return(a<60?b+(c-b)*a/60:a<180?c:a<240?b+(c-b)*(240-a)/60:b)*255}b(d,r,{copy(a){return Object.assign(new this.constructor,this,a)},displayable(){return this.rgb().displayable()},hex:p,formatHex:p,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return D(this).formatHsl()},formatRgb:q,toString:q}),b(w,v,c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},rgb(){return this},clamp(){return new w(A(this.r),A(this.g),A(this.b),z(this.opacity))},displayable(){return -.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:x,formatHex:x,formatHex8:function(){return`#${B(this.r)}${B(this.g)}${B(this.b)}${B((isNaN(this.opacity)?1:this.opacity)*255)}`},formatRgb:y,toString:y})),b(E,function(a,b,c,d){return 1==arguments.length?D(a):new E(a,b,c,null==d?1:d)},c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new E(this.h,this.s,this.l*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new E(this.h,this.s,this.l*a,this.opacity)},rgb(){var a=this.h%360+(this.h<0)*360,b=isNaN(a)||isNaN(this.s)?0:this.s,c=this.l,d=c+(c<.5?c:1-c)*b,e=2*c-d;return new w(H(a>=240?a-240:a+120,e,d),H(a,e,d),H(a<120?a+240:a-120,e,d),this.opacity)},clamp(){return new E(F(this.h),G(this.s),G(this.l),z(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let a=z(this.opacity);return`${1===a?"hsl(":"hsla("}${F(this.h)}, ${100*G(this.s)}%, ${100*G(this.l)}%${1===a?")":`, ${a})`}`}})),a.s(["Color",()=>d,"Rgb",()=>w,"default",()=>r,"rgb",()=>v,"rgbConvert",()=>u],516936),a.s(["color",()=>r],439776)},871131,a=>{"use strict";var b=a.i(225581);a.s(["interpolateNumber",()=>b.default])},519473,705572,343763,a=>{"use strict";var b=a.i(516936);function c(a,b,c,d,e){var f=a*a,g=f*a;return((1-3*a+3*f-g)*b+(4-6*f+3*g)*c+(1+3*a+3*f-3*g)*d+g*e)/6}let d=a=>()=>a;function e(a,b){return function(c){return a+c*b}}function f(a,b){var c=b-a;return c?e(a,c>180||c<-180?c-360*Math.round(c/360):c):d(isNaN(a)?b:a)}function g(a){return 1==(a*=1)?h:function(b,c){var e,f,g;return c-b?(e=b,f=c,e=Math.pow(e,g=a),f=Math.pow(f,g)-e,g=1/g,function(a){return Math.pow(e+a*f,g)}):d(isNaN(b)?c:b)}}function h(a,b){var c=b-a;return c?e(a,c):d(isNaN(a)?b:a)}a.s(["default",0,d],705572),a.s(["default",()=>h,"gamma",()=>g,"hue",()=>f],343763);let i=function a(c){var d=g(c);function e(a,c){var e=d((a=(0,b.rgb)(a)).r,(c=(0,b.rgb)(c)).r),f=d(a.g,c.g),g=d(a.b,c.b),i=h(a.opacity,c.opacity);return function(b){return a.r=e(b),a.g=f(b),a.b=g(b),a.opacity=i(b),a+""}}return e.gamma=a,e}(1);function j(a){return function(c){var d,e,f=c.length,g=Array(f),h=Array(f),i=Array(f);for(d=0;d<f;++d)e=(0,b.rgb)(c[d]),g[d]=e.r||0,h[d]=e.g||0,i[d]=e.b||0;return g=a(g),h=a(h),i=a(i),e.opacity=1,function(a){return e.r=g(a),e.g=h(a),e.b=i(a),e+""}}}j(function(a){var b=a.length-1;return function(d){var e=d<=0?d=0:d>=1?(d=1,b-1):Math.floor(d*b),f=a[e],g=a[e+1],h=e>0?a[e-1]:2*f-g,i=e<b-1?a[e+2]:2*g-f;return c((d-e/b)*b,h,f,g,i)}}),j(function(a){var b=a.length;return function(d){var e=Math.floor(((d%=1)<0?++d:d)*b),f=a[(e+b-1)%b],g=a[e%b],h=a[(e+1)%b],i=a[(e+2)%b];return c((d-e/b)*b,f,g,h,i)}}),a.s(["default",0,i],519473)},738916,a=>{"use strict";var b=a.i(225581),c=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,d=RegExp(c.source,"g");a.s(["default",0,function(a,e){var f,g,h,i,j,k=c.lastIndex=d.lastIndex=0,l=-1,m=[],n=[];for(a+="",e+="";(h=c.exec(a))&&(i=d.exec(e));)(j=i.index)>k&&(j=e.slice(k,j),m[l]?m[l]+=j:m[++l]=j),(h=h[0])===(i=i[0])?m[l]?m[l]+=i:m[++l]=i:(m[++l]=null,n.push({i:l,x:(0,b.default)(h,i)})),k=d.lastIndex;return k<e.length&&(j=e.slice(k),m[l]?m[l]+=j:m[++l]=j),m.length<2?n[0]?(f=n[0].x,function(a){return f(a)+""}):(g=e,function(){return g}):(e=n.length,function(a){for(var b,c=0;c<e;++c)m[(b=n[c]).i]=b.x(a);return m.join("")})}])},709757,395378,791008,a=>{"use strict";a.s(["genericArray",()=>d],709757);var b=a.i(994052);function c(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)}function d(a,c){var d,e=c?c.length:0,f=a?Math.min(e,a.length):0,g=Array(f),h=Array(e);for(d=0;d<f;++d)g[d]=(0,b.default)(a[d],c[d]);for(;d<e;++d)h[d]=c[d];return function(a){for(d=0;d<f;++d)h[d]=g[d](a);return h}}a.s(["default",0,function(a,b){b||(b=[]);var c,d=a?Math.min(b.length,a.length):0,e=b.slice();return function(f){for(c=0;c<d;++c)e[c]=a[c]*(1-f)+b[c]*f;return e}},"isNumberArray",()=>c],395378),a.s(["default",0,function(a,b){var c=new Date;return a*=1,b*=1,function(d){return c.setTime(a*(1-d)+b*d),c}}],791008)},946550,a=>{"use strict";a.s(["default",()=>c]);var b=a.i(994052);function c(a,c){var d,e={},f={};for(d in(null===a||"object"!=typeof a)&&(a={}),(null===c||"object"!=typeof c)&&(c={}),c)d in a?e[d]=(0,b.default)(a[d],c[d]):f[d]=c[d];return function(a){for(d in e)f[d]=e[d](a);return f}}},447542,994052,a=>{"use strict";a.s(["default",()=>k],994052);var b=a.i(439776),c=a.i(519473),d=a.i(709757),e=a.i(791008),f=a.i(225581),g=a.i(946550),h=a.i(738916),i=a.i(705572),j=a.i(395378);function k(a,k){var l,m=typeof k;return null==k||"boolean"===m?(0,i.default)(k):("number"===m?f.default:"string"===m?(l=(0,b.color)(k))?(k=l,c.default):h.default:k instanceof b.color?c.default:k instanceof Date?e.default:(0,j.isNumberArray)(k)?j.default:Array.isArray(k)?d.genericArray:"function"!=typeof k.valueOf&&"function"!=typeof k.toString||isNaN(k)?g.default:f.default)(a,k)}a.s(["interpolate",0,k],447542)},47349,(a,b,c)=>{"use strict";var d=a.r(572131);d.useState,d.useEffect,d.useLayoutEffect,d.useDebugValue,c.useSyncExternalStore=void 0!==d.useSyncExternalStore?d.useSyncExternalStore:function(a,b){return b()}},487610,(a,b,c)=>{"use strict";b.exports=a.r(47349)},997514,(a,b,c)=>{"use strict";var d=a.r(572131),e=a.r(487610),f="function"==typeof Object.is?Object.is:function(a,b){return a===b&&(0!==a||1/a==1/b)||a!=a&&b!=b},g=e.useSyncExternalStore,h=d.useRef,i=d.useEffect,j=d.useMemo,k=d.useDebugValue;c.useSyncExternalStoreWithSelector=function(a,b,c,d,e){var l=h(null);if(null===l.current){var m={hasValue:!1,value:null};l.current=m}else m=l.current;var n=g(a,(l=j(function(){function a(a){if(!i){if(i=!0,g=a,a=d(a),void 0!==e&&m.hasValue){var b=m.value;if(e(b,a))return h=b}return h=a}if(b=h,f(g,a))return b;var c=d(a);return void 0!==e&&e(b,c)?(g=a,b):(g=a,h=c)}var g,h,i=!1,j=void 0===c?null:c;return[function(){return a(b())},null===j?void 0:function(){return a(j())}]},[b,c,d,e]))[0],l[1]);return i(function(){m.hasValue=!0,m.value=n},[n]),k(n),n}},864442,(a,b,c)=>{"use strict";b.exports=a.r(997514)},519783,a=>{"use strict";let b=(0,a.i(164831).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],519783)},986708,a=>{"use strict";let b=(0,a.i(164831).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],986708)},980180,a=>{"use strict";let b=(0,a.i(164831).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",()=>b],980180)},757430,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(390702),e=a.i(795225),f=a.i(699570),g=a.i(368114);function h({open:a,onOpenChange:h,title:i,description:j,confirmText:k="确认",cancelText:l="取消",tone:m="normal",onConfirm:n}){let[o,p]=c.useState(!1),q=async()=>{try{p(!0),await n(),h(!1)}finally{p(!1)}};return(0,b.jsx)(e.Dialog,{open:a,onOpenChange:a=>!o&&h(a),children:(0,b.jsxs)(e.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsxs)(e.DialogHeader,{children:[(0,b.jsxs)(e.DialogTitle,{className:(0,g.cn)("flex items-center gap-2","danger"===m&&"text-destructive"),children:["danger"===m&&(0,b.jsx)(d.AlertTriangle,{className:"size-4"}),i]}),j&&(0,b.jsx)(e.DialogDescription,{children:j})]}),(0,b.jsxs)(e.DialogFooter,{children:[(0,b.jsx)(f.Button,{variant:"outline",onClick:()=>h(!1),disabled:o,children:l}),(0,b.jsx)(f.Button,{onClick:q,disabled:o,className:(0,g.cn)("danger"===m&&"bg-error text-error-foreground hover:bg-error/90"),children:o?"处理中…":k})]})]})})}a.s(["ConfirmDialog",()=>h])},818783,a=>{"use strict";let b=(0,a.i(164831).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);a.s(["ArrowRight",()=>b],818783)},688803,a=>{"use strict";class b{diff(a,b,c={}){let d;"function"==typeof c?(d=c,c={}):"callback"in c&&(d=c.callback);let e=this.castInput(a,c),f=this.castInput(b,c),g=this.removeEmpty(this.tokenize(e,c)),h=this.removeEmpty(this.tokenize(f,c));return this.diffWithOptionsObj(g,h,c,d)}diffWithOptionsObj(a,b,c,d){var e;let f=a=>(a=this.postProcess(a,c),d)?void setTimeout(function(){d(a)},0):a,g=b.length,h=a.length,i=1,j=g+h;null!=c.maxEditLength&&(j=Math.min(j,c.maxEditLength));let k=null!=(e=c.timeout)?e:1/0,l=Date.now()+k,m=[{oldPos:-1,lastComponent:void 0}],n=this.extractCommon(m[0],b,a,0,c);if(m[0].oldPos+1>=h&&n+1>=g)return f(this.buildValues(m[0].lastComponent,b,a));let o=-1/0,p=1/0,q=()=>{for(let d=Math.max(o,-i);d<=Math.min(p,i);d+=2){let e,i=m[d-1],j=m[d+1];i&&(m[d-1]=void 0);let k=!1;if(j){let a=j.oldPos-d;k=j&&0<=a&&a<g}let l=i&&i.oldPos+1<h;if(!k&&!l){m[d]=void 0;continue}if(e=!l||k&&i.oldPos<j.oldPos?this.addToPath(j,!0,!1,0,c):this.addToPath(i,!1,!0,1,c),n=this.extractCommon(e,b,a,d,c),e.oldPos+1>=h&&n+1>=g)return f(this.buildValues(e.lastComponent,b,a))||!0;m[d]=e,e.oldPos+1>=h&&(p=Math.min(p,d-1)),n+1>=g&&(o=Math.max(o,d+1))}i++};if(d)!function a(){setTimeout(function(){if(i>j||Date.now()>l)return d(void 0);q()||a()},0)}();else for(;i<=j&&Date.now()<=l;){let a=q();if(a)return a}}addToPath(a,b,c,d,e){let f=a.lastComponent;return f&&!e.oneChangePerToken&&f.added===b&&f.removed===c?{oldPos:a.oldPos+d,lastComponent:{count:f.count+1,added:b,removed:c,previousComponent:f.previousComponent}}:{oldPos:a.oldPos+d,lastComponent:{count:1,added:b,removed:c,previousComponent:f}}}extractCommon(a,b,c,d,e){let f=b.length,g=c.length,h=a.oldPos,i=h-d,j=0;for(;i+1<f&&h+1<g&&this.equals(c[h+1],b[i+1],e);)i++,h++,j++,e.oneChangePerToken&&(a.lastComponent={count:1,previousComponent:a.lastComponent,added:!1,removed:!1});return j&&!e.oneChangePerToken&&(a.lastComponent={count:j,previousComponent:a.lastComponent,added:!1,removed:!1}),a.oldPos=h,i}equals(a,b,c){return c.comparator?c.comparator(a,b):a===b||!!c.ignoreCase&&a.toLowerCase()===b.toLowerCase()}removeEmpty(a){let b=[];for(let c=0;c<a.length;c++)a[c]&&b.push(a[c]);return b}castInput(a,b){return a}tokenize(a,b){return Array.from(a)}join(a){return a.join("")}postProcess(a,b){return a}get useLongestToken(){return!1}buildValues(a,b,c){let d,e=[];for(;a;)e.push(a),d=a.previousComponent,delete a.previousComponent,a=d;e.reverse();let f=e.length,g=0,h=0,i=0;for(;g<f;g++){let a=e[g];if(a.removed)a.value=this.join(c.slice(i,i+a.count)),i+=a.count;else{if(!a.added&&this.useLongestToken){let d=b.slice(h,h+a.count);d=d.map(function(a,b){let d=c[i+b];return d.length>a.length?d:a}),a.value=this.join(d)}else a.value=this.join(b.slice(h,h+a.count));h+=a.count,a.added||(i+=a.count)}}return e}}let c=new class extends b{constructor(){super(...arguments),this.tokenize=e}equals(a,b,c){return c.ignoreWhitespace?(c.newlineIsToken&&a.includes("\n")||(a=a.trim()),c.newlineIsToken&&b.includes("\n")||(b=b.trim())):c.ignoreNewlineAtEof&&!c.newlineIsToken&&(a.endsWith("\n")&&(a=a.slice(0,-1)),b.endsWith("\n")&&(b=b.slice(0,-1))),super.equals(a,b,c)}};function d(a,b,d){return c.diff(a,b,d)}function e(a,b){b.stripTrailingCr&&(a=a.replace(/\r\n/g,"\n"));let c=[],d=a.split(/(\n|\r\n)/);d[d.length-1]||d.pop();for(let a=0;a<d.length;a++){let e=d[a];a%2&&!b.newlineIsToken?c[c.length-1]+=e:c.push(e)}return c}a.s(["diffLines",()=>d],688803)},96299,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_780e2736._.js","server/chunks/ssr/node_modules_5a703ebc._.js","server/chunks/ssr/node_modules_bea51bd3._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-Q4XR5HBZ_mjs_7ce093ec._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ICXQ74PX_mjs_743ad570._.js","server/chunks/ssr/node_modules_5138a9d1._.js","server/chunks/ssr/node_modules_roughjs_bundled_rough_esm_8f6f313e.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ZIRB5QZD_mjs_ac0cdde0._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ZGVPDNZ5_mjs_259d8e95._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-WYO6CB5R_mjs_351fbd94._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-52WLFC77_mjs_99553dc1._.js","server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_a11916de._.js"].map(b=>a.l(b))).then(()=>b(483384)))}];
|
|
1
|
+
module.exports=[225581,a=>{"use strict";a.s(["default",0,function(a,b){return a*=1,b*=1,function(c){return a*(1-c)+b*c}}])},439776,339679,516936,a=>{"use strict";function b(a,b,c){a.prototype=b.prototype=c,c.constructor=a}function c(a,b){var c=Object.create(a.prototype);for(var d in b)c[d]=b[d];return c}function d(){}a.s(["default",0,b,"extend",()=>c],339679);var e="\\s*([+-]?\\d+)\\s*",f="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",g="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",h=/^#([0-9a-f]{3,8})$/,i=RegExp(`^rgb\\(${e},${e},${e}\\)$`),j=RegExp(`^rgb\\(${g},${g},${g}\\)$`),k=RegExp(`^rgba\\(${e},${e},${e},${f}\\)$`),l=RegExp(`^rgba\\(${g},${g},${g},${f}\\)$`),m=RegExp(`^hsl\\(${f},${g},${g}\\)$`),n=RegExp(`^hsla\\(${f},${g},${g},${f}\\)$`),o={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32};function p(){return this.rgb().formatHex()}function q(){return this.rgb().formatRgb()}function r(a){var b,c;return a=(a+"").trim().toLowerCase(),(b=h.exec(a))?(c=b[1].length,b=parseInt(b[1],16),6===c?s(b):3===c?new w(b>>8&15|b>>4&240,b>>4&15|240&b,(15&b)<<4|15&b,1):8===c?t(b>>24&255,b>>16&255,b>>8&255,(255&b)/255):4===c?t(b>>12&15|b>>8&240,b>>8&15|b>>4&240,b>>4&15|240&b,((15&b)<<4|15&b)/255):null):(b=i.exec(a))?new w(b[1],b[2],b[3],1):(b=j.exec(a))?new w(255*b[1]/100,255*b[2]/100,255*b[3]/100,1):(b=k.exec(a))?t(b[1],b[2],b[3],b[4]):(b=l.exec(a))?t(255*b[1]/100,255*b[2]/100,255*b[3]/100,b[4]):(b=m.exec(a))?C(b[1],b[2]/100,b[3]/100,1):(b=n.exec(a))?C(b[1],b[2]/100,b[3]/100,b[4]):o.hasOwnProperty(a)?s(o[a]):"transparent"===a?new w(NaN,NaN,NaN,0):null}function s(a){return new w(a>>16&255,a>>8&255,255&a,1)}function t(a,b,c,d){return d<=0&&(a=b=c=NaN),new w(a,b,c,d)}function u(a){return(a instanceof d||(a=r(a)),a)?new w((a=a.rgb()).r,a.g,a.b,a.opacity):new w}function v(a,b,c,d){return 1==arguments.length?u(a):new w(a,b,c,null==d?1:d)}function w(a,b,c,d){this.r=+a,this.g=+b,this.b=+c,this.opacity=+d}function x(){return`#${B(this.r)}${B(this.g)}${B(this.b)}`}function y(){let a=z(this.opacity);return`${1===a?"rgb(":"rgba("}${A(this.r)}, ${A(this.g)}, ${A(this.b)}${1===a?")":`, ${a})`}`}function z(a){return isNaN(a)?1:Math.max(0,Math.min(1,a))}function A(a){return Math.max(0,Math.min(255,Math.round(a)||0))}function B(a){return((a=A(a))<16?"0":"")+a.toString(16)}function C(a,b,c,d){return d<=0?a=b=c=NaN:c<=0||c>=1?a=b=NaN:b<=0&&(a=NaN),new E(a,b,c,d)}function D(a){if(a instanceof E)return new E(a.h,a.s,a.l,a.opacity);if(a instanceof d||(a=r(a)),!a)return new E;if(a instanceof E)return a;var b=(a=a.rgb()).r/255,c=a.g/255,e=a.b/255,f=Math.min(b,c,e),g=Math.max(b,c,e),h=NaN,i=g-f,j=(g+f)/2;return i?(h=b===g?(c-e)/i+(c<e)*6:c===g?(e-b)/i+2:(b-c)/i+4,i/=j<.5?g+f:2-g-f,h*=60):i=j>0&&j<1?0:h,new E(h,i,j,a.opacity)}function E(a,b,c,d){this.h=+a,this.s=+b,this.l=+c,this.opacity=+d}function F(a){return(a=(a||0)%360)<0?a+360:a}function G(a){return Math.max(0,Math.min(1,a||0))}function H(a,b,c){return(a<60?b+(c-b)*a/60:a<180?c:a<240?b+(c-b)*(240-a)/60:b)*255}b(d,r,{copy(a){return Object.assign(new this.constructor,this,a)},displayable(){return this.rgb().displayable()},hex:p,formatHex:p,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return D(this).formatHsl()},formatRgb:q,toString:q}),b(w,v,c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},rgb(){return this},clamp(){return new w(A(this.r),A(this.g),A(this.b),z(this.opacity))},displayable(){return -.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:x,formatHex:x,formatHex8:function(){return`#${B(this.r)}${B(this.g)}${B(this.b)}${B((isNaN(this.opacity)?1:this.opacity)*255)}`},formatRgb:y,toString:y})),b(E,function(a,b,c,d){return 1==arguments.length?D(a):new E(a,b,c,null==d?1:d)},c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new E(this.h,this.s,this.l*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new E(this.h,this.s,this.l*a,this.opacity)},rgb(){var a=this.h%360+(this.h<0)*360,b=isNaN(a)||isNaN(this.s)?0:this.s,c=this.l,d=c+(c<.5?c:1-c)*b,e=2*c-d;return new w(H(a>=240?a-240:a+120,e,d),H(a,e,d),H(a<120?a+240:a-120,e,d),this.opacity)},clamp(){return new E(F(this.h),G(this.s),G(this.l),z(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let a=z(this.opacity);return`${1===a?"hsl(":"hsla("}${F(this.h)}, ${100*G(this.s)}%, ${100*G(this.l)}%${1===a?")":`, ${a})`}`}})),a.s(["Color",()=>d,"Rgb",()=>w,"default",()=>r,"rgb",()=>v,"rgbConvert",()=>u],516936),a.s(["color",()=>r],439776)},871131,a=>{"use strict";var b=a.i(225581);a.s(["interpolateNumber",()=>b.default])},519473,705572,343763,a=>{"use strict";var b=a.i(516936);function c(a,b,c,d,e){var f=a*a,g=f*a;return((1-3*a+3*f-g)*b+(4-6*f+3*g)*c+(1+3*a+3*f-3*g)*d+g*e)/6}let d=a=>()=>a;function e(a,b){return function(c){return a+c*b}}function f(a,b){var c=b-a;return c?e(a,c>180||c<-180?c-360*Math.round(c/360):c):d(isNaN(a)?b:a)}function g(a){return 1==(a*=1)?h:function(b,c){var e,f,g;return c-b?(e=b,f=c,e=Math.pow(e,g=a),f=Math.pow(f,g)-e,g=1/g,function(a){return Math.pow(e+a*f,g)}):d(isNaN(b)?c:b)}}function h(a,b){var c=b-a;return c?e(a,c):d(isNaN(a)?b:a)}a.s(["default",0,d],705572),a.s(["default",()=>h,"gamma",()=>g,"hue",()=>f],343763);let i=function a(c){var d=g(c);function e(a,c){var e=d((a=(0,b.rgb)(a)).r,(c=(0,b.rgb)(c)).r),f=d(a.g,c.g),g=d(a.b,c.b),i=h(a.opacity,c.opacity);return function(b){return a.r=e(b),a.g=f(b),a.b=g(b),a.opacity=i(b),a+""}}return e.gamma=a,e}(1);function j(a){return function(c){var d,e,f=c.length,g=Array(f),h=Array(f),i=Array(f);for(d=0;d<f;++d)e=(0,b.rgb)(c[d]),g[d]=e.r||0,h[d]=e.g||0,i[d]=e.b||0;return g=a(g),h=a(h),i=a(i),e.opacity=1,function(a){return e.r=g(a),e.g=h(a),e.b=i(a),e+""}}}j(function(a){var b=a.length-1;return function(d){var e=d<=0?d=0:d>=1?(d=1,b-1):Math.floor(d*b),f=a[e],g=a[e+1],h=e>0?a[e-1]:2*f-g,i=e<b-1?a[e+2]:2*g-f;return c((d-e/b)*b,h,f,g,i)}}),j(function(a){var b=a.length;return function(d){var e=Math.floor(((d%=1)<0?++d:d)*b),f=a[(e+b-1)%b],g=a[e%b],h=a[(e+1)%b],i=a[(e+2)%b];return c((d-e/b)*b,f,g,h,i)}}),a.s(["default",0,i],519473)},738916,a=>{"use strict";var b=a.i(225581),c=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,d=RegExp(c.source,"g");a.s(["default",0,function(a,e){var f,g,h,i,j,k=c.lastIndex=d.lastIndex=0,l=-1,m=[],n=[];for(a+="",e+="";(h=c.exec(a))&&(i=d.exec(e));)(j=i.index)>k&&(j=e.slice(k,j),m[l]?m[l]+=j:m[++l]=j),(h=h[0])===(i=i[0])?m[l]?m[l]+=i:m[++l]=i:(m[++l]=null,n.push({i:l,x:(0,b.default)(h,i)})),k=d.lastIndex;return k<e.length&&(j=e.slice(k),m[l]?m[l]+=j:m[++l]=j),m.length<2?n[0]?(f=n[0].x,function(a){return f(a)+""}):(g=e,function(){return g}):(e=n.length,function(a){for(var b,c=0;c<e;++c)m[(b=n[c]).i]=b.x(a);return m.join("")})}])},709757,395378,791008,a=>{"use strict";a.s(["genericArray",()=>d],709757);var b=a.i(12952);function c(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)}function d(a,c){var d,e=c?c.length:0,f=a?Math.min(e,a.length):0,g=Array(f),h=Array(e);for(d=0;d<f;++d)g[d]=(0,b.default)(a[d],c[d]);for(;d<e;++d)h[d]=c[d];return function(a){for(d=0;d<f;++d)h[d]=g[d](a);return h}}a.s(["default",0,function(a,b){b||(b=[]);var c,d=a?Math.min(b.length,a.length):0,e=b.slice();return function(f){for(c=0;c<d;++c)e[c]=a[c]*(1-f)+b[c]*f;return e}},"isNumberArray",()=>c],395378),a.s(["default",0,function(a,b){var c=new Date;return a*=1,b*=1,function(d){return c.setTime(a*(1-d)+b*d),c}}],791008)},946550,a=>{"use strict";a.s(["default",()=>c]);var b=a.i(12952);function c(a,c){var d,e={},f={};for(d in(null===a||"object"!=typeof a)&&(a={}),(null===c||"object"!=typeof c)&&(c={}),c)d in a?e[d]=(0,b.default)(a[d],c[d]):f[d]=c[d];return function(a){for(d in e)f[d]=e[d](a);return f}}},447542,12952,a=>{"use strict";a.s(["default",()=>k],12952);var b=a.i(439776),c=a.i(519473),d=a.i(709757),e=a.i(791008),f=a.i(225581),g=a.i(946550),h=a.i(738916),i=a.i(705572),j=a.i(395378);function k(a,k){var l,m=typeof k;return null==k||"boolean"===m?(0,i.default)(k):("number"===m?f.default:"string"===m?(l=(0,b.color)(k))?(k=l,c.default):h.default:k instanceof b.color?c.default:k instanceof Date?e.default:(0,j.isNumberArray)(k)?j.default:Array.isArray(k)?d.genericArray:"function"!=typeof k.valueOf&&"function"!=typeof k.toString||isNaN(k)?g.default:f.default)(a,k)}a.s(["interpolate",0,k],447542)},47349,(a,b,c)=>{"use strict";var d=a.r(572131);d.useState,d.useEffect,d.useLayoutEffect,d.useDebugValue,c.useSyncExternalStore=void 0!==d.useSyncExternalStore?d.useSyncExternalStore:function(a,b){return b()}},487610,(a,b,c)=>{"use strict";b.exports=a.r(47349)},997514,(a,b,c)=>{"use strict";var d=a.r(572131),e=a.r(487610),f="function"==typeof Object.is?Object.is:function(a,b){return a===b&&(0!==a||1/a==1/b)||a!=a&&b!=b},g=e.useSyncExternalStore,h=d.useRef,i=d.useEffect,j=d.useMemo,k=d.useDebugValue;c.useSyncExternalStoreWithSelector=function(a,b,c,d,e){var l=h(null);if(null===l.current){var m={hasValue:!1,value:null};l.current=m}else m=l.current;var n=g(a,(l=j(function(){function a(a){if(!i){if(i=!0,g=a,a=d(a),void 0!==e&&m.hasValue){var b=m.value;if(e(b,a))return h=b}return h=a}if(b=h,f(g,a))return b;var c=d(a);return void 0!==e&&e(b,c)?(g=a,b):(g=a,h=c)}var g,h,i=!1,j=void 0===c?null:c;return[function(){return a(b())},null===j?void 0:function(){return a(j())}]},[b,c,d,e]))[0],l[1]);return i(function(){m.hasValue=!0,m.value=n},[n]),k(n),n}},864442,(a,b,c)=>{"use strict";b.exports=a.r(997514)},519783,a=>{"use strict";let b=(0,a.i(164831).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],519783)},986708,a=>{"use strict";let b=(0,a.i(164831).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],986708)},980180,a=>{"use strict";let b=(0,a.i(164831).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",()=>b],980180)},757430,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(390702),e=a.i(795225),f=a.i(699570),g=a.i(368114);function h({open:a,onOpenChange:h,title:i,description:j,confirmText:k="确认",cancelText:l="取消",tone:m="normal",onConfirm:n}){let[o,p]=c.useState(!1),q=async()=>{try{p(!0),await n(),h(!1)}finally{p(!1)}};return(0,b.jsx)(e.Dialog,{open:a,onOpenChange:a=>!o&&h(a),children:(0,b.jsxs)(e.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsxs)(e.DialogHeader,{children:[(0,b.jsxs)(e.DialogTitle,{className:(0,g.cn)("flex items-center gap-2","danger"===m&&"text-destructive"),children:["danger"===m&&(0,b.jsx)(d.AlertTriangle,{className:"size-4"}),i]}),j&&(0,b.jsx)(e.DialogDescription,{children:j})]}),(0,b.jsxs)(e.DialogFooter,{children:[(0,b.jsx)(f.Button,{variant:"outline",onClick:()=>h(!1),disabled:o,children:l}),(0,b.jsx)(f.Button,{onClick:q,disabled:o,className:(0,g.cn)("danger"===m&&"bg-error text-error-foreground hover:bg-error/90"),children:o?"处理中…":k})]})]})})}a.s(["ConfirmDialog",()=>h])},818783,a=>{"use strict";let b=(0,a.i(164831).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);a.s(["ArrowRight",()=>b],818783)},688803,a=>{"use strict";class b{diff(a,b,c={}){let d;"function"==typeof c?(d=c,c={}):"callback"in c&&(d=c.callback);let e=this.castInput(a,c),f=this.castInput(b,c),g=this.removeEmpty(this.tokenize(e,c)),h=this.removeEmpty(this.tokenize(f,c));return this.diffWithOptionsObj(g,h,c,d)}diffWithOptionsObj(a,b,c,d){var e;let f=a=>(a=this.postProcess(a,c),d)?void setTimeout(function(){d(a)},0):a,g=b.length,h=a.length,i=1,j=g+h;null!=c.maxEditLength&&(j=Math.min(j,c.maxEditLength));let k=null!=(e=c.timeout)?e:1/0,l=Date.now()+k,m=[{oldPos:-1,lastComponent:void 0}],n=this.extractCommon(m[0],b,a,0,c);if(m[0].oldPos+1>=h&&n+1>=g)return f(this.buildValues(m[0].lastComponent,b,a));let o=-1/0,p=1/0,q=()=>{for(let d=Math.max(o,-i);d<=Math.min(p,i);d+=2){let e,i=m[d-1],j=m[d+1];i&&(m[d-1]=void 0);let k=!1;if(j){let a=j.oldPos-d;k=j&&0<=a&&a<g}let l=i&&i.oldPos+1<h;if(!k&&!l){m[d]=void 0;continue}if(e=!l||k&&i.oldPos<j.oldPos?this.addToPath(j,!0,!1,0,c):this.addToPath(i,!1,!0,1,c),n=this.extractCommon(e,b,a,d,c),e.oldPos+1>=h&&n+1>=g)return f(this.buildValues(e.lastComponent,b,a))||!0;m[d]=e,e.oldPos+1>=h&&(p=Math.min(p,d-1)),n+1>=g&&(o=Math.max(o,d+1))}i++};if(d)!function a(){setTimeout(function(){if(i>j||Date.now()>l)return d(void 0);q()||a()},0)}();else for(;i<=j&&Date.now()<=l;){let a=q();if(a)return a}}addToPath(a,b,c,d,e){let f=a.lastComponent;return f&&!e.oneChangePerToken&&f.added===b&&f.removed===c?{oldPos:a.oldPos+d,lastComponent:{count:f.count+1,added:b,removed:c,previousComponent:f.previousComponent}}:{oldPos:a.oldPos+d,lastComponent:{count:1,added:b,removed:c,previousComponent:f}}}extractCommon(a,b,c,d,e){let f=b.length,g=c.length,h=a.oldPos,i=h-d,j=0;for(;i+1<f&&h+1<g&&this.equals(c[h+1],b[i+1],e);)i++,h++,j++,e.oneChangePerToken&&(a.lastComponent={count:1,previousComponent:a.lastComponent,added:!1,removed:!1});return j&&!e.oneChangePerToken&&(a.lastComponent={count:j,previousComponent:a.lastComponent,added:!1,removed:!1}),a.oldPos=h,i}equals(a,b,c){return c.comparator?c.comparator(a,b):a===b||!!c.ignoreCase&&a.toLowerCase()===b.toLowerCase()}removeEmpty(a){let b=[];for(let c=0;c<a.length;c++)a[c]&&b.push(a[c]);return b}castInput(a,b){return a}tokenize(a,b){return Array.from(a)}join(a){return a.join("")}postProcess(a,b){return a}get useLongestToken(){return!1}buildValues(a,b,c){let d,e=[];for(;a;)e.push(a),d=a.previousComponent,delete a.previousComponent,a=d;e.reverse();let f=e.length,g=0,h=0,i=0;for(;g<f;g++){let a=e[g];if(a.removed)a.value=this.join(c.slice(i,i+a.count)),i+=a.count;else{if(!a.added&&this.useLongestToken){let d=b.slice(h,h+a.count);d=d.map(function(a,b){let d=c[i+b];return d.length>a.length?d:a}),a.value=this.join(d)}else a.value=this.join(b.slice(h,h+a.count));h+=a.count,a.added||(i+=a.count)}}return e}}let c=new class extends b{constructor(){super(...arguments),this.tokenize=e}equals(a,b,c){return c.ignoreWhitespace?(c.newlineIsToken&&a.includes("\n")||(a=a.trim()),c.newlineIsToken&&b.includes("\n")||(b=b.trim())):c.ignoreNewlineAtEof&&!c.newlineIsToken&&(a.endsWith("\n")&&(a=a.slice(0,-1)),b.endsWith("\n")&&(b=b.slice(0,-1))),super.equals(a,b,c)}};function d(a,b,d){return c.diff(a,b,d)}function e(a,b){b.stripTrailingCr&&(a=a.replace(/\r\n/g,"\n"));let c=[],d=a.split(/(\n|\r\n)/);d[d.length-1]||d.pop();for(let a=0;a<d.length;a++){let e=d[a];a%2&&!b.newlineIsToken?c[c.length-1]+=e:c.push(e)}return c}a.s(["diffLines",()=>d],688803)},96299,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_780e2736._.js","server/chunks/ssr/node_modules_5a703ebc._.js","server/chunks/ssr/node_modules_bea51bd3._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-Q4XR5HBZ_mjs_7ce093ec._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ICXQ74PX_mjs_743ad570._.js","server/chunks/ssr/node_modules_5138a9d1._.js","server/chunks/ssr/node_modules_roughjs_bundled_rough_esm_8f6f313e.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ZIRB5QZD_mjs_ac0cdde0._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-ZGVPDNZ5_mjs_259d8e95._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-WYO6CB5R_mjs_351fbd94._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-52WLFC77_mjs_99553dc1._.js","server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_a11916de._.js"].map(b=>a.l(b))).then(()=>b(483384)))}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_a3d5f9bc._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[439776,339679,516936,a=>{"use strict";function b(a,b,c){a.prototype=b.prototype=c,c.constructor=a}function c(a,b){var c=Object.create(a.prototype);for(var d in b)c[d]=b[d];return c}function d(){}a.s(["default",0,b,"extend",()=>c],339679);var e="\\s*([+-]?\\d+)\\s*",f="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",g="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",h=/^#([0-9a-f]{3,8})$/,i=RegExp(`^rgb\\(${e},${e},${e}\\)$`),j=RegExp(`^rgb\\(${g},${g},${g}\\)$`),k=RegExp(`^rgba\\(${e},${e},${e},${f}\\)$`),l=RegExp(`^rgba\\(${g},${g},${g},${f}\\)$`),m=RegExp(`^hsl\\(${f},${g},${g}\\)$`),n=RegExp(`^hsla\\(${f},${g},${g},${f}\\)$`),o={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32};function p(){return this.rgb().formatHex()}function q(){return this.rgb().formatRgb()}function r(a){var b,c;return a=(a+"").trim().toLowerCase(),(b=h.exec(a))?(c=b[1].length,b=parseInt(b[1],16),6===c?s(b):3===c?new w(b>>8&15|b>>4&240,b>>4&15|240&b,(15&b)<<4|15&b,1):8===c?t(b>>24&255,b>>16&255,b>>8&255,(255&b)/255):4===c?t(b>>12&15|b>>8&240,b>>8&15|b>>4&240,b>>4&15|240&b,((15&b)<<4|15&b)/255):null):(b=i.exec(a))?new w(b[1],b[2],b[3],1):(b=j.exec(a))?new w(255*b[1]/100,255*b[2]/100,255*b[3]/100,1):(b=k.exec(a))?t(b[1],b[2],b[3],b[4]):(b=l.exec(a))?t(255*b[1]/100,255*b[2]/100,255*b[3]/100,b[4]):(b=m.exec(a))?C(b[1],b[2]/100,b[3]/100,1):(b=n.exec(a))?C(b[1],b[2]/100,b[3]/100,b[4]):o.hasOwnProperty(a)?s(o[a]):"transparent"===a?new w(NaN,NaN,NaN,0):null}function s(a){return new w(a>>16&255,a>>8&255,255&a,1)}function t(a,b,c,d){return d<=0&&(a=b=c=NaN),new w(a,b,c,d)}function u(a){return(a instanceof d||(a=r(a)),a)?new w((a=a.rgb()).r,a.g,a.b,a.opacity):new w}function v(a,b,c,d){return 1==arguments.length?u(a):new w(a,b,c,null==d?1:d)}function w(a,b,c,d){this.r=+a,this.g=+b,this.b=+c,this.opacity=+d}function x(){return`#${B(this.r)}${B(this.g)}${B(this.b)}`}function y(){let a=z(this.opacity);return`${1===a?"rgb(":"rgba("}${A(this.r)}, ${A(this.g)}, ${A(this.b)}${1===a?")":`, ${a})`}`}function z(a){return isNaN(a)?1:Math.max(0,Math.min(1,a))}function A(a){return Math.max(0,Math.min(255,Math.round(a)||0))}function B(a){return((a=A(a))<16?"0":"")+a.toString(16)}function C(a,b,c,d){return d<=0?a=b=c=NaN:c<=0||c>=1?a=b=NaN:b<=0&&(a=NaN),new E(a,b,c,d)}function D(a){if(a instanceof E)return new E(a.h,a.s,a.l,a.opacity);if(a instanceof d||(a=r(a)),!a)return new E;if(a instanceof E)return a;var b=(a=a.rgb()).r/255,c=a.g/255,e=a.b/255,f=Math.min(b,c,e),g=Math.max(b,c,e),h=NaN,i=g-f,j=(g+f)/2;return i?(h=b===g?(c-e)/i+(c<e)*6:c===g?(e-b)/i+2:(b-c)/i+4,i/=j<.5?g+f:2-g-f,h*=60):i=j>0&&j<1?0:h,new E(h,i,j,a.opacity)}function E(a,b,c,d){this.h=+a,this.s=+b,this.l=+c,this.opacity=+d}function F(a){return(a=(a||0)%360)<0?a+360:a}function G(a){return Math.max(0,Math.min(1,a||0))}function H(a,b,c){return(a<60?b+(c-b)*a/60:a<180?c:a<240?b+(c-b)*(240-a)/60:b)*255}b(d,r,{copy(a){return Object.assign(new this.constructor,this,a)},displayable(){return this.rgb().displayable()},hex:p,formatHex:p,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return D(this).formatHsl()},formatRgb:q,toString:q}),b(w,v,c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},rgb(){return this},clamp(){return new w(A(this.r),A(this.g),A(this.b),z(this.opacity))},displayable(){return -.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:x,formatHex:x,formatHex8:function(){return`#${B(this.r)}${B(this.g)}${B(this.b)}${B((isNaN(this.opacity)?1:this.opacity)*255)}`},formatRgb:y,toString:y})),b(E,function(a,b,c,d){return 1==arguments.length?D(a):new E(a,b,c,null==d?1:d)},c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new E(this.h,this.s,this.l*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new E(this.h,this.s,this.l*a,this.opacity)},rgb(){var a=this.h%360+(this.h<0)*360,b=isNaN(a)||isNaN(this.s)?0:this.s,c=this.l,d=c+(c<.5?c:1-c)*b,e=2*c-d;return new w(H(a>=240?a-240:a+120,e,d),H(a,e,d),H(a<120?a+240:a-120,e,d),this.opacity)},clamp(){return new E(F(this.h),G(this.s),G(this.l),z(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let a=z(this.opacity);return`${1===a?"hsl(":"hsla("}${F(this.h)}, ${100*G(this.s)}%, ${100*G(this.l)}%${1===a?")":`, ${a})`}`}})),a.s(["Color",()=>d,"Rgb",()=>w,"default",()=>r,"rgb",()=>v,"rgbConvert",()=>u],516936),a.s(["color",()=>r],439776)},519473,705572,343763,a=>{"use strict";var b=a.i(516936);function c(a,b,c,d,e){var f=a*a,g=f*a;return((1-3*a+3*f-g)*b+(4-6*f+3*g)*c+(1+3*a+3*f-3*g)*d+g*e)/6}let d=a=>()=>a;function e(a,b){return function(c){return a+c*b}}function f(a,b){var c=b-a;return c?e(a,c>180||c<-180?c-360*Math.round(c/360):c):d(isNaN(a)?b:a)}function g(a){return 1==(a*=1)?h:function(b,c){var e,f,g;return c-b?(e=b,f=c,e=Math.pow(e,g=a),f=Math.pow(f,g)-e,g=1/g,function(a){return Math.pow(e+a*f,g)}):d(isNaN(b)?c:b)}}function h(a,b){var c=b-a;return c?e(a,c):d(isNaN(a)?b:a)}a.s(["default",0,d],705572),a.s(["default",()=>h,"gamma",()=>g,"hue",()=>f],343763);let i=function a(c){var d=g(c);function e(a,c){var e=d((a=(0,b.rgb)(a)).r,(c=(0,b.rgb)(c)).r),f=d(a.g,c.g),g=d(a.b,c.b),i=h(a.opacity,c.opacity);return function(b){return a.r=e(b),a.g=f(b),a.b=g(b),a.opacity=i(b),a+""}}return e.gamma=a,e}(1);function j(a){return function(c){var d,e,f=c.length,g=Array(f),h=Array(f),i=Array(f);for(d=0;d<f;++d)e=(0,b.rgb)(c[d]),g[d]=e.r||0,h[d]=e.g||0,i[d]=e.b||0;return g=a(g),h=a(h),i=a(i),e.opacity=1,function(a){return e.r=g(a),e.g=h(a),e.b=i(a),e+""}}}j(function(a){var b=a.length-1;return function(d){var e=d<=0?d=0:d>=1?(d=1,b-1):Math.floor(d*b),f=a[e],g=a[e+1],h=e>0?a[e-1]:2*f-g,i=e<b-1?a[e+2]:2*g-f;return c((d-e/b)*b,h,f,g,i)}}),j(function(a){var b=a.length;return function(d){var e=Math.floor(((d%=1)<0?++d:d)*b),f=a[(e+b-1)%b],g=a[e%b],h=a[(e+1)%b],i=a[(e+2)%b];return c((d-e/b)*b,f,g,h,i)}}),a.s(["default",0,i],519473)},709757,395378,791008,a=>{"use strict";a.s(["genericArray",()=>d],709757);var b=a.i(994052);function c(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)}function d(a,c){var d,e=c?c.length:0,f=a?Math.min(e,a.length):0,g=Array(f),h=Array(e);for(d=0;d<f;++d)g[d]=(0,b.default)(a[d],c[d]);for(;d<e;++d)h[d]=c[d];return function(a){for(d=0;d<f;++d)h[d]=g[d](a);return h}}a.s(["default",0,function(a,b){b||(b=[]);var c,d=a?Math.min(b.length,a.length):0,e=b.slice();return function(f){for(c=0;c<d;++c)e[c]=a[c]*(1-f)+b[c]*f;return e}},"isNumberArray",()=>c],395378),a.s(["default",0,function(a,b){var c=new Date;return a*=1,b*=1,function(d){return c.setTime(a*(1-d)+b*d),c}}],791008)},225581,a=>{"use strict";a.s(["default",0,function(a,b){return a*=1,b*=1,function(c){return a*(1-c)+b*c}}])},946550,a=>{"use strict";a.s(["default",()=>c]);var b=a.i(994052);function c(a,c){var d,e={},f={};for(d in(null===a||"object"!=typeof a)&&(a={}),(null===c||"object"!=typeof c)&&(c={}),c)d in a?e[d]=(0,b.default)(a[d],c[d]):f[d]=c[d];return function(a){for(d in e)f[d]=e[d](a);return f}}},738916,a=>{"use strict";var b=a.i(225581),c=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,d=RegExp(c.source,"g");a.s(["default",0,function(a,e){var f,g,h,i,j,k=c.lastIndex=d.lastIndex=0,l=-1,m=[],n=[];for(a+="",e+="";(h=c.exec(a))&&(i=d.exec(e));)(j=i.index)>k&&(j=e.slice(k,j),m[l]?m[l]+=j:m[++l]=j),(h=h[0])===(i=i[0])?m[l]?m[l]+=i:m[++l]=i:(m[++l]=null,n.push({i:l,x:(0,b.default)(h,i)})),k=d.lastIndex;return k<e.length&&(j=e.slice(k),m[l]?m[l]+=j:m[++l]=j),m.length<2?n[0]?(f=n[0].x,function(a){return f(a)+""}):(g=e,function(){return g}):(e=n.length,function(a){for(var b,c=0;c<e;++c)m[(b=n[c]).i]=b.x(a);return m.join("")})}])},447542,994052,a=>{"use strict";a.s(["default",()=>k],994052);var b=a.i(439776),c=a.i(519473),d=a.i(709757),e=a.i(791008),f=a.i(225581),g=a.i(946550),h=a.i(738916),i=a.i(705572),j=a.i(395378);function k(a,k){var l,m=typeof k;return null==k||"boolean"===m?(0,i.default)(k):("number"===m?f.default:"string"===m?(l=(0,b.color)(k))?(k=l,c.default):h.default:k instanceof b.color?c.default:k instanceof Date?e.default:(0,j.isNumberArray)(k)?j.default:Array.isArray(k)?d.genericArray:"function"!=typeof k.valueOf&&"function"!=typeof k.toString||isNaN(k)?g.default:f.default)(a,k)}a.s(["interpolate",0,k],447542)},871131,a=>{"use strict";var b=a.i(225581);a.s(["interpolateNumber",()=>b.default])},379996,112882,a=>{"use strict";a.s(["default",0,function(a){return function(){return a}}],379996);let b=Math.PI,c=2*b,d=c-1e-6;function e(a){this._+=a[0];for(let b=1,c=a.length;b<c;++b)this._+=arguments[b]+a[b]}class f{constructor(a){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==a?e:function(a){let b=Math.floor(a);if(!(b>=0))throw Error(`invalid digits: ${a}`);if(b>15)return e;let c=10**b;return function(a){this._+=a[0];for(let b=1,d=a.length;b<d;++b)this._+=Math.round(arguments[b]*c)/c+a[b]}}(a)}moveTo(a,b){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+b}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(a,b){this._append`L${this._x1=+a},${this._y1=+b}`}quadraticCurveTo(a,b,c,d){this._append`Q${+a},${+b},${this._x1=+c},${this._y1=+d}`}bezierCurveTo(a,b,c,d,e,f){this._append`C${+a},${+b},${+c},${+d},${this._x1=+e},${this._y1=+f}`}arcTo(a,c,d,e,f){if(a*=1,c*=1,d*=1,e*=1,(f*=1)<0)throw Error(`negative radius: ${f}`);let g=this._x1,h=this._y1,i=d-a,j=e-c,k=g-a,l=h-c,m=k*k+l*l;if(null===this._x1)this._append`M${this._x1=a},${this._y1=c}`;else if(m>1e-6)if(Math.abs(l*i-j*k)>1e-6&&f){let n=d-g,o=e-h,p=i*i+j*j,q=Math.sqrt(p),r=Math.sqrt(m),s=f*Math.tan((b-Math.acos((p+m-(n*n+o*o))/(2*q*r)))/2),t=s/r,u=s/q;Math.abs(t-1)>1e-6&&this._append`L${a+t*k},${c+t*l}`,this._append`A${f},${f},0,0,${+(l*n>k*o)},${this._x1=a+u*i},${this._y1=c+u*j}`}else this._append`L${this._x1=a},${this._y1=c}`}arc(a,e,f,g,h,i){if(a*=1,e*=1,f*=1,i=!!i,f<0)throw Error(`negative radius: ${f}`);let j=f*Math.cos(g),k=f*Math.sin(g),l=a+j,m=e+k,n=1^i,o=i?g-h:h-g;null===this._x1?this._append`M${l},${m}`:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-m)>1e-6)&&this._append`L${l},${m}`,f&&(o<0&&(o=o%c+c),o>d?this._append`A${f},${f},0,1,${n},${a-j},${e-k}A${f},${f},0,1,${n},${this._x1=l},${this._y1=m}`:o>1e-6&&this._append`A${f},${f},0,${+(o>=b)},${n},${this._x1=a+f*Math.cos(h)},${this._y1=e+f*Math.sin(h)}`)}rect(a,b,c,d){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+b}h${c*=1}v${+d}h${-c}Z`}toString(){return this._}}function g(a){let b=3;return a.digits=function(c){if(!arguments.length)return b;if(null==c)b=null;else{let a=Math.floor(c);if(!(a>=0))throw RangeError(`invalid digits: ${c}`);b=a}return a},()=>new f(b)}f.prototype,a.s(["withPath",()=>g],112882)},884885,a=>{"use strict";Array.prototype.slice,a.s(["default",0,function(a){return"object"==typeof a&&"length"in a?a:Array.from(a)}])},398153,416487,785362,a=>{"use strict";var b=a.i(884885),c=a.i(379996),d=a.i(632794),e=a.i(112882);function f(a){return a[0]}function g(a){return a[1]}function h(a,h){var i=(0,c.default)(!0),j=null,k=d.default,l=null,m=(0,e.withPath)(n);function n(c){var d,e,f,g=(c=(0,b.default)(c)).length,n=!1;for(null==j&&(l=k(f=m())),d=0;d<=g;++d)!(d<g&&i(e=c[d],d,c))===n&&((n=!n)?l.lineStart():l.lineEnd()),n&&l.point(+a(e,d,c),+h(e,d,c));if(f)return l=null,f+""||null}return a="function"==typeof a?a:void 0===a?f:(0,c.default)(a),h="function"==typeof h?h:void 0===h?g:(0,c.default)(h),n.x=function(b){return arguments.length?(a="function"==typeof b?b:(0,c.default)(+b),n):a},n.y=function(a){return arguments.length?(h="function"==typeof a?a:(0,c.default)(+a),n):h},n.defined=function(a){return arguments.length?(i="function"==typeof a?a:(0,c.default)(!!a),n):i},n.curve=function(a){return arguments.length?(k=a,null!=j&&(l=k(j)),n):k},n.context=function(a){return arguments.length?(null==a?j=l=null:l=k(j=a),n):j},n}a.s(["x",()=>f,"y",()=>g],416487),a.s(["default",0,h],785362),a.s(["line",0,h],398153)}];
|
|
1
|
+
module.exports=[439776,339679,516936,a=>{"use strict";function b(a,b,c){a.prototype=b.prototype=c,c.constructor=a}function c(a,b){var c=Object.create(a.prototype);for(var d in b)c[d]=b[d];return c}function d(){}a.s(["default",0,b,"extend",()=>c],339679);var e="\\s*([+-]?\\d+)\\s*",f="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",g="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",h=/^#([0-9a-f]{3,8})$/,i=RegExp(`^rgb\\(${e},${e},${e}\\)$`),j=RegExp(`^rgb\\(${g},${g},${g}\\)$`),k=RegExp(`^rgba\\(${e},${e},${e},${f}\\)$`),l=RegExp(`^rgba\\(${g},${g},${g},${f}\\)$`),m=RegExp(`^hsl\\(${f},${g},${g}\\)$`),n=RegExp(`^hsla\\(${f},${g},${g},${f}\\)$`),o={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32};function p(){return this.rgb().formatHex()}function q(){return this.rgb().formatRgb()}function r(a){var b,c;return a=(a+"").trim().toLowerCase(),(b=h.exec(a))?(c=b[1].length,b=parseInt(b[1],16),6===c?s(b):3===c?new w(b>>8&15|b>>4&240,b>>4&15|240&b,(15&b)<<4|15&b,1):8===c?t(b>>24&255,b>>16&255,b>>8&255,(255&b)/255):4===c?t(b>>12&15|b>>8&240,b>>8&15|b>>4&240,b>>4&15|240&b,((15&b)<<4|15&b)/255):null):(b=i.exec(a))?new w(b[1],b[2],b[3],1):(b=j.exec(a))?new w(255*b[1]/100,255*b[2]/100,255*b[3]/100,1):(b=k.exec(a))?t(b[1],b[2],b[3],b[4]):(b=l.exec(a))?t(255*b[1]/100,255*b[2]/100,255*b[3]/100,b[4]):(b=m.exec(a))?C(b[1],b[2]/100,b[3]/100,1):(b=n.exec(a))?C(b[1],b[2]/100,b[3]/100,b[4]):o.hasOwnProperty(a)?s(o[a]):"transparent"===a?new w(NaN,NaN,NaN,0):null}function s(a){return new w(a>>16&255,a>>8&255,255&a,1)}function t(a,b,c,d){return d<=0&&(a=b=c=NaN),new w(a,b,c,d)}function u(a){return(a instanceof d||(a=r(a)),a)?new w((a=a.rgb()).r,a.g,a.b,a.opacity):new w}function v(a,b,c,d){return 1==arguments.length?u(a):new w(a,b,c,null==d?1:d)}function w(a,b,c,d){this.r=+a,this.g=+b,this.b=+c,this.opacity=+d}function x(){return`#${B(this.r)}${B(this.g)}${B(this.b)}`}function y(){let a=z(this.opacity);return`${1===a?"rgb(":"rgba("}${A(this.r)}, ${A(this.g)}, ${A(this.b)}${1===a?")":`, ${a})`}`}function z(a){return isNaN(a)?1:Math.max(0,Math.min(1,a))}function A(a){return Math.max(0,Math.min(255,Math.round(a)||0))}function B(a){return((a=A(a))<16?"0":"")+a.toString(16)}function C(a,b,c,d){return d<=0?a=b=c=NaN:c<=0||c>=1?a=b=NaN:b<=0&&(a=NaN),new E(a,b,c,d)}function D(a){if(a instanceof E)return new E(a.h,a.s,a.l,a.opacity);if(a instanceof d||(a=r(a)),!a)return new E;if(a instanceof E)return a;var b=(a=a.rgb()).r/255,c=a.g/255,e=a.b/255,f=Math.min(b,c,e),g=Math.max(b,c,e),h=NaN,i=g-f,j=(g+f)/2;return i?(h=b===g?(c-e)/i+(c<e)*6:c===g?(e-b)/i+2:(b-c)/i+4,i/=j<.5?g+f:2-g-f,h*=60):i=j>0&&j<1?0:h,new E(h,i,j,a.opacity)}function E(a,b,c,d){this.h=+a,this.s=+b,this.l=+c,this.opacity=+d}function F(a){return(a=(a||0)%360)<0?a+360:a}function G(a){return Math.max(0,Math.min(1,a||0))}function H(a,b,c){return(a<60?b+(c-b)*a/60:a<180?c:a<240?b+(c-b)*(240-a)/60:b)*255}b(d,r,{copy(a){return Object.assign(new this.constructor,this,a)},displayable(){return this.rgb().displayable()},hex:p,formatHex:p,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return D(this).formatHsl()},formatRgb:q,toString:q}),b(w,v,c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new w(this.r*a,this.g*a,this.b*a,this.opacity)},rgb(){return this},clamp(){return new w(A(this.r),A(this.g),A(this.b),z(this.opacity))},displayable(){return -.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:x,formatHex:x,formatHex8:function(){return`#${B(this.r)}${B(this.g)}${B(this.b)}${B((isNaN(this.opacity)?1:this.opacity)*255)}`},formatRgb:y,toString:y})),b(E,function(a,b,c,d){return 1==arguments.length?D(a):new E(a,b,c,null==d?1:d)},c(d,{brighter(a){return a=null==a?1.4285714285714286:Math.pow(1.4285714285714286,a),new E(this.h,this.s,this.l*a,this.opacity)},darker(a){return a=null==a?.7:Math.pow(.7,a),new E(this.h,this.s,this.l*a,this.opacity)},rgb(){var a=this.h%360+(this.h<0)*360,b=isNaN(a)||isNaN(this.s)?0:this.s,c=this.l,d=c+(c<.5?c:1-c)*b,e=2*c-d;return new w(H(a>=240?a-240:a+120,e,d),H(a,e,d),H(a<120?a+240:a-120,e,d),this.opacity)},clamp(){return new E(F(this.h),G(this.s),G(this.l),z(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let a=z(this.opacity);return`${1===a?"hsl(":"hsla("}${F(this.h)}, ${100*G(this.s)}%, ${100*G(this.l)}%${1===a?")":`, ${a})`}`}})),a.s(["Color",()=>d,"Rgb",()=>w,"default",()=>r,"rgb",()=>v,"rgbConvert",()=>u],516936),a.s(["color",()=>r],439776)},519473,705572,343763,a=>{"use strict";var b=a.i(516936);function c(a,b,c,d,e){var f=a*a,g=f*a;return((1-3*a+3*f-g)*b+(4-6*f+3*g)*c+(1+3*a+3*f-3*g)*d+g*e)/6}let d=a=>()=>a;function e(a,b){return function(c){return a+c*b}}function f(a,b){var c=b-a;return c?e(a,c>180||c<-180?c-360*Math.round(c/360):c):d(isNaN(a)?b:a)}function g(a){return 1==(a*=1)?h:function(b,c){var e,f,g;return c-b?(e=b,f=c,e=Math.pow(e,g=a),f=Math.pow(f,g)-e,g=1/g,function(a){return Math.pow(e+a*f,g)}):d(isNaN(b)?c:b)}}function h(a,b){var c=b-a;return c?e(a,c):d(isNaN(a)?b:a)}a.s(["default",0,d],705572),a.s(["default",()=>h,"gamma",()=>g,"hue",()=>f],343763);let i=function a(c){var d=g(c);function e(a,c){var e=d((a=(0,b.rgb)(a)).r,(c=(0,b.rgb)(c)).r),f=d(a.g,c.g),g=d(a.b,c.b),i=h(a.opacity,c.opacity);return function(b){return a.r=e(b),a.g=f(b),a.b=g(b),a.opacity=i(b),a+""}}return e.gamma=a,e}(1);function j(a){return function(c){var d,e,f=c.length,g=Array(f),h=Array(f),i=Array(f);for(d=0;d<f;++d)e=(0,b.rgb)(c[d]),g[d]=e.r||0,h[d]=e.g||0,i[d]=e.b||0;return g=a(g),h=a(h),i=a(i),e.opacity=1,function(a){return e.r=g(a),e.g=h(a),e.b=i(a),e+""}}}j(function(a){var b=a.length-1;return function(d){var e=d<=0?d=0:d>=1?(d=1,b-1):Math.floor(d*b),f=a[e],g=a[e+1],h=e>0?a[e-1]:2*f-g,i=e<b-1?a[e+2]:2*g-f;return c((d-e/b)*b,h,f,g,i)}}),j(function(a){var b=a.length;return function(d){var e=Math.floor(((d%=1)<0?++d:d)*b),f=a[(e+b-1)%b],g=a[e%b],h=a[(e+1)%b],i=a[(e+2)%b];return c((d-e/b)*b,f,g,h,i)}}),a.s(["default",0,i],519473)},709757,395378,791008,a=>{"use strict";a.s(["genericArray",()=>d],709757);var b=a.i(12952);function c(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)}function d(a,c){var d,e=c?c.length:0,f=a?Math.min(e,a.length):0,g=Array(f),h=Array(e);for(d=0;d<f;++d)g[d]=(0,b.default)(a[d],c[d]);for(;d<e;++d)h[d]=c[d];return function(a){for(d=0;d<f;++d)h[d]=g[d](a);return h}}a.s(["default",0,function(a,b){b||(b=[]);var c,d=a?Math.min(b.length,a.length):0,e=b.slice();return function(f){for(c=0;c<d;++c)e[c]=a[c]*(1-f)+b[c]*f;return e}},"isNumberArray",()=>c],395378),a.s(["default",0,function(a,b){var c=new Date;return a*=1,b*=1,function(d){return c.setTime(a*(1-d)+b*d),c}}],791008)},225581,a=>{"use strict";a.s(["default",0,function(a,b){return a*=1,b*=1,function(c){return a*(1-c)+b*c}}])},946550,a=>{"use strict";a.s(["default",()=>c]);var b=a.i(12952);function c(a,c){var d,e={},f={};for(d in(null===a||"object"!=typeof a)&&(a={}),(null===c||"object"!=typeof c)&&(c={}),c)d in a?e[d]=(0,b.default)(a[d],c[d]):f[d]=c[d];return function(a){for(d in e)f[d]=e[d](a);return f}}},738916,a=>{"use strict";var b=a.i(225581),c=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,d=RegExp(c.source,"g");a.s(["default",0,function(a,e){var f,g,h,i,j,k=c.lastIndex=d.lastIndex=0,l=-1,m=[],n=[];for(a+="",e+="";(h=c.exec(a))&&(i=d.exec(e));)(j=i.index)>k&&(j=e.slice(k,j),m[l]?m[l]+=j:m[++l]=j),(h=h[0])===(i=i[0])?m[l]?m[l]+=i:m[++l]=i:(m[++l]=null,n.push({i:l,x:(0,b.default)(h,i)})),k=d.lastIndex;return k<e.length&&(j=e.slice(k),m[l]?m[l]+=j:m[++l]=j),m.length<2?n[0]?(f=n[0].x,function(a){return f(a)+""}):(g=e,function(){return g}):(e=n.length,function(a){for(var b,c=0;c<e;++c)m[(b=n[c]).i]=b.x(a);return m.join("")})}])},447542,12952,a=>{"use strict";a.s(["default",()=>k],12952);var b=a.i(439776),c=a.i(519473),d=a.i(709757),e=a.i(791008),f=a.i(225581),g=a.i(946550),h=a.i(738916),i=a.i(705572),j=a.i(395378);function k(a,k){var l,m=typeof k;return null==k||"boolean"===m?(0,i.default)(k):("number"===m?f.default:"string"===m?(l=(0,b.color)(k))?(k=l,c.default):h.default:k instanceof b.color?c.default:k instanceof Date?e.default:(0,j.isNumberArray)(k)?j.default:Array.isArray(k)?d.genericArray:"function"!=typeof k.valueOf&&"function"!=typeof k.toString||isNaN(k)?g.default:f.default)(a,k)}a.s(["interpolate",0,k],447542)},871131,a=>{"use strict";var b=a.i(225581);a.s(["interpolateNumber",()=>b.default])},379996,112882,a=>{"use strict";a.s(["default",0,function(a){return function(){return a}}],379996);let b=Math.PI,c=2*b,d=c-1e-6;function e(a){this._+=a[0];for(let b=1,c=a.length;b<c;++b)this._+=arguments[b]+a[b]}class f{constructor(a){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==a?e:function(a){let b=Math.floor(a);if(!(b>=0))throw Error(`invalid digits: ${a}`);if(b>15)return e;let c=10**b;return function(a){this._+=a[0];for(let b=1,d=a.length;b<d;++b)this._+=Math.round(arguments[b]*c)/c+a[b]}}(a)}moveTo(a,b){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+b}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(a,b){this._append`L${this._x1=+a},${this._y1=+b}`}quadraticCurveTo(a,b,c,d){this._append`Q${+a},${+b},${this._x1=+c},${this._y1=+d}`}bezierCurveTo(a,b,c,d,e,f){this._append`C${+a},${+b},${+c},${+d},${this._x1=+e},${this._y1=+f}`}arcTo(a,c,d,e,f){if(a*=1,c*=1,d*=1,e*=1,(f*=1)<0)throw Error(`negative radius: ${f}`);let g=this._x1,h=this._y1,i=d-a,j=e-c,k=g-a,l=h-c,m=k*k+l*l;if(null===this._x1)this._append`M${this._x1=a},${this._y1=c}`;else if(m>1e-6)if(Math.abs(l*i-j*k)>1e-6&&f){let n=d-g,o=e-h,p=i*i+j*j,q=Math.sqrt(p),r=Math.sqrt(m),s=f*Math.tan((b-Math.acos((p+m-(n*n+o*o))/(2*q*r)))/2),t=s/r,u=s/q;Math.abs(t-1)>1e-6&&this._append`L${a+t*k},${c+t*l}`,this._append`A${f},${f},0,0,${+(l*n>k*o)},${this._x1=a+u*i},${this._y1=c+u*j}`}else this._append`L${this._x1=a},${this._y1=c}`}arc(a,e,f,g,h,i){if(a*=1,e*=1,f*=1,i=!!i,f<0)throw Error(`negative radius: ${f}`);let j=f*Math.cos(g),k=f*Math.sin(g),l=a+j,m=e+k,n=1^i,o=i?g-h:h-g;null===this._x1?this._append`M${l},${m}`:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-m)>1e-6)&&this._append`L${l},${m}`,f&&(o<0&&(o=o%c+c),o>d?this._append`A${f},${f},0,1,${n},${a-j},${e-k}A${f},${f},0,1,${n},${this._x1=l},${this._y1=m}`:o>1e-6&&this._append`A${f},${f},0,${+(o>=b)},${n},${this._x1=a+f*Math.cos(h)},${this._y1=e+f*Math.sin(h)}`)}rect(a,b,c,d){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+b}h${c*=1}v${+d}h${-c}Z`}toString(){return this._}}function g(a){let b=3;return a.digits=function(c){if(!arguments.length)return b;if(null==c)b=null;else{let a=Math.floor(c);if(!(a>=0))throw RangeError(`invalid digits: ${c}`);b=a}return a},()=>new f(b)}f.prototype,a.s(["withPath",()=>g],112882)},884885,a=>{"use strict";Array.prototype.slice,a.s(["default",0,function(a){return"object"==typeof a&&"length"in a?a:Array.from(a)}])},398153,416487,785362,a=>{"use strict";var b=a.i(884885),c=a.i(379996),d=a.i(632794),e=a.i(112882);function f(a){return a[0]}function g(a){return a[1]}function h(a,h){var i=(0,c.default)(!0),j=null,k=d.default,l=null,m=(0,e.withPath)(n);function n(c){var d,e,f,g=(c=(0,b.default)(c)).length,n=!1;for(null==j&&(l=k(f=m())),d=0;d<=g;++d)!(d<g&&i(e=c[d],d,c))===n&&((n=!n)?l.lineStart():l.lineEnd()),n&&l.point(+a(e,d,c),+h(e,d,c));if(f)return l=null,f+""||null}return a="function"==typeof a?a:void 0===a?f:(0,c.default)(a),h="function"==typeof h?h:void 0===h?g:(0,c.default)(h),n.x=function(b){return arguments.length?(a="function"==typeof b?b:(0,c.default)(+b),n):a},n.y=function(a){return arguments.length?(h="function"==typeof a?a:(0,c.default)(+a),n):h},n.defined=function(a){return arguments.length?(i="function"==typeof a?a:(0,c.default)(!!a),n):i},n.curve=function(a){return arguments.length?(k=a,null!=j&&(l=k(j)),n):k},n.context=function(a){return arguments.length?(null==a?j=l=null:l=k(j=a),n):j},n}a.s(["x",()=>f,"y",()=>g],416487),a.s(["default",0,h],785362),a.s(["line",0,h],398153)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=node_modules_0ec17dda._.js.map
|