@n-dx/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +96 -0
- package/README.md +214 -0
- package/ci.js +1243 -0
- package/claude-integration.js +331 -0
- package/cli.js +975 -0
- package/config.js +1054 -0
- package/export.js +509 -0
- package/help.js +1051 -0
- package/package.json +93 -0
- package/packages/hench/dist/agent/analysis/adaptive.d.ts +101 -0
- package/packages/hench/dist/agent/analysis/adaptive.js +353 -0
- package/packages/hench/dist/agent/analysis/adaptive.js.map +1 -0
- package/packages/hench/dist/agent/analysis/index.d.ts +26 -0
- package/packages/hench/dist/agent/analysis/index.js +30 -0
- package/packages/hench/dist/agent/analysis/index.js.map +1 -0
- package/packages/hench/dist/agent/analysis/review.d.ts +40 -0
- package/packages/hench/dist/agent/analysis/review.js +66 -0
- package/packages/hench/dist/agent/analysis/review.js.map +1 -0
- package/packages/hench/dist/agent/analysis/spin.d.ts +27 -0
- package/packages/hench/dist/agent/analysis/spin.js +32 -0
- package/packages/hench/dist/agent/analysis/spin.js.map +1 -0
- package/packages/hench/dist/agent/analysis/stuck.d.ts +22 -0
- package/packages/hench/dist/agent/analysis/stuck.js +56 -0
- package/packages/hench/dist/agent/analysis/stuck.js.map +1 -0
- package/packages/hench/dist/agent/analysis/summary.d.ts +9 -0
- package/packages/hench/dist/agent/analysis/summary.js +106 -0
- package/packages/hench/dist/agent/analysis/summary.js.map +1 -0
- package/packages/hench/dist/agent/analysis/workflow.d.ts +60 -0
- package/packages/hench/dist/agent/analysis/workflow.js +359 -0
- package/packages/hench/dist/agent/analysis/workflow.js.map +1 -0
- package/packages/hench/dist/agent/brief.d.ts +33 -0
- package/packages/hench/dist/agent/brief.js +235 -0
- package/packages/hench/dist/agent/brief.js.map +1 -0
- package/packages/hench/dist/agent/cli-loop.d.ts +43 -0
- package/packages/hench/dist/agent/cli-loop.js +469 -0
- package/packages/hench/dist/agent/cli-loop.js.map +1 -0
- package/packages/hench/dist/agent/completion.d.ts +8 -0
- package/packages/hench/dist/agent/completion.js +8 -0
- package/packages/hench/dist/agent/completion.js.map +1 -0
- package/packages/hench/dist/agent/index.d.ts +35 -0
- package/packages/hench/dist/agent/index.js +40 -0
- package/packages/hench/dist/agent/index.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/cli-loop.d.ts +65 -0
- package/packages/hench/dist/agent/lifecycle/cli-loop.js +882 -0
- package/packages/hench/dist/agent/lifecycle/cli-loop.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/heartbeat.d.ts +38 -0
- package/packages/hench/dist/agent/lifecycle/heartbeat.js +72 -0
- package/packages/hench/dist/agent/lifecycle/heartbeat.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/loop.d.ts +11 -0
- package/packages/hench/dist/agent/lifecycle/loop.js +300 -0
- package/packages/hench/dist/agent/lifecycle/loop.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/shared.d.ts +138 -0
- package/packages/hench/dist/agent/lifecycle/shared.js +241 -0
- package/packages/hench/dist/agent/lifecycle/shared.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/task-display.d.ts +7 -0
- package/packages/hench/dist/agent/lifecycle/task-display.js +22 -0
- package/packages/hench/dist/agent/lifecycle/task-display.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/token-budget.d.ts +18 -0
- package/packages/hench/dist/agent/lifecycle/token-budget.js +16 -0
- package/packages/hench/dist/agent/lifecycle/token-budget.js.map +1 -0
- package/packages/hench/dist/agent/lifecycle/token-usage.d.ts +44 -0
- package/packages/hench/dist/agent/lifecycle/token-usage.js +102 -0
- package/packages/hench/dist/agent/lifecycle/token-usage.js.map +1 -0
- package/packages/hench/dist/agent/loop.d.ts +24 -0
- package/packages/hench/dist/agent/loop.js +312 -0
- package/packages/hench/dist/agent/loop.js.map +1 -0
- package/packages/hench/dist/agent/planning/brief.d.ts +40 -0
- package/packages/hench/dist/agent/planning/brief.js +267 -0
- package/packages/hench/dist/agent/planning/brief.js.map +1 -0
- package/packages/hench/dist/agent/planning/prompt.d.ts +2 -0
- package/packages/hench/dist/agent/planning/prompt.js +73 -0
- package/packages/hench/dist/agent/planning/prompt.js.map +1 -0
- package/packages/hench/dist/agent/prompt.d.ts +2 -0
- package/packages/hench/dist/agent/prompt.js +65 -0
- package/packages/hench/dist/agent/prompt.js.map +1 -0
- package/packages/hench/dist/agent/review.d.ts +40 -0
- package/packages/hench/dist/agent/review.js +76 -0
- package/packages/hench/dist/agent/review.js.map +1 -0
- package/packages/hench/dist/agent/stuck.d.ts +22 -0
- package/packages/hench/dist/agent/stuck.js +56 -0
- package/packages/hench/dist/agent/stuck.js.map +1 -0
- package/packages/hench/dist/agent/summary.d.ts +9 -0
- package/packages/hench/dist/agent/summary.js +106 -0
- package/packages/hench/dist/agent/summary.js.map +1 -0
- package/packages/hench/dist/agent/test-runner.d.ts +81 -0
- package/packages/hench/dist/agent/test-runner.js +245 -0
- package/packages/hench/dist/agent/test-runner.js.map +1 -0
- package/packages/hench/dist/agent/token-budget.d.ts +18 -0
- package/packages/hench/dist/agent/token-budget.js +16 -0
- package/packages/hench/dist/agent/token-budget.js.map +1 -0
- package/packages/hench/dist/agent/token-usage.d.ts +27 -0
- package/packages/hench/dist/agent/token-usage.js +52 -0
- package/packages/hench/dist/agent/token-usage.js.map +1 -0
- package/packages/hench/dist/agent/tools.d.ts +8 -0
- package/packages/hench/dist/agent/tools.js +8 -0
- package/packages/hench/dist/agent/tools.js.map +1 -0
- package/packages/hench/dist/cli/commands/config.d.ts +40 -0
- package/packages/hench/dist/cli/commands/config.js +463 -0
- package/packages/hench/dist/cli/commands/config.js.map +1 -0
- package/packages/hench/dist/cli/commands/constants.d.ts +5 -0
- package/packages/hench/dist/cli/commands/constants.js +46 -0
- package/packages/hench/dist/cli/commands/constants.js.map +1 -0
- package/packages/hench/dist/cli/commands/init.d.ts +1 -0
- package/packages/hench/dist/cli/commands/init.js +22 -0
- package/packages/hench/dist/cli/commands/init.js.map +1 -0
- package/packages/hench/dist/cli/commands/run.d.ts +108 -0
- package/packages/hench/dist/cli/commands/run.js +847 -0
- package/packages/hench/dist/cli/commands/run.js.map +1 -0
- package/packages/hench/dist/cli/commands/show.d.ts +1 -0
- package/packages/hench/dist/cli/commands/show.js +101 -0
- package/packages/hench/dist/cli/commands/show.js.map +1 -0
- package/packages/hench/dist/cli/commands/status.d.ts +1 -0
- package/packages/hench/dist/cli/commands/status.js +63 -0
- package/packages/hench/dist/cli/commands/status.js.map +1 -0
- package/packages/hench/dist/cli/commands/task-lookup.d.ts +24 -0
- package/packages/hench/dist/cli/commands/task-lookup.js +69 -0
- package/packages/hench/dist/cli/commands/task-lookup.js.map +1 -0
- package/packages/hench/dist/cli/commands/template.d.ts +12 -0
- package/packages/hench/dist/cli/commands/template.js +217 -0
- package/packages/hench/dist/cli/commands/template.js.map +1 -0
- package/packages/hench/dist/cli/errors.d.ts +55 -0
- package/packages/hench/dist/cli/errors.js +185 -0
- package/packages/hench/dist/cli/errors.js.map +1 -0
- package/packages/hench/dist/cli/help.d.ts +23 -0
- package/packages/hench/dist/cli/help.js +186 -0
- package/packages/hench/dist/cli/help.js.map +1 -0
- package/packages/hench/dist/cli/index.d.ts +21 -0
- package/packages/hench/dist/cli/index.js +131 -0
- package/packages/hench/dist/cli/index.js.map +1 -0
- package/packages/hench/dist/cli/output.d.ts +9 -0
- package/packages/hench/dist/cli/output.js +10 -0
- package/packages/hench/dist/cli/output.js.map +1 -0
- package/packages/hench/dist/guard/commands.d.ts +27 -0
- package/packages/hench/dist/guard/commands.js +69 -0
- package/packages/hench/dist/guard/commands.js.map +1 -0
- package/packages/hench/dist/guard/contracts.d.ts +31 -0
- package/packages/hench/dist/guard/contracts.js +8 -0
- package/packages/hench/dist/guard/contracts.js.map +1 -0
- package/packages/hench/dist/guard/index.d.ts +107 -0
- package/packages/hench/dist/guard/index.js +139 -0
- package/packages/hench/dist/guard/index.js.map +1 -0
- package/packages/hench/dist/guard/paths.d.ts +43 -0
- package/packages/hench/dist/guard/paths.js +112 -0
- package/packages/hench/dist/guard/paths.js.map +1 -0
- package/packages/hench/dist/guard/policy.d.ts +108 -0
- package/packages/hench/dist/guard/policy.js +156 -0
- package/packages/hench/dist/guard/policy.js.map +1 -0
- package/packages/hench/dist/prd/llm-gateway.d.ts +47 -0
- package/packages/hench/dist/prd/llm-gateway.js +57 -0
- package/packages/hench/dist/prd/llm-gateway.js.map +1 -0
- package/packages/hench/dist/prd/ops.d.ts +5 -0
- package/packages/hench/dist/prd/ops.js +6 -0
- package/packages/hench/dist/prd/ops.js.map +1 -0
- package/packages/hench/dist/prd/rex-gateway.d.ts +95 -0
- package/packages/hench/dist/prd/rex-gateway.js +104 -0
- package/packages/hench/dist/prd/rex-gateway.js.map +1 -0
- package/packages/hench/dist/process/concurrent-execution-metrics.d.ts +243 -0
- package/packages/hench/dist/process/concurrent-execution-metrics.js +352 -0
- package/packages/hench/dist/process/concurrent-execution-metrics.js.map +1 -0
- package/packages/hench/dist/process/exec-shell.d.ts +8 -0
- package/packages/hench/dist/process/exec-shell.js +8 -0
- package/packages/hench/dist/process/exec-shell.js.map +1 -0
- package/packages/hench/dist/process/exec.d.ts +12 -0
- package/packages/hench/dist/process/exec.js +12 -0
- package/packages/hench/dist/process/exec.js.map +1 -0
- package/packages/hench/dist/process/index.d.ts +22 -0
- package/packages/hench/dist/process/index.js +15 -0
- package/packages/hench/dist/process/index.js.map +1 -0
- package/packages/hench/dist/process/lifecycle.d.ts +208 -0
- package/packages/hench/dist/process/lifecycle.js +387 -0
- package/packages/hench/dist/process/lifecycle.js.map +1 -0
- package/packages/hench/dist/process/limiter.d.ts +85 -0
- package/packages/hench/dist/process/limiter.js +215 -0
- package/packages/hench/dist/process/limiter.js.map +1 -0
- package/packages/hench/dist/process/memory-monitor.d.ts +162 -0
- package/packages/hench/dist/process/memory-monitor.js +268 -0
- package/packages/hench/dist/process/memory-monitor.js.map +1 -0
- package/packages/hench/dist/process/memory-throttle.d.ts +140 -0
- package/packages/hench/dist/process/memory-throttle.js +238 -0
- package/packages/hench/dist/process/memory-throttle.js.map +1 -0
- package/packages/hench/dist/process/pool.d.ts +231 -0
- package/packages/hench/dist/process/pool.js +344 -0
- package/packages/hench/dist/process/pool.js.map +1 -0
- package/packages/hench/dist/process/process-memory-tracker.d.ts +164 -0
- package/packages/hench/dist/process/process-memory-tracker.js +249 -0
- package/packages/hench/dist/process/process-memory-tracker.js.map +1 -0
- package/packages/hench/dist/public.d.ts +62 -0
- package/packages/hench/dist/public.js +58 -0
- package/packages/hench/dist/public.js.map +1 -0
- package/packages/hench/dist/queue/execution-queue.d.ts +128 -0
- package/packages/hench/dist/queue/execution-queue.js +206 -0
- package/packages/hench/dist/queue/execution-queue.js.map +1 -0
- package/packages/hench/dist/queue/format.d.ts +19 -0
- package/packages/hench/dist/queue/format.js +52 -0
- package/packages/hench/dist/queue/format.js.map +1 -0
- package/packages/hench/dist/queue/index.d.ts +5 -0
- package/packages/hench/dist/queue/index.js +4 -0
- package/packages/hench/dist/queue/index.js.map +1 -0
- package/packages/hench/dist/queue/priority-scheduler.d.ts +73 -0
- package/packages/hench/dist/queue/priority-scheduler.js +119 -0
- package/packages/hench/dist/queue/priority-scheduler.js.map +1 -0
- package/packages/hench/dist/schema/index.d.ts +6 -0
- package/packages/hench/dist/schema/index.js +4 -0
- package/packages/hench/dist/schema/index.js.map +1 -0
- package/packages/hench/dist/schema/templates.d.ts +34 -0
- package/packages/hench/dist/schema/templates.js +147 -0
- package/packages/hench/dist/schema/templates.js.map +1 -0
- package/packages/hench/dist/schema/v1.d.ts +235 -0
- package/packages/hench/dist/schema/v1.js +34 -0
- package/packages/hench/dist/schema/v1.js.map +1 -0
- package/packages/hench/dist/schema/validate.d.ts +601 -0
- package/packages/hench/dist/schema/validate.js +166 -0
- package/packages/hench/dist/schema/validate.js.map +1 -0
- package/packages/hench/dist/shared/glob.d.ts +11 -0
- package/packages/hench/dist/shared/glob.js +57 -0
- package/packages/hench/dist/shared/glob.js.map +1 -0
- package/packages/hench/dist/store/adjustments.d.ts +75 -0
- package/packages/hench/dist/store/adjustments.js +139 -0
- package/packages/hench/dist/store/adjustments.js.map +1 -0
- package/packages/hench/dist/store/config.d.ts +6 -0
- package/packages/hench/dist/store/config.js +41 -0
- package/packages/hench/dist/store/config.js.map +1 -0
- package/packages/hench/dist/store/index.d.ts +7 -0
- package/packages/hench/dist/store/index.js +6 -0
- package/packages/hench/dist/store/index.js.map +1 -0
- package/packages/hench/dist/store/json.d.ts +1 -0
- package/packages/hench/dist/store/json.js +3 -0
- package/packages/hench/dist/store/json.js.map +1 -0
- package/packages/hench/dist/store/project-config.d.ts +62 -0
- package/packages/hench/dist/store/project-config.js +100 -0
- package/packages/hench/dist/store/project-config.js.map +1 -0
- package/packages/hench/dist/store/run-archiver.d.ts +107 -0
- package/packages/hench/dist/store/run-archiver.js +204 -0
- package/packages/hench/dist/store/run-archiver.js.map +1 -0
- package/packages/hench/dist/store/run-change-detector.d.ts +99 -0
- package/packages/hench/dist/store/run-change-detector.js +170 -0
- package/packages/hench/dist/store/run-change-detector.js.map +1 -0
- package/packages/hench/dist/store/run-retention-scheduler.d.ts +80 -0
- package/packages/hench/dist/store/run-retention-scheduler.js +143 -0
- package/packages/hench/dist/store/run-retention-scheduler.js.map +1 -0
- package/packages/hench/dist/store/run-retention.d.ts +150 -0
- package/packages/hench/dist/store/run-retention.js +327 -0
- package/packages/hench/dist/store/run-retention.js.map +1 -0
- package/packages/hench/dist/store/runs.d.ts +4 -0
- package/packages/hench/dist/store/runs.js +80 -0
- package/packages/hench/dist/store/runs.js.map +1 -0
- package/packages/hench/dist/store/suggestions.d.ts +43 -0
- package/packages/hench/dist/store/suggestions.js +61 -0
- package/packages/hench/dist/store/suggestions.js.map +1 -0
- package/packages/hench/dist/store/templates.d.ts +34 -0
- package/packages/hench/dist/store/templates.js +119 -0
- package/packages/hench/dist/store/templates.js.map +1 -0
- package/packages/hench/dist/tools/contracts.d.ts +60 -0
- package/packages/hench/dist/tools/contracts.js +2 -0
- package/packages/hench/dist/tools/contracts.js.map +1 -0
- package/packages/hench/dist/tools/dispatch.d.ts +29 -0
- package/packages/hench/dist/tools/dispatch.js +213 -0
- package/packages/hench/dist/tools/dispatch.js.map +1 -0
- package/packages/hench/dist/tools/exec-shell.d.ts +23 -0
- package/packages/hench/dist/tools/exec-shell.js +29 -0
- package/packages/hench/dist/tools/exec-shell.js.map +1 -0
- package/packages/hench/dist/tools/files.d.ts +17 -0
- package/packages/hench/dist/tools/files.js +111 -0
- package/packages/hench/dist/tools/files.js.map +1 -0
- package/packages/hench/dist/tools/git.d.ts +5 -0
- package/packages/hench/dist/tools/git.js +48 -0
- package/packages/hench/dist/tools/git.js.map +1 -0
- package/packages/hench/dist/tools/index.d.ts +17 -0
- package/packages/hench/dist/tools/index.js +19 -0
- package/packages/hench/dist/tools/index.js.map +1 -0
- package/packages/hench/dist/tools/rex.d.ts +32 -0
- package/packages/hench/dist/tools/rex.js +185 -0
- package/packages/hench/dist/tools/rex.js.map +1 -0
- package/packages/hench/dist/tools/shell.d.ts +6 -0
- package/packages/hench/dist/tools/shell.js +10 -0
- package/packages/hench/dist/tools/shell.js.map +1 -0
- package/packages/hench/dist/tools/test-runner.d.ts +81 -0
- package/packages/hench/dist/tools/test-runner.js +229 -0
- package/packages/hench/dist/tools/test-runner.js.map +1 -0
- package/packages/hench/dist/types/index.d.ts +4 -0
- package/packages/hench/dist/types/index.js +6 -0
- package/packages/hench/dist/types/index.js.map +1 -0
- package/packages/hench/dist/types/output.d.ts +47 -0
- package/packages/hench/dist/types/output.js +74 -0
- package/packages/hench/dist/types/output.js.map +1 -0
- package/packages/hench/dist/validation/completion.d.ts +37 -0
- package/packages/hench/dist/validation/completion.js +83 -0
- package/packages/hench/dist/validation/completion.js.map +1 -0
- package/packages/hench/dist/validation/index.d.ts +9 -0
- package/packages/hench/dist/validation/index.js +9 -0
- package/packages/hench/dist/validation/index.js.map +1 -0
- package/packages/hench/package.json +40 -0
- package/packages/llm-client/dist/api-provider.d.ts +47 -0
- package/packages/llm-client/dist/api-provider.js +126 -0
- package/packages/llm-client/dist/api-provider.js.map +1 -0
- package/packages/llm-client/dist/auth.d.ts +85 -0
- package/packages/llm-client/dist/auth.js +165 -0
- package/packages/llm-client/dist/auth.js.map +1 -0
- package/packages/llm-client/dist/cli-provider.d.ts +49 -0
- package/packages/llm-client/dist/cli-provider.js +226 -0
- package/packages/llm-client/dist/cli-provider.js.map +1 -0
- package/packages/llm-client/dist/codex-cli-provider.d.ts +15 -0
- package/packages/llm-client/dist/codex-cli-provider.js +206 -0
- package/packages/llm-client/dist/codex-cli-provider.js.map +1 -0
- package/packages/llm-client/dist/config.d.ts +39 -0
- package/packages/llm-client/dist/config.js +85 -0
- package/packages/llm-client/dist/config.js.map +1 -0
- package/packages/llm-client/dist/create-client.d.ts +66 -0
- package/packages/llm-client/dist/create-client.js +73 -0
- package/packages/llm-client/dist/create-client.js.map +1 -0
- package/packages/llm-client/dist/exec.d.ts +231 -0
- package/packages/llm-client/dist/exec.js +440 -0
- package/packages/llm-client/dist/exec.js.map +1 -0
- package/packages/llm-client/dist/help-format.d.ts +143 -0
- package/packages/llm-client/dist/help-format.js +280 -0
- package/packages/llm-client/dist/help-format.js.map +1 -0
- package/packages/llm-client/dist/json.d.ts +15 -0
- package/packages/llm-client/dist/json.js +18 -0
- package/packages/llm-client/dist/json.js.map +1 -0
- package/packages/llm-client/dist/llm-client.d.ts +43 -0
- package/packages/llm-client/dist/llm-client.js +48 -0
- package/packages/llm-client/dist/llm-client.js.map +1 -0
- package/packages/llm-client/dist/llm-config.d.ts +16 -0
- package/packages/llm-client/dist/llm-config.js +81 -0
- package/packages/llm-client/dist/llm-config.js.map +1 -0
- package/packages/llm-client/dist/llm-types.d.ts +40 -0
- package/packages/llm-client/dist/llm-types.js +17 -0
- package/packages/llm-client/dist/llm-types.js.map +1 -0
- package/packages/llm-client/dist/output.d.ts +27 -0
- package/packages/llm-client/dist/output.js +38 -0
- package/packages/llm-client/dist/output.js.map +1 -0
- package/packages/llm-client/dist/project-config.d.ts +25 -0
- package/packages/llm-client/dist/project-config.js +66 -0
- package/packages/llm-client/dist/project-config.js.map +1 -0
- package/packages/llm-client/dist/project-dirs.d.ts +32 -0
- package/packages/llm-client/dist/project-dirs.js +31 -0
- package/packages/llm-client/dist/project-dirs.js.map +1 -0
- package/packages/llm-client/dist/provider-interface.d.ts +194 -0
- package/packages/llm-client/dist/provider-interface.js +50 -0
- package/packages/llm-client/dist/provider-interface.js.map +1 -0
- package/packages/llm-client/dist/provider-registry.d.ts +147 -0
- package/packages/llm-client/dist/provider-registry.js +175 -0
- package/packages/llm-client/dist/provider-registry.js.map +1 -0
- package/packages/llm-client/dist/provider-session.d.ts +141 -0
- package/packages/llm-client/dist/provider-session.js +174 -0
- package/packages/llm-client/dist/provider-session.js.map +1 -0
- package/packages/llm-client/dist/public.d.ts +120 -0
- package/packages/llm-client/dist/public.js +122 -0
- package/packages/llm-client/dist/public.js.map +1 -0
- package/packages/llm-client/dist/suggest.d.ts +27 -0
- package/packages/llm-client/dist/suggest.js +63 -0
- package/packages/llm-client/dist/suggest.js.map +1 -0
- package/packages/llm-client/dist/token-usage.d.ts +43 -0
- package/packages/llm-client/dist/token-usage.js +106 -0
- package/packages/llm-client/dist/token-usage.js.map +1 -0
- package/packages/llm-client/dist/types.d.ts +108 -0
- package/packages/llm-client/dist/types.js +49 -0
- package/packages/llm-client/dist/types.js.map +1 -0
- package/packages/llm-client/package.json +34 -0
- package/packages/rex/dist/analyze/acknowledge.d.ts +44 -0
- package/packages/rex/dist/analyze/acknowledge.js +100 -0
- package/packages/rex/dist/analyze/acknowledge.js.map +1 -0
- package/packages/rex/dist/analyze/analyze-shared.d.ts +51 -0
- package/packages/rex/dist/analyze/analyze-shared.js +356 -0
- package/packages/rex/dist/analyze/analyze-shared.js.map +1 -0
- package/packages/rex/dist/analyze/batch-types.d.ts +48 -0
- package/packages/rex/dist/analyze/batch-types.js +9 -0
- package/packages/rex/dist/analyze/batch-types.js.map +1 -0
- package/packages/rex/dist/analyze/consolidation-guard.d.ts +45 -0
- package/packages/rex/dist/analyze/consolidation-guard.js +125 -0
- package/packages/rex/dist/analyze/consolidation-guard.js.map +1 -0
- package/packages/rex/dist/analyze/decompose.d.ts +62 -0
- package/packages/rex/dist/analyze/decompose.js +212 -0
- package/packages/rex/dist/analyze/decompose.js.map +1 -0
- package/packages/rex/dist/analyze/dedupe.d.ts +30 -0
- package/packages/rex/dist/analyze/dedupe.js +339 -0
- package/packages/rex/dist/analyze/dedupe.js.map +1 -0
- package/packages/rex/dist/analyze/diff.d.ts +13 -0
- package/packages/rex/dist/analyze/diff.js +146 -0
- package/packages/rex/dist/analyze/diff.js.map +1 -0
- package/packages/rex/dist/analyze/extract.d.ts +152 -0
- package/packages/rex/dist/analyze/extract.js +1338 -0
- package/packages/rex/dist/analyze/extract.js.map +1 -0
- package/packages/rex/dist/analyze/file-validation.d.ts +122 -0
- package/packages/rex/dist/analyze/file-validation.js +427 -0
- package/packages/rex/dist/analyze/file-validation.js.map +1 -0
- package/packages/rex/dist/analyze/guided.d.ts +17 -0
- package/packages/rex/dist/analyze/guided.js +162 -0
- package/packages/rex/dist/analyze/guided.js.map +1 -0
- package/packages/rex/dist/analyze/index.d.ts +27 -0
- package/packages/rex/dist/analyze/index.js +15 -0
- package/packages/rex/dist/analyze/index.js.map +1 -0
- package/packages/rex/dist/analyze/llm-bridge.d.ts +49 -0
- package/packages/rex/dist/analyze/llm-bridge.js +133 -0
- package/packages/rex/dist/analyze/llm-bridge.js.map +1 -0
- package/packages/rex/dist/analyze/modify-reason.d.ts +68 -0
- package/packages/rex/dist/analyze/modify-reason.js +182 -0
- package/packages/rex/dist/analyze/modify-reason.js.map +1 -0
- package/packages/rex/dist/analyze/propose.d.ts +72 -0
- package/packages/rex/dist/analyze/propose.js +246 -0
- package/packages/rex/dist/analyze/propose.js.map +1 -0
- package/packages/rex/dist/analyze/reason.d.ts +277 -0
- package/packages/rex/dist/analyze/reason.js +1446 -0
- package/packages/rex/dist/analyze/reason.js.map +1 -0
- package/packages/rex/dist/analyze/reconcile.d.ts +25 -0
- package/packages/rex/dist/analyze/reconcile.js +82 -0
- package/packages/rex/dist/analyze/reconcile.js.map +1 -0
- package/packages/rex/dist/analyze/reshape-reason.d.ts +38 -0
- package/packages/rex/dist/analyze/reshape-reason.js +302 -0
- package/packages/rex/dist/analyze/reshape-reason.js.map +1 -0
- package/packages/rex/dist/analyze/scanners.d.ts +36 -0
- package/packages/rex/dist/analyze/scanners.js +805 -0
- package/packages/rex/dist/analyze/scanners.js.map +1 -0
- package/packages/rex/dist/analyze/validate-modification.d.ts +54 -0
- package/packages/rex/dist/analyze/validate-modification.js +166 -0
- package/packages/rex/dist/analyze/validate-modification.js.map +1 -0
- package/packages/rex/dist/cli/commands/adapter.d.ts +11 -0
- package/packages/rex/dist/cli/commands/adapter.js +211 -0
- package/packages/rex/dist/cli/commands/adapter.js.map +1 -0
- package/packages/rex/dist/cli/commands/add.d.ts +1 -0
- package/packages/rex/dist/cli/commands/add.js +111 -0
- package/packages/rex/dist/cli/commands/add.js.map +1 -0
- package/packages/rex/dist/cli/commands/analyze.d.ts +4 -0
- package/packages/rex/dist/cli/commands/analyze.js +672 -0
- package/packages/rex/dist/cli/commands/analyze.js.map +1 -0
- package/packages/rex/dist/cli/commands/chunked-review-state.d.ts +183 -0
- package/packages/rex/dist/cli/commands/chunked-review-state.js +637 -0
- package/packages/rex/dist/cli/commands/chunked-review-state.js.map +1 -0
- package/packages/rex/dist/cli/commands/chunked-review.d.ts +21 -0
- package/packages/rex/dist/cli/commands/chunked-review.js +147 -0
- package/packages/rex/dist/cli/commands/chunked-review.js.map +1 -0
- package/packages/rex/dist/cli/commands/constants.d.ts +3 -0
- package/packages/rex/dist/cli/commands/constants.js +50 -0
- package/packages/rex/dist/cli/commands/constants.js.map +1 -0
- package/packages/rex/dist/cli/commands/decomposition-review.d.ts +92 -0
- package/packages/rex/dist/cli/commands/decomposition-review.js +258 -0
- package/packages/rex/dist/cli/commands/decomposition-review.js.map +1 -0
- package/packages/rex/dist/cli/commands/fix.d.ts +8 -0
- package/packages/rex/dist/cli/commands/fix.js +101 -0
- package/packages/rex/dist/cli/commands/fix.js.map +1 -0
- package/packages/rex/dist/cli/commands/format-loe.d.ts +22 -0
- package/packages/rex/dist/cli/commands/format-loe.js +35 -0
- package/packages/rex/dist/cli/commands/format-loe.js.map +1 -0
- package/packages/rex/dist/cli/commands/health.d.ts +7 -0
- package/packages/rex/dist/cli/commands/health.js +24 -0
- package/packages/rex/dist/cli/commands/health.js.map +1 -0
- package/packages/rex/dist/cli/commands/init.d.ts +1 -0
- package/packages/rex/dist/cli/commands/init.js +64 -0
- package/packages/rex/dist/cli/commands/init.js.map +1 -0
- package/packages/rex/dist/cli/commands/move.d.ts +1 -0
- package/packages/rex/dist/cli/commands/move.js +45 -0
- package/packages/rex/dist/cli/commands/move.js.map +1 -0
- package/packages/rex/dist/cli/commands/next.d.ts +1 -0
- package/packages/rex/dist/cli/commands/next.js +64 -0
- package/packages/rex/dist/cli/commands/next.js.map +1 -0
- package/packages/rex/dist/cli/commands/prune.d.ts +1 -0
- package/packages/rex/dist/cli/commands/prune.js +561 -0
- package/packages/rex/dist/cli/commands/prune.js.map +1 -0
- package/packages/rex/dist/cli/commands/recommend.d.ts +2 -0
- package/packages/rex/dist/cli/commands/recommend.js +517 -0
- package/packages/rex/dist/cli/commands/recommend.js.map +1 -0
- package/packages/rex/dist/cli/commands/remove.d.ts +12 -0
- package/packages/rex/dist/cli/commands/remove.js +206 -0
- package/packages/rex/dist/cli/commands/remove.js.map +1 -0
- package/packages/rex/dist/cli/commands/reorganize.d.ts +16 -0
- package/packages/rex/dist/cli/commands/reorganize.js +288 -0
- package/packages/rex/dist/cli/commands/reorganize.js.map +1 -0
- package/packages/rex/dist/cli/commands/report.d.ts +49 -0
- package/packages/rex/dist/cli/commands/report.js +218 -0
- package/packages/rex/dist/cli/commands/report.js.map +1 -0
- package/packages/rex/dist/cli/commands/reshape.d.ts +1 -0
- package/packages/rex/dist/cli/commands/reshape.js +182 -0
- package/packages/rex/dist/cli/commands/reshape.js.map +1 -0
- package/packages/rex/dist/cli/commands/smart-add-duplicates.d.ts +45 -0
- package/packages/rex/dist/cli/commands/smart-add-duplicates.js +252 -0
- package/packages/rex/dist/cli/commands/smart-add-duplicates.js.map +1 -0
- package/packages/rex/dist/cli/commands/smart-add.d.ts +80 -0
- package/packages/rex/dist/cli/commands/smart-add.js +1343 -0
- package/packages/rex/dist/cli/commands/smart-add.js.map +1 -0
- package/packages/rex/dist/cli/commands/status-sections.d.ts +70 -0
- package/packages/rex/dist/cli/commands/status-sections.js +201 -0
- package/packages/rex/dist/cli/commands/status-sections.js.map +1 -0
- package/packages/rex/dist/cli/commands/status-shared.d.ts +44 -0
- package/packages/rex/dist/cli/commands/status-shared.js +191 -0
- package/packages/rex/dist/cli/commands/status-shared.js.map +1 -0
- package/packages/rex/dist/cli/commands/status.d.ts +3 -0
- package/packages/rex/dist/cli/commands/status.js +118 -0
- package/packages/rex/dist/cli/commands/status.js.map +1 -0
- package/packages/rex/dist/cli/commands/sync.d.ts +11 -0
- package/packages/rex/dist/cli/commands/sync.js +131 -0
- package/packages/rex/dist/cli/commands/sync.js.map +1 -0
- package/packages/rex/dist/cli/commands/token-format.d.ts +31 -0
- package/packages/rex/dist/cli/commands/token-format.js +86 -0
- package/packages/rex/dist/cli/commands/token-format.js.map +1 -0
- package/packages/rex/dist/cli/commands/update.d.ts +1 -0
- package/packages/rex/dist/cli/commands/update.js +146 -0
- package/packages/rex/dist/cli/commands/update.js.map +1 -0
- package/packages/rex/dist/cli/commands/usage.d.ts +1 -0
- package/packages/rex/dist/cli/commands/usage.js +192 -0
- package/packages/rex/dist/cli/commands/usage.js.map +1 -0
- package/packages/rex/dist/cli/commands/validate-interactive.d.ts +46 -0
- package/packages/rex/dist/cli/commands/validate-interactive.js +236 -0
- package/packages/rex/dist/cli/commands/validate-interactive.js.map +1 -0
- package/packages/rex/dist/cli/commands/validate.d.ts +10 -0
- package/packages/rex/dist/cli/commands/validate.js +212 -0
- package/packages/rex/dist/cli/commands/validate.js.map +1 -0
- package/packages/rex/dist/cli/commands/verify.d.ts +1 -0
- package/packages/rex/dist/cli/commands/verify.js +90 -0
- package/packages/rex/dist/cli/commands/verify.js.map +1 -0
- package/packages/rex/dist/cli/errors.d.ts +40 -0
- package/packages/rex/dist/cli/errors.js +125 -0
- package/packages/rex/dist/cli/errors.js.map +1 -0
- package/packages/rex/dist/cli/help.d.ts +23 -0
- package/packages/rex/dist/cli/help.js +584 -0
- package/packages/rex/dist/cli/help.js.map +1 -0
- package/packages/rex/dist/cli/index.d.ts +2 -0
- package/packages/rex/dist/cli/index.js +405 -0
- package/packages/rex/dist/cli/index.js.map +1 -0
- package/packages/rex/dist/cli/mcp-tools.d.ts +86 -0
- package/packages/rex/dist/cli/mcp-tools.js +555 -0
- package/packages/rex/dist/cli/mcp-tools.js.map +1 -0
- package/packages/rex/dist/cli/mcp.d.ts +26 -0
- package/packages/rex/dist/cli/mcp.js +144 -0
- package/packages/rex/dist/cli/mcp.js.map +1 -0
- package/packages/rex/dist/cli/output.d.ts +36 -0
- package/packages/rex/dist/cli/output.js +70 -0
- package/packages/rex/dist/cli/output.js.map +1 -0
- package/packages/rex/dist/cli/validate-input.d.ts +45 -0
- package/packages/rex/dist/cli/validate-input.js +87 -0
- package/packages/rex/dist/cli/validate-input.js.map +1 -0
- package/packages/rex/dist/core/analytics.d.ts +38 -0
- package/packages/rex/dist/core/analytics.js +87 -0
- package/packages/rex/dist/core/analytics.js.map +1 -0
- package/packages/rex/dist/core/canonical.d.ts +3 -0
- package/packages/rex/dist/core/canonical.js +21 -0
- package/packages/rex/dist/core/canonical.js.map +1 -0
- package/packages/rex/dist/core/cascade-reset.d.ts +31 -0
- package/packages/rex/dist/core/cascade-reset.js +47 -0
- package/packages/rex/dist/core/cascade-reset.js.map +1 -0
- package/packages/rex/dist/core/code-coverage.d.ts +38 -0
- package/packages/rex/dist/core/code-coverage.js +85 -0
- package/packages/rex/dist/core/code-coverage.js.map +1 -0
- package/packages/rex/dist/core/dag.d.ts +6 -0
- package/packages/rex/dist/core/dag.js +67 -0
- package/packages/rex/dist/core/dag.js.map +1 -0
- package/packages/rex/dist/core/delete.d.ts +10 -0
- package/packages/rex/dist/core/delete.js +38 -0
- package/packages/rex/dist/core/delete.js.map +1 -0
- package/packages/rex/dist/core/epic-correlation.d.ts +94 -0
- package/packages/rex/dist/core/epic-correlation.js +179 -0
- package/packages/rex/dist/core/epic-correlation.js.map +1 -0
- package/packages/rex/dist/core/facets.d.ts +54 -0
- package/packages/rex/dist/core/facets.js +176 -0
- package/packages/rex/dist/core/facets.js.map +1 -0
- package/packages/rex/dist/core/fix.d.ts +59 -0
- package/packages/rex/dist/core/fix.js +190 -0
- package/packages/rex/dist/core/fix.js.map +1 -0
- package/packages/rex/dist/core/health.d.ts +43 -0
- package/packages/rex/dist/core/health.js +331 -0
- package/packages/rex/dist/core/health.js.map +1 -0
- package/packages/rex/dist/core/keywords.d.ts +20 -0
- package/packages/rex/dist/core/keywords.js +47 -0
- package/packages/rex/dist/core/keywords.js.map +1 -0
- package/packages/rex/dist/core/merge.d.ts +87 -0
- package/packages/rex/dist/core/merge.js +289 -0
- package/packages/rex/dist/core/merge.js.map +1 -0
- package/packages/rex/dist/core/move.d.ts +48 -0
- package/packages/rex/dist/core/move.js +163 -0
- package/packages/rex/dist/core/move.js.map +1 -0
- package/packages/rex/dist/core/next-task.d.ts +121 -0
- package/packages/rex/dist/core/next-task.js +443 -0
- package/packages/rex/dist/core/next-task.js.map +1 -0
- package/packages/rex/dist/core/notion-map.d.ts +207 -0
- package/packages/rex/dist/core/notion-map.js +535 -0
- package/packages/rex/dist/core/notion-map.js.map +1 -0
- package/packages/rex/dist/core/override-escalation.d.ts +28 -0
- package/packages/rex/dist/core/override-escalation.js +69 -0
- package/packages/rex/dist/core/override-escalation.js.map +1 -0
- package/packages/rex/dist/core/parent-completion.d.ts +41 -0
- package/packages/rex/dist/core/parent-completion.js +75 -0
- package/packages/rex/dist/core/parent-completion.js.map +1 -0
- package/packages/rex/dist/core/parent-reset.d.ts +45 -0
- package/packages/rex/dist/core/parent-reset.js +59 -0
- package/packages/rex/dist/core/parent-reset.js.map +1 -0
- package/packages/rex/dist/core/pending-cache.d.ts +27 -0
- package/packages/rex/dist/core/pending-cache.js +55 -0
- package/packages/rex/dist/core/pending-cache.js.map +1 -0
- package/packages/rex/dist/core/prune.d.ts +50 -0
- package/packages/rex/dist/core/prune.js +89 -0
- package/packages/rex/dist/core/prune.js.map +1 -0
- package/packages/rex/dist/core/remove-epic.d.ts +35 -0
- package/packages/rex/dist/core/remove-epic.js +51 -0
- package/packages/rex/dist/core/remove-epic.js.map +1 -0
- package/packages/rex/dist/core/remove-feature.d.ts +100 -0
- package/packages/rex/dist/core/remove-feature.js +189 -0
- package/packages/rex/dist/core/remove-feature.js.map +1 -0
- package/packages/rex/dist/core/remove-task.d.ts +66 -0
- package/packages/rex/dist/core/remove-task.js +93 -0
- package/packages/rex/dist/core/remove-task.js.map +1 -0
- package/packages/rex/dist/core/reorganize-executor.d.ts +43 -0
- package/packages/rex/dist/core/reorganize-executor.js +153 -0
- package/packages/rex/dist/core/reorganize-executor.js.map +1 -0
- package/packages/rex/dist/core/reorganize.d.ts +109 -0
- package/packages/rex/dist/core/reorganize.js +453 -0
- package/packages/rex/dist/core/reorganize.js.map +1 -0
- package/packages/rex/dist/core/requirements.d.ts +131 -0
- package/packages/rex/dist/core/requirements.js +263 -0
- package/packages/rex/dist/core/requirements.js.map +1 -0
- package/packages/rex/dist/core/reshape.d.ts +88 -0
- package/packages/rex/dist/core/reshape.js +168 -0
- package/packages/rex/dist/core/reshape.js.map +1 -0
- package/packages/rex/dist/core/scope-creep.d.ts +31 -0
- package/packages/rex/dist/core/scope-creep.js +53 -0
- package/packages/rex/dist/core/scope-creep.js.map +1 -0
- package/packages/rex/dist/core/stats.d.ts +12 -0
- package/packages/rex/dist/core/stats.js +47 -0
- package/packages/rex/dist/core/stats.js.map +1 -0
- package/packages/rex/dist/core/structural.d.ts +63 -0
- package/packages/rex/dist/core/structural.js +267 -0
- package/packages/rex/dist/core/structural.js.map +1 -0
- package/packages/rex/dist/core/sync-engine.d.ts +63 -0
- package/packages/rex/dist/core/sync-engine.js +429 -0
- package/packages/rex/dist/core/sync-engine.js.map +1 -0
- package/packages/rex/dist/core/sync.d.ts +82 -0
- package/packages/rex/dist/core/sync.js +204 -0
- package/packages/rex/dist/core/sync.js.map +1 -0
- package/packages/rex/dist/core/timestamps.d.ts +34 -0
- package/packages/rex/dist/core/timestamps.js +50 -0
- package/packages/rex/dist/core/timestamps.js.map +1 -0
- package/packages/rex/dist/core/token-usage.d.ts +196 -0
- package/packages/rex/dist/core/token-usage.js +468 -0
- package/packages/rex/dist/core/token-usage.js.map +1 -0
- package/packages/rex/dist/core/transitions.d.ts +28 -0
- package/packages/rex/dist/core/transitions.js +74 -0
- package/packages/rex/dist/core/transitions.js.map +1 -0
- package/packages/rex/dist/core/tree.d.ts +12 -0
- package/packages/rex/dist/core/tree.js +76 -0
- package/packages/rex/dist/core/tree.js.map +1 -0
- package/packages/rex/dist/core/verify.d.ts +92 -0
- package/packages/rex/dist/core/verify.js +201 -0
- package/packages/rex/dist/core/verify.js.map +1 -0
- package/packages/rex/dist/public.d.ts +115 -0
- package/packages/rex/dist/public.js +114 -0
- package/packages/rex/dist/public.js.map +1 -0
- package/packages/rex/dist/recommend/conflict-detection.d.ts +102 -0
- package/packages/rex/dist/recommend/conflict-detection.js +238 -0
- package/packages/rex/dist/recommend/conflict-detection.js.map +1 -0
- package/packages/rex/dist/recommend/create-from-recommendations.d.ts +109 -0
- package/packages/rex/dist/recommend/create-from-recommendations.js +287 -0
- package/packages/rex/dist/recommend/create-from-recommendations.js.map +1 -0
- package/packages/rex/dist/recommend/types.d.ts +59 -0
- package/packages/rex/dist/recommend/types.js +11 -0
- package/packages/rex/dist/recommend/types.js.map +1 -0
- package/packages/rex/dist/schema/index.d.ts +23 -0
- package/packages/rex/dist/schema/index.js +22 -0
- package/packages/rex/dist/schema/index.js.map +1 -0
- package/packages/rex/dist/schema/levels.d.ts +82 -0
- package/packages/rex/dist/schema/levels.js +152 -0
- package/packages/rex/dist/schema/levels.js.map +1 -0
- package/packages/rex/dist/schema/v1.d.ts +341 -0
- package/packages/rex/dist/schema/v1.js +179 -0
- package/packages/rex/dist/schema/v1.js.map +1 -0
- package/packages/rex/dist/schema/validate.d.ts +194 -0
- package/packages/rex/dist/schema/validate.js +136 -0
- package/packages/rex/dist/schema/validate.js.map +1 -0
- package/packages/rex/dist/store/adapter-registry.d.ts +143 -0
- package/packages/rex/dist/store/adapter-registry.js +304 -0
- package/packages/rex/dist/store/adapter-registry.js.map +1 -0
- package/packages/rex/dist/store/atomic-write.d.ts +22 -0
- package/packages/rex/dist/store/atomic-write.js +30 -0
- package/packages/rex/dist/store/atomic-write.js.map +1 -0
- package/packages/rex/dist/store/contracts.d.ts +142 -0
- package/packages/rex/dist/store/contracts.js +19 -0
- package/packages/rex/dist/store/contracts.js.map +1 -0
- package/packages/rex/dist/store/file-adapter.d.ts +23 -0
- package/packages/rex/dist/store/file-adapter.js +150 -0
- package/packages/rex/dist/store/file-adapter.js.map +1 -0
- package/packages/rex/dist/store/index.d.ts +67 -0
- package/packages/rex/dist/store/index.js +78 -0
- package/packages/rex/dist/store/index.js.map +1 -0
- package/packages/rex/dist/store/integration-schema.d.ts +205 -0
- package/packages/rex/dist/store/integration-schema.js +136 -0
- package/packages/rex/dist/store/integration-schema.js.map +1 -0
- package/packages/rex/dist/store/integration-schemas/index.d.ts +28 -0
- package/packages/rex/dist/store/integration-schemas/index.js +45 -0
- package/packages/rex/dist/store/integration-schemas/index.js.map +1 -0
- package/packages/rex/dist/store/integration-schemas/jira.d.ts +11 -0
- package/packages/rex/dist/store/integration-schemas/jira.js +147 -0
- package/packages/rex/dist/store/integration-schemas/jira.js.map +1 -0
- package/packages/rex/dist/store/integration-schemas/notion.d.ts +11 -0
- package/packages/rex/dist/store/integration-schemas/notion.js +80 -0
- package/packages/rex/dist/store/integration-schemas/notion.js.map +1 -0
- package/packages/rex/dist/store/notion-adapter.d.ts +42 -0
- package/packages/rex/dist/store/notion-adapter.js +247 -0
- package/packages/rex/dist/store/notion-adapter.js.map +1 -0
- package/packages/rex/dist/store/notion-client.d.ts +56 -0
- package/packages/rex/dist/store/notion-client.js +82 -0
- package/packages/rex/dist/store/notion-client.js.map +1 -0
- package/packages/rex/dist/store/notion-map.d.ts +207 -0
- package/packages/rex/dist/store/notion-map.js +535 -0
- package/packages/rex/dist/store/notion-map.js.map +1 -0
- package/packages/rex/dist/store/project-config.d.ts +44 -0
- package/packages/rex/dist/store/project-config.js +56 -0
- package/packages/rex/dist/store/project-config.js.map +1 -0
- package/packages/rex/dist/store/types.d.ts +142 -0
- package/packages/rex/dist/store/types.js +19 -0
- package/packages/rex/dist/store/types.js.map +1 -0
- package/packages/rex/dist/workflow/default.d.ts +1 -0
- package/packages/rex/dist/workflow/default.js +21 -0
- package/packages/rex/dist/workflow/default.js.map +1 -0
- package/packages/rex/package.json +40 -0
- package/packages/sourcevision/dist/analyzers/__tests__/components.test.d.ts +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/components.test.js +370 -0
- package/packages/sourcevision/dist/analyzers/__tests__/components.test.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/imports.test.d.ts +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/imports.test.js +101 -0
- package/packages/sourcevision/dist/analyzers/__tests__/imports.test.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.d.ts +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.js +118 -0
- package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.d.ts +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.js +61 -0
- package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/zones.test.d.ts +1 -0
- package/packages/sourcevision/dist/analyzers/__tests__/zones.test.js +836 -0
- package/packages/sourcevision/dist/analyzers/__tests__/zones.test.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/archetypes.d.ts +18 -0
- package/packages/sourcevision/dist/analyzers/archetypes.js +272 -0
- package/packages/sourcevision/dist/analyzers/archetypes.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/branch-work-classifier.d.ts +67 -0
- package/packages/sourcevision/dist/analyzers/branch-work-classifier.js +202 -0
- package/packages/sourcevision/dist/analyzers/branch-work-classifier.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/branch-work-collector.d.ts +121 -0
- package/packages/sourcevision/dist/analyzers/branch-work-collector.js +301 -0
- package/packages/sourcevision/dist/analyzers/branch-work-collector.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/branch-work-filter.d.ts +112 -0
- package/packages/sourcevision/dist/analyzers/branch-work-filter.js +285 -0
- package/packages/sourcevision/dist/analyzers/branch-work-filter.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/branch-work-store.d.ts +65 -0
- package/packages/sourcevision/dist/analyzers/branch-work-store.js +127 -0
- package/packages/sourcevision/dist/analyzers/branch-work-store.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/callgraph-findings.d.ts +26 -0
- package/packages/sourcevision/dist/analyzers/callgraph-findings.js +581 -0
- package/packages/sourcevision/dist/analyzers/callgraph-findings.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/callgraph.d.ts +64 -0
- package/packages/sourcevision/dist/analyzers/callgraph.js +659 -0
- package/packages/sourcevision/dist/analyzers/callgraph.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/classify.d.ts +45 -0
- package/packages/sourcevision/dist/analyzers/classify.js +431 -0
- package/packages/sourcevision/dist/analyzers/classify.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/claude-cli.d.ts +29 -0
- package/packages/sourcevision/dist/analyzers/claude-cli.js +137 -0
- package/packages/sourcevision/dist/analyzers/claude-cli.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/claude-client.d.ts +47 -0
- package/packages/sourcevision/dist/analyzers/claude-client.js +112 -0
- package/packages/sourcevision/dist/analyzers/claude-client.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/completion-reader.d.ts +218 -0
- package/packages/sourcevision/dist/analyzers/completion-reader.js +355 -0
- package/packages/sourcevision/dist/analyzers/completion-reader.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/components.d.ts +18 -0
- package/packages/sourcevision/dist/analyzers/components.js +598 -0
- package/packages/sourcevision/dist/analyzers/components.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/context.d.ts +6 -0
- package/packages/sourcevision/dist/analyzers/context.js +175 -0
- package/packages/sourcevision/dist/analyzers/context.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/convergence.d.ts +74 -0
- package/packages/sourcevision/dist/analyzers/convergence.js +144 -0
- package/packages/sourcevision/dist/analyzers/convergence.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/enrich-batch.d.ts +47 -0
- package/packages/sourcevision/dist/analyzers/enrich-batch.js +340 -0
- package/packages/sourcevision/dist/analyzers/enrich-batch.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/enrich-config.d.ts +41 -0
- package/packages/sourcevision/dist/analyzers/enrich-config.js +215 -0
- package/packages/sourcevision/dist/analyzers/enrich-config.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/enrich-parsing.d.ts +58 -0
- package/packages/sourcevision/dist/analyzers/enrich-parsing.js +401 -0
- package/packages/sourcevision/dist/analyzers/enrich-parsing.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/enrich-per-zone.d.ts +27 -0
- package/packages/sourcevision/dist/analyzers/enrich-per-zone.js +287 -0
- package/packages/sourcevision/dist/analyzers/enrich-per-zone.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/enrich.d.ts +25 -0
- package/packages/sourcevision/dist/analyzers/enrich.js +255 -0
- package/packages/sourcevision/dist/analyzers/enrich.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/imports.d.ts +18 -0
- package/packages/sourcevision/dist/analyzers/imports.js +448 -0
- package/packages/sourcevision/dist/analyzers/imports.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/index.d.ts +12 -0
- package/packages/sourcevision/dist/analyzers/index.js +10 -0
- package/packages/sourcevision/dist/analyzers/index.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/inventory.d.ts +33 -0
- package/packages/sourcevision/dist/analyzers/inventory.js +594 -0
- package/packages/sourcevision/dist/analyzers/inventory.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/llms-txt.d.ts +6 -0
- package/packages/sourcevision/dist/analyzers/llms-txt.js +268 -0
- package/packages/sourcevision/dist/analyzers/llms-txt.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/louvain.d.ts +123 -0
- package/packages/sourcevision/dist/analyzers/louvain.js +669 -0
- package/packages/sourcevision/dist/analyzers/louvain.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/manifest.d.ts +8 -0
- package/packages/sourcevision/dist/analyzers/manifest.js +72 -0
- package/packages/sourcevision/dist/analyzers/manifest.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/move-recommendations.d.ts +41 -0
- package/packages/sourcevision/dist/analyzers/move-recommendations.js +193 -0
- package/packages/sourcevision/dist/analyzers/move-recommendations.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/next-steps.d.ts +10 -0
- package/packages/sourcevision/dist/analyzers/next-steps.js +228 -0
- package/packages/sourcevision/dist/analyzers/next-steps.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/risk-scoring.d.ts +120 -0
- package/packages/sourcevision/dist/analyzers/risk-scoring.js +266 -0
- package/packages/sourcevision/dist/analyzers/risk-scoring.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/route-detection.d.ts +29 -0
- package/packages/sourcevision/dist/analyzers/route-detection.js +316 -0
- package/packages/sourcevision/dist/analyzers/route-detection.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/server-route-detection.d.ts +35 -0
- package/packages/sourcevision/dist/analyzers/server-route-detection.js +210 -0
- package/packages/sourcevision/dist/analyzers/server-route-detection.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/token-usage.d.ts +11 -0
- package/packages/sourcevision/dist/analyzers/token-usage.js +41 -0
- package/packages/sourcevision/dist/analyzers/token-usage.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/workspace-aggregate.d.ts +80 -0
- package/packages/sourcevision/dist/analyzers/workspace-aggregate.js +386 -0
- package/packages/sourcevision/dist/analyzers/workspace-aggregate.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/workspace-crossings.d.ts +63 -0
- package/packages/sourcevision/dist/analyzers/workspace-crossings.js +239 -0
- package/packages/sourcevision/dist/analyzers/workspace-crossings.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/workspace.d.ts +65 -0
- package/packages/sourcevision/dist/analyzers/workspace.js +243 -0
- package/packages/sourcevision/dist/analyzers/workspace.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/zone-hash.d.ts +15 -0
- package/packages/sourcevision/dist/analyzers/zone-hash.js +23 -0
- package/packages/sourcevision/dist/analyzers/zone-hash.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/zone-output.d.ts +20 -0
- package/packages/sourcevision/dist/analyzers/zone-output.js +252 -0
- package/packages/sourcevision/dist/analyzers/zone-output.js.map +1 -0
- package/packages/sourcevision/dist/analyzers/zones.d.ts +224 -0
- package/packages/sourcevision/dist/analyzers/zones.js +1538 -0
- package/packages/sourcevision/dist/analyzers/zones.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/analyze-phases.d.ts +48 -0
- package/packages/sourcevision/dist/cli/commands/analyze-phases.js +496 -0
- package/packages/sourcevision/dist/cli/commands/analyze-phases.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/analyze.d.ts +13 -0
- package/packages/sourcevision/dist/cli/commands/analyze.js +332 -0
- package/packages/sourcevision/dist/cli/commands/analyze.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/constants.d.ts +2 -0
- package/packages/sourcevision/dist/cli/commands/constants.js +34 -0
- package/packages/sourcevision/dist/cli/commands/constants.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/export-pdf.d.ts +19 -0
- package/packages/sourcevision/dist/cli/commands/export-pdf.js +73 -0
- package/packages/sourcevision/dist/cli/commands/export-pdf.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/git-credential-helper.d.ts +2 -0
- package/packages/sourcevision/dist/cli/commands/git-credential-helper.js +59 -0
- package/packages/sourcevision/dist/cli/commands/git-credential-helper.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/init.d.ts +2 -0
- package/packages/sourcevision/dist/cli/commands/init.js +55 -0
- package/packages/sourcevision/dist/cli/commands/init.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/pr-markdown.d.ts +72 -0
- package/packages/sourcevision/dist/cli/commands/pr-markdown.js +121 -0
- package/packages/sourcevision/dist/cli/commands/pr-markdown.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.d.ts +45 -0
- package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.js +220 -0
- package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/reset.d.ts +1 -0
- package/packages/sourcevision/dist/cli/commands/reset.js +54 -0
- package/packages/sourcevision/dist/cli/commands/reset.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/validate.d.ts +1 -0
- package/packages/sourcevision/dist/cli/commands/validate.js +53 -0
- package/packages/sourcevision/dist/cli/commands/validate.js.map +1 -0
- package/packages/sourcevision/dist/cli/commands/workspace.d.ts +19 -0
- package/packages/sourcevision/dist/cli/commands/workspace.js +139 -0
- package/packages/sourcevision/dist/cli/commands/workspace.js.map +1 -0
- package/packages/sourcevision/dist/cli/errors.d.ts +31 -0
- package/packages/sourcevision/dist/cli/errors.js +100 -0
- package/packages/sourcevision/dist/cli/errors.js.map +1 -0
- package/packages/sourcevision/dist/cli/help.d.ts +23 -0
- package/packages/sourcevision/dist/cli/help.js +241 -0
- package/packages/sourcevision/dist/cli/help.js.map +1 -0
- package/packages/sourcevision/dist/cli/index.d.ts +15 -0
- package/packages/sourcevision/dist/cli/index.js +127 -0
- package/packages/sourcevision/dist/cli/index.js.map +1 -0
- package/packages/sourcevision/dist/cli/mcp.d.ts +13 -0
- package/packages/sourcevision/dist/cli/mcp.js +433 -0
- package/packages/sourcevision/dist/cli/mcp.js.map +1 -0
- package/packages/sourcevision/dist/cli/output.d.ts +19 -0
- package/packages/sourcevision/dist/cli/output.js +48 -0
- package/packages/sourcevision/dist/cli/output.js.map +1 -0
- package/packages/sourcevision/dist/cli/serve.d.ts +11 -0
- package/packages/sourcevision/dist/cli/serve.js +41 -0
- package/packages/sourcevision/dist/cli/serve.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/index.d.ts +19 -0
- package/packages/sourcevision/dist/cli/server/index.js +17 -0
- package/packages/sourcevision/dist/cli/server/index.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-data.d.ts +14 -0
- package/packages/sourcevision/dist/cli/server/routes-data.js +122 -0
- package/packages/sourcevision/dist/cli/server/routes-data.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-hench.d.ts +12 -0
- package/packages/sourcevision/dist/cli/server/routes-hench.js +100 -0
- package/packages/sourcevision/dist/cli/server/routes-hench.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-rex.d.ts +23 -0
- package/packages/sourcevision/dist/cli/server/routes-rex.js +817 -0
- package/packages/sourcevision/dist/cli/server/routes-rex.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-sourcevision.d.ts +17 -0
- package/packages/sourcevision/dist/cli/server/routes-sourcevision.js +145 -0
- package/packages/sourcevision/dist/cli/server/routes-sourcevision.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-static.d.ts +17 -0
- package/packages/sourcevision/dist/cli/server/routes-static.js +88 -0
- package/packages/sourcevision/dist/cli/server/routes-static.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-token-usage.d.ts +18 -0
- package/packages/sourcevision/dist/cli/server/routes-token-usage.js +349 -0
- package/packages/sourcevision/dist/cli/server/routes-token-usage.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/routes-validation.d.ts +10 -0
- package/packages/sourcevision/dist/cli/server/routes-validation.js +395 -0
- package/packages/sourcevision/dist/cli/server/routes-validation.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/start.d.ts +7 -0
- package/packages/sourcevision/dist/cli/server/start.js +166 -0
- package/packages/sourcevision/dist/cli/server/start.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/types.d.ts +23 -0
- package/packages/sourcevision/dist/cli/server/types.js +26 -0
- package/packages/sourcevision/dist/cli/server/types.js.map +1 -0
- package/packages/sourcevision/dist/cli/server/websocket.d.ts +31 -0
- package/packages/sourcevision/dist/cli/server/websocket.js +247 -0
- package/packages/sourcevision/dist/cli/server/websocket.js.map +1 -0
- package/packages/sourcevision/dist/constants.d.ts +4 -0
- package/packages/sourcevision/dist/constants.js +6 -0
- package/packages/sourcevision/dist/constants.js.map +1 -0
- package/packages/sourcevision/dist/export/pdf-report.d.ts +27 -0
- package/packages/sourcevision/dist/export/pdf-report.js +447 -0
- package/packages/sourcevision/dist/export/pdf-report.js.map +1 -0
- package/packages/sourcevision/dist/generators/pr-markdown-template.d.ts +56 -0
- package/packages/sourcevision/dist/generators/pr-markdown-template.js +264 -0
- package/packages/sourcevision/dist/generators/pr-markdown-template.js.map +1 -0
- package/packages/sourcevision/dist/public.d.ts +41 -0
- package/packages/sourcevision/dist/public.js +43 -0
- package/packages/sourcevision/dist/public.js.map +1 -0
- package/packages/sourcevision/dist/schema/data-files.d.ts +11 -0
- package/packages/sourcevision/dist/schema/data-files.js +12 -0
- package/packages/sourcevision/dist/schema/data-files.js.map +1 -0
- package/packages/sourcevision/dist/schema/index.d.ts +3 -0
- package/packages/sourcevision/dist/schema/index.js +3 -0
- package/packages/sourcevision/dist/schema/index.js.map +1 -0
- package/packages/sourcevision/dist/schema/v1.d.ts +550 -0
- package/packages/sourcevision/dist/schema/v1.js +3 -0
- package/packages/sourcevision/dist/schema/v1.js.map +1 -0
- package/packages/sourcevision/dist/schema/validate.d.ts +1243 -0
- package/packages/sourcevision/dist/schema/validate.js +411 -0
- package/packages/sourcevision/dist/schema/validate.js.map +1 -0
- package/packages/sourcevision/dist/util/__tests__/merge.test.d.ts +1 -0
- package/packages/sourcevision/dist/util/__tests__/merge.test.js +122 -0
- package/packages/sourcevision/dist/util/__tests__/merge.test.js.map +1 -0
- package/packages/sourcevision/dist/util/__tests__/sort.test.d.ts +1 -0
- package/packages/sourcevision/dist/util/__tests__/sort.test.js +151 -0
- package/packages/sourcevision/dist/util/__tests__/sort.test.js.map +1 -0
- package/packages/sourcevision/dist/util/merge.d.ts +18 -0
- package/packages/sourcevision/dist/util/merge.js +152 -0
- package/packages/sourcevision/dist/util/merge.js.map +1 -0
- package/packages/sourcevision/dist/util/paths.d.ts +2 -0
- package/packages/sourcevision/dist/util/paths.js +5 -0
- package/packages/sourcevision/dist/util/paths.js.map +1 -0
- package/packages/sourcevision/dist/util/project-config.d.ts +29 -0
- package/packages/sourcevision/dist/util/project-config.js +49 -0
- package/packages/sourcevision/dist/util/project-config.js.map +1 -0
- package/packages/sourcevision/dist/util/sort.d.ts +31 -0
- package/packages/sourcevision/dist/util/sort.js +149 -0
- package/packages/sourcevision/dist/util/sort.js.map +1 -0
- package/packages/sourcevision/dist/viewer/Hench-F.png +0 -0
- package/packages/sourcevision/dist/viewer/Rex-F.png +0 -0
- package/packages/sourcevision/dist/viewer/SourceVision-F.png +0 -0
- package/packages/sourcevision/dist/viewer/SourceVision.png +0 -0
- package/packages/sourcevision/dist/viewer/components/collapsible-section.d.ts +12 -0
- package/packages/sourcevision/dist/viewer/components/collapsible-section.js +40 -0
- package/packages/sourcevision/dist/viewer/components/collapsible-section.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/constants.d.ts +6 -0
- package/packages/sourcevision/dist/viewer/components/constants.js +16 -0
- package/packages/sourcevision/dist/viewer/components/constants.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.d.ts +12 -0
- package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.js +40 -0
- package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/findings-list.d.ts +13 -0
- package/packages/sourcevision/dist/viewer/components/data-display/findings-list.js +136 -0
- package/packages/sourcevision/dist/viewer/components/data-display/findings-list.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.d.ts +47 -0
- package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.js +70 -0
- package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
- package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.js +124 -0
- package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/tree-view.d.ts +18 -0
- package/packages/sourcevision/dist/viewer/components/data-display/tree-view.js +107 -0
- package/packages/sourcevision/dist/viewer/components/data-display/tree-view.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/data-display/zone-map.d.ts +28 -0
- package/packages/sourcevision/dist/viewer/components/data-display/zone-map.js +195 -0
- package/packages/sourcevision/dist/viewer/components/data-display/zone-map.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/detail-panel.d.ts +12 -0
- package/packages/sourcevision/dist/viewer/components/detail-panel.js +166 -0
- package/packages/sourcevision/dist/viewer/components/detail-panel.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/faq.d.ts +1 -0
- package/packages/sourcevision/dist/viewer/components/faq.js +162 -0
- package/packages/sourcevision/dist/viewer/components/faq.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/findings-list.d.ts +13 -0
- package/packages/sourcevision/dist/viewer/components/findings-list.js +136 -0
- package/packages/sourcevision/dist/viewer/components/findings-list.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/guide.d.ts +5 -0
- package/packages/sourcevision/dist/viewer/components/guide.js +77 -0
- package/packages/sourcevision/dist/viewer/components/guide.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/health-gauge.d.ts +47 -0
- package/packages/sourcevision/dist/viewer/components/health-gauge.js +70 -0
- package/packages/sourcevision/dist/viewer/components/health-gauge.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/logos.d.ts +103 -0
- package/packages/sourcevision/dist/viewer/components/logos.js +148 -0
- package/packages/sourcevision/dist/viewer/components/logos.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/mini-charts.d.ts +36 -0
- package/packages/sourcevision/dist/viewer/components/mini-charts.js +124 -0
- package/packages/sourcevision/dist/viewer/components/mini-charts.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.js +209 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.js +225 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.d.ts +17 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.js +80 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/compute.d.ts +28 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/compute.js +116 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/compute.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/index.d.ts +14 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/index.js +8 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/index.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.d.ts +21 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.js +293 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.js +129 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.d.ts +18 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.js +221 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/types.d.ts +45 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/types.js +15 -0
- package/packages/sourcevision/dist/viewer/components/prd-tree/types.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/rex-task-link.d.ts +48 -0
- package/packages/sourcevision/dist/viewer/components/rex-task-link.js +191 -0
- package/packages/sourcevision/dist/viewer/components/rex-task-link.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/search-filter.d.ts +20 -0
- package/packages/sourcevision/dist/viewer/components/search-filter.js +28 -0
- package/packages/sourcevision/dist/viewer/components/search-filter.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/sidebar.d.ts +16 -0
- package/packages/sourcevision/dist/viewer/components/sidebar.js +296 -0
- package/packages/sourcevision/dist/viewer/components/sidebar.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/theme-toggle.d.ts +14 -0
- package/packages/sourcevision/dist/viewer/components/theme-toggle.js +37 -0
- package/packages/sourcevision/dist/viewer/components/theme-toggle.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/tree-view.d.ts +18 -0
- package/packages/sourcevision/dist/viewer/components/tree-view.js +107 -0
- package/packages/sourcevision/dist/viewer/components/tree-view.js.map +1 -0
- package/packages/sourcevision/dist/viewer/components/zone-map.d.ts +28 -0
- package/packages/sourcevision/dist/viewer/components/zone-map.js +195 -0
- package/packages/sourcevision/dist/viewer/components/zone-map.js.map +1 -0
- package/packages/sourcevision/dist/viewer/graph/physics.d.ts +70 -0
- package/packages/sourcevision/dist/viewer/graph/physics.js +260 -0
- package/packages/sourcevision/dist/viewer/graph/physics.js.map +1 -0
- package/packages/sourcevision/dist/viewer/graph/renderer.d.ts +69 -0
- package/packages/sourcevision/dist/viewer/graph/renderer.js +423 -0
- package/packages/sourcevision/dist/viewer/graph/renderer.js.map +1 -0
- package/packages/sourcevision/dist/viewer/index.html +27 -0
- package/packages/sourcevision/dist/viewer/loader.d.ts +20 -0
- package/packages/sourcevision/dist/viewer/loader.js +142 -0
- package/packages/sourcevision/dist/viewer/loader.js.map +1 -0
- package/packages/sourcevision/dist/viewer/main.d.ts +1 -0
- package/packages/sourcevision/dist/viewer/main.js +234 -0
- package/packages/sourcevision/dist/viewer/main.js.map +1 -0
- package/packages/sourcevision/dist/viewer/n-dx.png +0 -0
- package/packages/sourcevision/dist/viewer/schema-compat.d.ts +17 -0
- package/packages/sourcevision/dist/viewer/schema-compat.js +47 -0
- package/packages/sourcevision/dist/viewer/schema-compat.js.map +1 -0
- package/packages/sourcevision/dist/viewer/styles.css +2052 -0
- package/packages/sourcevision/dist/viewer/types.d.ts +63 -0
- package/packages/sourcevision/dist/viewer/types.js +2 -0
- package/packages/sourcevision/dist/viewer/types.js.map +1 -0
- package/packages/sourcevision/dist/viewer/utils.d.ts +23 -0
- package/packages/sourcevision/dist/viewer/utils.js +49 -0
- package/packages/sourcevision/dist/viewer/utils.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/analysis.d.ts +10 -0
- package/packages/sourcevision/dist/viewer/views/analysis.js +87 -0
- package/packages/sourcevision/dist/viewer/views/analysis.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/architecture.d.ts +10 -0
- package/packages/sourcevision/dist/viewer/views/architecture.js +75 -0
- package/packages/sourcevision/dist/viewer/views/architecture.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/files.d.ts +13 -0
- package/packages/sourcevision/dist/viewer/views/files.js +162 -0
- package/packages/sourcevision/dist/viewer/views/files.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/graph.d.ts +11 -0
- package/packages/sourcevision/dist/viewer/views/graph.js +130 -0
- package/packages/sourcevision/dist/viewer/views/graph.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/hench-runs.d.ts +17 -0
- package/packages/sourcevision/dist/viewer/views/hench-runs.js +336 -0
- package/packages/sourcevision/dist/viewer/views/hench-runs.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/overview.d.ts +10 -0
- package/packages/sourcevision/dist/viewer/views/overview.js +230 -0
- package/packages/sourcevision/dist/viewer/views/overview.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/prd.d.ts +21 -0
- package/packages/sourcevision/dist/viewer/views/prd.js +201 -0
- package/packages/sourcevision/dist/viewer/views/prd.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/problems.d.ts +8 -0
- package/packages/sourcevision/dist/viewer/views/problems.js +51 -0
- package/packages/sourcevision/dist/viewer/views/problems.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/rex-dashboard.d.ts +14 -0
- package/packages/sourcevision/dist/viewer/views/rex-dashboard.js +229 -0
- package/packages/sourcevision/dist/viewer/views/rex-dashboard.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/routes.d.ts +8 -0
- package/packages/sourcevision/dist/viewer/views/routes.js +218 -0
- package/packages/sourcevision/dist/viewer/views/routes.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/suggestions.d.ts +8 -0
- package/packages/sourcevision/dist/viewer/views/suggestions.js +36 -0
- package/packages/sourcevision/dist/viewer/views/suggestions.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/token-usage.d.ts +10 -0
- package/packages/sourcevision/dist/viewer/views/token-usage.js +384 -0
- package/packages/sourcevision/dist/viewer/views/token-usage.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/validation.d.ts +8 -0
- package/packages/sourcevision/dist/viewer/views/validation.js +470 -0
- package/packages/sourcevision/dist/viewer/views/validation.js.map +1 -0
- package/packages/sourcevision/dist/viewer/views/zones.d.ts +11 -0
- package/packages/sourcevision/dist/viewer/views/zones.js +146 -0
- package/packages/sourcevision/dist/viewer/views/zones.js.map +1 -0
- package/packages/sourcevision/package.json +43 -0
- package/packages/web/build.js +243 -0
- package/packages/web/dist/cli/index.d.ts +8 -0
- package/packages/web/dist/cli/index.js +50 -0
- package/packages/web/dist/cli/index.js.map +1 -0
- package/packages/web/dist/landing/color-inversion.d.ts +7 -0
- package/packages/web/dist/landing/color-inversion.js +24 -0
- package/packages/web/dist/landing/color-inversion.js.map +1 -0
- package/packages/web/dist/landing/index.html +325 -0
- package/packages/web/dist/landing/landing.d.ts +38 -0
- package/packages/web/dist/landing/landing.js +299 -0
- package/packages/web/dist/landing/landing.js.map +1 -0
- package/packages/web/dist/public.d.ts +55 -0
- package/packages/web/dist/public.js +51 -0
- package/packages/web/dist/public.js.map +1 -0
- package/packages/web/dist/schema/data-files.d.ts +10 -0
- package/packages/web/dist/schema/data-files.js +11 -0
- package/packages/web/dist/schema/data-files.js.map +1 -0
- package/packages/web/dist/schema/features.d.ts +28 -0
- package/packages/web/dist/schema/features.js +9 -0
- package/packages/web/dist/schema/features.js.map +1 -0
- package/packages/web/dist/schema/v1.d.ts +317 -0
- package/packages/web/dist/schema/v1.js +3 -0
- package/packages/web/dist/schema/v1.js.map +1 -0
- package/packages/web/dist/schema/validate.d.ts +15 -0
- package/packages/web/dist/schema/validate.js +260 -0
- package/packages/web/dist/schema/validate.js.map +1 -0
- package/packages/web/dist/server/aggregation-cache.d.ts +105 -0
- package/packages/web/dist/server/aggregation-cache.js +163 -0
- package/packages/web/dist/server/aggregation-cache.js.map +1 -0
- package/packages/web/dist/server/concurrent-execution-metrics.d.ts +103 -0
- package/packages/web/dist/server/concurrent-execution-metrics.js +253 -0
- package/packages/web/dist/server/concurrent-execution-metrics.js.map +1 -0
- package/packages/web/dist/server/domain-gateway.d.ts +18 -0
- package/packages/web/dist/server/domain-gateway.js +19 -0
- package/packages/web/dist/server/domain-gateway.js.map +1 -0
- package/packages/web/dist/server/incremental-task-usage.d.ts +92 -0
- package/packages/web/dist/server/incremental-task-usage.js +251 -0
- package/packages/web/dist/server/incremental-task-usage.js.map +1 -0
- package/packages/web/dist/server/index.d.ts +39 -0
- package/packages/web/dist/server/index.js +36 -0
- package/packages/web/dist/server/index.js.map +1 -0
- package/packages/web/dist/server/mcp-deps.d.ts +6 -0
- package/packages/web/dist/server/mcp-deps.js +7 -0
- package/packages/web/dist/server/mcp-deps.js.map +1 -0
- package/packages/web/dist/server/port.d.ts +96 -0
- package/packages/web/dist/server/port.js +134 -0
- package/packages/web/dist/server/port.js.map +1 -0
- package/packages/web/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
- package/packages/web/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
- package/packages/web/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
- package/packages/web/dist/server/prd-io.d.ts +40 -0
- package/packages/web/dist/server/prd-io.js +66 -0
- package/packages/web/dist/server/prd-io.js.map +1 -0
- package/packages/web/dist/server/process-memory-tracker.d.ts +79 -0
- package/packages/web/dist/server/process-memory-tracker.js +194 -0
- package/packages/web/dist/server/process-memory-tracker.js.map +1 -0
- package/packages/web/dist/server/register-scheduler.d.ts +53 -0
- package/packages/web/dist/server/register-scheduler.js +36 -0
- package/packages/web/dist/server/register-scheduler.js.map +1 -0
- package/packages/web/dist/server/rex-domain.d.ts +55 -0
- package/packages/web/dist/server/rex-domain.js +84 -0
- package/packages/web/dist/server/rex-domain.js.map +1 -0
- package/packages/web/dist/server/rex-gateway.d.ts +39 -0
- package/packages/web/dist/server/rex-gateway.js +47 -0
- package/packages/web/dist/server/rex-gateway.js.map +1 -0
- package/packages/web/dist/server/routes-adaptive.d.ts +21 -0
- package/packages/web/dist/server/routes-adaptive.js +659 -0
- package/packages/web/dist/server/routes-adaptive.js.map +1 -0
- package/packages/web/dist/server/routes-config.d.ts +47 -0
- package/packages/web/dist/server/routes-config.js +222 -0
- package/packages/web/dist/server/routes-config.js.map +1 -0
- package/packages/web/dist/server/routes-data.d.ts +14 -0
- package/packages/web/dist/server/routes-data.js +129 -0
- package/packages/web/dist/server/routes-data.js.map +1 -0
- package/packages/web/dist/server/routes-features.d.ts +14 -0
- package/packages/web/dist/server/routes-features.js +245 -0
- package/packages/web/dist/server/routes-features.js.map +1 -0
- package/packages/web/dist/server/routes-hench.d.ts +116 -0
- package/packages/web/dist/server/routes-hench.js +2016 -0
- package/packages/web/dist/server/routes-hench.js.map +1 -0
- package/packages/web/dist/server/routes-integrations.d.ts +23 -0
- package/packages/web/dist/server/routes-integrations.js +277 -0
- package/packages/web/dist/server/routes-integrations.js.map +1 -0
- package/packages/web/dist/server/routes-mcp.d.ts +31 -0
- package/packages/web/dist/server/routes-mcp.js +175 -0
- package/packages/web/dist/server/routes-mcp.js.map +1 -0
- package/packages/web/dist/server/routes-notion.d.ts +23 -0
- package/packages/web/dist/server/routes-notion.js +723 -0
- package/packages/web/dist/server/routes-notion.js.map +1 -0
- package/packages/web/dist/server/routes-project.d.ts +47 -0
- package/packages/web/dist/server/routes-project.js +128 -0
- package/packages/web/dist/server/routes-project.js.map +1 -0
- package/packages/web/dist/server/routes-rex/analysis.d.ts +11 -0
- package/packages/web/dist/server/routes-rex/analysis.js +583 -0
- package/packages/web/dist/server/routes-rex/analysis.js.map +1 -0
- package/packages/web/dist/server/routes-rex/execution.d.ts +37 -0
- package/packages/web/dist/server/routes-rex/execution.js +355 -0
- package/packages/web/dist/server/routes-rex/execution.js.map +1 -0
- package/packages/web/dist/server/routes-rex/health.d.ts +8 -0
- package/packages/web/dist/server/routes-rex/health.js +136 -0
- package/packages/web/dist/server/routes-rex/health.js.map +1 -0
- package/packages/web/dist/server/routes-rex/index.d.ts +35 -0
- package/packages/web/dist/server/routes-rex/index.js +72 -0
- package/packages/web/dist/server/routes-rex/index.js.map +1 -0
- package/packages/web/dist/server/routes-rex/items.d.ts +8 -0
- package/packages/web/dist/server/routes-rex/items.js +359 -0
- package/packages/web/dist/server/routes-rex/items.js.map +1 -0
- package/packages/web/dist/server/routes-rex/prune.d.ts +11 -0
- package/packages/web/dist/server/routes-rex/prune.js +379 -0
- package/packages/web/dist/server/routes-rex/prune.js.map +1 -0
- package/packages/web/dist/server/routes-rex/reads.d.ts +9 -0
- package/packages/web/dist/server/routes-rex/reads.js +119 -0
- package/packages/web/dist/server/routes-rex/reads.js.map +1 -0
- package/packages/web/dist/server/routes-rex/requirements.d.ts +10 -0
- package/packages/web/dist/server/routes-rex/requirements.js +408 -0
- package/packages/web/dist/server/routes-rex/requirements.js.map +1 -0
- package/packages/web/dist/server/routes-rex/shared.d.ts +37 -0
- package/packages/web/dist/server/routes-rex/shared.js +73 -0
- package/packages/web/dist/server/routes-rex/shared.js.map +1 -0
- package/packages/web/dist/server/routes-rex.d.ts +77 -0
- package/packages/web/dist/server/routes-rex.js +2403 -0
- package/packages/web/dist/server/routes-rex.js.map +1 -0
- package/packages/web/dist/server/routes-search.d.ts +26 -0
- package/packages/web/dist/server/routes-search.js +82 -0
- package/packages/web/dist/server/routes-search.js.map +1 -0
- package/packages/web/dist/server/routes-sourcevision.d.ts +18 -0
- package/packages/web/dist/server/routes-sourcevision.js +444 -0
- package/packages/web/dist/server/routes-sourcevision.js.map +1 -0
- package/packages/web/dist/server/routes-static.d.ts +20 -0
- package/packages/web/dist/server/routes-static.js +168 -0
- package/packages/web/dist/server/routes-static.js.map +1 -0
- package/packages/web/dist/server/routes-status.d.ts +58 -0
- package/packages/web/dist/server/routes-status.js +191 -0
- package/packages/web/dist/server/routes-status.js.map +1 -0
- package/packages/web/dist/server/routes-token-usage.d.ts +63 -0
- package/packages/web/dist/server/routes-token-usage.js +720 -0
- package/packages/web/dist/server/routes-token-usage.js.map +1 -0
- package/packages/web/dist/server/routes-validation.d.ts +10 -0
- package/packages/web/dist/server/routes-validation.js +365 -0
- package/packages/web/dist/server/routes-validation.js.map +1 -0
- package/packages/web/dist/server/routes-workflow.d.ts +15 -0
- package/packages/web/dist/server/routes-workflow.js +498 -0
- package/packages/web/dist/server/routes-workflow.js.map +1 -0
- package/packages/web/dist/server/search-index.d.ts +111 -0
- package/packages/web/dist/server/search-index.js +348 -0
- package/packages/web/dist/server/search-index.js.map +1 -0
- package/packages/web/dist/server/shared-types.d.ts +65 -0
- package/packages/web/dist/server/shared-types.js +31 -0
- package/packages/web/dist/server/shared-types.js.map +1 -0
- package/packages/web/dist/server/start.d.ts +68 -0
- package/packages/web/dist/server/start.js +568 -0
- package/packages/web/dist/server/start.js.map +1 -0
- package/packages/web/dist/server/task-usage.d.ts +17 -0
- package/packages/web/dist/server/task-usage.js +20 -0
- package/packages/web/dist/server/task-usage.js.map +1 -0
- package/packages/web/dist/server/types.d.ts +27 -0
- package/packages/web/dist/server/types.js +26 -0
- package/packages/web/dist/server/types.js.map +1 -0
- package/packages/web/dist/server/usage-cleanup-scheduler.d.ts +107 -0
- package/packages/web/dist/server/usage-cleanup-scheduler.js +232 -0
- package/packages/web/dist/server/usage-cleanup-scheduler.js.map +1 -0
- package/packages/web/dist/server/websocket.d.ts +131 -0
- package/packages/web/dist/server/websocket.js +512 -0
- package/packages/web/dist/server/websocket.js.map +1 -0
- package/packages/web/dist/server/ws-health-tracker.d.ts +86 -0
- package/packages/web/dist/server/ws-health-tracker.js +186 -0
- package/packages/web/dist/server/ws-health-tracker.js.map +1 -0
- package/packages/web/dist/shared/data-files.d.ts +17 -0
- package/packages/web/dist/shared/data-files.js +18 -0
- package/packages/web/dist/shared/data-files.js.map +1 -0
- package/packages/web/dist/shared/index.d.ts +9 -0
- package/packages/web/dist/shared/index.js +9 -0
- package/packages/web/dist/shared/index.js.map +1 -0
- package/packages/web/dist/shared/node-culler.d.ts +94 -0
- package/packages/web/dist/shared/node-culler.js +133 -0
- package/packages/web/dist/shared/node-culler.js.map +1 -0
- package/packages/web/dist/shared/request-dedup.d.ts +43 -0
- package/packages/web/dist/shared/request-dedup.js +55 -0
- package/packages/web/dist/shared/request-dedup.js.map +1 -0
- package/packages/web/dist/shared/view-id.d.ts +8 -0
- package/packages/web/dist/shared/view-id.js +9 -0
- package/packages/web/dist/shared/view-id.js.map +1 -0
- package/packages/web/dist/viewer/Hench-F.png +0 -0
- package/packages/web/dist/viewer/Rex-F.png +0 -0
- package/packages/web/dist/viewer/SourceVision-F.png +0 -0
- package/packages/web/dist/viewer/SourceVision.png +0 -0
- package/packages/web/dist/viewer/api.d.ts +19 -0
- package/packages/web/dist/viewer/api.js +17 -0
- package/packages/web/dist/viewer/api.js.map +1 -0
- package/packages/web/dist/viewer/batched-tick-dispatcher.d.ts +83 -0
- package/packages/web/dist/viewer/batched-tick-dispatcher.js +183 -0
- package/packages/web/dist/viewer/batched-tick-dispatcher.js.map +1 -0
- package/packages/web/dist/viewer/bootstrap.d.ts +13 -0
- package/packages/web/dist/viewer/bootstrap.js +40 -0
- package/packages/web/dist/viewer/bootstrap.js.map +1 -0
- package/packages/web/dist/viewer/call-rate-limiter.d.ts +50 -0
- package/packages/web/dist/viewer/call-rate-limiter.js +103 -0
- package/packages/web/dist/viewer/call-rate-limiter.js.map +1 -0
- package/packages/web/dist/viewer/components/active-tasks-panel.d.ts +36 -0
- package/packages/web/dist/viewer/components/active-tasks-panel.js +183 -0
- package/packages/web/dist/viewer/components/active-tasks-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/breadcrumb.d.ts +21 -0
- package/packages/web/dist/viewer/components/breadcrumb.js +117 -0
- package/packages/web/dist/viewer/components/breadcrumb.js.map +1 -0
- package/packages/web/dist/viewer/components/concurrency-panel.d.ts +18 -0
- package/packages/web/dist/viewer/components/concurrency-panel.js +175 -0
- package/packages/web/dist/viewer/components/concurrency-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/config-footer.d.ts +11 -0
- package/packages/web/dist/viewer/components/config-footer.js +132 -0
- package/packages/web/dist/viewer/components/config-footer.js.map +1 -0
- package/packages/web/dist/viewer/components/constants.d.ts +10 -0
- package/packages/web/dist/viewer/components/constants.js +11 -0
- package/packages/web/dist/viewer/components/constants.js.map +1 -0
- package/packages/web/dist/viewer/components/copy-link-button.d.ts +30 -0
- package/packages/web/dist/viewer/components/copy-link-button.js +74 -0
- package/packages/web/dist/viewer/components/copy-link-button.js.map +1 -0
- package/packages/web/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
- package/packages/web/dist/viewer/components/crash-recovery-banner.js +47 -0
- package/packages/web/dist/viewer/components/crash-recovery-banner.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
- package/packages/web/dist/viewer/components/data-display/collapsible-section.js +66 -0
- package/packages/web/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/findings-list.d.ts +13 -0
- package/packages/web/dist/viewer/components/data-display/findings-list.js +136 -0
- package/packages/web/dist/viewer/components/data-display/findings-list.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
- package/packages/web/dist/viewer/components/data-display/health-gauge.js +62 -0
- package/packages/web/dist/viewer/components/data-display/health-gauge.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
- package/packages/web/dist/viewer/components/data-display/mini-charts.js +124 -0
- package/packages/web/dist/viewer/components/data-display/mini-charts.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/tree-view.d.ts +18 -0
- package/packages/web/dist/viewer/components/data-display/tree-view.js +107 -0
- package/packages/web/dist/viewer/components/data-display/tree-view.js.map +1 -0
- package/packages/web/dist/viewer/components/data-display/zone-map.d.ts +28 -0
- package/packages/web/dist/viewer/components/data-display/zone-map.js +197 -0
- package/packages/web/dist/viewer/components/data-display/zone-map.js.map +1 -0
- package/packages/web/dist/viewer/components/degradation-banner.d.ts +28 -0
- package/packages/web/dist/viewer/components/degradation-banner.js +47 -0
- package/packages/web/dist/viewer/components/degradation-banner.js.map +1 -0
- package/packages/web/dist/viewer/components/detail-panel.d.ts +12 -0
- package/packages/web/dist/viewer/components/detail-panel.js +166 -0
- package/packages/web/dist/viewer/components/detail-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/elapsed-time.d.ts +38 -0
- package/packages/web/dist/viewer/components/elapsed-time.js +35 -0
- package/packages/web/dist/viewer/components/elapsed-time.js.map +1 -0
- package/packages/web/dist/viewer/components/faq.d.ts +12 -0
- package/packages/web/dist/viewer/components/faq.js +237 -0
- package/packages/web/dist/viewer/components/faq.js.map +1 -0
- package/packages/web/dist/viewer/components/favicon.d.ts +30 -0
- package/packages/web/dist/viewer/components/favicon.js +90 -0
- package/packages/web/dist/viewer/components/favicon.js.map +1 -0
- package/packages/web/dist/viewer/components/guide.d.ts +5 -0
- package/packages/web/dist/viewer/components/guide.js +116 -0
- package/packages/web/dist/viewer/components/guide.js.map +1 -0
- package/packages/web/dist/viewer/components/index.d.ts +37 -0
- package/packages/web/dist/viewer/components/index.js +46 -0
- package/packages/web/dist/viewer/components/index.js.map +1 -0
- package/packages/web/dist/viewer/components/logos.d.ts +42 -0
- package/packages/web/dist/viewer/components/logos.js +46 -0
- package/packages/web/dist/viewer/components/logos.js.map +1 -0
- package/packages/web/dist/viewer/components/memory-panel.d.ts +19 -0
- package/packages/web/dist/viewer/components/memory-panel.js +181 -0
- package/packages/web/dist/viewer/components/memory-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/memory-warning.d.ts +23 -0
- package/packages/web/dist/viewer/components/memory-warning.js +42 -0
- package/packages/web/dist/viewer/components/memory-warning.js.map +1 -0
- package/packages/web/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
- package/packages/web/dist/viewer/components/notion-schema-wizard.js +263 -0
- package/packages/web/dist/viewer/components/notion-schema-wizard.js.map +1 -0
- package/packages/web/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
- package/packages/web/dist/viewer/components/polling-suspension-indicator.js +31 -0
- package/packages/web/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
- package/packages/web/dist/viewer/components/prd-tree/add-item-form.js +231 -0
- package/packages/web/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
- package/packages/web/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
- package/packages/web/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
- package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
- package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
- package/packages/web/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
- package/packages/web/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/compute.d.ts +32 -0
- package/packages/web/dist/viewer/components/prd-tree/compute.js +129 -0
- package/packages/web/dist/viewer/components/prd-tree/compute.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
- package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
- package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
- package/packages/web/dist/viewer/components/prd-tree/execution-panel.js +291 -0
- package/packages/web/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
- package/packages/web/dist/viewer/components/prd-tree/facet-filter.js +188 -0
- package/packages/web/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/index.d.ts +24 -0
- package/packages/web/dist/viewer/components/prd-tree/index.js +16 -0
- package/packages/web/dist/viewer/components/prd-tree/index.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
- package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
- package/packages/web/dist/viewer/components/prd-tree/lazy-children.js +73 -0
- package/packages/web/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/levels.d.ts +31 -0
- package/packages/web/dist/viewer/components/prd-tree/levels.js +72 -0
- package/packages/web/dist/viewer/components/prd-tree/levels.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
- package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
- package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
- package/packages/web/dist/viewer/components/prd-tree/merge-preview.js +181 -0
- package/packages/web/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/node-culler.d.ts +96 -0
- package/packages/web/dist/viewer/components/prd-tree/node-culler.js +135 -0
- package/packages/web/dist/viewer/components/prd-tree/node-culler.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
- package/packages/web/dist/viewer/components/prd-tree/prd-tree.js +565 -0
- package/packages/web/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/progressive-loader.d.ts +114 -0
- package/packages/web/dist/viewer/components/prd-tree/progressive-loader.js +225 -0
- package/packages/web/dist/viewer/components/prd-tree/progressive-loader.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
- package/packages/web/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
- package/packages/web/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
- package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
- package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
- package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/shared-imports.d.ts +18 -0
- package/packages/web/dist/viewer/components/prd-tree/shared-imports.js +18 -0
- package/packages/web/dist/viewer/components/prd-tree/shared-imports.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
- package/packages/web/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
- package/packages/web/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
- package/packages/web/dist/viewer/components/prd-tree/status-filter.js +131 -0
- package/packages/web/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
- package/packages/web/dist/viewer/components/prd-tree/task-detail.js +1205 -0
- package/packages/web/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
- package/packages/web/dist/viewer/components/prd-tree/task-utilization.js +25 -0
- package/packages/web/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-differ.js +200 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-search.js +178 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-utils.js +107 -0
- package/packages/web/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/types.d.ts +93 -0
- package/packages/web/dist/viewer/components/prd-tree/types.js +16 -0
- package/packages/web/dist/viewer/components/prd-tree/types.js.map +1 -0
- package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
- package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
- package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
- package/packages/web/dist/viewer/components/progressive-loader.d.ts +114 -0
- package/packages/web/dist/viewer/components/progressive-loader.js +225 -0
- package/packages/web/dist/viewer/components/progressive-loader.js.map +1 -0
- package/packages/web/dist/viewer/components/refresh-queue-status.d.ts +20 -0
- package/packages/web/dist/viewer/components/refresh-queue-status.js +65 -0
- package/packages/web/dist/viewer/components/refresh-queue-status.js.map +1 -0
- package/packages/web/dist/viewer/components/rex-task-link.d.ts +50 -0
- package/packages/web/dist/viewer/components/rex-task-link.js +218 -0
- package/packages/web/dist/viewer/components/rex-task-link.js.map +1 -0
- package/packages/web/dist/viewer/components/search-filter.d.ts +20 -0
- package/packages/web/dist/viewer/components/search-filter.js +28 -0
- package/packages/web/dist/viewer/components/search-filter.js.map +1 -0
- package/packages/web/dist/viewer/components/search-overlay.d.ts +31 -0
- package/packages/web/dist/viewer/components/search-overlay.js +472 -0
- package/packages/web/dist/viewer/components/search-overlay.js.map +1 -0
- package/packages/web/dist/viewer/components/sidebar.d.ts +18 -0
- package/packages/web/dist/viewer/components/sidebar.js +357 -0
- package/packages/web/dist/viewer/components/sidebar.js.map +1 -0
- package/packages/web/dist/viewer/components/status-indicators.d.ts +63 -0
- package/packages/web/dist/viewer/components/status-indicators.js +136 -0
- package/packages/web/dist/viewer/components/status-indicators.js.map +1 -0
- package/packages/web/dist/viewer/components/theme-toggle.d.ts +8 -0
- package/packages/web/dist/viewer/components/theme-toggle.js +28 -0
- package/packages/web/dist/viewer/components/theme-toggle.js.map +1 -0
- package/packages/web/dist/viewer/components/throttle-controls.d.ts +18 -0
- package/packages/web/dist/viewer/components/throttle-controls.js +304 -0
- package/packages/web/dist/viewer/components/throttle-controls.js.map +1 -0
- package/packages/web/dist/viewer/components/ws-health-panel.d.ts +18 -0
- package/packages/web/dist/viewer/components/ws-health-panel.js +250 -0
- package/packages/web/dist/viewer/components/ws-health-panel.js.map +1 -0
- package/packages/web/dist/viewer/components/zone-slideout.d.ts +17 -0
- package/packages/web/dist/viewer/components/zone-slideout.js +162 -0
- package/packages/web/dist/viewer/components/zone-slideout.js.map +1 -0
- package/packages/web/dist/viewer/crash/crash-detector.d.ts +69 -0
- package/packages/web/dist/viewer/crash/crash-detector.js +239 -0
- package/packages/web/dist/viewer/crash/crash-detector.js.map +1 -0
- package/packages/web/dist/viewer/crash/index.d.ts +7 -0
- package/packages/web/dist/viewer/crash/index.js +8 -0
- package/packages/web/dist/viewer/crash/index.js.map +1 -0
- package/packages/web/dist/viewer/crash-detector.d.ts +105 -0
- package/packages/web/dist/viewer/crash-detector.js +257 -0
- package/packages/web/dist/viewer/crash-detector.js.map +1 -0
- package/packages/web/dist/viewer/deployed-mode.d.ts +37 -0
- package/packages/web/dist/viewer/deployed-mode.js +94 -0
- package/packages/web/dist/viewer/deployed-mode.js.map +1 -0
- package/packages/web/dist/viewer/dom-performance-monitor.d.ts +158 -0
- package/packages/web/dist/viewer/dom-performance-monitor.js +342 -0
- package/packages/web/dist/viewer/dom-performance-monitor.js.map +1 -0
- package/packages/web/dist/viewer/dom-update-gate.d.ts +122 -0
- package/packages/web/dist/viewer/dom-update-gate.js +229 -0
- package/packages/web/dist/viewer/dom-update-gate.js.map +1 -0
- package/packages/web/dist/viewer/external.d.ts +17 -0
- package/packages/web/dist/viewer/external.js +17 -0
- package/packages/web/dist/viewer/external.js.map +1 -0
- package/packages/web/dist/viewer/graceful-degradation.d.ts +73 -0
- package/packages/web/dist/viewer/graceful-degradation.js +152 -0
- package/packages/web/dist/viewer/graceful-degradation.js.map +1 -0
- package/packages/web/dist/viewer/graph/index.d.ts +9 -0
- package/packages/web/dist/viewer/graph/index.js +12 -0
- package/packages/web/dist/viewer/graph/index.js.map +1 -0
- package/packages/web/dist/viewer/graph/physics.d.ts +96 -0
- package/packages/web/dist/viewer/graph/physics.js +366 -0
- package/packages/web/dist/viewer/graph/physics.js.map +1 -0
- package/packages/web/dist/viewer/graph/renderer.d.ts +184 -0
- package/packages/web/dist/viewer/graph/renderer.js +1438 -0
- package/packages/web/dist/viewer/graph/renderer.js.map +1 -0
- package/packages/web/dist/viewer/hooks/index.d.ts +27 -0
- package/packages/web/dist/viewer/hooks/index.js +28 -0
- package/packages/web/dist/viewer/hooks/index.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-app-data.d.ts +31 -0
- package/packages/web/dist/viewer/hooks/use-app-data.js +152 -0
- package/packages/web/dist/viewer/hooks/use-app-data.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
- package/packages/web/dist/viewer/hooks/use-crash-recovery.js +76 -0
- package/packages/web/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
- package/packages/web/dist/viewer/hooks/use-delete-actions.js +103 -0
- package/packages/web/dist/viewer/hooks/use-delete-actions.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
- package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
- package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-facet-state.d.ts +32 -0
- package/packages/web/dist/viewer/hooks/use-facet-state.js +119 -0
- package/packages/web/dist/viewer/hooks/use-facet-state.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
- package/packages/web/dist/viewer/hooks/use-feature-toggle.js +57 -0
- package/packages/web/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-file-edges.d.ts +23 -0
- package/packages/web/dist/viewer/hooks/use-file-edges.js +221 -0
- package/packages/web/dist/viewer/hooks/use-file-edges.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
- package/packages/web/dist/viewer/hooks/use-graceful-degradation.js +45 -0
- package/packages/web/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-item-selection.d.ts +49 -0
- package/packages/web/dist/viewer/hooks/use-item-selection.js +117 -0
- package/packages/web/dist/viewer/hooks/use-item-selection.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
- package/packages/web/dist/viewer/hooks/use-memory-monitor.js +73 -0
- package/packages/web/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
- package/packages/web/dist/viewer/hooks/use-pan-zoom.js +110 -0
- package/packages/web/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
- package/packages/web/dist/viewer/hooks/use-persistent-filter.js +37 -0
- package/packages/web/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
- package/packages/web/dist/viewer/hooks/use-polling-suspension.js +41 -0
- package/packages/web/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-polling.d.ts +39 -0
- package/packages/web/dist/viewer/hooks/use-polling.js +55 -0
- package/packages/web/dist/viewer/hooks/use-polling.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
- package/packages/web/dist/viewer/hooks/use-prd-actions.js +250 -0
- package/packages/web/dist/viewer/hooks/use-prd-actions.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-prd-data.d.ts +45 -0
- package/packages/web/dist/viewer/hooks/use-prd-data.js +159 -0
- package/packages/web/dist/viewer/hooks/use-prd-data.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
- package/packages/web/dist/viewer/hooks/use-prd-deep-link.js +60 -0
- package/packages/web/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
- package/packages/web/dist/viewer/hooks/use-prd-websocket.js +139 -0
- package/packages/web/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
- package/packages/web/dist/viewer/hooks/use-project-metadata.js +55 -0
- package/packages/web/dist/viewer/hooks/use-project-metadata.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-project-status.d.ts +60 -0
- package/packages/web/dist/viewer/hooks/use-project-status.js +133 -0
- package/packages/web/dist/viewer/hooks/use-project-status.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
- package/packages/web/dist/viewer/hooks/use-refresh-throttle.js +52 -0
- package/packages/web/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-route-state.d.ts +18 -0
- package/packages/web/dist/viewer/hooks/use-route-state.js +115 -0
- package/packages/web/dist/viewer/hooks/use-route-state.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
- package/packages/web/dist/viewer/hooks/use-subzone-edges.js +147 -0
- package/packages/web/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
- package/packages/web/dist/viewer/hooks/use-tab-visibility.js +43 -0
- package/packages/web/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-tick.d.ts +43 -0
- package/packages/web/dist/viewer/hooks/use-tick.js +76 -0
- package/packages/web/dist/viewer/hooks/use-tick.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-toast.d.ts +24 -0
- package/packages/web/dist/viewer/hooks/use-toast.js +26 -0
- package/packages/web/dist/viewer/hooks/use-toast.js.map +1 -0
- package/packages/web/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
- package/packages/web/dist/viewer/hooks/use-zone-drag.js +60 -0
- package/packages/web/dist/viewer/hooks/use-zone-drag.js.map +1 -0
- package/packages/web/dist/viewer/index.html +36 -0
- package/packages/web/dist/viewer/loader.d.ts +33 -0
- package/packages/web/dist/viewer/loader.js +195 -0
- package/packages/web/dist/viewer/loader.js.map +1 -0
- package/packages/web/dist/viewer/main.d.ts +1 -0
- package/packages/web/dist/viewer/main.js +121 -0
- package/packages/web/dist/viewer/main.js.map +1 -0
- package/packages/web/dist/viewer/memory-monitor.d.ts +78 -0
- package/packages/web/dist/viewer/memory-monitor.js +218 -0
- package/packages/web/dist/viewer/memory-monitor.js.map +1 -0
- package/packages/web/dist/viewer/message-coalescer.d.ts +96 -0
- package/packages/web/dist/viewer/message-coalescer.js +121 -0
- package/packages/web/dist/viewer/message-coalescer.js.map +1 -0
- package/packages/web/dist/viewer/message-throttle.d.ts +95 -0
- package/packages/web/dist/viewer/message-throttle.js +147 -0
- package/packages/web/dist/viewer/message-throttle.js.map +1 -0
- package/packages/web/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
- package/packages/web/dist/viewer/messaging/call-rate-limiter.js +103 -0
- package/packages/web/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
- package/packages/web/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
- package/packages/web/dist/viewer/messaging/fetch-pipeline.js +58 -0
- package/packages/web/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
- package/packages/web/dist/viewer/messaging/index.d.ts +43 -0
- package/packages/web/dist/viewer/messaging/index.js +46 -0
- package/packages/web/dist/viewer/messaging/index.js.map +1 -0
- package/packages/web/dist/viewer/messaging/message-coalescer.d.ts +96 -0
- package/packages/web/dist/viewer/messaging/message-coalescer.js +121 -0
- package/packages/web/dist/viewer/messaging/message-coalescer.js.map +1 -0
- package/packages/web/dist/viewer/messaging/message-throttle.d.ts +95 -0
- package/packages/web/dist/viewer/messaging/message-throttle.js +147 -0
- package/packages/web/dist/viewer/messaging/message-throttle.js.map +1 -0
- package/packages/web/dist/viewer/messaging/request-dedup.d.ts +43 -0
- package/packages/web/dist/viewer/messaging/request-dedup.js +55 -0
- package/packages/web/dist/viewer/messaging/request-dedup.js.map +1 -0
- package/packages/web/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
- package/packages/web/dist/viewer/messaging/ws-pipeline.js +68 -0
- package/packages/web/dist/viewer/messaging/ws-pipeline.js.map +1 -0
- package/packages/web/dist/viewer/n-dx.png +0 -0
- package/packages/web/dist/viewer/performance/crash-detector-test-support.d.ts +15 -0
- package/packages/web/dist/viewer/performance/crash-detector-test-support.js +19 -0
- package/packages/web/dist/viewer/performance/crash-detector-test-support.js.map +1 -0
- package/packages/web/dist/viewer/performance/crash-detector.d.ts +105 -0
- package/packages/web/dist/viewer/performance/crash-detector.js +257 -0
- package/packages/web/dist/viewer/performance/crash-detector.js.map +1 -0
- package/packages/web/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
- package/packages/web/dist/viewer/performance/dom-performance-monitor.js +341 -0
- package/packages/web/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
- package/packages/web/dist/viewer/performance/dom-update-gate.d.ts +122 -0
- package/packages/web/dist/viewer/performance/dom-update-gate.js +229 -0
- package/packages/web/dist/viewer/performance/dom-update-gate.js.map +1 -0
- package/packages/web/dist/viewer/performance/graceful-degradation.d.ts +73 -0
- package/packages/web/dist/viewer/performance/graceful-degradation.js +152 -0
- package/packages/web/dist/viewer/performance/graceful-degradation.js.map +1 -0
- package/packages/web/dist/viewer/performance/index.d.ts +14 -0
- package/packages/web/dist/viewer/performance/index.js +20 -0
- package/packages/web/dist/viewer/performance/index.js.map +1 -0
- package/packages/web/dist/viewer/performance/memory-monitor.d.ts +78 -0
- package/packages/web/dist/viewer/performance/memory-monitor.js +218 -0
- package/packages/web/dist/viewer/performance/memory-monitor.js.map +1 -0
- package/packages/web/dist/viewer/performance/refresh-throttle.d.ts +90 -0
- package/packages/web/dist/viewer/performance/refresh-throttle.js +266 -0
- package/packages/web/dist/viewer/performance/refresh-throttle.js.map +1 -0
- package/packages/web/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
- package/packages/web/dist/viewer/performance/response-buffer-gate.js +170 -0
- package/packages/web/dist/viewer/performance/response-buffer-gate.js.map +1 -0
- package/packages/web/dist/viewer/performance/update-batcher.d.ts +79 -0
- package/packages/web/dist/viewer/performance/update-batcher.js +119 -0
- package/packages/web/dist/viewer/performance/update-batcher.js.map +1 -0
- package/packages/web/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
- package/packages/web/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
- package/packages/web/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
- package/packages/web/dist/viewer/polling/index.d.ts +13 -0
- package/packages/web/dist/viewer/polling/index.js +16 -0
- package/packages/web/dist/viewer/polling/index.js.map +1 -0
- package/packages/web/dist/viewer/polling/polling-manager.d.ts +82 -0
- package/packages/web/dist/viewer/polling/polling-manager.js +254 -0
- package/packages/web/dist/viewer/polling/polling-manager.js.map +1 -0
- package/packages/web/dist/viewer/polling/polling-restart.d.ts +45 -0
- package/packages/web/dist/viewer/polling/polling-restart.js +98 -0
- package/packages/web/dist/viewer/polling/polling-restart.js.map +1 -0
- package/packages/web/dist/viewer/polling/polling-state.d.ts +182 -0
- package/packages/web/dist/viewer/polling/polling-state.js +306 -0
- package/packages/web/dist/viewer/polling/polling-state.js.map +1 -0
- package/packages/web/dist/viewer/polling/tab-visibility.d.ts +112 -0
- package/packages/web/dist/viewer/polling/tab-visibility.js +276 -0
- package/packages/web/dist/viewer/polling/tab-visibility.js.map +1 -0
- package/packages/web/dist/viewer/polling/tick-timer.d.ts +70 -0
- package/packages/web/dist/viewer/polling/tick-timer.js +168 -0
- package/packages/web/dist/viewer/polling/tick-timer.js.map +1 -0
- package/packages/web/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
- package/packages/web/dist/viewer/polling/tick-visibility-gate.js +146 -0
- package/packages/web/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
- package/packages/web/dist/viewer/polling-manager.d.ts +82 -0
- package/packages/web/dist/viewer/polling-manager.js +254 -0
- package/packages/web/dist/viewer/polling-manager.js.map +1 -0
- package/packages/web/dist/viewer/polling-restart.d.ts +57 -0
- package/packages/web/dist/viewer/polling-restart.js +118 -0
- package/packages/web/dist/viewer/polling-restart.js.map +1 -0
- package/packages/web/dist/viewer/polling-state.d.ts +182 -0
- package/packages/web/dist/viewer/polling-state.js +306 -0
- package/packages/web/dist/viewer/polling-state.js.map +1 -0
- package/packages/web/dist/viewer/refresh-throttle.d.ts +90 -0
- package/packages/web/dist/viewer/refresh-throttle.js +266 -0
- package/packages/web/dist/viewer/refresh-throttle.js.map +1 -0
- package/packages/web/dist/viewer/request-dedup.d.ts +43 -0
- package/packages/web/dist/viewer/request-dedup.js +55 -0
- package/packages/web/dist/viewer/request-dedup.js.map +1 -0
- package/packages/web/dist/viewer/response-buffer-gate.d.ts +108 -0
- package/packages/web/dist/viewer/response-buffer-gate.js +170 -0
- package/packages/web/dist/viewer/response-buffer-gate.js.map +1 -0
- package/packages/web/dist/viewer/route-state.d.ts +8 -0
- package/packages/web/dist/viewer/route-state.js +77 -0
- package/packages/web/dist/viewer/route-state.js.map +1 -0
- package/packages/web/dist/viewer/schema-compat.d.ts +17 -0
- package/packages/web/dist/viewer/schema-compat.js +49 -0
- package/packages/web/dist/viewer/schema-compat.js.map +1 -0
- package/packages/web/dist/viewer/sourcevision-tabs.d.ts +10 -0
- package/packages/web/dist/viewer/sourcevision-tabs.js +14 -0
- package/packages/web/dist/viewer/sourcevision-tabs.js.map +1 -0
- package/packages/web/dist/viewer/tab-visibility.d.ts +112 -0
- package/packages/web/dist/viewer/tab-visibility.js +276 -0
- package/packages/web/dist/viewer/tab-visibility.js.map +1 -0
- package/packages/web/dist/viewer/tick-timer.d.ts +70 -0
- package/packages/web/dist/viewer/tick-timer.js +168 -0
- package/packages/web/dist/viewer/tick-timer.js.map +1 -0
- package/packages/web/dist/viewer/tick-visibility-gate.d.ts +92 -0
- package/packages/web/dist/viewer/tick-visibility-gate.js +146 -0
- package/packages/web/dist/viewer/tick-visibility-gate.js.map +1 -0
- package/packages/web/dist/viewer/types.d.ts +66 -0
- package/packages/web/dist/viewer/types.js +2 -0
- package/packages/web/dist/viewer/types.js.map +1 -0
- package/packages/web/dist/viewer/update-batcher.d.ts +79 -0
- package/packages/web/dist/viewer/update-batcher.js +119 -0
- package/packages/web/dist/viewer/update-batcher.js.map +1 -0
- package/packages/web/dist/viewer/usage/constants.d.ts +14 -0
- package/packages/web/dist/viewer/usage/constants.js +14 -0
- package/packages/web/dist/viewer/usage/constants.js.map +1 -0
- package/packages/web/dist/viewer/usage/index.d.ts +7 -0
- package/packages/web/dist/viewer/usage/index.js +8 -0
- package/packages/web/dist/viewer/usage/index.js.map +1 -0
- package/packages/web/dist/viewer/utils.d.ts +25 -0
- package/packages/web/dist/viewer/utils.js +48 -0
- package/packages/web/dist/viewer/utils.js.map +1 -0
- package/packages/web/dist/viewer/validate.d.ts +23 -0
- package/packages/web/dist/viewer/validate.js +275 -0
- package/packages/web/dist/viewer/validate.js.map +1 -0
- package/packages/web/dist/viewer/views/analysis.d.ts +10 -0
- package/packages/web/dist/viewer/views/analysis.js +109 -0
- package/packages/web/dist/viewer/views/analysis.js.map +1 -0
- package/packages/web/dist/viewer/views/architecture.d.ts +10 -0
- package/packages/web/dist/viewer/views/architecture.js +44 -0
- package/packages/web/dist/viewer/views/architecture.js.map +1 -0
- package/packages/web/dist/viewer/views/call-graph.d.ts +20 -0
- package/packages/web/dist/viewer/views/call-graph.js +1266 -0
- package/packages/web/dist/viewer/views/call-graph.js.map +1 -0
- package/packages/web/dist/viewer/views/domain-hench.d.ts +13 -0
- package/packages/web/dist/viewer/views/domain-hench.js +14 -0
- package/packages/web/dist/viewer/views/domain-hench.js.map +1 -0
- package/packages/web/dist/viewer/views/domain-rex.d.ts +17 -0
- package/packages/web/dist/viewer/views/domain-rex.js +18 -0
- package/packages/web/dist/viewer/views/domain-rex.js.map +1 -0
- package/packages/web/dist/viewer/views/domain-settings.d.ts +12 -0
- package/packages/web/dist/viewer/views/domain-settings.js +13 -0
- package/packages/web/dist/viewer/views/domain-settings.js.map +1 -0
- package/packages/web/dist/viewer/views/domain-sourcevision.d.ts +20 -0
- package/packages/web/dist/viewer/views/domain-sourcevision.js +21 -0
- package/packages/web/dist/viewer/views/domain-sourcevision.js.map +1 -0
- package/packages/web/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
- package/packages/web/dist/viewer/views/enrichment-thresholds.js +12 -0
- package/packages/web/dist/viewer/views/enrichment-thresholds.js.map +1 -0
- package/packages/web/dist/viewer/views/feature-toggles.d.ts +13 -0
- package/packages/web/dist/viewer/views/feature-toggles.js +185 -0
- package/packages/web/dist/viewer/views/feature-toggles.js.map +1 -0
- package/packages/web/dist/viewer/views/files.d.ts +13 -0
- package/packages/web/dist/viewer/views/files.js +174 -0
- package/packages/web/dist/viewer/views/files.js.map +1 -0
- package/packages/web/dist/viewer/views/graph.d.ts +12 -0
- package/packages/web/dist/viewer/views/graph.js +316 -0
- package/packages/web/dist/viewer/views/graph.js.map +1 -0
- package/packages/web/dist/viewer/views/hench-config.d.ts +39 -0
- package/packages/web/dist/viewer/views/hench-config.js +473 -0
- package/packages/web/dist/viewer/views/hench-config.js.map +1 -0
- package/packages/web/dist/viewer/views/hench-runs.d.ts +19 -0
- package/packages/web/dist/viewer/views/hench-runs.js +460 -0
- package/packages/web/dist/viewer/views/hench-runs.js.map +1 -0
- package/packages/web/dist/viewer/views/hench-templates.d.ts +17 -0
- package/packages/web/dist/viewer/views/hench-templates.js +262 -0
- package/packages/web/dist/viewer/views/hench-templates.js.map +1 -0
- package/packages/web/dist/viewer/views/integration-config.d.ts +73 -0
- package/packages/web/dist/viewer/views/integration-config.js +524 -0
- package/packages/web/dist/viewer/views/integration-config.js.map +1 -0
- package/packages/web/dist/viewer/views/notion-config.d.ts +16 -0
- package/packages/web/dist/viewer/views/notion-config.js +357 -0
- package/packages/web/dist/viewer/views/notion-config.js.map +1 -0
- package/packages/web/dist/viewer/views/overview.d.ts +10 -0
- package/packages/web/dist/viewer/views/overview.js +187 -0
- package/packages/web/dist/viewer/views/overview.js.map +1 -0
- package/packages/web/dist/viewer/views/pr-markdown.d.ts +3 -0
- package/packages/web/dist/viewer/views/pr-markdown.js +350 -0
- package/packages/web/dist/viewer/views/pr-markdown.js.map +1 -0
- package/packages/web/dist/viewer/views/prd.d.ts +34 -0
- package/packages/web/dist/viewer/views/prd.js +257 -0
- package/packages/web/dist/viewer/views/prd.js.map +1 -0
- package/packages/web/dist/viewer/views/problems.d.ts +8 -0
- package/packages/web/dist/viewer/views/problems.js +50 -0
- package/packages/web/dist/viewer/views/problems.js.map +1 -0
- package/packages/web/dist/viewer/views/rex-dashboard.d.ts +14 -0
- package/packages/web/dist/viewer/views/rex-dashboard.js +334 -0
- package/packages/web/dist/viewer/views/rex-dashboard.js.map +1 -0
- package/packages/web/dist/viewer/views/routes.d.ts +8 -0
- package/packages/web/dist/viewer/views/routes.js +216 -0
- package/packages/web/dist/viewer/views/routes.js.map +1 -0
- package/packages/web/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
- package/packages/web/dist/viewer/views/sourcevision-tabs.js +14 -0
- package/packages/web/dist/viewer/views/sourcevision-tabs.js.map +1 -0
- package/packages/web/dist/viewer/views/suggestions.d.ts +8 -0
- package/packages/web/dist/viewer/views/suggestions.js +36 -0
- package/packages/web/dist/viewer/views/suggestions.js.map +1 -0
- package/packages/web/dist/viewer/views/task-audit.d.ts +18 -0
- package/packages/web/dist/viewer/views/task-audit.js +413 -0
- package/packages/web/dist/viewer/views/task-audit.js.map +1 -0
- package/packages/web/dist/viewer/views/token-usage.d.ts +10 -0
- package/packages/web/dist/viewer/views/token-usage.js +410 -0
- package/packages/web/dist/viewer/views/token-usage.js.map +1 -0
- package/packages/web/dist/viewer/views/validation.d.ts +11 -0
- package/packages/web/dist/viewer/views/validation.js +475 -0
- package/packages/web/dist/viewer/views/validation.js.map +1 -0
- package/packages/web/dist/viewer/views/view-registry.d.ts +27 -0
- package/packages/web/dist/viewer/views/view-registry.js +70 -0
- package/packages/web/dist/viewer/views/view-registry.js.map +1 -0
- package/packages/web/dist/viewer/views/workflow-optimization.d.ts +12 -0
- package/packages/web/dist/viewer/views/workflow-optimization.js +311 -0
- package/packages/web/dist/viewer/views/workflow-optimization.js.map +1 -0
- package/packages/web/dist/viewer/views/zone-types.d.ts +69 -0
- package/packages/web/dist/viewer/views/zone-types.js +5 -0
- package/packages/web/dist/viewer/views/zone-types.js.map +1 -0
- package/packages/web/dist/viewer/views/zones.d.ts +50 -0
- package/packages/web/dist/viewer/views/zones.js +1438 -0
- package/packages/web/dist/viewer/views/zones.js.map +1 -0
- package/packages/web/dist/viewer/visualization/colors.d.ts +16 -0
- package/packages/web/dist/viewer/visualization/colors.js +31 -0
- package/packages/web/dist/viewer/visualization/colors.js.map +1 -0
- package/packages/web/dist/viewer/visualization/flow.d.ts +54 -0
- package/packages/web/dist/viewer/visualization/flow.js +123 -0
- package/packages/web/dist/viewer/visualization/flow.js.map +1 -0
- package/packages/web/dist/viewer/visualization/index.d.ts +34 -0
- package/packages/web/dist/viewer/visualization/index.js +40 -0
- package/packages/web/dist/viewer/visualization/index.js.map +1 -0
- package/packages/web/dist/viewer/visualization/metrics.d.ts +8 -0
- package/packages/web/dist/viewer/visualization/metrics.js +16 -0
- package/packages/web/dist/viewer/visualization/metrics.js.map +1 -0
- package/packages/web/package.json +53 -0
- package/refresh-artifacts.js +54 -0
- package/refresh-plan.js +79 -0
- package/refresh-validate.js +175 -0
- package/web.js +458 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>n-dx</title>
|
|
7
|
+
<link rel="icon" type="image/png" href="./SourceVision-F.png">
|
|
8
|
+
<script>
|
|
9
|
+
(function(){
|
|
10
|
+
var s = localStorage.getItem("sv-theme");
|
|
11
|
+
var t = s || (matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark");
|
|
12
|
+
document.documentElement.setAttribute("data-theme", t);
|
|
13
|
+
})();
|
|
14
|
+
</script>
|
|
15
|
+
<style>:root{--brand-navy: #001769;--brand-teal: #00E5B9;--brand-purple: #6c41f0;--brand-rose: #d52e66;--brand-green: #00bd81;--brand-orange: #ff5926;--sidebar-w: 220px;--panel-w: 320px;--font-xs: 10px;--font-sm: 11px;--font-base: 13px;--font-md: 14px;--font-lg: 16px;--font-xl: 18px;--font-2xl: 20px;--font-3xl: 24px;--weight-normal: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--leading-tight: 1.25;--leading-normal: 1.5;--leading-relaxed: 1.6;--tracking-tight: -.01em;--tracking-normal: 0;--tracking-wide: .02em;--tracking-wider: .08em;--space-0: 0px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--transition-fast: .1s ease;--transition-normal: .15s ease;--transition-slow: .25s ease}[data-theme=dark]{--bg: #0c0e1a;--bg-surface: #151829;--bg-hover: #1e2240;--bg-active: #262b4a;--border: #2a2f4a;--border-strong: #3d4470;--text: #e8eaf0;--text-dim: #9ea3bc;--text-muted: #6b7094;--accent: var(--brand-teal);--accent-dim: #008f75;--accent-subtle: color-mix(in srgb, var(--brand-teal) 8%, transparent);--green: var(--brand-green);--orange: var(--brand-orange);--red: var(--brand-rose);--purple: var(--brand-purple);--logo-bg: var(--brand-purple);--logo-bg-hover: #7d52ff}[data-theme=light]{--bg: #f5f6fa;--bg-surface: #ffffff;--bg-hover: #eef0f6;--bg-active: #e4e7f0;--border: #d8dce6;--border-strong: #bcc2d4;--text: #1a1d2e;--text-dim: #5c6078;--text-muted: #8b90a8;--accent: #008f60;--accent-dim: #007a52;--accent-subtle: color-mix(in srgb, #008f60 6%, transparent);--green: var(--brand-green);--orange: var(--brand-orange);--red: var(--brand-rose);--purple: var(--brand-purple);--logo-bg: var(--brand-navy);--logo-bg-hover: #002499}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);overflow:hidden;overflow-wrap:break-word;word-wrap:break-word}#app{display:flex;height:100vh;height:100dvh}img,svg,video,canvas,iframe{max-width:100%}pre,code{max-width:100%}pre{overflow-x:auto}.logo{flex-shrink:0;display:block}.logo-ndx-png,.logo-product-png{object-fit:contain;border-radius:var(--radius-sm)}.logo-ndx-bg{fill:var(--logo-bg);transition:fill var(--transition-normal)}.sidebar-brand:hover .logo-ndx-bg{fill:var(--logo-bg-hover)}.sidebar-brand{display:flex;align-items:center;gap:var(--space-2)}.sidebar-brand-text{display:flex;flex-direction:column;min-width:0}.sidebar-logo{border-radius:var(--radius-md);flex-shrink:0}.nav-section-logo{opacity:.7;transition:opacity var(--transition-normal);flex-shrink:0}.nav-section-header:hover .nav-section-logo,.nav-section-header[aria-expanded=true] .nav-section-logo{opacity:1}.branded-header{display:flex;align-items:center;gap:var(--space-2)}.branded-header-logo{flex-shrink:0}.branded-header-label{font-size:var(--font-xs);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wider);text-transform:uppercase}.branded-header-sv,.branded-header-sv .branded-header-logo{color:var(--brand-teal)}.branded-header-rex,.branded-header-rex .branded-header-logo{color:var(--brand-purple)}.branded-header-hench,.branded-header-hench .branded-header-logo{color:var(--brand-orange)}.view-header{margin-bottom:var(--space-6)}.view-header .branded-header{margin-bottom:var(--space-1)}.view-header .section-header{margin-bottom:0}.view-title{font-size:var(--font-3xl);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight)}.view-subtitle{font-size:var(--font-base);color:var(--text-dim);margin-top:var(--space-1)}.sidebar{width:var(--sidebar-w);background:var(--bg-surface);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease,min-width .2s ease;position:relative;overflow:hidden}.sidebar.sidebar-collapsed{width:60px;min-width:60px;overflow:visible}.sidebar.sidebar-collapsed .sidebar-header,.sidebar.sidebar-collapsed .sidebar-nav{opacity:0;pointer-events:none;position:absolute;visibility:hidden}.sidebar-toggle-btn{position:absolute;bottom:12px;right:12px;z-index:10;background:transparent;border:1px solid var(--border);color:var(--text-dim);width:36px;height:36px;border-radius:var(--radius-md);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--transition-normal),color var(--transition-normal),border-color var(--transition-normal);padding:0}.sidebar-toggle-btn:hover{background:var(--bg-hover);color:var(--text);border-color:var(--text-muted)}.sidebar-rail{display:flex;flex-direction:column;align-items:center;width:60px;height:100%;padding:14px 0;gap:0;position:relative}.sidebar-rail-logo{cursor:pointer;flex-shrink:0;border-radius:var(--radius-md);padding:2px;transition:opacity var(--transition-normal)}.sidebar-rail-logo:hover{opacity:.8}.sidebar-rail-divider{width:32px;height:1px;background:var(--border);margin:12px 0;flex-shrink:0}.sidebar-rail-nav{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;flex:1}.sidebar-rail-section{position:relative;width:48px;height:48px;border-radius:var(--radius-md);border:none;background:transparent;color:var(--text-dim);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:background var(--transition-normal)}.sidebar-rail-section:hover,.sidebar-rail-section-active{background:var(--bg-hover)}.sidebar-rail-accent{position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:0 2px 2px 0;background:var(--brand-teal)}.sidebar-rail-section-rex .sidebar-rail-accent{background:var(--brand-purple)}.sidebar-rail-section-hench .sidebar-rail-accent{background:var(--brand-orange)}.sidebar-rail-icon{opacity:.7;transition:opacity var(--transition-normal)}.sidebar-rail-section:hover .sidebar-rail-icon,.sidebar-rail-section-active .sidebar-rail-icon{opacity:1}.sidebar-rail-expand{margin-top:auto;width:36px;height:36px;border-radius:var(--radius-md);border:1px solid var(--border);background:transparent;color:var(--text-dim);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;flex-shrink:0;transition:background var(--transition-normal),color var(--transition-normal),border-color var(--transition-normal)}.sidebar-rail-expand:hover{background:var(--bg-hover);color:var(--text);border-color:var(--text-muted)}.sidebar-header{padding:var(--space-4);border-bottom:1px solid var(--border)}.sidebar-header h1{font-size:var(--font-xl);font-weight:var(--weight-bold);letter-spacing:var(--tracking-wide);line-height:1}.sidebar-subtitle{font-size:10px;color:var(--text-muted);margin-top:2px;letter-spacing:.02em;line-height:1.3}.sidebar-nav{flex:1;padding:8px;overflow-y:auto}.nav-section{margin-bottom:2px}.nav-section-header{display:flex;align-items:center;gap:var(--space-2);padding:8px var(--space-3);cursor:pointer;user-select:none;border-radius:var(--radius-md);transition:background var(--transition-normal)}.nav-section-header:hover{background:var(--bg-hover)}.nav-section-chevron{margin-left:auto;flex-shrink:0;color:var(--text-muted);transition:transform .2s ease,color var(--transition-normal)}.nav-section-chevron-open{transform:rotate(180deg)}.nav-section-header:hover .nav-section-chevron{color:var(--text-dim)}.nav-section-header .nav-section-label{font-size:var(--font-sm);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wider);color:var(--text-dim);transition:color var(--transition-normal)}.nav-section-header:hover .nav-section-label{color:var(--text)}.nav-section-items{overflow:hidden;max-height:500px;transition:max-height .25s ease,opacity .2s ease;opacity:1}.nav-section-items-collapsed{max-height:0;opacity:0;pointer-events:none}.nav-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-base);color:var(--text-dim);transition:background var(--transition-normal),color var(--transition-normal)}.nav-item:hover{background:var(--bg-hover);color:var(--text)}.nav-item.active{background:var(--accent-dim);color:#fff}.nav-item:active{background:var(--bg-active, var(--bg-hover))}.nav-icon{width:16px;text-align:center;font-size:var(--font-md)}.nav-item.locked{opacity:.55;cursor:default}.nav-item.locked:hover{background:transparent;color:var(--text-dim)}.nav-badge{font-size:9px;background:var(--bg-hover);color:var(--text-dim);padding:1px 5px;border-radius:var(--radius-sm);margin-left:auto;font-weight:var(--weight-medium)}.sidebar-logo{flex-shrink:0;border-radius:var(--radius-md)}.main{flex:1;min-width:0;overflow-x:hidden;overflow-y:auto;padding:24px}.detail-panel{width:var(--panel-w);background:var(--bg-surface);border-left:1px solid var(--border);padding:16px;overflow-y:auto;flex-shrink:0;display:none}.detail-panel.open{display:block}.detail-panel h3{font-size:13px;font-weight:600;margin-bottom:12px}.detail-backdrop{display:none}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:24px}.stat-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px}.stat-card .value{font-size:28px;font-weight:700;color:var(--accent)}.stat-card .label{font-size:12px;color:var(--text-dim);margin-top:4px}.zone-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}.zone-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px;cursor:pointer;transition:border-color .15s}.zone-card:hover{border-color:var(--accent)}.zone-card:active{background:var(--bg-hover)}.zone-card h3{font-size:14px;margin-bottom:4px}.zone-card .desc{font-size:12px;color:var(--text-dim);margin-bottom:12px}.zone-metrics{display:flex;gap:16px}.zone-metric{font-size:12px}.zone-metric .val{font-weight:600;font-size:16px}.zone-metric .lbl{color:var(--text-dim);font-size:10px}.meter{width:60px;height:4px;background:var(--border);border-radius:2px;overflow:hidden;margin-top:2px}.meter-fill{height:100%;border-radius:2px}.meter-fill.good{background:var(--green)}.meter-fill.mid{background:var(--orange)}.meter-fill.bad{background:var(--red)}.finding-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:12px 16px;margin-bottom:8px;font-size:13px;line-height:1.5}.finding-card p{margin:4px 0}.finding-card.severity-critical{border-left:3px solid var(--red)}.finding-card.severity-warning{border-left:3px solid var(--orange)}.finding-card.severity-info{border-left:3px solid var(--accent)}.finding-scope{font-size:11px;color:var(--text-dim);font-family:monospace;margin-left:8px}.finding-related{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.finding-related code{font-size:11px;background:var(--bg-hover);padding:1px 6px;border-radius:3px;color:var(--text-dim)}.finding-header{display:flex;align-items:center;gap:6px;margin-bottom:4px;flex-wrap:wrap}.finding-icon{font-size:14px;flex-shrink:0}.finding-text{margin:4px 0;line-height:1.6}.finding-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}.finding-zone-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.finding-scope-link{font-size:11px;color:var(--accent-dim);font-family:monospace;display:inline-flex;align-items:center;gap:4px}.finding-type-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-weight:500;background:var(--bg-hover);color:var(--text-dim);text-transform:capitalize}.finding-related-label{font-size:11px;color:var(--text-dim);font-weight:500}.finding-related code{cursor:default;transition:color .1s}.finding-related code:hover{color:var(--text)}.getting-started{background:var(--bg-surface);border:1px solid var(--accent-dim);border-radius:8px;padding:16px 20px;margin-bottom:20px}.getting-started h3{font-size:14px;font-weight:600;color:var(--accent);margin-bottom:8px}.getting-started p{font-size:13px;color:var(--text-dim);margin-bottom:8px}.getting-started ol{padding-left:20px;font-size:13px;line-height:1.8}.getting-started code{background:var(--bg-hover);padding:1px 6px;border-radius:3px;font-size:12px;color:var(--accent)}.component-name{font-weight:500;color:var(--accent)}.component-file{font-size:11px;color:var(--text-dim);font-family:monospace}.component-usage-badge{font-size:10px;font-weight:600;background:var(--accent-dim);color:#fff;padding:1px 6px;border-radius:3px;margin-left:auto}.component-usage-table{margin-bottom:24px}.graph-container{width:100%;height:calc(100vh - 150px);height:calc(100dvh - 150px);background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.graph-container svg{width:100%;height:100%;cursor:grab}.graph-container svg.grabbing{cursor:grabbing}.graph-node circle{stroke:var(--border);stroke-width:1.5px;cursor:pointer}.graph-node circle:hover{stroke:var(--accent);stroke-width:2px}.graph-link{stroke:var(--border);stroke-opacity:.4}.graph-link.cross-zone{stroke:var(--orange);stroke-opacity:.6}.graph-node,.graph-link{transition:opacity .15s}.graph-label{fill:var(--text-dim);font-size:9px;pointer-events:none}.graph-legend{position:absolute;top:8px;right:8px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;padding:8px 12px;max-height:200px;overflow-y:auto;font-size:11px;z-index:10}.graph-legend-item{display:flex;align-items:center;gap:6px;padding:2px 0;color:var(--text-dim)}.graph-legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.graph-search-bar{margin-bottom:8px}.graph-search-ring{animation:search-pulse 1.5s ease-in-out infinite}@keyframes search-pulse{0%,to{stroke-opacity:1}50%{stroke-opacity:.4}}.refresh-toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--accent-dim);color:#fff;padding:8px 20px;border-radius:20px;font-size:13px;font-weight:500;z-index:1000;animation:toast-fade 3s ease-in-out forwards}@keyframes toast-fade{0%{opacity:0;transform:translate(-50%) translateY(10px)}10%{opacity:1;transform:translate(-50%) translateY(0)}80%{opacity:1}to{opacity:0}}.filter-bar{display:flex;gap:8px;margin-bottom:16px;align-items:center}.filter-input{flex:1;padding:8px 12px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:13px;outline:none}.filter-input:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:-1px}.filter-select{padding:8px 12px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:13px;outline:none}.filter-select:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:-1px}.filter-result-count{font-size:12px;color:var(--text-dim);white-space:nowrap}.drop-overlay{position:fixed;inset:0;background:#0c0e1ae6;display:flex;align-items:center;justify-content:center;z-index:1000}.drop-overlay.hidden{display:none}.drop-box{border:2px dashed var(--accent);border-radius:16px;padding:48px 64px;text-align:center}.drop-box h2{color:var(--accent);margin-bottom:8px}.drop-box p{color:var(--text-dim);font-size:14px}.locked-view{display:flex;flex-direction:column;align-items:center;justify-content:center;height:60vh;text-align:center;color:var(--text-dim)}.locked-icon{font-size:48px;margin-bottom:16px;opacity:.4}.locked-view h2{font-size:20px;color:var(--text);margin-bottom:8px}.locked-view p{margin-bottom:8px;font-size:14px}.locked-hint code{background:var(--bg-surface);border:1px solid var(--border);padding:2px 8px;border-radius:4px;font-size:13px;color:var(--accent)}.collapsible-header{display:flex;align-items:center;gap:8px;cursor:pointer;padding:8px 0;user-select:none}.collapsible-header:hover{color:var(--accent)}.collapsible-chevron{font-size:10px;transition:transform .15s;color:var(--text-dim)}.collapsible-chevron.open{transform:rotate(90deg)}.collapsible-title{font-size:15px;font-weight:600}.collapsible-count{font-size:11px;background:var(--bg-hover);color:var(--text-dim);padding:1px 6px;border-radius:3px}.collapsible-toggle{background:none;border:none;color:var(--accent);font-size:12px;cursor:pointer;padding:4px 0}.collapsible-toggle:hover{text-decoration:underline}.collapsible-scroll-container{max-height:60vh;overflow-y:auto;position:relative}.collapsible-sticky-footer{position:sticky;bottom:0;background:linear-gradient(transparent,var(--bg) 40%);padding:16px 0 4px;text-align:center}.tree-node{position:relative}.tree-node-row{display:flex;align-items:center;gap:6px;padding:5px 8px;font-size:13px;border-radius:4px;position:relative}.tree-node-expandable{cursor:pointer}.tree-node-row:hover{background:var(--bg-hover)}.tree-node-content{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}.tree-chevron{width:16px;font-size:9px;color:var(--text-dim);text-align:center;flex-shrink:0;transition:transform .15s}.tree-chevron-open{transform:rotate(90deg)}.tree-line{position:absolute;top:0;width:24px;height:100%;pointer-events:none}.tree-line:before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--border)}.tree-line:after{content:"";position:absolute;left:0;top:14px;width:12px;height:1px;background:var(--border)}.tree-line-last:before{bottom:calc(100% - 14px)}.tree-children{position:relative}.tree-children:before{content:"";position:absolute;left:var(--tree-line-left, 12px);top:0;bottom:14px;width:1px;background:var(--border)}.bar-chart-label{font-size:12px;fill:var(--text-dim)}.bar-chart-value{font-size:11px;fill:var(--text)}.flow-diagram{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;margin-bottom:16px;overflow:hidden}.flow-diagram svg{width:100%;max-width:800px;display:block;margin:0 auto 16px}.flow-node{cursor:pointer}.flow-node:hover circle{stroke-width:3px}.flow-node text{font-size:10px;fill:var(--text);pointer-events:none}.flow-edge{fill:none;stroke-linecap:round}.data-table-wrapper{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th{text-align:left;padding:8px 12px;border-bottom:2px solid var(--border);color:var(--text-dim);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.04em;cursor:pointer;user-select:none}.data-table th:hover{color:var(--text)}.data-table td{padding:6px 12px;border-bottom:1px solid var(--border)}.data-table tr:hover td{background:var(--bg-hover)}.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500}.tag-source{background:#1e3a5f;color:#6cb4ee}.tag-test{background:#1e3f2e;color:var(--green)}.tag-config{background:#3f2e1e;color:var(--orange)}.tag-docs{background:#2e1e3f;color:#9b7af8}.tag-other{background:#2e2e2e;color:var(--text-dim)}[data-theme=light] .tag-source{background:#dbeafe;color:#1e40af}[data-theme=light] .tag-test{background:#dcfce7;color:#166534}[data-theme=light] .tag-config{background:#fef3c7;color:#92400e}[data-theme=light] .tag-docs{background:#ede9fe;color:#5b21b6}[data-theme=light] .tag-other{background:#f3f4f6;color:var(--text-dim)}.severity-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.severity-info{background:#1e3a5f;color:#6cb4ee}.severity-warning{background:#3f2e1e;color:var(--orange)}.severity-critical{background:#3f1e1e;color:#e8578a}[data-theme=light] .severity-info{background:#dbeafe;color:#1e40af}[data-theme=light] .severity-warning{background:#fef3c7;color:#92400e}[data-theme=light] .severity-critical{background:#fee2e2;color:#991b1b}.detail-row{display:flex;justify-content:space-between;padding:4px 0;font-size:12px}.detail-row .label{color:var(--text-dim)}.detail-nav-btn{display:block;width:100%;margin-top:16px;padding:8px 12px;background:var(--bg-hover);border:1px solid var(--border);border-radius:6px;color:var(--accent);font-size:12px;font-weight:500;cursor:pointer;text-align:center}.detail-nav-btn:hover{border-color:var(--accent);background:var(--accent-dim);color:#fff}.detail-import-list{display:flex;flex-direction:column;gap:2px}.detail-import-item{font-size:11px;font-family:monospace;color:var(--text-dim);padding:2px 6px;border-radius:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.detail-import-item:hover{background:var(--bg-hover);color:var(--text)}.detail-code{font-family:monospace;font-size:11px;background:var(--bg-hover);padding:8px;border-radius:4px;margin-bottom:12px;word-break:break-all;color:var(--accent)}.zone-badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:10px;font-weight:500;white-space:nowrap}.zone-badge[style]{background:color-mix(in srgb,var(--zone-color) 13%,transparent);color:var(--zone-color);border:1px solid color-mix(in srgb,var(--zone-color) 27%,transparent)}.detail-close{background:none;border:1px solid var(--border);border-radius:6px;color:var(--text-dim);font-size:12px;cursor:pointer;padding:2px 8px;display:flex;align-items:center;gap:4px}.detail-close:hover{border-color:var(--accent);color:var(--accent)}.detail-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.detail-nav-group{display:flex;flex-direction:column;gap:6px;margin-top:16px}.detail-nav-group .detail-nav-btn{margin-top:0}.detail-finding-item{font-size:12px;color:var(--text-dim);padding:4px 0;border-bottom:1px solid var(--border)}.detail-more{font-size:11px;color:var(--text-dim);padding-top:4px}.route-tree{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:8px 0;margin-bottom:16px}.route-pattern{font-family:monospace;color:var(--accent);font-weight:500}.route-file{font-size:11px;color:var(--text-dim)}.route-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-weight:600;margin-right:4px}.route-badge-data{background:#1e3a5f;color:#6cb4ee}.route-badge-component{background:#1e3f2e;color:var(--green)}.route-badge-boundary{background:#3f2e1e;color:var(--orange)}.route-badge-meta{background:#2e1e3f;color:#9b7af8}[data-theme=light] .route-badge-data{background:#dbeafe;color:#1e40af}[data-theme=light] .route-badge-component{background:#dcfce7;color:#166534}[data-theme=light] .route-badge-boundary{background:#fef3c7;color:#92400e}[data-theme=light] .route-badge-meta{background:#ede9fe;color:#5b21b6}.zone-map{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.zone-map-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:12px}.zone-map-header h4{font-size:14px;font-weight:600;color:var(--text);margin:0}.zone-map-legend{display:flex;gap:16px;font-size:11px;color:var(--text-dim)}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%}.legend-line{width:16px;height:2px;background:var(--border)}.zone-map-grid{display:grid;gap:16px;margin-bottom:20px}.zone-map-node{background:var(--bg);border:2px solid var(--border);border-radius:8px;padding:12px;cursor:pointer;transition:all .2s ease;position:relative}.zone-map-node:hover{border-color:var(--zone-color);box-shadow:0 2px 8px #00000026}.zone-map-node.selected{border-color:var(--zone-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--zone-color) 30%,transparent)}.zone-map-node-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.zone-map-node-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.zone-map-node-name{font-weight:600;font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.zone-map-node-body{display:flex;justify-content:space-between;align-items:center}.zone-map-node-stat{display:flex;align-items:baseline;gap:4px}.zone-map-node-stat .stat-value{font-size:18px;font-weight:700;color:var(--accent)}.zone-map-node-stat .stat-label{font-size:10px;color:var(--text-dim)}.zone-map-node-health{display:flex;align-items:center;gap:6px}.health-dot{width:8px;height:8px;border-radius:50%}.coupling-indicator{font-size:12px}.coupling-indicator.high{color:var(--orange)}.coupling-indicator.mid{color:var(--text-dim)}.coupling-indicator.low{color:transparent}.zone-map-node-io{display:flex;justify-content:space-between;margin-top:8px;padding-top:8px;border-top:1px solid var(--border);font-size:11px;color:var(--text-dim)}.io-in,.io-out{display:flex;align-items:center;gap:2px}.zone-map-connections{border-top:1px solid var(--border);padding-top:16px}.zone-map-connections h5{font-size:12px;font-weight:600;color:var(--text-dim);margin-bottom:12px}.connection-list{display:flex;flex-direction:column;gap:8px}.connection-item{display:flex;align-items:center;gap:8px;font-size:12px;padding:6px 10px;background:var(--bg);border-radius:6px}.connection-item.bidirectional{background:color-mix(in srgb,var(--orange) 10%,var(--bg))}.connection-zone{padding:2px 8px;border-radius:4px;background:color-mix(in srgb,var(--zone-color) 20%,transparent);font-weight:500}.connection-arrow{color:var(--text-dim)}.connection-count{margin-left:auto;font-weight:600;color:var(--accent)}.connection-more{font-size:11px;color:var(--text-dim);font-style:italic;padding-left:10px}.health-gauge{display:flex;flex-direction:column;align-items:center}.health-gauge-value{font-size:14px;font-weight:700}.health-gauge-label{font-size:10px;color:var(--text-dim);margin-top:4px;text-align:center}.health-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600}.health-badge.health-good{background:color-mix(in srgb,var(--green) 20%,transparent);color:var(--green)}.health-badge.health-mid{background:color-mix(in srgb,var(--orange) 20%,transparent);color:var(--orange)}.health-badge.health-bad{background:color-mix(in srgb,var(--red) 20%,transparent);color:var(--red)}.pattern-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:500}.pattern-badge.pattern{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.pattern-badge.antipattern{background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--orange)}.pattern-icon{font-weight:700}.metric-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px;text-align:center}.metric-value{font-size:28px;font-weight:700;color:var(--accent);line-height:1}.metric-trend{font-size:14px;margin-left:4px}.metric-trend-up{color:var(--green)}.metric-trend-down{color:var(--red)}.metric-trend-neutral{color:var(--text-dim)}.metric-label{font-size:11px;color:var(--text-dim);margin-top:6px}.zone-detail-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.zone-detail-panel{background:var(--bg);border:1px solid var(--border);border-radius:12px;width:100%;max-width:500px;max-height:80vh;overflow-y:auto;padding:24px;box-shadow:0 8px 32px #0000004d}.zone-detail-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.zone-detail-header h3{font-size:18px;margin:0;color:var(--zone-color)}.close-btn{background:none;border:none;font-size:18px;color:var(--text-dim);cursor:pointer;padding:4px 8px;border-radius:4px}.close-btn:hover{background:var(--bg-hover);color:var(--text)}.zone-detail-desc{font-size:13px;color:var(--text-dim);margin-bottom:16px;line-height:1.5}.zone-detail-metrics{display:flex;gap:24px;margin-bottom:20px;padding:12px;background:var(--bg-surface);border-radius:8px}.zone-detail-metrics .metric{display:flex;flex-direction:column;align-items:center}.zone-detail-metrics .metric-val{font-size:20px;font-weight:700}.zone-detail-metrics .metric-lbl{font-size:10px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.zone-detail-section{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.zone-detail-section h4{font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.entry-point-list,.insight-list,.file-list{list-style:none;padding:0;margin:0}.entry-point-list li,.insight-list li{padding:4px 0;font-size:12px;color:var(--text)}.entry-point-list li.more,.insight-list li.more{color:var(--text-dim);font-style:italic}.dep-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.dep-col{display:flex;flex-direction:column;gap:6px}.dep-label{font-size:10px;color:var(--text-dim);font-weight:600;text-transform:uppercase}.dep-item{display:flex;justify-content:space-between;font-size:12px;padding:4px 8px;background:var(--bg-surface);border-radius:4px}.dep-count{font-weight:600;color:var(--accent)}.toggle-files-btn{background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;padding:8px 16px;font-size:12px;cursor:pointer;color:var(--text);width:100%}.toggle-files-btn:hover{border-color:var(--accent)}.file-list{margin-top:12px;max-height:200px;overflow-y:auto}.file-item{padding:4px 8px;border-radius:4px;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.file-item:hover{background:var(--bg-hover)}.entry-badge{font-size:9px;background:var(--accent);color:#fff;padding:1px 5px;border-radius:3px;font-weight:600}.overview-container{max-width:1200px}.overview-header{margin-bottom:24px}.overview-header h2{font-size:24px;margin-bottom:4px}.overview-meta{font-size:12px;color:var(--text-dim)}.overview-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:24px}.overview-section{margin-bottom:24px;padding:20px;background:var(--bg-surface);border:1px solid var(--border);border-radius:12px}.overview-section h3{font-size:14px;font-weight:600;margin-bottom:16px}.section-header-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.section-header-row h3{margin:0}.enrichment-badge{font-size:10px;padding:3px 8px;background:var(--accent-dim);color:var(--accent);border-radius:4px;font-weight:500}.health-row{display:flex;align-items:center;gap:32px;flex-wrap:wrap}.pattern-list{display:flex;flex-wrap:wrap;gap:8px;flex:1;min-width:200px}.overview-columns{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:24px}@media (max-width: 768px){.overview-columns{grid-template-columns:1fr}}.overview-col{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px}.overview-col h3{font-size:13px;font-weight:600;margin-bottom:16px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.top-zones-list{display:flex;flex-direction:column;gap:8px}.top-zone-item{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg);border-radius:8px;cursor:pointer;transition:background .15s}.top-zone-item:hover{background:var(--bg-hover)}.top-zone-item .zone-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.top-zone-item .zone-name{font-weight:500;font-size:13px;flex:1}.top-zone-item .zone-files{font-size:12px;color:var(--text-dim)}.attention-list{display:flex;flex-direction:column;gap:8px}.attention-item{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:var(--bg);border-radius:8px;border-left:3px solid var(--orange)}.attention-name{font-weight:500;font-size:13px}.attention-issues{display:flex;gap:6px}.issue-tag{font-size:10px;padding:2px 8px;background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--orange);border-radius:4px}.attention-more{font-size:12px;color:var(--text-dim);font-style:italic;padding-left:14px}.insight-item{padding:8px 12px;background:var(--bg-surface);border-radius:6px;font-size:13px;line-height:1.5;margin-bottom:6px}.insight-more{font-size:12px;color:var(--text-dim);font-style:italic;padding:8px 12px}.circular-dep-block{padding:10px 14px;background:color-mix(in srgb,var(--red) 10%,var(--bg));border-radius:6px;font-size:12px;font-family:monospace;margin-bottom:6px;overflow-x:auto;white-space:nowrap}.section-header{font-size:var(--font-3xl);font-weight:var(--weight-bold);margin-bottom:var(--space-4);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight)}.section-header-sm{font-size:var(--font-lg);font-weight:var(--weight-semibold);margin-bottom:var(--space-4)}.section-sub{font-size:var(--font-base);color:var(--text-dim);margin-bottom:var(--space-4)}.loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px;color:var(--text-dim)}.sidebar-progress{padding:8px 12px;margin:4px 0 2px;border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-normal)}.sidebar-progress:hover{background:var(--bg-hover)}.sidebar-progress:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.progress-label{font-size:11px;color:var(--text-dim);margin-bottom:6px}.progress-bar{height:3px;background:var(--border);border-radius:2px;overflow:hidden;margin-bottom:8px}.progress-fill{height:100%;background:var(--green);border-radius:2px;transition:width .3s ease}.progress-modules{display:flex;gap:8px}.progress-module{font-size:12px;color:var(--text-dim)}.progress-module.done{color:var(--green)}.progress-module.error{color:var(--red)}.header-buttons-wrapper{position:sticky;top:0;z-index:100;height:0;display:flex;justify-content:flex-end;pointer-events:none}.header-buttons{display:flex;gap:6px;padding:12px;pointer-events:all}.guide-btn,.theme-toggle-btn{width:28px;height:28px;border-radius:50%;border:1px solid var(--border);background:var(--bg-surface);color:var(--text-dim);font-size:var(--font-md);font-weight:var(--weight-semibold);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color var(--transition-normal),color var(--transition-normal),background var(--transition-normal)}.guide-btn:hover,.theme-toggle-btn:hover{border-color:var(--accent);color:var(--accent)}.guide-btn:active,.theme-toggle-btn:active{background:var(--bg-hover)}.guide-overlay{position:fixed;inset:0;background:#0c0e1acc;z-index:1000;display:flex;align-items:center;justify-content:center}[data-theme=light] .guide-overlay{background:#0006}.guide-modal{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;width:520px;max-width:90vw;max-height:80vh;overflow-y:auto}.guide-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border)}.guide-header h2{font-size:16px}.guide-close{background:none;border:none;color:var(--text-dim);font-size:18px;cursor:pointer}.guide-close:hover{color:var(--text)}.guide-body{padding:20px}.guide-body section{margin-bottom:16px}.guide-body h3{font-size:13px;font-weight:600;color:var(--accent);margin-bottom:4px}.guide-body p{font-size:13px;line-height:1.6;color:var(--text-dim)}.mono-sm{font-family:monospace;font-size:12px}.text-right{text-align:right}.text-dim{color:var(--text-dim)}.text-red{color:var(--red)}.text-orange{color:var(--orange)}.flex-row{display:flex;align-items:center;gap:8px}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mb-6{margin-bottom:6px}.mb-16{margin-bottom:16px}.empty-state{text-align:center;padding:16px}.zone-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.circular-dep-block{background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;padding:12px;margin-bottom:8px;font-size:12px;font-family:monospace}.chart-block{display:block;width:100%;max-width:600px;margin-bottom:16px}.skip-link{position:absolute;top:-40px;left:0;background:var(--text);color:var(--bg);padding:8px 16px;z-index:10000;font-size:13px;border-radius:0 0 6px;transition:top .15s}.skip-link:focus{top:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:focus-visible,.nav-item:focus-visible,.zone-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mobile-menu-btn{display:none}.prd-tree-container{padding:0 4px}.prd-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:8px}.prd-title{font-size:18px;font-weight:600}.prd-toolbar{display:flex;gap:6px}.prd-toolbar-btn{background:var(--bg-surface);border:1px solid var(--border);color:var(--text-dim);font-size:11px;padding:4px 10px;border-radius:4px;cursor:pointer;transition:border-color .15s,color .15s}.prd-toolbar-btn:hover{border-color:var(--accent);color:var(--text)}.prd-summary{margin-bottom:20px}.prd-summary-bar{display:flex;height:6px;border-radius:3px;overflow:hidden;background:var(--border);margin-bottom:8px}.prd-summary-segment{transition:width .3s ease;min-width:2px}.prd-status-bg-completed{background:var(--green)}.prd-status-bg-in_progress{background:var(--accent)}.prd-status-bg-pending{background:var(--text-dim);opacity:.4}.prd-status-bg-blocked{background:var(--red)}.prd-status-bg-deferred{background:var(--orange);opacity:.5}.prd-summary-stats{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--text-dim)}.prd-summary-stat{display:flex;align-items:center;gap:4px}.prd-summary-pct{margin-left:auto;font-weight:600;color:var(--text)}.prd-status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.prd-status-dot.prd-status-completed{background:var(--green)}.prd-status-dot.prd-status-in-progress{background:var(--accent)}.prd-status-dot.prd-status-pending{background:var(--text-dim);opacity:.4}.prd-status-dot.prd-status-blocked{background:var(--red)}.prd-status-dot.prd-status-deferred{background:var(--orange);opacity:.5}.prd-status-filter{display:flex;align-items:center;gap:8px;margin-bottom:16px;flex-wrap:wrap}.prd-status-filter-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);flex-shrink:0}.prd-status-filter-chips{display:flex;gap:4px;flex-wrap:wrap}.prd-status-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border:1px solid var(--border);border-radius:12px;background:var(--bg-surface);color:var(--text-dim);font-size:11px;cursor:pointer;transition:all .15s;opacity:.65}.prd-status-chip:hover{opacity:.9;border-color:var(--text-dim)}.prd-status-chip.active{opacity:1;font-weight:500}.prd-status-chip.active.prd-status-completed{background:color-mix(in srgb,var(--green) 15%,transparent);border-color:var(--green);color:var(--green)}.prd-status-chip.active.prd-status-in-progress{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:var(--accent);color:var(--accent)}.prd-status-chip.active.prd-status-pending{background:var(--bg-hover);border-color:var(--text-dim);color:var(--text-dim)}.prd-status-chip.active.prd-status-blocked{background:color-mix(in srgb,var(--red) 15%,transparent);border-color:var(--red);color:var(--red)}.prd-status-chip.active.prd-status-deferred{background:color-mix(in srgb,var(--orange) 15%,transparent);border-color:var(--orange);color:var(--orange)}.prd-status-chip.active.prd-status-deleted{background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red);color:var(--red);opacity:.7}.prd-status-chip-icon,.prd-status-chip-label{font-size:10px}.prd-status-filter-presets{display:flex;gap:4px;flex-wrap:wrap}.prd-status-preset{padding:3px 10px;border:1px solid var(--border);border-radius:4px;background:var(--bg-surface);color:var(--text-dim);font-size:10px;cursor:pointer;transition:all .15s}.prd-status-preset:hover{border-color:var(--accent);color:var(--text)}.prd-status-preset.active{background:color-mix(in srgb,var(--accent) 12%,transparent);border-color:var(--accent);color:var(--accent);font-weight:600}.prd-status-preset-custom{display:inline-flex;align-items:center;padding:3px 10px;border:1px dashed var(--text-dim);border-radius:4px;color:var(--text-dim);font-size:10px;font-style:italic;opacity:.7}.prd-status-deleted{color:var(--red);opacity:.5}.prd-status-bg-deleted,.prd-status-dot.prd-status-deleted{background:var(--red);opacity:.3}.prd-tree{border:1px solid var(--border);border-radius:8px;background:var(--bg-surface);overflow:hidden}.prd-node{position:relative}.prd-node-row{display:flex;align-items:center;gap:6px;padding:7px 12px;font-size:13px;border-bottom:1px solid var(--border);position:relative;transition:background-color .1s}.prd-node:last-child>.prd-node-row{border-bottom:none}.prd-node-row{cursor:pointer}.prd-node-expandable{user-select:none}.prd-node-row:hover{background:var(--bg-hover)}.prd-node-selected{background:color-mix(in srgb,var(--accent) 12%,transparent);border-left:2px solid var(--accent)}.prd-node-selected:hover{background:color-mix(in srgb,var(--accent) 18%,transparent)}.prd-chevron{width:14px;font-size:9px;color:var(--text-dim);text-align:center;flex-shrink:0;transition:transform .15s}.prd-chevron-open{transform:rotate(90deg)}.prd-status-icon{flex-shrink:0;font-size:12px;width:14px;text-align:center}.prd-status-completed{color:var(--green)}.prd-status-in-progress{color:var(--accent)}.prd-status-pending{color:var(--text-dim);opacity:.6}.prd-status-deferred{color:var(--orange);opacity:.6}.prd-status-blocked{color:var(--red)}.prd-level-badge{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:1px 5px;border-radius:3px;flex-shrink:0;background:var(--bg-hover);color:var(--text-dim)}.prd-level-badge.prd-level-epic{background:color-mix(in srgb,var(--purple) 20%,transparent);color:var(--purple)}.prd-level-badge.prd-level-feature{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}.prd-level-badge.prd-level-task{background:var(--bg-hover);color:var(--text-dim)}.prd-level-badge.prd-level-subtask{background:var(--bg-hover);color:var(--text-dim);opacity:.8}.prd-node-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.prd-level-epic>.prd-node-title{font-weight:600}.prd-priority-badge{font-size:10px;font-weight:600;padding:1px 6px;border-radius:3px;flex-shrink:0;text-transform:capitalize}.prd-priority-critical{background:color-mix(in srgb,var(--red) 20%,transparent);color:var(--red)}.prd-priority-high{background:color-mix(in srgb,var(--orange) 20%,transparent);color:var(--orange)}.prd-priority-medium{background:var(--bg-hover);color:var(--text-dim)}.prd-priority-low{background:var(--bg-hover);color:var(--text-dim);opacity:.7}.prd-progress-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.prd-progress-track{width:60px;height:4px;background:var(--border);border-radius:2px;overflow:hidden}.prd-progress-fill{height:100%;border-radius:2px;transition:width .3s ease}.prd-bar-done{background:var(--green)}.prd-bar-mid{background:var(--accent)}.prd-bar-low{background:var(--orange)}.prd-progress-pct{font-size:11px;color:var(--text-dim);font-weight:600;min-width:30px}.prd-count{font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:1px 6px;border-radius:3px;flex-shrink:0}.prd-tag-list{display:flex;gap:3px;flex-shrink:0}.prd-tag{font-size:10px;color:var(--text-dim);background:var(--bg-hover);padding:1px 5px;border-radius:2px}.prd-timestamp{font-size:11px;color:var(--text-dim);flex-shrink:0;font-style:italic}.prd-children{border-left:2px solid var(--border);margin-left:18px}.prd-empty{text-align:center;padding:40px 20px;color:var(--text-dim)}.prd-empty p{margin-bottom:8px}.prd-empty-hint{font-size:13px}.prd-empty-hint code{background:var(--bg-hover);padding:1px 6px;border-radius:3px;font-size:12px;color:var(--accent)}.task-meta-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.task-id{font-family:monospace;font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:1px 6px;border-radius:3px}.task-section{margin-bottom:16px}.task-section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);margin-bottom:6px}.task-status-selector{display:flex;flex-wrap:wrap;gap:4px}.task-status-btn{display:flex;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-surface);color:var(--text-dim);font-size:11px;cursor:pointer;transition:all .15s}.task-status-btn:hover{border-color:var(--text-dim);color:var(--text)}.task-status-btn.active{border-color:currentColor;font-weight:600}.task-status-btn.active.prd-status-completed{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green);border-color:var(--green)}.task-status-btn.active.prd-status-in_progress{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent);border-color:var(--accent)}.task-status-btn.active.prd-status-pending{background:var(--bg-hover);color:var(--text-dim);border-color:var(--text-dim)}.task-status-btn.active.prd-status-blocked{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red);border-color:var(--red)}.task-status-btn.active.prd-status-deferred{background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--orange);border-color:var(--orange)}.task-status-btn.active.prd-status-deleted{background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);border-color:var(--red);opacity:.7}.task-status-btn-icon,.task-status-btn-label{font-size:10px}.task-description{font-size:13px;line-height:1.5;color:var(--text);background:var(--bg-hover);padding:10px 12px;border-radius:6px;white-space:pre-wrap;word-break:break-word}.task-acceptance-criteria .task-criteria-list{list-style:none;padding:0;margin:0}.task-criterion{font-size:12px;color:var(--text);padding:5px 0 5px 20px;border-bottom:1px solid var(--border);position:relative}.task-criterion:last-child{border-bottom:none}.task-criterion:before{content:"\2610";position:absolute;left:0;color:var(--text-dim);font-size:12px}.task-priority-select{width:100%;padding:6px 10px;background:var(--bg-surface);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:12px;outline:none;cursor:pointer}.task-priority-select:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:-1px}.task-priority-select.prd-priority-critical{color:var(--red)}.task-priority-select.prd-priority-high{color:var(--orange)}.task-priority-select.prd-priority-medium{color:var(--text-dim)}.task-priority-select.prd-priority-low{color:var(--text-dim);opacity:.8}.task-tag-editor{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.task-tag{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:2px 6px;border-radius:3px}.task-tag-remove{background:none;border:none;color:var(--text-dim);font-size:12px;cursor:pointer;padding:0 1px;line-height:1;opacity:.6}.task-tag-remove:hover{opacity:1;color:var(--red)}.task-tag-add-btn{background:none;border:1px dashed var(--border);color:var(--text-dim);font-size:11px;padding:2px 6px;border-radius:3px;cursor:pointer}.task-tag-add-btn:hover{border-color:var(--accent);color:var(--accent)}.task-tag-input-wrapper{display:inline-flex;align-items:center;gap:2px}.task-tag-input{width:80px;padding:2px 6px;background:var(--bg-surface);border:1px solid var(--accent);border-radius:3px;color:var(--text);font-size:11px;outline:none}.task-tag-input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.task-tag-confirm{background:none;border:none;color:var(--accent);font-size:12px;cursor:pointer;padding:0 2px}.task-dependency-list{display:flex;flex-direction:column;gap:4px}.task-dependency-item{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;font-size:12px;cursor:pointer;transition:background-color .1s}.task-dependency-item:hover{background:var(--bg-hover)}.task-dependency-item.resolved{opacity:.6}.task-dep-status{flex-shrink:0;font-size:10px}.task-dep-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-children-list{display:flex;flex-direction:column;gap:2px}.task-child-item{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;font-size:12px;cursor:pointer;transition:background-color .1s}.task-child-item:hover{background:var(--bg-hover)}.task-child-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-timestamps .detail-row{font-size:12px}.rex-command-bar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.rex-command-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;color:var(--text-dim);font-size:12px;font-weight:500;cursor:pointer;transition:all .15s}.rex-command-btn:hover{border-color:var(--accent);color:var(--text)}.rex-command-btn.active{background:color-mix(in srgb,var(--accent) 12%,transparent);border-color:var(--accent);color:var(--accent)}.rex-toast{position:fixed;bottom:20px;left:50%;transform:translate(-50%);background:var(--green);color:#fff;padding:8px 20px;border-radius:6px;font-size:13px;font-weight:500;z-index:1000;animation:rex-toast-in .2s ease;box-shadow:0 4px 12px #0000004d}@keyframes rex-toast-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.rex-add-form{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px;margin-bottom:16px}.rex-add-form-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.rex-add-form-title{font-size:14px;font-weight:600}.rex-add-form-close{background:none;border:none;color:var(--text-dim);font-size:18px;cursor:pointer;padding:0 4px;line-height:1}.rex-add-form-close:hover{color:var(--text)}.rex-add-form-error{background:color-mix(in srgb,var(--red) 15%,transparent);border:1px solid var(--red);border-radius:4px;color:var(--red);padding:8px 12px;font-size:12px;margin-bottom:12px}.rex-add-form-field{margin-bottom:12px}.rex-add-form-label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);margin-bottom:5px}.rex-add-form-optional{font-weight:400;text-transform:none;letter-spacing:0}.rex-add-form-level-group{display:flex;gap:4px}.rex-add-form-level-btn{flex:1;padding:6px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-surface);color:var(--text-dim);font-size:11px;font-weight:600;cursor:pointer;text-transform:uppercase;letter-spacing:.5px;transition:all .15s}.rex-add-form-level-btn:hover{border-color:var(--text-dim);color:var(--text)}.rex-add-form-level-btn.active.prd-level-epic{background:color-mix(in srgb,var(--purple) 20%,transparent);border-color:var(--purple);color:var(--purple)}.rex-add-form-level-btn.active.prd-level-feature{background:color-mix(in srgb,var(--accent) 20%,transparent);border-color:var(--accent);color:var(--accent)}.rex-add-form-level-btn.active.prd-level-task,.rex-add-form-level-btn.active.prd-level-subtask{background:var(--bg-hover);border-color:var(--text-dim);color:var(--text)}.rex-add-form-input,.rex-add-form-textarea,.rex-add-form-select{width:100%;padding:8px 10px;background:var(--bg-hover);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:13px;font-family:inherit;outline:none;box-sizing:border-box}.rex-add-form-input:focus-visible,.rex-add-form-textarea:focus-visible,.rex-add-form-select:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:-1px}.rex-add-form-textarea{resize:vertical;min-height:60px}.rex-add-form-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.rex-add-form-btn{padding:7px 16px;border:1px solid var(--border);border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s}.rex-add-form-btn-cancel{background:var(--bg-surface);color:var(--text-dim)}.rex-add-form-btn-cancel:hover{border-color:var(--text-dim);color:var(--text)}.rex-add-form-btn-submit{background:var(--accent);border-color:var(--accent);color:#fff}.rex-add-form-btn-submit:hover{opacity:.9}.rex-add-form-btn-submit:disabled{opacity:.5;cursor:not-allowed}.rex-analyze-panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px;margin-bottom:16px}.rex-analyze-header{margin-bottom:12px}.rex-analyze-title{font-size:14px;font-weight:600}.rex-analyze-controls{display:flex;align-items:center;gap:12px;margin-bottom:12px}.rex-analyze-checkbox-label{font-size:12px;color:var(--text-dim);display:flex;align-items:center;gap:4px;cursor:pointer}.rex-analyze-btn{padding:7px 16px;border:1px solid var(--border);border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s}.rex-analyze-btn-run{background:var(--accent);border-color:var(--accent);color:#fff;margin-left:auto}.rex-analyze-btn-run:hover{opacity:.9}.rex-analyze-btn-run:disabled{opacity:.5;cursor:not-allowed}.rex-analyze-progress{display:flex;align-items:center;gap:10px;padding:12px;background:color-mix(in srgb,var(--accent) 8%,transparent);border-radius:6px;font-size:13px;color:var(--text);margin-bottom:12px}.rex-analyze-spinner{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:rex-spin .6s linear infinite;flex-shrink:0}@keyframes rex-spin{to{transform:rotate(360deg)}}.rex-analyze-error{background:color-mix(in srgb,var(--red) 15%,transparent);border:1px solid var(--red);border-radius:4px;color:var(--red);padding:8px 12px;font-size:12px;margin-bottom:12px}.rex-analyze-empty{text-align:center;padding:20px;color:var(--text-dim)}.rex-analyze-empty p{margin-bottom:4px}.rex-analyze-hint{font-size:12px}.rex-analyze-selection{display:flex;align-items:center;gap:8px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--border)}.rex-analyze-count{font-size:12px;color:var(--text-dim);font-weight:500}.rex-analyze-select-btn{background:none;border:none;color:var(--accent);font-size:11px;cursor:pointer;padding:2px 4px}.rex-analyze-select-btn:hover{text-decoration:underline}.rex-analyze-proposals{display:flex;flex-direction:column;gap:6px;max-height:400px;overflow-y:auto;margin-bottom:12px}.rex-proposal-card{border:1px solid var(--border);border-radius:6px;overflow:hidden;transition:border-color .15s}.rex-proposal-card.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,transparent)}.rex-proposal-header{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;font-size:13px}.rex-proposal-header:hover{background:var(--bg-hover)}.rex-proposal-info{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.rex-proposal-title{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rex-proposal-count{font-size:11px;color:var(--text-dim);white-space:nowrap;flex-shrink:0}.rex-proposal-expand{background:none;border:none;color:var(--text-dim);font-size:9px;cursor:pointer;padding:4px;transition:transform .15s}.rex-proposal-expand.open{transform:rotate(90deg)}.rex-proposal-details{padding:0 10px 10px 36px;border-top:1px solid var(--border)}.rex-proposal-desc{font-size:12px;color:var(--text-dim);margin:8px 0;line-height:1.4}.rex-proposal-feature{margin-top:8px}.rex-proposal-feature-header{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;margin-bottom:4px}.rex-proposal-tasks{padding-left:16px}.rex-proposal-task{display:flex;align-items:center;gap:6px;font-size:12px;padding:2px 0;color:var(--text-dim)}.rex-proposal-task-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rex-analyze-accept-bar{display:flex;justify-content:flex-end}.rex-analyze-btn-accept{background:var(--green);border-color:var(--green);color:#fff}.rex-analyze-btn-accept:hover{opacity:.9}.rex-analyze-btn-accept:disabled{opacity:.5;cursor:not-allowed}.rex-bulk-bar{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:var(--bg-surface);border:1px solid var(--accent);border-radius:10px;padding:8px 16px;box-shadow:0 8px 24px #0006;z-index:100;animation:rex-toast-in .2s ease}.rex-bulk-count{font-size:12px;color:var(--text);white-space:nowrap}.rex-bulk-count-num{font-weight:700;color:var(--accent);margin-right:2px}.rex-bulk-label{font-size:11px;color:var(--text-dim);white-space:nowrap}.rex-bulk-actions{display:flex;align-items:center;gap:4px}.rex-bulk-action-btn{display:flex;align-items:center;gap:3px;padding:4px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-surface);color:var(--text-dim);font-size:11px;cursor:pointer;transition:all .15s;white-space:nowrap}.rex-bulk-action-btn:hover{border-color:currentColor;color:var(--text)}.rex-bulk-action-btn.prd-status-completed:hover{color:var(--green);border-color:var(--green)}.rex-bulk-action-btn.prd-status-in_progress:hover{color:var(--accent);border-color:var(--accent)}.rex-bulk-action-btn.prd-status-blocked:hover{color:var(--red);border-color:var(--red)}.rex-bulk-action-btn.prd-status-deferred:hover{color:var(--orange);border-color:var(--orange)}.rex-bulk-action-icon,.rex-bulk-action-label{font-size:10px}.rex-bulk-result{font-size:12px;color:var(--green);font-weight:500}.rex-bulk-clear{background:none;border:none;color:var(--text-dim);font-size:16px;cursor:pointer;padding:0 2px;line-height:1;margin-left:4px}.rex-bulk-clear:hover{color:var(--text)}.rex-dashboard{max-width:1200px}.rex-dashboard-header{display:flex;flex-direction:column;margin-bottom:var(--space-4);gap:var(--space-1)}.rex-dashboard-title-row{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--space-2)}.rex-dashboard-header h2{font-size:var(--font-3xl);font-weight:var(--weight-bold);margin:0;line-height:var(--leading-tight)}.rex-dashboard-meta{font-size:14px;font-weight:600;color:var(--accent)}.rex-dashboard-completion{margin-bottom:24px}.rex-dashboard-completion-bar{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.rex-dashboard-completion-fill{height:100%;background:var(--green);border-radius:4px;transition:width .4s ease}.rex-dashboard-columns{display:grid;grid-template-columns:1fr 340px;gap:24px;margin-top:24px}@media (max-width: 900px){.rex-dashboard-columns{grid-template-columns:1fr}}.rex-dashboard-epics{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px}.rex-dashboard-epics h3{font-size:13px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px}.rex-dashboard-epic-list{display:flex;flex-direction:column;gap:12px}.rex-dashboard-epic-item{padding:12px 14px;background:var(--bg);border-radius:8px;transition:background .15s}.rex-dashboard-epic-item:hover{background:var(--bg-hover)}.rex-dashboard-epic-item.completed{opacity:.6}.rex-dashboard-epic-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.rex-dashboard-epic-link{flex:1;min-width:0;padding:2px 4px;margin:-2px -4px;font-size:13px}.rex-dashboard-epic-title{flex:1;font-weight:500;font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rex-dashboard-epic-pct{font-size:13px;font-weight:600;color:var(--text-dim);flex-shrink:0}.rex-dashboard-epic-bar{display:flex;align-items:center;gap:10px}.rex-dashboard-epic-track{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}.rex-dashboard-epic-fill{height:100%;border-radius:3px;background:var(--orange);transition:width .3s ease}.rex-dashboard-epic-fill.mid{background:var(--accent)}.rex-dashboard-epic-fill.done{background:var(--green)}.rex-dashboard-epic-count{font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:1px 6px;border-radius:3px;flex-shrink:0}.rex-dashboard-empty-hint{font-size:13px;color:var(--text-dim);text-align:center;padding:20px}.rex-dashboard-sidebar{display:flex;flex-direction:column;gap:20px}.rex-dashboard-next{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px}.rex-dashboard-next h3{font-size:13px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}.rex-dashboard-next-card{padding:14px;background:color-mix(in srgb,var(--accent) 6%,var(--bg));border:1px solid color-mix(in srgb,var(--accent) 25%,var(--border));border-radius:8px;transition:border-color .15s,background .15s}.rex-dashboard-next-card:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.rex-dashboard-next-link{font-size:14px;font-weight:600;padding:2px 0;margin-bottom:4px}.rex-dashboard-next-header{display:flex;align-items:center;gap:6px;margin-bottom:8px}.rex-dashboard-next-title{font-weight:600;font-size:14px;line-height:1.4;margin-bottom:6px}.rex-dashboard-next-desc{font-size:12px;color:var(--text-dim);line-height:1.5;margin-bottom:6px}.rex-dashboard-next-tags{display:flex;flex-wrap:wrap;gap:4px}.rex-dashboard-next-empty{font-size:13px;color:var(--text-dim);text-align:center;padding:16px;background:var(--bg);border-radius:8px}.rex-dashboard-priorities{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px}.rex-dashboard-priorities h3{font-size:13px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}.rex-dashboard-priority-bars{display:flex;flex-direction:column;gap:8px}.rex-dashboard-priority-row{display:flex;align-items:center;gap:10px}.rex-dashboard-priority-label{font-size:12px;color:var(--text-dim);width:60px;flex-shrink:0}.rex-dashboard-priority-track{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}.rex-dashboard-priority-fill{height:100%;border-radius:3px;transition:width .3s ease}.rex-dashboard-priority-count{font-size:12px;font-weight:600;color:var(--text-dim);width:24px;text-align:right;flex-shrink:0}.rex-dashboard-status-summary{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:20px}.rex-dashboard-status-summary h3{font-size:13px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}.rex-dashboard-status-summary .prd-summary-stats{flex-direction:column;align-items:flex-start;gap:6px}.rex-analysis-view{max-width:820px}.rex-analysis-view-header{margin-bottom:20px}.rex-analysis-view-header h2{font-size:20px;font-weight:600;margin-bottom:4px}.rex-analysis-view-subtitle{font-size:13px;color:var(--text-dim);line-height:1.5}.rex-analysis-history{margin-top:24px}.rex-analysis-history-title{font-size:14px;font-weight:600;margin-bottom:12px}.rex-analysis-history-empty{font-size:13px;color:var(--text-dim);padding:12px 0}.rex-analysis-history-list{display:flex;flex-direction:column;gap:2px}.rex-analysis-history-entry{display:flex;align-items:baseline;gap:10px;padding:6px 8px;border-radius:4px;font-size:12px;transition:background .1s}.rex-analysis-history-entry:hover{background:var(--bg-hover)}.rex-analysis-history-time{color:var(--text-dim);font-size:11px;white-space:nowrap;min-width:100px;flex-shrink:0}.rex-analysis-history-event{font-weight:500;white-space:nowrap;flex-shrink:0}.rex-analysis-history-event.success{color:var(--green)}.rex-analysis-history-event.error{color:var(--red)}.rex-analysis-history-event.running{color:var(--accent)}.rex-analysis-history-detail{color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.token-usage-container{max-width:1200px;position:relative}.token-header{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:16px;margin-bottom:24px}.token-header h2{font-size:24px;margin:0}.token-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.filter-label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-dim)}.filter-label .filter-input{flex:none;width:auto;padding:5px 8px;font-size:12px}.btn{padding:6px 14px;background:var(--accent);color:var(--bg);border:none;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:opacity .15s}.btn:hover{opacity:.85}.btn-small{padding:4px 10px;font-size:11px}.token-metrics{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.budget-alert{padding:12px 20px;border-radius:8px;margin-bottom:20px;font-size:13px;line-height:1.5}.budget-alert strong{display:block;margin-bottom:4px}.budget-alert p{margin:2px 0 0}.budget-alert-warning{background:color-mix(in srgb,var(--orange) 12%,var(--bg-surface));border:1px solid color-mix(in srgb,var(--orange) 40%,var(--border));color:var(--orange)}.budget-alert-exceeded{background:color-mix(in srgb,var(--red) 12%,var(--bg-surface));border:1px solid color-mix(in srgb,var(--red) 40%,var(--border));color:var(--red)}.token-section{margin-bottom:24px;padding:20px;background:var(--bg-surface);border:1px solid var(--border);border-radius:12px}.token-section h3{font-size:14px;font-weight:600;margin-bottom:16px}.budget-indicators{display:flex;gap:24px;flex-wrap:wrap}.budget-indicator{flex:1;min-width:240px}.budget-header{display:flex;justify-content:space-between;margin-bottom:6px}.budget-label{font-size:12px;font-weight:500;color:var(--text-dim)}.budget-pct{font-size:12px;font-weight:600}.budget-ok{color:var(--green)}.budget-warning{color:var(--orange)}.budget-exceeded{color:var(--red)}.budget-track{position:relative;height:8px;background:var(--bg);border-radius:4px;overflow:hidden}.budget-fill{height:100%;border-radius:4px;transition:width .3s ease}.budget-bar-ok{background:var(--green)}.budget-bar-warning{background:var(--orange)}.budget-bar-exceeded{background:var(--red)}.budget-threshold{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--text-dim);opacity:.5}.budget-detail{margin-top:4px;font-size:11px;color:var(--text-dim)}.period-toggle{display:flex;gap:2px;background:var(--bg);border-radius:6px;padding:2px}.toggle-btn{padding:5px 14px;border:none;background:transparent;color:var(--text-dim);border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s}.toggle-btn:hover{color:var(--text)}.toggle-btn.active{background:var(--accent);color:var(--bg)}.period-chart-container{overflow-x:auto;margin:0 -4px;padding:0 4px}.period-chart{width:100%;min-height:200px}.chart-axis-label{font-size:10px;fill:var(--text-dim)}.chart-legend{display:flex;gap:16px;justify-content:center;margin-top:12px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-dim)}.legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.pkg-breakdown{display:flex;align-items:center;gap:24px;flex-wrap:wrap}.donut-chart{flex-shrink:0}.donut-total{font-size:18px;font-weight:700;fill:var(--text)}.donut-label{font-size:10px;fill:var(--text-dim)}.pkg-details{display:flex;flex-direction:column;gap:10px;flex:1;min-width:140px}.pkg-row{display:flex;align-items:center;gap:8px;font-size:13px}.pkg-name{font-weight:500;flex:1}.pkg-tokens{font-family:monospace;font-size:12px;color:var(--text)}.pkg-pct{font-size:11px;color:var(--text-dim);min-width:30px;text-align:right}.token-table-wrapper{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.token-table{width:100%;border-collapse:collapse;font-size:13px}.token-table th{text-align:left;padding:8px 12px;border-bottom:2px solid var(--border);color:var(--text-dim);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.token-table th.num,.token-table td.num{text-align:right;font-family:monospace;font-size:12px}.token-table td{padding:6px 12px;border-bottom:1px solid var(--border)}.token-table tr:hover td{background:var(--bg-hover)}.pkg-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:600;color:var(--bg);letter-spacing:.02em}.cost-breakdown{display:flex;flex-direction:column;gap:12px}.cost-item{display:flex;align-items:center;gap:16px;padding:10px 14px;background:var(--bg);border-radius:8px}.cost-item.cost-total{border-top:2px solid var(--border);background:var(--bg-hover);font-weight:600}.cost-label{font-size:13px;min-width:120px}.cost-value{font-family:monospace;font-size:14px;color:var(--green);min-width:80px}.cost-detail{font-size:11px;color:var(--text-dim);flex:1}.token-empty{padding:32px;text-align:center;color:var(--text-dim);font-size:13px;font-style:italic}.token-error{padding:48px;text-align:center;max-width:400px;margin:0 auto}.token-error h3{color:var(--red);margin-bottom:8px}.token-error p{color:var(--text-dim);font-size:13px;margin-bottom:16px}.token-loading-overlay{position:absolute;top:0;right:0;padding:4px 12px;background:var(--bg-surface);border:1px solid var(--border);border-radius:0 0 0 8px;font-size:11px;color:var(--text-dim)}@media (max-width: 768px){.token-header{flex-direction:column}.token-controls{width:100%}.budget-indicators{flex-direction:column}.pkg-breakdown{flex-direction:column;align-items:center}.token-table{font-size:11px}.token-table th,.token-table td{padding:4px 8px}}.val-container{padding:0 4px;max-width:1200px}.val-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.val-title{font-size:18px;font-weight:600;margin:0}.val-tabs{display:flex;gap:4px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;padding:3px}.val-tab{background:transparent;border:none;color:var(--text-dim);font-size:12px;padding:6px 14px;border-radius:4px;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.val-tab:hover{background:var(--bg-hover);color:var(--text)}.val-tab.active{background:var(--accent);color:var(--bg);font-weight:600}.val-panel{animation:val-fade-in .2s ease}@keyframes val-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.val-actions{display:flex;align-items:center;gap:16px;margin-bottom:20px}.val-run-btn{background:var(--accent);color:var(--bg);border:none;padding:8px 20px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:opacity .15s;white-space:nowrap}.val-run-btn:hover{opacity:.9}.val-run-btn:disabled{opacity:.5;cursor:not-allowed}.val-actions-hint{color:var(--text-dim);font-size:12px;margin:0}.val-error{background:#d52e661a;border:1px solid var(--red);color:var(--red);padding:10px 14px;border-radius:6px;font-size:13px;margin-bottom:16px}.val-placeholder{text-align:center;padding:40px 20px;color:var(--text-dim);font-size:14px}.val-summary{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin-bottom:16px;padding:12px 16px;background:var(--bg-surface);border:1px solid var(--border);border-radius:8px}.val-summary-badge{font-size:14px;font-weight:600;padding:4px 12px;border-radius:4px;white-space:nowrap}.val-summary-badge.val-pass{background:#00bd8126;color:var(--green)}.val-summary-badge.val-fail{background:#d52e6626;color:var(--red)}.val-summary-stats{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:var(--text-dim)}.val-stat-num{font-weight:600;margin-right:3px}.val-stat-num.val-stat-passed{color:var(--green)}.val-stat-num.val-stat-failed{color:var(--red)}.val-stat-num.val-stat-warnings{color:var(--orange)}.val-checks{display:flex;flex-direction:column;gap:8px}.val-check{background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;overflow:hidden;transition:border-color .15s}.val-check-pass{border-left:3px solid var(--green)}.val-check-fail{border-left:3px solid var(--red)}.val-check-warn{border-left:3px solid var(--orange)}.val-check-header{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:default}.val-check-header[role=button]{cursor:pointer}.val-check-header[role=button]:hover{background:var(--bg-hover)}.val-check-icon{font-size:14px;flex-shrink:0}.val-check-pass .val-check-icon{color:var(--green)}.val-check-fail .val-check-icon{color:var(--red)}.val-check-warn .val-check-icon{color:var(--orange)}.val-check-name{font-size:13px;font-weight:500;color:var(--text);flex:1}.val-check-count{font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:2px 8px;border-radius:10px}.val-check-chevron{font-size:10px;color:var(--text-dim);transition:transform .15s}.val-check-errors{border-top:1px solid var(--border);padding:4px 0}.val-error-item{display:flex;align-items:center;gap:8px;padding:8px 14px 8px 38px;font-size:12px;color:var(--text-dim);transition:background .15s}.val-error-item.val-error-clickable{cursor:pointer}.val-error-item.val-error-clickable:hover{background:var(--bg-hover);color:var(--text)}.val-error-msg{flex:1;min-width:0}.val-error-item-title{color:var(--accent);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.val-error-item-id{font-family:monospace;font-size:10px;color:var(--text-dim);opacity:.7}.dep-panel{animation:val-fade-in .2s ease}.dep-stats{display:flex;align-items:center;flex-wrap:wrap;gap:20px;margin-bottom:16px;padding:10px 16px;background:var(--bg-surface);border:1px solid var(--border);border-radius:8px}.dep-stat{display:flex;align-items:baseline;gap:4px}.dep-stat-num{font-size:20px;font-weight:700;color:var(--text)}.dep-stat-label{font-size:12px;color:var(--text-dim)}.dep-stat-warn .dep-stat-num{color:var(--orange)}.dep-refresh-btn{margin-left:auto;background:var(--bg-surface);border:1px solid var(--border);color:var(--text-dim);font-size:12px;padding:4px 12px;border-radius:4px;cursor:pointer;transition:border-color .15s,color .15s}.dep-refresh-btn:hover{border-color:var(--accent);color:var(--text)}.dep-graph-container{position:relative;margin-bottom:20px;background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.dep-graph-svg{display:block}.dep-edge{fill:none;stroke:var(--text-dim);stroke-width:1.5;opacity:.5;transition:opacity .15s}.dep-edge-resolved{stroke:var(--brand-teal);stroke-dasharray:6 3;opacity:.4}.dep-edge-cycle{stroke:var(--brand-orange);stroke-width:2;opacity:.8;stroke-dasharray:4 4}.dep-node{cursor:pointer;transition:opacity .15s}.dep-node:hover{opacity:.85}.dep-node-circle{fill:var(--bg-hover);stroke:var(--border);stroke-width:2;transition:fill .15s,stroke .15s}.dep-node-selected .dep-node-circle{stroke:var(--accent);stroke-width:3}.dep-node-completed .dep-node-circle{fill:#00bd8133;stroke:var(--green)}.dep-node-in_progress .dep-node-circle{fill:#6c41f033;stroke:var(--purple)}.dep-node-blocked .dep-node-circle{fill:#d52e6633;stroke:var(--red)}.dep-node-pending .dep-node-circle{fill:var(--bg-hover);stroke:var(--border)}.dep-node-cycle .dep-node-circle{stroke:var(--orange);stroke-width:2.5}.dep-node-cycle-ring{stroke:var(--orange);stroke-width:1.5;stroke-dasharray:3 3;opacity:.6}.dep-node-label{fill:var(--text);font-size:10px;pointer-events:none}.dep-node-status-icon{fill:var(--text-dim);font-size:12px;pointer-events:none}.dep-node-completed .dep-node-status-icon{fill:var(--green)}.dep-node-in_progress .dep-node-status-icon{fill:var(--purple)}.dep-node-blocked .dep-node-status-icon{fill:var(--red)}.dep-node-detail{padding:12px 16px;border-top:1px solid var(--border);background:var(--bg)}.dep-detail-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.dep-detail-title{font-weight:600;font-size:14px;color:var(--text)}.dep-detail-id{font-family:monospace;font-size:11px;color:var(--text-dim);opacity:.7;margin-bottom:8px}.dep-detail-deps{font-size:12px;color:var(--text-dim);margin-bottom:8px;display:flex;align-items:center;flex-wrap:wrap;gap:6px}.dep-detail-label{font-weight:500}.dep-detail-dep-link{color:var(--accent);cursor:pointer;font-weight:500;padding:2px 6px;background:#00e5b914;border-radius:3px;transition:background .15s}.dep-detail-dep-link:hover{background:#00e5b926}.dep-detail-nav-btn{background:transparent;border:1px solid var(--border);color:var(--accent);font-size:12px;padding:4px 12px;border-radius:4px;cursor:pointer;transition:border-color .15s,background .15s}.dep-detail-nav-btn:hover{border-color:var(--accent);background:#00e5b914}.dep-legend{display:flex;flex-wrap:wrap;gap:16px;padding:8px 16px;background:var(--bg-surface);border:1px solid var(--border);border-radius:6px;margin-bottom:20px;font-size:11px;color:var(--text-dim)}.dep-legend-item{display:flex;align-items:center;gap:6px}.dep-legend-line{display:inline-block;width:24px;height:2px}.dep-legend-resolved{background:var(--brand-teal);opacity:.6}.dep-legend-unresolved{background:var(--text-dim);opacity:.5}.dep-legend-cycle{background:var(--brand-orange);background-image:repeating-linear-gradient(90deg,var(--brand-orange) 0px,var(--brand-orange) 4px,transparent 4px,transparent 8px)}.dep-empty{text-align:center;padding:40px 20px;color:var(--text-dim)}.dep-empty-icon{font-size:32px;color:var(--green);margin-bottom:12px}.dep-empty-hint{font-size:12px;opacity:.7}.dep-details-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}@media (max-width: 800px){.dep-details-grid{grid-template-columns:1fr}}.dep-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0 0 4px}.dep-section-desc{font-size:12px;color:var(--text-dim);margin:0 0 12px}.dep-blockers{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:14px}.dep-blocker-list{display:flex;flex-direction:column;gap:6px}.dep-blocker-item{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--bg);border-radius:4px;cursor:pointer;transition:background .15s}.dep-blocker-item:hover{background:var(--bg-hover)}.dep-blocker-count{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;background:#d52e6626;color:var(--red);font-weight:700;font-size:13px;border-radius:50%;flex-shrink:0}.dep-blocker-title{font-size:13px;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dep-blocker-id{font-family:monospace;font-size:10px;color:var(--text-dim);opacity:.7}.dep-chains{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:14px}.dep-chain-list{display:flex;flex-direction:column;gap:10px}.dep-chain{padding:8px 10px;background:var(--bg);border-radius:4px}.dep-chain-length{display:inline-block;font-size:10px;font-weight:600;color:var(--text-dim);background:var(--bg-hover);padding:2px 8px;border-radius:10px;margin-bottom:6px}.dep-chain-path{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.dep-chain-arrow{color:var(--text-dim);font-size:11px;opacity:.6}.dep-chain-node{font-size:11px;padding:2px 8px;border-radius:3px;cursor:pointer;transition:background .15s;white-space:nowrap}.dep-chain-node:hover{opacity:.8}.dep-chain-node-completed{background:#00bd8126;color:var(--green)}.dep-chain-node-in_progress{background:#6c41f026;color:var(--purple)}.dep-chain-node-pending{background:var(--bg-hover);color:var(--text-dim)}.dep-chain-node-blocked{background:#d52e6626;color:var(--red)}.hench-runs-container{max-width:1200px}.hench-runs-header{display:flex;flex-direction:column;margin-bottom:var(--space-4);gap:var(--space-1)}.hench-runs-title-row{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--space-2)}.hench-runs-header h2{font-size:var(--font-3xl);font-weight:var(--weight-bold);margin:0;line-height:var(--leading-tight)}.hench-runs-count{font-size:var(--font-md);color:var(--text-dim)}.hench-metrics{margin-bottom:16px}.hench-filter-bar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.hench-filter-count{font-weight:400;opacity:.7}.hench-runs-list{display:flex;flex-direction:column;gap:8px}.hench-run-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;cursor:pointer;transition:border-color .15s,background .15s}.hench-run-card:hover{border-color:var(--accent);background:var(--bg-hover)}.hench-run-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hench-run-card.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--bg-surface))}.hench-run-card.failed{border-left:3px solid var(--red)}.hench-run-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.hench-run-status{flex-shrink:0;font-size:14px}.hench-run-title{flex:1;font-weight:500;font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hench-run-task-link{flex:1;min-width:0;padding:1px 4px;margin:-1px 0;font-size:13px}.hench-run-time{font-size:12px;color:var(--text-dim);flex-shrink:0}.hench-run-meta{display:flex;flex-wrap:wrap;gap:6px;padding-left:22px}.hench-run-chip{font-size:11px;color:var(--text-dim);background:var(--bg-hover);padding:2px 8px;border-radius:4px}.hench-run-model{font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px;background:var(--bg-hover);color:var(--text-dim)}.hench-run-model-sonnet{color:var(--brand-teal)}.hench-run-model-opus{color:var(--brand-purple)}.hench-run-model-haiku{color:var(--brand-orange)}.hench-no-results{text-align:center;color:var(--text-dim);padding:24px;font-size:13px}.hench-empty{text-align:center;padding:60px 20px;color:var(--text-dim)}.hench-empty-icon{font-size:48px;margin-bottom:16px;opacity:.3}.hench-empty p{margin:4px 0;font-size:14px}.hench-empty-hint{font-size:12px!important;color:var(--text-dim);opacity:.7}.hench-empty code{font-family:monospace;background:var(--bg-hover);padding:2px 6px;border-radius:3px}.hench-run-detail{max-width:800px}.hench-detail-header{margin-bottom:24px}.hench-back-btn{background:none;border:1px solid var(--border);color:var(--text);padding:6px 12px;border-radius:6px;cursor:pointer;font-size:12px;margin-bottom:16px;transition:border-color .15s,background .15s}.hench-back-btn:hover{border-color:var(--accent);background:var(--bg-hover)}.hench-detail-title-row{display:flex;align-items:center;gap:10px}.hench-detail-title-row h2{font-size:20px;margin:0}.hench-detail-info{background:var(--bg-surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;margin-bottom:20px}.hench-info-row{display:flex;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--border)}.hench-info-row:last-child{border-bottom:none}.hench-info-label{font-size:12px;color:var(--text-dim);width:100px;flex-shrink:0}.hench-info-value{font-size:13px;font-weight:500}.hench-info-mono{font-family:monospace;font-size:11px;font-weight:400;word-break:break-all}.hench-detail-section{margin-bottom:20px}.hench-detail-section h3{font-size:13px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}.hench-activity-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:10px}.hench-activity-item{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:12px;text-align:center}.hench-activity-val{display:block;font-size:20px;font-weight:700;color:var(--accent)}.hench-activity-label{display:block;font-size:11px;color:var(--text-dim);margin-top:2px}.hench-token-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.hench-token-item{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:12px;text-align:center}.hench-token-val{display:block;font-size:18px;font-weight:700;color:var(--brand-teal)}.hench-token-label{display:block;font-size:11px;color:var(--text-dim);margin-top:2px}.hench-error-box{background:color-mix(in srgb,var(--red) 8%,var(--bg-surface));border:1px solid color-mix(in srgb,var(--red) 25%,var(--border));border-radius:8px;padding:14px;font-size:12px;font-family:monospace;white-space:pre-wrap;word-break:break-word;color:var(--red);overflow-x:auto;margin:0}.hench-detail-task-section{margin-bottom:20px}.hench-detail-task-card{background:color-mix(in srgb,var(--accent) 6%,var(--bg));border:1px solid color-mix(in srgb,var(--accent) 25%,var(--border));border-radius:8px;padding:12px 14px}.hench-detail-task-id{font-family:monospace;font-size:10px;color:var(--text-dim);margin-top:6px;opacity:.7;word-break:break-all}.hench-summary-box{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:16px;font-size:12px;font-family:monospace;white-space:pre-wrap;word-break:break-word;line-height:1.6;overflow-x:auto;max-height:600px;overflow-y:auto;margin:0}@media (max-width: 700px){.hench-run-meta{padding-left:0}.hench-info-label{width:80px}.hench-activity-grid,.hench-token-grid{grid-template-columns:repeat(2,1fr)}}.rex-task-link{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:6px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text);background:transparent;transition:background .15s,color .15s;text-decoration:none;max-width:100%;line-height:1.3}.rex-task-link:hover{background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent)}.rex-task-link:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:6px}.rex-task-link:active{background:color-mix(in srgb,var(--accent) 16%,transparent)}.rex-task-link-compact{padding:2px 6px;font-size:12px;gap:4px}.rex-task-link-status{flex-shrink:0;font-size:11px;width:14px;text-align:center}.rex-task-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rex-task-link-arrow{flex-shrink:0;font-size:10px;color:var(--text-dim);opacity:0;transform:translate(-4px);transition:opacity .15s,transform .15s}.rex-task-link:hover .rex-task-link-arrow{opacity:1;transform:translate(0)}.rex-context-menu{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #00000040;min-width:180px;max-width:280px;padding:4px 0;overflow:hidden;animation:rex-context-in .12s ease}@keyframes rex-context-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.rex-context-menu-header{padding:8px 12px 4px}.rex-context-menu-title{font-size:12px;font-weight:600;color:var(--text);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rex-context-menu-divider{height:1px;background:var(--border);margin:4px 0}.rex-context-menu-section-label{padding:4px 12px 2px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim)}.rex-context-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:6px 12px;border:none;background:none;color:var(--text);font-size:12px;cursor:pointer;text-align:left;transition:background .1s}.rex-context-menu-item:hover{background:var(--bg-hover)}.rex-context-menu-status-icon{font-size:10px;width:14px;text-align:center;flex-shrink:0}.sidebar-controls{display:flex;align-items:center;gap:6px;padding:8px 16px;border-top:1px solid var(--border)}.sidebar-control-btn{width:28px;height:28px;border-radius:50%;border:1px solid var(--border);background:var(--bg-hover);color:var(--text-dim);font-size:var(--font-md);font-weight:var(--weight-semibold);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color var(--transition-normal),color var(--transition-normal),background var(--transition-normal);flex-shrink:0;padding:0}.sidebar-control-btn:hover{border-color:var(--accent);color:var(--accent)}.sidebar-control-btn:active{background:var(--bg-active)}.faq-overlay{position:fixed;inset:0;background:#0c0e1acc;z-index:1000;display:flex;align-items:center;justify-content:center}[data-theme=light] .faq-overlay{background:#0006}.faq-modal{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius-xl);width:560px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.faq-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.faq-header h2{font-size:var(--font-lg);font-weight:var(--weight-semibold)}.faq-close{background:none;border:none;color:var(--text-dim);font-size:18px;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center}.faq-close:hover{color:var(--text)}.faq-body{flex:1;overflow-y:auto;padding:12px 20px}.faq-section{margin-bottom:4px}.faq-section-header{display:flex;align-items:center;gap:var(--space-2);padding:10px 8px;cursor:pointer;user-select:none;border-radius:var(--radius-md);font-size:var(--font-md);font-weight:var(--weight-semibold);color:var(--text);transition:background var(--transition-normal)}.faq-section-header:hover{background:var(--bg-hover)}.faq-section-chevron{font-size:var(--font-xs);color:var(--text-dim);transition:transform .2s ease;flex-shrink:0}.faq-section-chevron-open{transform:rotate(90deg)}.faq-section-items{padding:0 8px 8px}.faq-item{padding:10px 12px;border-radius:var(--radius-md);margin-bottom:4px;background:var(--bg-hover)}.faq-question{font-size:var(--font-base);font-weight:var(--weight-semibold);color:var(--text);margin-bottom:6px}.faq-answer{font-size:var(--font-base);line-height:var(--leading-relaxed);color:var(--text-dim)}.faq-doc-link{display:inline-block;margin-top:6px;font-size:var(--font-sm);color:var(--accent);text-decoration:none;transition:opacity var(--transition-normal)}.faq-doc-link:hover{opacity:.8;text-decoration:underline}.faq-footer{padding:12px 20px;border-top:1px solid var(--border);flex-shrink:0}.faq-footer p{font-size:var(--font-sm);color:var(--text-muted)}.faq-footer code{font-family:monospace;font-size:var(--font-sm);background:var(--bg-hover);padding:1px 5px;border-radius:var(--radius-sm);color:var(--accent)}.sidebar.sidebar-collapsed .sidebar-controls{opacity:0;pointer-events:none;position:absolute;visibility:hidden}@media (max-width: 1024px){:root{--sidebar-w: 180px;--panel-w: 280px}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.zone-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.dep-legend{flex-wrap:wrap;gap:8px}.val-summary,.dep-stats{flex-wrap:wrap;gap:10px}.rex-bulk-bar{max-width:calc(100vw - 40px);flex-wrap:wrap;gap:8px;padding:8px 12px}}@media (max-width: 768px){#app{flex-direction:column}.sidebar,.sidebar.sidebar-collapsed{width:100%;min-width:100%;height:auto;max-height:56px;overflow:hidden;border-right:none;border-bottom:1px solid var(--border);transition:max-height .3s ease;position:relative}.sidebar.sidebar-collapsed .sidebar-header,.sidebar.sidebar-collapsed .sidebar-nav,.sidebar.sidebar-collapsed .sidebar-controls{opacity:1;pointer-events:auto;position:static;visibility:visible}.sidebar-rail{display:none}.sidebar.mobile-open{max-height:100vh;max-height:100dvh;overflow-y:auto;position:fixed;inset:0;z-index:600;background:var(--bg-surface)}.sidebar-backdrop{display:none}.sidebar.mobile-open+.sidebar-backdrop,.sidebar.mobile-open .sidebar-backdrop{display:block;position:fixed;inset:0;background:#0006;z-index:599}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px}.sidebar-header h1{font-size:14px}.mobile-menu-btn{display:block;background:none;border:none;color:var(--text-dim);font-size:18px;cursor:pointer;padding:4px}.sidebar-toggle-btn{display:none}.sidebar.sidebar-collapsed .sidebar-toggle-btn{display:none;position:static}.sidebar-nav{padding:4px 8px 8px}.nav-item{padding:10px 12px}.main{padding:16px;height:calc(100vh - 56px);height:calc(100dvh - 56px)}.header-buttons{padding:8px}.detail-panel{position:fixed;inset:0;width:100%;z-index:500;border-left:none}.detail-backdrop{display:block;position:fixed;inset:0;background:#0006;z-index:499}.stat-grid{grid-template-columns:repeat(2,1fr);gap:8px}.zone-grid{grid-template-columns:1fr}.filter-bar{flex-wrap:wrap}.filter-input{min-width:0}.data-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.graph-container{height:calc(100vh - 200px);height:calc(100dvh - 200px)}.flow-diagram svg{max-width:100%;height:auto}.guide-modal{width:95vw;max-height:85vh}.sidebar-controls{display:none}.sidebar.mobile-open .sidebar-controls{display:flex}.faq-modal{width:95vw;max-height:85vh}.nav-section-header{padding:10px 12px 6px}.rex-command-bar{flex-wrap:wrap}.val-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.val-summary{flex-direction:column;align-items:flex-start;gap:8px}.val-summary-stats{flex-wrap:wrap;gap:8px}.dep-stats{flex-wrap:wrap;gap:10px}.dep-legend{flex-wrap:wrap;gap:6px;padding:8px 12px}.hench-filter-bar{flex-wrap:wrap}.rex-bulk-bar{max-width:calc(100vw - 32px);flex-wrap:wrap;gap:6px;padding:8px 12px}.rex-bulk-actions{flex-wrap:wrap}.attention-item{flex-direction:column;align-items:flex-start;gap:6px}.attention-issues{flex-wrap:wrap}.cost-item{flex-direction:column;align-items:flex-start;gap:4px}.rex-analysis-history-entry{flex-wrap:wrap}.zone-map-grid,.dep-grid{grid-template-columns:1fr}}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<div id="app"></div>
|
|
20
|
+
<script type="module">var wr=Object.defineProperty;var Sr=(n,e)=>{for(var s in e)wr(n,s,{get:e[s],enumerable:!0})};var Ct,Y,On,Cr,$e,Ln,zn,jn,Vn,Kt,Ut,Gt,Tr,ct={},Bn=[],Ir=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Tt=Array.isArray;function ye(n,e){for(var s in e)n[s]=e[s];return n}function Yt(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function t(n,e,s){var r,i,a,o={};for(a in e)a=="key"?r=e[a]:a=="ref"?i=e[a]:o[a]=e[a];if(arguments.length>2&&(o.children=arguments.length>3?Ct.call(arguments,2):s),typeof n=="function"&&n.defaultProps!=null)for(a in n.defaultProps)o[a]===void 0&&(o[a]=n.defaultProps[a]);return xt(n,o,r,i,null)}function xt(n,e,s,r,i){var a={type:n,props:e,key:s,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++On,__i:-1,__u:0};return i==null&&Y.vnode!=null&&Y.vnode(a),a}function j(n){return n.children}function wt(n,e){this.props=n,this.context=e}function qe(n,e){if(e==null)return n.__?qe(n.__,n.__i+1):null;for(var s;e<n.__k.length;e++)if((s=n.__k[e])!=null&&s.__e!=null)return s.__e;return typeof n.type=="function"?qe(n):null}function Zn(n){var e,s;if((n=n.__)!=null&&n.__c!=null){for(n.__e=n.__c.base=null,e=0;e<n.__k.length;e++)if((s=n.__k[e])!=null&&s.__e!=null){n.__e=n.__c.base=s.__e;break}return Zn(n)}}function Nn(n){(!n.__d&&(n.__d=!0)&&$e.push(n)&&!St.__r++||Ln!=Y.debounceRendering)&&((Ln=Y.debounceRendering)||zn)(St)}function St(){for(var n,e,s,r,i,a,o,l=1;$e.length;)$e.length>l&&$e.sort(jn),n=$e.shift(),l=$e.length,n.__d&&(s=void 0,r=void 0,i=(r=(e=n).__v).__e,a=[],o=[],e.__P&&((s=ye({},r)).__v=r.__v+1,Y.vnode&&Y.vnode(s),qt(e.__P,s,r,e.__n,e.__P.namespaceURI,32&r.__u?[i]:null,a,i??qe(r),!!(32&r.__u),o),s.__v=r.__v,s.__.__k[s.__i]=s,Gn(a,s,o),r.__e=r.__=null,s.__e!=i&&Zn(s)));St.__r=0}function Hn(n,e,s,r,i,a,o,l,c,u,d){var h,m,p,g,y,f,x,b=r&&r.__k||Bn,v=e.length;for(c=Er(s,e,b,c,v),h=0;h<v;h++)(p=s.__k[h])!=null&&(m=p.__i==-1?ct:b[p.__i]||ct,p.__i=h,f=qt(n,p,m,i,a,o,l,c,u,d),g=p.__e,p.ref&&m.ref!=p.ref&&(m.ref&&Xt(m.ref,null,p),d.push(p.ref,p.__c||g,p)),y==null&&g!=null&&(y=g),(x=!!(4&p.__u))||m.__k===p.__k?c=Un(p,c,n,x):typeof p.type=="function"&&f!==void 0?c=f:g&&(c=g.nextSibling),p.__u&=-7);return s.__e=y,c}function Er(n,e,s,r,i){var a,o,l,c,u,d=s.length,h=d,m=0;for(n.__k=new Array(i),a=0;a<i;a++)(o=e[a])!=null&&typeof o!="boolean"&&typeof o!="function"?(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||o.constructor==String?o=n.__k[a]=xt(null,o,null,null,null):Tt(o)?o=n.__k[a]=xt(j,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=n.__k[a]=xt(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[a]=o,c=a+m,o.__=n,o.__b=n.__b+1,l=null,(u=o.__i=Pr(o,s,c,h))!=-1&&(h--,(l=s[u])&&(l.__u|=2)),l==null||l.__v==null?(u==-1&&(i>d?m--:i<d&&m++),typeof o.type!="function"&&(o.__u|=4)):u!=c&&(u==c-1?m--:u==c+1?m++:(u>c?m--:m++,o.__u|=4))):n.__k[a]=null;if(h)for(a=0;a<d;a++)(l=s[a])!=null&&!(2&l.__u)&&(l.__e==r&&(r=qe(l)),Kn(l,l));return r}function Un(n,e,s,r){var i,a;if(typeof n.type=="function"){for(i=n.__k,a=0;i&&a<i.length;a++)i[a]&&(i[a].__=n,e=Un(i[a],e,s,r));return e}n.__e!=e&&(r&&(e&&n.type&&!e.parentNode&&(e=qe(n)),s.insertBefore(n.__e,e||null)),e=n.__e);do e=e&&e.nextSibling;while(e!=null&&e.nodeType==8);return e}function Pr(n,e,s,r){var i,a,o,l=n.key,c=n.type,u=e[s],d=u!=null&&(2&u.__u)==0;if(u===null&&l==null||d&&l==u.key&&c==u.type)return s;if(r>(d?1:0)){for(i=s-1,a=s+1;i>=0||a<e.length;)if((u=e[o=i>=0?i--:a++])!=null&&!(2&u.__u)&&l==u.key&&c==u.type)return o}return-1}function Mn(n,e,s){e[0]=="-"?n.setProperty(e,s??""):n[e]=s==null?"":typeof s!="number"||Ir.test(e)?s:s+"px"}function _t(n,e,s,r,i){var a,o;e:if(e=="style")if(typeof s=="string")n.style.cssText=s;else{if(typeof r=="string"&&(n.style.cssText=r=""),r)for(e in r)s&&e in s||Mn(n.style,e,"");if(s)for(e in s)r&&s[e]==r[e]||Mn(n.style,e,s[e])}else if(e[0]=="o"&&e[1]=="n")a=e!=(e=e.replace(Vn,"$1")),o=e.toLowerCase(),e=o in n||e=="onFocusOut"||e=="onFocusIn"?o.slice(2):e.slice(2),n.l||(n.l={}),n.l[e+a]=s,s?r?s.u=r.u:(s.u=Kt,n.addEventListener(e,a?Gt:Ut,a)):n.removeEventListener(e,a?Gt:Ut,a);else{if(i=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in n)try{n[e]=s??"";break e}catch{}typeof s=="function"||(s==null||s===!1&&e[4]!="-"?n.removeAttribute(e):n.setAttribute(e,e=="popover"&&s==1?"":s))}}function Fn(n){return function(e){if(this.l){var s=this.l[e.type+n];if(e.t==null)e.t=Kt++;else if(e.t<s.u)return;return s(Y.event?Y.event(e):e)}}}function qt(n,e,s,r,i,a,o,l,c,u){var d,h,m,p,g,y,f,x,b,v,S,k,T,A,w,F,E,M=e.type;if(e.constructor!==void 0)return null;128&s.__u&&(c=!!(32&s.__u),a=[l=e.__e=s.__e]),(d=Y.__b)&&d(e);e:if(typeof M=="function")try{if(x=e.props,b="prototype"in M&&M.prototype.render,v=(d=M.contextType)&&r[d.__c],S=d?v?v.props.value:d.__:r,s.__c?f=(h=e.__c=s.__c).__=h.__E:(b?e.__c=h=new M(x,S):(e.__c=h=new wt(x,S),h.constructor=M,h.render=$r),v&&v.sub(h),h.state||(h.state={}),h.__n=r,m=h.__d=!0,h.__h=[],h._sb=[]),b&&h.__s==null&&(h.__s=h.state),b&&M.getDerivedStateFromProps!=null&&(h.__s==h.state&&(h.__s=ye({},h.__s)),ye(h.__s,M.getDerivedStateFromProps(x,h.__s))),p=h.props,g=h.state,h.__v=e,m)b&&M.getDerivedStateFromProps==null&&h.componentWillMount!=null&&h.componentWillMount(),b&&h.componentDidMount!=null&&h.__h.push(h.componentDidMount);else{if(b&&M.getDerivedStateFromProps==null&&x!==p&&h.componentWillReceiveProps!=null&&h.componentWillReceiveProps(x,S),e.__v==s.__v||!h.__e&&h.shouldComponentUpdate!=null&&h.shouldComponentUpdate(x,h.__s,S)===!1){for(e.__v!=s.__v&&(h.props=x,h.state=h.__s,h.__d=!1),e.__e=s.__e,e.__k=s.__k,e.__k.some(function(W){W&&(W.__=e)}),k=0;k<h._sb.length;k++)h.__h.push(h._sb[k]);h._sb=[],h.__h.length&&o.push(h);break e}h.componentWillUpdate!=null&&h.componentWillUpdate(x,h.__s,S),b&&h.componentDidUpdate!=null&&h.__h.push(function(){h.componentDidUpdate(p,g,y)})}if(h.context=S,h.props=x,h.__P=n,h.__e=!1,T=Y.__r,A=0,b){for(h.state=h.__s,h.__d=!1,T&&T(e),d=h.render(h.props,h.state,h.context),w=0;w<h._sb.length;w++)h.__h.push(h._sb[w]);h._sb=[]}else do h.__d=!1,T&&T(e),d=h.render(h.props,h.state,h.context),h.state=h.__s;while(h.__d&&++A<25);h.state=h.__s,h.getChildContext!=null&&(r=ye(ye({},r),h.getChildContext())),b&&!m&&h.getSnapshotBeforeUpdate!=null&&(y=h.getSnapshotBeforeUpdate(p,g)),F=d,d!=null&&d.type===j&&d.key==null&&(F=Wn(d.props.children)),l=Hn(n,Tt(F)?F:[F],e,s,r,i,a,o,l,c,u),h.base=e.__e,e.__u&=-161,h.__h.length&&o.push(h),f&&(h.__E=h.__=null)}catch(W){if(e.__v=null,c||a!=null)if(W.then){for(e.__u|=c?160:128;l&&l.nodeType==8&&l.nextSibling;)l=l.nextSibling;a[a.indexOf(l)]=null,e.__e=l}else{for(E=a.length;E--;)Yt(a[E]);Wt(e)}else e.__e=s.__e,e.__k=s.__k,W.then||Wt(e);Y.__e(W,e,s)}else a==null&&e.__v==s.__v?(e.__k=s.__k,e.__e=s.__e):l=e.__e=Rr(s.__e,e,s,r,i,a,o,c,u);return(d=Y.diffed)&&d(e),128&e.__u?void 0:l}function Wt(n){n&&n.__c&&(n.__c.__e=!0),n&&n.__k&&n.__k.forEach(Wt)}function Gn(n,e,s){for(var r=0;r<s.length;r++)Xt(s[r],s[++r],s[++r]);Y.__c&&Y.__c(e,n),n.some(function(i){try{n=i.__h,i.__h=[],n.some(function(a){a.call(i)})}catch(a){Y.__e(a,i.__v)}})}function Wn(n){return typeof n!="object"||n==null||n.__b&&n.__b>0?n:Tt(n)?n.map(Wn):ye({},n)}function Rr(n,e,s,r,i,a,o,l,c){var u,d,h,m,p,g,y,f=s.props||ct,x=e.props,b=e.type;if(b=="svg"?i="http://www.w3.org/2000/svg":b=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),a!=null){for(u=0;u<a.length;u++)if((p=a[u])&&"setAttribute"in p==!!b&&(b?p.localName==b:p.nodeType==3)){n=p,a[u]=null;break}}if(n==null){if(b==null)return document.createTextNode(x);n=document.createElementNS(i,b,x.is&&x),l&&(Y.__m&&Y.__m(e,a),l=!1),a=null}if(b==null)f===x||l&&n.data==x||(n.data=x);else{if(a=a&&Ct.call(n.childNodes),!l&&a!=null)for(f={},u=0;u<n.attributes.length;u++)f[(p=n.attributes[u]).name]=p.value;for(u in f)if(p=f[u],u!="children"){if(u=="dangerouslySetInnerHTML")h=p;else if(!(u in x)){if(u=="value"&&"defaultValue"in x||u=="checked"&&"defaultChecked"in x)continue;_t(n,u,null,p,i)}}for(u in x)p=x[u],u=="children"?m=p:u=="dangerouslySetInnerHTML"?d=p:u=="value"?g=p:u=="checked"?y=p:l&&typeof p!="function"||f[u]===p||_t(n,u,p,f[u],i);if(d)l||h&&(d.__html==h.__html||d.__html==n.innerHTML)||(n.innerHTML=d.__html),e.__k=[];else if(h&&(n.innerHTML=""),Hn(e.type=="template"?n.content:n,Tt(m)?m:[m],e,s,r,b=="foreignObject"?"http://www.w3.org/1999/xhtml":i,a,o,a?a[0]:s.__k&&qe(s,0),l,c),a!=null)for(u=a.length;u--;)Yt(a[u]);l||(u="value",b=="progress"&&g==null?n.removeAttribute("value"):g!=null&&(g!==n[u]||b=="progress"&&!g||b=="option"&&g!=f[u])&&_t(n,u,g,f[u],i),u="checked",y!=null&&y!=n[u]&&_t(n,u,y,f[u],i))}return n}function Xt(n,e,s){try{if(typeof n=="function"){var r=typeof n.__u=="function";r&&n.__u(),r&&e==null||(n.__u=n(e))}else n.current=e}catch(i){Y.__e(i,s)}}function Kn(n,e,s){var r,i;if(Y.unmount&&Y.unmount(n),(r=n.ref)&&(r.current&&r.current!=n.__e||Xt(r,null,e)),(r=n.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(a){Y.__e(a,e)}r.base=r.__P=null}if(r=n.__k)for(i=0;i<r.length;i++)r[i]&&Kn(r[i],e,s||typeof n.type!="function");s||Yt(n.__e),n.__c=n.__=n.__e=void 0}function $r(n,e,s){return this.constructor(n,s)}function Yn(n,e,s){var r,i,a,o;e==document&&(e=document.documentElement),Y.__&&Y.__(n,e),i=(r=typeof s=="function")?null:s&&s.__k||e.__k,a=[],o=[],qt(e,n=(!r&&s||e).__k=t(j,null,[n]),i||ct,ct,e.namespaceURI,!r&&s?[s]:i?null:e.firstChild?Ct.call(e.childNodes):null,a,!r&&s?s:i?i.__e:e.firstChild,r,o),Gn(a,n,o)}Ct=Bn.slice,Y={__e:function(n,e,s,r){for(var i,a,o;e=e.__;)if((i=e.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(n)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(n,r||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},On=0,Cr=function(n){return n!=null&&n.constructor===void 0},wt.prototype.setState=function(n,e){var s;s=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ye({},this.state),typeof n=="function"&&(n=n(ye({},s),this.props)),n&&ye(s,n),n!=null&&this.__v&&(e&&this._sb.push(e),Nn(this))},wt.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),Nn(this))},wt.prototype.render=j,$e=[],zn=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,jn=function(n,e){return n.__v.__b-e.__v.__b},St.__r=0,Vn=/(PointerCapture)$|Capture$/i,Kt=0,Ut=Fn(!1),Gt=Fn(!0),Tr=0;var dt,X,Qt,qn,ut=0,rs=[],J=Y,Xn=J.__b,Qn=J.__r,Jn=J.diffed,es=J.__c,ts=J.unmount,ns=J.__;function en(n,e){J.__h&&J.__h(X,n,ut||e),ut=0;var s=X.__H||(X.__H={__:[],__h:[]});return n>=s.__.length&&s.__.push({}),s.__[n]}function C(n){return ut=1,Dr(is,n)}function Dr(n,e,s){var r=en(dt++,2);if(r.t=n,!r.__c&&(r.__=[s?s(e):is(void 0,e),function(l){var c=r.__N?r.__N[0]:r.__[0],u=r.t(c,l);c!==u&&(r.__N=[u,r.__[1]],r.__c.setState({}))}],r.__c=X,!X.__f)){var i=function(l,c,u){if(!r.__c.__H)return!0;var d=r.__c.__H.__.filter(function(m){return!!m.__c});if(d.every(function(m){return!m.__N}))return!a||a.call(this,l,c,u);var h=r.__c.props!==l;return d.forEach(function(m){if(m.__N){var p=m.__[0];m.__=m.__N,m.__N=void 0,p!==m.__[0]&&(h=!0)}}),a&&a.call(this,l,c,u)||h};X.__f=!0;var a=X.shouldComponentUpdate,o=X.componentWillUpdate;X.componentWillUpdate=function(l,c,u){if(this.__e){var d=a;a=void 0,i(l,c,u),a=d}o&&o.call(this,l,c,u)},X.shouldComponentUpdate=i}return r.__N||r.__}function H(n,e){var s=en(dt++,3);!J.__s&&as(s.__H,e)&&(s.__=n,s.u=e,X.__H.__h.push(s))}function be(n){return ut=5,$(function(){return{current:n}},[])}function $(n,e){var s=en(dt++,7);return as(s.__H,e)&&(s.__=n(),s.__H=e,s.__h=n),s.__}function N(n,e){return ut=8,$(function(){return n},e)}function Ar(){for(var n;n=rs.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(It),n.__H.__h.forEach(Jt),n.__H.__h=[]}catch(e){n.__H.__h=[],J.__e(e,n.__v)}}J.__b=function(n){X=null,Xn&&Xn(n)},J.__=function(n,e){n&&e.__k&&e.__k.__m&&(n.__m=e.__k.__m),ns&&ns(n,e)},J.__r=function(n){Qn&&Qn(n),dt=0;var e=(X=n.__c).__H;e&&(Qt===X?(e.__h=[],X.__h=[],e.__.forEach(function(s){s.__N&&(s.__=s.__N),s.u=s.__N=void 0})):(e.__h.forEach(It),e.__h.forEach(Jt),e.__h=[],dt=0)),Qt=X},J.diffed=function(n){Jn&&Jn(n);var e=n.__c;e&&e.__H&&(e.__H.__h.length&&(rs.push(e)!==1&&qn===J.requestAnimationFrame||((qn=J.requestAnimationFrame)||Lr)(Ar)),e.__H.__.forEach(function(s){s.u&&(s.__H=s.u),s.u=void 0})),Qt=X=null},J.__c=function(n,e){e.some(function(s){try{s.__h.forEach(It),s.__h=s.__h.filter(function(r){return!r.__||Jt(r)})}catch(r){e.some(function(i){i.__h&&(i.__h=[])}),e=[],J.__e(r,s.__v)}}),es&&es(n,e)},J.unmount=function(n){ts&&ts(n);var e,s=n.__c;s&&s.__H&&(s.__H.__.forEach(function(r){try{It(r)}catch(i){e=i}}),s.__H=void 0,e&&J.__e(e,s.__v))};var ss=typeof requestAnimationFrame=="function";function Lr(n){var e,s=function(){clearTimeout(r),ss&&cancelAnimationFrame(e),setTimeout(n)},r=setTimeout(s,35);ss&&(e=requestAnimationFrame(s))}function It(n){var e=X,s=n.__c;typeof s=="function"&&(n.__c=void 0,s()),X=e}function Jt(n){var e=X;n.__c=n.__(),X=e}function as(n,e){return!n||n.length!==e.length||e.some(function(s,r){return s!==n[r]})}function is(n,e){return typeof e=="function"?e(n):e}var _={};Sr(_,{BRAND:()=>ia,DIRTY:()=>De,EMPTY_PATH:()=>Or,INVALID:()=>O,NEVER:()=>Ha,OK:()=>ne,ParseStatus:()=>ee,Schema:()=>B,ZodAny:()=>Te,ZodArray:()=>we,ZodBigInt:()=>Le,ZodBoolean:()=>Ne,ZodBranded:()=>ht,ZodCatch:()=>Ge,ZodDate:()=>Me,ZodDefault:()=>Ue,ZodDiscriminatedUnion:()=>Rt,ZodEffects:()=>ce,ZodEnum:()=>Ze,ZodError:()=>se,ZodFirstPartyTypeKind:()=>z,ZodFunction:()=>Dt,ZodIntersection:()=>je,ZodIssueCode:()=>I,ZodLazy:()=>Ve,ZodLiteral:()=>Be,ZodMap:()=>nt,ZodNaN:()=>rt,ZodNativeEnum:()=>He,ZodNever:()=>ue,ZodNull:()=>Oe,ZodNullable:()=>fe,ZodNumber:()=>Ae,ZodObject:()=>re,ZodOptional:()=>oe,ZodParsedType:()=>R,ZodPipeline:()=>mt,ZodPromise:()=>Ie,ZodReadonly:()=>We,ZodRecord:()=>$t,ZodSchema:()=>B,ZodSet:()=>st,ZodString:()=>Ce,ZodSymbol:()=>et,ZodTransformer:()=>ce,ZodTuple:()=>me,ZodType:()=>B,ZodUndefined:()=>Fe,ZodUnion:()=>ze,ZodUnknown:()=>xe,ZodVoid:()=>tt,addIssueToContext:()=>P,any:()=>fa,array:()=>ba,bigint:()=>da,boolean:()=>vs,coerce:()=>Za,custom:()=>ms,date:()=>ua,datetimeRegex:()=>ps,defaultErrorMap:()=>ke,discriminatedUnion:()=>wa,effect:()=>Na,enum:()=>Da,function:()=>Pa,getErrorMap:()=>Xe,getParsedType:()=>he,instanceof:()=>la,intersection:()=>Sa,isAborted:()=>Et,isAsync:()=>Qe,isDirty:()=>Pt,isValid:()=>Se,late:()=>oa,lazy:()=>Ra,literal:()=>$a,makeIssue:()=>pt,map:()=>Ia,nan:()=>ca,nativeEnum:()=>Aa,never:()=>va,null:()=>ma,nullable:()=>Fa,number:()=>gs,object:()=>ka,objectUtil:()=>tn,oboolean:()=>Ba,onumber:()=>Va,optional:()=>Ma,ostring:()=>ja,pipeline:()=>za,preprocess:()=>Oa,promise:()=>La,quotelessJson:()=>Nr,record:()=>Ta,set:()=>Ea,setErrorMap:()=>Fr,strictObject:()=>_a,string:()=>fs,symbol:()=>pa,transformer:()=>Na,tuple:()=>Ca,undefined:()=>ha,union:()=>xa,unknown:()=>ga,util:()=>Z,void:()=>ya});var Z;(function(n){n.assertEqual=i=>{};function e(i){}n.assertIs=e;function s(i){throw new Error}n.assertNever=s,n.arrayToEnum=i=>{let a={};for(let o of i)a[o]=o;return a},n.getValidEnumValues=i=>{let a=n.objectKeys(i).filter(l=>typeof i[i[l]]!="number"),o={};for(let l of a)o[l]=i[l];return n.objectValues(o)},n.objectValues=i=>n.objectKeys(i).map(function(a){return i[a]}),n.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{let a=[];for(let o in i)Object.prototype.hasOwnProperty.call(i,o)&&a.push(o);return a},n.find=(i,a)=>{for(let o of i)if(a(o))return o},n.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function r(i,a=" | "){return i.map(o=>typeof o=="string"?`'${o}'`:o).join(a)}n.joinValues=r,n.jsonStringifyReplacer=(i,a)=>typeof a=="bigint"?a.toString():a})(Z||(Z={}));var tn;(function(n){n.mergeShapes=(e,s)=>({...e,...s})})(tn||(tn={}));var R=Z.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),he=n=>{switch(typeof n){case"undefined":return R.undefined;case"string":return R.string;case"number":return Number.isNaN(n)?R.nan:R.number;case"boolean":return R.boolean;case"function":return R.function;case"bigint":return R.bigint;case"symbol":return R.symbol;case"object":return Array.isArray(n)?R.array:n===null?R.null:n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?R.promise:typeof Map<"u"&&n instanceof Map?R.map:typeof Set<"u"&&n instanceof Set?R.set:typeof Date<"u"&&n instanceof Date?R.date:R.object;default:return R.unknown}};var I=Z.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Nr=n=>JSON.stringify(n,null,2).replace(/"([^"]+)":/g,"$1:"),se=class n extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let s=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,s):this.__proto__=s,this.name="ZodError",this.issues=e}format(e){let s=e||function(a){return a.message},r={_errors:[]},i=a=>{for(let o of a.issues)if(o.code==="invalid_union")o.unionErrors.map(i);else if(o.code==="invalid_return_type")i(o.returnTypeError);else if(o.code==="invalid_arguments")i(o.argumentsError);else if(o.path.length===0)r._errors.push(s(o));else{let l=r,c=0;for(;c<o.path.length;){let u=o.path[c];c===o.path.length-1?(l[u]=l[u]||{_errors:[]},l[u]._errors.push(s(o))):l[u]=l[u]||{_errors:[]},l=l[u],c++}}};return i(this),r}static assert(e){if(!(e instanceof n))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Z.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=s=>s.message){let s={},r=[];for(let i of this.issues)if(i.path.length>0){let a=i.path[0];s[a]=s[a]||[],s[a].push(e(i))}else r.push(e(i));return{formErrors:r,fieldErrors:s}}get formErrors(){return this.flatten()}};se.create=n=>new se(n);var Mr=(n,e)=>{let s;switch(n.code){case I.invalid_type:n.received===R.undefined?s="Required":s=`Expected ${n.expected}, received ${n.received}`;break;case I.invalid_literal:s=`Invalid literal value, expected ${JSON.stringify(n.expected,Z.jsonStringifyReplacer)}`;break;case I.unrecognized_keys:s=`Unrecognized key(s) in object: ${Z.joinValues(n.keys,", ")}`;break;case I.invalid_union:s="Invalid input";break;case I.invalid_union_discriminator:s=`Invalid discriminator value. Expected ${Z.joinValues(n.options)}`;break;case I.invalid_enum_value:s=`Invalid enum value. Expected ${Z.joinValues(n.options)}, received '${n.received}'`;break;case I.invalid_arguments:s="Invalid function arguments";break;case I.invalid_return_type:s="Invalid function return type";break;case I.invalid_date:s="Invalid date";break;case I.invalid_string:typeof n.validation=="object"?"includes"in n.validation?(s=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position=="number"&&(s=`${s} at one or more positions greater than or equal to ${n.validation.position}`)):"startsWith"in n.validation?s=`Invalid input: must start with "${n.validation.startsWith}"`:"endsWith"in n.validation?s=`Invalid input: must end with "${n.validation.endsWith}"`:Z.assertNever(n.validation):n.validation!=="regex"?s=`Invalid ${n.validation}`:s="Invalid";break;case I.too_small:n.type==="array"?s=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`:n.type==="string"?s=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`:n.type==="number"?s=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="bigint"?s=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="date"?s=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`:s="Invalid input";break;case I.too_big:n.type==="array"?s=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`:n.type==="string"?s=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`:n.type==="number"?s=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="bigint"?s=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="date"?s=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`:s="Invalid input";break;case I.custom:s="Invalid input";break;case I.invalid_intersection_types:s="Intersection results could not be merged";break;case I.not_multiple_of:s=`Number must be a multiple of ${n.multipleOf}`;break;case I.not_finite:s="Number must be finite";break;default:s=e.defaultError,Z.assertNever(n)}return{message:s}},ke=Mr;var os=ke;function Fr(n){os=n}function Xe(){return os}var pt=n=>{let{data:e,path:s,errorMaps:r,issueData:i}=n,a=[...s,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let l="",c=r.filter(u=>!!u).slice().reverse();for(let u of c)l=u(o,{data:e,defaultError:l}).message;return{...i,path:a,message:l}},Or=[];function P(n,e){let s=Xe(),r=pt({issueData:e,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,s,s===ke?void 0:ke].filter(i=>!!i)});n.common.issues.push(r)}var ee=class n{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,s){let r=[];for(let i of s){if(i.status==="aborted")return O;i.status==="dirty"&&e.dirty(),r.push(i.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,s){let r=[];for(let i of s){let a=await i.key,o=await i.value;r.push({key:a,value:o})}return n.mergeObjectSync(e,r)}static mergeObjectSync(e,s){let r={};for(let i of s){let{key:a,value:o}=i;if(a.status==="aborted"||o.status==="aborted")return O;a.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),a.value!=="__proto__"&&(typeof o.value<"u"||i.alwaysSet)&&(r[a.value]=o.value)}return{status:e.value,value:r}}},O=Object.freeze({status:"aborted"}),De=n=>({status:"dirty",value:n}),ne=n=>({status:"valid",value:n}),Et=n=>n.status==="aborted",Pt=n=>n.status==="dirty",Se=n=>n.status==="valid",Qe=n=>typeof Promise<"u"&&n instanceof Promise;var L;(function(n){n.errToObj=e=>typeof e=="string"?{message:e}:e||{},n.toString=e=>typeof e=="string"?e:e?.message})(L||(L={}));var le=class{constructor(e,s,r,i){this._cachedPath=[],this.parent=e,this.data=s,this._path=r,this._key=i}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},ls=(n,e)=>{if(Se(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let s=new se(n.common.issues);return this._error=s,this._error}}};function V(n){if(!n)return{};let{errorMap:e,invalid_type_error:s,required_error:r,description:i}=n;if(e&&(s||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:i}:{errorMap:(o,l)=>{let{message:c}=n;return o.code==="invalid_enum_value"?{message:c??l.defaultError}:typeof l.data>"u"?{message:c??r??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:c??s??l.defaultError}},description:i}}var B=class{get description(){return this._def.description}_getType(e){return he(e.data)}_getOrReturnCtx(e,s){return s||{common:e.parent.common,data:e.data,parsedType:he(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ee,ctx:{common:e.parent.common,data:e.data,parsedType:he(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let s=this._parse(e);if(Qe(s))throw new Error("Synchronous parse encountered promise.");return s}_parseAsync(e){let s=this._parse(e);return Promise.resolve(s)}parse(e,s){let r=this.safeParse(e,s);if(r.success)return r.data;throw r.error}safeParse(e,s){let r={common:{issues:[],async:s?.async??!1,contextualErrorMap:s?.errorMap},path:s?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)},i=this._parseSync({data:e,path:r.path,parent:r});return ls(r,i)}"~validate"(e){let s={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:s});return Se(r)?{value:r.value}:{issues:s.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),s.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:s}).then(r=>Se(r)?{value:r.value}:{issues:s.common.issues})}async parseAsync(e,s){let r=await this.safeParseAsync(e,s);if(r.success)return r.data;throw r.error}async safeParseAsync(e,s){let r={common:{issues:[],contextualErrorMap:s?.errorMap,async:!0},path:s?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)},i=this._parse({data:e,path:r.path,parent:r}),a=await(Qe(i)?i:Promise.resolve(i));return ls(r,a)}refine(e,s){let r=i=>typeof s=="string"||typeof s>"u"?{message:s}:typeof s=="function"?s(i):s;return this._refinement((i,a)=>{let o=e(i),l=()=>a.addIssue({code:I.custom,...r(i)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(e,s){return this._refinement((r,i)=>e(r)?!0:(i.addIssue(typeof s=="function"?s(r,i):s),!1))}_refinement(e){return new ce({schema:this,typeName:z.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:s=>this["~validate"](s)}}optional(){return oe.create(this,this._def)}nullable(){return fe.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return we.create(this)}promise(){return Ie.create(this,this._def)}or(e){return ze.create([this,e],this._def)}and(e){return je.create(this,e,this._def)}transform(e){return new ce({...V(this._def),schema:this,typeName:z.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let s=typeof e=="function"?e:()=>e;return new Ue({...V(this._def),innerType:this,defaultValue:s,typeName:z.ZodDefault})}brand(){return new ht({typeName:z.ZodBranded,type:this,...V(this._def)})}catch(e){let s=typeof e=="function"?e:()=>e;return new Ge({...V(this._def),innerType:this,catchValue:s,typeName:z.ZodCatch})}describe(e){let s=this.constructor;return new s({...this._def,description:e})}pipe(e){return mt.create(this,e)}readonly(){return We.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},zr=/^c[^\s-]{8,}$/i,jr=/^[0-9a-z]+$/,Vr=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Br=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Zr=/^[a-z0-9_-]{21}$/i,Hr=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ur=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Gr=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Wr="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",nn,Kr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Yr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,qr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Xr=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Qr=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Jr=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,ds="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",ea=new RegExp(`^${ds}$`);function us(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);let s=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${s}`}function ta(n){return new RegExp(`^${us(n)}$`)}function ps(n){let e=`${ds}T${us(n)}`,s=[];return s.push(n.local?"Z?":"Z"),n.offset&&s.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${s.join("|")})`,new RegExp(`^${e}$`)}function na(n,e){return!!((e==="v4"||!e)&&Kr.test(n)||(e==="v6"||!e)&&qr.test(n))}function sa(n,e){if(!Hr.test(n))return!1;try{let[s]=n.split(".");if(!s)return!1;let r=s.replace(/-/g,"+").replace(/_/g,"/").padEnd(s.length+(4-s.length%4)%4,"="),i=JSON.parse(atob(r));return!(typeof i!="object"||i===null||"typ"in i&&i?.typ!=="JWT"||!i.alg||e&&i.alg!==e)}catch{return!1}}function ra(n,e){return!!((e==="v4"||!e)&&Yr.test(n)||(e==="v6"||!e)&&Xr.test(n))}var Ce=class n extends B{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==R.string){let a=this._getOrReturnCtx(e);return P(a,{code:I.invalid_type,expected:R.string,received:a.parsedType}),O}let r=new ee,i;for(let a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(i=this._getOrReturnCtx(e,i),P(i,{code:I.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="max")e.data.length>a.value&&(i=this._getOrReturnCtx(e,i),P(i,{code:I.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="length"){let o=e.data.length>a.value,l=e.data.length<a.value;(o||l)&&(i=this._getOrReturnCtx(e,i),o?P(i,{code:I.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):l&&P(i,{code:I.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),r.dirty())}else if(a.kind==="email")Gr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"email",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="emoji")nn||(nn=new RegExp(Wr,"u")),nn.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"emoji",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="uuid")Br.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"uuid",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="nanoid")Zr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"nanoid",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid")zr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"cuid",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid2")jr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"cuid2",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="ulid")Vr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"ulid",code:I.invalid_string,message:a.message}),r.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{i=this._getOrReturnCtx(e,i),P(i,{validation:"url",code:I.invalid_string,message:a.message}),r.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"regex",code:I.invalid_string,message:a.message}),r.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),r.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:{startsWith:a.value},message:a.message}),r.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:{endsWith:a.value},message:a.message}),r.dirty()):a.kind==="datetime"?ps(a).test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:"datetime",message:a.message}),r.dirty()):a.kind==="date"?ea.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?ta(a).test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{code:I.invalid_string,validation:"time",message:a.message}),r.dirty()):a.kind==="duration"?Ur.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"duration",code:I.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?na(e.data,a.version)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"ip",code:I.invalid_string,message:a.message}),r.dirty()):a.kind==="jwt"?sa(e.data,a.alg)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"jwt",code:I.invalid_string,message:a.message}),r.dirty()):a.kind==="cidr"?ra(e.data,a.version)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"cidr",code:I.invalid_string,message:a.message}),r.dirty()):a.kind==="base64"?Qr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"base64",code:I.invalid_string,message:a.message}),r.dirty()):a.kind==="base64url"?Jr.test(e.data)||(i=this._getOrReturnCtx(e,i),P(i,{validation:"base64url",code:I.invalid_string,message:a.message}),r.dirty()):Z.assertNever(a);return{status:r.value,value:e.data}}_regex(e,s,r){return this.refinement(i=>e.test(i),{validation:s,code:I.invalid_string,...L.errToObj(r)})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...L.errToObj(e)})}url(e){return this._addCheck({kind:"url",...L.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...L.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...L.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...L.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...L.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...L.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...L.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...L.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...L.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...L.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...L.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...L.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...L.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...L.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...L.errToObj(e)})}regex(e,s){return this._addCheck({kind:"regex",regex:e,...L.errToObj(s)})}includes(e,s){return this._addCheck({kind:"includes",value:e,position:s?.position,...L.errToObj(s?.message)})}startsWith(e,s){return this._addCheck({kind:"startsWith",value:e,...L.errToObj(s)})}endsWith(e,s){return this._addCheck({kind:"endsWith",value:e,...L.errToObj(s)})}min(e,s){return this._addCheck({kind:"min",value:e,...L.errToObj(s)})}max(e,s){return this._addCheck({kind:"max",value:e,...L.errToObj(s)})}length(e,s){return this._addCheck({kind:"length",value:e,...L.errToObj(s)})}nonempty(e){return this.min(1,L.errToObj(e))}trim(){return new n({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let s of this._def.checks)s.kind==="min"&&(e===null||s.value>e)&&(e=s.value);return e}get maxLength(){let e=null;for(let s of this._def.checks)s.kind==="max"&&(e===null||s.value<e)&&(e=s.value);return e}};Ce.create=n=>new Ce({checks:[],typeName:z.ZodString,coerce:n?.coerce??!1,...V(n)});function aa(n,e){let s=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,i=s>r?s:r,a=Number.parseInt(n.toFixed(i).replace(".","")),o=Number.parseInt(e.toFixed(i).replace(".",""));return a%o/10**i}var Ae=class n extends B{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==R.number){let a=this._getOrReturnCtx(e);return P(a,{code:I.invalid_type,expected:R.number,received:a.parsedType}),O}let r,i=new ee;for(let a of this._def.checks)a.kind==="int"?Z.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:I.invalid_type,expected:"integer",received:"float",message:a.message}),i.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="multipleOf"?aa(e.data,a.value)!==0&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:I.not_finite,message:a.message}),i.dirty()):Z.assertNever(a);return{status:i.value,value:e.data}}gte(e,s){return this.setLimit("min",e,!0,L.toString(s))}gt(e,s){return this.setLimit("min",e,!1,L.toString(s))}lte(e,s){return this.setLimit("max",e,!0,L.toString(s))}lt(e,s){return this.setLimit("max",e,!1,L.toString(s))}setLimit(e,s,r,i){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:s,inclusive:r,message:L.toString(i)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:L.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:L.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:L.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:L.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:L.toString(e)})}multipleOf(e,s){return this._addCheck({kind:"multipleOf",value:e,message:L.toString(s)})}finite(e){return this._addCheck({kind:"finite",message:L.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:L.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:L.toString(e)})}get minValue(){let e=null;for(let s of this._def.checks)s.kind==="min"&&(e===null||s.value>e)&&(e=s.value);return e}get maxValue(){let e=null;for(let s of this._def.checks)s.kind==="max"&&(e===null||s.value<e)&&(e=s.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Z.isInteger(e.value))}get isFinite(){let e=null,s=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(s===null||r.value>s)&&(s=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(s)&&Number.isFinite(e)}};Ae.create=n=>new Ae({checks:[],typeName:z.ZodNumber,coerce:n?.coerce||!1,...V(n)});var Le=class n extends B{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==R.bigint)return this._getInvalidInput(e);let r,i=new ee;for(let a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),P(r,{code:I.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):Z.assertNever(a);return{status:i.value,value:e.data}}_getInvalidInput(e){let s=this._getOrReturnCtx(e);return P(s,{code:I.invalid_type,expected:R.bigint,received:s.parsedType}),O}gte(e,s){return this.setLimit("min",e,!0,L.toString(s))}gt(e,s){return this.setLimit("min",e,!1,L.toString(s))}lte(e,s){return this.setLimit("max",e,!0,L.toString(s))}lt(e,s){return this.setLimit("max",e,!1,L.toString(s))}setLimit(e,s,r,i){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:s,inclusive:r,message:L.toString(i)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:L.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:L.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:L.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:L.toString(e)})}multipleOf(e,s){return this._addCheck({kind:"multipleOf",value:e,message:L.toString(s)})}get minValue(){let e=null;for(let s of this._def.checks)s.kind==="min"&&(e===null||s.value>e)&&(e=s.value);return e}get maxValue(){let e=null;for(let s of this._def.checks)s.kind==="max"&&(e===null||s.value<e)&&(e=s.value);return e}};Le.create=n=>new Le({checks:[],typeName:z.ZodBigInt,coerce:n?.coerce??!1,...V(n)});var Ne=class extends B{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==R.boolean){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.boolean,received:r.parsedType}),O}return ne(e.data)}};Ne.create=n=>new Ne({typeName:z.ZodBoolean,coerce:n?.coerce||!1,...V(n)});var Me=class n extends B{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==R.date){let a=this._getOrReturnCtx(e);return P(a,{code:I.invalid_type,expected:R.date,received:a.parsedType}),O}if(Number.isNaN(e.data.getTime())){let a=this._getOrReturnCtx(e);return P(a,{code:I.invalid_date}),O}let r=new ee,i;for(let a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(i=this._getOrReturnCtx(e,i),P(i,{code:I.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),r.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(i=this._getOrReturnCtx(e,i),P(i,{code:I.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),r.dirty()):Z.assertNever(a);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}min(e,s){return this._addCheck({kind:"min",value:e.getTime(),message:L.toString(s)})}max(e,s){return this._addCheck({kind:"max",value:e.getTime(),message:L.toString(s)})}get minDate(){let e=null;for(let s of this._def.checks)s.kind==="min"&&(e===null||s.value>e)&&(e=s.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let s of this._def.checks)s.kind==="max"&&(e===null||s.value<e)&&(e=s.value);return e!=null?new Date(e):null}};Me.create=n=>new Me({checks:[],coerce:n?.coerce||!1,typeName:z.ZodDate,...V(n)});var et=class extends B{_parse(e){if(this._getType(e)!==R.symbol){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.symbol,received:r.parsedType}),O}return ne(e.data)}};et.create=n=>new et({typeName:z.ZodSymbol,...V(n)});var Fe=class extends B{_parse(e){if(this._getType(e)!==R.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.undefined,received:r.parsedType}),O}return ne(e.data)}};Fe.create=n=>new Fe({typeName:z.ZodUndefined,...V(n)});var Oe=class extends B{_parse(e){if(this._getType(e)!==R.null){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.null,received:r.parsedType}),O}return ne(e.data)}};Oe.create=n=>new Oe({typeName:z.ZodNull,...V(n)});var Te=class extends B{constructor(){super(...arguments),this._any=!0}_parse(e){return ne(e.data)}};Te.create=n=>new Te({typeName:z.ZodAny,...V(n)});var xe=class extends B{constructor(){super(...arguments),this._unknown=!0}_parse(e){return ne(e.data)}};xe.create=n=>new xe({typeName:z.ZodUnknown,...V(n)});var ue=class extends B{_parse(e){let s=this._getOrReturnCtx(e);return P(s,{code:I.invalid_type,expected:R.never,received:s.parsedType}),O}};ue.create=n=>new ue({typeName:z.ZodNever,...V(n)});var tt=class extends B{_parse(e){if(this._getType(e)!==R.undefined){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.void,received:r.parsedType}),O}return ne(e.data)}};tt.create=n=>new tt({typeName:z.ZodVoid,...V(n)});var we=class n extends B{_parse(e){let{ctx:s,status:r}=this._processInputParams(e),i=this._def;if(s.parsedType!==R.array)return P(s,{code:I.invalid_type,expected:R.array,received:s.parsedType}),O;if(i.exactLength!==null){let o=s.data.length>i.exactLength.value,l=s.data.length<i.exactLength.value;(o||l)&&(P(s,{code:o?I.too_big:I.too_small,minimum:l?i.exactLength.value:void 0,maximum:o?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),r.dirty())}if(i.minLength!==null&&s.data.length<i.minLength.value&&(P(s,{code:I.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),r.dirty()),i.maxLength!==null&&s.data.length>i.maxLength.value&&(P(s,{code:I.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),s.common.async)return Promise.all([...s.data].map((o,l)=>i.type._parseAsync(new le(s,o,s.path,l)))).then(o=>ee.mergeArray(r,o));let a=[...s.data].map((o,l)=>i.type._parseSync(new le(s,o,s.path,l)));return ee.mergeArray(r,a)}get element(){return this._def.type}min(e,s){return new n({...this._def,minLength:{value:e,message:L.toString(s)}})}max(e,s){return new n({...this._def,maxLength:{value:e,message:L.toString(s)}})}length(e,s){return new n({...this._def,exactLength:{value:e,message:L.toString(s)}})}nonempty(e){return this.min(1,e)}};we.create=(n,e)=>new we({type:n,minLength:null,maxLength:null,exactLength:null,typeName:z.ZodArray,...V(e)});function Je(n){if(n instanceof re){let e={};for(let s in n.shape){let r=n.shape[s];e[s]=oe.create(Je(r))}return new re({...n._def,shape:()=>e})}else return n instanceof we?new we({...n._def,type:Je(n.element)}):n instanceof oe?oe.create(Je(n.unwrap())):n instanceof fe?fe.create(Je(n.unwrap())):n instanceof me?me.create(n.items.map(e=>Je(e))):n}var re=class n extends B{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),s=Z.objectKeys(e);return this._cached={shape:e,keys:s},this._cached}_parse(e){if(this._getType(e)!==R.object){let u=this._getOrReturnCtx(e);return P(u,{code:I.invalid_type,expected:R.object,received:u.parsedType}),O}let{status:r,ctx:i}=this._processInputParams(e),{shape:a,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof ue&&this._def.unknownKeys==="strip"))for(let u in i.data)o.includes(u)||l.push(u);let c=[];for(let u of o){let d=a[u],h=i.data[u];c.push({key:{status:"valid",value:u},value:d._parse(new le(i,h,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof ue){let u=this._def.unknownKeys;if(u==="passthrough")for(let d of l)c.push({key:{status:"valid",value:d},value:{status:"valid",value:i.data[d]}});else if(u==="strict")l.length>0&&(P(i,{code:I.unrecognized_keys,keys:l}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let u=this._def.catchall;for(let d of l){let h=i.data[d];c.push({key:{status:"valid",value:d},value:u._parse(new le(i,h,i.path,d)),alwaysSet:d in i.data})}}return i.common.async?Promise.resolve().then(async()=>{let u=[];for(let d of c){let h=await d.key,m=await d.value;u.push({key:h,value:m,alwaysSet:d.alwaysSet})}return u}).then(u=>ee.mergeObjectSync(r,u)):ee.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return L.errToObj,new n({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(s,r)=>{let i=this._def.errorMap?.(s,r).message??r.defaultError;return s.code==="unrecognized_keys"?{message:L.errToObj(e).message??i}:{message:i}}}:{}})}strip(){return new n({...this._def,unknownKeys:"strip"})}passthrough(){return new n({...this._def,unknownKeys:"passthrough"})}extend(e){return new n({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new n({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:z.ZodObject})}setKey(e,s){return this.augment({[e]:s})}catchall(e){return new n({...this._def,catchall:e})}pick(e){let s={};for(let r of Z.objectKeys(e))e[r]&&this.shape[r]&&(s[r]=this.shape[r]);return new n({...this._def,shape:()=>s})}omit(e){let s={};for(let r of Z.objectKeys(this.shape))e[r]||(s[r]=this.shape[r]);return new n({...this._def,shape:()=>s})}deepPartial(){return Je(this)}partial(e){let s={};for(let r of Z.objectKeys(this.shape)){let i=this.shape[r];e&&!e[r]?s[r]=i:s[r]=i.optional()}return new n({...this._def,shape:()=>s})}required(e){let s={};for(let r of Z.objectKeys(this.shape))if(e&&!e[r])s[r]=this.shape[r];else{let a=this.shape[r];for(;a instanceof oe;)a=a._def.innerType;s[r]=a}return new n({...this._def,shape:()=>s})}keyof(){return hs(Z.objectKeys(this.shape))}};re.create=(n,e)=>new re({shape:()=>n,unknownKeys:"strip",catchall:ue.create(),typeName:z.ZodObject,...V(e)});re.strictCreate=(n,e)=>new re({shape:()=>n,unknownKeys:"strict",catchall:ue.create(),typeName:z.ZodObject,...V(e)});re.lazycreate=(n,e)=>new re({shape:n,unknownKeys:"strip",catchall:ue.create(),typeName:z.ZodObject,...V(e)});var ze=class extends B{_parse(e){let{ctx:s}=this._processInputParams(e),r=this._def.options;function i(a){for(let l of a)if(l.result.status==="valid")return l.result;for(let l of a)if(l.result.status==="dirty")return s.common.issues.push(...l.ctx.common.issues),l.result;let o=a.map(l=>new se(l.ctx.common.issues));return P(s,{code:I.invalid_union,unionErrors:o}),O}if(s.common.async)return Promise.all(r.map(async a=>{let o={...s,common:{...s.common,issues:[]},parent:null};return{result:await a._parseAsync({data:s.data,path:s.path,parent:o}),ctx:o}})).then(i);{let a,o=[];for(let c of r){let u={...s,common:{...s.common,issues:[]},parent:null},d=c._parseSync({data:s.data,path:s.path,parent:u});if(d.status==="valid")return d;d.status==="dirty"&&!a&&(a={result:d,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(a)return s.common.issues.push(...a.ctx.common.issues),a.result;let l=o.map(c=>new se(c));return P(s,{code:I.invalid_union,unionErrors:l}),O}}get options(){return this._def.options}};ze.create=(n,e)=>new ze({options:n,typeName:z.ZodUnion,...V(e)});var _e=n=>n instanceof Ve?_e(n.schema):n instanceof ce?_e(n.innerType()):n instanceof Be?[n.value]:n instanceof Ze?n.options:n instanceof He?Z.objectValues(n.enum):n instanceof Ue?_e(n._def.innerType):n instanceof Fe?[void 0]:n instanceof Oe?[null]:n instanceof oe?[void 0,..._e(n.unwrap())]:n instanceof fe?[null,..._e(n.unwrap())]:n instanceof ht||n instanceof We?_e(n.unwrap()):n instanceof Ge?_e(n._def.innerType):[],Rt=class n extends B{_parse(e){let{ctx:s}=this._processInputParams(e);if(s.parsedType!==R.object)return P(s,{code:I.invalid_type,expected:R.object,received:s.parsedType}),O;let r=this.discriminator,i=s.data[r],a=this.optionsMap.get(i);return a?s.common.async?a._parseAsync({data:s.data,path:s.path,parent:s}):a._parseSync({data:s.data,path:s.path,parent:s}):(P(s,{code:I.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),O)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,s,r){let i=new Map;for(let a of s){let o=_e(a.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let l of o){if(i.has(l))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(l)}`);i.set(l,a)}}return new n({typeName:z.ZodDiscriminatedUnion,discriminator:e,options:s,optionsMap:i,...V(r)})}};function sn(n,e){let s=he(n),r=he(e);if(n===e)return{valid:!0,data:n};if(s===R.object&&r===R.object){let i=Z.objectKeys(e),a=Z.objectKeys(n).filter(l=>i.indexOf(l)!==-1),o={...n,...e};for(let l of a){let c=sn(n[l],e[l]);if(!c.valid)return{valid:!1};o[l]=c.data}return{valid:!0,data:o}}else if(s===R.array&&r===R.array){if(n.length!==e.length)return{valid:!1};let i=[];for(let a=0;a<n.length;a++){let o=n[a],l=e[a],c=sn(o,l);if(!c.valid)return{valid:!1};i.push(c.data)}return{valid:!0,data:i}}else return s===R.date&&r===R.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}var je=class extends B{_parse(e){let{status:s,ctx:r}=this._processInputParams(e),i=(a,o)=>{if(Et(a)||Et(o))return O;let l=sn(a.value,o.value);return l.valid?((Pt(a)||Pt(o))&&s.dirty(),{status:s.value,value:l.data}):(P(r,{code:I.invalid_intersection_types}),O)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([a,o])=>i(a,o)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};je.create=(n,e,s)=>new je({left:n,right:e,typeName:z.ZodIntersection,...V(s)});var me=class n extends B{_parse(e){let{status:s,ctx:r}=this._processInputParams(e);if(r.parsedType!==R.array)return P(r,{code:I.invalid_type,expected:R.array,received:r.parsedType}),O;if(r.data.length<this._def.items.length)return P(r,{code:I.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),O;!this._def.rest&&r.data.length>this._def.items.length&&(P(r,{code:I.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),s.dirty());let a=[...r.data].map((o,l)=>{let c=this._def.items[l]||this._def.rest;return c?c._parse(new le(r,o,r.path,l)):null}).filter(o=>!!o);return r.common.async?Promise.all(a).then(o=>ee.mergeArray(s,o)):ee.mergeArray(s,a)}get items(){return this._def.items}rest(e){return new n({...this._def,rest:e})}};me.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new me({items:n,typeName:z.ZodTuple,rest:null,...V(e)})};var $t=class n extends B{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:s,ctx:r}=this._processInputParams(e);if(r.parsedType!==R.object)return P(r,{code:I.invalid_type,expected:R.object,received:r.parsedType}),O;let i=[],a=this._def.keyType,o=this._def.valueType;for(let l in r.data)i.push({key:a._parse(new le(r,l,r.path,l)),value:o._parse(new le(r,r.data[l],r.path,l)),alwaysSet:l in r.data});return r.common.async?ee.mergeObjectAsync(s,i):ee.mergeObjectSync(s,i)}get element(){return this._def.valueType}static create(e,s,r){return s instanceof B?new n({keyType:e,valueType:s,typeName:z.ZodRecord,...V(r)}):new n({keyType:Ce.create(),valueType:e,typeName:z.ZodRecord,...V(s)})}},nt=class extends B{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:s,ctx:r}=this._processInputParams(e);if(r.parsedType!==R.map)return P(r,{code:I.invalid_type,expected:R.map,received:r.parsedType}),O;let i=this._def.keyType,a=this._def.valueType,o=[...r.data.entries()].map(([l,c],u)=>({key:i._parse(new le(r,l,r.path,[u,"key"])),value:a._parse(new le(r,c,r.path,[u,"value"]))}));if(r.common.async){let l=new Map;return Promise.resolve().then(async()=>{for(let c of o){let u=await c.key,d=await c.value;if(u.status==="aborted"||d.status==="aborted")return O;(u.status==="dirty"||d.status==="dirty")&&s.dirty(),l.set(u.value,d.value)}return{status:s.value,value:l}})}else{let l=new Map;for(let c of o){let u=c.key,d=c.value;if(u.status==="aborted"||d.status==="aborted")return O;(u.status==="dirty"||d.status==="dirty")&&s.dirty(),l.set(u.value,d.value)}return{status:s.value,value:l}}}};nt.create=(n,e,s)=>new nt({valueType:e,keyType:n,typeName:z.ZodMap,...V(s)});var st=class n extends B{_parse(e){let{status:s,ctx:r}=this._processInputParams(e);if(r.parsedType!==R.set)return P(r,{code:I.invalid_type,expected:R.set,received:r.parsedType}),O;let i=this._def;i.minSize!==null&&r.data.size<i.minSize.value&&(P(r,{code:I.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),s.dirty()),i.maxSize!==null&&r.data.size>i.maxSize.value&&(P(r,{code:I.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),s.dirty());let a=this._def.valueType;function o(c){let u=new Set;for(let d of c){if(d.status==="aborted")return O;d.status==="dirty"&&s.dirty(),u.add(d.value)}return{status:s.value,value:u}}let l=[...r.data.values()].map((c,u)=>a._parse(new le(r,c,r.path,u)));return r.common.async?Promise.all(l).then(c=>o(c)):o(l)}min(e,s){return new n({...this._def,minSize:{value:e,message:L.toString(s)}})}max(e,s){return new n({...this._def,maxSize:{value:e,message:L.toString(s)}})}size(e,s){return this.min(e,s).max(e,s)}nonempty(e){return this.min(1,e)}};st.create=(n,e)=>new st({valueType:n,minSize:null,maxSize:null,typeName:z.ZodSet,...V(e)});var Dt=class n extends B{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:s}=this._processInputParams(e);if(s.parsedType!==R.function)return P(s,{code:I.invalid_type,expected:R.function,received:s.parsedType}),O;function r(l,c){return pt({data:l,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,Xe(),ke].filter(u=>!!u),issueData:{code:I.invalid_arguments,argumentsError:c}})}function i(l,c){return pt({data:l,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,Xe(),ke].filter(u=>!!u),issueData:{code:I.invalid_return_type,returnTypeError:c}})}let a={errorMap:s.common.contextualErrorMap},o=s.data;if(this._def.returns instanceof Ie){let l=this;return ne(async function(...c){let u=new se([]),d=await l._def.args.parseAsync(c,a).catch(p=>{throw u.addIssue(r(c,p)),u}),h=await Reflect.apply(o,this,d);return await l._def.returns._def.type.parseAsync(h,a).catch(p=>{throw u.addIssue(i(h,p)),u})})}else{let l=this;return ne(function(...c){let u=l._def.args.safeParse(c,a);if(!u.success)throw new se([r(c,u.error)]);let d=Reflect.apply(o,this,u.data),h=l._def.returns.safeParse(d,a);if(!h.success)throw new se([i(d,h.error)]);return h.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new n({...this._def,args:me.create(e).rest(xe.create())})}returns(e){return new n({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,s,r){return new n({args:e||me.create([]).rest(xe.create()),returns:s||xe.create(),typeName:z.ZodFunction,...V(r)})}},Ve=class extends B{get schema(){return this._def.getter()}_parse(e){let{ctx:s}=this._processInputParams(e);return this._def.getter()._parse({data:s.data,path:s.path,parent:s})}};Ve.create=(n,e)=>new Ve({getter:n,typeName:z.ZodLazy,...V(e)});var Be=class extends B{_parse(e){if(e.data!==this._def.value){let s=this._getOrReturnCtx(e);return P(s,{received:s.data,code:I.invalid_literal,expected:this._def.value}),O}return{status:"valid",value:e.data}}get value(){return this._def.value}};Be.create=(n,e)=>new Be({value:n,typeName:z.ZodLiteral,...V(e)});function hs(n,e){return new Ze({values:n,typeName:z.ZodEnum,...V(e)})}var Ze=class n extends B{_parse(e){if(typeof e.data!="string"){let s=this._getOrReturnCtx(e),r=this._def.values;return P(s,{expected:Z.joinValues(r),received:s.parsedType,code:I.invalid_type}),O}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let s=this._getOrReturnCtx(e),r=this._def.values;return P(s,{received:s.data,code:I.invalid_enum_value,options:r}),O}return ne(e.data)}get options(){return this._def.values}get enum(){let e={};for(let s of this._def.values)e[s]=s;return e}get Values(){let e={};for(let s of this._def.values)e[s]=s;return e}get Enum(){let e={};for(let s of this._def.values)e[s]=s;return e}extract(e,s=this._def){return n.create(e,{...this._def,...s})}exclude(e,s=this._def){return n.create(this.options.filter(r=>!e.includes(r)),{...this._def,...s})}};Ze.create=hs;var He=class extends B{_parse(e){let s=Z.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==R.string&&r.parsedType!==R.number){let i=Z.objectValues(s);return P(r,{expected:Z.joinValues(i),received:r.parsedType,code:I.invalid_type}),O}if(this._cache||(this._cache=new Set(Z.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let i=Z.objectValues(s);return P(r,{received:r.data,code:I.invalid_enum_value,options:i}),O}return ne(e.data)}get enum(){return this._def.values}};He.create=(n,e)=>new He({values:n,typeName:z.ZodNativeEnum,...V(e)});var Ie=class extends B{unwrap(){return this._def.type}_parse(e){let{ctx:s}=this._processInputParams(e);if(s.parsedType!==R.promise&&s.common.async===!1)return P(s,{code:I.invalid_type,expected:R.promise,received:s.parsedType}),O;let r=s.parsedType===R.promise?s.data:Promise.resolve(s.data);return ne(r.then(i=>this._def.type.parseAsync(i,{path:s.path,errorMap:s.common.contextualErrorMap})))}};Ie.create=(n,e)=>new Ie({type:n,typeName:z.ZodPromise,...V(e)});var ce=class extends B{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===z.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:s,ctx:r}=this._processInputParams(e),i=this._def.effect||null,a={addIssue:o=>{P(r,o),o.fatal?s.abort():s.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),i.type==="preprocess"){let o=i.transform(r.data,a);if(r.common.async)return Promise.resolve(o).then(async l=>{if(s.value==="aborted")return O;let c=await this._def.schema._parseAsync({data:l,path:r.path,parent:r});return c.status==="aborted"?O:c.status==="dirty"?De(c.value):s.value==="dirty"?De(c.value):c});{if(s.value==="aborted")return O;let l=this._def.schema._parseSync({data:o,path:r.path,parent:r});return l.status==="aborted"?O:l.status==="dirty"?De(l.value):s.value==="dirty"?De(l.value):l}}if(i.type==="refinement"){let o=l=>{let c=i.refinement(l,a);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(r.common.async===!1){let l=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return l.status==="aborted"?O:(l.status==="dirty"&&s.dirty(),o(l.value),{status:s.value,value:l.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(l=>l.status==="aborted"?O:(l.status==="dirty"&&s.dirty(),o(l.value).then(()=>({status:s.value,value:l.value}))))}if(i.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Se(o))return O;let l=i.transform(o.value,a);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:s.value,value:l}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Se(o)?Promise.resolve(i.transform(o.value,a)).then(l=>({status:s.value,value:l})):O);Z.assertNever(i)}};ce.create=(n,e,s)=>new ce({schema:n,typeName:z.ZodEffects,effect:e,...V(s)});ce.createWithPreprocess=(n,e,s)=>new ce({schema:e,effect:{type:"preprocess",transform:n},typeName:z.ZodEffects,...V(s)});var oe=class extends B{_parse(e){return this._getType(e)===R.undefined?ne(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};oe.create=(n,e)=>new oe({innerType:n,typeName:z.ZodOptional,...V(e)});var fe=class extends B{_parse(e){return this._getType(e)===R.null?ne(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};fe.create=(n,e)=>new fe({innerType:n,typeName:z.ZodNullable,...V(e)});var Ue=class extends B{_parse(e){let{ctx:s}=this._processInputParams(e),r=s.data;return s.parsedType===R.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:s.path,parent:s})}removeDefault(){return this._def.innerType}};Ue.create=(n,e)=>new Ue({innerType:n,typeName:z.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...V(e)});var Ge=class extends B{_parse(e){let{ctx:s}=this._processInputParams(e),r={...s,common:{...s.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Qe(i)?i.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new se(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new se(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Ge.create=(n,e)=>new Ge({innerType:n,typeName:z.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...V(e)});var rt=class extends B{_parse(e){if(this._getType(e)!==R.nan){let r=this._getOrReturnCtx(e);return P(r,{code:I.invalid_type,expected:R.nan,received:r.parsedType}),O}return{status:"valid",value:e.data}}};rt.create=n=>new rt({typeName:z.ZodNaN,...V(n)});var ia=Symbol("zod_brand"),ht=class extends B{_parse(e){let{ctx:s}=this._processInputParams(e),r=s.data;return this._def.type._parse({data:r,path:s.path,parent:s})}unwrap(){return this._def.type}},mt=class n extends B{_parse(e){let{status:s,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let a=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?O:a.status==="dirty"?(s.dirty(),De(a.value)):this._def.out._parseAsync({data:a.value,path:r.path,parent:r})})();{let i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?O:i.status==="dirty"?(s.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(e,s){return new n({in:e,out:s,typeName:z.ZodPipeline})}},We=class extends B{_parse(e){let s=this._def.innerType._parse(e),r=i=>(Se(i)&&(i.value=Object.freeze(i.value)),i);return Qe(s)?s.then(i=>r(i)):r(s)}unwrap(){return this._def.innerType}};We.create=(n,e)=>new We({innerType:n,typeName:z.ZodReadonly,...V(e)});function cs(n,e){let s=typeof n=="function"?n(e):typeof n=="string"?{message:n}:n;return typeof s=="string"?{message:s}:s}function ms(n,e={},s){return n?Te.create().superRefine((r,i)=>{let a=n(r);if(a instanceof Promise)return a.then(o=>{if(!o){let l=cs(e,r),c=l.fatal??s??!0;i.addIssue({code:"custom",...l,fatal:c})}});if(!a){let o=cs(e,r),l=o.fatal??s??!0;i.addIssue({code:"custom",...o,fatal:l})}}):Te.create()}var oa={object:re.lazycreate},z;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(z||(z={}));var la=(n,e={message:`Input not instance of ${n.name}`})=>ms(s=>s instanceof n,e),fs=Ce.create,gs=Ae.create,ca=rt.create,da=Le.create,vs=Ne.create,ua=Me.create,pa=et.create,ha=Fe.create,ma=Oe.create,fa=Te.create,ga=xe.create,va=ue.create,ya=tt.create,ba=we.create,ka=re.create,_a=re.strictCreate,xa=ze.create,wa=Rt.create,Sa=je.create,Ca=me.create,Ta=$t.create,Ia=nt.create,Ea=st.create,Pa=Dt.create,Ra=Ve.create,$a=Be.create,Da=Ze.create,Aa=He.create,La=Ie.create,Na=ce.create,Ma=oe.create,Fa=fe.create,Oa=ce.createWithPreprocess,za=mt.create,ja=()=>fs().optional(),Va=()=>gs().optional(),Ba=()=>vs().optional(),Za={string:n=>Ce.create({...n,coerce:!0}),number:n=>Ae.create({...n,coerce:!0}),boolean:n=>Ne.create({...n,coerce:!0}),bigint:n=>Le.create({...n,coerce:!0}),date:n=>Me.create({...n,coerce:!0})};var Ha=O;var Ua=_.enum(["pending","running","complete","error"]),Ga=_.object({status:Ua,startedAt:_.string().optional(),completedAt:_.string().optional(),error:_.string().optional(),chunks:_.number().int().positive().optional()}),Wa=_.object({schemaVersion:_.string(),toolVersion:_.string(),analyzedAt:_.string(),gitSha:_.string().optional(),gitBranch:_.string().optional(),targetPath:_.string(),modules:_.record(_.string(),Ga)}),Ka=_.enum(["source","test","config","docs","generated","asset","build","other"]),Ya=_.object({path:_.string(),size:_.number().int().nonnegative(),language:_.string(),lineCount:_.number().int().nonnegative(),hash:_.string(),role:Ka,category:_.string(),lastModified:_.number().int().nonnegative().optional()}),qa=_.object({totalFiles:_.number().int().nonnegative(),totalLines:_.number().int().nonnegative(),byLanguage:_.record(_.string(),_.number().int().nonnegative()),byRole:_.record(_.string(),_.number().int().nonnegative()),byCategory:_.record(_.string(),_.number().int().nonnegative())}),Xa=_.object({files:_.array(Ya),summary:qa}),Qa=_.enum(["static","dynamic","require","reexport","type"]),Ja=_.object({from:_.string(),to:_.string(),type:Qa,symbols:_.array(_.string())}),ei=_.object({package:_.string(),importedBy:_.array(_.string()),symbols:_.array(_.string())}),ti=_.object({cycle:_.array(_.string())}),ni=_.object({totalEdges:_.number().int().nonnegative(),totalExternal:_.number().int().nonnegative(),circularCount:_.number().int().nonnegative(),circulars:_.array(ti),mostImported:_.array(_.object({path:_.string(),count:_.number().int().nonnegative()})),avgImportsPerFile:_.number().nonnegative()}),si=_.object({edges:_.array(Ja),external:_.array(ei),summary:ni}),ri=_.enum(["observation","pattern","relationship","anti-pattern","suggestion"]),ai=_.object({type:ri,pass:_.number().int().nonnegative(),scope:_.string(),text:_.string(),severity:_.enum(["info","warning","critical"]).optional(),related:_.array(_.string()).optional()}),ii=_.object({id:_.string(),name:_.string(),description:_.string(),files:_.array(_.string()),entryPoints:_.array(_.string()),cohesion:_.number().min(0).max(1),coupling:_.number().min(0).max(1),insights:_.array(_.string()).optional()}),oi=_.object({from:_.string(),to:_.string(),fromZone:_.string(),toZone:_.string()}),li=_.object({zones:_.array(ii),crossings:_.array(oi),unzoned:_.array(_.string()),insights:_.array(_.string()).optional(),findings:_.array(ai).optional(),enrichmentPass:_.number().int().nonnegative().optional(),metaEvaluationCount:_.number().int().nonnegative().optional(),structureHash:_.string().optional(),zoneContentHashes:_.record(_.string()).optional()}),ci=_.enum(["function","arrow","class","forwardRef"]),di=_.object({file:_.string(),name:_.string(),kind:ci,line:_.number().int().positive(),isDefaultExport:_.boolean(),conventionExports:_.array(_.string())}),ui=_.object({from:_.string(),to:_.string(),componentName:_.string(),usageCount:_.number().int().positive()}),pi=_.enum(["loader","action","default","meta","links","headers","ErrorBoundary","shouldRevalidate","handle","HydrateFallback"]),hi=_.object({file:_.string(),routePattern:_.string().nullable(),exports:_.array(pi),parentLayout:_.string().nullable(),isLayout:_.boolean(),isIndex:_.boolean()}),ys=_.lazy(()=>_.object({file:_.string(),routePattern:_.string(),children:_.array(ys)})),mi=_.object({totalComponents:_.number().int().nonnegative(),totalRouteModules:_.number().int().nonnegative(),totalUsageEdges:_.number().int().nonnegative(),routeConventions:_.record(_.string(),_.number().int().nonnegative()),mostUsedComponents:_.array(_.object({name:_.string(),file:_.string(),usageCount:_.number().int().positive()})),layoutDepth:_.number().int().nonnegative()}),fi=_.object({components:_.array(di),usageEdges:_.array(ui),routeModules:_.array(hi),routeTree:_.array(ys),summary:mi});function ft(n,e){let s=n.safeParse(e);return s.success?{ok:!0,data:s.data}:{ok:!1,errors:s.error}}function rn(n){return ft(Wa,n)}function an(n){return ft(Xa,n)}function on(n){return ft(si,n)}function ln(n){return ft(li,n)}function cn(n){return ft(fi,n)}var de={manifest:"manifest.json",inventory:"inventory.json",imports:"imports.json",zones:"zones.json",components:"components.json"},bs=Object.values(de);var ks="1.0.0";var gi={manifest:[],inventory:[],imports:[],zones:[],components:[]};function dn(n,e){if(!e||typeof e!="object")return e;let r=n==="manifest"?e.schemaVersion:void 0;if(r===ks)return e;let i=gi[n];if(!i?.length)return e;let a=e,o=r||"0.0.0";for(let l of i)o===l.from&&(a=l.migrate(a),o=l.to);return a}var vt={manifest:null,inventory:null,imports:null,zones:null,components:null},un=null,gt=null,_s={};function xs(n){un=n}function ws(){un&&un(vt)}async function pn(){let n=[{key:"manifest",file:de.manifest,validate:rn},{key:"inventory",file:de.inventory,validate:an},{key:"imports",file:de.imports,validate:on},{key:"zones",file:de.zones,validate:ln},{key:"components",file:de.components,validate:cn}],e=await Promise.allSettled(n.map(async s=>{let r=await fetch(`/data/${s.file}`);if(!r.ok)return null;let i=await r.json(),a=dn(s.key,i),o=s.validate(a);return o.ok?{key:s.key,data:o.data}:(console.warn(`Validation failed for ${s.file}:`,o),null)}));for(let s of e)s.status==="fulfilled"&&s.value&&(vt[s.value.key]=s.value.data);return ws(),vt}async function Ss(n){let e=new Map;for(let r of n)e.set(r.name,r);let s=[{key:"manifest",file:de.manifest,validate:rn},{key:"inventory",file:de.inventory,validate:an},{key:"imports",file:de.imports,validate:on},{key:"zones",file:de.zones,validate:ln},{key:"components",file:de.components,validate:cn}];for(let r of s){let i=e.get(r.file);if(i)try{let a=await i.text(),o=JSON.parse(a),l=dn(r.key,o),c=r.validate(l);c.ok?vt[r.key]=c.data:console.warn(`Validation failed for ${r.file}:`,c)}catch(a){console.warn(`Failed to parse ${r.file}:`,a)}}return ws(),vt}async function Cs(){try{if((await fetch("/data")).ok)return"server"}catch{}return"static"}function Ts(n=5e3){gt||(gt=setInterval(async()=>{try{let e=await fetch("/data/status");if(!e.ok)return;let s=await e.json(),r=!1;for(let[i,a]of Object.entries(s.mtimes))if(_s[i]!==a){r=!0;break}r&&(_s=s.mtimes,await pn())}catch{}},n))}function Is(){gt&&(clearInterval(gt),gt=null)}var ge={architecture:2,problems:3,suggestions:4},U=["#00E5B9","#6c41f0","#ff5926","#d52e66","#00bd81","#001769","#7dd3fc","#fbbf24"];var vi={sourcevision:"/SourceVision-F.png",rex:"/Rex-F.png",hench:"/Hench-F.png"};function hn({size:n=36,class:e}){return t("img",{src:"/n-dx.png",width:n,height:n,alt:"","aria-hidden":"true",class:`logo logo-ndx-png${e?` ${e}`:""}`})}function At({product:n,size:e=20,class:s}){let r=vi[n];return r?t("img",{src:r,width:e,height:e,alt:"","aria-hidden":"true",class:`logo logo-product-png${s?` ${s}`:""}`}):null}function G({product:n,title:e,class:s}){return t("div",{class:`branded-header${s?` ${s}`:""}`},t(At,{product:n,size:16,class:"branded-header-logo"}),t("span",{class:"branded-header-label"},e))}function Es(){let e=localStorage.getItem("sv-theme")||(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");document.documentElement.setAttribute("data-theme",e)}function yi(){let[n,e]=C(()=>document.documentElement.getAttribute("data-theme")||"dark");return{theme:n,toggle:()=>{let r=n==="dark"?"light":"dark";document.documentElement.setAttribute("data-theme",r),localStorage.setItem("sv-theme",r),e(r)}}}function Ps(){let{theme:n,toggle:e}=yi();return t("button",{class:"sidebar-control-btn",onClick:e,title:n==="dark"?"Switch to light mode":"Switch to dark mode","aria-label":n==="dark"?"Switch to light mode":"Switch to dark mode"},n==="dark"?"\u2600":"\u263E")}var Rs=[{title:"Getting Started",items:[{question:"How do I set up n-dx for a new project?",answer:"Run 'ndx init .' in your project root. This initializes SourceVision (static analysis), Rex (PRD management), and Hench (autonomous agent) directories.",docLink:{label:"Overview",hash:"overview"}},{question:"What does 'ndx plan' do?",answer:"It runs SourceVision analysis on your codebase and feeds the results into Rex, which proposes epics, features, and tasks for your PRD. Use 'ndx plan --accept' to add proposals to your PRD."},{question:"How do I execute tasks autonomously?",answer:"Run 'ndx work .' to let Hench pick the next Rex task, build a brief, and execute it using Claude in a tool-use loop. You can target a specific task with '--task=ID'."}]},{title:"SourceVision",items:[{question:"What are zones and how are they detected?",answer:"Zones are architectural areas detected by Louvain community detection on the import graph. Files with strong internal connections cluster into zones. Low cohesion (<0.4) suggests a zone should be split; high coupling (>0.6) suggests merging.",docLink:{label:"Zones view",hash:"zones"}},{question:"What are enrichment passes?",answer:"SourceVision runs multiple analysis passes. Pass 1 covers inventory, imports, zones, and components. Passes 2-4 add AI-generated architecture insights, problem detection, and suggestions. Run additional 'sourcevision analyze' passes for deeper analysis."},{question:"What does the import graph show?",answer:"A force-directed visualization where nodes are files colored by zone. Orange cross-zone edges highlight potential boundary violations. Dense clusters suggest tight coupling; isolated nodes may be dead code.",docLink:{label:"Import Graph",hash:"graph"}}]},{title:"Rex (PRD Management)",items:[{question:"How is the PRD structured?",answer:"The PRD is a tree: epics contain features, features contain tasks, and tasks can have subtasks. Each item has a status (pending, in_progress, completed, deferred, blocked, deleted), priority, and optional acceptance criteria.",docLink:{label:"Tasks view",hash:"prd"}},{question:"How does Rex determine the next task?",answer:"Rex considers priority (critical > high > medium > low), dependency blocking (items with unresolved blockers are skipped), and tree position (earlier items in the tree are preferred).",docLink:{label:"Rex Dashboard",hash:"rex-dashboard"}},{question:"Can I sync my PRD with Notion?",answer:"Yes. Configure a Notion adapter, then run 'ndx sync .' to bidirectionally sync your local PRD with a Notion database. Use '--push' or '--pull' for one-way sync."}]},{title:"Hench (Autonomous Agent)",items:[{question:"What happens during an autonomous run?",answer:"Hench picks the next Rex task, generates a detailed brief with context from SourceVision and Rex, then calls Claude in a tool-use loop. It reads files, writes code, runs tests, and commits changes. Runs are recorded in .hench/runs/.",docLink:{label:"Hench Runs",hash:"hench-runs"}},{question:"How do I monitor agent progress?",answer:"Use 'ndx status .' to check PRD completion. The Hench Runs view in this dashboard shows run history, transcripts, and token usage for each autonomous execution.",docLink:{label:"Token Usage",hash:"token-usage"}},{question:"Can I limit which tasks Hench works on?",answer:"Yes. Use 'ndx work --task=ID' to target a specific task. You can also use '--dry-run' to see what Hench would do without executing. Configure model and max turns in .hench/config.json."}]},{title:"Dashboard",items:[{question:"How do I switch between light and dark mode?",answer:"Use the theme toggle (sun/moon icon) in the sidebar footer. Your preference is saved automatically and persists across sessions."},{question:"What do the locked navigation items mean?",answer:"Items marked with P2, P3, or P4 badges require additional SourceVision enrichment passes. Run more 'sourcevision analyze' passes to unlock Architecture, Problems, and Suggestions views."},{question:"Can I run the dashboard in the background?",answer:"Yes. Run 'ndx web --background .' to start the dashboard as a daemon. Use 'ndx web stop' to stop it and 'ndx web status' to check if it's running."}]}];function $s(){let[n,e]=C(!1),[s,r]=C(Rs[0].title),i=N(a=>{r(o=>o===a?null:a)},[]);return H(()=>{if(!n)return;let a=o=>{o.key==="Escape"&&e(!1)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[n]),t(j,null,t("button",{class:"sidebar-control-btn",onClick:()=>e(!0),title:"Help & FAQ","aria-label":"Open help and FAQ"},"?"),n?t("div",{class:"faq-overlay",onClick:()=>e(!1),role:"dialog","aria-label":"Help and FAQ","aria-modal":"true"},t("div",{class:"faq-modal",onClick:a=>a.stopPropagation()},t("div",{class:"faq-header"},t("h2",null,"Help & FAQ"),t("button",{class:"faq-close",onClick:()=>e(!1),"aria-label":"Close FAQ"},"\u2715")),t("div",{class:"faq-body"},Rs.map(a=>{let o=s===a.title;return t("div",{key:a.title,class:"faq-section"},t("div",{class:"faq-section-header",role:"button",tabIndex:0,"aria-expanded":String(o),onClick:()=>i(a.title),onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),i(a.title))}},t("span",{class:`faq-section-chevron${o?" faq-section-chevron-open":""}`,"aria-hidden":"true"},"\u25B8"),t("span",null,a.title)),o?t("div",{class:"faq-section-items"},a.items.map((l,c)=>t("div",{key:c,class:"faq-item"},t("div",{class:"faq-question"},l.question),t("div",{class:"faq-answer"},l.answer),l.docLink?t("a",{class:"faq-doc-link",href:`#${l.docLink.hash}`,onClick:()=>e(!1)},`\u2192 ${l.docLink.label}`):null))):null)})),t("div",{class:"faq-footer"},t("p",null,"For CLI reference, run ",t("code",null,"ndx --help")," or ",t("code",null,"ndx <command> --help"))))):null)}var mn="sidebar-expanded-section",bi=[{type:"section",label:"SOURCEVISION",product:"sourcevision"},{type:"item",id:"overview",icon:"\u25A3",label:"Overview",minPass:0},{type:"item",id:"graph",icon:"\u2B95",label:"Import Graph",minPass:0},{type:"item",id:"zones",icon:"\u2B22",label:"Zones",minPass:0},{type:"item",id:"files",icon:"\u2630",label:"Files",minPass:0},{type:"item",id:"routes",icon:"\u25C7",label:"Routes",minPass:0},{type:"item",id:"architecture",icon:"\u25E8",label:"Architecture",minPass:ge.architecture},{type:"item",id:"problems",icon:"\u26A0",label:"Problems",minPass:ge.problems},{type:"item",id:"suggestions",icon:"\u2728",label:"Suggestions",minPass:ge.suggestions},{type:"section",label:"REX",product:"rex"},{type:"item",id:"rex-dashboard",icon:"\u25A8",label:"Dashboard",minPass:0},{type:"item",id:"prd",icon:"\u2611",label:"Tasks",minPass:0},{type:"item",id:"rex-analysis",icon:"\u2699",label:"Analysis",minPass:0},{type:"item",id:"validation",icon:"\u2714",label:"Validation",minPass:0},{type:"item",id:"token-usage",icon:"\u229A",label:"Token Usage",minPass:0},{type:"section",label:"HENCH",product:"hench"},{type:"item",id:"hench-runs",icon:"\u25B6",label:"Runs",minPass:0}];function ki(){let n=[],e=null;for(let s of bi)s.type==="section"?(e={label:s.label,product:s.product,items:[]},n.push(e)):e&&e.items.push(s);return n}var Ee=ki();function fn(n){for(let e of Ee)if(e.items.some(s=>s.id===n))return e.label;return Ee[0].label}function _i(n){try{let e=localStorage.getItem(mn);if(e&&Ee.some(s=>s.label===e))return e}catch{}return fn(n)}var Ds={};for(let n of Ee)n.product&&n.items.length>0&&(Ds[n.product]=n.items[0].id);function As({view:n,onNavigate:e,manifest:s,zones:r,sidebarCollapsed:i,onToggleSidebar:a}){let[o,l]=C(!1),[c,u]=C(()=>_i(n)),d=r?.enrichmentPass??0,h=s?.modules??{},m=["inventory","imports","zones","components"],p=m.filter(v=>h[v]?.status==="complete").length,g=$(()=>{let v=fn(n);return Ee.find(k=>k.label===v)?.product??null},[n]),y=$(()=>{for(let v of Ee){let S=v.items.find(k=>k.id===n);if(S)return S.label}return null},[n]),f=N(v=>{e(v),l(!1)},[e]),x=N(v=>{u(S=>{let k=S===v?"":v;try{localStorage.setItem(mn,k)}catch{}return k})},[]),b=be(n);return H(()=>{if(b.current===n)return;b.current=n;let v=fn(n);u(S=>{if(S===v)return S;try{localStorage.setItem(mn,v)}catch{}return v})},[n]),H(()=>{let v=S=>{(S.metaKey||S.ctrlKey)&&S.key==="b"&&(S.preventDefault(),a())};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[a]),H(()=>{if(!o)return;let v=S=>{S.key==="Escape"&&l(!1)};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[o]),t("div",{class:`sidebar${o?" mobile-open":""}${i?" sidebar-collapsed":""}`,role:"navigation","aria-label":"Main navigation"},i?t("div",{class:"sidebar-rail","aria-label":"Collapsed navigation"},t("div",{class:"sidebar-rail-logo",onClick:()=>f("overview"),role:"button",tabIndex:0,title:"n-dx \u2014 Overview","aria-label":"Go to Overview",onKeyDown:v=>{(v.key==="Enter"||v.key===" ")&&(v.preventDefault(),f("overview"))}},t(hn,{size:48})),t("div",{class:"sidebar-rail-divider","aria-hidden":"true"}),t("nav",{class:"sidebar-rail-nav","aria-label":"Section navigation"},Ee.filter(v=>v.product).map(v=>{let S=v.product,k=g===S,T=Ds[S];return t("button",{key:S,class:`sidebar-rail-section${k?" sidebar-rail-section-active":""} sidebar-rail-section-${S}`,onClick:()=>f(T),title:`${v.label}${k&&y?` \u2014 ${y}`:""}`,"aria-label":`${v.label}${k?" (current section)":""}`,"aria-current":k?"true":void 0},k?t("span",{class:"sidebar-rail-accent","aria-hidden":"true"}):null,t(At,{product:S,size:48,class:"sidebar-rail-icon"}))})),t("button",{class:"sidebar-rail-expand",onClick:a,"aria-label":"Expand sidebar",title:"Expand sidebar (\u2318B)"},t("svg",{width:16,height:16,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"},t("path",{d:"M5 2l6 6-6 6"})))):null,i?null:t("button",{class:"sidebar-toggle-btn",onClick:a,"aria-label":"Collapse sidebar",title:"Collapse sidebar (\u2318B)"},t("svg",{width:14,height:14,viewBox:"0 0 14 14",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"},t("path",{d:"M9 2L4 7l5 5"}))),t("div",{class:"sidebar-header"},t("div",{class:"sidebar-brand"},t(hn,{size:36,class:"sidebar-logo"}),t("div",{class:"sidebar-brand-text"},t("h1",null,"n-dx"),t("div",{class:"sidebar-subtitle"},"Developer Experience,",t("br",null),"by En Dash"))),t("button",{class:"mobile-menu-btn",onClick:()=>l(!o),"aria-label":o?"Close menu":"Open menu","aria-expanded":String(o)},o?"\u2715":"\u2630")),t("nav",{class:"sidebar-nav","aria-label":"View navigation"},Ee.map(v=>{let S=c===v.label;return t("div",{key:v.label,class:"nav-section"},t("div",{class:`nav-section-header${v.product?` nav-section-${v.product}`:""}`,role:"button",tabIndex:0,"aria-expanded":String(S),"aria-controls":`nav-section-${v.label}`,onClick:()=>x(v.label),onKeyDown:k=>{(k.key==="Enter"||k.key===" ")&&(k.preventDefault(),x(v.label))}},v.product?t(At,{product:v.product,size:40,class:"nav-section-logo"}):null,t("span",{class:"nav-section-label"},v.label),t("svg",{class:`nav-section-chevron${S?" nav-section-chevron-open":""}`,width:12,height:12,viewBox:"0 0 12 12",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","aria-hidden":"true"},t("path",{d:"M3 4.5l3 3 3-3"}))),t("div",{id:`nav-section-${v.label}`,class:`nav-section-items${S?"":" nav-section-items-collapsed"}`,role:"group","aria-label":`${v.label} views`},v.items.map(k=>{let T=k.minPass>0&&d<k.minPass;return t("div",{key:k.id,class:`nav-item ${n===k.id?"active":""} ${T?"locked":""}`,onClick:T?void 0:()=>f(k.id),role:"button",tabIndex:T||!S?-1:0,"aria-current":n===k.id?"page":void 0,"aria-disabled":T?"true":void 0,onKeyDown:A=>{!T&&(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),f(k.id))}},t("span",{class:"nav-icon","aria-hidden":"true"},k.icon),k.label,T?t("span",{class:"nav-badge"},`P${k.minPass}`):null)}),v.product==="sourcevision"&&s?t("div",{class:"sidebar-progress",role:"button",tabIndex:S?0:-1,"aria-label":`Analysis progress: ${p} of ${m.length} complete \u2014 click to view`,onClick:()=>f("overview"),onKeyDown:k=>{(k.key==="Enter"||k.key===" ")&&(k.preventDefault(),f("overview"))}},t("div",{class:"progress-label"},`Analysis: ${p}/${m.length}`),t("div",{class:"progress-bar",role:"progressbar","aria-valuenow":String(p),"aria-valuemin":"0","aria-valuemax":String(m.length)},t("div",{class:"progress-fill",style:`width: ${p/m.length*100}%`})),t("div",{class:"progress-modules"},m.map(k=>{let T=h[k]?.status;return t("span",{key:k,class:`progress-module ${T==="complete"?"done":T==="error"?"error":""}`,title:k},T==="complete"?"\u2713":T==="error"?"\u2717":"\u25CB")}))):null))})),t("div",{class:"sidebar-controls",role:"group","aria-label":"Global controls"},t(Ps,null),t($s,null)),o?t("div",{class:"sidebar-backdrop",onClick:()=>l(!1),"aria-hidden":"true"}):null)}function Ls(n){let e=new Map;return n&&n.zones.forEach((s,r)=>{let i=U[r%U.length];for(let a of s.files)e.set(a,{id:s.id,name:s.name,color:i})}),e}function at(n,e=!1){let s=e?1-n:n;return s>=.7?"good":s>=.4?"mid":"bad"}function Lt(n){let e=new Map;for(let s of n){let r=`${s.fromZone}->${s.toZone}`;e.set(r,(e.get(r)||0)+1)}return[...e.entries()].map(([s,r])=>{let[i,a]=s.split("->");return{from:i,to:a,weight:r}})}function Nt(n){return n.zones.map((e,s)=>({id:e.id,label:e.name,color:U[s%U.length]}))}function Ns({detail:n,data:e,navigateTo:s,onClose:r,prdDetailContent:i}){if(H(()=>{if(!n)return;let o=l=>{l.key==="Escape"&&r()};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[n,r]),!n)return null;let a;return n.type==="prd"&&i?a=i:n.type==="file"?a=xi(n,e,s,r):n.type==="zone"?a=wi(n,e,s):a=Si(n),t(j,null,t("div",{class:"detail-backdrop",onClick:r,"aria-hidden":"true"}),t("div",{class:"detail-panel open",role:"complementary","aria-label":"Item details"},t("div",{class:"detail-header"},t("h3",null,n.title||"Details"),t("button",{class:"detail-close",onClick:r,"aria-label":"Close detail panel",title:"Close (Esc)"},"\u2715",t("span",{class:"sr-only"},"Close"))),a))}function xi(n,e,s,r){let i=n.path,a=e?.imports,o=e?.zones,l=null;if(o)for(let d=0;d<o.zones.length;d++){let h=o.zones[d];if(h.files.includes(i)){l={id:h.id,name:h.name,color:U[d%U.length]};break}}let c=a?.edges.filter(d=>d.to===i).map(d=>d.from)??[],u=a?.edges.filter(d=>d.from===i).map(d=>d.to)??[];return t(j,null,t("div",{class:"detail-code"},i),n.language?t("div",{class:"detail-row"},t("span",{class:"label"},"Language"),t("span",null,n.language)):null,n.size?t("div",{class:"detail-row"},t("span",{class:"label"},"Size"),t("span",null,n.size)):null,n.lines?t("div",{class:"detail-row"},t("span",{class:"label"},"Lines"),t("span",null,String(n.lines))):null,n.role?t("div",{class:"detail-row"},t("span",{class:"label"},"Role"),t("span",null,n.role)):null,n.category?t("div",{class:"detail-row"},t("span",{class:"label"},"Category"),t("span",null,n.category)):null,l?t("div",{class:"detail-row"},t("span",{class:"label"},"Zone"),t("span",{class:"zone-badge",style:`--zone-color: ${l.color}`},l.name)):null,c.length>0?t("div",{class:"mt-12"},t("div",{class:"label mb-6"},`Imported by (${c.length})`),t("div",{class:"detail-import-list"},c.slice(0,10).map(d=>t("div",{key:d,class:"detail-import-item",title:d},d.split("/").pop()||d)),c.length>10?t("div",{class:"detail-import-item text-dim"},`... and ${c.length-10} more`):null)):null,u.length>0?t("div",{class:"mt-12"},t("div",{class:"label mb-6"},`Imports (${u.length})`),t("div",{class:"detail-import-list"},u.slice(0,10).map(d=>t("div",{key:d,class:"detail-import-item",title:d},d.split("/").pop()||d)),u.length>10?t("div",{class:"detail-import-item text-dim"},`... and ${u.length-10} more`):null)):null,s?t("button",{class:"detail-nav-btn",onClick:()=>s("graph",{file:i})},"\u2B95 View in Graph"):null)}function wi(n,e,s){let r=n.zoneId||n.id,i=e?.zones,a=i?.zones.find(u=>u.id===r),o=parseFloat(n.cohesion??String(a?.cohesion??0)),l=parseFloat(n.coupling??String(a?.coupling??0)),c=i?.findings?.filter(u=>u.scope===r)??[];return t(j,null,n.description?t("p",{class:"section-sub"},n.description):null,t("div",{class:"detail-row"},t("span",{class:"label"},"Files"),t("span",null,String(n.files))),a&&a.entryPoints.length>0?t("div",{class:"mt-8"},t("div",{class:"label"},"Entry Points"),t("div",{class:"detail-import-list"},a.entryPoints.map(u=>t("div",{key:u,class:"detail-import-item",title:u},u.split("/").pop()||u)))):null,t("div",{class:"mt-12"},t("div",{class:"detail-row"},t("span",{class:"label"},"Cohesion"),t("span",null,o.toFixed(2))),t("div",{class:"meter"},t("div",{class:`meter-fill ${at(o)}`,style:`width: ${o*100}%`}))),t("div",{class:"mt-8"},t("div",{class:"detail-row"},t("span",{class:"label"},"Coupling"),t("span",null,l.toFixed(2))),t("div",{class:"meter"},t("div",{class:`meter-fill ${at(l,!0)}`,style:`width: ${l*100}%`}))),c.length>0?t("div",{class:"mt-12"},t("div",{class:"label mb-6"},`Findings (${c.length})`),c.slice(0,5).map((u,d)=>t("div",{key:d,class:"detail-finding-item"},u.text)),c.length>5?t("div",{class:"detail-more"},`... and ${c.length-5} more`):null):null,s?t("div",{class:"detail-nav-group"},t("button",{class:"detail-nav-btn",onClick:()=>s("files",{zone:r})},"\u2630 View in Files"),t("button",{class:"detail-nav-btn",onClick:()=>s("problems")},"\u26A0 View Problems"),t("button",{class:"detail-nav-btn",onClick:()=>s("suggestions")},"\u2728 View Suggestions")):null)}function Si(n){let e=Object.entries(n).filter(([s,r])=>s!=="type"&&r!==void 0&&r!==null);return t(j,null,e.map(([s,r])=>{if(s==="title")return null;let i=Array.isArray(r)?r.length>5?`${r.slice(0,5).join(", ")}... (${r.length} total)`:r.join(", "):typeof r=="object"?JSON.stringify(r):String(r);return t("div",{key:s,class:"detail-row"},t("span",{class:"label"},Ci(s)),t("span",null,i))}))}function Ci(n){return n.replace(/([A-Z])/g," $1").replace(/^./,e=>e.toUpperCase()).trim()}var Ms={overview:{title:"Overview",description:"Dashboard showing high-level project statistics: file counts, languages, import density, zone structure, and module completion status.",lookFor:"High import counts on single files (hub files). Circular dependencies. Unbalanced language distribution.",actions:"Check module status table to see which analysis phases have completed. Run additional 'sourcevision analyze' passes for deeper AI-generated insights."},graph:{title:"Import Graph",description:"Force-directed visualization of the import graph. Nodes are colored by zone. Cross-zone edges are highlighted in orange.",lookFor:"Dense clusters suggest tightly-coupled modules. Orange cross-zone edges indicate zone boundary violations. Isolated nodes may be dead code.",actions:"Click nodes to inspect. Look for hub files that could be split. Consider if cross-zone imports suggest zones should be merged or boundaries clarified."},zones:{title:"Zones",description:"Architectural zones detected by Louvain community detection. Each zone groups files with strong internal import connections.",lookFor:"Cohesion < 0.4 means files in a zone aren't well-related \u2014 consider splitting. Coupling > 0.6 means heavy cross-zone dependencies. Large zones (>50 files) may need decomposition.",actions:"Click a zone to see its files and entry points. Review AI-generated insights. Check if zone boundaries match your intended architecture."},files:{title:"Files",description:"Sortable, filterable table of all project files with language, role, size, and category information.",lookFor:"Very large files (>500 lines) that might benefit from splitting. Files classified as 'other' role that should be reclassified. Category groupings that reveal organizational patterns.",actions:"Sort by line count to find the largest files. Filter by role to focus on source, test, or config files. Use search to locate specific files."},routes:{title:"Routes",description:"Route tree showing React Router v7 / Remix file-based routes with their convention exports (loader, action, meta, etc).",lookFor:"Route modules missing loaders (data fetching). Missing ErrorBoundary exports. Deep layout nesting. Routes without meta exports (SEO gaps).",actions:"Check convention coverage stats to identify missing exports. Review the route tree for proper nesting. Look at component usage for shared UI patterns."},architecture:{title:"Architecture",description:"Architectural patterns and relationships identified by AI analysis. Requires enrichment pass 2.",lookFor:"Cross-cutting concerns, shared utilities, interface boundaries between zones, dependency direction patterns.",actions:"Compare observed patterns against your intended architecture. Look for findings tagged as relationships \u2014 these show how zones interact."},problems:{title:"Problems",description:"Anti-patterns and issues identified by AI analysis. Grouped by severity (critical, warning, info). Requires enrichment pass 3.",lookFor:"Critical issues first. Circular dependencies between zones. God files. Leaky abstractions. Tight coupling patterns.",actions:"Address critical findings first. Group related warnings for batch fixes. Use related file references to understand the scope of each issue."},suggestions:{title:"Suggestions",description:"Improvement suggestions from AI analysis. Requires enrichment pass 4.",lookFor:"Quick wins vs larger refactors. Suggestions that align with your current sprint goals. Patterns that could benefit from abstraction.",actions:"Prioritize suggestions by scope (global vs zone-specific). Start with suggestions that reduce coupling or improve cohesion."}};function Fs({view:n}){let[e,s]=C(!1),r=Ms[n]||Ms.overview;return H(()=>{if(!e)return;let i=a=>{a.key==="Escape"&&s(!1)};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[e]),t(j,null,t("button",{class:"guide-btn",onClick:()=>s(!e),title:"View guide","aria-label":"View guide for this page","aria-expanded":String(e)},"?"),e?t("div",{class:"guide-overlay",onClick:()=>s(!1),role:"dialog","aria-modal":"true","aria-label":`Guide: ${r.title}`},t("div",{class:"guide-modal",onClick:i=>i.stopPropagation()},t("div",{class:"guide-header"},t("h2",null,r.title),t("button",{class:"guide-close",onClick:()=>s(!1),"aria-label":"Close guide"},"\u2715")),t("div",{class:"guide-body"},t("section",null,t("h3",null,"What you're looking at"),t("p",null,r.description)),t("section",null,t("h3",null,"What to look for"),t("p",null,r.lookFor)),t("section",null,t("h3",null,"What actions to take"),t("p",null,r.actions))))):null)}function ve({data:n,width:e=500,height:s}){if(n.length===0)return null;let r=22,i=4,a=150,o=50,l=s??n.length*(r+i),c=e-a-o-16,u=Math.max(...n.map(d=>d.value),1);return t("svg",{viewBox:`0 0 ${e} ${l}`,class:"chart-block",preserveAspectRatio:"xMinYMin meet"},n.map((d,h)=>{let m=h*(r+i),p=Math.max(d.value/u*c,2);return t("g",{key:d.label},t("text",{x:a-8,y:m+r/2+4,"text-anchor":"end",class:"bar-chart-label"},Ii(d.label)),t("rect",{x:a,y:m+2,width:p,height:r-4,rx:3,fill:d.color||"var(--accent)",opacity:.85}),t("text",{x:a+p+6,y:m+r/2+4,class:"bar-chart-value"},String(d.value)))}))}function Ti(n,e){return n.length>e?n.slice(0,e-1)+"\u2026":n}function Ii(n){return n.length>22?n.slice(0,21)+"\u2026":n}function Mt({nodes:n,edges:e,onNodeClick:s}){if(n.length===0)return null;let r=700,i=Math.max(400,200+n.length*30),a=r/2,o=i/2,l=Math.min(a,o)-60,c=22,u=n.length<=6?1/0:20,d=new Map;n.forEach((m,p)=>{let g=2*Math.PI*p/n.length-Math.PI/2;d.set(m.id,{x:a+l*Math.cos(g),y:o+l*Math.sin(g)})});let h=Math.max(...e.map(m=>m.weight),1);return t("div",{class:"flow-diagram"},t("svg",{viewBox:`0 0 ${r} ${i}`,preserveAspectRatio:"xMidYMid meet",class:"chart-block",style:"max-width: 800px; margin: 0 auto 16px;"},e.map((m,p)=>{let g=d.get(m.from),y=d.get(m.to);if(!g||!y)return null;let f=Math.max(1,m.weight/h*4),x=.3+m.weight/h*.5,b=m.weight/h>.5,v=(g.x+y.x)/2,S=(g.y+y.y)/2,k=y.x-g.x,T=y.y-g.y,A=Math.min(30,Math.sqrt(k*k+T*T)*.15),w=v-T/Math.sqrt(k*k+T*T+1)*A,F=S+k/Math.sqrt(k*k+T*T+1)*A;return t("path",{key:`edge-${p}`,class:"flow-edge",d:`M ${g.x} ${g.y} Q ${w} ${F} ${y.x} ${y.y}`,stroke:b?"var(--orange)":"var(--border)","stroke-width":f,opacity:x})}),n.map(m=>{let p=d.get(m.id);return t("g",{key:m.id,class:"flow-node",transform:`translate(${p.x},${p.y})`,onClick:s?()=>s(m.id):void 0},t("circle",{r:c,fill:m.color,stroke:m.color,"stroke-width":2,opacity:.8}),t("text",{y:c+16,"text-anchor":"middle"},Ti(m.label,u)))})))}function ae({title:n,count:e,defaultOpen:s=!0,threshold:r=8,children:i}){let o=(Array.isArray(i)?i:i?[i]:[]).flat().filter(Boolean),l=e??o.length,c=o.length>r,[u,d]=C(s),[h,m]=C(!1),p=c&&!h?o.slice(0,r):o,g=o.length-r;return t("div",{class:"mb-16"},t("div",{class:"collapsible-header",onClick:()=>d(!u),role:"button",tabIndex:0,"aria-expanded":String(u),onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),d(!u))}},t("span",{class:`collapsible-chevron ${u?"open":""}`,"aria-hidden":"true"},"\u25B6"),t("span",{class:"collapsible-title"},n),l>0?t("span",{class:"collapsible-count"},String(l)):null),u?t(j,null,c&&h?t("div",{class:"collapsible-scroll-container"},o,t("div",{class:"collapsible-sticky-footer"},t("button",{class:"collapsible-toggle",onClick:()=>m(!1)},"Show less"))):t(j,null,p,c?t("button",{class:"collapsible-toggle",onClick:()=>m(!0)},`Show ${g} more`):null)):null)}function gn({value:n,label:e,size:s=80,inverted:r=!1}){let i=Math.max(0,Math.min(1,n)),a=r?1-i:i,o=a>=.7?"var(--green)":a>=.4?"var(--orange)":"var(--red)",l=8,c=(s-l)/2,u=2*Math.PI*c,d=i*u,h=s/2,m=s/2;return t("div",{class:"health-gauge",style:`width: ${s}px`},t("svg",{viewBox:`0 0 ${s} ${s}`,width:s,height:s},t("circle",{cx:h,cy:m,r:c,fill:"none",stroke:"var(--border)","stroke-width":l}),t("circle",{cx:h,cy:m,r:c,fill:"none",stroke:o,"stroke-width":l,"stroke-linecap":"round","stroke-dasharray":`${d} ${u}`,"stroke-dashoffset":0,transform:`rotate(-90 ${h} ${m})`,style:"transition: stroke-dasharray 0.3s ease"}),t("text",{x:h,y:m,"text-anchor":"middle","dominant-baseline":"central",class:"health-gauge-value",fill:o},i.toFixed(2))),t("div",{class:"health-gauge-label"},e))}function vn({type:n,label:e}){let s=n==="pattern"?"\u2713":"\u26A0";return t("span",{class:`pattern-badge ${n}`},t("span",{class:"pattern-icon"},s),e)}function q({value:n,label:e,trend:s,color:r}){let i=s==="up"?"\u2191":s==="down"?"\u2193":"";return t("div",{class:"metric-card"},t("div",{class:"metric-value",style:r?`color: ${r}`:""},n,s?t("span",{class:`metric-trend metric-trend-${s}`},i):null),t("div",{class:"metric-label"},e))}function zs({zones:n,crossings:e,selectedZone:s,onZoneClick:r}){let[i,a]=C(null),o=$(()=>{let m=new Map;for(let p of n)m.set(p.id,{files:p.files.length,incoming:0,outgoing:0,cohesion:p.cohesion,coupling:p.coupling});for(let p of e){let g=m.get(p.fromZone),y=m.get(p.toZone);g&&g.outgoing++,y&&y.incoming++}return m},[n,e]),l=$(()=>{let m=new Map;for(let p of e){let g=[p.fromZone,p.toZone].sort().join(":");m.set(g,(m.get(g)||0)+1)}return m},[e]),c=$(()=>{let m=[],p=new Set;for(let g of e){let y=[g.fromZone,g.toZone].sort().join(":");if(p.has(y))continue;p.add(y);let f=`${g.toZone}:${g.fromZone}`,x=e.filter(v=>v.fromZone===g.fromZone&&v.toZone===g.toZone).length,b=e.filter(v=>v.fromZone===g.toZone&&v.toZone===g.fromZone).length;m.push({from:g.fromZone,to:g.toZone,count:x+b,bidirectional:x>0&&b>0})}return m.sort((g,y)=>y.count-g.count)},[e]),u=Math.ceil(Math.sqrt(n.length)),d=Math.ceil(n.length/u),h=Math.max(...n.map(m=>m.files.length),1);return t("div",{class:"zone-map"},t("div",{class:"zone-map-header"},t("h4",null,"Architecture Map"),t("div",{class:"zone-map-legend"},t("span",{class:"legend-item"},t("span",{class:"legend-dot",style:"background: var(--green)"}),"High cohesion"),t("span",{class:"legend-item"},t("span",{class:"legend-dot",style:"background: var(--orange)"}),"Bidirectional"),t("span",{class:"legend-item"},t("span",{class:"legend-line"}),"Dependency"))),t("div",{class:"zone-map-grid",style:`grid-template-columns: repeat(${u}, 1fr)`},n.map((m,p)=>{let g=U[p%U.length],y=o.get(m.id),f=s===m.id,x=i===m.id,b=f||x,v=.7+m.files.length/h*.3,S=m.cohesion>=.7?"var(--green)":m.cohesion>=.4?"var(--orange)":"var(--red)",k=m.coupling>=.5?"high":m.coupling>=.3?"mid":"low";return t("div",{key:m.id,class:`zone-map-node ${f?"selected":""} ${x?"hovered":""}`,style:`
|
|
21
|
+
--zone-color: ${g};
|
|
22
|
+
transform: scale(${b?1.05:v});
|
|
23
|
+
border-color: ${b?g:"var(--border)"};
|
|
24
|
+
`,onClick:()=>r?.(m.id),onMouseEnter:()=>a(m.id),onMouseLeave:()=>a(null)},t("div",{class:"zone-map-node-header"},t("span",{class:"zone-map-node-dot",style:`background: ${g}`}),t("span",{class:"zone-map-node-name"},m.name)),t("div",{class:"zone-map-node-body"},t("div",{class:"zone-map-node-stat"},t("span",{class:"stat-value"},m.files.length),t("span",{class:"stat-label"},"files")),t("div",{class:"zone-map-node-health"},t("span",{class:"health-dot",style:`background: ${S}`,title:`Cohesion: ${m.cohesion.toFixed(2)}`}),t("span",{class:`coupling-indicator ${k}`,title:`Coupling: ${m.coupling.toFixed(2)}`},m.coupling>.3?"\u26A0":""))),y&&(y.incoming>0||y.outgoing>0)?t("div",{class:"zone-map-node-io"},t("span",{class:"io-in",title:"Incoming deps"},"\u2190",y.incoming),t("span",{class:"io-out",title:"Outgoing deps"},y.outgoing,"\u2192")):null)})),c.length>0?t("div",{class:"zone-map-connections"},t("h5",null,"Zone Dependencies"),t("div",{class:"connection-list"},c.slice(0,10).map(m=>{let p=n.find(x=>x.id===m.from),g=n.find(x=>x.id===m.to);if(!p||!g)return null;let y=n.indexOf(p),f=n.indexOf(g);return t("div",{key:`${m.from}-${m.to}`,class:`connection-item ${m.bidirectional?"bidirectional":""}`},t("span",{class:"connection-zone",style:`--zone-color: ${U[y%U.length]}`},p.name),t("span",{class:"connection-arrow"},m.bidirectional?"\u21C4":"\u2192"),t("span",{class:"connection-zone",style:`--zone-color: ${U[f%U.length]}`},g.name),t("span",{class:"connection-count"},m.count))}),c.length>10?t("div",{class:"connection-more"},`+${c.length-10} more connections`):null)):null)}function js({zone:n,crossings:e,allZones:s,onClose:r,onFileClick:i}){let[a,o]=C(!1),l=e.filter(p=>p.toZone===n.id),c=e.filter(p=>p.fromZone===n.id),u=Os(l,p=>p.fromZone),d=Os(c,p=>p.toZone),h=s.indexOf(n),m=U[h%U.length];return t("div",{class:"zone-detail-overlay"},t("div",{class:"zone-detail-panel",style:`--zone-color: ${m}`},t("div",{class:"zone-detail-header"},t("h3",null,n.name),t("button",{class:"close-btn",onClick:r},"\u2715")),t("p",{class:"zone-detail-desc"},n.description),t("div",{class:"zone-detail-metrics"},t("div",{class:"metric"},t("span",{class:"metric-val"},n.files.length),t("span",{class:"metric-lbl"},"files")),t("div",{class:"metric"},t("span",{class:"metric-val",style:`color: ${n.cohesion>=.7?"var(--green)":n.cohesion>=.4?"var(--orange)":"var(--red)"}`},n.cohesion.toFixed(2)),t("span",{class:"metric-lbl"},"cohesion")),t("div",{class:"metric"},t("span",{class:"metric-val",style:`color: ${n.coupling<=.3?"var(--green)":n.coupling<=.5?"var(--orange)":"var(--red)"}`},n.coupling.toFixed(2)),t("span",{class:"metric-lbl"},"coupling"))),n.entryPoints.length>0?t("div",{class:"zone-detail-section"},t("h4",null,"Entry Points"),t("ul",{class:"entry-point-list"},n.entryPoints.slice(0,5).map(p=>t("li",{key:p,class:"mono-sm"},p.split("/").pop())),n.entryPoints.length>5?t("li",{class:"more"},`+${n.entryPoints.length-5} more`):null)):null,n.insights&&n.insights.length>0?t("div",{class:"zone-detail-section"},t("h4",null,"Insights"),t("ul",{class:"insight-list"},n.insights.slice(0,5).map((p,g)=>t("li",{key:g},p)),n.insights.length>5?t("li",{class:"more"},`+${n.insights.length-5} more`):null)):null,Object.keys(u).length>0||Object.keys(d).length>0?t("div",{class:"zone-detail-section"},t("h4",null,"Dependencies"),t("div",{class:"dep-grid"},Object.keys(d).length>0?t("div",{class:"dep-col"},t("span",{class:"dep-label"},"Depends on:"),...Object.entries(d).slice(0,5).map(([p,g])=>{let y=s.find(f=>f.id===p);return t("div",{key:p,class:"dep-item"},y?.name||p,t("span",{class:"dep-count"},g.length))})):null,Object.keys(u).length>0?t("div",{class:"dep-col"},t("span",{class:"dep-label"},"Used by:"),...Object.entries(u).slice(0,5).map(([p,g])=>{let y=s.find(f=>f.id===p);return t("div",{key:p,class:"dep-item"},y?.name||p,t("span",{class:"dep-count"},g.length))})):null)):null,t("div",{class:"zone-detail-section"},t("button",{class:"toggle-files-btn",onClick:()=>o(!a)},a?"Hide files":`Show ${n.files.length} files`),a?t("ul",{class:"file-list"},n.files.map(p=>t("li",{key:p,class:"file-item mono-sm",onClick:i?()=>i(p):void 0},p,n.entryPoints.includes(p)?t("span",{class:"entry-badge"},"entry"):null))):null)))}function Os(n,e){let s={};for(let r of n){let i=e(r);s[i]||(s[i]=[]),s[i].push(r)}return s}var Ei={TypeScript:"#3178c6",JavaScript:"#f7df1e",CSS:"var(--purple)",HTML:"#e34f26",JSON:"#8b90a8",Markdown:"#8b90a8",SCSS:"#cc6699",Python:"#3776ab",Rust:"#dea584",Go:"#00add8"};function Vs({data:n,navigateTo:e,onSelect:s}){let{manifest:r,inventory:i,imports:a,zones:o,components:l}=n,[c,u]=C(null);if(!r&&!i&&!a&&!o)return t("div",{class:"loading"},"No data loaded. Use 'sourcevision serve' or drop files.");let d=o&&o.zones.length>0,h=a&&a.edges.length>0,m=r&&(!h||!d),p=$(()=>{if(!o)return null;let v=o.zones.length>0?o.zones.reduce((E,M)=>E+M.cohesion,0)/o.zones.length:0,S=o.zones.length>0?o.zones.reduce((E,M)=>E+M.coupling,0)/o.zones.length:0,k=[],T=[];if(o.zones.filter(E=>E.cohesion>=.8).length>o.zones.length/2&&k.push("Well-structured modules"),o.zones.filter(E=>E.coupling<=.3).length>o.zones.length/2&&k.push("Clean boundaries"),a&&a.summary.circularCount>0&&T.push(`${a.summary.circularCount} circular deps`),a&&a.summary.mostImported.length>0){let E=a.summary.mostImported.filter(M=>M.count>10);E.length>0&&T.push(`${E.length} hub file${E.length>1?"s":""}`)}let F=(o.findings??[]).filter(E=>E.text.includes("Bidirectional"));return F.length>0&&T.push(`${F.length} bidirectional couplings`),{avgCohesion:v,avgCoupling:S,patterns:k,antipatterns:T}},[o,a]),g=$(()=>o?[...o.zones].sort((v,S)=>S.files.length-v.files.length).slice(0,5):[],[o]),y=$(()=>o?o.zones.filter(v=>v.cohesion<.4||v.coupling>.5):[],[o]),f=$(()=>i?Object.entries(i.summary.byLanguage).sort(([,v],[,S])=>S-v).slice(0,8).map(([v,S])=>({label:v,value:S,color:Ei[v]||"var(--accent)"})):[],[i]),x=v=>{u(v)},b=c?o?.zones.find(v=>v.id===c):null;return t("div",{class:"overview-container"},r?t("div",{class:"overview-header view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"view-title"},r.targetPath.split("/").pop()),t("p",{class:"overview-meta"},r.gitBranch?`${r.gitBranch} `:"",r.gitSha?`(${r.gitSha.slice(0,7)}) \u2022 `:"",new Date(r.analyzedAt).toLocaleString())):t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"view-title"},"Overview")),m?t("div",{class:"getting-started"},t("h3",null,"Getting Started"),t("p",null,"Complete the analysis to see architectural insights:"),t("ol",null,h?null:t("li",null,t("code",null,"sourcevision analyze --phase=2")," \u2014 Build import graph"),d?null:t("li",null,t("code",null,"sourcevision analyze --phase=3")," \u2014 Detect zones"),t("li",null,t("code",null,"sourcevision analyze --full")," \u2014 Run full analysis"))):null,t("div",{class:"overview-metrics"},i?t(q,{value:i.summary.totalFiles,label:"Files"}):null,i?t(q,{value:Math.round(i.summary.totalLines/1e3)+"k",label:"Lines of Code"}):null,o?t(q,{value:o.zones.length,label:"Zones",color:"var(--accent)"}):null,a?t(q,{value:a.summary.circularCount,label:"Circular Deps",color:a.summary.circularCount>0?"var(--orange)":"var(--green)"}):null),p&&o?t("div",{class:"overview-section"},t("div",{class:"section-header-row"},t("h3",null,"Architecture Health"),o.enrichmentPass?t("span",{class:"enrichment-badge"},`Pass ${o.enrichmentPass}${o.metaEvaluationCount?` + ${o.metaEvaluationCount} meta`:""}`):null),t("div",{class:"health-row"},t(gn,{value:p.avgCohesion,label:"Avg Cohesion",size:90}),t(gn,{value:p.avgCoupling,label:"Avg Coupling",size:90,inverted:!0}),t("div",{class:"pattern-list"},p.patterns.map(v=>t(vn,{key:v,type:"pattern",label:v})),p.antipatterns.map(v=>t(vn,{key:v,type:"antipattern",label:v}))))):null,o&&o.zones.length>0?t(zs,{zones:o.zones,crossings:o.crossings,selectedZone:c,onZoneClick:x}):null,t("div",{class:"overview-columns"},f.length>0?t("div",{class:"overview-col"},t("h3",null,"Languages"),t(ve,{data:f})):null,g.length>0?t("div",{class:"overview-col"},t("h3",null,"Largest Zones"),t("div",{class:"top-zones-list"},g.map((v,S)=>{let k=o.zones.indexOf(v),T=U[k%U.length];return t("div",{key:v.id,class:"top-zone-item",onClick:()=>x(v.id)},t("span",{class:"zone-dot",style:`background: ${T}`}),t("span",{class:"zone-name"},v.name),t("span",{class:"zone-files"},`${v.files.length} files`))}))):null),y.length>0?t("div",{class:"overview-section"},t("h3",null,"Zones Needing Attention"),t("div",{class:"attention-list"},y.slice(0,5).map(v=>{let S=[];return v.cohesion<.4&&S.push(`Low cohesion (${v.cohesion.toFixed(2)})`),v.coupling>.5&&S.push(`High coupling (${v.coupling.toFixed(2)})`),t("div",{key:v.id,class:"attention-item"},t("span",{class:"attention-name"},v.name),t("span",{class:"attention-issues"},S.map(k=>t("span",{key:k,class:"issue-tag"},k))))}),y.length>5?t("div",{class:"attention-more"},`+${y.length-5} more zones`):null)):null,o?.insights&&o.insights.length>0?t(ae,{title:"Key Insights",count:o.insights.length,defaultOpen:!0,threshold:10},...o.insights.slice(0,10).map((v,S)=>t("div",{key:S,class:"insight-item"},v)),o.insights.length>10?t("div",{class:"insight-more"},`+${o.insights.length-10} more insights in zones.json`):null):null,a?.summary.circulars.length?t(ae,{title:"Circular Dependencies",count:a.summary.circularCount,defaultOpen:!0,threshold:5},...a.summary.circulars.map((v,S)=>t("div",{key:S,class:"circular-dep-block"},v.cycle.join(" \u2192 ")+" \u2192 "+v.cycle[0]))):null,b&&o?t(js,{zone:b,crossings:o.crossings,allZones:o.zones,onClose:()=>u(null),onFileClick:e?v=>e("files",{file:v}):void 0}):null)}function Pi(n){let r=-150/Math.sqrt(Math.max(n,1)),i=.01,a=Math.max(40,80/Math.sqrt(Math.max(n/20,1))),o=n>200;return{alphaDecay:.02,velocityDecay:.6,repulsionStrength:r,centerGravityStrength:i,linkRestLength:a,useBH:o,bhTheta:.9}}function Ft(n){let e=0;for(let s=0;s<n.length;s++)e=(e<<5)-e+n.charCodeAt(s)|0;return(e&2147483647)/2147483647}function Bs(n,e,s){let r=new Map,i=[];for(let l of n)if(l.zone){let c=r.get(l.zone);c||(c=[],r.set(l.zone,c)),c.push(l)}else i.push(l);let a=[...r.keys()].sort(),o=Math.min(e,s)*.3;for(let l=0;l<a.length;l++){let c=a[l],u=r.get(c),d=2*Math.PI*l/Math.max(a.length,1),h=e/2+o*Math.cos(d),m=s/2+o*Math.sin(d),p=Math.min(30*Math.sqrt(u.length),200);for(let g of u){let y=Ft(g.id+":x"),f=Ft(g.id+":y");g.x=h+(y-.5)*p,g.y=m+(f-.5)*p,g.vx=0,g.vy=0}}for(let l of i){let c=Ft(l.id+":x"),u=Ft(l.id+":y");l.x=e/2+(c-.5)*e*.15,l.y=s/2+(u-.5)*s*.15,l.vx=0,l.vy=0}}function Ri(n,e){if(e===0)return null;let s=1/0,r=1/0,i=-1/0,a=-1/0;for(let d of n)d.x<s&&(s=d.x),d.y<r&&(r=d.y),d.x>i&&(i=d.x),d.y>a&&(a=d.y);let o=Math.max(i-s,a-r)*.01+1;s-=o,r-=o,i+=o,a+=o;let l={cx:0,cy:0,mass:0,x0:s,y0:r,x1:i,y1:a,children:null,nodeIdx:-1};function c(d,h,m,p){if(d.mass===0&&d.children===null){d.nodeIdx=h,d.cx=m,d.cy=p,d.mass=1;return}if(d.children===null){d.children=[null,null,null,null];let f=(d.x0+d.x1)/2,x=(d.y0+d.y1)/2,b=d.nodeIdx;d.nodeIdx=-1,u(d,b,d.cx,d.cy,f,x)}let g=(d.x0+d.x1)/2,y=(d.y0+d.y1)/2;d.cx=(d.cx*d.mass+m)/(d.mass+1),d.cy=(d.cy*d.mass+p)/(d.mass+1),d.mass++,u(d,h,m,p,g,y)}function u(d,h,m,p,g,y){let f=(m<g?0:1)+(p<y?0:2);if(!d.children[f]){let x=f&1?g:d.x0,b=f&1?d.x1:g,v=f&2?y:d.y0,S=f&2?d.y1:y;d.children[f]={cx:0,cy:0,mass:0,x0:x,y0:v,x1:b,y1:S,children:null,nodeIdx:-1}}c(d.children[f],h,m,p)}for(let d=0;d<e;d++)c(l,d,n[d].x,n[d].y);return l}function Zs(n,e,s,r,i,a,o,l){if(!n||n.mass===0)return;let c=n.cx-s,u=n.cy-r,d=c*c+u*u,h=n.x1-n.x0;if(n.children===null||h*h/d<l*l){if(d<.01)return;let m=Math.sqrt(d),p=o*i*n.mass/d,g=c/m*p,y=u/m*p;a[e].vx+=g,a[e].vy+=y;return}for(let m of n.children)m&&Zs(m,e,s,r,i,a,o,l)}function yt(n,e){let{nodes:s,resolvedLinks:r,width:i,height:a}=n,o=s.length,{alphaDecay:l,velocityDecay:c,repulsionStrength:u,centerGravityStrength:d,linkRestLength:h,useBH:m,bhTheta:p}=Pi(o);if(n.alpha.value*=1-l,n.frameCount++,n.alpha.value<.1&&n.frameCount%2!==0){n.alpha.value>.01&&e.scheduleNextTick(()=>yt(n,e));return}let g=n.alpha.value;for(let v of s)v.vx+=(i/2-v.x)*d*g,v.vy+=(a/2-v.y)*d*g;if(m){let v=Ri(s,o);for(let S=0;S<o;S++)Zs(v,S,s[S].x,s[S].y,g,s,u,p)}else for(let v=0;v<o;v++)for(let S=v+1;S<o;S++){let k=s[S].x-s[v].x,T=s[S].y-s[v].y,A=Math.sqrt(k*k+T*T)||1,w=u*g/(A*A),F=k/A*w,E=T/A*w;s[v].vx-=F,s[v].vy-=E,s[S].vx+=F,s[S].vy+=E}for(let v of r){let S=v.source,k=v.target,T=k.x-S.x,A=k.y-S.y,w=Math.sqrt(T*T+A*A)||1,F=(w-h)*.005*g,E=T/w*F,M=A/w*F;S.vx+=E,S.vy+=M,k.vx-=E,k.vy-=M}let y=Math.min(i,a)*.6,f=.05,x=i/2,b=a/2;for(let v of s){let S=v.x-x,k=v.y-b,T=Math.sqrt(S*S+k*k);if(T>y){let A=(T-y)/T;v.vx-=S*A*f*g,v.vy-=k*A*f*g}}for(let v of s)v.fx!=null?(v.x=v.fx,v.vx=0):(v.vx*=c,v.x+=v.vx),v.fy!=null?(v.y=v.fy,v.vy=0):(v.vy*=c,v.y+=v.vy);e.updateDOM(n),n.frameCount<=100&&n.frameCount%20===0&&e.fitToContent(),!n.hasFitted&&n.alpha.value<.1&&(n.hasFitted=!0,e.fitToContent()),n.alpha.value>.01&&e.scheduleNextTick(()=>yt(n,e))}var Ot=class{nodes;nodeGroups;svg;g;linkElements;nodeRadii;resolvedLinks;nodeEdgeMap;ac;sim;width;height;viewX=0;viewY=0;viewW;viewH;scale=1;constructor(e){let{svg:s,nodes:r,links:i,width:a,height:o,onNodeSelect:l}=e;this.svg=s,this.nodes=r,this.width=a,this.height=o,this.viewW=a,this.viewH=o,this.nodeGroups=[],this.linkElements=[],this.nodeRadii=[],this.ac=new AbortController,s.innerHTML="";let c="http://www.w3.org/2000/svg";this.updateViewBox();let u=document.createElementNS(c,"defs"),d=document.createElementNS(c,"marker");d.setAttribute("id","arrowhead"),d.setAttribute("viewBox","0 0 10 7"),d.setAttribute("refX","10"),d.setAttribute("refY","3.5"),d.setAttribute("markerWidth","6"),d.setAttribute("markerHeight","5"),d.setAttribute("orient","auto");let h=document.createElementNS(c,"polygon");h.setAttribute("points","0 0, 10 3.5, 0 7"),h.setAttribute("fill","var(--border)"),d.appendChild(h),u.appendChild(d),s.appendChild(u),this.g=document.createElementNS(c,"g"),s.appendChild(this.g);let m=new Map;for(let p of r)m.set(p.id,p);Bs(r,a,o),this.resolvedLinks=i.map(p=>({...p,source:m.get(typeof p.source=="string"?p.source:p.source.id),target:m.get(typeof p.target=="string"?p.target:p.target.id)})).filter(p=>p.source&&p.target),this.nodeEdgeMap=new Map;for(let p=0;p<this.resolvedLinks.length;p++){let g=this.resolvedLinks[p],y=g.source.id,f=g.target.id;this.nodeEdgeMap.has(y)||this.nodeEdgeMap.set(y,new Set),this.nodeEdgeMap.has(f)||this.nodeEdgeMap.set(f,new Set),this.nodeEdgeMap.get(y).add(p),this.nodeEdgeMap.get(f).add(p)}for(let p of this.resolvedLinks){let g=document.createElementNS(c,"line");g.setAttribute("class",`graph-link${p.crossZone?" cross-zone":""}`),g.setAttribute("marker-end","url(#arrowhead)"),this.g.appendChild(g),this.linkElements.push(g)}for(let p of r){let g=document.createElementNS(c,"g");g.setAttribute("class","graph-node");let y=Math.min(3+Math.sqrt(p.importCount)*2,16);this.nodeRadii.push(y);let f=document.createElementNS(c,"circle");f.setAttribute("r",String(y)),f.setAttribute("fill",p.zoneColor||"#555"),g.appendChild(f);let x=document.createElementNS(c,"text");x.setAttribute("class","graph-label"),x.setAttribute("dy",String(-y-3)),x.setAttribute("text-anchor","middle"),x.textContent=p.id.split("/").pop()||p.id,g.appendChild(x),this.g.appendChild(g),this.nodeGroups.push(g)}this.sim={nodes:r,resolvedLinks:this.resolvedLinks,width:a,height:o,alpha:{value:1},frameCount:0,hasFitted:!1,scale:this.scale,nodeRadii:this.nodeRadii},this.setupZoom(),this.setupPanAndDrag(l),this.setupHoverHighlighting(),this.startSimulation()}highlightNode(e){if(this.g.querySelectorAll(".graph-search-ring").forEach(o=>o.remove()),!e)return;let r=this.nodes.findIndex(o=>o.id===e);if(r<0)return;let a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("class","graph-search-ring"),a.setAttribute("r",String(this.nodeRadii[r]+4)),a.setAttribute("fill","none"),a.setAttribute("stroke","var(--accent)"),a.setAttribute("stroke-width","2"),this.nodeGroups[r].appendChild(a)}centerOnNode(e){let s=this.nodes.findIndex(i=>i.id===e);if(s<0)return;let r=this.nodes[s];r.x==null||r.y==null||(this.viewX=r.x-this.viewW/2,this.viewY=r.y-this.viewH/2,this.updateViewBox())}destroy(){this.ac.abort()}updateViewBox(){this.svg.setAttribute("viewBox",`${this.viewX} ${this.viewY} ${this.viewW} ${this.viewH}`),this.scale=this.viewW/this.width}fitToContent(){if(this.nodes.length===0)return;let e=this.nodes.map(f=>f.x).sort((f,x)=>f-x),s=this.nodes.map(f=>f.y).sort((f,x)=>f-x),r=Math.floor(this.nodes.length*.02),i=Math.min(Math.ceil(this.nodes.length*.98),this.nodes.length-1),a=e[r],o=e[i],l=s[r],c=s[i],u=60,d=o-a+u*2,h=c-l+u*2,m=a-u,p=l-u,g=this.width/this.height;if(d/h>g){let f=d/g;p-=(f-h)/2,h=f}else{let f=h*g;m-=(f-d)/2,d=f}this.viewX=m,this.viewY=p,this.viewW=d,this.viewH=h,this.scale=this.viewW/this.width,this.updateViewBox()}updateLOD(){for(let e=0;e<this.nodes.length;e++){let s=this.nodeRadii[e]/this.scale,r=this.nodeGroups[e].querySelector("circle"),i=this.nodeGroups[e].querySelector("text");if(this.nodeGroups[e].style.display="",r&&s<1?r.setAttribute("r",String(this.scale)):r&&r.setAttribute("r",String(this.nodeRadii[e])),i)if(s<3)i.style.display="none";else{i.style.display="";let a=Math.max(7,Math.min(11,9/Math.sqrt(this.scale)));i.style.fontSize=`${a}px`}}}updateDOM(){for(let e=0;e<this.resolvedLinks.length;e++){let s=this.resolvedLinks[e];this.linkElements[e].setAttribute("x1",String(s.source.x)),this.linkElements[e].setAttribute("y1",String(s.source.y)),this.linkElements[e].setAttribute("x2",String(s.target.x)),this.linkElements[e].setAttribute("y2",String(s.target.y))}for(let e=0;e<this.nodes.length;e++)this.nodeGroups[e].setAttribute("transform",`translate(${this.nodes[e].x},${this.nodes[e].y})`);this.updateLOD()}startSimulation(){let e={updateDOM:()=>this.updateDOM(),fitToContent:()=>this.fitToContent(),scheduleNextTick:r=>requestAnimationFrame(r)};requestAnimationFrame(()=>{yt(this.sim,e)})}setupZoom(){this.svg.addEventListener("wheel",e=>{e.preventDefault();let s=this.svg.getBoundingClientRect(),r=this.viewX+(e.clientX-s.left)/s.width*this.viewW,i=this.viewY+(e.clientY-s.top)/s.height*this.viewH,a=e.deltaY>0?1.1:.9,o=this.viewW*a,l=this.viewH*a;this.viewX=r-(r-this.viewX)*(o/this.viewW),this.viewY=i-(i-this.viewY)*(l/this.viewH),this.viewW=o,this.viewH=l,this.scale=this.viewW/this.width,this.updateViewBox(),this.updateLOD()},{passive:!1,signal:this.ac.signal})}setupPanAndDrag(e){let s=!1,r=0,i=0,a=0,o=0,l=null,c=-1,u=null,d=!1,h=3,m=this.ac.signal;this.svg.addEventListener("mousedown",p=>{let g=p.target;if(g.tagName==="circle"){let y=g.parentElement,f=this.nodeGroups.indexOf(y);if(f>=0){l=this.nodes[f],c=f,u={x:p.clientX,y:p.clientY},d=!1;return}}s=!0,r=p.clientX,i=p.clientY,a=this.viewX,o=this.viewY,this.svg.classList.add("grabbing")},{signal:m}),this.svg.addEventListener("mousemove",p=>{if(l&&u){let g=p.clientX-u.x,y=p.clientY-u.y;if(!d){if(Math.sqrt(g*g+y*y)>h){d=!0,l.fx=l.x,l.fy=l.y,this.sim.alpha.value=.3;let x={updateDOM:()=>this.updateDOM(),fitToContent:()=>this.fitToContent(),scheduleNextTick:b=>requestAnimationFrame(b)};requestAnimationFrame(()=>yt(this.sim,x))}return}let f=this.svg.getBoundingClientRect();l.fx=this.viewX+(p.clientX-f.left)/f.width*this.viewW,l.fy=this.viewY+(p.clientY-f.top)/f.height*this.viewH;return}if(s){let g=p.clientX-r,y=p.clientY-i,f=this.svg.getBoundingClientRect();this.viewX=a-g/f.width*this.viewW,this.viewY=o-y/f.height*this.viewH,this.updateViewBox()}},{signal:m}),this.svg.addEventListener("mouseup",()=>{if(l){if(!d&&c>=0){let p=this.nodes[c],g=p.id.split("/").pop()||p.id;e({title:g,path:p.id,zone:p.zone||"unzoned",incomingImports:p.importCount})}l.fx=null,l.fy=null,l=null,c=-1,u=null,d=!1}s&&(s=!1,this.svg.classList.remove("grabbing"))},{signal:m})}setupHoverHighlighting(){let e=null,s=this.ac.signal;for(let r=0;r<this.nodes.length;r++){let i=this.nodes[r].id;this.nodeGroups[r].addEventListener("mouseenter",()=>{if(e===i)return;e=i;let a=this.nodeEdgeMap.get(i)??new Set,o=new Set([i]);for(let l of a){let c=this.resolvedLinks[l];o.add(c.source.id),o.add(c.target.id)}for(let l=0;l<this.nodes.length;l++){let c=this.nodeGroups[l];o.has(this.nodes[l].id)?c.style.opacity="1":c.style.opacity="0.2"}for(let l=0;l<this.linkElements.length;l++)a.has(l)?(this.linkElements[l].style.strokeOpacity="0.9",this.linkElements[l].style.stroke="var(--accent)"):this.linkElements[l].style.strokeOpacity="0.05"},{signal:s}),this.nodeGroups[r].addEventListener("mouseleave",()=>{if(e===i){e=null;for(let a=0;a<this.nodes.length;a++)this.nodeGroups[a].style.opacity="";for(let a=0;a<this.linkElements.length;a++)this.linkElements[a].style.strokeOpacity="",this.linkElements[a].style.stroke=""}},{signal:s})}}};function Hs({data:n,onSelect:e,selectedFile:s,selectedZone:r}){let i=be(null),a=be(null),[o,l]=C(!1),[c,u]=C(""),{imports:d,zones:h}=n,m=$(()=>{let f=new Map;return h&&h.zones.forEach(x=>{for(let b of x.files)f.set(b,x.id)}),f},[h]),p=$(()=>{let f=new Map;return h&&h.zones.forEach((x,b)=>{f.set(x.id,U[b%U.length])}),f},[h]),g=$(()=>{let f=new Set;if(h)for(let x of h.crossings)f.add(`${x.from}\0${x.to}`);return f},[h]);if(!d)return t("div",{class:"loading"},"No import data available.");H(()=>{if(!i.current||!d||o)return;let f=i.current,x=f.clientWidth||800,b=f.clientHeight||600,v=new Set;for(let w of d.edges)v.add(w.from),v.add(w.to);let S=new Map;for(let w of d.edges)S.set(w.to,(S.get(w.to)||0)+1);let k=Array.from(v).map(w=>({id:w,zone:m.get(w),zoneColor:m.has(w)?p.get(m.get(w)):"var(--text-dim)",importCount:S.get(w)||0})),T=d.edges.map(w=>({source:w.from,target:w.to,crossZone:g.has(`${w.from}\0${w.to}`)})),A=new Ot({svg:f,nodes:k,links:T,width:x,height:b,onNodeSelect:w=>e({type:"file",...w}),zones:h});return a.current=A,l(!0),()=>{a.current?.destroy(),a.current=null}},[d,o]),H(()=>{a.current&&s&&(a.current.highlightNode(s),a.current.centerOnNode(s))},[s]),H(()=>{if(!a.current||!c){a.current&&a.current.highlightNode(null);return}let f=c.toLowerCase(),x=a.current.nodes.find(b=>b.id.toLowerCase().includes(f));x&&(a.current.highlightNode(x.id),a.current.centerOnNode(x.id))},[c]);let y=$(()=>h?h.zones.map((f,x)=>({name:f.name,color:U[x%U.length]})):[],[h]);return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Import Graph")),t("p",{class:"section-sub"},`${d.edges.length} edges between ${new Set([...d.edges.map(f=>f.from),...d.edges.map(f=>f.to)]).size} files`,h?` across ${h.zones.length} zones`:""),t("div",{class:"graph-search-bar"},t("input",{type:"text",class:"filter-input",placeholder:"Search nodes...",value:c,onInput:f=>u(f.target.value)})),t("div",{class:"graph-container",style:"position: relative;"},t("svg",{ref:i}),y.length>0?t("div",{class:"graph-legend"},y.map(f=>t("div",{key:f.name,class:"graph-legend-item"},t("span",{class:"graph-legend-dot",style:`background: ${f.color};`}),f.name))):null))}function it({placeholder:n="Search...",value:e,onInput:s,resultCount:r,totalCount:i,filters:a}){return t("div",{role:"search"},t("div",{class:"filter-bar"},t("input",{class:"filter-input",type:"search",placeholder:n,value:e,"aria-label":n,onInput:o=>s(o.target.value)}),...(a??[]).map(o=>t("select",{key:o.value,class:"filter-select",value:o.value,"aria-label":o.label,onChange:l=>{let c=o.options.find(u=>u.value===l.target.value);c&&l.target.dispatchEvent(new CustomEvent("filter-change",{detail:c.value}))}},o.options.map(l=>t("option",{key:l.value,value:l.value},l.label)))),r!=null&&i!=null?t("span",{class:"filter-result-count","aria-live":"polite"},`Showing ${r} of ${i}`):null))}function Us({data:n,onSelect:e}){let{zones:s}=n,[r,i]=C(null),[a,o]=C("");if(!s)return t("div",{class:"loading"},"No zone data available.");let l=p=>{i(p.id===r?null:p.id),e({type:"zone",title:p.name,id:p.id,description:p.description,files:p.files.length,entryPoints:p.entryPoints,cohesion:p.cohesion.toFixed(2),coupling:p.coupling.toFixed(2)})},c=new Map;for(let p of s.zones)c.set(p.id,{incoming:0,outgoing:0});for(let p of s.crossings){let g=c.get(p.fromZone),y=c.get(p.toZone);g&&g.outgoing++,y&&y.incoming++}let u=$(()=>Nt(s),[s.zones]),d=$(()=>Lt(s.crossings),[s.crossings]),h=p=>{let g=document.getElementById(`zone-card-${p}`);g&&g.scrollIntoView({behavior:"smooth",block:"center"}),i(p)},m=$(()=>{if(!a)return s.zones;let p=a.toLowerCase();return s.zones.filter(g=>g.name.toLowerCase().includes(p)||g.description.toLowerCase().includes(p)||g.files.some(y=>y.toLowerCase().includes(p)))},[s.zones,a]);return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Zones")),t("p",{class:"section-sub"},`${s.zones.length} zones, ${s.crossings.length} cross-zone dependencies, ${s.unzoned.length} unzoned files`),u.length>1&&d.length>0?t(Mt,{nodes:u,edges:d,onNodeClick:h}):null,t(it,{placeholder:"Search zones, files...",value:a,onInput:o,resultCount:m.length,totalCount:s.zones.length}),t("div",{class:"zone-grid"},m.map((p,g)=>{let y=s.zones.indexOf(p),f=c.get(p.id),x=U[y%U.length];return t("div",{key:p.id,id:`zone-card-${p.id}`,class:`zone-card ${r===p.id?"selected":""}`,style:r===p.id?`border-color: ${x}`:"",onClick:()=>l(p)},t("div",{class:"flex-row"},t("div",{class:"zone-dot",style:`background: ${x}`}),t("h3",null,p.name)),t("p",{class:"desc"},p.description),t("div",{class:"zone-metrics"},t("div",{class:"zone-metric"},t("div",{class:"val"},p.files.length),t("div",{class:"lbl"},"Files")),t("div",{class:"zone-metric"},t("div",{class:"val"},p.cohesion.toFixed(2)),t("div",{class:"lbl"},"Cohesion"),t("div",{class:"meter"},t("div",{class:`meter-fill ${at(p.cohesion)}`,style:`width: ${p.cohesion*100}%`}))),t("div",{class:"zone-metric"},t("div",{class:"val"},p.coupling.toFixed(2)),t("div",{class:"lbl"},"Coupling"),t("div",{class:"meter"},t("div",{class:`meter-fill ${at(p.coupling,!0)}`,style:`width: ${p.coupling*100}%`}))),f?t("div",{class:"zone-metric"},t("div",{class:"val"},`${f.incoming}/${f.outgoing}`),t("div",{class:"lbl"},"In/Out")):null),(()=>{let b=(s.findings??[]).filter(S=>S.scope===p.id),v=b.length>0?b.map(S=>S.text):p.insights??[];return v.length===0?null:t(ae,{title:"Insights",count:v.length,defaultOpen:!0,threshold:3},...v.map((S,k)=>t("div",{key:k,class:"insight-item"},S)))})())})),r?(()=>{let p=s.zones.find(g=>g.id===r);return p?t(ae,{title:`Files in "${p.name}"`,count:p.files.length,defaultOpen:!0,threshold:20},t("div",{class:"data-table-wrapper"},t("table",{class:"data-table"},t("thead",null,t("tr",null,t("th",null,"Path"),t("th",null,"Entry Point"))),t("tbody",null,p.files.map(g=>t("tr",{key:g},t("td",{class:"mono-sm"},g),t("td",null,p.entryPoints.includes(g)?t("span",{class:"tag tag-test"},"entry"):null))))))):null})():null,s.unzoned.length?t(ae,{title:"Unzoned Files",count:s.unzoned.length,defaultOpen:!1,threshold:10},...s.unzoned.map(p=>t("div",{key:p,class:"mono-sm text-dim",style:"line-height: 1.8"},p))):null)}var $i={source:"tag-source",test:"tag-test",config:"tag-config",docs:"tag-docs",generated:"tag-other",asset:"tag-other",build:"tag-other",other:"tag-other"};function Ws({data:n,onSelect:e,selectedFile:s,setSelectedFile:r,selectedZone:i,navigateTo:a}){let{inventory:o,zones:l}=n,[c,u]=C(""),[d,h]=C("all"),[m,p]=C("all"),[g,y]=C("all"),[f,x]=C("path"),[b,v]=C("asc"),[S,k]=C(100);if(H(()=>{i&&y(i)},[i]),!o)return t("div",{class:"loading"},"No inventory data available.");let T=$(()=>Ls(l),[l]),A=$(()=>l?l.zones.map((D,Q)=>({id:D.id,name:D.name,color:U[Q%U.length]})):[],[l]),w=$(()=>Object.keys(o.summary.byLanguage).sort(),[o]),F=$(()=>Object.keys(o.summary.byRole).sort(),[o]),E=$(()=>{let D=o.files;if(c){let Q=c.toLowerCase();D=D.filter(kt=>kt.path.toLowerCase().includes(Q)||kt.category.toLowerCase().includes(Q))}return d!=="all"&&(D=D.filter(Q=>Q.role===d)),m!=="all"&&(D=D.filter(Q=>Q.language===m)),g!=="all"&&(g==="__unzoned__"?D=D.filter(Q=>!T.has(Q.path)):D=D.filter(Q=>T.get(Q.path)?.id===g)),D=[...D].sort((Q,kt)=>{let Zt=Q[f],Ht=kt[f],An=typeof Zt=="number"&&typeof Ht=="number"?Zt-Ht:String(Zt).localeCompare(String(Ht));return b==="asc"?An:-An}),D},[o,c,d,m,g,f,b,T]);$(()=>k(100),[c,d,m,g]);let M=D=>{f===D?v(b==="asc"?"desc":"asc"):(x(D),v("asc"))},W=D=>f!==D?"":b==="asc"?" \u25B2":" \u25BC",ie=D=>{r&&r(D.path),e({type:"file",title:D.path.split("/").pop()||D.path,path:D.path,language:D.language,size:Gs(D.size),lines:D.lineCount,role:D.role,category:D.category,hash:D.hash})},K=E.slice(0,S),te=E.length-S;return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Files")),t("p",{class:"section-sub"},`${o.summary.totalFiles} files, ${o.summary.totalLines.toLocaleString()} lines`),t("div",{class:"filter-bar"},t("input",{class:"filter-input",type:"text",placeholder:"Search files or categories...",value:c,onInput:D=>u(D.target.value)}),t("select",{class:"filter-select",value:d,onChange:D=>h(D.target.value)},t("option",{value:"all"},"All Roles"),F.map(D=>t("option",{key:D,value:D},D))),t("select",{class:"filter-select",value:m,onChange:D=>p(D.target.value)},t("option",{value:"all"},"All Languages"),w.map(D=>t("option",{key:D,value:D},D))),A.length>0?t("select",{class:"filter-select",value:g,onChange:D=>y(D.target.value)},t("option",{value:"all"},"All Zones"),A.map(D=>t("option",{key:D.id,value:D.id},D.name)),t("option",{value:"__unzoned__"},"Unzoned")):null,t("span",{class:"filter-result-count"},`Showing ${Math.min(S,E.length)} of ${E.length} files`)),t("div",{class:"data-table-wrapper"},t("table",{class:"data-table"},t("thead",null,t("tr",null,t("th",{onClick:()=>M("path")},`Path${W("path")}`),A.length>0?t("th",null,"Zone"):null,t("th",{onClick:()=>M("language")},`Language${W("language")}`),t("th",{onClick:()=>M("lineCount")},`Lines${W("lineCount")}`),t("th",{onClick:()=>M("size")},`Size${W("size")}`),t("th",{onClick:()=>M("role")},`Role${W("role")}`),t("th",{onClick:()=>M("category")},`Category${W("category")}`))),t("tbody",null,K.map(D=>{let Q=T.get(D.path);return t("tr",{key:D.path,onClick:()=>ie(D),style:`cursor: pointer;${s===D.path?" background: var(--bg-hover);":""}`},t("td",{class:"mono-sm"},D.path),A.length>0?t("td",null,Q?t("span",{class:"zone-badge",style:`--zone-color: ${Q.color}`},Q.name):null):null,t("td",null,D.language),t("td",{class:"text-right"},D.lineCount.toLocaleString()),t("td",{class:"text-right"},Gs(D.size)),t("td",null,t("span",{class:`tag ${$i[D.role]||"tag-other"}`},D.role)),t("td",null,D.category))})))),te>0?t("div",{class:"empty-state"},t("button",{class:"collapsible-toggle",onClick:()=>k(S+100)},`Show ${Math.min(te,100)} more (${te} remaining)`)):null)}function Gs(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}var Di={critical:"\u26D4",warning:"\u26A0",info:"\u2139"},Ai={pattern:"\u2B22",relationship:"\u2194","anti-pattern":"\u2718",suggestion:"\u2728"};function ot({findings:n,legacyInsights:e=[],groupBy:s="severity",searchable:r=!0,threshold:i=8}){let[a,o]=C(""),l=$(()=>{if(!a)return n;let h=a.toLowerCase();return n.filter(m=>m.text.toLowerCase().includes(h)||m.scope.toLowerCase().includes(h)||(m.related??[]).some(p=>p.toLowerCase().includes(h)))},[n,a]),c=$(()=>{if(!a)return e;let h=a.toLowerCase();return e.filter(m=>m.toLowerCase().includes(h))},[e,a]),u=$(()=>{let h=new Map;for(let m of l){let p;switch(s){case"severity":p=m.severity||"info";break;case"scope":p=m.scope==="global"?"Global":m.scope;break;case"type":p=m.type;break;default:p="all"}let g=h.get(p);g||(g=[],h.set(p,g)),g.push(m)}if(s==="severity"){let m=new Map;for(let p of["critical","warning","info"]){let g=h.get(p);g&&m.set(p,g)}return m}return h},[l,s]);function d(h,m){let p=h.severity||"info",g=Di[p]||Ai[h.type]||"\u2022";return t("div",{key:m,class:`finding-card severity-${p}`,role:"article"},t("div",{class:"finding-header"},t("span",{class:"finding-icon","aria-hidden":"true"},g),t("span",{class:`severity-badge severity-${p}`},p),t("span",{class:"finding-type-badge"},h.type),h.scope&&h.scope!=="global"?t("span",{class:"finding-scope-link"},t("span",{class:"finding-zone-dot",style:"background: var(--accent)"}),h.scope):null),t("p",{class:"finding-text"},h.text),h.related?.length?t("div",{class:"finding-meta"},t("span",{class:"finding-related-label"},"Related:"),t("div",{class:"finding-related"},h.related.map((y,f)=>t("code",{key:f},y)))):null)}return t("div",{role:"region","aria-label":"Findings list"},r?t(it,{placeholder:"Search findings...",value:a,onInput:o,resultCount:l.length+c.length,totalCount:n.length+e.length}):null,[...u.entries()].map(([h,m])=>t(ae,{key:h,title:Li(h,s),count:m.length,defaultOpen:!0,threshold:i},...m.map(d))),c.length>0?t(ae,{title:"Insights",count:c.length,defaultOpen:!0,threshold:i},...c.map((h,m)=>t("div",{key:m,class:"finding-card severity-info",role:"article"},t("div",{class:"finding-header"},t("span",{class:"finding-icon","aria-hidden":"true"},"\u2139"),t("span",{class:"severity-badge severity-info"},"insight")),t("p",{class:"finding-text"},h)))):null,l.length===0&&c.length===0?t("p",{class:"section-sub"},"No findings match your search."):null)}function Li(n,e){return e==="severity"?{critical:"\u26D4 Critical",warning:"\u26A0 Warnings",info:"\u2139 Info"}[n]||yn(n):e==="type"&&{pattern:"\u2B22 Patterns",relationship:"\u2194 Relationships","anti-pattern":"\u2718 Anti-Patterns",suggestion:"\u2728 Suggestions"}[n]||yn(n)}function yn(n){return n.charAt(0).toUpperCase()+n.slice(1)}function Ks({data:n,onSelect:e,navigateTo:s}){let{zones:r}=n,i=r?.enrichmentPass??0;if(i<ge.architecture)return t("div",{class:"locked-view"},t("div",{class:"locked-icon"},"\u{1F512}"),t("h2",null,"Architecture"),t("p",null,"Requires enrichment pass 2 (current: ",i,")"),t("p",{class:"locked-hint"},"Run ",t("code",null,"sourcevision analyze")," again to unlock."));let a=(r?.findings??[]).filter(y=>y.type==="pattern"||y.type==="relationship"),o=a.length===0?(r?.insights??[]).filter(y=>/pattern|architect|relationship|layer|boundary|abstract/i.test(y)):[],l=a.filter(y=>y.type==="pattern"),c=a.filter(y=>y.type==="relationship"),u=$(()=>r?r.zones.map(y=>({label:y.name,value:y.files.length,color:y.cohesion>=.6?"var(--green)":y.cohesion>=.4?"var(--orange)":"var(--red)"})):[],[r]),d=$(()=>r?Nt(r):[],[r]),h=$(()=>r?Lt(r.crossings):[],[r]),m=y=>{if(!r)return;let f=r.zones.find(x=>x.id===y);f&&e({type:"zone",title:f.name,zoneId:f.id,id:f.id,description:f.description,files:f.files.length,entryPoints:f.entryPoints,cohesion:f.cohesion.toFixed(2),coupling:f.coupling.toFixed(2)})},p=r?.crossings?.length??0,g=a.filter(y=>/bidirectional/i.test(y.text)).length;return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Architecture")),t("p",{class:"section-sub"},`${a.length} findings from ${r?.zones.length??0} zones`),d.length>1&&h.length>0?t(Mt,{nodes:d,edges:h,onNodeClick:m}):null,t("div",{class:"stat-grid"},t("div",{class:"stat-card"},t("div",{class:"value"},String(l.length)),t("div",{class:"label"},"Patterns")),t("div",{class:"stat-card"},t("div",{class:"value"},String(c.length)),t("div",{class:"label"},"Relationships")),t("div",{class:"stat-card"},t("div",{class:"value"},String(p)),t("div",{class:"label"},"Cross-Zone Imports")),t("div",{class:"stat-card"},t("div",{class:`value${g>0?" text-orange":""}`},String(g)),t("div",{class:"label"},"Bidirectional Couplings"))),u.length>0?t(j,null,t("h3",{class:"section-header-sm"},"Zone Sizes"),t("p",{class:"section-sub"},"Files per zone. Green = high cohesion, orange = moderate, red = low."),t(ve,{data:u})):null,t(ot,{findings:a,legacyInsights:o,groupBy:"type",searchable:!0}))}function Ys({data:n}){let{zones:e}=n,s=e?.enrichmentPass??0;if(s<ge.problems)return t("div",{class:"locked-view"},t("div",{class:"locked-icon"},"\u{1F512}"),t("h2",null,"Problems"),t("p",null,"Requires enrichment pass 3 (current: ",s,")"),t("p",{class:"locked-hint"},"Run ",t("code",null,"sourcevision analyze")," again to unlock."));let r=(e?.findings??[]).filter(u=>u.type==="anti-pattern"),i=r.length===0?(e?.insights??[]).filter(u=>/problem|anti.?pattern|coupling|split|merge|smell|violation/i.test(u)):[],a=r.filter(u=>u.severity==="critical").length,o=r.filter(u=>u.severity==="warning").length,l=r.filter(u=>!u.severity||u.severity==="info").length,c=$(()=>{let u=new Map;for(let d of r)d.scope&&d.scope!=="global"&&u.set(d.scope,(u.get(d.scope)||0)+1);return[...u.entries()].sort((d,h)=>h[1]-d[1]).map(([d,h])=>({label:d,value:h,color:h>=3?"var(--red)":h>=2?"var(--orange)":"var(--accent)"}))},[r]);return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Problems")),t("p",{class:"section-sub"},`${r.length} anti-patterns detected`),r.length>0?t("div",{class:"stat-grid"},t("div",{class:"stat-card"},t("div",{class:"value text-red"},String(a)),t("div",{class:"label"},"Critical")),t("div",{class:"stat-card"},t("div",{class:"value text-orange"},String(o)),t("div",{class:"label"},"Warnings")),t("div",{class:"stat-card"},t("div",{class:"value"},String(l)),t("div",{class:"label"},"Info"))):null,c.length>0?t(j,null,t("h3",{class:"section-header-sm"},"Problems by Zone"),t("p",{class:"section-sub"},"Which zones have the most anti-patterns."),t(ve,{data:c})):null,t(ot,{findings:r,legacyInsights:i,groupBy:"severity",searchable:!0}))}function qs({data:n}){let{zones:e}=n,s=e?.enrichmentPass??0;if(s<ge.suggestions)return t("div",{class:"locked-view"},t("div",{class:"locked-icon"},"\u{1F512}"),t("h2",null,"Suggestions"),t("p",null,"Requires enrichment pass 4 (current: ",s,")"),t("p",{class:"locked-hint"},"Run ",t("code",null,"sourcevision analyze")," again to unlock."));let r=(e?.findings??[]).filter(c=>c.type==="suggestion"),i=r.length===0?(e?.insights??[]).filter(c=>/suggest|refactor|improv|consider|opportunity|extract/i.test(c)):[],a=r.filter(c=>c.scope==="global").length,o=r.filter(c=>c.scope!=="global").length,l=$(()=>{let c=new Set;for(let u of r)u.scope!=="global"&&c.add(u.scope);return c.size},[r]);return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Suggestions")),t("p",{class:"section-sub"},`${r.length} suggestions for improvement`),r.length>0?t("div",{class:"stat-grid"},t("div",{class:"stat-card"},t("div",{class:"value"},String(a)),t("div",{class:"label"},"Global Suggestions")),t("div",{class:"stat-card"},t("div",{class:"value"},String(o)),t("div",{class:"label"},"Zone-Specific")),t("div",{class:"stat-card"},t("div",{class:"value"},String(l)),t("div",{class:"label"},"Zones Affected"))):null,t(ot,{findings:r,legacyInsights:i,groupBy:"severity",searchable:!0}))}function bn({nodes:n,renderNode:e,defaultExpandDepth:s=2,filterMatch:r}){let[i,a]=C(()=>{let u=new Set;function d(h,m){for(let p of h)m<s&&(u.add(p.id),d(p.children,m+1))}return d(n,0),u}),o=r?Ni(n,r):i,l=u=>{if(r)return;let d=new Set(i);d.has(u)?d.delete(u):d.add(u),a(d)};function c(u,d,h=!1){return u.map((m,p)=>{let g=m.children.length>0,y=o.has(m.id),f=p===u.length-1;if(r&&!Xs(m,r))return null;let x=d*24;return t("div",{key:m.id,class:"tree-node"},t("div",{class:`tree-node-row${g?" tree-node-expandable":""}`,style:`padding-left: ${x+8}px`,onClick:g?()=>l(m.id):void 0,role:g?"treeitem":void 0,"aria-expanded":g?String(y):void 0,tabIndex:g?0:void 0,onKeyDown:g?b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),l(m.id))}:void 0},d>0?t("span",{class:`tree-line${f?" tree-line-last":""}`,style:`left: ${x-12}px`,"aria-hidden":"true"}):null,t("span",{class:`tree-chevron${g&&y?" tree-chevron-open":""}`,"aria-hidden":"true"},g?"\u25B6":"\u2500"),t("span",{class:"tree-node-content"},e(m,d))),g&&y?t("div",{class:"tree-children",role:"group"},c(m.children,d+1,f)):null)}).filter(Boolean)}return t("div",{class:"route-tree",role:"tree","aria-label":"Tree view"},c(n,0))}function Ni(n,e){let s=new Set;function r(i){let a=!1;for(let o of i){let l=r(o.children);(e.has(o.id)||l)&&(s.add(o.id),a=!0)}return a}return r(n),s}function Xs(n,e){return e.has(n.id)?!0:n.children.some(s=>Xs(s,e))}function er(n){return{id:n.file,routePattern:n.routePattern,file:n.file,children:n.children.map(er)}}function Mi(n,e){let s=new Map,r=new Set;for(let l of n){let c=l.from,u=s.get(c);u||(u=[],s.set(c,u)),u.push({name:l.componentName,file:l.to,count:l.usageCount}),r.add(`${l.to}:${l.componentName}`)}let i=new Set;for(let l of n)r.has(`${l.from}:${l.from.split("/").pop()?.replace(/\.\w+$/,"")||""}`)||i.add(l.from);if(i.size===0)for(let l of s.keys())i.add(l);let a=new Set;function o(l,c){let u=[];if(c<4&&!a.has(l)){a.add(l);let d=s.get(l)??[];for(let h of d)u.push({id:`${l}->${h.file}:${h.name}`,componentName:h.name,file:h.file,usageCount:h.count,children:o(h.file,c+1).children});a.delete(l)}return{id:l,file:l,children:u}}return[...i].map(l=>{let c=o(l,0);return c.file=l,c}).filter(l=>l.children.length>0)}function tr({data:n}){let e=n.components,[s,r]=C("");if(!e)return t("div",{class:"locked-view"},t("div",{class:"locked-icon"},"\u25C7"),t("h2",null,"No Component Data"),t("p",null,"Run the component analyzer to see routes and component usage."),t("div",{class:"locked-hint"},t("code",null,"sourcevision analyze")));let{routeModules:i,routeTree:a,usageEdges:o,summary:l}=e,c=e.components,u=$(()=>a.map(er),[a]),d=$(()=>{let f=new Map;for(let x of i)f.set(x.file,x);return f},[i]),h=$(()=>{if(!o||o.length===0)return[];let f=new Set(c.map(x=>x.file));return Mi(o,f)},[o,c]),m=$(()=>{if(!s)return null;let f=s.toLowerCase(),x=new Set;function b(v){for(let S of v){let k=String(S.routePattern||"").toLowerCase(),T=String(S.file||"").toLowerCase();(k.includes(f)||T.includes(f))&&x.add(S.id),b(S.children)}}return b(u),x},[s,u]),p=$(()=>{let f={loader:"#6cb4ee",action:"#6cb4ee",default:"var(--green)",ErrorBoundary:"var(--orange)",HydrateFallback:"var(--orange)",meta:"var(--purple)",links:"var(--purple)",headers:"var(--purple)",handle:"var(--purple)"};return Object.entries(l.routeConventions).map(([x,b])=>({label:x,value:b,color:f[x]||"var(--accent)"}))},[l.routeConventions]),g=(f,x)=>{let b=d.get(String(f.file));return t(j,null,t("span",{class:"route-pattern"},String(f.routePattern||"/")),t("span",{class:"route-file"},String(f.file)),...(b?.exports??[]).map(v=>t("span",{key:v,class:`route-badge route-badge-${Js(v)}`},v)),b?.isLayout?t("span",{class:"tag tag-source route-badge"},"layout"):null,b?.isIndex?t("span",{class:"tag tag-test route-badge"},"index"):null)},y=(f,x)=>{let b=f.componentName,v=f.file,S=f.usageCount;return t(j,null,b?t("span",{class:"component-name"},b):t("span",{class:"component-file"},Qs(v)),b?t("span",{class:"component-file"},Qs(v)):null,S!=null&&S>0?t("span",{class:"component-usage-badge"},`${S}x`):null)};return t("div",null,t("div",{class:"view-header"},t(G,{product:"sourcevision",title:"SourceVision",class:"branded-header-sv"}),t("h2",{class:"section-header"},"Routes & Components")),t("div",{class:"stat-grid"},t("div",{class:"stat-card"},t("div",{class:"value"},String(l.totalComponents)),t("div",{class:"label"},"Components")),t("div",{class:"stat-card"},t("div",{class:"value"},String(l.totalRouteModules)),t("div",{class:"label"},"Route Modules")),t("div",{class:"stat-card"},t("div",{class:"value"},String(l.totalUsageEdges)),t("div",{class:"label"},"Usage Edges")),t("div",{class:"stat-card"},t("div",{class:"value"},String(l.layoutDepth)),t("div",{class:"label"},"Layout Depth"))),a.length>0||h.length>0?t(it,{placeholder:"Search routes, files, or components...",value:s,onInput:r}):null,u.length>0?t(j,null,t("h3",{class:"section-header-sm"},"Route Tree"),t(bn,{nodes:u,renderNode:g,defaultExpandDepth:3,filterMatch:m})):null,h.length>0?t(j,null,t("h3",{class:"section-header-sm mt-24"},"Component Usage Tree"),t("p",{class:"section-sub"},"How components are used across files. Arrows show which files import and render each component."),t(bn,{nodes:h,renderNode:y,defaultExpandDepth:2})):null,p.length>0?t(j,null,t("h3",{class:"section-header-sm mt-24"},"Convention Coverage"),t(ve,{data:p})):null,i.length>0?t(ae,{title:"Route Modules",count:i.length,defaultOpen:!0,threshold:20},t("div",{class:"data-table-wrapper"},t("table",{class:"data-table"},t("thead",null,t("tr",null,t("th",null,"File"),t("th",null,"Pattern"),t("th",null,"Exports"),t("th",null,"Layout"))),t("tbody",null,i.map(f=>t("tr",{key:f.file},t("td",null,f.file),t("td",null,f.routePattern||t("span",{class:"route-file"},"(pathless)")),t("td",null,f.exports.map(x=>t("span",{key:x,class:`route-badge route-badge-${Js(x)}`},x))),t("td",null,f.isLayout?t("span",{class:"tag tag-source"},"layout"):null,f.isIndex?t("span",{class:"tag tag-test"},"index"):null))))))):null,l.mostUsedComponents.length>0?t(ae,{title:"Most Used Components",count:l.mostUsedComponents.length,defaultOpen:!0,threshold:15},t("div",{class:"data-table-wrapper"},t("table",{class:"data-table component-usage-table"},t("thead",null,t("tr",null,t("th",null,"Component"),t("th",null,"File"),t("th",null,"Usage Count"))),t("tbody",null,l.mostUsedComponents.map(f=>t("tr",{key:`${f.file}:${f.name}`},t("td",null,f.name),t("td",null,f.file),t("td",null,String(f.usageCount)))))))):null)}function Qs(n){let e=n.split("/");return e.length>2?`.../${e.slice(-2).join("/")}`:n}function Js(n){switch(n){case"loader":case"action":return"data";case"default":return"component";case"ErrorBoundary":case"HydrateFallback":return"boundary";default:return"meta"}}function zt(n){let e={total:0,completed:0,inProgress:0,pending:0,deferred:0,blocked:0,deleted:0};function s(r){for(let i of r){if(i.level==="task"||i.level==="subtask")switch(e.total++,i.status){case"completed":e.completed++;break;case"in_progress":e.inProgress++;break;case"pending":e.pending++;break;case"deferred":e.deferred++;break;case"blocked":e.blocked++;break;case"deleted":e.deleted++;break}i.children&&i.children.length>0&&s(i.children)}}return s(n),e}function kn(n){return n.total>0?n.completed/n.total:0}function jt(n,e){return e.has(n.status)?!0:n.children?n.children.some(s=>jt(s,e)):!1}function Ke(n){let e=new Date(n);if(isNaN(e.getTime()))return"";let s=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0");return`${s}-${r} ${i}:${a}`}var _n=["pending","in_progress","completed","blocked","deferred","deleted"],Fi={pending:{icon:"\u25CB",label:"Pending",cssClass:"prd-status-pending"},in_progress:{icon:"\u25D0",label:"In Progress",cssClass:"prd-status-in-progress"},completed:{icon:"\u25CF",label:"Completed",cssClass:"prd-status-completed"},blocked:{icon:"\u2298",label:"Blocked",cssClass:"prd-status-blocked"},deferred:{icon:"\u25CC",label:"Deferred",cssClass:"prd-status-deferred"},deleted:{icon:"\u2715",label:"Deleted",cssClass:"prd-status-deleted"}},xn=[{key:"all",label:"All Items",title:"Show all statuses including deleted",statuses:new Set(_n)},{key:"active",label:"Active Work",title:"Show pending, in progress, and blocked items",statuses:new Set(["pending","in_progress","blocked"])},{key:"completed",label:"Completed",title:"Show only completed items",statuses:new Set(["completed"])},{key:"blocked-deferred",label:"Blocked/Deferred",title:"Show blocked and deferred items that need attention",statuses:new Set(["blocked","deferred"])}];function nr(n){for(let e of xn)if(n.size===e.statuses.size&&[...e.statuses].every(s=>n.has(s)))return e.key;return null}function wn({activeStatuses:n,onChange:e}){let s=N(i=>{let a=new Set(n);if(a.has(i)){if(a.size<=1)return;a.delete(i)}else a.add(i);e(a)},[n,e]),r=$(()=>nr(n),[n]);return t("div",{class:"prd-status-filter",role:"group","aria-label":"Filter by status"},t("span",{class:"prd-status-filter-label"},"Filter:"),t("div",{class:"prd-status-filter-presets"},xn.map(i=>t("button",{key:i.key,class:`prd-status-preset${r===i.key?" active":""}`,onClick:()=>e(new Set(i.statuses)),title:i.title,"aria-pressed":String(r===i.key),type:"button"},i.label)),r===null?t("span",{class:"prd-status-preset-custom",title:"Custom filter combination"},"Custom"):null),t("div",{class:"prd-status-filter-chips",role:"toolbar","aria-label":"Status chip toggles"},_n.map(i=>{let a=Fi[i],o=n.has(i);return t("button",{key:i,class:`prd-status-chip${o?" active":""} ${a.cssClass}`,onClick:()=>s(i),title:`${o?"Hide":"Show"} ${a.label.toLowerCase()} items`,"aria-pressed":String(o),type:"button",onKeyDown:l=>{(l.key==="ArrowRight"||l.key==="ArrowDown")&&(l.preventDefault(),l.currentTarget.nextElementSibling?.focus()),(l.key==="ArrowLeft"||l.key==="ArrowUp")&&(l.preventDefault(),l.currentTarget.previousElementSibling?.focus())}},t("span",{class:"prd-status-chip-icon"},a.icon),t("span",{class:"prd-status-chip-label"},a.label))})))}function Sn(){return new Set(["pending","in_progress","completed","blocked","deferred"])}var sr={completed:{icon:"\u25CF",cssClass:"prd-status-completed",label:"Completed"},in_progress:{icon:"\u25D0",cssClass:"prd-status-in-progress",label:"In Progress"},pending:{icon:"\u25CB",cssClass:"prd-status-pending",label:"Pending"},deferred:{icon:"\u25CC",cssClass:"prd-status-deferred",label:"Deferred"},blocked:{icon:"\u2298",cssClass:"prd-status-blocked",label:"Blocked"},deleted:{icon:"\u2715",cssClass:"prd-status-deleted",label:"Deleted"}},Oi={critical:{cssClass:"prd-priority-critical"},high:{cssClass:"prd-priority-high"},medium:{cssClass:"prd-priority-medium"},low:{cssClass:"prd-priority-low"}},zi={epic:"Epic",feature:"Feature",task:"Task",subtask:"Subtask"};function rr(n,e,s=0){let r=new Set;if(s>=e)return r;for(let i of n)if(r.add(i.id),i.children&&i.children.length>0)for(let a of rr(i.children,e,s+1))r.add(a);return r}function ji({status:n}){let e=sr[n];return t("span",{class:`prd-status-icon ${e.cssClass}`,title:e.label,"aria-label":e.label},e.icon)}function Vi({priority:n}){let e=Oi[n];return t("span",{class:`prd-priority-badge ${e.cssClass}`},n)}function Bi({ratio:n}){let e=Math.round(n*100),s=e>=100?"prd-bar-done":e>=50?"prd-bar-mid":"prd-bar-low";return t("div",{class:"prd-progress-wrapper",title:`${e}% complete`,role:"progressbar","aria-valuenow":String(e),"aria-valuemin":"0","aria-valuemax":"100","aria-label":`${e}% complete`},t("div",{class:"prd-progress-track","aria-hidden":"true"},t("div",{class:`prd-progress-fill ${s}`,style:`width: ${e}%`})),t("span",{class:"prd-progress-pct","aria-hidden":"true"},`${e}%`))}function Zi({tags:n}){return t("span",{class:"prd-tag-list"},n.map(e=>t("span",{key:e,class:"prd-tag"},e)))}function Hi({item:n}){if(n.status==="completed"&&n.completedAt){let e=Ke(n.completedAt);if(e)return t("span",{class:"prd-timestamp"},`done ${e}`)}if(n.status==="in_progress"&&n.startedAt){let e=Ke(n.startedAt);if(e)return t("span",{class:"prd-timestamp"},`started ${e}`)}return null}function Ui({item:n,depth:e,isExpanded:s,hasChildren:r,isSelected:i,onToggle:a,onSelect:o}){let l=n.children??[],c=r?zt(l):null,u=c?kn(c):0,d=e*24,h=p=>{if(p.target.classList.contains("prd-chevron")){r&&a();return}o?o(n):r&&a()},m=p=>{if((p.key==="Enter"||p.key===" ")&&(p.preventDefault(),o?o(n):r&&a()),r&&p.key==="ArrowRight"&&!s&&(p.preventDefault(),a()),r&&p.key==="ArrowLeft"&&s&&(p.preventDefault(),a()),p.key==="ArrowDown"||p.key==="ArrowUp"){p.preventDefault();let g=p.currentTarget,y=g.closest('[role="tree"]');if(!y)return;let f=Array.from(y.querySelectorAll('[role="treeitem"]')),x=f.indexOf(g);if(x<0)return;let b=p.key==="ArrowDown"?x+1:x-1;b>=0&&b<f.length&&f[b].focus()}};return t("div",{class:`prd-node-row${r?" prd-node-expandable":""}${i?" prd-node-selected":""} prd-level-${n.level}`,style:`padding-left: ${d+8}px`,onClick:h,role:"treeitem","aria-expanded":r?String(s):void 0,"aria-selected":String(i),tabIndex:0,onKeyDown:m},t("span",{class:`prd-chevron${r&&s?" prd-chevron-open":""}`,"aria-hidden":"true"},r?"\u25B6":""),t(ji,{status:n.status}),t("span",{class:`prd-level-badge prd-level-${n.level}`},zi[n.level]),t("span",{class:"prd-node-title"},n.title),n.priority?t(Vi,{priority:n.priority}):null,c&&c.total>0?t(j,null,t(Bi,{ratio:u}),t("span",{class:"prd-count"},`${c.completed}/${c.total}`)):null,n.tags&&n.tags.length>0?t(Zi,{tags:n.tags}):null,t(Hi,{item:n}))}function ar({items:n,depth:e,expanded:s,selectedItemId:r,activeStatuses:i,onToggle:a,onSelectItem:o}){return t(j,null,n.filter(l=>jt(l,i)).map(l=>{let c=l.children??[],u=c.length>0,d=s.has(l.id);return t("div",{key:l.id,class:"prd-node"},t(Ui,{item:l,depth:e,isExpanded:d,hasChildren:u,isSelected:r===l.id,onToggle:()=>a(l.id),onSelect:o}),u&&d?t("div",{class:"prd-children",role:"group"},t(ar,{items:c,depth:e+1,expanded:s,selectedItemId:r,activeStatuses:i,onToggle:a,onSelectItem:o})):null)}))}function Gi({items:n}){let e=zt(n),s=e.total>0?Math.round(e.completed/e.total*100):0,i=[{status:"completed",count:e.completed,label:"Completed"},{status:"in_progress",count:e.inProgress,label:"In Progress"},{status:"pending",count:e.pending,label:"Pending"},{status:"blocked",count:e.blocked,label:"Blocked"},{status:"deferred",count:e.deferred,label:"Deferred"},{status:"deleted",count:e.deleted,label:"Deleted"}].filter(a=>a.count>0);return t("div",{class:"prd-summary"},t("div",{class:"prd-summary-bar"},i.map(a=>t("div",{key:a.status,class:`prd-summary-segment prd-status-bg-${a.status}`,style:`width: ${a.count/e.total*100}%`,title:`${a.label}: ${a.count}`}))),t("div",{class:"prd-summary-stats"},i.map(a=>t("span",{key:a.status,class:"prd-summary-stat"},t("span",{class:`prd-status-dot ${sr[a.status].cssClass}`}),`${a.count} ${a.label}`)),t("span",{class:"prd-summary-pct"},`${s}% complete (${e.completed}/${e.total})`)))}function Wi({onExpandAll:n,onCollapseAll:e}){return t("div",{class:"prd-toolbar"},t("button",{class:"prd-toolbar-btn",onClick:n,title:"Expand all nodes"},"Expand All"),t("button",{class:"prd-toolbar-btn",onClick:e,title:"Collapse all nodes"},"Collapse All"))}function Cn({document:n,defaultExpandDepth:e=2,onSelectItem:s,selectedItemId:r}){let i=$(()=>{let m=new Set;function p(g){for(let y of g)m.add(y.id),y.children&&p(y.children)}return p(n.items),m},[n.items]),[a,o]=C(()=>rr(n.items,e)),[l,c]=C(()=>Sn()),u=N(m=>{o(p=>{let g=new Set(p);return g.has(m)?g.delete(m):g.add(m),g})},[]),d=N(()=>o(new Set(i)),[i]),h=N(()=>o(new Set),[]);return n.items.length===0?t("div",{class:"prd-empty"},t("p",null,"No PRD items yet."),t("p",{class:"prd-empty-hint"},"Run ",t("code",null,'rex add epic --title="..."')," to get started.")):t("div",{class:"prd-tree-container"},t("div",{class:"prd-header"},t("h2",{class:"prd-title"},n.title),t(Wi,{onExpandAll:d,onCollapseAll:h})),t(wn,{activeStatuses:l,onChange:c}),t(Gi,{items:n.items}),t("div",{class:"prd-tree",role:"tree","aria-label":"PRD hierarchy"},t(ar,{items:n.items,depth:0,expanded:a,selectedItemId:r,activeStatuses:l,onToggle:u,onSelectItem:s})))}var Ki=[{value:"pending",label:"Pending",icon:"\u25CB"},{value:"in_progress",label:"In Progress",icon:"\u25D0"},{value:"completed",label:"Completed",icon:"\u25CF"},{value:"blocked",label:"Blocked",icon:"\u2298"},{value:"deferred",label:"Deferred",icon:"\u25CC"},{value:"deleted",label:"Deleted",icon:"\u2715"}],Yi=[{value:"critical",label:"Critical"},{value:"high",label:"High"},{value:"medium",label:"Medium"},{value:"low",label:"Low"}],Tn={epic:"Epic",feature:"Feature",task:"Task",subtask:"Subtask"};function ir(n,e){for(let s of n){if(s.id===e)return s;if(s.children){let r=ir(s.children,e);if(r)return r}}return null}function qi({current:n,onChange:e}){return t("div",{class:"task-status-selector",role:"radiogroup","aria-label":"Task status"},Ki.map(s=>t("button",{key:s.value,class:`task-status-btn prd-status-${s.value}${n===s.value?" active":""}`,onClick:()=>e(s.value),role:"radio","aria-checked":String(n===s.value),title:s.label},t("span",{class:"task-status-btn-icon"},s.icon),t("span",{class:"task-status-btn-label"},s.label))))}function Xi({current:n,onChange:e}){return t("select",{class:`task-priority-select${n?` prd-priority-${n}`:""}`,value:n||"",onChange:s=>{let r=s.target.value;r&&e(r)},"aria-label":"Task priority"},t("option",{value:"",disabled:!0},"Set priority"),Yi.map(s=>t("option",{key:s.value,value:s.value},s.label)))}function Qi({tags:n,onUpdate:e}){let[s,r]=C(!1),[i,a]=C(""),o=N(()=>{let c=i.trim().toLowerCase().replace(/\s+/g,"-");c&&!n.includes(c)&&e([...n,c]),a(""),r(!1)},[i,n,e]),l=N(c=>{e(n.filter(u=>u!==c))},[n,e]);return t("div",{class:"task-tag-editor"},n.map(c=>t("span",{key:c,class:"task-tag"},c,t("button",{class:"task-tag-remove",onClick:()=>l(c),"aria-label":`Remove tag ${c}`,title:"Remove"},"\xD7"))),s?t("span",{class:"task-tag-input-wrapper"},t("input",{class:"task-tag-input",type:"text",value:i,placeholder:"tag name",onInput:c=>a(c.target.value),onKeyDown:c=>{c.key==="Enter"&&(c.preventDefault(),o()),c.key==="Escape"&&(r(!1),a(""))},ref:c=>c?.focus()}),t("button",{class:"task-tag-confirm",onClick:o,title:"Add tag"},"\u2713")):t("button",{class:"task-tag-add-btn",onClick:()=>r(!0),title:"Add tag"},"+ tag"))}function Ji({blockedBy:n,allItems:e,onNavigate:s}){return n.length===0?null:t("div",{class:"task-dependencies"},t("div",{class:"task-section-label"},"Blocked By"),t("div",{class:"task-dependency-list"},n.map(r=>{let i=ir(e,r),a=i?.status==="completed";return t("div",{key:r,class:`task-dependency-item${a?" resolved":""}`,onClick:s?()=>s(r):void 0,role:s?"button":void 0,tabIndex:s?0:void 0},t("span",{class:`task-dep-status${a?" prd-status-completed":" prd-status-blocked"}`},a?"\u25CF":"\u2298"),t("span",{class:"task-dep-title"},i?i.title:r),i?t("span",{class:`prd-level-badge prd-level-${i.level}`},Tn[i.level]||i.level):null)})))}function eo({criteria:n}){return n.length===0?null:t("div",{class:"task-acceptance-criteria"},t("div",{class:"task-section-label"},"Acceptance Criteria"),t("ul",{class:"task-criteria-list"},n.map((e,s)=>t("li",{key:s,class:"task-criterion"},e))))}function to({children:n,onNavigate:e}){if(n.length===0)return null;let s={completed:"\u25CF",in_progress:"\u25D0",pending:"\u25CB",blocked:"\u2298",deferred:"\u25CC"};return t("div",{class:"task-children-summary"},t("div",{class:"task-section-label"},`Children (${n.length})`),t("div",{class:"task-children-list"},n.map(r=>t("div",{key:r.id,class:"task-child-item",onClick:e?()=>e(r.id):void 0,role:e?"button":void 0,tabIndex:e?0:void 0},t("span",{class:`prd-status-icon prd-status-${r.status}`},s[r.status]||"\u25CB"),t("span",{class:`prd-level-badge prd-level-${r.level}`},Tn[r.level]||r.level),t("span",{class:"task-child-title"},r.title)))))}function In({item:n,allItems:e,onUpdate:s,onNavigateToItem:r}){let[i,a]=C(!1),o=N(u=>{!s||u===n.status||(a(!0),s(n.id,{status:u}),setTimeout(()=>a(!1),500))},[n.id,n.status,s]),l=N(u=>{!s||u===n.priority||s(n.id,{priority:u})},[n.id,n.priority,s]),c=N(u=>{s&&s(n.id,{tags:u})},[n.id,s]);return t(j,null,t("div",{class:"task-meta-header"},t("span",{class:`prd-level-badge prd-level-${n.level}`},Tn[n.level]||n.level),t("span",{class:"task-id"},n.id.slice(0,8))),t("div",{class:"task-section"},t("div",{class:"task-section-label"},i?"Status (saving...)":"Status"),t(qi,{current:n.status,onChange:o})),n.description?t("div",{class:"task-section"},t("div",{class:"task-section-label"},"Description"),t("div",{class:"task-description"},n.description)):null,n.acceptanceCriteria&&n.acceptanceCriteria.length>0?t("div",{class:"task-section"},t(eo,{criteria:n.acceptanceCriteria})):null,t("div",{class:"task-section"},t("div",{class:"task-section-label"},"Priority"),t(Xi,{current:n.priority,onChange:l})),t("div",{class:"task-section"},t("div",{class:"task-section-label"},"Tags"),t(Qi,{tags:n.tags??[],onUpdate:c})),n.blockedBy&&n.blockedBy.length>0?t("div",{class:"task-section"},t(Ji,{blockedBy:n.blockedBy,allItems:e,onNavigate:r})):null,n.children&&n.children.length>0?t("div",{class:"task-section"},t(to,{children:n.children,onNavigate:r})):null,n.startedAt||n.completedAt?t("div",{class:"task-section task-timestamps"},t("div",{class:"task-section-label"},"Timeline"),n.startedAt?t("div",{class:"detail-row"},t("span",{class:"label"},"Started"),t("span",null,Ke(n.startedAt))):null,n.completedAt?t("div",{class:"detail-row"},t("span",{class:"label"},"Completed"),t("span",null,Ke(n.completedAt))):null):null)}var or=[{value:"epic",label:"Epic"},{value:"feature",label:"Feature"},{value:"task",label:"Task"},{value:"subtask",label:"Subtask"}],no=[{value:"",label:"None"},{value:"critical",label:"Critical"},{value:"high",label:"High"},{value:"medium",label:"Medium"},{value:"low",label:"Low"}],Vt={epic:[null],feature:["epic"],task:["feature","epic"],subtask:["task"]},lr={epic:"feature",feature:"task",task:"subtask"};function dr(n,e=0){let s=[];for(let r of n)s.push({item:r,depth:e}),r.children&&r.children.length>0&&s.push(...dr(r.children,e+1));return s}function cr(n,e){let s=Vt[n];return e===null?s.includes(null):s.includes(e)}function En({allItems:n,onSubmit:e,onCancel:s,defaultParentId:r}){let[i,a]=C(""),[o,l]=C(""),[c,u]=C(r?"":"epic"),[d,h]=C(r??""),[m,p]=C(""),[g,y]=C(!1),[f,x]=C(null),b=$(()=>dr(n),[n]),v=$(()=>{if(c)return c;if(d){let w=b.find(F=>F.item.id===d);if(w)return lr[w.item.level]??""}return"epic"},[c,d,b]),S=$(()=>v?b.filter(w=>cr(v,w.item.level)):b,[v,b]),k=v?Vt[v].includes(null):!0,T=N(async w=>{if(w.preventDefault(),!i.trim()){x("Title is required");return}y(!0),x(null);try{await e({title:i.trim(),level:v||void 0,parentId:d||void 0,description:o.trim()||void 0,priority:m||void 0}),a(""),l(""),u(""),h(""),p("")}catch(F){x(String(F))}finally{y(!1)}},[i,v,d,o,m,e]),A=v?or.find(w=>w.value===v)?.label??v:"item";return t("form",{class:"rex-add-form",onSubmit:T},t("div",{class:"rex-add-form-header"},t("h3",{class:"rex-add-form-title"},"Add New Item"),t("button",{type:"button",class:"rex-add-form-close",onClick:s,"aria-label":"Close"},"\xD7")),f?t("div",{class:"rex-add-form-error",role:"alert","aria-live":"assertive"},f):null,t("div",{class:"rex-add-form-field"},t("label",{class:"rex-add-form-label"},"Type"),t("div",{class:"rex-add-form-level-group"},or.map(w=>t("button",{key:w.value,type:"button",class:`rex-add-form-level-btn prd-level-${w.value}${v===w.value?" active":""}`,onClick:()=>{if(u(w.value),d){let F=b.find(E=>E.item.id===d);F&&!cr(w.value,F.item.level)&&h("")}Vt[w.value].length===1&&Vt[w.value][0]===null&&h("")}},w.label)))),v!=="epic"?t("div",{class:"rex-add-form-field"},t("label",{class:"rex-add-form-label"},"Parent"),t("select",{class:"rex-add-form-select",value:d,onChange:w=>{let F=w.target.value;if(h(F),F&&!c){let E=b.find(M=>M.item.id===F);if(E){let M=lr[E.item.level];M&&u(M)}}}},k?t("option",{value:""},"(root item)"):t("option",{value:"",disabled:!0},"Select a parent..."),S.map(w=>t("option",{key:w.item.id,value:w.item.id},`${" ".repeat(w.depth)}${w.item.title} (${w.item.level})`)))):null,t("div",{class:"rex-add-form-field"},t("label",{class:"rex-add-form-label"},"Title"),t("input",{class:"rex-add-form-input",type:"text",value:i,placeholder:`Enter ${A} title...`,onInput:w=>a(w.target.value),required:!0,ref:w=>w?.focus()})),t("div",{class:"rex-add-form-field"},t("label",{class:"rex-add-form-label"},"Description ",t("span",{class:"rex-add-form-optional"},"(optional)")),t("textarea",{class:"rex-add-form-textarea",value:o,placeholder:"Describe the item...",onInput:w=>l(w.target.value),rows:3})),t("div",{class:"rex-add-form-field"},t("label",{class:"rex-add-form-label"},"Priority"),t("select",{class:"rex-add-form-select",value:m,onChange:w=>p(w.target.value)},no.map(w=>t("option",{key:w.value,value:w.value},w.label)))),t("div",{class:"rex-add-form-actions"},t("button",{type:"button",class:"rex-add-form-btn rex-add-form-btn-cancel",onClick:s},"Cancel"),t("button",{type:"submit",class:"rex-add-form-btn rex-add-form-btn-submit",disabled:g||!i.trim()},g?"Adding...":`Add ${A}`)))}function Pn({onPrdChanged:n}){let[e,s]=C("idle"),[r,i]=C([]),[a,o]=C(null),[l,c]=C(!1),[u,d]=C(!1),[h,m]=C(new Set),[p,g]=C(new Set),y=N(async()=>{try{let k=await fetch("/api/rex/proposals");if(k.ok){let T=await k.json();T.proposals&&T.proposals.length>0&&(i(T.proposals),s("done"),g(new Set(T.proposals.map((A,w)=>w))))}}catch{}},[]);C(()=>{y()});let f=N(async()=>{s("running"),o(null),i([]),m(new Set);try{let k=await fetch("/api/rex/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({noLlm:l})});if(!k.ok){let A=await k.json().catch(()=>({error:"Analysis failed"}));throw new Error(A.error||`HTTP ${k.status}`)}let T=await k.json();if(T.proposals&&T.proposals.length>0)i(T.proposals),g(new Set(T.proposals.map((A,w)=>w))),s("done");else{let A=await fetch("/api/rex/proposals");if(A.ok){let w=await A.json();if(w.proposals&&w.proposals.length>0){i(w.proposals),g(new Set(w.proposals.map((F,E)=>E))),s("done");return}}i([]),s("done")}}catch(k){o(String(k)),s("error")}},[l]),x=N(async()=>{if(p.size!==0){d(!0);try{let k=[...p],T=await fetch("/api/rex/proposals/accept",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({indices:k})});if(!T.ok){let F=await T.json().catch(()=>({error:"Accept failed"}));throw new Error(F.error||`HTTP ${T.status}`)}let A=await T.json();m(new Set([...h,...p]));let w=r.filter((F,E)=>!p.has(E));i(w),g(new Set),w.length===0&&s("idle"),n()}catch(k){o(String(k))}finally{d(!1)}}},[p,r,h,n]),b=N(k=>{g(T=>{let A=new Set(T);return A.has(k)?A.delete(k):A.add(k),A})},[]),v=N(()=>{g(new Set(r.map((k,T)=>T)))},[r]),S=N(()=>{g(new Set)},[]);return t("div",{class:"rex-analyze-panel"},t("div",{class:"rex-analyze-header"},t("h3",{class:"rex-analyze-title"},"Analyze Project")),t("div",{class:"rex-analyze-controls"},t("label",{class:"rex-analyze-checkbox-label"},t("input",{type:"checkbox",checked:l,onChange:()=>c(!l)})," Skip LLM refinement (faster, less refined)"),t("button",{class:"rex-analyze-btn rex-analyze-btn-run",onClick:f,disabled:e==="running"},e==="running"?"Analyzing...":"Run Analysis")),e==="running"?t("div",{class:"rex-analyze-progress",role:"status","aria-live":"polite"},t("div",{class:"rex-analyze-spinner","aria-hidden":"true"}),t("span",null,"Scanning project and building proposals...")):null,a?t("div",{class:"rex-analyze-error",role:"alert","aria-live":"assertive"},a):null,e==="done"&&r.length===0?t("div",{class:"rex-analyze-empty"},t("p",null,"No new proposals found."),t("p",{class:"rex-analyze-hint"},"The project may already be fully tracked in the PRD.")):null,e==="done"&&r.length>0?t(j,null,t("div",{class:"rex-analyze-selection"},t("span",{class:"rex-analyze-count"},`${p.size} of ${r.length} selected`),t("button",{class:"rex-analyze-select-btn",onClick:v},"Select All"),t("button",{class:"rex-analyze-select-btn",onClick:S},"Select None")),t("div",{class:"rex-analyze-proposals"},r.map((k,T)=>t(so,{key:T,proposal:k,index:T,selected:p.has(T),onToggle:()=>b(T)}))),t("div",{class:"rex-analyze-accept-bar"},t("button",{class:"rex-analyze-btn rex-analyze-btn-accept",onClick:x,disabled:u||p.size===0},u?"Accepting...":`Accept ${p.size} Proposal${p.size!==1?"s":""}`))):null)}function so({proposal:n,index:e,selected:s,onToggle:r}){let[i,a]=C(!1),o=n.features.reduce((l,c)=>l+c.tasks.length,0);return t("div",{class:`rex-proposal-card${s?" selected":""}`},t("div",{class:"rex-proposal-header",onClick:r,role:"button",tabIndex:0,"aria-label":`${s?"Deselect":"Select"} proposal: ${n.epic.title}`,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),r())}},t("input",{type:"checkbox",checked:s,onChange:r,onClick:l=>l.stopPropagation(),"aria-label":`Select proposal: ${n.epic.title}`}),t("div",{class:"rex-proposal-info"},t("span",{class:"prd-level-badge prd-level-epic"},"Epic"),t("span",{class:"rex-proposal-title"},n.epic.title)),t("span",{class:"rex-proposal-count"},`${n.features.length} features, ${o} tasks`),t("button",{class:`rex-proposal-expand${i?" open":""}`,onClick:l=>{l.stopPropagation(),a(!i)},"aria-label":i?"Collapse":"Expand"},"\u25B6")),i?t("div",{class:"rex-proposal-details"},n.epic.description?t("p",{class:"rex-proposal-desc"},n.epic.description):null,n.features.map((l,c)=>t("div",{key:c,class:"rex-proposal-feature"},t("div",{class:"rex-proposal-feature-header"},t("span",{class:"prd-level-badge prd-level-feature"},"Feature"),t("span",null,l.title)),l.tasks.length>0?t("div",{class:"rex-proposal-tasks"},l.tasks.map((u,d)=>t("div",{key:d,class:"rex-proposal-task"},t("span",{class:"prd-level-badge prd-level-task"},"Task"),t("span",{class:"rex-proposal-task-title"},u.title),u.priority?t("span",{class:`prd-priority-badge prd-priority-${u.priority}`},u.priority):null))):null))):null)}var ro=[{value:"pending",label:"Pending",icon:"\u25CB"},{value:"in_progress",label:"In Progress",icon:"\u25D0"},{value:"completed",label:"Completed",icon:"\u25CF"},{value:"blocked",label:"Blocked",icon:"\u2298"},{value:"deferred",label:"Deferred",icon:"\u25CC"},{value:"deleted",label:"Deleted",icon:"\u2715"}];function Rn({selectedIds:n,onClearSelection:e,onActionComplete:s}){let[r,i]=C(!1),[a,o]=C(null),l=N(async c=>{if(n.size!==0){i(!0),o(null);try{let u=await fetch("/api/rex/items/bulk",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:[...n],updates:{status:c}})});if(!u.ok){let m=await u.json().catch(()=>({error:"Update failed"}));throw new Error(m.error||`HTTP ${u.status}`)}let h=(await u.json()).results?.filter(m=>m.ok).length??0;o(`Updated ${h} item${h!==1?"s":""} to ${c.replace("_"," ")}`),setTimeout(()=>{o(null),s(),e()},1500)}catch(u){o(`Error: ${u}`),setTimeout(()=>o(null),3e3)}finally{i(!1)}}},[n,s,e]);return n.size===0?null:t("div",{class:"rex-bulk-bar"},t("div",{class:"rex-bulk-count"},t("span",{class:"rex-bulk-count-num"},String(n.size)),t("span",null,` item${n.size!==1?"s":""} selected`)),a?t("div",{class:"rex-bulk-result"},a):t("div",{class:"rex-bulk-actions"},t("span",{class:"rex-bulk-label"},"Set status:"),ro.map(c=>t("button",{key:c.value,class:`rex-bulk-action-btn prd-status-${c.value}`,onClick:()=>l(c.value),disabled:r,title:c.label},t("span",{class:"rex-bulk-action-icon"},c.icon),t("span",{class:"rex-bulk-action-label"},c.label)))),t("button",{class:"rex-bulk-clear",onClick:e,title:"Clear selection"},"\xD7"))}function $n(n,e){for(let s of n){if(s.id===e)return s;if(s.children){let r=$n(s.children,e);if(r)return r}}return null}function ur({prdData:n,onSelectItem:e,onDetailContent:s}){let[r,i]=C(n??null),[a,o]=C(!n),[l,c]=C(null),[u,d]=C(null),[h,m]=C(null),[p,g]=C(null),[y,f]=C(new Set),[x,b]=C(null),v=N(async()=>{try{let w=await fetch("/data/prd.json");if(!w.ok){w.status===404?c("No PRD data found. Run 'rex init' then 'rex analyze' to create one."):c(`Failed to load PRD data (${w.status})`);return}let F=await w.json();i(F),c(null)}catch{c("Could not fetch PRD data. Is the server running?")}},[]);H(()=>{if(n){i(n),o(!1);return}v().then(()=>o(!1))},[n,v]);let S=N(async(w,F)=>{try{let E=await fetch(`/api/rex/items/${w}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(F)});if(!E.ok){console.error("Failed to update item:",await E.text());return}await v()}catch(E){console.error("Failed to update item:",E)}},[v]),k=N(w=>{d(w.id),e&&e({type:"prd",title:w.title,id:w.id,level:w.level,status:w.status,description:w.description,acceptanceCriteria:w.acceptanceCriteria,priority:w.priority,tags:w.tags,blockedBy:w.blockedBy,startedAt:w.startedAt,completedAt:w.completedAt})},[e]),T=N(w=>{if(!r)return;let F=$n(r.items,w);F&&k(F)},[r,k]);H(()=>{if(!r||!u||!s){s&&s(null);return}let w=$n(r.items,u);if(!w){s(null);return}let F=r.items;s(t(In,{item:w,allItems:F,onUpdate:S,onNavigateToItem:T}))},[r,u,s,S,T]);let A=N(async w=>{let F=await fetch("/api/rex/items",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)});if(!F.ok){let M=await F.json().catch(()=>({error:"Failed to add item"}));throw new Error(M.error||`HTTP ${F.status}`)}let E=await F.json();b(`Created ${E.level}: ${E.title}`),setTimeout(()=>b(null),3e3),m(null),g(null),await v()},[v]);return a?t("div",{class:"loading"},"Loading PRD..."):l?t("div",{class:"prd-empty"},t("p",null,l)):r?t(j,null,t("div",{class:"view-header"},t(G,{product:"rex",title:"Rex",class:"branded-header-rex"}),t("h2",{class:"section-header"},"Tasks")),t("div",{class:"rex-command-bar"},t("button",{class:`rex-command-btn${h==="add"?" active":""}`,onClick:()=>{m(h==="add"?null:"add"),g(null)},title:"Add a new item to the PRD"},"+ Add Item")),h==="add"?t(En,{allItems:r.items,onSubmit:A,onCancel:()=>{m(null),g(null)},defaultParentId:p}):null,t(Cn,{document:r,defaultExpandDepth:2,onSelectItem:k,selectedItemId:u}),t(Rn,{selectedIds:y,onClearSelection:()=>f(new Set),onActionComplete:v}),x?t("div",{class:"rex-toast",role:"status","aria-live":"polite"},x):null):t("div",{class:"prd-empty"},t("p",null,"No PRD data available."))}var ao={completed:{icon:"\u25CF",label:"Completed",cssClass:"prd-status-completed"},in_progress:{icon:"\u25D0",label:"In Progress",cssClass:"prd-status-in-progress"},pending:{icon:"\u25CB",label:"Pending",cssClass:"prd-status-pending"},deferred:{icon:"\u25CC",label:"Deferred",cssClass:"prd-status-deferred"},blocked:{icon:"\u2298",label:"Blocked",cssClass:"prd-status-blocked"},deleted:{icon:"\u2715",label:"Deleted",cssClass:"prd-status-deleted"}},io={epic:"Epic",feature:"Feature",task:"Task",subtask:"Subtask"};function oo(n){return ao[n]??{icon:"\u25CB",label:n,cssClass:"prd-status-pending"}}var lo=[{status:"in_progress",icon:"\u25D0",label:"Start",cssClass:"prd-status-in-progress"},{status:"completed",icon:"\u25CF",label:"Complete",cssClass:"prd-status-completed"},{status:"blocked",icon:"\u2298",label:"Block",cssClass:"prd-status-blocked"},{status:"deferred",icon:"\u25CC",label:"Defer",cssClass:"prd-status-deferred"}];function co({task:n,x:e,y:s,onClose:r,navigateTo:i,onStatusChange:a}){let o=be(null);H(()=>{let h=p=>{o.current&&!o.current.contains(p.target)&&r()},m=p=>{p.key==="Escape"&&r()};return document.addEventListener("mousedown",h),document.addEventListener("keydown",m),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("keydown",m)}},[r]);let l={position:"fixed",left:`${Math.min(e,window.innerWidth-200)}px`,top:`${Math.min(s,window.innerHeight-240)}px`,zIndex:"9999"},c=()=>{i&&i("prd"),r()},u=async h=>{if(a)a(n.id,h);else try{await fetch(`/api/rex/items/${n.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:h})})}catch{}r()},d=()=>{navigator.clipboard.writeText(n.id).catch(()=>{}),r()};return t("div",{ref:o,class:"rex-context-menu",style:l,role:"menu"},t("div",{class:"rex-context-menu-header"},t("span",{class:"rex-context-menu-title"},n.title)),t("div",{class:"rex-context-menu-divider"}),i?t("button",{class:"rex-context-menu-item",role:"menuitem",onClick:c},"View in PRD Tree"):null,t("div",{class:"rex-context-menu-section-label"},"Set Status"),...lo.filter(h=>h.status!==n.status).map(h=>t("button",{key:h.status,class:"rex-context-menu-item",role:"menuitem",onClick:()=>u(h.status)},t("span",{class:`rex-context-menu-status-icon ${h.cssClass}`},h.icon),h.label)),t("div",{class:"rex-context-menu-divider"}),t("button",{class:"rex-context-menu-item",role:"menuitem",onClick:d},"Copy Task ID"))}function lt({task:n,navigateTo:e,class:s,showLevel:r=!1,showPriority:i=!1,showStatus:a=!0,compact:o=!1,onClick:l}){let[c,u]=C(null),d=oo(n.status),h=N(y=>{y.stopPropagation(),l&&l(),e&&e("prd")},[l,e]),m=N(y=>{(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),y.stopPropagation(),l&&l(),e&&e("prd"))},[l,e]),p=N(y=>{y.preventDefault(),y.stopPropagation(),u({x:y.clientX,y:y.clientY})},[]),g=["rex-task-link",o?"rex-task-link-compact":"",s??""].filter(Boolean).join(" ");return t("span",{class:g,role:"button",tabIndex:0,onClick:h,onKeyDown:m,onContextMenu:p,title:`${d.label}: ${n.title}`,"aria-label":`${n.title} \u2014 ${d.label}`},a?t("span",{class:`rex-task-link-status ${d.cssClass}`,"aria-hidden":"true"},d.icon):null,r&&n.level?t("span",{class:`prd-level-badge prd-level-${n.level}`},io[n.level]??n.level):null,t("span",{class:"rex-task-link-title"},n.title),i&&n.priority?t("span",{class:`prd-priority-badge prd-priority-${n.priority}`},n.priority):null,t("span",{class:"rex-task-link-arrow","aria-hidden":"true"},"\u2192"),c?t(co,{task:n,x:c.x,y:c.y,onClose:()=>u(null),navigateTo:e}):null)}var uo={completed:"\u25CF",in_progress:"\u25D0",pending:"\u25CB",deferred:"\u25CC",blocked:"\u2298"};function pr({navigateTo:n}){let[e,s]=C(null),[r,i]=C(!0),[a,o]=C(null),l=N(async()=>{try{let f=await fetch("/api/rex/dashboard");if(!f.ok){f.status===404?o("No PRD data found. Run 'rex init' then 'rex analyze' to create one."):o(`Failed to load dashboard data (${f.status})`);return}let x=await f.json();s(x),o(null)}catch{o("Could not fetch dashboard data. Is the server running?")}},[]);if(H(()=>{l().then(()=>i(!1));let f=setInterval(l,1e4);return()=>clearInterval(f)},[l]),r)return t("div",{class:"loading"},"Loading PRD dashboard...");if(a)return t("div",{class:"prd-empty"},t("p",null,a));if(!e)return t("div",{class:"prd-empty"},t("p",null,"No PRD data available."));let{stats:c,percentComplete:u,epics:d,nextTask:h,priorities:m}=e,p=$(()=>[...d].sort((f,x)=>{let b={in_progress:0,pending:1,blocked:2,deferred:3,completed:4},v=b[f.status]??1,S=b[x.status]??1;return v!==S?v-S:x.percentComplete-f.percentComplete}),[d]),g=$(()=>[{label:"Critical",count:m.critical,color:"var(--red)"},{label:"High",count:m.high,color:"var(--orange)"},{label:"Medium",count:m.medium,color:"var(--text-dim)"},{label:"Low",count:m.low,color:"var(--text-dim)"}].filter(f=>f.count>0),[m]),y=g.reduce((f,x)=>f+x.count,0)+m.unset;return t("div",{class:"rex-dashboard"},t("div",{class:"rex-dashboard-header"},t(G,{product:"rex",title:"Rex",class:"branded-header-rex"}),t("div",{class:"rex-dashboard-title-row"},t("h2",null,e.title),t("div",{class:"rex-dashboard-meta"},`${u}% complete`))),t("div",{class:"rex-dashboard-completion"},t("div",{class:"rex-dashboard-completion-bar"},t("div",{class:"rex-dashboard-completion-fill",style:`width: ${u}%`,role:"progressbar","aria-valuenow":String(u),"aria-valuemin":"0","aria-valuemax":"100","aria-label":`Overall completion: ${u}%`}))),t("div",{class:"overview-metrics"},t(q,{value:c.total,label:"Total Tasks"}),t(q,{value:c.completed,label:"Completed",color:"var(--green)"}),t(q,{value:c.inProgress,label:"In Progress",color:"var(--accent)"}),t(q,{value:c.pending,label:"Pending"}),c.blocked>0?t(q,{value:c.blocked,label:"Blocked",color:"var(--red)"}):null,c.deferred>0?t(q,{value:c.deferred,label:"Deferred",color:"var(--orange)"}):null),t("div",{class:"rex-dashboard-columns"},t("div",{class:"rex-dashboard-epics"},t("h3",null,"Epic Progress"),p.length>0?t("div",{class:"rex-dashboard-epic-list"},p.map(f=>t("div",{key:f.id,class:`rex-dashboard-epic-item${f.status==="completed"?" completed":""}`},t("div",{class:"rex-dashboard-epic-header"},t(lt,{task:{id:f.id,title:f.title,status:f.status,level:"epic",priority:f.priority},navigateTo:n,compact:!0,showStatus:!0,class:"rex-dashboard-epic-link"}),t("span",{class:"rex-dashboard-epic-pct"},`${f.percentComplete}%`)),t("div",{class:"rex-dashboard-epic-bar"},t("div",{class:"rex-dashboard-epic-track"},f.stats.total>0?t("div",{class:`rex-dashboard-epic-fill${f.percentComplete>=100?" done":f.percentComplete>=50?" mid":""}`,style:`width: ${f.percentComplete}%`}):null),t("span",{class:"rex-dashboard-epic-count"},`${f.stats.completed}/${f.stats.total}`))))):t("div",{class:"rex-dashboard-empty-hint"},"No epics defined yet.")),t("div",{class:"rex-dashboard-sidebar"},t("div",{class:"rex-dashboard-next"},t("h3",null,"Up Next"),h?t("div",{class:"rex-dashboard-next-card"},t("div",{class:"rex-dashboard-next-header"},t("span",{class:`prd-status-icon prd-status-${h.status.replace("_","-")}`},uo[h.status]??"\u25CB"),t("span",{class:`prd-level-badge prd-level-${h.level}`},h.level.charAt(0).toUpperCase()+h.level.slice(1)),h.priority?t("span",{class:`prd-priority-badge prd-priority-${h.priority}`},h.priority):null),t(lt,{task:{id:h.id,title:h.title,status:h.status,level:h.level,priority:h.priority},navigateTo:n,showStatus:!1,class:"rex-dashboard-next-link"}),h.description?t("div",{class:"rex-dashboard-next-desc"},h.description.length>120?h.description.slice(0,120)+"\u2026":h.description):null,h.tags&&h.tags.length>0?t("div",{class:"rex-dashboard-next-tags"},h.tags.map(f=>t("span",{key:f,class:"prd-tag"},f))):null):t("div",{class:"rex-dashboard-next-empty"},"All tasks completed or blocked")),g.length>0?t("div",{class:"rex-dashboard-priorities"},t("h3",null,"Priority Distribution"),t("div",{class:"rex-dashboard-priority-bars"},g.map(f=>t("div",{key:f.label,class:"rex-dashboard-priority-row"},t("span",{class:"rex-dashboard-priority-label"},f.label),t("div",{class:"rex-dashboard-priority-track"},t("div",{class:"rex-dashboard-priority-fill",style:`width: ${f.count/y*100}%; background: ${f.color}`})),t("span",{class:"rex-dashboard-priority-count"},String(f.count)))))):null,t("div",{class:"rex-dashboard-status-summary"},t("h3",null,"Status Breakdown"),t("div",{class:"prd-summary-bar"},c.completed>0?t("div",{class:"prd-summary-segment prd-status-bg-completed",style:`width: ${c.completed/c.total*100}%`,title:`Completed: ${c.completed}`}):null,c.inProgress>0?t("div",{class:"prd-summary-segment prd-status-bg-in_progress",style:`width: ${c.inProgress/c.total*100}%`,title:`In Progress: ${c.inProgress}`}):null,c.pending>0?t("div",{class:"prd-summary-segment prd-status-bg-pending",style:`width: ${c.pending/c.total*100}%`,title:`Pending: ${c.pending}`}):null,c.blocked>0?t("div",{class:"prd-summary-segment prd-status-bg-blocked",style:`width: ${c.blocked/c.total*100}%`,title:`Blocked: ${c.blocked}`}):null,c.deferred>0?t("div",{class:"prd-summary-segment prd-status-bg-deferred",style:`width: ${c.deferred/c.total*100}%`,title:`Deferred: ${c.deferred}`}):null),t("div",{class:"prd-summary-stats"},c.completed>0?t("span",{class:"prd-summary-stat"},t("span",{class:"prd-status-dot prd-status-completed"}),`${c.completed} Completed`):null,c.inProgress>0?t("span",{class:"prd-summary-stat"},t("span",{class:"prd-status-dot prd-status-in-progress"}),`${c.inProgress} In Progress`):null,c.pending>0?t("span",{class:"prd-summary-stat"},t("span",{class:"prd-status-dot prd-status-pending"}),`${c.pending} Pending`):null,c.blocked>0?t("span",{class:"prd-summary-stat"},t("span",{class:"prd-status-dot prd-status-blocked"}),`${c.blocked} Blocked`):null,c.deferred>0?t("span",{class:"prd-summary-stat"},t("span",{class:"prd-status-dot prd-status-deferred"}),`${c.deferred} Deferred`):null)))))}function pe(n){return n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}k`:String(n)}function Pe(n){return n.toLocaleString()}var Re={hench:"var(--brand-teal)",rex:"var(--brand-purple)",sv:"var(--brand-orange)"},bt={hench:"Hench",rex:"Rex",sv:"Sourcevision"};function hr({label:n,dim:e}){let s=Math.min(e.percent,100),r=e.severity==="exceeded"?"budget-bar-exceeded":e.severity==="warning"?"budget-bar-warning":"budget-bar-ok";return t("div",{class:"budget-indicator"},t("div",{class:"budget-header"},t("span",{class:"budget-label"},n),t("span",{class:`budget-pct budget-${e.severity}`},`${e.percent.toFixed(0)}%`)),t("div",{class:"budget-track"},t("div",{class:`budget-fill ${r}`,style:`width: ${s}%`}),e.severity!=="ok"?t("div",{class:"budget-threshold",style:"left: 80%"}):null),t("div",{class:"budget-detail"},n==="Tokens"?`${Pe(e.used)} / ${Pe(e.budget)}`:`$${e.used.toFixed(2)} / $${e.budget.toFixed(2)}`))}function po({buckets:n}){if(n.length===0)return t("div",{class:"token-empty"},"No data for the selected period");let e=Math.max(...n.map(c=>c.usage.totalInputTokens+c.usage.totalOutputTokens),1),s=Math.max(20,Math.min(60,600/n.length)),r=Math.max(600,n.length*(s+8)+80),i=220,a=20,l=i-a-40;return t("div",{class:"period-chart-container"},t("svg",{viewBox:`0 0 ${r} ${i}`,class:"period-chart",preserveAspectRatio:"xMinYMin meet"},[0,.25,.5,.75,1].map(c=>{let u=a+l*(1-c),d=pe(e*c);return t(j,{key:`y-${c}`},t("line",{x1:55,x2:r,y1:u,y2:u,stroke:"var(--border)","stroke-dasharray":"3,3",opacity:.5}),t("text",{x:50,y:u+4,"text-anchor":"end",class:"chart-axis-label"},d))}),n.map((c,u)=>{let d=60+u*(s+8),h=c.usage.totalInputTokens+c.usage.totalOutputTokens,m=c.usage.packages.hench.inputTokens+c.usage.packages.hench.outputTokens,p=c.usage.packages.rex.inputTokens+c.usage.packages.rex.outputTokens,g=c.usage.packages.sv.inputTokens+c.usage.packages.sv.outputTokens,y=m/e*l,f=p/e*l,x=g/e*l,b=a+l,v=c.period.length>7?c.period.slice(5):c.period;return t("g",{key:c.period},y>0?t("rect",{x:d,y:b-y,width:s,height:y,rx:2,fill:Re.hench,opacity:.85},t("title",null,`Hench: ${pe(m)} tokens`)):null,f>0?t("rect",{x:d,y:b-y-f,width:s,height:f,rx:2,fill:Re.rex,opacity:.85},t("title",null,`Rex: ${pe(p)} tokens`)):null,x>0?t("rect",{x:d,y:b-y-f-x,width:s,height:x,rx:2,fill:Re.sv,opacity:.85},t("title",null,`SV: ${pe(g)} tokens`)):null,t("text",{x:d+s/2,y:b+16,"text-anchor":"middle",class:"chart-axis-label",transform:n.length>14?`rotate(-45, ${d+s/2}, ${b+16})`:void 0},v),t("title",null,`${c.period}: ${pe(h)} tokens (${c.estimatedCost.total})`))})),t("div",{class:"chart-legend"},["hench","rex","sv"].map(c=>t("span",{key:c,class:"legend-item"},t("span",{class:"legend-dot",style:`background: ${Re[c]}`}),bt[c]))))}function ho({usage:n}){let e=n.totalInputTokens+n.totalOutputTokens;if(e===0)return t("div",{class:"token-empty"},"No token usage recorded");let s=[{key:"hench",total:n.packages.hench.inputTokens+n.packages.hench.outputTokens},{key:"rex",total:n.packages.rex.inputTokens+n.packages.rex.outputTokens},{key:"sv",total:n.packages.sv.inputTokens+n.packages.sv.outputTokens}].filter(d=>d.total>0),r=160,i=r/2,a=r/2,o=60,l=20,c=-Math.PI/2,u=s.map(d=>{let h=d.total/e,m=c+h*2*Math.PI,p=h>.5?1:0,g=i+o*Math.cos(c),y=a+o*Math.sin(c),f=i+o*Math.cos(m-.001),x=a+o*Math.sin(m-.001),b=`M ${g} ${y} A ${o} ${o} 0 ${p} 1 ${f} ${x}`;return c=m,{...d,d:b,fraction:h}});return t("div",{class:"pkg-breakdown"},t("svg",{viewBox:`0 0 ${r} ${r}`,width:r,height:r,class:"donut-chart"},u.map(d=>t("path",{key:d.key,d:d.d,fill:"none",stroke:Re[d.key],"stroke-width":l,"stroke-linecap":"round"},t("title",null,`${bt[d.key]}: ${pe(d.total)} (${(d.fraction*100).toFixed(0)}%)`))),t("text",{x:i,y:a-6,"text-anchor":"middle","dominant-baseline":"central",class:"donut-total"},pe(e)),t("text",{x:i,y:a+12,"text-anchor":"middle",class:"donut-label"},"tokens")),t("div",{class:"pkg-details"},s.map(d=>t("div",{key:d.key,class:"pkg-row"},t("span",{class:"legend-dot",style:`background: ${Re[d.key]}`}),t("span",{class:"pkg-name"},bt[d.key]),t("span",{class:"pkg-tokens"},pe(d.total)),t("span",{class:"pkg-pct"},`${(d.total/e*100).toFixed(0)}%`)))))}function mr(){let[n,e]=C(!0),[s,r]=C(null),[i,a]=C("day"),[o,l]=C(""),[c,u]=C(""),[d,h]=C("all"),[m,p]=C(null),[g,y]=C([]),[f,x]=C([]),[b,v]=C(null),S=$(()=>{let E=new URLSearchParams;o&&E.set("since",new Date(o).toISOString()),c&&E.set("until",new Date(c).toISOString());let M=E.toString();return M?`?${M}`:""},[o,c]),k=N(async()=>{e(!0),r(null);try{let[E,M,W,ie]=await Promise.all([fetch(`/api/token/summary${S}`),fetch(`/api/token/by-command${S}`),fetch(`/api/token/by-period${S}&period=${i}`),fetch(`/api/token/budget${S}`)]);if(!E.ok)throw new Error("Failed to fetch summary");let[K,te,D,Q]=await Promise.all([E.json(),M.json(),W.json(),ie.json()]);p(K),y(te.commands??[]),x(D.buckets??[]),v(Q.budget??null)}catch(E){r(E instanceof Error?E.message:String(E))}finally{e(!1)}},[S,i]);H(()=>{k()},[k]);let T=$(()=>d==="all"?g:g.filter(E=>E.package===d),[g,d]),A=$(()=>T.slice(0,10).map(E=>({label:`${bt[E.package]??E.package}: ${E.command}`,value:E.inputTokens+E.outputTokens,color:Re[E.package]??"var(--accent)"})),[T]);if(n&&!m)return t("div",{class:"loading"},"Loading token usage data...");if(s)return t("div",{class:"token-error"},t("h3",null,"Error loading token data"),t("p",null,s),t("button",{class:"btn",onClick:k},"Retry"));let w=m?.usage,F=m?.cost;return t("div",{class:"token-usage-container"},t("div",{class:"token-header"},t(G,{product:"rex",title:"Rex",class:"branded-header-rex"}),t("h2",null,"Token Usage"),t("div",{class:"token-controls"},t("label",{class:"filter-label"},"From:",t("input",{type:"date",class:"filter-input",value:o,onInput:E=>l(E.target.value)})),t("label",{class:"filter-label"},"To:",t("input",{type:"date",class:"filter-input",value:c,onInput:E=>u(E.target.value)})),t("label",{class:"filter-label"},"Package:",t("select",{class:"filter-input",value:d,onChange:E=>h(E.target.value)},t("option",{value:"all"},"All"),t("option",{value:"hench"},"Hench"),t("option",{value:"rex"},"Rex"),t("option",{value:"sv"},"Sourcevision"))),o||c?t("button",{class:"btn btn-small",onClick:()=>{l(""),u("")}},"Clear"):null)),b&&b.severity!=="ok"?t("div",{class:`budget-alert budget-alert-${b.severity}`},t("strong",null,b.severity==="exceeded"?"Budget Exceeded":"Budget Warning"),...b.warnings.map((E,M)=>t("p",{key:M},E))):null,w?t("div",{class:"overview-metrics token-metrics"},t(q,{value:pe(w.totalInputTokens+w.totalOutputTokens),label:"Total Tokens"}),t(q,{value:F?.total??"$0.00",label:"Est. Cost",color:"var(--brand-green)"}),t(q,{value:w.totalCalls,label:"API Calls",color:"var(--brand-purple)"}),t(q,{value:pe(w.totalInputTokens),label:"Input Tokens"}),t(q,{value:pe(w.totalOutputTokens),label:"Output Tokens"})):null,b&&(b.tokens||b.cost)?t("div",{class:"token-section"},t("h3",null,"Budget Status"),t("div",{class:"budget-indicators"},b.tokens?t(hr,{label:"Tokens",dim:b.tokens}):null,b.cost?t(hr,{label:"Cost",dim:b.cost}):null)):null,t("div",{class:"token-section"},t("div",{class:"section-header-row"},t("h3",null,"Usage Over Time"),t("div",{class:"period-toggle"},["day","week","month"].map(E=>t("button",{key:E,class:`toggle-btn ${i===E?"active":""}`,onClick:()=>a(E)},E.charAt(0).toUpperCase()+E.slice(1))))),t(po,{buckets:f})),t("div",{class:"overview-columns"},w?t("div",{class:"overview-col"},t("h3",null,"By Package"),t(ho,{usage:w})):null,A.length>0?t("div",{class:"overview-col"},t("h3",null,"By Command"),t(ve,{data:A})):t("div",{class:"overview-col"},t("h3",null,"By Command"),t("div",{class:"token-empty"},"No command data available"))),T.length>0?t("div",{class:"token-section"},t("h3",null,"Command Details"),t("div",{class:"token-table-wrapper"},t("table",{class:"token-table"},t("thead",null,t("tr",null,t("th",null,"Package"),t("th",null,"Command"),t("th",{class:"num"},"Input Tokens"),t("th",{class:"num"},"Output Tokens"),t("th",{class:"num"},"Total"),t("th",{class:"num"},"Calls"))),t("tbody",null,T.map(E=>{let M=E.inputTokens+E.outputTokens;return t("tr",{key:`${E.package}:${E.command}`},t("td",null,t("span",{class:"pkg-badge",style:`background: ${Re[E.package]??"var(--accent)"}`},bt[E.package]??E.package)),t("td",null,E.command),t("td",{class:"num"},Pe(E.inputTokens)),t("td",{class:"num"},Pe(E.outputTokens)),t("td",{class:"num"},Pe(M)),t("td",{class:"num"},Pe(E.calls)))}))))):null,F&&w?t("div",{class:"token-section"},t("h3",null,"Cost Breakdown"),t("div",{class:"cost-breakdown"},t("div",{class:"cost-item"},t("span",{class:"cost-label"},"Input tokens"),t("span",{class:"cost-value"},`$${F.inputCost.toFixed(4)}`),t("span",{class:"cost-detail"},`${Pe(w.totalInputTokens)} tokens @ $3/M`)),t("div",{class:"cost-item"},t("span",{class:"cost-label"},"Output tokens"),t("span",{class:"cost-value"},`$${F.outputCost.toFixed(4)}`),t("span",{class:"cost-detail"},`${Pe(w.totalOutputTokens)} tokens @ $15/M`)),t("div",{class:"cost-item cost-total"},t("span",{class:"cost-label"},"Total estimated"),t("span",{class:"cost-value"},F.total)))):null,n?t("div",{class:"token-loading-overlay"},"Refreshing..."):null)}var fr={completed:"\u25CF",in_progress:"\u25D0",pending:"\u25CB",blocked:"\u2298",deferred:"\u25CC"},mo={epic:"Epic",feature:"Feature",task:"Task",subtask:"Subtask"};function Dn(n,e){return n.length>e?n.slice(0,e-1)+"\u2026":n}function fo({report:n}){return t("div",{class:"val-summary"},t("div",{class:`val-summary-badge ${n.ok?"val-pass":"val-fail"}`},n.ok?"\u2713 All Checks Passed":"\u2717 Validation Failed"),t("div",{class:"val-summary-stats"},t("span",{class:"val-stat"},t("span",{class:"val-stat-num val-stat-passed"},String(n.summary.passed))," passed"),n.summary.failed>0?t("span",{class:"val-stat"},t("span",{class:"val-stat-num val-stat-failed"},String(n.summary.failed))," failed"):null,n.summary.warnings>0?t("span",{class:"val-stat"},t("span",{class:"val-stat-num val-stat-warnings"},String(n.summary.warnings))," warnings"):null))}function go({check:n,onNavigate:e}){let[s,r]=C(!n.pass),i=!n.pass&&n.severity==="warn",a=n.pass?"\u2713":i?"\u26A0":"\u2717",o=n.pass?"val-check-pass":i?"val-check-warn":"val-check-fail";return t("div",{class:`val-check ${o}`},t("div",{class:"val-check-header",onClick:()=>n.errors.length>0&&r(!s),role:n.errors.length>0?"button":void 0,tabIndex:n.errors.length>0?0:void 0},t("span",{class:"val-check-icon"},a),t("span",{class:"val-check-name"},n.name),n.errors.length>0?t("span",{class:"val-check-count"},`${n.errors.length} issue${n.errors.length!==1?"s":""}`):null,n.errors.length>0?t("span",{class:"val-check-chevron"},s?"\u25BC":"\u25B6"):null),s&&n.errors.length>0?t("div",{class:"val-check-errors"},n.errors.map((l,c)=>t("div",{key:c,class:`val-error-item${l.itemId?" val-error-clickable":""}`,onClick:l.itemId?()=>e(l.itemId):void 0,role:l.itemId?"button":void 0,tabIndex:l.itemId?0:void 0},t("span",{class:"val-error-msg"},l.message),l.itemTitle?t("span",{class:"val-error-item-title"},l.itemTitle):null,l.itemId?t("span",{class:"val-error-item-id"},l.itemId.slice(0,8)):null))):null)}function vo(n,e,s){if(n.nodes.length===0)return{nodes:[],edges:[]};let r=new Set(n.cycleNodeIds),i=new Map,a=new Map;for(let b of n.edges)i.has(b.source)||i.set(b.source,[]),i.get(b.source).push(b.target),a.has(b.target)||a.set(b.target,[]),a.get(b.target).push(b.source);let o=new Map,l=[];for(let b of n.nodes)(!b.blockedBy||b.blockedBy.length===0)&&(o.set(b.id,0),l.push(b.id));for(let b of r)o.has(b)||(o.set(b,0),l.push(b));let c=0;for(;c<l.length;){let b=l[c++],v=o.get(b)??0,S=i.get(b)??[];for(let k of S){let T=o.get(k)??-1,A=v+1;A>T&&o.set(k,A),l.includes(k)||l.push(k)}}for(let b of n.nodes)o.has(b.id)||o.set(b.id,0);let u=new Map;for(let[b,v]of o)u.has(v)||u.set(v,[]),u.get(v).push(b);let d=Math.max(...Array.from(u.keys()),0),h=new Map(n.nodes.map(b=>[b.id,b])),m=60,p=e-m*2,g=s-m*2,y=d>0?g/d:0,f=new Map;for(let[b,v]of u){let S=v.length>1?p/(v.length-1):0,k=v.length>1?m:e/2;v.forEach((T,A)=>{let w=h.get(T);w&&f.set(T,{id:T,title:w.title,level:w.level,status:w.status,x:k+A*S,y:m+b*y,inCycle:r.has(T),blockedByCount:(a.get(T)??[]).length,blocksCount:(i.get(T)??[]).length})})}let x=[];for(let b of n.edges){let v=f.get(b.source),S=f.get(b.target);v&&S&&x.push({source:v,target:S,resolved:b.resolved})}return{nodes:Array.from(f.values()),edges:x}}function yo(){return t("defs",null,t("marker",{id:"dep-arrow",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse"},t("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--text-dim)"})),t("marker",{id:"dep-arrow-resolved",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse"},t("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--brand-teal)"})),t("marker",{id:"dep-arrow-cycle",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse"},t("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--brand-orange)"})))}function bo({edge:n,cycleSet:e}){let s=e.has(n.source.id)&&e.has(n.target.id),r=s?"dep-edge dep-edge-cycle":n.resolved?"dep-edge dep-edge-resolved":"dep-edge",i=s?"url(#dep-arrow-cycle)":n.resolved?"url(#dep-arrow-resolved)":"url(#dep-arrow)",a=n.target.x-n.source.x,o=n.target.y-n.source.y,l=n.source.x+a*.1,c=n.source.y+o*.5,u=n.target.x-a*.1,d=n.target.y-o*.5;return t("path",{class:r,d:`M ${n.source.x} ${n.source.y} C ${l} ${c}, ${u} ${d}, ${n.target.x} ${n.target.y}`,"marker-end":i})}function ko({node:n,selected:e,onSelect:s}){let r=n.blocksCount>2?24:n.blocksCount>0?20:16;return t("g",{class:`dep-node dep-node-${n.status}${n.inCycle?" dep-node-cycle":""}${e?" dep-node-selected":""}`,transform:`translate(${n.x}, ${n.y})`,onClick:()=>s(n.id),role:"button",tabIndex:0},t("circle",{r,class:"dep-node-circle"}),n.inCycle?t("circle",{r:r+4,class:"dep-node-cycle-ring",fill:"none"}):null,t("text",{class:"dep-node-label",dy:r+14,textAnchor:"middle"},Dn(n.title,20)),t("text",{class:"dep-node-status-icon",textAnchor:"middle",dy:"4"},fr[n.status]||"\u25CB"))}function _o({data:n,onNavigate:e}){let s=be(null),[r,i]=C({width:800,height:500}),[a,o]=C(null);H(()=>{if(!s.current)return;let h=s.current.getBoundingClientRect();i({width:Math.max(h.width,400),height:Math.max(n.nodes.length*60,300)})},[n.nodes.length]);let l=$(()=>vo(n,r.width,r.height),[n,r.width,r.height]),c=$(()=>new Set(n.cycleNodeIds),[n.cycleNodeIds]),u=N(h=>{o(h===a?null:h)},[a]);if(n.nodes.length===0)return t("div",{class:"dep-empty"},t("div",{class:"dep-empty-icon"},"\u2713"),t("p",null,"No dependency relationships found."),t("p",{class:"dep-empty-hint"},"Add blockedBy relationships to tasks to see the dependency graph."));let d=a?n.nodes.find(h=>h.id===a):null;return t("div",{class:"dep-graph-container",ref:s},t("svg",{class:"dep-graph-svg",viewBox:`0 0 ${r.width} ${r.height}`,width:"100%",height:r.height,"aria-label":"Dependency graph"},t(yo,null),t("g",{class:"dep-edges"},l.edges.map((h,m)=>t(bo,{key:m,edge:h,cycleSet:c}))),t("g",{class:"dep-nodes"},l.nodes.map(h=>t(ko,{key:h.id,node:h,selected:h.id===a,onSelect:u})))),d?t("div",{class:"dep-node-detail"},t("div",{class:"dep-detail-header"},t("span",{class:`prd-level-badge prd-level-${d.level}`},mo[d.level]||d.level),t("span",{class:`prd-status-icon prd-status-${d.status}`},fr[d.status]||"\u25CB"),t("span",{class:"dep-detail-title"},d.title)),t("div",{class:"dep-detail-id"},d.id.slice(0,8)),d.blockedBy.length>0?t("div",{class:"dep-detail-deps"},t("span",{class:"dep-detail-label"},"Blocked by: "),d.blockedBy.map(h=>{let m=n.nodes.find(p=>p.id===h);return t("span",{key:h,class:"dep-detail-dep-link",onClick:()=>e(h),role:"button",tabIndex:0},m?Dn(m.title,30):h.slice(0,8))})):null,t("button",{class:"dep-detail-nav-btn",onClick:()=>e(d.id)},"View in Tasks \u2192")):null,t("div",{class:"dep-legend"},t("div",{class:"dep-legend-item"},t("span",{class:"dep-legend-line dep-legend-resolved"}),"Resolved dependency"),t("div",{class:"dep-legend-item"},t("span",{class:"dep-legend-line dep-legend-unresolved"}),"Unresolved dependency"),n.cycleNodeIds.length>0?t("div",{class:"dep-legend-item"},t("span",{class:"dep-legend-line dep-legend-cycle"}),"Circular dependency"):null))}function xo({blockers:n,onNavigate:e}){return n.length===0?null:t("div",{class:"dep-blockers"},t("h3",{class:"dep-section-title"},"Critical Blockers"),t("p",{class:"dep-section-desc"},"Items blocking the most other items. Prioritize these for maximum unblocking."),t("div",{class:"dep-blocker-list"},n.map(s=>t("div",{key:s.id,class:"dep-blocker-item",onClick:()=>e(s.id),role:"button",tabIndex:0},t("span",{class:"dep-blocker-count"},String(s.blockingCount)),t("span",{class:"dep-blocker-title"},s.title),t("span",{class:"dep-blocker-id"},s.id.slice(0,8))))))}function wo({chains:n,nodes:e,onNavigate:s}){if(n.length===0)return null;let r=new Map(e.map(i=>[i.id,i]));return t("div",{class:"dep-chains"},t("h3",{class:"dep-section-title"},"Longest Blocking Chains"),t("p",{class:"dep-section-desc"},"These dependency chains create the longest wait paths. Consider parallelizing or breaking them."),t("div",{class:"dep-chain-list"},n.slice(0,5).map((i,a)=>t("div",{key:a,class:"dep-chain"},t("span",{class:"dep-chain-length"},`${i.path.length} steps`),t("div",{class:"dep-chain-path"},i.path.map((o,l)=>{let c=r.get(o);return t(j,{key:o},l>0?t("span",{class:"dep-chain-arrow"},"\u2192"):null,t("span",{class:`dep-chain-node dep-chain-node-${c?.status??"pending"}`,onClick:()=>s(o),role:"button",tabIndex:0,title:c?.title??o},Dn(c?.title??o.slice(0,8),20)))}))))))}function gr(){let[n,e]=C(null),[s,r]=C(null),[i,a]=C(!1),[o,l]=C(!0),[c,u]=C(null),[d,h]=C("validation"),m=N(async()=>{l(!0);try{let y=await fetch("/api/rex/dependency-graph");if(!y.ok){y.status===404?r(null):console.error("Failed to fetch dependency graph");return}let f=await y.json();r(f)}catch{console.error("Failed to fetch dependency graph")}finally{l(!1)}},[]);H(()=>{m()},[m]);let p=N(async()=>{a(!0),u(null);try{let y=await fetch("/api/rex/validate");if(!y.ok){let x=await y.json().catch(()=>({error:"Validation failed"}));u(x.error||`HTTP ${y.status}`);return}let f=await y.json();e(f)}catch{u("Could not run validation. Is the server running?")}finally{a(!1)}},[]),g=N(y=>{window.location.hash="#prd",window.dispatchEvent(new CustomEvent("prd-navigate",{detail:{itemId:y}}))},[]);return t(j,null,t("div",{class:"val-container"},t("div",{class:"val-header"},t(G,{product:"rex",title:"Rex",class:"branded-header-rex"}),t("h2",{class:"val-title"},"Validation & Dependencies"),t("div",{class:"val-tabs"},t("button",{class:`val-tab${d==="validation"?" active":""}`,onClick:()=>h("validation")},"\u2713 Validation"),t("button",{class:`val-tab${d==="dependencies"?" active":""}`,onClick:()=>h("dependencies")},"\u2B95 Dependencies"))),d==="validation"?t("div",{class:"val-panel"},t("div",{class:"val-actions"},t("button",{class:"val-run-btn",onClick:p,disabled:i},i?"Running\u2026":"Run Validation"),t("p",{class:"val-actions-hint"},"Check for orphaned items, circular dependencies, stuck tasks, and hierarchy issues.")),c?t("div",{class:"val-error"},c):null,n?t("div",{class:"val-results"},t(fo,{report:n}),t("div",{class:"val-checks"},n.checks.map((y,f)=>t(go,{key:f,check:y,onNavigate:g})))):!i&&!c?t("div",{class:"val-placeholder"},t("p",null,'Click "Run Validation" to check your PRD for issues.')):null):null,d==="dependencies"?t("div",{class:"dep-panel"},o?t("div",{class:"loading"},"Loading dependency graph\u2026"):s?t(j,null,t("div",{class:"dep-stats"},t("div",{class:"dep-stat"},t("span",{class:"dep-stat-num"},String(s.nodes.length)),t("span",{class:"dep-stat-label"},"nodes")),t("div",{class:"dep-stat"},t("span",{class:"dep-stat-num"},String(s.edges.length)),t("span",{class:"dep-stat-label"},"edges")),s.cycleNodeIds.length>0?t("div",{class:"dep-stat dep-stat-warn"},t("span",{class:"dep-stat-num"},String(s.cycleNodeIds.length)),t("span",{class:"dep-stat-label"},"in cycles")):null,t("button",{class:"dep-refresh-btn",onClick:m,title:"Refresh graph"},"\u21BB Refresh")),t(_o,{data:s,onNavigate:g}),t("div",{class:"dep-details-grid"},t(xo,{blockers:s.criticalBlockers,onNavigate:g}),t(wo,{chains:s.blockingChains,nodes:s.nodes,onNavigate:g}))):t("div",{class:"dep-empty"},t("div",{class:"dep-empty-icon"},"\u2713"),t("p",null,"No PRD data found."),t("p",{class:"dep-empty-hint"},"Run 'rex init' and 'rex analyze' to create a PRD."))):null))}function vr(){let[n,e]=C([]),[s,r]=C(!0),i=N(async()=>{try{let o=await fetch("/api/rex/log?limit=50");if(o.ok){let c=(await o.json()).entries.filter(u=>u.event.includes("analysis")||u.event.includes("analyze")||u.event.includes("proposal")||u.event.includes("plan"));e(c.reverse())}}catch{}finally{r(!1)}},[]);H(()=>{i()},[i]);let a=N(()=>{i()},[i]);return t("div",{class:"rex-analysis-view"},t("div",{class:"rex-analysis-view-header"},t(G,{product:"rex",title:"Rex",class:"branded-header-rex"}),t("h2",null,"Analysis"),t("p",{class:"rex-analysis-view-subtitle"},"Scan the project to discover new work items and review proposals before adding them to the PRD.")),t(Pn,{onPrdChanged:a}),t("div",{class:"rex-analysis-history"},t("h3",{class:"rex-analysis-history-title"},"Recent Activity"),s?t("p",{class:"rex-analysis-history-empty"},"Loading..."):n.length===0?t("p",{class:"rex-analysis-history-empty"},"No analysis activity recorded yet."):t("div",{class:"rex-analysis-history-list"},n.map((o,l)=>t("div",{key:l,class:"rex-analysis-history-entry"},t("span",{class:"rex-analysis-history-time"},So(o.timestamp)),t("span",{class:`rex-analysis-history-event ${To(o.event)}`},Co(o.event)),o.detail?t("span",{class:"rex-analysis-history-detail"},o.detail):null)))))}function So(n){try{let e=new Date(n);return e.toLocaleDateString(void 0,{month:"short",day:"numeric"})+" "+e.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}catch{return n}}function Co(n){return n.replace(/_/g," ").replace(/\b\w/g,e=>e.toUpperCase())}function To(n){return n.includes("completed")||n.includes("accepted")?"success":n.includes("error")||n.includes("failed")?"error":n.includes("started")||n.includes("running")?"running":""}function Ye(n){return n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}k`:String(n)}function yr(n,e){if(!e)return"running\u2026";let s=new Date(e).getTime()-new Date(n).getTime();if(s<0)return"\u2014";let r=Math.floor(s/1e3);if(r<60)return`${r}s`;let i=Math.floor(r/60),a=r%60;if(i<60)return`${i}m ${a}s`;let o=Math.floor(i/60),l=i%60;return`${o}h ${l}m`}function Io(n){let e=new Date(n),r=new Date().getTime()-e.getTime(),i=r/(1e3*60*60);if(i<1){let a=Math.floor(r/6e4);return a<=0?"just now":`${a}m ago`}return i<24?`${Math.floor(i)}h ago`:i<168?e.toLocaleDateString(void 0,{weekday:"short",hour:"numeric",minute:"2-digit"}):e.toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}var Eo={completed:{icon:"\u25CF",label:"Completed",color:"var(--green)"},failed:{icon:"\u2715",label:"Failed",color:"var(--red)"},running:{icon:"\u25D0",label:"Running",color:"var(--accent)"},in_progress:{icon:"\u25D0",label:"Running",color:"var(--accent)"},error:{icon:"\u2715",label:"Error",color:"var(--red)"}};function br(n){return Eo[n]??{icon:"\u25CB",label:n,color:"var(--text-dim)"}}function Po({runs:n}){let e=n.length,s=n.filter(o=>o.status==="completed").length,r=n.filter(o=>o.status==="failed"||o.status==="error").length,i=n.reduce((o,l)=>{let c=l.tokenUsage;return o+(c.input??0)+(c.output??0)+(c.cacheCreationInput??0)+(c.cacheReadInput??0)},0),a=n.reduce((o,l)=>o+(l.turns??0),0);return t("div",{class:"overview-metrics hench-metrics"},t(q,{value:e,label:"Total Runs"}),t(q,{value:s,label:"Succeeded",color:"var(--green)"}),r>0?t(q,{value:r,label:"Failed",color:"var(--red)"}):null,t(q,{value:a,label:"Total Turns",color:"var(--brand-purple)"}),t(q,{value:Ye(i),label:"Total Tokens",color:"var(--brand-teal)"}))}function Ro({run:n,isSelected:e,onClick:s,navigateTo:r}){let i=br(n.status),a=(n.tokenUsage.input??0)+(n.tokenUsage.output??0)+(n.tokenUsage.cacheCreationInput??0)+(n.tokenUsage.cacheReadInput??0),o=n.structuredSummary?.counts;return t("div",{class:`hench-run-card${e?" selected":""}${n.status==="failed"||n.status==="error"?" failed":""}`,onClick:s,role:"button",tabIndex:0,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),s())}},t("div",{class:"hench-run-header"},t("span",{class:"hench-run-status",style:`color: ${i.color}`,title:i.label},i.icon),r&&n.taskId?t(lt,{task:{id:n.taskId,title:n.taskTitle,status:n.taskStatus??"pending"},navigateTo:r,compact:!0,showStatus:!1,class:"hench-run-task-link"}):t("span",{class:"hench-run-title"},n.taskTitle),t("span",{class:"hench-run-time"},Io(n.startedAt))),t("div",{class:"hench-run-meta"},t("span",{class:"hench-run-chip"},yr(n.startedAt,n.finishedAt)),t("span",{class:"hench-run-chip"},`${n.turns} turns`),t("span",{class:"hench-run-chip"},Ye(a)+" tokens"),t("span",{class:`hench-run-model hench-run-model-${n.model}`},n.model),o&&o.filesChanged>0?t("span",{class:"hench-run-chip"},`${o.filesChanged} file${o.filesChanged===1?"":"s"} changed`):null))}function $o({run:n,onBack:e,navigateTo:s}){let r=br(n.status),i=(n.tokenUsage.input??0)+(n.tokenUsage.output??0)+(n.tokenUsage.cacheCreationInput??0)+(n.tokenUsage.cacheReadInput??0),a=n.structuredSummary?.counts;return t("div",{class:"hench-run-detail"},t("div",{class:"hench-detail-header"},t("button",{class:"hench-back-btn",onClick:e,"aria-label":"Back to runs list"},"\u2190 Back"),t("div",{class:"hench-detail-title-row"},t("span",{class:"hench-run-status",style:`color: ${r.color}; font-size: 18px`},r.icon),t("h2",null,n.taskTitle))),n.taskId?t("div",{class:"hench-detail-section hench-detail-task-section"},t("h3",null,"Rex Task"),t("div",{class:"hench-detail-task-card"},t(lt,{task:{id:n.taskId,title:n.taskTitle,status:n.taskStatus??"pending"},navigateTo:s,showStatus:!0,showLevel:!1}),t("div",{class:"hench-detail-task-id"},n.taskId))):null,t("div",{class:"hench-detail-info"},t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Status"),t("span",{class:"hench-info-value",style:`color: ${r.color}`},r.label)),t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Started"),t("span",{class:"hench-info-value"},new Date(n.startedAt).toLocaleString())),n.finishedAt?t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Duration"),t("span",{class:"hench-info-value"},yr(n.startedAt,n.finishedAt))):null,t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Model"),t("span",{class:"hench-info-value"},n.model)),t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Turns"),t("span",{class:"hench-info-value"},String(n.turns))),t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Tokens"),t("span",{class:"hench-info-value"},Ye(i))),t("div",{class:"hench-info-row"},t("span",{class:"hench-info-label"},"Run ID"),t("span",{class:"hench-info-value hench-info-mono"},n.id))),a?t("div",{class:"hench-detail-section"},t("h3",null,"Activity"),t("div",{class:"hench-activity-grid"},a.filesRead>0?t("div",{class:"hench-activity-item"},t("span",{class:"hench-activity-val"},String(a.filesRead)),t("span",{class:"hench-activity-label"},"Files Read")):null,a.filesChanged>0?t("div",{class:"hench-activity-item"},t("span",{class:"hench-activity-val"},String(a.filesChanged)),t("span",{class:"hench-activity-label"},"Files Changed")):null,a.commandsExecuted>0?t("div",{class:"hench-activity-item"},t("span",{class:"hench-activity-val"},String(a.commandsExecuted)),t("span",{class:"hench-activity-label"},"Commands")):null,a.testsRun>0?t("div",{class:"hench-activity-item"},t("span",{class:"hench-activity-val"},String(a.testsRun)),t("span",{class:"hench-activity-label"},"Tests Run")):null,a.toolCallsTotal>0?t("div",{class:"hench-activity-item"},t("span",{class:"hench-activity-val"},String(a.toolCallsTotal)),t("span",{class:"hench-activity-label"},"Tool Calls")):null)):null,t("div",{class:"hench-detail-section"},t("h3",null,"Token Breakdown"),t("div",{class:"hench-token-grid"},t("div",{class:"hench-token-item"},t("span",{class:"hench-token-val"},Ye(n.tokenUsage.input??0)),t("span",{class:"hench-token-label"},"Input")),t("div",{class:"hench-token-item"},t("span",{class:"hench-token-val"},Ye(n.tokenUsage.output??0)),t("span",{class:"hench-token-label"},"Output")),n.tokenUsage.cacheCreationInput?t("div",{class:"hench-token-item"},t("span",{class:"hench-token-val"},Ye(n.tokenUsage.cacheCreationInput)),t("span",{class:"hench-token-label"},"Cache Write")):null,n.tokenUsage.cacheReadInput?t("div",{class:"hench-token-item"},t("span",{class:"hench-token-val"},Ye(n.tokenUsage.cacheReadInput)),t("span",{class:"hench-token-label"},"Cache Read")):null)),n.error?t("div",{class:"hench-detail-section"},t("h3",null,"Error"),t("pre",{class:"hench-error-box"},n.error)):null,n.summary?t("div",{class:"hench-detail-section"},t("h3",null,"Summary"),t("pre",{class:"hench-summary-box"},n.summary)):null)}function kr({navigateTo:n}={}){let[e,s]=C([]),[r,i]=C(!0),[a,o]=C(null),[l,c]=C(null),[u,d]=C(null),[h,m]=C(!1),[p,g]=C("all"),y=N(async()=>{try{let k=await fetch("/api/hench/runs");if(!k.ok){o(`Failed to load runs (${k.status})`);return}let T=await k.json();s(T.runs??[]),o(null)}catch{o("Could not fetch runs. Is the server running?")}},[]);H(()=>{y().then(()=>i(!1));let k=setInterval(y,1e4);return()=>clearInterval(k)},[y]);let f=N(async k=>{m(!0);try{let T=await fetch(`/api/hench/runs/${k}`);if(!T.ok){d(null);return}let A=await T.json();d(A)}catch{d(null)}finally{m(!1)}},[]),x=N(k=>{l===k?(c(null),d(null)):(c(k),f(k))},[l,f]),b=N(()=>{c(null),d(null)},[]),v=$(()=>p==="all"?e:p==="failed"?e.filter(k=>k.status==="failed"||k.status==="error"):e.filter(k=>k.status===p),[e,p]),S=$(()=>{let k={all:e.length,completed:0,failed:0,running:0};for(let T of e)T.status==="completed"?k.completed++:T.status==="failed"||T.status==="error"?k.failed++:(T.status==="running"||T.status==="in_progress")&&k.running++;return k},[e]);return r?t("div",{class:"loading"},"Loading execution history..."):a?t("div",{class:"prd-empty"},t("p",null,a),t("button",{class:"btn",onClick:y},"Retry")):e.length===0?t("div",{class:"hench-runs-container"},t("div",{class:"hench-runs-header"},t(G,{product:"hench",title:"Hench",class:"branded-header-hench"}),t("h2",null,"Execution History")),t("div",{class:"hench-empty"},t("div",{class:"hench-empty-icon"},"\u25B6"),t("p",null,"No runs yet."),t("p",{class:"hench-empty-hint"},"Run ",t("code",null,"ndx work")," to start executing tasks."))):l&&!h&&u?t("div",{class:"hench-runs-container"},t($o,{run:u,onBack:b,navigateTo:n})):l&&h?t("div",{class:"hench-runs-container"},t("div",{class:"loading"},"Loading run detail...")):t("div",{class:"hench-runs-container"},t("div",{class:"hench-runs-header"},t(G,{product:"hench",title:"Hench",class:"branded-header-hench"}),t("div",{class:"hench-runs-title-row"},t("h2",null,"Execution History"),t("div",{class:"hench-runs-count"},`${e.length} run${e.length===1?"":"s"}`))),t(Po,{runs:e}),t("div",{class:"hench-filter-bar"},["all","completed","failed","running"].map(k=>t("button",{key:k,class:`toggle-btn${p===k?" active":""}`,onClick:()=>g(k)},k==="all"?"All":k.charAt(0).toUpperCase()+k.slice(1),S[k]>0?t("span",{class:"hench-filter-count"},` (${S[k]})`):null))),t("div",{class:"hench-runs-list"},v.map(k=>t(Ro,{key:k.id,run:k,isSelected:l===k.id,onClick:()=>x(k.id),navigateTo:n})),v.length===0?t("div",{class:"hench-no-results"},"No runs match the selected filter."):null))}Es();var Bt=new Set(["overview","graph","zones","files","routes","architecture","problems","suggestions","rex-dashboard","prd","rex-analysis","token-usage","validation","hench-runs"]);function Do(){let n=location.hash.replace("#","");return Bt.has(n)?n:"overview"}var xr="sidebar-collapsed";function Ao(){try{return localStorage.getItem(xr)==="true"}catch{return!1}}function Lo(){let[n,e]=C(Do),[s,r]=C({manifest:null,inventory:null,imports:null,zones:null,components:null}),[i,a]=C(null),[o,l]=C(!0),[c,u]=C(!1),[d,h]=C("static"),[m,p]=C(null),[g,y]=C(null),[f,x]=C(!1),[b,v]=C(Ao),[S,k]=C(null),T=N(()=>{v(M=>{let W=!M;try{localStorage.setItem(xr,String(W))}catch{}return W})},[]),A=N((M,W)=>{let ie=W?.file??null,K=W?.zone??null;p(ie),y(K),e(M),history.pushState({view:M,file:ie,zone:K},"",`#${M}`)},[]),w=N(M=>{p(null),y(null),e(M),history.pushState({view:M,file:null,zone:null},"",`#${M}`)},[]);H(()=>{document.getElementById("main-content")?.scrollTo(0,0)},[n]),H(()=>{history.replaceState({view:n,file:m,zone:g},"",`#${n}`);let M=K=>{if(K.state){let te=K.state;te.view&&Bt.has(te.view)&&(e(te.view),p(te.file??null),y(te.zone??null))}else{let te=location.hash.replace("#","");Bt.has(te)&&(e(te),p(null),y(null),history.replaceState({view:te,file:null,zone:null},"",`#${te}`))}};window.addEventListener("popstate",M);let W=()=>{let K=location.hash.replace("#","");Bt.has(K)&&(e(K),p(null),y(null),history.replaceState({view:K,file:null,zone:null},"",`#${K}`))};window.addEventListener("hashchange",W);let ie=!0;return xs(K=>{r(K),ie||(x(!0),setTimeout(()=>x(!1),3e3))}),Cs().then(async K=>{h(K),K==="server"?(await pn(),l(!1),ie=!1,Ts(5e3)):(l(!1),u(!0))}),()=>{Is(),window.removeEventListener("popstate",M),window.removeEventListener("hashchange",W)}},[]),H(()=>{if(d==="server")return;let M=K=>{K.preventDefault(),u(!0)},W=async K=>{K.preventDefault(),u(!1),K.dataTransfer?.files&&(l(!0),await Ss(K.dataTransfer.files),l(!1))},ie=K=>{K.relatedTarget===null&&u(!1)};return document.addEventListener("dragover",M),document.addEventListener("drop",W),document.addEventListener("dragleave",ie),()=>{document.removeEventListener("dragover",M),document.removeEventListener("drop",W),document.removeEventListener("dragleave",ie)}},[d]);let F=s.manifest||s.inventory||s.imports||s.zones,E=()=>{if(o)return t("div",{class:"loading",role:"status","aria-live":"polite"},"Loading...");switch(n){case"overview":return t(Vs,{data:s});case"graph":return t(Hs,{data:s,onSelect:a,selectedFile:m,selectedZone:g});case"zones":return t(Us,{data:s,onSelect:a,setSelectedZone:y,navigateTo:A});case"files":return t(Ws,{data:s,onSelect:a,selectedFile:m,setSelectedFile:p,selectedZone:g,navigateTo:A});case"routes":return t(tr,{data:s});case"architecture":return t(Ks,{data:s,onSelect:a,navigateTo:A});case"problems":return t(Ys,{data:s});case"suggestions":return t(qs,{data:s});case"rex-dashboard":return t(pr,{navigateTo:A});case"prd":return t(ur,{onSelectItem:a,onDetailContent:k});case"rex-analysis":return t(vr,null);case"token-usage":return t(mr,null);case"validation":return t(gr,null);case"hench-runs":return t(kr,{navigateTo:A});default:return null}};return t(j,null,t("a",{href:"#main-content",class:"skip-link"},"Skip to main content"),t(As,{view:n,onNavigate:w,manifest:s.manifest,zones:s.zones,sidebarCollapsed:b,onToggleSidebar:T}),t("main",{id:"main-content",class:"main",role:"main","aria-label":"Main content"},t("div",{class:"header-buttons-wrapper"},t("div",{class:"header-buttons"},t(Fs,{view:n}))),E()),t(Ns,{detail:i,data:s,navigateTo:A,onClose:()=>{a(null),k(null)},prdDetailContent:S}),f?t("div",{class:"refresh-toast",role:"status","aria-live":"polite"},"Data updated"):null,c&&!F?t("div",{class:"drop-overlay",role:"dialog","aria-label":"File drop zone"},t("div",{class:"drop-box"},t("h2",null,"Drop .sourcevision files"),t("p",null,`Drag and drop ${bs.join(", ")}`))):null)}var _r=document.getElementById("app");_r&&Yn(t(Lo,null),_r);
|
|
25
|
+
</script>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|