rig-constellation 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -34,19 +34,29 @@ npx rig-constellation
|
|
|
34
34
|
(Have [Bun](https://bun.sh)? `bunx rig-constellation` works too.) That's the whole thing. One command:
|
|
35
35
|
|
|
36
36
|
```
|
|
37
|
-
⬡ Rig — mapping
|
|
37
|
+
⬡ Rig — mapping my-project
|
|
38
|
+
http://localhost:7491
|
|
39
|
+
|
|
38
40
|
✓ initialized ./.rig
|
|
39
|
-
|
|
41
|
+
✓ map live http://localhost:7491
|
|
42
|
+
→ 1/6 extract ██████████████████ 212/212
|
|
43
|
+
→ 5/6 hubness ████████████████░░
|
|
40
44
|
✓ indexed 1,204 nodes · 3,891 edges · 212 files · 36 skills
|
|
41
45
|
✓ wired claude
|
|
42
|
-
✓ map live http://localhost:7474
|
|
43
46
|
|
|
44
47
|
press Ctrl-C to stop the map.
|
|
45
48
|
```
|
|
46
49
|
|
|
47
|
-
It initializes `.rig/`,
|
|
50
|
+
It initializes `.rig/`, opens the live map **first**, then indexes your code so the
|
|
51
|
+
graph assembles in the already-open browser tab in real time, and wires up whichever
|
|
52
|
+
agent it detects. The map title and port are derived per project, so two checkouts can
|
|
53
|
+
run side by side on stable, distinct ports. Re-run any time, or use the explicit
|
|
54
|
+
subcommands below.
|
|
48
55
|
|
|
49
|
-
>
|
|
56
|
+
> The command is `rig` (alias: `rig-constellation`). Prefer a global install?
|
|
57
|
+
> `npm i -g rig-constellation` (or `bun install -g rig-constellation`), then `rig start`.
|
|
58
|
+
> Installed locally with `npm i rig-constellation`? The binary lives in `node_modules/.bin` —
|
|
59
|
+
> run it with `npx rig start` (or install with `-g` to get `rig` on your `PATH`).
|
|
50
60
|
|
|
51
61
|
---
|
|
52
62
|
|
package/dist/rig.js
CHANGED
|
@@ -3579,7 +3579,7 @@ init_bun_adapter();
|
|
|
3579
3579
|
// package.json
|
|
3580
3580
|
var package_default = {
|
|
3581
3581
|
name: "rig-constellation",
|
|
3582
|
-
version: "0.1.
|
|
3582
|
+
version: "0.1.2",
|
|
3583
3583
|
private: false,
|
|
3584
3584
|
type: "module",
|
|
3585
3585
|
description: "Local-first semantic knowledge graph",
|
|
@@ -3608,7 +3608,8 @@ var package_default = {
|
|
|
3608
3608
|
url: "git+https://github.com/Astralchemist/rig.git"
|
|
3609
3609
|
},
|
|
3610
3610
|
bin: {
|
|
3611
|
-
rig: "./dist/rig.js"
|
|
3611
|
+
rig: "./dist/rig.js",
|
|
3612
|
+
"rig-constellation": "./dist/rig.js"
|
|
3612
3613
|
},
|
|
3613
3614
|
files: [
|
|
3614
3615
|
"dist",
|
|
@@ -7103,7 +7104,7 @@ var runIndex = async (cwd) => {
|
|
|
7103
7104
|
|
|
7104
7105
|
// packages/cli/src/init.ts
|
|
7105
7106
|
import { appendFileSync, existsSync as existsSync7, readFileSync as readFileSync7, writeFileSync as writeFileSync2 } from "node:fs";
|
|
7106
|
-
import { join as join11, resolve as resolve8 } from "node:path";
|
|
7107
|
+
import { basename as basename4, join as join11, resolve as resolve8 } from "node:path";
|
|
7107
7108
|
var ensureGitignored = (root) => {
|
|
7108
7109
|
const path2 = join11(root, ".gitignore");
|
|
7109
7110
|
const entry = ".rig/";
|
|
@@ -7121,12 +7122,33 @@ var ensureGitignored = (root) => {
|
|
|
7121
7122
|
`);
|
|
7122
7123
|
return true;
|
|
7123
7124
|
};
|
|
7124
|
-
var
|
|
7125
|
+
var deriveProjectName = (root) => {
|
|
7126
|
+
const pkgPath = join11(root, "package.json");
|
|
7127
|
+
if (existsSync7(pkgPath)) {
|
|
7128
|
+
try {
|
|
7129
|
+
const name = JSON.parse(readFileSync7(pkgPath, "utf-8")).name;
|
|
7130
|
+
if (typeof name === "string" && name.trim())
|
|
7131
|
+
return name.trim();
|
|
7132
|
+
} catch {}
|
|
7133
|
+
}
|
|
7134
|
+
return basename4(root);
|
|
7135
|
+
};
|
|
7136
|
+
var PORT_BASE = 7474;
|
|
7137
|
+
var PORT_SPAN = 64;
|
|
7138
|
+
var stablePort = (root) => {
|
|
7139
|
+
const abs = resolve8(root);
|
|
7140
|
+
let h = 0;
|
|
7141
|
+
for (let i = 0;i < abs.length; i++)
|
|
7142
|
+
h = h * 31 + abs.charCodeAt(i) >>> 0;
|
|
7143
|
+
return PORT_BASE + h % PORT_SPAN;
|
|
7144
|
+
};
|
|
7145
|
+
var defaultConfig = (root) => ({
|
|
7125
7146
|
version: 1,
|
|
7147
|
+
name: deriveProjectName(root),
|
|
7126
7148
|
host: "127.0.0.1",
|
|
7127
|
-
port:
|
|
7149
|
+
port: stablePort(root),
|
|
7128
7150
|
embedder: { kind: "local", model: "Xenova/bge-small-en-v1.5" }
|
|
7129
|
-
};
|
|
7151
|
+
});
|
|
7130
7152
|
var ensureInit = async (root) => {
|
|
7131
7153
|
const rigDir = join11(root, RIG_DIR_NAME);
|
|
7132
7154
|
if (existsSync7(rigDir)) {
|
|
@@ -7135,7 +7157,7 @@ var ensureInit = async (root) => {
|
|
|
7135
7157
|
const rig = await Rig.init(root);
|
|
7136
7158
|
const cfgPath = join11(rigDir, "config.json");
|
|
7137
7159
|
if (!existsSync7(cfgPath)) {
|
|
7138
|
-
writeFileSync2(cfgPath, JSON.stringify(
|
|
7160
|
+
writeFileSync2(cfgPath, JSON.stringify(defaultConfig(root), null, 2) + `
|
|
7139
7161
|
`);
|
|
7140
7162
|
}
|
|
7141
7163
|
rig.close();
|
|
@@ -7953,6 +7975,102 @@ async function dispatchToolCall(name, args, ctx, handlers) {
|
|
|
7953
7975
|
throw err2;
|
|
7954
7976
|
}
|
|
7955
7977
|
}
|
|
7978
|
+
// package.json
|
|
7979
|
+
var package_default2 = {
|
|
7980
|
+
name: "rig-constellation",
|
|
7981
|
+
version: "0.1.2",
|
|
7982
|
+
private: false,
|
|
7983
|
+
type: "module",
|
|
7984
|
+
description: "Local-first semantic knowledge graph",
|
|
7985
|
+
keywords: [
|
|
7986
|
+
"mcp",
|
|
7987
|
+
"model-context-protocol",
|
|
7988
|
+
"claude-code",
|
|
7989
|
+
"cursor",
|
|
7990
|
+
"code-graph",
|
|
7991
|
+
"knowledge-graph",
|
|
7992
|
+
"code-navigation",
|
|
7993
|
+
"codebase-map",
|
|
7994
|
+
"ast",
|
|
7995
|
+
"tree-sitter",
|
|
7996
|
+
"local-first",
|
|
7997
|
+
"embeddings",
|
|
7998
|
+
"rag",
|
|
7999
|
+
"ai-agents",
|
|
8000
|
+
"developer-tools"
|
|
8001
|
+
],
|
|
8002
|
+
author: "Astralchemist <kingolajohn55@gmail.com>",
|
|
8003
|
+
license: "Apache-2.0",
|
|
8004
|
+
homepage: "https://github.com/Astralchemist/rig",
|
|
8005
|
+
repository: {
|
|
8006
|
+
type: "git",
|
|
8007
|
+
url: "git+https://github.com/Astralchemist/rig.git"
|
|
8008
|
+
},
|
|
8009
|
+
bin: {
|
|
8010
|
+
rig: "./dist/rig.js",
|
|
8011
|
+
"rig-constellation": "./dist/rig.js"
|
|
8012
|
+
},
|
|
8013
|
+
files: [
|
|
8014
|
+
"dist",
|
|
8015
|
+
"generated",
|
|
8016
|
+
"packages/web/dist",
|
|
8017
|
+
"LICENSE",
|
|
8018
|
+
"LICENSE-CODEGRAPH.txt",
|
|
8019
|
+
"NOTICE",
|
|
8020
|
+
"README.md"
|
|
8021
|
+
],
|
|
8022
|
+
engines: {
|
|
8023
|
+
bun: ">=1.1",
|
|
8024
|
+
node: ">=20 <25"
|
|
8025
|
+
},
|
|
8026
|
+
workspaces: [
|
|
8027
|
+
"packages/*"
|
|
8028
|
+
],
|
|
8029
|
+
scripts: {
|
|
8030
|
+
gen: "bun run scripts/gen.ts",
|
|
8031
|
+
"gen:check": "bun run scripts/gen-check.ts",
|
|
8032
|
+
"gen:wasm": "bun run scripts/gen-wasm.ts",
|
|
8033
|
+
"check:compat": "bun run scripts/compat-check.ts",
|
|
8034
|
+
"compat:snapshot": "bun run scripts/compat-check.ts --write",
|
|
8035
|
+
"check:migrations": "bun run scripts/migration-lock.ts",
|
|
8036
|
+
"migration:lock": "bun run scripts/migration-lock.ts --write",
|
|
8037
|
+
test: "bun test",
|
|
8038
|
+
"test:e2e": "playwright test",
|
|
8039
|
+
"install:hooks": "bash scripts/install-hooks.sh",
|
|
8040
|
+
build: "bun run build:web && bun run build:cli",
|
|
8041
|
+
"build:web": "cd packages/web && bunx vite build",
|
|
8042
|
+
"build:cli": "bun run gen:wasm && bun run scripts/build-cli.ts",
|
|
8043
|
+
prepublishOnly: "bun run build && bun test && bun run gen:check && bun run check:compat && bun run check:migrations"
|
|
8044
|
+
},
|
|
8045
|
+
dependencies: {
|
|
8046
|
+
"@fastify/compress": "8.3.1",
|
|
8047
|
+
"@fastify/cors": "11.2.0",
|
|
8048
|
+
"@fastify/static": "9.1.3",
|
|
8049
|
+
"@xenova/transformers": "^2.17",
|
|
8050
|
+
fastify: "5.8.5",
|
|
8051
|
+
ignore: "7.0.5",
|
|
8052
|
+
"jsonc-parser": "3.3.1",
|
|
8053
|
+
"tree-sitter-wasms": "0.1.13",
|
|
8054
|
+
"web-tree-sitter": "^0.25.3",
|
|
8055
|
+
ws: "8.20.1",
|
|
8056
|
+
zod: "^3.23"
|
|
8057
|
+
},
|
|
8058
|
+
optionalDependencies: {
|
|
8059
|
+
"better-sqlite3": "^12"
|
|
8060
|
+
},
|
|
8061
|
+
devDependencies: {
|
|
8062
|
+
"@playwright/test": "1.60.0",
|
|
8063
|
+
"@types/bun": "latest",
|
|
8064
|
+
"@types/node": "^20",
|
|
8065
|
+
prettier: "^3",
|
|
8066
|
+
typescript: "^5.5",
|
|
8067
|
+
zod: "^3.23",
|
|
8068
|
+
"zod-to-json-schema": "^3.23"
|
|
8069
|
+
},
|
|
8070
|
+
comments: {
|
|
8071
|
+
design: "Local-first: bun:sqlite is the primary store, better-sqlite3 an optional Node fallback (the only optionalDependency today). Optional native accelerators (sqlite-vec, fastembed-rs) are planned as optionalDependencies — see backlog F1 — not yet declared."
|
|
8072
|
+
}
|
|
8073
|
+
};
|
|
7956
8074
|
|
|
7957
8075
|
// packages/mcp/src/transport.ts
|
|
7958
8076
|
import * as readline from "readline";
|
|
@@ -8115,7 +8233,7 @@ var buildHandlersMap = (exports) => {
|
|
|
8115
8233
|
var SERVER_INFO = {
|
|
8116
8234
|
protocolVersion: "2024-11-05",
|
|
8117
8235
|
capabilities: { tools: {} },
|
|
8118
|
-
serverInfo: { name: "rig", version:
|
|
8236
|
+
serverInfo: { name: "rig", version: package_default2.version }
|
|
8119
8237
|
};
|
|
8120
8238
|
var isParams = (v) => typeof v === "object" && v !== null;
|
|
8121
8239
|
var handleToolsCall = async (params, ctx, handlers) => {
|
|
@@ -10929,105 +11047,8 @@ async function serveMcp(opts = {}) {
|
|
|
10929
11047
|
import compress from "@fastify/compress";
|
|
10930
11048
|
import cors from "@fastify/cors";
|
|
10931
11049
|
import fastifyStatic from "@fastify/static";
|
|
10932
|
-
|
|
10933
|
-
|
|
10934
|
-
name: "rig-constellation",
|
|
10935
|
-
version: "0.1.1",
|
|
10936
|
-
private: false,
|
|
10937
|
-
type: "module",
|
|
10938
|
-
description: "Local-first semantic knowledge graph",
|
|
10939
|
-
keywords: [
|
|
10940
|
-
"mcp",
|
|
10941
|
-
"model-context-protocol",
|
|
10942
|
-
"claude-code",
|
|
10943
|
-
"cursor",
|
|
10944
|
-
"code-graph",
|
|
10945
|
-
"knowledge-graph",
|
|
10946
|
-
"code-navigation",
|
|
10947
|
-
"codebase-map",
|
|
10948
|
-
"ast",
|
|
10949
|
-
"tree-sitter",
|
|
10950
|
-
"local-first",
|
|
10951
|
-
"embeddings",
|
|
10952
|
-
"rag",
|
|
10953
|
-
"ai-agents",
|
|
10954
|
-
"developer-tools"
|
|
10955
|
-
],
|
|
10956
|
-
author: "Astralchemist <kingolajohn55@gmail.com>",
|
|
10957
|
-
license: "Apache-2.0",
|
|
10958
|
-
homepage: "https://github.com/Astralchemist/rig",
|
|
10959
|
-
repository: {
|
|
10960
|
-
type: "git",
|
|
10961
|
-
url: "git+https://github.com/Astralchemist/rig.git"
|
|
10962
|
-
},
|
|
10963
|
-
bin: {
|
|
10964
|
-
rig: "./dist/rig.js"
|
|
10965
|
-
},
|
|
10966
|
-
files: [
|
|
10967
|
-
"dist",
|
|
10968
|
-
"generated",
|
|
10969
|
-
"packages/web/dist",
|
|
10970
|
-
"LICENSE",
|
|
10971
|
-
"LICENSE-CODEGRAPH.txt",
|
|
10972
|
-
"NOTICE",
|
|
10973
|
-
"README.md"
|
|
10974
|
-
],
|
|
10975
|
-
engines: {
|
|
10976
|
-
bun: ">=1.1",
|
|
10977
|
-
node: ">=20 <25"
|
|
10978
|
-
},
|
|
10979
|
-
workspaces: [
|
|
10980
|
-
"packages/*"
|
|
10981
|
-
],
|
|
10982
|
-
scripts: {
|
|
10983
|
-
gen: "bun run scripts/gen.ts",
|
|
10984
|
-
"gen:check": "bun run scripts/gen-check.ts",
|
|
10985
|
-
"gen:wasm": "bun run scripts/gen-wasm.ts",
|
|
10986
|
-
"check:compat": "bun run scripts/compat-check.ts",
|
|
10987
|
-
"compat:snapshot": "bun run scripts/compat-check.ts --write",
|
|
10988
|
-
"check:migrations": "bun run scripts/migration-lock.ts",
|
|
10989
|
-
"migration:lock": "bun run scripts/migration-lock.ts --write",
|
|
10990
|
-
test: "bun test",
|
|
10991
|
-
"test:e2e": "playwright test",
|
|
10992
|
-
"install:hooks": "bash scripts/install-hooks.sh",
|
|
10993
|
-
build: "bun run build:web && bun run build:cli",
|
|
10994
|
-
"build:web": "cd packages/web && bunx vite build",
|
|
10995
|
-
"build:cli": "bun run gen:wasm && bun run scripts/build-cli.ts",
|
|
10996
|
-
prepublishOnly: "bun run build && bun test && bun run gen:check && bun run check:compat && bun run check:migrations"
|
|
10997
|
-
},
|
|
10998
|
-
dependencies: {
|
|
10999
|
-
"@fastify/compress": "8.3.1",
|
|
11000
|
-
"@fastify/cors": "11.2.0",
|
|
11001
|
-
"@fastify/static": "9.1.3",
|
|
11002
|
-
"@xenova/transformers": "^2.17",
|
|
11003
|
-
fastify: "5.8.5",
|
|
11004
|
-
ignore: "7.0.5",
|
|
11005
|
-
"jsonc-parser": "3.3.1",
|
|
11006
|
-
"tree-sitter-wasms": "0.1.13",
|
|
11007
|
-
"web-tree-sitter": "^0.25.3",
|
|
11008
|
-
ws: "8.20.1",
|
|
11009
|
-
zod: "^3.23"
|
|
11010
|
-
},
|
|
11011
|
-
optionalDependencies: {
|
|
11012
|
-
"better-sqlite3": "^12"
|
|
11013
|
-
},
|
|
11014
|
-
devDependencies: {
|
|
11015
|
-
"@playwright/test": "1.60.0",
|
|
11016
|
-
"@types/bun": "latest",
|
|
11017
|
-
"@types/node": "^20",
|
|
11018
|
-
prettier: "^3",
|
|
11019
|
-
typescript: "^5.5",
|
|
11020
|
-
zod: "^3.23",
|
|
11021
|
-
"zod-to-json-schema": "^3.23"
|
|
11022
|
-
},
|
|
11023
|
-
comments: {
|
|
11024
|
-
design: "Local-first: bun:sqlite is the primary store, better-sqlite3 an optional Node fallback (the only optionalDependency today). Optional native accelerators (sqlite-vec, fastembed-rs) are planned as optionalDependencies — see backlog F1 — not yet declared."
|
|
11025
|
-
}
|
|
11026
|
-
};
|
|
11027
|
-
|
|
11028
|
-
// packages/web/src/server.ts
|
|
11029
|
-
import { existsSync as existsSync18 } from "node:fs";
|
|
11030
|
-
import { dirname as dirname8, join as join19 } from "node:path";
|
|
11050
|
+
import { existsSync as existsSync19 } from "node:fs";
|
|
11051
|
+
import { dirname as dirname8, join as join20 } from "node:path";
|
|
11031
11052
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
11032
11053
|
import Fastify from "fastify";
|
|
11033
11054
|
|
|
@@ -11128,6 +11149,49 @@ var registerConfigRoutes = (app, projectRoot) => {
|
|
|
11128
11149
|
});
|
|
11129
11150
|
};
|
|
11130
11151
|
|
|
11152
|
+
// packages/web/src/listen.ts
|
|
11153
|
+
import { existsSync as existsSync18, readFileSync as readFileSync11 } from "node:fs";
|
|
11154
|
+
import { basename as basename5, join as join18 } from "node:path";
|
|
11155
|
+
var DEFAULT_PORT = 7474;
|
|
11156
|
+
var FALLBACK_SPAN = 64;
|
|
11157
|
+
var readConfig = (projectRoot) => {
|
|
11158
|
+
const file = join18(projectRoot, ".rig", "config.json");
|
|
11159
|
+
if (!existsSync18(file))
|
|
11160
|
+
return {};
|
|
11161
|
+
try {
|
|
11162
|
+
return JSON.parse(readFileSync11(file, "utf-8"));
|
|
11163
|
+
} catch {
|
|
11164
|
+
return {};
|
|
11165
|
+
}
|
|
11166
|
+
};
|
|
11167
|
+
var resolvePort = (projectRoot, explicit) => {
|
|
11168
|
+
if (typeof explicit === "number" && Number.isFinite(explicit))
|
|
11169
|
+
return explicit;
|
|
11170
|
+
const fromCfg = readConfig(projectRoot).port;
|
|
11171
|
+
if (typeof fromCfg === "number" && Number.isFinite(fromCfg))
|
|
11172
|
+
return fromCfg;
|
|
11173
|
+
return DEFAULT_PORT;
|
|
11174
|
+
};
|
|
11175
|
+
var resolveProjectName = (projectRoot) => {
|
|
11176
|
+
const name = readConfig(projectRoot).name;
|
|
11177
|
+
if (typeof name === "string" && name.trim())
|
|
11178
|
+
return name.trim();
|
|
11179
|
+
return basename5(projectRoot);
|
|
11180
|
+
};
|
|
11181
|
+
var isAddrInUse = (err2) => !!err2 && typeof err2 === "object" && err2.code === "EADDRINUSE";
|
|
11182
|
+
var listenWithFallback = async (app, host, port) => {
|
|
11183
|
+
for (let p = port;p <= port + FALLBACK_SPAN; p++) {
|
|
11184
|
+
try {
|
|
11185
|
+
return await app.listen({ host, port: p });
|
|
11186
|
+
} catch (err2) {
|
|
11187
|
+
if (isAddrInUse(err2) && p < port + FALLBACK_SPAN)
|
|
11188
|
+
continue;
|
|
11189
|
+
throw err2;
|
|
11190
|
+
}
|
|
11191
|
+
}
|
|
11192
|
+
throw new Error(`rig serve: no free port in ${port}–${port + FALLBACK_SPAN}`);
|
|
11193
|
+
};
|
|
11194
|
+
|
|
11131
11195
|
// packages/web/src/routes.ts
|
|
11132
11196
|
var intOrUndef = (s) => s === undefined ? undefined : Number.parseInt(s, 10);
|
|
11133
11197
|
var ensureNode = (rig, id) => rig.getNode(id) ? { ok: true } : { ok: false, status: 404, body: { error: `node ${id} not found` } };
|
|
@@ -11198,7 +11262,7 @@ var registerRoutes = (app, rig) => {
|
|
|
11198
11262
|
|
|
11199
11263
|
// packages/web/src/ws.ts
|
|
11200
11264
|
import { watch as watch2 } from "node:fs";
|
|
11201
|
-
import { join as
|
|
11265
|
+
import { join as join19, resolve as resolve11 } from "node:path";
|
|
11202
11266
|
import { WebSocketServer } from "ws";
|
|
11203
11267
|
|
|
11204
11268
|
// packages/web/src/ws-derive.ts
|
|
@@ -11349,7 +11413,7 @@ var attachWs = (httpServer, rig) => {
|
|
|
11349
11413
|
}, DEBOUNCE_MS);
|
|
11350
11414
|
};
|
|
11351
11415
|
try {
|
|
11352
|
-
const w = watch2(
|
|
11416
|
+
const w = watch2(join19(root, RIG_DIR), { persistent: false }, (_evt, filename) => {
|
|
11353
11417
|
if (filename && filename.startsWith("rig.db"))
|
|
11354
11418
|
onDbChange();
|
|
11355
11419
|
});
|
|
@@ -11372,13 +11436,13 @@ var attachWs = (httpServer, rig) => {
|
|
|
11372
11436
|
|
|
11373
11437
|
// packages/web/src/server.ts
|
|
11374
11438
|
var HERE2 = dirname8(fileURLToPath2(import.meta.url));
|
|
11375
|
-
var DIST_DIR =
|
|
11439
|
+
var DIST_DIR = join20(findAssetRoot(HERE2), "packages/web/dist");
|
|
11376
11440
|
var LOOPBACK_HOSTS = new Set(["127.0.0.1", "localhost", "::1"]);
|
|
11377
11441
|
var DEFAULT_HOST = "127.0.0.1";
|
|
11378
|
-
var DEFAULT_PORT = 7474;
|
|
11379
11442
|
async function serveWeb(opts) {
|
|
11380
11443
|
const host = opts.host ?? DEFAULT_HOST;
|
|
11381
|
-
const port = opts.port
|
|
11444
|
+
const port = resolvePort(opts.projectRoot, opts.port);
|
|
11445
|
+
const project = resolveProjectName(opts.projectRoot);
|
|
11382
11446
|
const isLoopback = LOOPBACK_HOSTS.has(host);
|
|
11383
11447
|
const authMode = opts.auth ?? "auto";
|
|
11384
11448
|
const authOn = authMode === true || authMode === "auto" && !isLoopback;
|
|
@@ -11393,17 +11457,17 @@ async function serveWeb(opts) {
|
|
|
11393
11457
|
await app.register(compress, { global: true, encodings: ["gzip", "deflate"], threshold: 1024 });
|
|
11394
11458
|
let token = null;
|
|
11395
11459
|
if (authOn) {
|
|
11396
|
-
token = loadOrCreateToken(
|
|
11460
|
+
token = loadOrCreateToken(join20(opts.projectRoot, ".rig"));
|
|
11397
11461
|
app.addHook("preHandler", requireBearer(token));
|
|
11398
11462
|
registerAuthRoutes(app, { token, cookieMaxAgeSec: 60 * 60 * 24 * 7 });
|
|
11399
11463
|
} else {
|
|
11400
11464
|
app.get("/api/session/me", async () => ({ authed: true, auth_required: false }));
|
|
11401
11465
|
}
|
|
11402
11466
|
const version = package_default2.version;
|
|
11403
|
-
app.get("/health", async () => ({ ok: true, name: "rig-web", version, auth: authOn }));
|
|
11467
|
+
app.get("/health", async () => ({ ok: true, name: "rig-web", project, version, auth: authOn }));
|
|
11404
11468
|
registerRoutes(app, rig);
|
|
11405
11469
|
registerConfigRoutes(app, opts.projectRoot);
|
|
11406
|
-
if (
|
|
11470
|
+
if (existsSync19(DIST_DIR)) {
|
|
11407
11471
|
await app.register(fastifyStatic, { root: DIST_DIR, prefix: "/", wildcard: false });
|
|
11408
11472
|
app.setNotFoundHandler((req, reply) => {
|
|
11409
11473
|
if (req.url.startsWith("/api") || req.url === "/ws") {
|
|
@@ -11416,7 +11480,7 @@ async function serveWeb(opts) {
|
|
|
11416
11480
|
return reply.type("text/html").send(`<!doctype html><meta charset="utf-8"><title>Rig</title><body style="font:14px sans-serif;padding:40px;background:#0b0d12;color:#e5e7eb">` + `<h1>Rig web server is running</h1>` + `<p>UI bundle not built yet. Run <code>cd packages/web && bunx vite build</code> then refresh.</p>` + `<p>API surface available now at <code>/api/status</code>, <code>/api/graph</code>, etc.</p></body>`);
|
|
11417
11481
|
});
|
|
11418
11482
|
}
|
|
11419
|
-
const address = await app
|
|
11483
|
+
const address = await listenWithFallback(app, host, port);
|
|
11420
11484
|
const ws = attachWs(app.server, rig);
|
|
11421
11485
|
return {
|
|
11422
11486
|
app,
|
|
@@ -11493,21 +11557,21 @@ async function runServe(cwd) {
|
|
|
11493
11557
|
}
|
|
11494
11558
|
|
|
11495
11559
|
// packages/cli/src/start.ts
|
|
11496
|
-
import { dirname as dirname9, join as
|
|
11560
|
+
import { dirname as dirname9, join as join22, resolve as resolve13 } from "node:path";
|
|
11497
11561
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
11498
11562
|
|
|
11499
11563
|
// packages/cli/src/init.ts
|
|
11500
|
-
import { appendFileSync as appendFileSync2, existsSync as
|
|
11501
|
-
import { join as
|
|
11564
|
+
import { appendFileSync as appendFileSync2, existsSync as existsSync20, readFileSync as readFileSync12, writeFileSync as writeFileSync5 } from "node:fs";
|
|
11565
|
+
import { basename as basename6, join as join21, resolve as resolve12 } from "node:path";
|
|
11502
11566
|
var ensureGitignored2 = (root) => {
|
|
11503
|
-
const path7 =
|
|
11567
|
+
const path7 = join21(root, ".gitignore");
|
|
11504
11568
|
const entry = ".rig/";
|
|
11505
|
-
if (!
|
|
11569
|
+
if (!existsSync20(path7)) {
|
|
11506
11570
|
writeFileSync5(path7, `${entry}
|
|
11507
11571
|
`);
|
|
11508
11572
|
return true;
|
|
11509
11573
|
}
|
|
11510
|
-
const lines =
|
|
11574
|
+
const lines = readFileSync12(path7, "utf-8").split(/\r?\n/);
|
|
11511
11575
|
if (lines.some((l) => l.trim() === entry || l.trim() === ".rig"))
|
|
11512
11576
|
return false;
|
|
11513
11577
|
const sep = lines.at(-1) === "" ? "" : `
|
|
@@ -11516,21 +11580,42 @@ var ensureGitignored2 = (root) => {
|
|
|
11516
11580
|
`);
|
|
11517
11581
|
return true;
|
|
11518
11582
|
};
|
|
11519
|
-
var
|
|
11583
|
+
var deriveProjectName2 = (root) => {
|
|
11584
|
+
const pkgPath = join21(root, "package.json");
|
|
11585
|
+
if (existsSync20(pkgPath)) {
|
|
11586
|
+
try {
|
|
11587
|
+
const name = JSON.parse(readFileSync12(pkgPath, "utf-8")).name;
|
|
11588
|
+
if (typeof name === "string" && name.trim())
|
|
11589
|
+
return name.trim();
|
|
11590
|
+
} catch {}
|
|
11591
|
+
}
|
|
11592
|
+
return basename6(root);
|
|
11593
|
+
};
|
|
11594
|
+
var PORT_BASE2 = 7474;
|
|
11595
|
+
var PORT_SPAN2 = 64;
|
|
11596
|
+
var stablePort2 = (root) => {
|
|
11597
|
+
const abs = resolve12(root);
|
|
11598
|
+
let h = 0;
|
|
11599
|
+
for (let i = 0;i < abs.length; i++)
|
|
11600
|
+
h = h * 31 + abs.charCodeAt(i) >>> 0;
|
|
11601
|
+
return PORT_BASE2 + h % PORT_SPAN2;
|
|
11602
|
+
};
|
|
11603
|
+
var defaultConfig2 = (root) => ({
|
|
11520
11604
|
version: 1,
|
|
11605
|
+
name: deriveProjectName2(root),
|
|
11521
11606
|
host: "127.0.0.1",
|
|
11522
|
-
port:
|
|
11607
|
+
port: stablePort2(root),
|
|
11523
11608
|
embedder: { kind: "local", model: "Xenova/bge-small-en-v1.5" }
|
|
11524
|
-
};
|
|
11609
|
+
});
|
|
11525
11610
|
var ensureInit2 = async (root) => {
|
|
11526
|
-
const rigDir =
|
|
11527
|
-
if (
|
|
11611
|
+
const rigDir = join21(root, RIG_DIR_NAME);
|
|
11612
|
+
if (existsSync20(rigDir)) {
|
|
11528
11613
|
return { rigDir, created: false, gitignoreUpdated: false };
|
|
11529
11614
|
}
|
|
11530
11615
|
const rig = await Rig.init(root);
|
|
11531
|
-
const cfgPath =
|
|
11532
|
-
if (!
|
|
11533
|
-
writeFileSync5(cfgPath, JSON.stringify(
|
|
11616
|
+
const cfgPath = join21(rigDir, "config.json");
|
|
11617
|
+
if (!existsSync20(cfgPath)) {
|
|
11618
|
+
writeFileSync5(cfgPath, JSON.stringify(defaultConfig2(root), null, 2) + `
|
|
11534
11619
|
`);
|
|
11535
11620
|
}
|
|
11536
11621
|
rig.close();
|
|
@@ -11540,7 +11625,7 @@ var ensureInit2 = async (root) => {
|
|
|
11540
11625
|
|
|
11541
11626
|
// packages/cli/src/open-url.ts
|
|
11542
11627
|
import { spawn } from "node:child_process";
|
|
11543
|
-
import { existsSync as
|
|
11628
|
+
import { existsSync as existsSync21 } from "node:fs";
|
|
11544
11629
|
var openUrl = (url) => {
|
|
11545
11630
|
const launch = (cmd, args) => {
|
|
11546
11631
|
try {
|
|
@@ -11556,7 +11641,7 @@ var openUrl = (url) => {
|
|
|
11556
11641
|
return void launch("open", [url]);
|
|
11557
11642
|
if (process.platform === "win32")
|
|
11558
11643
|
return void launch("cmd", ["/c", "start", "", url]);
|
|
11559
|
-
if (
|
|
11644
|
+
if (existsSync21("/proc/sys/kernel/osrelease") && process.env.WSL_DISTRO_NAME) {
|
|
11560
11645
|
if (launch("wslview", [url]))
|
|
11561
11646
|
return;
|
|
11562
11647
|
return void launch("cmd.exe", ["/c", "start", "", url]);
|
|
@@ -11564,17 +11649,74 @@ var openUrl = (url) => {
|
|
|
11564
11649
|
launch("xdg-open", [url]);
|
|
11565
11650
|
};
|
|
11566
11651
|
|
|
11652
|
+
// packages/cli/src/ui.ts
|
|
11653
|
+
var isTty2 = () => process.stderr.isTTY === true;
|
|
11654
|
+
var plain = () => !isTty2() || process.env.NO_COLOR !== undefined;
|
|
11655
|
+
var wrap = (code) => (s) => plain() ? s : `\x1B[${code}m${s}\x1B[0m`;
|
|
11656
|
+
var dim = wrap("2");
|
|
11657
|
+
var bold = wrap("1");
|
|
11658
|
+
var cyan = wrap("36");
|
|
11659
|
+
var green = wrap("32");
|
|
11660
|
+
var yellow = wrap("33");
|
|
11661
|
+
var red = wrap("31");
|
|
11662
|
+
var sym = { ok: "✓", hub: "⬡", dot: "·", arrow: "→" };
|
|
11663
|
+
var write = (s) => void process.stderr.write(s);
|
|
11664
|
+
var clearLine = () => {
|
|
11665
|
+
if (isTty2())
|
|
11666
|
+
write("\r\x1B[K");
|
|
11667
|
+
};
|
|
11668
|
+
var banner = (project, url) => {
|
|
11669
|
+
write(`
|
|
11670
|
+
`);
|
|
11671
|
+
write(` ${cyan(sym.hub)} ${bold("Rig")} ${dim("— mapping")} ${bold(project)}
|
|
11672
|
+
`);
|
|
11673
|
+
write(` ${dim(url)}
|
|
11674
|
+
|
|
11675
|
+
`);
|
|
11676
|
+
};
|
|
11677
|
+
var line = (symbol, label, detail = "") => {
|
|
11678
|
+
clearLine();
|
|
11679
|
+
write(` ${symbol} ${label}${detail ? " " + dim(detail) : ""}
|
|
11680
|
+
`);
|
|
11681
|
+
};
|
|
11682
|
+
var PHASES = ["extract", "resolve", "embed", "tests-edges", "hubness", "communities"];
|
|
11683
|
+
var BAR_WIDTH = 18;
|
|
11684
|
+
var bar = (current, total) => {
|
|
11685
|
+
const ratio = total > 0 ? Math.min(1, current / total) : 0;
|
|
11686
|
+
const filled = Math.round(ratio * BAR_WIDTH);
|
|
11687
|
+
return `${"█".repeat(filled)}${dim("░".repeat(BAR_WIDTH - filled))}`;
|
|
11688
|
+
};
|
|
11689
|
+
var makeProgress = () => {
|
|
11690
|
+
let lastLog = "";
|
|
11691
|
+
return (p) => {
|
|
11692
|
+
const idx = PHASES.indexOf(p.phase);
|
|
11693
|
+
const step2 = idx >= 0 ? `${idx + 1}/${PHASES.length}` : "·";
|
|
11694
|
+
const count = p.total !== undefined ? `${p.current ?? p.total}/${p.total}` : p.current !== undefined ? String(p.current) : "";
|
|
11695
|
+
if (plain()) {
|
|
11696
|
+
const log = ` indexing ${step2} ${p.phase} ${count}`.trimEnd();
|
|
11697
|
+
if (log !== lastLog) {
|
|
11698
|
+
write(log + `
|
|
11699
|
+
`);
|
|
11700
|
+
lastLog = log;
|
|
11701
|
+
}
|
|
11702
|
+
return;
|
|
11703
|
+
}
|
|
11704
|
+
const meter = p.total !== undefined ? `${bar(p.current ?? p.total, p.total)} ` : "";
|
|
11705
|
+
const tail = p.detail ? dim(" " + p.detail) : "";
|
|
11706
|
+
clearLine();
|
|
11707
|
+
write(` ${cyan(sym.arrow)} ${dim(step2)} ${bold(p.phase.padEnd(12))} ${meter}${dim(count)}${tail}`);
|
|
11708
|
+
};
|
|
11709
|
+
};
|
|
11710
|
+
var endProgress = () => clearLine();
|
|
11711
|
+
|
|
11567
11712
|
// packages/cli/src/start.ts
|
|
11568
11713
|
var HERE3 = dirname9(fileURLToPath3(import.meta.url));
|
|
11569
|
-
var GENERATED_DIR2 =
|
|
11714
|
+
var GENERATED_DIR2 = join22(findAssetRoot(HERE3), "generated/installer");
|
|
11570
11715
|
var flag6 = (n) => process.argv.includes(n);
|
|
11571
11716
|
var opt = (n) => {
|
|
11572
11717
|
const i = process.argv.indexOf(n);
|
|
11573
11718
|
return i >= 0 && i + 1 < process.argv.length ? process.argv[i + 1] : undefined;
|
|
11574
11719
|
};
|
|
11575
|
-
var isTty2 = process.stderr.isTTY === true;
|
|
11576
|
-
var status = (line) => void process.stderr.write(isTty2 ? `\r\x1B[K${line}` : line + `
|
|
11577
|
-
`);
|
|
11578
11720
|
var wireAgents = async (root) => {
|
|
11579
11721
|
const opts = { rigBin: opt("--bin") ?? "rig", cursorPath: root, generatedDir: GENERATED_DIR2, dryRun: false };
|
|
11580
11722
|
const wired = [];
|
|
@@ -11589,13 +11731,8 @@ var wireAgents = async (root) => {
|
|
|
11589
11731
|
};
|
|
11590
11732
|
var runStart = async (cwd) => {
|
|
11591
11733
|
const root = resolve13(cwd);
|
|
11592
|
-
|
|
11593
|
-
⬡ Rig — mapping your codebase…
|
|
11594
|
-
|
|
11595
|
-
`);
|
|
11734
|
+
const project = deriveProjectName2(root);
|
|
11596
11735
|
const init = await ensureInit2(root);
|
|
11597
|
-
process.stderr.write(` ${init.created ? "✓ initialized" : "· already set up"} ${init.rigDir}
|
|
11598
|
-
`);
|
|
11599
11736
|
const portStr = opt("--port");
|
|
11600
11737
|
const host = opt("--host");
|
|
11601
11738
|
const web = await serveWeb({
|
|
@@ -11605,15 +11742,17 @@ var runStart = async (cwd) => {
|
|
|
11605
11742
|
...host ? { host } : {}
|
|
11606
11743
|
});
|
|
11607
11744
|
const mapUrl = web.token ? `${web.url}/auth?t=${web.token}` : web.url;
|
|
11745
|
+
banner(project, mapUrl);
|
|
11746
|
+
line(init.created ? sym.ok : sym.dot, init.created ? "initialized" : "already set up", init.rigDir);
|
|
11608
11747
|
if (!flag6("--no-open"))
|
|
11609
11748
|
openUrl(mapUrl);
|
|
11610
|
-
|
|
11611
|
-
|
|
11749
|
+
line(sym.ok, "map live", web.url);
|
|
11750
|
+
const progress = makeProgress();
|
|
11612
11751
|
const rig = await Rig.open(root);
|
|
11613
11752
|
try {
|
|
11614
11753
|
const r = await rig.indexAll({
|
|
11615
11754
|
onProgress: (p) => {
|
|
11616
|
-
|
|
11755
|
+
progress(p);
|
|
11617
11756
|
web.ws.broadcast({
|
|
11618
11757
|
type: "index:progress",
|
|
11619
11758
|
ts: Date.now(),
|
|
@@ -11621,26 +11760,26 @@ var runStart = async (cwd) => {
|
|
|
11621
11760
|
});
|
|
11622
11761
|
}
|
|
11623
11762
|
});
|
|
11624
|
-
|
|
11625
|
-
process.stderr.write("\r\x1B[K");
|
|
11763
|
+
endProgress();
|
|
11626
11764
|
const skills = rig.seedSkills(tools_manifest_default.tools);
|
|
11627
11765
|
web.ws.broadcast({
|
|
11628
11766
|
type: "index:progress",
|
|
11629
11767
|
ts: Date.now(),
|
|
11630
11768
|
payload: { phase: "done", done: true, nodes: r.nodes, edges: r.edges, files: r.files }
|
|
11631
11769
|
});
|
|
11632
|
-
|
|
11633
|
-
`);
|
|
11770
|
+
line(sym.ok, "indexed", `${r.nodes} nodes · ${r.edges} edges · ${r.files} files · ${skills} skills`);
|
|
11634
11771
|
} finally {
|
|
11635
11772
|
rig.close();
|
|
11636
11773
|
}
|
|
11637
11774
|
if (!flag6("--no-wire")) {
|
|
11638
11775
|
const wired = await wireAgents(root);
|
|
11639
|
-
|
|
11640
|
-
|
|
11776
|
+
if (wired.length)
|
|
11777
|
+
line(sym.ok, "wired", wired.join(", "));
|
|
11778
|
+
else
|
|
11779
|
+
line(sym.dot, "no agents detected", "run `rig install <target>` later");
|
|
11641
11780
|
}
|
|
11642
11781
|
process.stderr.write(`
|
|
11643
|
-
press Ctrl-C to stop the map.
|
|
11782
|
+
${dim("press Ctrl-C to stop the map.")}
|
|
11644
11783
|
`);
|
|
11645
11784
|
const shutdown = async () => {
|
|
11646
11785
|
await web.close();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rig-constellation",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Local-first semantic knowledge graph",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"url": "git+https://github.com/Astralchemist/rig.git"
|
|
30
30
|
},
|
|
31
31
|
"bin": {
|
|
32
|
-
"rig": "./dist/rig.js"
|
|
32
|
+
"rig": "./dist/rig.js",
|
|
33
|
+
"rig-constellation": "./dist/rig.js"
|
|
33
34
|
},
|
|
34
35
|
"files": [
|
|
35
36
|
"dist",
|
|
@@ -51,4 +51,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
51
51
|
}
|
|
52
52
|
`);function Md(e,n){(n==null||n>e.length)&&(n=e.length);for(var r=0,i=Array(n);r<n;r++)i[r]=e[r];return i}function Nd(e){if(Array.isArray(e))return e}function Pd(e){if(Array.isArray(e))return Md(e)}function Fd(e,n,r){if(Id())return Reflect.construct.apply(null,arguments);var i=[null];return i.push.apply(i,n),new(e.bind.apply(e,i))}function Z(e,n,r){return(n=Kd(n))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Id(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(Id=function(){return!!e})()}function Ld(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function Rd(e,n){var r=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(r!=null){var i,a,o,s,c=[],l=!0,u=!1;try{if(o=(r=r.call(e)).next,n!==0)for(;!(l=(i=o.call(r)).done)&&(c.push(i.value),c.length!==n);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(u)throw a}}return c}}function zd(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
53
53
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Bd(){throw TypeError(`Invalid attempt to spread non-iterable instance.
|
|
54
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vd(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,i)}return r}function Hd(e){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?Vd(Object(r),!0).forEach(function(n){Z(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Vd(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Ud(e,n){return Nd(e)||Rd(e,n)||Jd(e,n)||zd()}function Wd(e){return Pd(e)||Ld(e)||Jd(e)||Bd()}function Gd(e,n){if(typeof e!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,n);if(typeof i!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(n===`string`?String:Number)(e)}function Kd(e){var n=Gd(e,`string`);return typeof n==`symbol`?n:n+``}function qd(e){"@babel/helpers - typeof";return qd=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},qd(e)}function Jd(e,n){if(e){if(typeof e==`string`)return Md(e,n);var r={}.toString.call(e).slice(8,-1);return r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`?Array.from(e):r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Md(e,n):void 0}}var Yd=Od(Ad);function Xd(e,n,r){!n||typeof r!=`string`||e.filter(function(e){return!e[r]}).forEach(function(e){e[r]=Yd(n(e))})}function Zd(e,n){var r=e.nodes,i=e.links,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=a.nodeFilter,s=o===void 0?function(){return!0}:o,c=a.onLoopError,l=c===void 0?function(e){throw`Invalid DAG structure! Found cycle in node path: ${e.join(` -> `)}.`}:c,u={};r.forEach(function(e){return u[n(e)]={data:e,out:[],depth:-1,skip:!s(e)}}),i.forEach(function(e){var r=e.source,i=e.target,a=l(r),o=l(i);if(!u.hasOwnProperty(a))throw`Missing source node with id: ${a}`;if(!u.hasOwnProperty(o))throw`Missing target node with id: ${o}`;var s=u[a],c=u[o];s.out.push(c);function l(e){return qd(e)===`object`?n(e):e}});var d=[];return f(Object.values(u)),Object.assign.apply(Object,[{}].concat(Wd(Object.entries(u).filter(function(e){return!Ud(e,2)[1].skip}).map(function(e){var n=Ud(e,2),r=n[0],i=n[1];return Z({},r,i.depth)}))));function f(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=function(){var a=e[o];if(r.indexOf(a)!==-1){var s=[].concat(Wd(r.slice(r.indexOf(a))),[a]).map(function(e){return n(e.data)});return d.some(function(e){return e.length===s.length&&e.every(function(e,n){return e===s[n]})})||(d.push(s),l(s)),1}i>a.depth&&(a.depth=i,f(a.out,[].concat(Wd(r),[a]),i+ +!a.skip))},o=0,s=e.length;o<s;o++)if(a())continue}}var Qd=2,$d=function(e,n){return n.onNeedsRedraw&&n.onNeedsRedraw()},ef=function(e,n){if(!n.isShadow){var r=F(n.linkDirectionalParticles);n.graphData.links.forEach(function(e){var n=Math.round(Math.abs(r(e)));n?e.__photons=Wd(Array(n)).map(function(){return{}}):delete e.__photons})}},tf=Zo({props:{graphData:{default:{nodes:[],links:[]},onChange:function(e,n){n.engineRunning=!1,ef(e,n)}},dagMode:{onChange:function(e,n){!e&&(n.graphData.nodes||[]).forEach(function(e){e.fx=e.fy=void 0})}},dagLevelDistance:{},dagNodeFilter:{default:function(e){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4,triggerUpdate:!1,onChange:$d},nodeId:{default:`id`},nodeVal:{default:`val`,triggerUpdate:!1,onChange:$d},nodeColor:{default:`color`,triggerUpdate:!1,onChange:$d},nodeAutoColorBy:{},nodeCanvasObject:{triggerUpdate:!1,onChange:$d},nodeCanvasObjectMode:{default:function(){return`replace`},triggerUpdate:!1,onChange:$d},nodeVisibility:{default:!0,triggerUpdate:!1,onChange:$d},linkSource:{default:`source`},linkTarget:{default:`target`},linkVisibility:{default:!0,triggerUpdate:!1,onChange:$d},linkColor:{default:`color`,triggerUpdate:!1,onChange:$d},linkAutoColorBy:{},linkLineDash:{triggerUpdate:!1,onChange:$d},linkWidth:{default:1,triggerUpdate:!1,onChange:$d},linkCurvature:{default:0,triggerUpdate:!1,onChange:$d},linkCanvasObject:{triggerUpdate:!1,onChange:$d},linkCanvasObjectMode:{default:function(){return`replace`},triggerUpdate:!1,onChange:$d},linkDirectionalArrowLength:{default:0,triggerUpdate:!1,onChange:$d},linkDirectionalArrowColor:{triggerUpdate:!1,onChange:$d},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1,onChange:$d},linkDirectionalParticles:{default:0,triggerUpdate:!1,onChange:ef},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleOffset:{default:0,triggerUpdate:!1},linkDirectionalParticleWidth:{default:4,triggerUpdate:!1},linkDirectionalParticleColor:{triggerUpdate:!1},linkDirectionalParticleCanvasObject:{triggerUpdate:!1},globalScale:{default:1,triggerUpdate:!1},d3AlphaMin:{default:0,triggerUpdate:!1},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.alphaDecay(e)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.alphaTarget(e)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.velocityDecay(e)}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1},onNeedsRedraw:{triggerUpdate:!1},isShadow:{default:!1,triggerUpdate:!1}},methods:{d3Force:function(e,n,r){return r===void 0?e.forceLayout.force(n):(e.forceLayout.force(n,r),this)},d3ReheatSimulation:function(e){return e.forceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(e){return e.cntTicks=0,e.startTickTime=new Date,e.engineRunning=!0,this},isEngineRunning:function(e){return!!e.engineRunning},tickFrame:function(e){return!e.isShadow&&n(),i(),!e.isShadow&&a(),!e.isShadow&&o(),r(),this;function n(){e.engineRunning&&(++e.cntTicks>e.cooldownTicks||new Date-e.startTickTime>e.cooldownTime||e.d3AlphaMin>0&&e.forceLayout.alpha()<e.d3AlphaMin?(e.engineRunning=!1,e.onEngineStop()):(e.forceLayout.tick(),e.onEngineTick()))}function r(){var n=F(e.nodeVisibility),r=F(e.nodeVal),i=F(e.nodeColor),a=F(e.nodeCanvasObjectMode),o=e.ctx,s=e.isShadow/e.globalScale,c=e.graphData.nodes.filter(n);o.save(),c.forEach(function(n){var c=a(n);if(e.nodeCanvasObject&&(c===`before`||c===`replace`)&&(e.nodeCanvasObject(n,o,e.globalScale),c===`replace`)){o.restore();return}var l=Math.sqrt(Math.max(0,r(n)||1))*e.nodeRelSize+s;o.beginPath(),o.arc(n.x,n.y,l,0,2*Math.PI,!1),o.fillStyle=i(n)||`rgba(31, 120, 180, 0.92)`,o.fill(),e.nodeCanvasObject&&c===`after`&&e.nodeCanvasObject(n,e.ctx,e.globalScale)}),o.restore()}function i(){var n=F(e.linkVisibility),r=F(e.linkColor),i=F(e.linkWidth),a=F(e.linkLineDash),o=F(e.linkCurvature),s=F(e.linkCanvasObjectMode),c=e.ctx,l=e.isShadow*2,u=e.graphData.links.filter(n);u.forEach(_);var d=[],f=[],p=u;if(e.linkCanvasObject){var m=[],h=[];u.forEach(function(e){return({before:d,after:f,replace:m}[s(e)]||h).push(e)}),p=[].concat(Wd(d),f,h),d=d.concat(m)}c.save(),d.forEach(function(n){return e.linkCanvasObject(n,c,e.globalScale)}),c.restore();var g=Td(p,[r,i,a]);c.save(),Object.entries(g).forEach(function(n){var r=Ud(n,2),i=r[0],o=r[1],s=!i||i===`undefined`?`rgba(0,0,0,0.15)`:i;Object.entries(o).forEach(function(n){var r=Ud(n,2),i=r[0],o=r[1],u=(i||1)/e.globalScale+l;Object.entries(o).forEach(function(e){var n=Ud(e,2);n[0];var r=n[1],i=a(r[0]);c.beginPath(),r.forEach(function(e){var n=e.source,r=e.target;if(!(!n||!r||!n.hasOwnProperty(`x`)||!r.hasOwnProperty(`x`))){c.moveTo(n.x,n.y);var i=e.__controlPoints;i?c[i.length===2?`quadraticCurveTo`:`bezierCurveTo`].apply(c,Wd(i).concat([r.x,r.y])):c.lineTo(r.x,r.y)}}),c.strokeStyle=s,c.lineWidth=u,c.setLineDash(i||[]),c.stroke()})})}),c.restore(),c.save(),f.forEach(function(n){return e.linkCanvasObject(n,c,e.globalScale)}),c.restore();function _(e){var n=o(e);if(!n){e.__controlPoints=null;return}var r=e.source,i=e.target;if(!(!r||!i||!r.hasOwnProperty(`x`)||!i.hasOwnProperty(`x`))){var a=Math.sqrt((i.x-r.x)**2+(i.y-r.y)**2);if(a>0){var s=Math.atan2(i.y-r.y,i.x-r.x),c=a*n,l={x:(r.x+i.x)/2+c*Math.cos(s-Math.PI/2),y:(r.y+i.y)/2+c*Math.sin(s-Math.PI/2)};e.__controlPoints=[l.x,l.y]}else{var u=n*70;e.__controlPoints=[i.x,i.y-u,i.x+u,i.y]}}}}function a(){var n=1.6,r=.2,i=F(e.linkDirectionalArrowLength),a=F(e.linkDirectionalArrowRelPos),o=F(e.linkVisibility),s=F(e.linkDirectionalArrowColor||e.linkColor),c=F(e.nodeVal),l=e.ctx;l.save(),e.graphData.links.filter(o).forEach(function(o){var u=i(o);if(!(!u||u<0)){var d=o.source,f=o.target;if(!(!d||!f||!d.hasOwnProperty(`x`)||!f.hasOwnProperty(`x`))){var p=Math.sqrt(Math.max(0,c(d)||1))*e.nodeRelSize,m=Math.sqrt(Math.max(0,c(f)||1))*e.nodeRelSize,h=Math.min(1,Math.max(0,a(o))),g=s(o)||`rgba(0,0,0,0.28)`,_=u/n/2,v=o.__controlPoints&&Fd(dd,[d.x,d.y].concat(Wd(o.__controlPoints),[f.x,f.y])),y=v?function(e){return v.get(e)}:function(e){return{x:d.x+(f.x-d.x)*e||0,y:d.y+(f.y-d.y)*e||0}},b=v?v.length():Math.sqrt((f.x-d.x)**2+(f.y-d.y)**2),x=p+u+(b-p-m-u)*h,S=y(x/b),C=y((x-u)/b),w=y((x-u*(1-r))/b),T=Math.atan2(S.y-C.y,S.x-C.x)-Math.PI/2;l.beginPath(),l.moveTo(S.x,S.y),l.lineTo(C.x+_*Math.cos(T),C.y+_*Math.sin(T)),l.lineTo(w.x,w.y),l.lineTo(C.x-_*Math.cos(T),C.y-_*Math.sin(T)),l.fillStyle=g,l.fill()}}}),l.restore()}function o(){var n=F(e.linkDirectionalParticles),r=F(e.linkDirectionalParticleSpeed),i=F(e.linkDirectionalParticleOffset),a=F(e.linkDirectionalParticleWidth),o=F(e.linkVisibility),s=F(e.linkDirectionalParticleColor||e.linkColor),c=e.ctx;c.save(),e.graphData.links.filter(o).forEach(function(o){var l=n(o);if(!(!o.hasOwnProperty(`__photons`)||!o.__photons.length)){var u=o.source,d=o.target;if(!(!u||!d||!u.hasOwnProperty(`x`)||!d.hasOwnProperty(`x`))){var f=r(o),p=Math.abs(i(o)),m=o.__photons||[],h=Math.max(0,a(o)/2)/Math.sqrt(e.globalScale);c.fillStyle=s(o)||`rgba(0,0,0,0.28)`;var g=o.__controlPoints?Fd(dd,[u.x,u.y].concat(Wd(o.__controlPoints),[d.x,d.y])):null,_=0,v=!1;m.forEach(function(n){var r=!!n.__singleHop;if(n.hasOwnProperty(`__progressRatio`)||(n.__progressRatio=r?+(f<0):(_+p)/l),!r&&_++,n.__progressRatio+=f,n.__progressRatio>=1||n.__progressRatio<0)if(!r)n.__progressRatio%=1,n.__progressRatio<0&&n.__progressRatio++;else{v=!0;return}var i=n.__progressRatio,a=g?g.get(i):{x:u.x+(d.x-u.x)*i||0,y:u.y+(d.y-u.y)*i||0};e.linkDirectionalParticleCanvasObject?e.linkDirectionalParticleCanvasObject(a.x,a.y,o,c,e.globalScale):(c.beginPath(),c.arc(a.x,a.y,h,0,2*Math.PI,!1),c.fill())}),v&&(o.__photons=o.__photons.filter(function(e){return!e.__singleHop||e.__progressRatio<=1&&e.__progressRatio>=0}))}}}),c.restore()}},emitParticle:function(e,n){return n&&(!n.__photons&&(n.__photons=[]),n.__photons.push({__singleHop:!0})),this}},stateInit:function(){return{forceLayout:zu().force(`link`,Du()).force(`charge`,Bu()).force(`center`,hl()).force(`dagRadial`,null).stop(),engineRunning:!1}},init:function(e,n){n.ctx=e},update:function(e,n){e.engineRunning=!1,e.onUpdate(),e.nodeAutoColorBy!==null&&Xd(e.graphData.nodes,F(e.nodeAutoColorBy),e.nodeColor),e.linkAutoColorBy!==null&&Xd(e.graphData.links,F(e.linkAutoColorBy),e.linkColor),e.graphData.links.forEach(function(n){n.source=n[e.linkSource],n.target=n[e.linkTarget]}),e.forceLayout.stop().alpha(1).nodes(e.graphData.nodes);var r=e.forceLayout.force(`link`);r&&r.id(function(n){return n[e.nodeId]}).links(e.graphData.links);var i=e.dagMode&&Zd(e.graphData,function(n){return n[e.nodeId]},{nodeFilter:e.dagNodeFilter,onLoopError:e.onDagError||void 0}),a=Math.max.apply(Math,Wd(Object.values(i||[]))),o=e.dagLevelDistance||e.graphData.nodes.length/(a||1)*Qd*([`radialin`,`radialout`].indexOf(e.dagMode)===-1?1:.7);if([`lr`,`rl`,`td`,`bu`].includes(n.dagMode)){var s=[`lr`,`rl`].includes(n.dagMode)?`fx`:`fy`;e.graphData.nodes.filter(e.dagNodeFilter).forEach(function(e){return delete e[s]})}if([`lr`,`rl`,`td`,`bu`].includes(e.dagMode)){var c=[`rl`,`bu`].includes(e.dagMode),l=function(n){return(i[n[e.nodeId]]-a/2)*o*(c?-1:1)},u=[`lr`,`rl`].includes(e.dagMode)?`fx`:`fy`;e.graphData.nodes.filter(e.dagNodeFilter).forEach(function(e){return e[u]=l(e)})}e.forceLayout.force(`dagRadial`,[`radialin`,`radialout`].indexOf(e.dagMode)===-1?null:Vu(function(n){var r=i[n[e.nodeId]]||-1;return(e.dagMode===`radialin`?a-r:r)*o}).strength(function(n){return+!!e.dagNodeFilter(n)}));for(var d=0;d<e.warmupTicks&&!(e.d3AlphaMin>0&&e.forceLayout.alpha()<e.d3AlphaMin);d++)e.forceLayout.tick();this.resetCountdown(),e.onFinishUpdate()}});function nf(e,n){var r=e instanceof Array?e:[e],i=new n;return i._destructor&&i._destructor(),{linkProp:function(e){return{default:i[e](),onChange:function(n,i){r.forEach(function(r){return i[r][e](n)})},triggerUpdate:!1}},linkMethod:function(e){return function(n){var i=[...arguments].slice(1),a=[];return r.forEach(function(r){var o=n[r],s=o[e].apply(o,i);s!==o&&a.push(s)}),a.length?a[0]:this}}}}var rf=800,af=4,of=5,sf=nf(`forceGraph`,tf),cf=nf([`forceGraph`,`shadowGraph`],tf),lf=Object.assign.apply(Object,Wd(`nodeColor.nodeAutoColorBy.nodeCanvasObject.nodeCanvasObjectMode.linkColor.linkAutoColorBy.linkLineDash.linkWidth.linkCanvasObject.linkCanvasObjectMode.linkDirectionalArrowLength.linkDirectionalArrowColor.linkDirectionalArrowRelPos.linkDirectionalParticles.linkDirectionalParticleSpeed.linkDirectionalParticleOffset.linkDirectionalParticleWidth.linkDirectionalParticleColor.linkDirectionalParticleCanvasObject.dagMode.dagLevelDistance.dagNodeFilter.onDagError.d3AlphaMin.d3AlphaDecay.d3VelocityDecay.warmupTicks.cooldownTicks.cooldownTime.onEngineTick.onEngineStop`.split(`.`).map(function(e){return Z({},e,sf.linkProp(e))})).concat(Wd([`nodeRelSize`,`nodeId`,`nodeVal`,`nodeVisibility`,`linkSource`,`linkTarget`,`linkVisibility`,`linkCurvature`].map(function(e){return Z({},e,cf.linkProp(e))})))),uf=Object.assign.apply(Object,Wd([`d3Force`,`d3ReheatSimulation`,`emitParticle`].map(function(e){return Z({},e,sf.linkMethod(e))})));function df(e){if(e.canvas){var n=e.canvas.width,r=e.canvas.height;n===300&&r===150&&(n=r=0);var i=window.devicePixelRatio;n/=i,r/=i,[e.canvas,e.shadowCanvas].forEach(function(a){a.style.width=`${e.width}px`,a.style.height=`${e.height}px`,a.width=e.width*i,a.height=e.height*i,!n&&!r&&a.getContext(`2d`).scale(i,i)});var a=Fa(e.canvas).k;e.zoom.translateBy(e.zoom.__baseElem,(e.width-n)/2/a,(e.height-r)/2/a),e.needsRedraw=!0}}function ff(e){var n=window.devicePixelRatio;e.setTransform(n,0,0,n,0,0)}function pf(e,n,r){e.save(),ff(e),e.clearRect(0,0,n,r),e.restore()}var mf=Zo({props:Hd({width:{default:window.innerWidth,onChange:function(e,n){return df(n)},triggerUpdate:!1},height:{default:window.innerHeight,onChange:function(e,n){return df(n)},triggerUpdate:!1},graphData:{default:{nodes:[],links:[]},onChange:function(e,n){[e.nodes,e.links].every(function(e){return(e||[]).every(function(e){return!e.hasOwnProperty(`__indexColor`)})})&&n.colorTracker.reset(),[{type:`Node`,objs:e.nodes},{type:`Link`,objs:e.links}].forEach(r),n.forceGraph.graphData(e),n.shadowGraph.graphData(e);function r(e){var r=e.type;e.objs.filter(function(e){if(!e.hasOwnProperty(`__indexColor`))return!0;var r=n.colorTracker.lookup(e.__indexColor);return!r||!r.hasOwnProperty(`d`)||r.d!==e}).forEach(function(e){e.__indexColor=n.colorTracker.register({type:r,d:e})})}},triggerUpdate:!1},backgroundColor:{onChange:function(e,n){n.canvas&&e&&(n.canvas.style.background=e)},triggerUpdate:!1},nodeLabel:{default:`name`,triggerUpdate:!1},nodePointerAreaPaint:{onChange:function(e,n){n.shadowGraph.nodeCanvasObject(e?function(n,r,i){return e(n,n.__indexColor,r,i)}:null),n.flushShadowCanvas&&n.flushShadowCanvas()},triggerUpdate:!1},linkPointerAreaPaint:{onChange:function(e,n){n.shadowGraph.linkCanvasObject(e?function(n,r,i){return e(n,n.__indexColor,r,i)}:null),n.flushShadowCanvas&&n.flushShadowCanvas()},triggerUpdate:!1},linkLabel:{default:`name`,triggerUpdate:!1},linkHoverPrecision:{default:4,triggerUpdate:!1},minZoom:{default:.01,onChange:function(e,n){n.zoom.scaleExtent([e,n.zoom.scaleExtent()[1]])},triggerUpdate:!1},maxZoom:{default:1e3,onChange:function(e,n){n.zoom.scaleExtent([n.zoom.scaleExtent()[0],e])},triggerUpdate:!1},enableNodeDrag:{default:!0,triggerUpdate:!1},enableZoomInteraction:{default:!0,triggerUpdate:!1},enablePanInteraction:{default:!0,triggerUpdate:!1},enableZoomPanInteraction:{default:!0,triggerUpdate:!1},enablePointerInteraction:{default:!0,onChange:function(e,n){n.hoverObj=null},triggerUpdate:!1},autoPauseRedraw:{default:!0,triggerUpdate:!1},onNodeDrag:{default:function(){},triggerUpdate:!1},onNodeDragEnd:{default:function(){},triggerUpdate:!1},onNodeClick:{triggerUpdate:!1},onNodeRightClick:{triggerUpdate:!1},onNodeHover:{triggerUpdate:!1},onLinkClick:{triggerUpdate:!1},onLinkRightClick:{triggerUpdate:!1},onLinkHover:{triggerUpdate:!1},onBackgroundClick:{triggerUpdate:!1},onBackgroundRightClick:{triggerUpdate:!1},showPointerCursor:{default:!0,triggerUpdate:!1},onZoom:{triggerUpdate:!1},onZoomEnd:{triggerUpdate:!1},onRenderFramePre:{triggerUpdate:!1},onRenderFramePost:{triggerUpdate:!1}},lf),aliases:{stopAnimation:`pauseAnimation`},methods:Hd({graph2ScreenCoords:function(e,n,r){var i=Fa(e.canvas);return{x:n*i.k+i.x,y:r*i.k+i.y}},screen2GraphCoords:function(e,n,r){var i=Fa(e.canvas);return{x:(n-i.x)/i.k,y:(r-i.y)/i.k}},centerAt:function(e,n,r,i){if(!e.canvas)return null;if(n!==void 0||r!==void 0){var a=Object.assign({},n===void 0?{}:{x:n},r===void 0?{}:{y:r});return i?e.tweenGroup.add(new Bo(o()).to(a,i).easing(Po.Quadratic.Out).onUpdate(s).onComplete(function(){e.tweenGroup.remove(this)}).start()):s(a),this}return o();function o(){var n=Fa(e.canvas);return{x:(e.width/2-n.x)/n.k,y:(e.height/2-n.y)/n.k}}function s(n){var r=n.x,i=n.y;e.zoom.translateTo(e.zoom.__baseElem,r===void 0?o().x:r,i===void 0?o().y:i),e.needsRedraw=!0}},zoom:function(e,n,r){if(!e.canvas)return null;if(n!==void 0)return r?e.tweenGroup.add(new Bo({k:i()}).to({k:n},r).easing(Po.Quadratic.Out).onUpdate(function(e){var n=e.k;return a(n)}).onComplete(function(){e.tweenGroup.remove(this)}).start()):a(n),this;return i();function i(){return Fa(e.canvas).k}function a(n){e.zoom.scaleTo(e.zoom.__baseElem,n),e.needsRedraw=!0}},zoomToFit:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,i=[...arguments].slice(3),a=this.getGraphBbox.apply(this,i);if(a){var o={x:(a.x[0]+a.x[1])/2,y:(a.y[0]+a.y[1])/2},s=Math.max(1e-12,Math.min(0xe8d4a51000,(e.width-r*2)/(a.x[1]-a.x[0]),(e.height-r*2)/(a.y[1]-a.y[0])));this.centerAt(o.x,o.y,n),this.zoom(s,n)}return this},getGraphBbox:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:function(){return!0},r=F(e.nodeVal),i=function(n){return Math.sqrt(Math.max(0,r(n)||1))*e.nodeRelSize},a=e.graphData.nodes.filter(n).map(function(e){return{x:e.x,y:e.y,r:i(e)}});return a.length?{x:[Za(a,function(e){return e.x-e.r}),Xa(a,function(e){return e.x+e.r})],y:[Za(a,function(e){return e.y-e.r}),Xa(a,function(e){return e.y+e.r})]}:null},pauseAnimation:function(e){return e.animationFrameRequestId&&=(cancelAnimationFrame(e.animationFrameRequestId),null),this},resumeAnimation:function(e){return e.animationFrameRequestId||this._animationCycle(),this},_destructor:function(){this.pauseAnimation(),this.graphData({nodes:[],links:[]})}},uf),stateInit:function(){return{lastSetZoom:1,zoom:Wa(),forceGraph:new tf,shadowGraph:new tf().cooldownTicks(0).nodeColor(`__indexColor`).linkColor(`__indexColor`).isShadow(!0),colorTracker:new sc,tweenGroup:new Io}},init:function(e,n){var r=this;e.innerHTML=``;var i=document.createElement(`div`);i.classList.add(`force-graph-container`),i.style.position=`relative`,e.appendChild(i),n.canvas=document.createElement(`canvas`),n.backgroundColor&&(n.canvas.style.background=n.backgroundColor),i.appendChild(n.canvas),n.shadowCanvas=document.createElement(`canvas`);var a=n.canvas.getContext(`2d`),o=n.shadowCanvas.getContext(`2d`,{willReadFrequently:!0}),s={x:-0xe8d4a51000,y:-0xe8d4a51000},c=function(){var e=null,r=window.devicePixelRatio,i=s.x>0&&s.y>0?o.getImageData(s.x*r,s.y*r,1,1):null;return i&&(e=n.colorTracker.lookup(i.data)),e};mn(n.canvas).call(Fn().subject(function(){if(!n.enableNodeDrag)return null;var e=c();return e&&e.type===`Node`?e.d:null}).on(`start`,function(e){var r=e.subject;r.__initialDragPos={x:r.x,y:r.y,fx:r.fx,fy:r.fy},e.active||(r.fx=r.x,r.fy=r.y),n.canvas.classList.add(`grabbable`)}).on(`drag`,function(e){var r=e.subject,i=r.__initialDragPos,a=e,o=Fa(n.canvas).k,s={x:i.x+(a.x-i.x)/o-r.x,y:i.y+(a.y-i.y)/o-r.y};[`x`,`y`].forEach(function(e){return r[`f${e}`]=r[e]=i[e]+(a[e]-i[e])/o}),!(!r.__dragged&&of>=Math.sqrt(Qa([`x`,`y`].map(function(n){return(e[n]-i[n])**2}))))&&(n.forceGraph.d3AlphaTarget(.3).resetCountdown(),n.isPointerDragging=!0,r.__dragged=!0,n.onNodeDrag(r,s))}).on(`end`,function(e){var r=e.subject,i=r.__initialDragPos,a={x:r.x-i.x,y:r.y-i.y};i.fx===void 0&&(r.fx=void 0),i.fy===void 0&&(r.fy=void 0),delete r.__initialDragPos,n.forceGraph.d3AlphaTarget()&&n.forceGraph.d3AlphaTarget(0).resetCountdown(),n.canvas.classList.remove(`grabbable`),n.isPointerDragging=!1,r.__dragged&&(delete r.__dragged,n.onNodeDragEnd(r,a))})),n.zoom(n.zoom.__baseElem=mn(n.canvas)),n.zoom.__baseElem.on(`dblclick.zoom`,null),n.zoom.filter(function(e){return!e.button&&n.enableZoomPanInteraction&&(e.type!==`wheel`||F(n.enableZoomInteraction)(e))&&(e.type===`wheel`||F(n.enablePanInteraction)(e))}).on(`zoom`,function(e){var i=e.transform;[a,o].forEach(function(e){ff(e),e.translate(i.x,i.y),e.scale(i.k,i.k)}),n.isPointerDragging=!0,n.onZoom&&n.onZoom(Hd(Hd({},i),r.centerAt())),n.needsRedraw=!0}).on(`end`,function(e){n.isPointerDragging=!1,n.onZoomEnd&&n.onZoomEnd(Hd(Hd({},e.transform),r.centerAt()))}),df(n),n.forceGraph.onNeedsRedraw(function(){return n.needsRedraw=!0}).onFinishUpdate(function(){Fa(n.canvas).k===n.lastSetZoom&&n.graphData.nodes.length&&(n.zoom.scaleTo(n.zoom.__baseElem,n.lastSetZoom=af/Math.cbrt(n.graphData.nodes.length)),n.needsRedraw=!0)}),n.tooltip=new ml(i),[`pointermove`,`pointerdown`].forEach(function(e){return i.addEventListener(e,function(r){e===`pointerdown`&&(n.isPointerPressed=!0,n.pointerDownEvent=r),!n.isPointerDragging&&r.type===`pointermove`&&n.onBackgroundClick&&(r.pressure>0||n.isPointerPressed)&&(r.pointerType===`mouse`||r.movementX===void 0||[r.movementX,r.movementY].some(function(e){return Math.abs(e)>1}))&&(n.isPointerDragging=!0);var a=o(i);s.x=r.pageX-a.left,s.y=r.pageY-a.top;function o(e){var n=e.getBoundingClientRect(),r=window.pageXOffset||document.documentElement.scrollLeft,i=window.pageYOffset||document.documentElement.scrollTop;return{top:n.top+i,left:n.left+r}}},{passive:!0})}),i.addEventListener(`pointerup`,function(e){if(n.isPointerPressed){if(n.isPointerPressed=!1,n.isPointerDragging){n.isPointerDragging=!1;return}var r=[e,n.pointerDownEvent];requestAnimationFrame(function(){if(e.button===0)if(n.hoverObj){var i=n[`on${n.hoverObj.type}Click`];i&&i.apply(void 0,[n.hoverObj.d].concat(r))}else n.onBackgroundClick&&n.onBackgroundClick.apply(n,r);if(e.button===2)if(n.hoverObj){var a=n[`on${n.hoverObj.type}RightClick`];a&&a.apply(void 0,[n.hoverObj.d].concat(r))}else n.onBackgroundRightClick&&n.onBackgroundRightClick.apply(n,r)})}},{passive:!0}),i.addEventListener(`contextmenu`,function(e){return!n.onBackgroundRightClick&&!n.onNodeRightClick&&!n.onLinkRightClick?!0:(e.preventDefault(),!1)}),n.forceGraph(a),n.shadowGraph(o);var l=No(function(){pf(o,n.width,n.height),n.shadowGraph.linkWidth(function(e){return F(n.linkWidth)(e)+n.linkHoverPrecision});var e=Fa(n.canvas);n.shadowGraph.globalScale(e.k).tickFrame()},rf);n.flushShadowCanvas=l.flush,(this._animationCycle=function e(){var r=!n.autoPauseRedraw||!!n.needsRedraw||n.forceGraph.isEngineRunning()||n.graphData.links.some(function(e){return e.__photons&&e.__photons.length});if(n.needsRedraw=!1,n.enablePointerInteraction){var i=n.isPointerDragging?null:c();if(i!==n.hoverObj){var o=n.hoverObj,s=o?o.type:null,u=i?i.type:null;if(s&&s!==u){var d=n[`on${s}Hover`];d&&d(null,o.d)}if(u){var f=n[`on${u}Hover`];f&&f(i.d,s===u?o.d:null)}n.tooltip.content(i&&F(n[`${i.type.toLowerCase()}Label`])(i.d)||null),n.canvas.classList[(i&&n[`on${u}Click`]||!i&&n.onBackgroundClick)&&F(n.showPointerCursor)(i?.d)?`add`:`remove`](`clickable`),n.hoverObj=i}r&&l()}if(r){pf(a,n.width,n.height);var p=Fa(n.canvas).k;n.onRenderFramePre&&n.onRenderFramePre(a,p),n.forceGraph.globalScale(p).tickFrame(),n.onRenderFramePost&&n.onRenderFramePost(a,p)}n.tweenGroup.update(),n.animationFrameRequestId=requestAnimationFrame(e)})()},update:function(e){}}),hf=s(((e,n)=>{n.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),gf=s(((e,n)=>{var r=hf();function i(){}function a(){}a.resetWarningCache=i,n.exports=function(){function e(e,n,i,a,o,s){if(s!==r){var c=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name=`Invariant Violation`,c}}e.isRequired=e;function n(){return e}var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:i};return o.PropTypes=o,o}})),Q=l(s(((e,n)=>{n.exports=gf()()}))(),1),_f={width:Q.default.number,height:Q.default.number,graphData:Q.default.shape({nodes:Q.default.arrayOf(Q.default.object).isRequired,links:Q.default.arrayOf(Q.default.object).isRequired}),backgroundColor:Q.default.string,nodeRelSize:Q.default.number,nodeId:Q.default.string,nodeLabel:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeVal:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),nodeVisibility:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),nodeColor:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeAutoColorBy:Q.default.oneOfType([Q.default.string,Q.default.func]),onNodeHover:Q.default.func,onNodeClick:Q.default.func,linkSource:Q.default.string,linkTarget:Q.default.string,linkLabel:Q.default.oneOfType([Q.default.string,Q.default.func]),linkVisibility:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),linkColor:Q.default.oneOfType([Q.default.string,Q.default.func]),linkAutoColorBy:Q.default.oneOfType([Q.default.string,Q.default.func]),linkWidth:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkCurvature:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalArrowLength:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalArrowColor:Q.default.oneOfType([Q.default.string,Q.default.func]),linkDirectionalArrowRelPos:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticles:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleSpeed:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleOffset:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleWidth:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleColor:Q.default.oneOfType([Q.default.string,Q.default.func]),onLinkHover:Q.default.func,onLinkClick:Q.default.func,dagMode:Q.default.oneOf([`td`,`bu`,`lr`,`rl`,`zin`,`zout`,`radialin`,`radialout`]),dagLevelDistance:Q.default.number,dagNodeFilter:Q.default.func,onDagError:Q.default.func,d3AlphaMin:Q.default.number,d3AlphaDecay:Q.default.number,d3VelocityDecay:Q.default.number,warmupTicks:Q.default.number,cooldownTicks:Q.default.number,cooldownTime:Q.default.number,onEngineTick:Q.default.func,onEngineStop:Q.default.func,getGraphBbox:Q.default.func},vf={zoomToFit:Q.default.func,onNodeRightClick:Q.default.func,onNodeDrag:Q.default.func,onNodeDragEnd:Q.default.func,onLinkRightClick:Q.default.func,linkHoverPrecision:Q.default.number,onBackgroundClick:Q.default.func,onBackgroundRightClick:Q.default.func,showPointerCursor:Q.default.oneOfType([Q.default.bool,Q.default.func]),enablePointerInteraction:Q.default.bool,enableNodeDrag:Q.default.bool},yf={showNavInfo:Q.default.bool,nodeOpacity:Q.default.number,nodeResolution:Q.default.number,nodeThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),nodeThreeObjectExtend:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),nodePositionUpdate:Q.default.func,linkOpacity:Q.default.number,linkResolution:Q.default.number,linkCurveRotation:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkMaterial:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),linkThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),linkThreeObjectExtend:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),linkPositionUpdate:Q.default.func,linkDirectionalArrowResolution:Q.default.number,linkDirectionalParticleResolution:Q.default.number,linkDirectionalParticleThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),forceEngine:Q.default.oneOf([`d3`,`ngraph`]),ngraphPhysics:Q.default.object,numDimensions:Q.default.oneOf([1,2,3])},bf=Object.assign({},_f,vf,{linkLineDash:Q.default.oneOfType([Q.default.arrayOf(Q.default.number),Q.default.string,Q.default.func]),nodeCanvasObjectMode:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeCanvasObject:Q.default.func,nodePointerAreaPaint:Q.default.func,linkCanvasObjectMode:Q.default.oneOfType([Q.default.string,Q.default.func]),linkCanvasObject:Q.default.func,linkPointerAreaPaint:Q.default.func,linkDirectionalParticleCanvasObject:Q.default.func,autoPauseRedraw:Q.default.bool,minZoom:Q.default.number,maxZoom:Q.default.number,enableZoomInteraction:Q.default.oneOfType([Q.default.bool,Q.default.func]),enablePanInteraction:Q.default.oneOfType([Q.default.bool,Q.default.func]),onZoom:Q.default.func,onZoomEnd:Q.default.func,onRenderFramePre:Q.default.func,onRenderFramePost:Q.default.func});Object.assign({},_f,vf,yf,{enableNavigationControls:Q.default.bool,controlType:Q.default.oneOf([`trackball`,`orbit`,`fly`]),rendererConfig:Q.default.object,extraRenderers:Q.default.arrayOf(Q.default.shape({render:Q.default.func.isRequired}))}),Object.assign({},_f,yf,{nodeDesc:Q.default.oneOfType([Q.default.string,Q.default.func]),linkDesc:Q.default.oneOfType([Q.default.string,Q.default.func])}),Object.assign({},_f,yf,{markerAttrs:Q.default.object,yOffset:Q.default.number,glScale:Q.default.number});var xf=A(mf,{methodNames:[`emitParticle`,`d3Force`,`d3ReheatSimulation`,`stopAnimation`,`pauseAnimation`,`resumeAnimation`,`centerAt`,`zoom`,`zoomToFit`,`getGraphBbox`,`screen2GraphCoords`,`graph2ScreenCoords`]});xf.displayName=`ForceGraph2D`,xf.propTypes=bf;var Sf={file:`#94a3b8`,module:`#a78bfa`,"markdown-section":`#fcd34d`,class:`#fbbf24`,function:`#34d399`,method:`#60a5fa`,property:`#f472b6`,variable:`#f87171`,constant:`#fb923c`,enum:`#c084fc`,interface:`#22d3ee`,type_alias:`#22d3ee`,cluster:`#ec4899`},Cf=[`#60a5fa`,`#34d399`,`#fbbf24`,`#f472b6`,`#a78bfa`,`#fb923c`,`#22d3ee`,`#c084fc`,`#ec4899`,`#facc15`,`#4ade80`,`#f87171`,`#818cf8`,`#fcd34d`,`#2dd4bf`,`#e879f9`],wf=[{id:`observatory`,name:`Observatory`,scheme:`dark`,tokens:{bg:`#0a0c10`,surface:`#12151c`,surface2:`#171b24`,border:`#232834`,text:`#e6e9ef`,muted:`#7d8694`,accent:`#38e1c6`,accentText:`#04110e`,hub:`#f5b544`,structural:`#2c3340`,semantic:`#38e1c6`,pending:`#f5b544`,pulse:`#f472b6`,danger:`#f87171`,success:`#34d399`},nodeKinds:Sf,community:Cf},{id:`warm`,name:`Warm instrument`,scheme:`dark`,tokens:{bg:`#0d0b09`,surface:`#17130f`,surface2:`#1d1813`,border:`#2b2620`,text:`#ece6dd`,muted:`#8a8175`,accent:`#f5a623`,accentText:`#1a1206`,hub:`#ffd27d`,structural:`#3a332a`,semantic:`#5ec8c0`,pending:`#f5a623`,pulse:`#ff9e7d`,danger:`#f08a6c`,success:`#7fce8c`},nodeKinds:Sf,community:Cf},{id:`nebula`,name:`Indigo nebula`,scheme:`dark`,tokens:{bg:`#0b0a14`,surface:`#15131f`,surface2:`#1b1828`,border:`#272336`,text:`#e8e6f0`,muted:`#837e98`,accent:`#b16cff`,accentText:`#120a1f`,hub:`#fbbf24`,structural:`#322c47`,semantic:`#7c6cff`,pending:`#fbbf24`,pulse:`#f472b6`,danger:`#f87171`,success:`#4ade80`},nodeKinds:Sf,community:Cf},{id:`light`,name:`Daylight`,scheme:`light`,tokens:{bg:`#eef1f5`,surface:`#ffffff`,surface2:`#ffffff`,border:`#d4dae2`,text:`#1b2430`,muted:`#5f6b7a`,accent:`#0ea5a0`,accentText:`#ffffff`,hub:`#b45309`,structural:`#b8c1cd`,semantic:`#0ea5a0`,pending:`#b45309`,pulse:`#db2777`,danger:`#dc2626`,success:`#059669`},nodeKinds:{...Sf,"markdown-section":`#d97706`,class:`#d97706`},community:Cf}],Tf=`observatory`,Ef=e=>wf.find(n=>n.id===e)??wf[0],Df=s((e=>{var n=Symbol.for(`react.transitional.element`),r=Symbol.for(`react.fragment`);function i(e,r,i){var a=null;if(i!==void 0&&(a=``+i),r.key!==void 0&&(a=``+r.key),`key`in r)for(var o in i={},r)o!==`key`&&(i[o]=r[o]);else i=r;return r=i.ref,{$$typeof:n,type:e,key:a,ref:r===void 0?null:r,props:i}}e.Fragment=r,e.jsx=i,e.jsxs=i})),$=s(((e,n)=>{n.exports=Df()}))(),Of=(0,v.createContext)(null),kf=e=>{let n=document.documentElement;for(let[r,i]of Object.entries(e.tokens))n.style.setProperty(`--${Af(r)}`,i);n.style.setProperty(`color-scheme`,e.scheme)},Af=e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`);function jf({children:e}){let[n,r]=(0,v.useState)(Tf),[i,a]=(0,v.useState)(!1),o=Ef(n);return(0,v.useEffect)(()=>{let e=!1;return fetch(`/api/config`).then(e=>e.ok?e.json():null).then(n=>{!e&&n?.theme&&wf.some(e=>e.id===n.theme)&&r(n.theme)}).catch(()=>{}).finally(()=>!e&&a(!0)),()=>{e=!0}},[]),(0,v.useEffect)(()=>kf(o),[o]),(0,$.jsx)(Of.Provider,{value:{theme:o,themeId:n,setThemeId:e=>{r(e),fetch(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({theme:e})})},themes:wf},children:e})}function Mf(){let e=(0,v.useContext)(Of);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}var Nf=(e,n)=>{let r=e.replace(`#`,``);return`rgba(${parseInt(r.slice(0,2),16)}, ${parseInt(r.slice(2,4),16)}, ${parseInt(r.slice(4,6),16)}, ${n})`},Pf=e=>4+Math.max(0,Math.min(1,e.pull_score))*14+(e.is_hub?6+(e.hubness??0)*8:0);function Ff({snapshot:e,onSelect:n,onAccept:r,onReject:i,focusToken:a,selectedId:o,pulses:s}){let{theme:c}=Mf(),l=e=>c.nodeKinds[e]??c.tokens.muted,u=e=>e===void 0?c.tokens.muted:c.community[e%c.community.length],d=(0,v.useMemo)(()=>Array.from(new Set(e.nodes.map(e=>e.type))).sort((e,n)=>e.localeCompare(n)),[e.nodes]),[f,p]=(0,v.useState)(new Set),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(`kind`),y=(0,v.useMemo)(()=>{let n=e.nodes.filter(e=>m&&!e.is_hub?!1:!f.has(e.type)),r=new Set(n.map(e=>e.id)),i=n.map(e=>({...e})),a=e=>r.has(e.src)&&r.has(e.dst);return{nodes:i,links:[...e.edges_structural.filter(a).map(e=>({source:e.src,target:e.dst,table:`structural`})),...e.edges_semantic.filter(a).map(e=>({source:e.src,target:e.dst,table:`semantic`,weight:e.weight})),...e.pending_edges.filter(e=>r.has(e.src)&&r.has(e.dst)).map(e=>({source:e.src,target:e.dst,table:`pending`,pending:e}))]}},[e,f,m]),b=(0,v.useRef)(),[x,S]=(0,v.useState)({w:800,h:600}),[C,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=()=>S({w:window.innerWidth,h:window.innerHeight});return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,v.useEffect)(()=>{if(!a)return;let e=y.nodes.find(e=>e.id===a.id);!e||e.x===void 0||e.y===void 0||(b.current?.centerAt(e.x,e.y,600),b.current?.zoom(4,600))},[a,y.nodes]),(0,v.useEffect)(()=>{!s||s.size===0||b.current?.d3ReheatSimulation()},[s]),(0,v.useEffect)(()=>{b.current?.d3ReheatSimulation()},[c]);let ee=e=>{p(n=>{let r=new Set(n);return r.has(e)?r.delete(e):r.add(e),r})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{style:{position:`absolute`,top:52,left:12,zIndex:10,display:`flex`,flexWrap:`wrap`,gap:6,maxWidth:`calc(100vw - 24px)`},children:[(0,$.jsx)(`button`,{onClick:()=>h(e=>!e),title:`Show only hub nodes`,style:{padding:`4px 10px`,fontSize:11,border:`1px solid ${m?c.tokens.hub:`var(--border)`}`,borderRadius:999,background:m?c.tokens.hub:`var(--surface)`,color:m?c.tokens.bg:c.tokens.hub,cursor:`pointer`},children:m?`◉ hubs only`:`○ hubs only`}),(0,$.jsxs)(`button`,{onClick:()=>_(e=>e===`kind`?`community`:`kind`),title:`Toggle node coloring between anchor kind and community`,style:{padding:`4px 10px`,fontSize:11,border:`1px solid var(--border)`,borderRadius:999,background:`var(--surface)`,color:g===`community`?`var(--accent)`:`var(--muted)`,cursor:`pointer`},children:[`color: `,g]}),d.map(e=>{let n=f.has(e);return(0,$.jsx)(`button`,{onClick:()=>ee(e),style:{padding:`4px 10px`,fontSize:11,border:`1px solid ${n?`var(--border)`:l(e)}`,borderRadius:999,background:n?`var(--surface)`:Nf(l(e),.13),color:n?`var(--muted)`:l(e),cursor:`pointer`,opacity:n?.5:1},children:e},e)})]}),(0,$.jsx)(xf,{ref:b,width:x.w,height:x.h,graphData:y,backgroundColor:c.tokens.bg,nodeId:`id`,linkColor:e=>{let n=e.table;return n===`pending`?c.tokens.pending:n===`semantic`?Nf(c.tokens.semantic,.33):c.tokens.structural},linkWidth:e=>e.table===`pending`?2:e.table===`semantic`?1.5:.8,linkLineDash:e=>e.table===`pending`?[4,4]:null,nodeLabel:e=>`${e.type}: ${e.name}`,nodeCanvasObject:(e,n,r)=>{let i=e,a=Pf(i),d=i.x??0,f=i.y??0;if(i.is_hub){let e=a+3+(i.hubness??0)*4;n.beginPath(),n.arc(d,f,e,0,2*Math.PI),n.strokeStyle=Nf(c.tokens.hub,.55),n.lineWidth=1.5,n.stroke()}let p=1500,m=s?.get(i.id);if(m!==void 0){let e=Date.now()-m;if(e<p){let r=1-e/p,i=a+6+(1-r)*18;n.beginPath(),n.arc(d,f,i,0,2*Math.PI),n.strokeStyle=Nf(c.tokens.pulse,Number(r.toFixed(2))),n.lineWidth=2,n.stroke()}}n.beginPath(),n.arc(d,f,a,0,2*Math.PI),n.fillStyle=g===`community`?u(i.community_id):l(i.type),n.fill(),o===i.id&&(n.beginPath(),n.arc(d,f,a+4,0,2*Math.PI),n.strokeStyle=c.tokens.accent,n.lineWidth=2,n.stroke()),(r>1.2||i.is_hub)&&(n.fillStyle=i.is_hub?c.tokens.hub:c.tokens.text,n.font=`${(i.is_hub?11:10)/r}px ui-sans-serif`,n.fillText(i.name,d+a+2,f+3))},onNodeClick:(e,r)=>{let i=r;n(e.id,i?{x:i.clientX,y:i.clientY}:void 0)},onLinkHover:e=>{w(e?.pending??null)},onLinkClick:(e,n)=>{E({x:n.clientX,y:n.clientY})}}),C&&T&&(0,$.jsxs)(`div`,{style:{position:`fixed`,left:T.x+12,top:T.y+12,background:`var(--surface2)`,border:`1px solid ${c.tokens.pending}`,borderRadius:10,padding:12,maxWidth:320,zIndex:20,fontSize:12,color:`var(--text)`,boxShadow:`0 12px 32px rgba(0,0,0,0.45)`},children:[(0,$.jsx)(`div`,{style:{color:`var(--pending)`,marginBottom:6,fontWeight:600},children:`pending edge`}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginBottom:6},children:[C.provenance,` · `,C.kind,` · weight `,C.weight.toFixed(2)]}),(0,$.jsx)(`div`,{style:{marginBottom:8},children:C.rationale}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,$.jsx)(`button`,{onClick:()=>{r(C.id),w(null),E(null)},style:{background:`var(--success)`,color:`var(--bg)`,border:`none`,borderRadius:6,padding:`5px 12px`,cursor:`pointer`,fontSize:11,fontWeight:600},children:`accept`}),(0,$.jsx)(`button`,{onClick:()=>{i(C.id),w(null),E(null)},style:{background:`var(--surface)`,color:`var(--text)`,border:`1px solid var(--border)`,borderRadius:6,padding:`5px 12px`,cursor:`pointer`,fontSize:11},children:`reject`})]})]})]})}var If=e=>e.toFixed(2);function Lf({id:e,onClose:n,onJump:r}){let[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)([]),[c,l]=(0,v.useState)(null);(0,v.useEffect)(()=>{a(null),s([]),l(null),Promise.all([fetch(`/api/node/${encodeURIComponent(e)}`).then(e=>e.json()),fetch(`/api/node/${encodeURIComponent(e)}/pull?k=6`).then(e=>e.json())]).then(([e,n])=>{a(e),s(n)}).catch(e=>l(e instanceof Error?e.message:String(e)))},[e]);let u=i?.data&&typeof i.data.filePath==`string`?i.data.filePath:null,d=i?.data&&typeof i.data.signature==`string`?i.data.signature:null;return(0,$.jsxs)(`aside`,{style:{position:`absolute`,top:52,right:0,bottom:0,width:360,background:`color-mix(in srgb, var(--bg) 94%, transparent)`,backdropFilter:`blur(8px)`,borderLeft:`1px solid var(--border)`,padding:20,overflowY:`auto`,zIndex:9},children:[(0,$.jsxs)(`header`,{style:{display:`flex`,justifyContent:`space-between`,alignItems:`baseline`},children:[(0,$.jsx)(`h2`,{style:{margin:0,fontSize:16},children:i?.name??`…`}),(0,$.jsx)(`button`,{onClick:n,style:{background:`transparent`,border:`none`,color:`var(--muted)`,cursor:`pointer`,fontSize:18},children:`×`})]}),c&&(0,$.jsx)(`p`,{style:{color:`var(--danger)`},children:c}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,fontSize:12,marginBottom:12},children:[(0,$.jsx)(`code`,{style:{color:`var(--accent)`},children:i.type}),u&&(0,$.jsxs)($.Fragment,{children:[` · `,(0,$.jsx)(`span`,{children:u})]})]}),d&&(0,$.jsx)(`pre`,{style:{background:`var(--surface)`,padding:8,borderRadius:4,fontSize:12,whiteSpace:`pre-wrap`,margin:`8px 0`},children:d}),(0,$.jsxs)(`section`,{style:{marginTop:16},children:[(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--muted)`,textTransform:`uppercase`,letterSpacing:.5},children:`Neighbors`}),(0,$.jsxs)(`ul`,{style:{listStyle:`none`,padding:0,margin:0},children:[Object.entries(i.neighbor_counts).map(([e,n])=>(0,$.jsxs)(`li`,{style:{display:`flex`,justifyContent:`space-between`,padding:`2px 0`},children:[(0,$.jsx)(`span`,{children:e}),(0,$.jsx)(`span`,{style:{color:`var(--muted)`},children:n})]},e)),Object.keys(i.neighbor_counts).length===0&&(0,$.jsx)(`li`,{style:{color:`var(--muted)`},children:`(none)`})]})]}),(0,$.jsxs)(`section`,{style:{marginTop:16},children:[(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--muted)`,textTransform:`uppercase`,letterSpacing:.5},children:`Magnetic pull`}),(0,$.jsxs)(`ul`,{style:{listStyle:`none`,padding:0,margin:0},children:[o.map(e=>(0,$.jsxs)(`li`,{onClick:()=>r(e.nodeId),style:{padding:`4px 0`,cursor:`pointer`,fontSize:12},children:[(0,$.jsxs)(`div`,{style:{color:`var(--accent)`},children:[e.nodeId.slice(0,28),`…`]}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`},children:[`score `,If(e.score),` · s `,If(e.components.structural),` · e`,` `,If(e.components.semantic),` · r `,If(e.components.recency)]})]},e.nodeId)),o.length===0&&(0,$.jsx)(`li`,{style:{color:`var(--muted)`},children:`(none)`})]})]})]})]})}function Rf({nodeId:e,x:n,y:r,onClose:i,onJump:a,onOpenDetail:o}){let[s,c]=(0,v.useState)(null),[l,u]=(0,v.useState)([]);if((0,v.useEffect)(()=>{let n=!1;return(async()=>{try{let[r,i]=await Promise.all([fetch(`/api/node/${encodeURIComponent(e)}`),fetch(`/api/node/${encodeURIComponent(e)}/pull?k=6`)]);if(!r.ok||!i.ok)return;let a=await r.json(),o=await i.json();if(n)return;c(a);let s=await Promise.all(o.map(async e=>{let n=await fetch(`/api/node/${encodeURIComponent(e.nodeId)}`);if(!n.ok)return null;let r=await n.json();return{entry:e,name:r.name,kind:r.type}}));n||u(s.filter(e=>e!==null))}catch{}})(),()=>{n=!0}},[e]),(0,v.useEffect)(()=>{let e=e=>{e.key===`Escape`&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),!s)return null;let d=Math.min(Math.max(n+16,8),window.innerWidth-320-8),f=Math.min(Math.max(r+16,8),window.innerHeight-280-8),p=Object.values(s.neighbor_counts).reduce((e,n)=>e+n,0);return(0,$.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:{position:`fixed`,left:d,top:f,width:320,zIndex:25,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:8,boxShadow:`0 10px 30px rgba(0,0,0,0.5)`,color:`var(--text)`,fontSize:12},children:[(0,$.jsxs)(`div`,{style:{padding:12,borderBottom:`1px solid var(--border)`},children:[(0,$.jsx)(`div`,{style:{fontWeight:600,fontSize:13},children:s.name}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginTop:2},children:[(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:s.type}),s.data?.filePath&&(0,$.jsxs)($.Fragment,{children:[` · `,s.data.filePath]})]}),s.data?.signature&&(0,$.jsx)(`div`,{style:{color:`var(--muted)`,fontFamily:`ui-monospace, monospace`,fontSize:11,marginTop:4,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:s.data.signature}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginTop:4,fontSize:11},children:[p,` neighbor`,p===1?``:`s`,s.neighbor_counts.contains?` · ${s.neighbor_counts.contains} contains`:``,s.neighbor_counts.references?` · ${s.neighbor_counts.references} refs`:``]})]}),(0,$.jsxs)(`div`,{style:{padding:`8px 12px`},children:[(0,$.jsx)(`div`,{style:{color:`var(--muted)`,fontSize:10,marginBottom:4,textTransform:`uppercase`},children:`magnetic pull`}),l.length===0&&(0,$.jsx)(`div`,{style:{color:`var(--muted)`},children:`no nearby anchors`}),l.map(e=>(0,$.jsxs)(`div`,{onClick:()=>a(e.entry.nodeId),style:{display:`flex`,gap:8,alignItems:`baseline`,padding:`3px 0`,cursor:`pointer`},title:`s=${e.entry.components.structural.toFixed(2)} m=${e.entry.components.semantic.toFixed(2)} r=${e.entry.components.recency.toFixed(2)}`,children:[(0,$.jsx)(`span`,{style:{color:`var(--hub)`,minWidth:36,fontSize:11},children:e.entry.score.toFixed(2)}),(0,$.jsx)(`span`,{style:{flex:1,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.name}),(0,$.jsx)(`span`,{style:{color:`var(--muted)`,fontSize:10},children:e.kind})]},e.entry.nodeId))]}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:8,padding:8,borderTop:`1px solid var(--border)`,justifyContent:`space-between`},children:[(0,$.jsx)(`button`,{onClick:o,style:{background:`var(--surface)`,color:`var(--text)`,border:`none`,borderRadius:4,padding:`4px 10px`,cursor:`pointer`,fontSize:11},children:`open details`}),(0,$.jsx)(`button`,{onClick:i,style:{background:`transparent`,color:`var(--muted)`,border:`none`,cursor:`pointer`,fontSize:11},children:`esc`})]})]})}function zf({onPick:e}){let[n,r]=(0,v.useState)(!1),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)([]),[c,l]=(0,v.useState)(0),u=(0,v.useRef)(null);if((0,v.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`?(e.preventDefault(),r(e=>!e)):e.key===`Escape`&&r(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,v.useEffect)(()=>{n?setTimeout(()=>u.current?.focus(),0):(a(``),s([]),l(0))},[n]),(0,v.useEffect)(()=>{if(!n||!i.trim()){s([]);return}let e=!1,r=setTimeout(async()=>{try{let n=await(await fetch(`/api/search?q=${encodeURIComponent(i)}&limit=12`)).json();e||(s(n),l(0))}catch{e||s([])}},80);return()=>{e=!0,clearTimeout(r)}},[i,n]),!n)return null;let d=n=>{n&&(e(n.id),r(!1))};return(0,$.jsx)(`div`,{onClick:()=>r(!1),style:{position:`fixed`,inset:0,background:`rgba(0,0,0,0.4)`,zIndex:30,display:`flex`,alignItems:`flex-start`,justifyContent:`center`,paddingTop:`15vh`},children:(0,$.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:{width:560,maxWidth:`90vw`,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:8,boxShadow:`0 20px 60px rgba(0,0,0,0.5)`,overflow:`hidden`},children:[(0,$.jsx)(`input`,{ref:u,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(o.length-1,e+1))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(0,e-1))):e.key===`Enter`&&(e.preventDefault(),d(o[c]))},placeholder:`Search anchors (name, qualified name, alias)…`,style:{width:`100%`,padding:`14px 18px`,background:`transparent`,border:`none`,borderBottom:`1px solid var(--border)`,color:`var(--text)`,fontSize:15,outline:`none`}}),(0,$.jsxs)(`div`,{style:{maxHeight:`40vh`,overflowY:`auto`},children:[o.length===0&&i.trim()&&(0,$.jsx)(`div`,{style:{padding:16,color:`var(--muted)`,fontSize:12},children:`no matches`}),o.map((e,n)=>(0,$.jsxs)(`div`,{onClick:()=>d(e),onMouseEnter:()=>l(n),style:{padding:`8px 18px`,background:n===c?`var(--surface)`:`transparent`,cursor:`pointer`,fontSize:13,color:`var(--text)`,display:`flex`,gap:10,alignItems:`baseline`},children:[(0,$.jsx)(`span`,{style:{color:`var(--accent)`,minWidth:80,fontSize:11},children:e.type}),(0,$.jsx)(`span`,{style:{flex:1},children:e.name}),e.data?.filePath&&(0,$.jsx)(`span`,{style:{color:`var(--muted)`,fontSize:11},children:e.data.filePath})]},e.id))]}),(0,$.jsx)(`div`,{style:{padding:`6px 18px`,borderTop:`1px solid var(--border)`,color:`var(--muted)`,fontSize:11},children:`↑↓ navigate · ⏎ select · esc close · ⌘K toggle`})]})})}function Bf(){let{theme:e,themeId:n,setThemeId:r,themes:i}=Mf(),[a,o]=(0,v.useState)(!1),s=(0,v.useRef)(null);return(0,v.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)},n=e=>e.key===`Escape`&&o(!1);return window.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,n)}},[a]),(0,$.jsxs)(`div`,{ref:s,style:{position:`relative`},children:[(0,$.jsx)(`button`,{onClick:()=>o(e=>!e),title:`Theme`,"aria-label":`Theme settings`,style:{background:a?`var(--surface2)`:`transparent`,color:`var(--muted)`,border:`1px solid var(--border)`,borderRadius:8,width:28,height:28,display:`grid`,placeItems:`center`,cursor:`pointer`,fontSize:14,lineHeight:1},children:`⚙`}),a&&(0,$.jsxs)(`div`,{style:{position:`absolute`,top:36,right:0,width:200,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:10,boxShadow:`0 12px 32px rgba(0,0,0,0.45)`,padding:6,zIndex:40},children:[(0,$.jsx)(`div`,{style:{fontSize:10,textTransform:`uppercase`,letterSpacing:.6,color:`var(--muted)`,padding:`4px 8px`},children:`Theme`}),i.map(e=>{let i=e.id===n;return(0,$.jsxs)(`button`,{onClick:()=>r(e.id),style:{display:`flex`,alignItems:`center`,gap:10,width:`100%`,background:i?`var(--surface)`:`transparent`,border:`none`,borderRadius:6,padding:`7px 8px`,cursor:`pointer`,color:`var(--text)`,fontSize:13,textAlign:`left`},children:[(0,$.jsx)(`span`,{"aria-hidden":!0,style:{width:12,height:12,borderRadius:`50%`,flexShrink:0,background:e.tokens.accent,border:`2px solid ${e.tokens.bg}`,boxShadow:`0 0 0 1px ${e.tokens.border}`}}),(0,$.jsx)(`span`,{style:{flex:1},children:e.name}),i&&(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:`✓`})]},e.id)})]})]})}function Vf(){let[e,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(null),[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(()=>new Map),[h,g]=(0,v.useState)(null),_=async()=>{try{let[e,r]=await Promise.all([fetch(`/api/status`).then(e=>e.json()),fetch(`/api/graph?limit=2000`).then(e=>e.json())]);n(e),i(r),g(null)}catch(e){g(e instanceof Error?e.message:String(e))}};return(0,v.useEffect)(()=>{_();let e=new WebSocket(`ws://${location.host}/ws`);return e.addEventListener(`message`,e=>{let n=JSON.parse(e.data);if(n.type===`db:changed`&&_(),n.type===`activation:fired`&&n.payload?.ids){let e=Date.now();m(r=>{let i=new Map(r);for(let r of n.payload.ids)i.set(r,e);return i}),setTimeout(()=>{m(e=>{let n=new Map,r=Date.now()-1500;for(let[i,a]of e)a>r&&n.set(i,a);return n})},1600)}}),()=>e.close()},[]),(0,v.useEffect)(()=>{let e=()=>{let e=location.hash.replace(/^#/,``);e&&(o(e),c({id:e,ts:Date.now()}))};return e(),window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,v.useEffect)(()=>{let e=a?`#${a}`:``;location.hash!==e&&history.replaceState(null,``,`${location.pathname}${location.search}${e}`)},[a]),(0,v.useEffect)(()=>{fetch(`/api/selection`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({node_id:a})})},[a]),(0,$.jsxs)(`div`,{style:{position:`fixed`,inset:0},children:[(0,$.jsxs)(`header`,{style:{position:`absolute`,top:0,left:0,right:0,height:44,padding:`0 16px`,background:`color-mix(in srgb, var(--bg) 82%, transparent)`,backdropFilter:`blur(8px)`,borderBottom:`1px solid var(--border)`,zIndex:10,display:`flex`,gap:14,alignItems:`center`},children:[(0,$.jsxs)(`span`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,$.jsx)(`span`,{"aria-hidden":!0,style:{width:9,height:9,borderRadius:`50%`,background:`var(--accent)`,boxShadow:`0 0 8px var(--accent)`}}),(0,$.jsx)(`strong`,{style:{color:`var(--text)`,letterSpacing:.2},children:`Rig`})]}),e&&(0,$.jsxs)(`span`,{style:{color:`var(--muted)`,fontSize:12},children:[e.nodes.toLocaleString(),` nodes ·`,` `,(e.edges_structural+e.edges_semantic).toLocaleString(),` edges ·`,` `,e.files.toLocaleString(),` files`]}),a&&(0,$.jsx)(`span`,{style:{color:`var(--accent)`,fontSize:11,fontFamily:`ui-monospace, monospace`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:a}),r&&r.pending_edges.length>0&&(0,$.jsxs)(`span`,{style:{color:`var(--pending)`,fontSize:11,border:`1px solid var(--pending)`,borderRadius:999,padding:`1px 8px`},children:[r.pending_edges.length,` pending`]}),h&&(0,$.jsxs)(`span`,{style:{color:`var(--danger)`,fontSize:12},children:[`error: `,h]}),(0,$.jsxs)(`span`,{style:{marginLeft:`auto`,display:`flex`,gap:8,alignItems:`center`},children:[(0,$.jsx)(`button`,{onClick:async()=>{await fetch(`/api/undo`,{method:`POST`}),await _()},style:{background:`var(--surface)`,color:`var(--text)`,border:`1px solid var(--border)`,borderRadius:8,padding:`5px 12px`,cursor:`pointer`,fontSize:12},children:`Undo`}),(0,$.jsx)(Bf,{})]})]}),r&&r.nodes.length>0&&(0,$.jsx)(Ff,{snapshot:r,onSelect:(e,n)=>{o(e),u(n?{id:e,x:n.x,y:n.y}:null)},focusToken:s,selectedId:a,pulses:p,onAccept:async e=>{await fetch(`/api/pending-edges/${e}/accept`,{method:`POST`}),await _()},onReject:async e=>{await fetch(`/api/pending-edges/${e}/reject`,{method:`POST`}),await _()}}),l&&(0,$.jsx)(Rf,{nodeId:l.id,x:l.x,y:l.y,onClose:()=>u(null),onJump:e=>{o(e),c({id:e,ts:Date.now()}),u(null)},onOpenDetail:()=>{f(!0),u(null)}}),(0,$.jsx)(zf,{onPick:e=>{o(e),c({id:e,ts:Date.now()})}}),(0,$.jsx)(`kbd`,{style:{position:`absolute`,bottom:12,left:12,padding:`5px 10px`,background:`color-mix(in srgb, var(--surface) 88%, transparent)`,border:`1px solid var(--border)`,borderRadius:8,color:`var(--muted)`,fontSize:11,fontFamily:`ui-monospace, monospace`,zIndex:10},children:`⌘K to search`}),a&&d&&(0,$.jsx)(Lf,{id:a,onClose:()=>f(!1),onJump:e=>{o(e),c({id:e,ts:Date.now()})}}),r&&r.nodes.length===0&&(0,$.jsx)(`div`,{style:{position:`absolute`,inset:0,display:`grid`,placeItems:`center`,textAlign:`center`,color:`var(--muted)`},children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{style:{fontSize:15,color:`var(--text)`,margin:`0 0 6px`},children:`The graph is empty.`}),(0,$.jsxs)(`p`,{style:{margin:0},children:[`Run`,` `,(0,$.jsx)(`code`,{style:{color:`var(--accent)`,background:`var(--surface)`,border:`1px solid var(--border)`,borderRadius:6,padding:`2px 6px`,fontFamily:`ui-monospace, monospace`},children:`rig index`}),` `,`in your project, then refresh.`]})]})})]})}function Hf({children:e}){let[n,r]=(0,v.useState)(`checking`),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(null);if((0,v.useEffect)(()=>{(async()=>{try{let e=await fetch(`/api/session/me`,{credentials:`include`});r(e.ok||e.status===404?`authed`:`unauthed`)}catch{r(`unauthed`)}})()},[]),n===`checking`)return(0,$.jsx)($.Fragment,{});if(n===`authed`)return(0,$.jsx)($.Fragment,{children:e});let c=async()=>{let e=i.trim();if(!e)return;let n=await fetch(`/auth?t=${encodeURIComponent(e)}`,{credentials:`include`,redirect:`manual`});n.status===302||n.ok?location.reload():s(`invalid token`)};return(0,$.jsx)(`div`,{style:{position:`fixed`,inset:0,background:`var(--bg)`,color:`var(--text)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:50},children:(0,$.jsxs)(`div`,{style:{maxWidth:480,padding:32,border:`1px solid var(--border)`,borderRadius:8,background:`var(--surface2)`},children:[(0,$.jsx)(`h1`,{style:{margin:0,fontSize:20,color:`var(--accent)`},children:`Rig — sign in`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,marginTop:12},children:[`The map requires a session token. Tokens live in `,(0,$.jsx)(`code`,{children:`.rig/.runtime`}),` and rotate when you delete that file.`]}),(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--text)`,marginTop:24,marginBottom:8},children:`Option 1 — open via your AI agent`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,fontSize:12,margin:0},children:[`In Claude Code / Cursor / Codex, ask:`,` `,(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:`"open the rig map"`}),` — your agent will call`,` `,(0,$.jsx)(`code`,{children:`rig_session_token`}),` and hand you a one-click login URL.`]}),(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--text)`,marginTop:24,marginBottom:8},children:`Option 2 — paste the token`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,fontSize:12,margin:`0 0 8px`},children:[(0,$.jsx)(`code`,{children:`cat .rig/.runtime`}),` in your project directory.`]}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:8},children:[(0,$.jsx)(`input`,{value:i,onChange:e=>{a(e.target.value),s(null)},onKeyDown:e=>{e.key===`Enter`&&c()},placeholder:`paste token here`,style:{flex:1,padding:`6px 10px`,background:`var(--bg)`,border:`1px solid ${o?`var(--danger)`:`var(--border)`}`,borderRadius:4,color:`var(--text)`,fontSize:13,fontFamily:`ui-monospace, monospace`,outline:`none`}}),(0,$.jsx)(`button`,{onClick:()=>void c(),style:{padding:`6px 14px`,background:`var(--accent)`,color:`var(--accent-text)`,border:`none`,borderRadius:4,cursor:`pointer`,fontSize:13,fontWeight:600},children:`sign in`})]}),o&&(0,$.jsx)(`div`,{style:{color:`var(--danger)`,fontSize:12,marginTop:6},children:o})]})})}var Uf=document.getElementById(`root`);if(!Uf)throw Error(`root mount missing`);(0,y.createRoot)(Uf).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(jf,{children:(0,$.jsx)(Hf,{children:(0,$.jsx)(Vf,{})})})}));
|
|
54
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vd(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,i)}return r}function Hd(e){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?Vd(Object(r),!0).forEach(function(n){Z(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Vd(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Ud(e,n){return Nd(e)||Rd(e,n)||Jd(e,n)||zd()}function Wd(e){return Pd(e)||Ld(e)||Jd(e)||Bd()}function Gd(e,n){if(typeof e!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,n);if(typeof i!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(n===`string`?String:Number)(e)}function Kd(e){var n=Gd(e,`string`);return typeof n==`symbol`?n:n+``}function qd(e){"@babel/helpers - typeof";return qd=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},qd(e)}function Jd(e,n){if(e){if(typeof e==`string`)return Md(e,n);var r={}.toString.call(e).slice(8,-1);return r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`?Array.from(e):r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Md(e,n):void 0}}var Yd=Od(Ad);function Xd(e,n,r){!n||typeof r!=`string`||e.filter(function(e){return!e[r]}).forEach(function(e){e[r]=Yd(n(e))})}function Zd(e,n){var r=e.nodes,i=e.links,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=a.nodeFilter,s=o===void 0?function(){return!0}:o,c=a.onLoopError,l=c===void 0?function(e){throw`Invalid DAG structure! Found cycle in node path: ${e.join(` -> `)}.`}:c,u={};r.forEach(function(e){return u[n(e)]={data:e,out:[],depth:-1,skip:!s(e)}}),i.forEach(function(e){var r=e.source,i=e.target,a=l(r),o=l(i);if(!u.hasOwnProperty(a))throw`Missing source node with id: ${a}`;if(!u.hasOwnProperty(o))throw`Missing target node with id: ${o}`;var s=u[a],c=u[o];s.out.push(c);function l(e){return qd(e)===`object`?n(e):e}});var d=[];return f(Object.values(u)),Object.assign.apply(Object,[{}].concat(Wd(Object.entries(u).filter(function(e){return!Ud(e,2)[1].skip}).map(function(e){var n=Ud(e,2),r=n[0],i=n[1];return Z({},r,i.depth)}))));function f(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=function(){var a=e[o];if(r.indexOf(a)!==-1){var s=[].concat(Wd(r.slice(r.indexOf(a))),[a]).map(function(e){return n(e.data)});return d.some(function(e){return e.length===s.length&&e.every(function(e,n){return e===s[n]})})||(d.push(s),l(s)),1}i>a.depth&&(a.depth=i,f(a.out,[].concat(Wd(r),[a]),i+ +!a.skip))},o=0,s=e.length;o<s;o++)if(a())continue}}var Qd=2,$d=function(e,n){return n.onNeedsRedraw&&n.onNeedsRedraw()},ef=function(e,n){if(!n.isShadow){var r=F(n.linkDirectionalParticles);n.graphData.links.forEach(function(e){var n=Math.round(Math.abs(r(e)));n?e.__photons=Wd(Array(n)).map(function(){return{}}):delete e.__photons})}},tf=Zo({props:{graphData:{default:{nodes:[],links:[]},onChange:function(e,n){n.engineRunning=!1,ef(e,n)}},dagMode:{onChange:function(e,n){!e&&(n.graphData.nodes||[]).forEach(function(e){e.fx=e.fy=void 0})}},dagLevelDistance:{},dagNodeFilter:{default:function(e){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4,triggerUpdate:!1,onChange:$d},nodeId:{default:`id`},nodeVal:{default:`val`,triggerUpdate:!1,onChange:$d},nodeColor:{default:`color`,triggerUpdate:!1,onChange:$d},nodeAutoColorBy:{},nodeCanvasObject:{triggerUpdate:!1,onChange:$d},nodeCanvasObjectMode:{default:function(){return`replace`},triggerUpdate:!1,onChange:$d},nodeVisibility:{default:!0,triggerUpdate:!1,onChange:$d},linkSource:{default:`source`},linkTarget:{default:`target`},linkVisibility:{default:!0,triggerUpdate:!1,onChange:$d},linkColor:{default:`color`,triggerUpdate:!1,onChange:$d},linkAutoColorBy:{},linkLineDash:{triggerUpdate:!1,onChange:$d},linkWidth:{default:1,triggerUpdate:!1,onChange:$d},linkCurvature:{default:0,triggerUpdate:!1,onChange:$d},linkCanvasObject:{triggerUpdate:!1,onChange:$d},linkCanvasObjectMode:{default:function(){return`replace`},triggerUpdate:!1,onChange:$d},linkDirectionalArrowLength:{default:0,triggerUpdate:!1,onChange:$d},linkDirectionalArrowColor:{triggerUpdate:!1,onChange:$d},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1,onChange:$d},linkDirectionalParticles:{default:0,triggerUpdate:!1,onChange:ef},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleOffset:{default:0,triggerUpdate:!1},linkDirectionalParticleWidth:{default:4,triggerUpdate:!1},linkDirectionalParticleColor:{triggerUpdate:!1},linkDirectionalParticleCanvasObject:{triggerUpdate:!1},globalScale:{default:1,triggerUpdate:!1},d3AlphaMin:{default:0,triggerUpdate:!1},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.alphaDecay(e)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.alphaTarget(e)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(e,n){n.forceLayout.velocityDecay(e)}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1},onNeedsRedraw:{triggerUpdate:!1},isShadow:{default:!1,triggerUpdate:!1}},methods:{d3Force:function(e,n,r){return r===void 0?e.forceLayout.force(n):(e.forceLayout.force(n,r),this)},d3ReheatSimulation:function(e){return e.forceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(e){return e.cntTicks=0,e.startTickTime=new Date,e.engineRunning=!0,this},isEngineRunning:function(e){return!!e.engineRunning},tickFrame:function(e){return!e.isShadow&&n(),i(),!e.isShadow&&a(),!e.isShadow&&o(),r(),this;function n(){e.engineRunning&&(++e.cntTicks>e.cooldownTicks||new Date-e.startTickTime>e.cooldownTime||e.d3AlphaMin>0&&e.forceLayout.alpha()<e.d3AlphaMin?(e.engineRunning=!1,e.onEngineStop()):(e.forceLayout.tick(),e.onEngineTick()))}function r(){var n=F(e.nodeVisibility),r=F(e.nodeVal),i=F(e.nodeColor),a=F(e.nodeCanvasObjectMode),o=e.ctx,s=e.isShadow/e.globalScale,c=e.graphData.nodes.filter(n);o.save(),c.forEach(function(n){var c=a(n);if(e.nodeCanvasObject&&(c===`before`||c===`replace`)&&(e.nodeCanvasObject(n,o,e.globalScale),c===`replace`)){o.restore();return}var l=Math.sqrt(Math.max(0,r(n)||1))*e.nodeRelSize+s;o.beginPath(),o.arc(n.x,n.y,l,0,2*Math.PI,!1),o.fillStyle=i(n)||`rgba(31, 120, 180, 0.92)`,o.fill(),e.nodeCanvasObject&&c===`after`&&e.nodeCanvasObject(n,e.ctx,e.globalScale)}),o.restore()}function i(){var n=F(e.linkVisibility),r=F(e.linkColor),i=F(e.linkWidth),a=F(e.linkLineDash),o=F(e.linkCurvature),s=F(e.linkCanvasObjectMode),c=e.ctx,l=e.isShadow*2,u=e.graphData.links.filter(n);u.forEach(_);var d=[],f=[],p=u;if(e.linkCanvasObject){var m=[],h=[];u.forEach(function(e){return({before:d,after:f,replace:m}[s(e)]||h).push(e)}),p=[].concat(Wd(d),f,h),d=d.concat(m)}c.save(),d.forEach(function(n){return e.linkCanvasObject(n,c,e.globalScale)}),c.restore();var g=Td(p,[r,i,a]);c.save(),Object.entries(g).forEach(function(n){var r=Ud(n,2),i=r[0],o=r[1],s=!i||i===`undefined`?`rgba(0,0,0,0.15)`:i;Object.entries(o).forEach(function(n){var r=Ud(n,2),i=r[0],o=r[1],u=(i||1)/e.globalScale+l;Object.entries(o).forEach(function(e){var n=Ud(e,2);n[0];var r=n[1],i=a(r[0]);c.beginPath(),r.forEach(function(e){var n=e.source,r=e.target;if(!(!n||!r||!n.hasOwnProperty(`x`)||!r.hasOwnProperty(`x`))){c.moveTo(n.x,n.y);var i=e.__controlPoints;i?c[i.length===2?`quadraticCurveTo`:`bezierCurveTo`].apply(c,Wd(i).concat([r.x,r.y])):c.lineTo(r.x,r.y)}}),c.strokeStyle=s,c.lineWidth=u,c.setLineDash(i||[]),c.stroke()})})}),c.restore(),c.save(),f.forEach(function(n){return e.linkCanvasObject(n,c,e.globalScale)}),c.restore();function _(e){var n=o(e);if(!n){e.__controlPoints=null;return}var r=e.source,i=e.target;if(!(!r||!i||!r.hasOwnProperty(`x`)||!i.hasOwnProperty(`x`))){var a=Math.sqrt((i.x-r.x)**2+(i.y-r.y)**2);if(a>0){var s=Math.atan2(i.y-r.y,i.x-r.x),c=a*n,l={x:(r.x+i.x)/2+c*Math.cos(s-Math.PI/2),y:(r.y+i.y)/2+c*Math.sin(s-Math.PI/2)};e.__controlPoints=[l.x,l.y]}else{var u=n*70;e.__controlPoints=[i.x,i.y-u,i.x+u,i.y]}}}}function a(){var n=1.6,r=.2,i=F(e.linkDirectionalArrowLength),a=F(e.linkDirectionalArrowRelPos),o=F(e.linkVisibility),s=F(e.linkDirectionalArrowColor||e.linkColor),c=F(e.nodeVal),l=e.ctx;l.save(),e.graphData.links.filter(o).forEach(function(o){var u=i(o);if(!(!u||u<0)){var d=o.source,f=o.target;if(!(!d||!f||!d.hasOwnProperty(`x`)||!f.hasOwnProperty(`x`))){var p=Math.sqrt(Math.max(0,c(d)||1))*e.nodeRelSize,m=Math.sqrt(Math.max(0,c(f)||1))*e.nodeRelSize,h=Math.min(1,Math.max(0,a(o))),g=s(o)||`rgba(0,0,0,0.28)`,_=u/n/2,v=o.__controlPoints&&Fd(dd,[d.x,d.y].concat(Wd(o.__controlPoints),[f.x,f.y])),y=v?function(e){return v.get(e)}:function(e){return{x:d.x+(f.x-d.x)*e||0,y:d.y+(f.y-d.y)*e||0}},b=v?v.length():Math.sqrt((f.x-d.x)**2+(f.y-d.y)**2),x=p+u+(b-p-m-u)*h,S=y(x/b),C=y((x-u)/b),w=y((x-u*(1-r))/b),T=Math.atan2(S.y-C.y,S.x-C.x)-Math.PI/2;l.beginPath(),l.moveTo(S.x,S.y),l.lineTo(C.x+_*Math.cos(T),C.y+_*Math.sin(T)),l.lineTo(w.x,w.y),l.lineTo(C.x-_*Math.cos(T),C.y-_*Math.sin(T)),l.fillStyle=g,l.fill()}}}),l.restore()}function o(){var n=F(e.linkDirectionalParticles),r=F(e.linkDirectionalParticleSpeed),i=F(e.linkDirectionalParticleOffset),a=F(e.linkDirectionalParticleWidth),o=F(e.linkVisibility),s=F(e.linkDirectionalParticleColor||e.linkColor),c=e.ctx;c.save(),e.graphData.links.filter(o).forEach(function(o){var l=n(o);if(!(!o.hasOwnProperty(`__photons`)||!o.__photons.length)){var u=o.source,d=o.target;if(!(!u||!d||!u.hasOwnProperty(`x`)||!d.hasOwnProperty(`x`))){var f=r(o),p=Math.abs(i(o)),m=o.__photons||[],h=Math.max(0,a(o)/2)/Math.sqrt(e.globalScale);c.fillStyle=s(o)||`rgba(0,0,0,0.28)`;var g=o.__controlPoints?Fd(dd,[u.x,u.y].concat(Wd(o.__controlPoints),[d.x,d.y])):null,_=0,v=!1;m.forEach(function(n){var r=!!n.__singleHop;if(n.hasOwnProperty(`__progressRatio`)||(n.__progressRatio=r?+(f<0):(_+p)/l),!r&&_++,n.__progressRatio+=f,n.__progressRatio>=1||n.__progressRatio<0)if(!r)n.__progressRatio%=1,n.__progressRatio<0&&n.__progressRatio++;else{v=!0;return}var i=n.__progressRatio,a=g?g.get(i):{x:u.x+(d.x-u.x)*i||0,y:u.y+(d.y-u.y)*i||0};e.linkDirectionalParticleCanvasObject?e.linkDirectionalParticleCanvasObject(a.x,a.y,o,c,e.globalScale):(c.beginPath(),c.arc(a.x,a.y,h,0,2*Math.PI,!1),c.fill())}),v&&(o.__photons=o.__photons.filter(function(e){return!e.__singleHop||e.__progressRatio<=1&&e.__progressRatio>=0}))}}}),c.restore()}},emitParticle:function(e,n){return n&&(!n.__photons&&(n.__photons=[]),n.__photons.push({__singleHop:!0})),this}},stateInit:function(){return{forceLayout:zu().force(`link`,Du()).force(`charge`,Bu()).force(`center`,hl()).force(`dagRadial`,null).stop(),engineRunning:!1}},init:function(e,n){n.ctx=e},update:function(e,n){e.engineRunning=!1,e.onUpdate(),e.nodeAutoColorBy!==null&&Xd(e.graphData.nodes,F(e.nodeAutoColorBy),e.nodeColor),e.linkAutoColorBy!==null&&Xd(e.graphData.links,F(e.linkAutoColorBy),e.linkColor),e.graphData.links.forEach(function(n){n.source=n[e.linkSource],n.target=n[e.linkTarget]}),e.forceLayout.stop().alpha(1).nodes(e.graphData.nodes);var r=e.forceLayout.force(`link`);r&&r.id(function(n){return n[e.nodeId]}).links(e.graphData.links);var i=e.dagMode&&Zd(e.graphData,function(n){return n[e.nodeId]},{nodeFilter:e.dagNodeFilter,onLoopError:e.onDagError||void 0}),a=Math.max.apply(Math,Wd(Object.values(i||[]))),o=e.dagLevelDistance||e.graphData.nodes.length/(a||1)*Qd*([`radialin`,`radialout`].indexOf(e.dagMode)===-1?1:.7);if([`lr`,`rl`,`td`,`bu`].includes(n.dagMode)){var s=[`lr`,`rl`].includes(n.dagMode)?`fx`:`fy`;e.graphData.nodes.filter(e.dagNodeFilter).forEach(function(e){return delete e[s]})}if([`lr`,`rl`,`td`,`bu`].includes(e.dagMode)){var c=[`rl`,`bu`].includes(e.dagMode),l=function(n){return(i[n[e.nodeId]]-a/2)*o*(c?-1:1)},u=[`lr`,`rl`].includes(e.dagMode)?`fx`:`fy`;e.graphData.nodes.filter(e.dagNodeFilter).forEach(function(e){return e[u]=l(e)})}e.forceLayout.force(`dagRadial`,[`radialin`,`radialout`].indexOf(e.dagMode)===-1?null:Vu(function(n){var r=i[n[e.nodeId]]||-1;return(e.dagMode===`radialin`?a-r:r)*o}).strength(function(n){return+!!e.dagNodeFilter(n)}));for(var d=0;d<e.warmupTicks&&!(e.d3AlphaMin>0&&e.forceLayout.alpha()<e.d3AlphaMin);d++)e.forceLayout.tick();this.resetCountdown(),e.onFinishUpdate()}});function nf(e,n){var r=e instanceof Array?e:[e],i=new n;return i._destructor&&i._destructor(),{linkProp:function(e){return{default:i[e](),onChange:function(n,i){r.forEach(function(r){return i[r][e](n)})},triggerUpdate:!1}},linkMethod:function(e){return function(n){var i=[...arguments].slice(1),a=[];return r.forEach(function(r){var o=n[r],s=o[e].apply(o,i);s!==o&&a.push(s)}),a.length?a[0]:this}}}}var rf=800,af=4,of=5,sf=nf(`forceGraph`,tf),cf=nf([`forceGraph`,`shadowGraph`],tf),lf=Object.assign.apply(Object,Wd(`nodeColor.nodeAutoColorBy.nodeCanvasObject.nodeCanvasObjectMode.linkColor.linkAutoColorBy.linkLineDash.linkWidth.linkCanvasObject.linkCanvasObjectMode.linkDirectionalArrowLength.linkDirectionalArrowColor.linkDirectionalArrowRelPos.linkDirectionalParticles.linkDirectionalParticleSpeed.linkDirectionalParticleOffset.linkDirectionalParticleWidth.linkDirectionalParticleColor.linkDirectionalParticleCanvasObject.dagMode.dagLevelDistance.dagNodeFilter.onDagError.d3AlphaMin.d3AlphaDecay.d3VelocityDecay.warmupTicks.cooldownTicks.cooldownTime.onEngineTick.onEngineStop`.split(`.`).map(function(e){return Z({},e,sf.linkProp(e))})).concat(Wd([`nodeRelSize`,`nodeId`,`nodeVal`,`nodeVisibility`,`linkSource`,`linkTarget`,`linkVisibility`,`linkCurvature`].map(function(e){return Z({},e,cf.linkProp(e))})))),uf=Object.assign.apply(Object,Wd([`d3Force`,`d3ReheatSimulation`,`emitParticle`].map(function(e){return Z({},e,sf.linkMethod(e))})));function df(e){if(e.canvas){var n=e.canvas.width,r=e.canvas.height;n===300&&r===150&&(n=r=0);var i=window.devicePixelRatio;n/=i,r/=i,[e.canvas,e.shadowCanvas].forEach(function(a){a.style.width=`${e.width}px`,a.style.height=`${e.height}px`,a.width=e.width*i,a.height=e.height*i,!n&&!r&&a.getContext(`2d`).scale(i,i)});var a=Fa(e.canvas).k;e.zoom.translateBy(e.zoom.__baseElem,(e.width-n)/2/a,(e.height-r)/2/a),e.needsRedraw=!0}}function ff(e){var n=window.devicePixelRatio;e.setTransform(n,0,0,n,0,0)}function pf(e,n,r){e.save(),ff(e),e.clearRect(0,0,n,r),e.restore()}var mf=Zo({props:Hd({width:{default:window.innerWidth,onChange:function(e,n){return df(n)},triggerUpdate:!1},height:{default:window.innerHeight,onChange:function(e,n){return df(n)},triggerUpdate:!1},graphData:{default:{nodes:[],links:[]},onChange:function(e,n){[e.nodes,e.links].every(function(e){return(e||[]).every(function(e){return!e.hasOwnProperty(`__indexColor`)})})&&n.colorTracker.reset(),[{type:`Node`,objs:e.nodes},{type:`Link`,objs:e.links}].forEach(r),n.forceGraph.graphData(e),n.shadowGraph.graphData(e);function r(e){var r=e.type;e.objs.filter(function(e){if(!e.hasOwnProperty(`__indexColor`))return!0;var r=n.colorTracker.lookup(e.__indexColor);return!r||!r.hasOwnProperty(`d`)||r.d!==e}).forEach(function(e){e.__indexColor=n.colorTracker.register({type:r,d:e})})}},triggerUpdate:!1},backgroundColor:{onChange:function(e,n){n.canvas&&e&&(n.canvas.style.background=e)},triggerUpdate:!1},nodeLabel:{default:`name`,triggerUpdate:!1},nodePointerAreaPaint:{onChange:function(e,n){n.shadowGraph.nodeCanvasObject(e?function(n,r,i){return e(n,n.__indexColor,r,i)}:null),n.flushShadowCanvas&&n.flushShadowCanvas()},triggerUpdate:!1},linkPointerAreaPaint:{onChange:function(e,n){n.shadowGraph.linkCanvasObject(e?function(n,r,i){return e(n,n.__indexColor,r,i)}:null),n.flushShadowCanvas&&n.flushShadowCanvas()},triggerUpdate:!1},linkLabel:{default:`name`,triggerUpdate:!1},linkHoverPrecision:{default:4,triggerUpdate:!1},minZoom:{default:.01,onChange:function(e,n){n.zoom.scaleExtent([e,n.zoom.scaleExtent()[1]])},triggerUpdate:!1},maxZoom:{default:1e3,onChange:function(e,n){n.zoom.scaleExtent([n.zoom.scaleExtent()[0],e])},triggerUpdate:!1},enableNodeDrag:{default:!0,triggerUpdate:!1},enableZoomInteraction:{default:!0,triggerUpdate:!1},enablePanInteraction:{default:!0,triggerUpdate:!1},enableZoomPanInteraction:{default:!0,triggerUpdate:!1},enablePointerInteraction:{default:!0,onChange:function(e,n){n.hoverObj=null},triggerUpdate:!1},autoPauseRedraw:{default:!0,triggerUpdate:!1},onNodeDrag:{default:function(){},triggerUpdate:!1},onNodeDragEnd:{default:function(){},triggerUpdate:!1},onNodeClick:{triggerUpdate:!1},onNodeRightClick:{triggerUpdate:!1},onNodeHover:{triggerUpdate:!1},onLinkClick:{triggerUpdate:!1},onLinkRightClick:{triggerUpdate:!1},onLinkHover:{triggerUpdate:!1},onBackgroundClick:{triggerUpdate:!1},onBackgroundRightClick:{triggerUpdate:!1},showPointerCursor:{default:!0,triggerUpdate:!1},onZoom:{triggerUpdate:!1},onZoomEnd:{triggerUpdate:!1},onRenderFramePre:{triggerUpdate:!1},onRenderFramePost:{triggerUpdate:!1}},lf),aliases:{stopAnimation:`pauseAnimation`},methods:Hd({graph2ScreenCoords:function(e,n,r){var i=Fa(e.canvas);return{x:n*i.k+i.x,y:r*i.k+i.y}},screen2GraphCoords:function(e,n,r){var i=Fa(e.canvas);return{x:(n-i.x)/i.k,y:(r-i.y)/i.k}},centerAt:function(e,n,r,i){if(!e.canvas)return null;if(n!==void 0||r!==void 0){var a=Object.assign({},n===void 0?{}:{x:n},r===void 0?{}:{y:r});return i?e.tweenGroup.add(new Bo(o()).to(a,i).easing(Po.Quadratic.Out).onUpdate(s).onComplete(function(){e.tweenGroup.remove(this)}).start()):s(a),this}return o();function o(){var n=Fa(e.canvas);return{x:(e.width/2-n.x)/n.k,y:(e.height/2-n.y)/n.k}}function s(n){var r=n.x,i=n.y;e.zoom.translateTo(e.zoom.__baseElem,r===void 0?o().x:r,i===void 0?o().y:i),e.needsRedraw=!0}},zoom:function(e,n,r){if(!e.canvas)return null;if(n!==void 0)return r?e.tweenGroup.add(new Bo({k:i()}).to({k:n},r).easing(Po.Quadratic.Out).onUpdate(function(e){var n=e.k;return a(n)}).onComplete(function(){e.tweenGroup.remove(this)}).start()):a(n),this;return i();function i(){return Fa(e.canvas).k}function a(n){e.zoom.scaleTo(e.zoom.__baseElem,n),e.needsRedraw=!0}},zoomToFit:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,i=[...arguments].slice(3),a=this.getGraphBbox.apply(this,i);if(a){var o={x:(a.x[0]+a.x[1])/2,y:(a.y[0]+a.y[1])/2},s=Math.max(1e-12,Math.min(0xe8d4a51000,(e.width-r*2)/(a.x[1]-a.x[0]),(e.height-r*2)/(a.y[1]-a.y[0])));this.centerAt(o.x,o.y,n),this.zoom(s,n)}return this},getGraphBbox:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:function(){return!0},r=F(e.nodeVal),i=function(n){return Math.sqrt(Math.max(0,r(n)||1))*e.nodeRelSize},a=e.graphData.nodes.filter(n).map(function(e){return{x:e.x,y:e.y,r:i(e)}});return a.length?{x:[Za(a,function(e){return e.x-e.r}),Xa(a,function(e){return e.x+e.r})],y:[Za(a,function(e){return e.y-e.r}),Xa(a,function(e){return e.y+e.r})]}:null},pauseAnimation:function(e){return e.animationFrameRequestId&&=(cancelAnimationFrame(e.animationFrameRequestId),null),this},resumeAnimation:function(e){return e.animationFrameRequestId||this._animationCycle(),this},_destructor:function(){this.pauseAnimation(),this.graphData({nodes:[],links:[]})}},uf),stateInit:function(){return{lastSetZoom:1,zoom:Wa(),forceGraph:new tf,shadowGraph:new tf().cooldownTicks(0).nodeColor(`__indexColor`).linkColor(`__indexColor`).isShadow(!0),colorTracker:new sc,tweenGroup:new Io}},init:function(e,n){var r=this;e.innerHTML=``;var i=document.createElement(`div`);i.classList.add(`force-graph-container`),i.style.position=`relative`,e.appendChild(i),n.canvas=document.createElement(`canvas`),n.backgroundColor&&(n.canvas.style.background=n.backgroundColor),i.appendChild(n.canvas),n.shadowCanvas=document.createElement(`canvas`);var a=n.canvas.getContext(`2d`),o=n.shadowCanvas.getContext(`2d`,{willReadFrequently:!0}),s={x:-0xe8d4a51000,y:-0xe8d4a51000},c=function(){var e=null,r=window.devicePixelRatio,i=s.x>0&&s.y>0?o.getImageData(s.x*r,s.y*r,1,1):null;return i&&(e=n.colorTracker.lookup(i.data)),e};mn(n.canvas).call(Fn().subject(function(){if(!n.enableNodeDrag)return null;var e=c();return e&&e.type===`Node`?e.d:null}).on(`start`,function(e){var r=e.subject;r.__initialDragPos={x:r.x,y:r.y,fx:r.fx,fy:r.fy},e.active||(r.fx=r.x,r.fy=r.y),n.canvas.classList.add(`grabbable`)}).on(`drag`,function(e){var r=e.subject,i=r.__initialDragPos,a=e,o=Fa(n.canvas).k,s={x:i.x+(a.x-i.x)/o-r.x,y:i.y+(a.y-i.y)/o-r.y};[`x`,`y`].forEach(function(e){return r[`f${e}`]=r[e]=i[e]+(a[e]-i[e])/o}),!(!r.__dragged&&of>=Math.sqrt(Qa([`x`,`y`].map(function(n){return(e[n]-i[n])**2}))))&&(n.forceGraph.d3AlphaTarget(.3).resetCountdown(),n.isPointerDragging=!0,r.__dragged=!0,n.onNodeDrag(r,s))}).on(`end`,function(e){var r=e.subject,i=r.__initialDragPos,a={x:r.x-i.x,y:r.y-i.y};i.fx===void 0&&(r.fx=void 0),i.fy===void 0&&(r.fy=void 0),delete r.__initialDragPos,n.forceGraph.d3AlphaTarget()&&n.forceGraph.d3AlphaTarget(0).resetCountdown(),n.canvas.classList.remove(`grabbable`),n.isPointerDragging=!1,r.__dragged&&(delete r.__dragged,n.onNodeDragEnd(r,a))})),n.zoom(n.zoom.__baseElem=mn(n.canvas)),n.zoom.__baseElem.on(`dblclick.zoom`,null),n.zoom.filter(function(e){return!e.button&&n.enableZoomPanInteraction&&(e.type!==`wheel`||F(n.enableZoomInteraction)(e))&&(e.type===`wheel`||F(n.enablePanInteraction)(e))}).on(`zoom`,function(e){var i=e.transform;[a,o].forEach(function(e){ff(e),e.translate(i.x,i.y),e.scale(i.k,i.k)}),n.isPointerDragging=!0,n.onZoom&&n.onZoom(Hd(Hd({},i),r.centerAt())),n.needsRedraw=!0}).on(`end`,function(e){n.isPointerDragging=!1,n.onZoomEnd&&n.onZoomEnd(Hd(Hd({},e.transform),r.centerAt()))}),df(n),n.forceGraph.onNeedsRedraw(function(){return n.needsRedraw=!0}).onFinishUpdate(function(){Fa(n.canvas).k===n.lastSetZoom&&n.graphData.nodes.length&&(n.zoom.scaleTo(n.zoom.__baseElem,n.lastSetZoom=af/Math.cbrt(n.graphData.nodes.length)),n.needsRedraw=!0)}),n.tooltip=new ml(i),[`pointermove`,`pointerdown`].forEach(function(e){return i.addEventListener(e,function(r){e===`pointerdown`&&(n.isPointerPressed=!0,n.pointerDownEvent=r),!n.isPointerDragging&&r.type===`pointermove`&&n.onBackgroundClick&&(r.pressure>0||n.isPointerPressed)&&(r.pointerType===`mouse`||r.movementX===void 0||[r.movementX,r.movementY].some(function(e){return Math.abs(e)>1}))&&(n.isPointerDragging=!0);var a=o(i);s.x=r.pageX-a.left,s.y=r.pageY-a.top;function o(e){var n=e.getBoundingClientRect(),r=window.pageXOffset||document.documentElement.scrollLeft,i=window.pageYOffset||document.documentElement.scrollTop;return{top:n.top+i,left:n.left+r}}},{passive:!0})}),i.addEventListener(`pointerup`,function(e){if(n.isPointerPressed){if(n.isPointerPressed=!1,n.isPointerDragging){n.isPointerDragging=!1;return}var r=[e,n.pointerDownEvent];requestAnimationFrame(function(){if(e.button===0)if(n.hoverObj){var i=n[`on${n.hoverObj.type}Click`];i&&i.apply(void 0,[n.hoverObj.d].concat(r))}else n.onBackgroundClick&&n.onBackgroundClick.apply(n,r);if(e.button===2)if(n.hoverObj){var a=n[`on${n.hoverObj.type}RightClick`];a&&a.apply(void 0,[n.hoverObj.d].concat(r))}else n.onBackgroundRightClick&&n.onBackgroundRightClick.apply(n,r)})}},{passive:!0}),i.addEventListener(`contextmenu`,function(e){return!n.onBackgroundRightClick&&!n.onNodeRightClick&&!n.onLinkRightClick?!0:(e.preventDefault(),!1)}),n.forceGraph(a),n.shadowGraph(o);var l=No(function(){pf(o,n.width,n.height),n.shadowGraph.linkWidth(function(e){return F(n.linkWidth)(e)+n.linkHoverPrecision});var e=Fa(n.canvas);n.shadowGraph.globalScale(e.k).tickFrame()},rf);n.flushShadowCanvas=l.flush,(this._animationCycle=function e(){var r=!n.autoPauseRedraw||!!n.needsRedraw||n.forceGraph.isEngineRunning()||n.graphData.links.some(function(e){return e.__photons&&e.__photons.length});if(n.needsRedraw=!1,n.enablePointerInteraction){var i=n.isPointerDragging?null:c();if(i!==n.hoverObj){var o=n.hoverObj,s=o?o.type:null,u=i?i.type:null;if(s&&s!==u){var d=n[`on${s}Hover`];d&&d(null,o.d)}if(u){var f=n[`on${u}Hover`];f&&f(i.d,s===u?o.d:null)}n.tooltip.content(i&&F(n[`${i.type.toLowerCase()}Label`])(i.d)||null),n.canvas.classList[(i&&n[`on${u}Click`]||!i&&n.onBackgroundClick)&&F(n.showPointerCursor)(i?.d)?`add`:`remove`](`clickable`),n.hoverObj=i}r&&l()}if(r){pf(a,n.width,n.height);var p=Fa(n.canvas).k;n.onRenderFramePre&&n.onRenderFramePre(a,p),n.forceGraph.globalScale(p).tickFrame(),n.onRenderFramePost&&n.onRenderFramePost(a,p)}n.tweenGroup.update(),n.animationFrameRequestId=requestAnimationFrame(e)})()},update:function(e){}}),hf=s(((e,n)=>{n.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),gf=s(((e,n)=>{var r=hf();function i(){}function a(){}a.resetWarningCache=i,n.exports=function(){function e(e,n,i,a,o,s){if(s!==r){var c=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name=`Invariant Violation`,c}}e.isRequired=e;function n(){return e}var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:i};return o.PropTypes=o,o}})),Q=l(s(((e,n)=>{n.exports=gf()()}))(),1),_f={width:Q.default.number,height:Q.default.number,graphData:Q.default.shape({nodes:Q.default.arrayOf(Q.default.object).isRequired,links:Q.default.arrayOf(Q.default.object).isRequired}),backgroundColor:Q.default.string,nodeRelSize:Q.default.number,nodeId:Q.default.string,nodeLabel:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeVal:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),nodeVisibility:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),nodeColor:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeAutoColorBy:Q.default.oneOfType([Q.default.string,Q.default.func]),onNodeHover:Q.default.func,onNodeClick:Q.default.func,linkSource:Q.default.string,linkTarget:Q.default.string,linkLabel:Q.default.oneOfType([Q.default.string,Q.default.func]),linkVisibility:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),linkColor:Q.default.oneOfType([Q.default.string,Q.default.func]),linkAutoColorBy:Q.default.oneOfType([Q.default.string,Q.default.func]),linkWidth:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkCurvature:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalArrowLength:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalArrowColor:Q.default.oneOfType([Q.default.string,Q.default.func]),linkDirectionalArrowRelPos:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticles:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleSpeed:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleOffset:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleWidth:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkDirectionalParticleColor:Q.default.oneOfType([Q.default.string,Q.default.func]),onLinkHover:Q.default.func,onLinkClick:Q.default.func,dagMode:Q.default.oneOf([`td`,`bu`,`lr`,`rl`,`zin`,`zout`,`radialin`,`radialout`]),dagLevelDistance:Q.default.number,dagNodeFilter:Q.default.func,onDagError:Q.default.func,d3AlphaMin:Q.default.number,d3AlphaDecay:Q.default.number,d3VelocityDecay:Q.default.number,warmupTicks:Q.default.number,cooldownTicks:Q.default.number,cooldownTime:Q.default.number,onEngineTick:Q.default.func,onEngineStop:Q.default.func,getGraphBbox:Q.default.func},vf={zoomToFit:Q.default.func,onNodeRightClick:Q.default.func,onNodeDrag:Q.default.func,onNodeDragEnd:Q.default.func,onLinkRightClick:Q.default.func,linkHoverPrecision:Q.default.number,onBackgroundClick:Q.default.func,onBackgroundRightClick:Q.default.func,showPointerCursor:Q.default.oneOfType([Q.default.bool,Q.default.func]),enablePointerInteraction:Q.default.bool,enableNodeDrag:Q.default.bool},yf={showNavInfo:Q.default.bool,nodeOpacity:Q.default.number,nodeResolution:Q.default.number,nodeThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),nodeThreeObjectExtend:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),nodePositionUpdate:Q.default.func,linkOpacity:Q.default.number,linkResolution:Q.default.number,linkCurveRotation:Q.default.oneOfType([Q.default.number,Q.default.string,Q.default.func]),linkMaterial:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),linkThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),linkThreeObjectExtend:Q.default.oneOfType([Q.default.bool,Q.default.string,Q.default.func]),linkPositionUpdate:Q.default.func,linkDirectionalArrowResolution:Q.default.number,linkDirectionalParticleResolution:Q.default.number,linkDirectionalParticleThreeObject:Q.default.oneOfType([Q.default.object,Q.default.string,Q.default.func]),forceEngine:Q.default.oneOf([`d3`,`ngraph`]),ngraphPhysics:Q.default.object,numDimensions:Q.default.oneOf([1,2,3])},bf=Object.assign({},_f,vf,{linkLineDash:Q.default.oneOfType([Q.default.arrayOf(Q.default.number),Q.default.string,Q.default.func]),nodeCanvasObjectMode:Q.default.oneOfType([Q.default.string,Q.default.func]),nodeCanvasObject:Q.default.func,nodePointerAreaPaint:Q.default.func,linkCanvasObjectMode:Q.default.oneOfType([Q.default.string,Q.default.func]),linkCanvasObject:Q.default.func,linkPointerAreaPaint:Q.default.func,linkDirectionalParticleCanvasObject:Q.default.func,autoPauseRedraw:Q.default.bool,minZoom:Q.default.number,maxZoom:Q.default.number,enableZoomInteraction:Q.default.oneOfType([Q.default.bool,Q.default.func]),enablePanInteraction:Q.default.oneOfType([Q.default.bool,Q.default.func]),onZoom:Q.default.func,onZoomEnd:Q.default.func,onRenderFramePre:Q.default.func,onRenderFramePost:Q.default.func});Object.assign({},_f,vf,yf,{enableNavigationControls:Q.default.bool,controlType:Q.default.oneOf([`trackball`,`orbit`,`fly`]),rendererConfig:Q.default.object,extraRenderers:Q.default.arrayOf(Q.default.shape({render:Q.default.func.isRequired}))}),Object.assign({},_f,yf,{nodeDesc:Q.default.oneOfType([Q.default.string,Q.default.func]),linkDesc:Q.default.oneOfType([Q.default.string,Q.default.func])}),Object.assign({},_f,yf,{markerAttrs:Q.default.object,yOffset:Q.default.number,glScale:Q.default.number});var xf=A(mf,{methodNames:[`emitParticle`,`d3Force`,`d3ReheatSimulation`,`stopAnimation`,`pauseAnimation`,`resumeAnimation`,`centerAt`,`zoom`,`zoomToFit`,`getGraphBbox`,`screen2GraphCoords`,`graph2ScreenCoords`]});xf.displayName=`ForceGraph2D`,xf.propTypes=bf;var Sf={file:`#94a3b8`,module:`#a78bfa`,"markdown-section":`#fcd34d`,class:`#fbbf24`,function:`#34d399`,method:`#60a5fa`,property:`#f472b6`,variable:`#f87171`,constant:`#fb923c`,enum:`#c084fc`,interface:`#22d3ee`,type_alias:`#22d3ee`,cluster:`#ec4899`},Cf=[`#60a5fa`,`#34d399`,`#fbbf24`,`#f472b6`,`#a78bfa`,`#fb923c`,`#22d3ee`,`#c084fc`,`#ec4899`,`#facc15`,`#4ade80`,`#f87171`,`#818cf8`,`#fcd34d`,`#2dd4bf`,`#e879f9`],wf=[{id:`observatory`,name:`Observatory`,scheme:`dark`,tokens:{bg:`#0a0c10`,surface:`#12151c`,surface2:`#171b24`,border:`#232834`,text:`#e6e9ef`,muted:`#7d8694`,accent:`#38e1c6`,accentText:`#04110e`,hub:`#f5b544`,structural:`#2c3340`,semantic:`#38e1c6`,pending:`#f5b544`,pulse:`#f472b6`,danger:`#f87171`,success:`#34d399`},nodeKinds:Sf,community:Cf},{id:`warm`,name:`Warm instrument`,scheme:`dark`,tokens:{bg:`#0d0b09`,surface:`#17130f`,surface2:`#1d1813`,border:`#2b2620`,text:`#ece6dd`,muted:`#8a8175`,accent:`#f5a623`,accentText:`#1a1206`,hub:`#ffd27d`,structural:`#3a332a`,semantic:`#5ec8c0`,pending:`#f5a623`,pulse:`#ff9e7d`,danger:`#f08a6c`,success:`#7fce8c`},nodeKinds:Sf,community:Cf},{id:`nebula`,name:`Indigo nebula`,scheme:`dark`,tokens:{bg:`#0b0a14`,surface:`#15131f`,surface2:`#1b1828`,border:`#272336`,text:`#e8e6f0`,muted:`#837e98`,accent:`#b16cff`,accentText:`#120a1f`,hub:`#fbbf24`,structural:`#322c47`,semantic:`#7c6cff`,pending:`#fbbf24`,pulse:`#f472b6`,danger:`#f87171`,success:`#4ade80`},nodeKinds:Sf,community:Cf},{id:`light`,name:`Daylight`,scheme:`light`,tokens:{bg:`#eef1f5`,surface:`#ffffff`,surface2:`#ffffff`,border:`#d4dae2`,text:`#1b2430`,muted:`#5f6b7a`,accent:`#0ea5a0`,accentText:`#ffffff`,hub:`#b45309`,structural:`#b8c1cd`,semantic:`#0ea5a0`,pending:`#b45309`,pulse:`#db2777`,danger:`#dc2626`,success:`#059669`},nodeKinds:{...Sf,"markdown-section":`#d97706`,class:`#d97706`},community:Cf}],Tf=`observatory`,Ef=e=>wf.find(n=>n.id===e)??wf[0],Df=s((e=>{var n=Symbol.for(`react.transitional.element`),r=Symbol.for(`react.fragment`);function i(e,r,i){var a=null;if(i!==void 0&&(a=``+i),r.key!==void 0&&(a=``+r.key),`key`in r)for(var o in i={},r)o!==`key`&&(i[o]=r[o]);else i=r;return r=i.ref,{$$typeof:n,type:e,key:a,ref:r===void 0?null:r,props:i}}e.Fragment=r,e.jsx=i,e.jsxs=i})),$=s(((e,n)=>{n.exports=Df()}))(),Of=(0,v.createContext)(null),kf=e=>{let n=document.documentElement;for(let[r,i]of Object.entries(e.tokens))n.style.setProperty(`--${Af(r)}`,i);n.style.setProperty(`color-scheme`,e.scheme)},Af=e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`);function jf({children:e}){let[n,r]=(0,v.useState)(Tf),[i,a]=(0,v.useState)(!1),o=Ef(n);return(0,v.useEffect)(()=>{let e=!1;return fetch(`/api/config`).then(e=>e.ok?e.json():null).then(n=>{!e&&n?.theme&&wf.some(e=>e.id===n.theme)&&r(n.theme)}).catch(()=>{}).finally(()=>!e&&a(!0)),()=>{e=!0}},[]),(0,v.useEffect)(()=>kf(o),[o]),(0,$.jsx)(Of.Provider,{value:{theme:o,themeId:n,setThemeId:e=>{r(e),fetch(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({theme:e})})},themes:wf},children:e})}function Mf(){let e=(0,v.useContext)(Of);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}var Nf=(e,n)=>{let r=e.replace(`#`,``);return`rgba(${parseInt(r.slice(0,2),16)}, ${parseInt(r.slice(2,4),16)}, ${parseInt(r.slice(4,6),16)}, ${n})`},Pf=e=>4+Math.max(0,Math.min(1,e.pull_score))*14+(e.is_hub?6+(e.hubness??0)*8:0);function Ff({snapshot:e,onSelect:n,onAccept:r,onReject:i,focusToken:a,selectedId:o,pulses:s}){let{theme:c}=Mf(),l=e=>c.nodeKinds[e]??c.tokens.muted,u=e=>e===void 0?c.tokens.muted:c.community[e%c.community.length],d=(0,v.useMemo)(()=>Array.from(new Set(e.nodes.map(e=>e.type))).sort((e,n)=>e.localeCompare(n)),[e.nodes]),[f,p]=(0,v.useState)(new Set),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(`kind`),y=(0,v.useMemo)(()=>{let n=e.nodes.filter(e=>m&&!e.is_hub?!1:!f.has(e.type)),r=new Set(n.map(e=>e.id)),i=n.map(e=>({...e})),a=e=>r.has(e.src)&&r.has(e.dst);return{nodes:i,links:[...e.edges_structural.filter(a).map(e=>({source:e.src,target:e.dst,table:`structural`})),...e.edges_semantic.filter(a).map(e=>({source:e.src,target:e.dst,table:`semantic`,weight:e.weight})),...e.pending_edges.filter(e=>r.has(e.src)&&r.has(e.dst)).map(e=>({source:e.src,target:e.dst,table:`pending`,pending:e}))]}},[e,f,m]),b=(0,v.useRef)(),[x,S]=(0,v.useState)({w:800,h:600}),[C,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=()=>S({w:window.innerWidth,h:window.innerHeight});return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,v.useEffect)(()=>{if(!a)return;let e=y.nodes.find(e=>e.id===a.id);!e||e.x===void 0||e.y===void 0||(b.current?.centerAt(e.x,e.y,600),b.current?.zoom(4,600))},[a,y.nodes]),(0,v.useEffect)(()=>{!s||s.size===0||b.current?.d3ReheatSimulation()},[s]),(0,v.useEffect)(()=>{b.current?.d3ReheatSimulation()},[c]);let ee=e=>{p(n=>{let r=new Set(n);return r.has(e)?r.delete(e):r.add(e),r})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{style:{position:`absolute`,top:52,left:12,zIndex:10,display:`flex`,flexWrap:`wrap`,gap:6,maxWidth:`calc(100vw - 24px)`},children:[(0,$.jsx)(`button`,{onClick:()=>h(e=>!e),title:`Show only hub nodes`,style:{padding:`4px 10px`,fontSize:11,border:`1px solid ${m?c.tokens.hub:`var(--border)`}`,borderRadius:999,background:m?c.tokens.hub:`var(--surface)`,color:m?c.tokens.bg:c.tokens.hub,cursor:`pointer`},children:m?`◉ hubs only`:`○ hubs only`}),(0,$.jsxs)(`button`,{onClick:()=>_(e=>e===`kind`?`community`:`kind`),title:`Toggle node coloring between anchor kind and community`,style:{padding:`4px 10px`,fontSize:11,border:`1px solid var(--border)`,borderRadius:999,background:`var(--surface)`,color:g===`community`?`var(--accent)`:`var(--muted)`,cursor:`pointer`},children:[`color: `,g]}),d.map(e=>{let n=f.has(e);return(0,$.jsx)(`button`,{onClick:()=>ee(e),style:{padding:`4px 10px`,fontSize:11,border:`1px solid ${n?`var(--border)`:l(e)}`,borderRadius:999,background:n?`var(--surface)`:Nf(l(e),.13),color:n?`var(--muted)`:l(e),cursor:`pointer`,opacity:n?.5:1},children:e},e)})]}),(0,$.jsx)(xf,{ref:b,width:x.w,height:x.h,graphData:y,backgroundColor:c.tokens.bg,nodeId:`id`,linkColor:e=>{let n=e.table;return n===`pending`?c.tokens.pending:n===`semantic`?Nf(c.tokens.semantic,.33):c.tokens.structural},linkWidth:e=>e.table===`pending`?2:e.table===`semantic`?1.5:.8,linkLineDash:e=>e.table===`pending`?[4,4]:null,nodeLabel:e=>`${e.type}: ${e.name}`,nodeCanvasObject:(e,n,r)=>{let i=e,a=Pf(i),d=i.x??0,f=i.y??0;if(i.is_hub){let e=a+3+(i.hubness??0)*4;n.beginPath(),n.arc(d,f,e,0,2*Math.PI),n.strokeStyle=Nf(c.tokens.hub,.55),n.lineWidth=1.5,n.stroke()}let p=1500,m=s?.get(i.id);if(m!==void 0){let e=Date.now()-m;if(e<p){let r=1-e/p,i=a+6+(1-r)*18;n.beginPath(),n.arc(d,f,i,0,2*Math.PI),n.strokeStyle=Nf(c.tokens.pulse,Number(r.toFixed(2))),n.lineWidth=2,n.stroke()}}n.beginPath(),n.arc(d,f,a,0,2*Math.PI),n.fillStyle=g===`community`?u(i.community_id):l(i.type),n.fill(),o===i.id&&(n.beginPath(),n.arc(d,f,a+4,0,2*Math.PI),n.strokeStyle=c.tokens.accent,n.lineWidth=2,n.stroke()),(r>1.2||i.is_hub)&&(n.fillStyle=i.is_hub?c.tokens.hub:c.tokens.text,n.font=`${(i.is_hub?11:10)/r}px ui-sans-serif`,n.fillText(i.name,d+a+2,f+3))},onNodeClick:(e,r)=>{let i=r;n(e.id,i?{x:i.clientX,y:i.clientY}:void 0)},onLinkHover:e=>{w(e?.pending??null)},onLinkClick:(e,n)=>{E({x:n.clientX,y:n.clientY})}}),C&&T&&(0,$.jsxs)(`div`,{style:{position:`fixed`,left:T.x+12,top:T.y+12,background:`var(--surface2)`,border:`1px solid ${c.tokens.pending}`,borderRadius:10,padding:12,maxWidth:320,zIndex:20,fontSize:12,color:`var(--text)`,boxShadow:`0 12px 32px rgba(0,0,0,0.45)`},children:[(0,$.jsx)(`div`,{style:{color:`var(--pending)`,marginBottom:6,fontWeight:600},children:`pending edge`}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginBottom:6},children:[C.provenance,` · `,C.kind,` · weight `,C.weight.toFixed(2)]}),(0,$.jsx)(`div`,{style:{marginBottom:8},children:C.rationale}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,$.jsx)(`button`,{onClick:()=>{r(C.id),w(null),E(null)},style:{background:`var(--success)`,color:`var(--bg)`,border:`none`,borderRadius:6,padding:`5px 12px`,cursor:`pointer`,fontSize:11,fontWeight:600},children:`accept`}),(0,$.jsx)(`button`,{onClick:()=>{i(C.id),w(null),E(null)},style:{background:`var(--surface)`,color:`var(--text)`,border:`1px solid var(--border)`,borderRadius:6,padding:`5px 12px`,cursor:`pointer`,fontSize:11},children:`reject`})]})]})]})}var If=e=>e.toFixed(2);function Lf({id:e,onClose:n,onJump:r}){let[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)([]),[c,l]=(0,v.useState)(null);(0,v.useEffect)(()=>{a(null),s([]),l(null),Promise.all([fetch(`/api/node/${encodeURIComponent(e)}`).then(e=>e.json()),fetch(`/api/node/${encodeURIComponent(e)}/pull?k=6`).then(e=>e.json())]).then(([e,n])=>{a(e),s(n)}).catch(e=>l(e instanceof Error?e.message:String(e)))},[e]);let u=i?.data&&typeof i.data.filePath==`string`?i.data.filePath:null,d=i?.data&&typeof i.data.signature==`string`?i.data.signature:null;return(0,$.jsxs)(`aside`,{style:{position:`absolute`,top:52,right:0,bottom:0,width:360,background:`color-mix(in srgb, var(--bg) 94%, transparent)`,backdropFilter:`blur(8px)`,borderLeft:`1px solid var(--border)`,padding:20,overflowY:`auto`,zIndex:9},children:[(0,$.jsxs)(`header`,{style:{display:`flex`,justifyContent:`space-between`,alignItems:`baseline`},children:[(0,$.jsx)(`h2`,{style:{margin:0,fontSize:16},children:i?.name??`…`}),(0,$.jsx)(`button`,{onClick:n,style:{background:`transparent`,border:`none`,color:`var(--muted)`,cursor:`pointer`,fontSize:18},children:`×`})]}),c&&(0,$.jsx)(`p`,{style:{color:`var(--danger)`},children:c}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,fontSize:12,marginBottom:12},children:[(0,$.jsx)(`code`,{style:{color:`var(--accent)`},children:i.type}),u&&(0,$.jsxs)($.Fragment,{children:[` · `,(0,$.jsx)(`span`,{children:u})]})]}),d&&(0,$.jsx)(`pre`,{style:{background:`var(--surface)`,padding:8,borderRadius:4,fontSize:12,whiteSpace:`pre-wrap`,margin:`8px 0`},children:d}),(0,$.jsxs)(`section`,{style:{marginTop:16},children:[(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--muted)`,textTransform:`uppercase`,letterSpacing:.5},children:`Neighbors`}),(0,$.jsxs)(`ul`,{style:{listStyle:`none`,padding:0,margin:0},children:[Object.entries(i.neighbor_counts).map(([e,n])=>(0,$.jsxs)(`li`,{style:{display:`flex`,justifyContent:`space-between`,padding:`2px 0`},children:[(0,$.jsx)(`span`,{children:e}),(0,$.jsx)(`span`,{style:{color:`var(--muted)`},children:n})]},e)),Object.keys(i.neighbor_counts).length===0&&(0,$.jsx)(`li`,{style:{color:`var(--muted)`},children:`(none)`})]})]}),(0,$.jsxs)(`section`,{style:{marginTop:16},children:[(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--muted)`,textTransform:`uppercase`,letterSpacing:.5},children:`Magnetic pull`}),(0,$.jsxs)(`ul`,{style:{listStyle:`none`,padding:0,margin:0},children:[o.map(e=>(0,$.jsxs)(`li`,{onClick:()=>r(e.nodeId),style:{padding:`4px 0`,cursor:`pointer`,fontSize:12},children:[(0,$.jsxs)(`div`,{style:{color:`var(--accent)`},children:[e.nodeId.slice(0,28),`…`]}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`},children:[`score `,If(e.score),` · s `,If(e.components.structural),` · e`,` `,If(e.components.semantic),` · r `,If(e.components.recency)]})]},e.nodeId)),o.length===0&&(0,$.jsx)(`li`,{style:{color:`var(--muted)`},children:`(none)`})]})]})]})]})}function Rf({nodeId:e,x:n,y:r,onClose:i,onJump:a,onOpenDetail:o}){let[s,c]=(0,v.useState)(null),[l,u]=(0,v.useState)([]);if((0,v.useEffect)(()=>{let n=!1;return(async()=>{try{let[r,i]=await Promise.all([fetch(`/api/node/${encodeURIComponent(e)}`),fetch(`/api/node/${encodeURIComponent(e)}/pull?k=6`)]);if(!r.ok||!i.ok)return;let a=await r.json(),o=await i.json();if(n)return;c(a);let s=await Promise.all(o.map(async e=>{let n=await fetch(`/api/node/${encodeURIComponent(e.nodeId)}`);if(!n.ok)return null;let r=await n.json();return{entry:e,name:r.name,kind:r.type}}));n||u(s.filter(e=>e!==null))}catch{}})(),()=>{n=!0}},[e]),(0,v.useEffect)(()=>{let e=e=>{e.key===`Escape`&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),!s)return null;let d=Math.min(Math.max(n+16,8),window.innerWidth-320-8),f=Math.min(Math.max(r+16,8),window.innerHeight-280-8),p=Object.values(s.neighbor_counts).reduce((e,n)=>e+n,0);return(0,$.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:{position:`fixed`,left:d,top:f,width:320,zIndex:25,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:8,boxShadow:`0 10px 30px rgba(0,0,0,0.5)`,color:`var(--text)`,fontSize:12},children:[(0,$.jsxs)(`div`,{style:{padding:12,borderBottom:`1px solid var(--border)`},children:[(0,$.jsx)(`div`,{style:{fontWeight:600,fontSize:13},children:s.name}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginTop:2},children:[(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:s.type}),s.data?.filePath&&(0,$.jsxs)($.Fragment,{children:[` · `,s.data.filePath]})]}),s.data?.signature&&(0,$.jsx)(`div`,{style:{color:`var(--muted)`,fontFamily:`ui-monospace, monospace`,fontSize:11,marginTop:4,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:s.data.signature}),(0,$.jsxs)(`div`,{style:{color:`var(--muted)`,marginTop:4,fontSize:11},children:[p,` neighbor`,p===1?``:`s`,s.neighbor_counts.contains?` · ${s.neighbor_counts.contains} contains`:``,s.neighbor_counts.references?` · ${s.neighbor_counts.references} refs`:``]})]}),(0,$.jsxs)(`div`,{style:{padding:`8px 12px`},children:[(0,$.jsx)(`div`,{style:{color:`var(--muted)`,fontSize:10,marginBottom:4,textTransform:`uppercase`},children:`magnetic pull`}),l.length===0&&(0,$.jsx)(`div`,{style:{color:`var(--muted)`},children:`no nearby anchors`}),l.map(e=>(0,$.jsxs)(`div`,{onClick:()=>a(e.entry.nodeId),style:{display:`flex`,gap:8,alignItems:`baseline`,padding:`3px 0`,cursor:`pointer`},title:`s=${e.entry.components.structural.toFixed(2)} m=${e.entry.components.semantic.toFixed(2)} r=${e.entry.components.recency.toFixed(2)}`,children:[(0,$.jsx)(`span`,{style:{color:`var(--hub)`,minWidth:36,fontSize:11},children:e.entry.score.toFixed(2)}),(0,$.jsx)(`span`,{style:{flex:1,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.name}),(0,$.jsx)(`span`,{style:{color:`var(--muted)`,fontSize:10},children:e.kind})]},e.entry.nodeId))]}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:8,padding:8,borderTop:`1px solid var(--border)`,justifyContent:`space-between`},children:[(0,$.jsx)(`button`,{onClick:o,style:{background:`var(--surface)`,color:`var(--text)`,border:`none`,borderRadius:4,padding:`4px 10px`,cursor:`pointer`,fontSize:11},children:`open details`}),(0,$.jsx)(`button`,{onClick:i,style:{background:`transparent`,color:`var(--muted)`,border:`none`,cursor:`pointer`,fontSize:11},children:`esc`})]})]})}function zf({onPick:e}){let[n,r]=(0,v.useState)(!1),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)([]),[c,l]=(0,v.useState)(0),u=(0,v.useRef)(null);if((0,v.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`?(e.preventDefault(),r(e=>!e)):e.key===`Escape`&&r(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,v.useEffect)(()=>{n?setTimeout(()=>u.current?.focus(),0):(a(``),s([]),l(0))},[n]),(0,v.useEffect)(()=>{if(!n||!i.trim()){s([]);return}let e=!1,r=setTimeout(async()=>{try{let n=await(await fetch(`/api/search?q=${encodeURIComponent(i)}&limit=12`)).json();e||(s(n),l(0))}catch{e||s([])}},80);return()=>{e=!0,clearTimeout(r)}},[i,n]),!n)return null;let d=n=>{n&&(e(n.id),r(!1))};return(0,$.jsx)(`div`,{onClick:()=>r(!1),style:{position:`fixed`,inset:0,background:`rgba(0,0,0,0.4)`,zIndex:30,display:`flex`,alignItems:`flex-start`,justifyContent:`center`,paddingTop:`15vh`},children:(0,$.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:{width:560,maxWidth:`90vw`,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:8,boxShadow:`0 20px 60px rgba(0,0,0,0.5)`,overflow:`hidden`},children:[(0,$.jsx)(`input`,{ref:u,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(o.length-1,e+1))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(0,e-1))):e.key===`Enter`&&(e.preventDefault(),d(o[c]))},placeholder:`Search anchors (name, qualified name, alias)…`,style:{width:`100%`,padding:`14px 18px`,background:`transparent`,border:`none`,borderBottom:`1px solid var(--border)`,color:`var(--text)`,fontSize:15,outline:`none`}}),(0,$.jsxs)(`div`,{style:{maxHeight:`40vh`,overflowY:`auto`},children:[o.length===0&&i.trim()&&(0,$.jsx)(`div`,{style:{padding:16,color:`var(--muted)`,fontSize:12},children:`no matches`}),o.map((e,n)=>(0,$.jsxs)(`div`,{onClick:()=>d(e),onMouseEnter:()=>l(n),style:{padding:`8px 18px`,background:n===c?`var(--surface)`:`transparent`,cursor:`pointer`,fontSize:13,color:`var(--text)`,display:`flex`,gap:10,alignItems:`baseline`},children:[(0,$.jsx)(`span`,{style:{color:`var(--accent)`,minWidth:80,fontSize:11},children:e.type}),(0,$.jsx)(`span`,{style:{flex:1},children:e.name}),e.data?.filePath&&(0,$.jsx)(`span`,{style:{color:`var(--muted)`,fontSize:11},children:e.data.filePath})]},e.id))]}),(0,$.jsx)(`div`,{style:{padding:`6px 18px`,borderTop:`1px solid var(--border)`,color:`var(--muted)`,fontSize:11},children:`↑↓ navigate · ⏎ select · esc close · ⌘K toggle`})]})})}function Bf(){let{theme:e,themeId:n,setThemeId:r,themes:i}=Mf(),[a,o]=(0,v.useState)(!1),s=(0,v.useRef)(null);return(0,v.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)},n=e=>e.key===`Escape`&&o(!1);return window.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,n)}},[a]),(0,$.jsxs)(`div`,{ref:s,style:{position:`relative`},children:[(0,$.jsx)(`button`,{onClick:()=>o(e=>!e),title:`Theme`,"aria-label":`Theme settings`,style:{background:a?`var(--surface2)`:`transparent`,color:`var(--muted)`,border:`1px solid var(--border)`,borderRadius:8,width:28,height:28,display:`grid`,placeItems:`center`,cursor:`pointer`,fontSize:14,lineHeight:1},children:`⚙`}),a&&(0,$.jsxs)(`div`,{style:{position:`absolute`,top:36,right:0,width:200,background:`var(--surface2)`,border:`1px solid var(--border)`,borderRadius:10,boxShadow:`0 12px 32px rgba(0,0,0,0.45)`,padding:6,zIndex:40},children:[(0,$.jsx)(`div`,{style:{fontSize:10,textTransform:`uppercase`,letterSpacing:.6,color:`var(--muted)`,padding:`4px 8px`},children:`Theme`}),i.map(e=>{let i=e.id===n;return(0,$.jsxs)(`button`,{onClick:()=>r(e.id),style:{display:`flex`,alignItems:`center`,gap:10,width:`100%`,background:i?`var(--surface)`:`transparent`,border:`none`,borderRadius:6,padding:`7px 8px`,cursor:`pointer`,color:`var(--text)`,fontSize:13,textAlign:`left`},children:[(0,$.jsx)(`span`,{"aria-hidden":!0,style:{width:12,height:12,borderRadius:`50%`,flexShrink:0,background:e.tokens.accent,border:`2px solid ${e.tokens.bg}`,boxShadow:`0 0 0 1px ${e.tokens.border}`}}),(0,$.jsx)(`span`,{style:{flex:1},children:e.name}),i&&(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:`✓`})]},e.id)})]})]})}function Vf(){let[e,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(null),[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(()=>new Map),[h,g]=(0,v.useState)(null),_=async()=>{try{let[e,r]=await Promise.all([fetch(`/api/status`).then(e=>e.json()),fetch(`/api/graph?limit=2000`).then(e=>e.json())]);n(e),i(r),g(null)}catch(e){g(e instanceof Error?e.message:String(e))}};return(0,v.useEffect)(()=>{_();let e=new WebSocket(`ws://${location.host}/ws`);return e.addEventListener(`message`,e=>{let n=JSON.parse(e.data);if(n.type===`db:changed`&&_(),n.type===`activation:fired`&&n.payload?.ids){let e=Date.now();m(r=>{let i=new Map(r);for(let r of n.payload.ids)i.set(r,e);return i}),setTimeout(()=>{m(e=>{let n=new Map,r=Date.now()-1500;for(let[i,a]of e)a>r&&n.set(i,a);return n})},1600)}}),()=>e.close()},[]),(0,v.useEffect)(()=>{fetch(`/api/config`).then(e=>e.json()).then(e=>{e?.name&&(document.title=`Rig — ${e.name}`)}).catch(()=>{})},[]),(0,v.useEffect)(()=>{let e=()=>{let e=location.hash.replace(/^#/,``);e&&(o(e),c({id:e,ts:Date.now()}))};return e(),window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,v.useEffect)(()=>{let e=a?`#${a}`:``;location.hash!==e&&history.replaceState(null,``,`${location.pathname}${location.search}${e}`)},[a]),(0,v.useEffect)(()=>{fetch(`/api/selection`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({node_id:a})})},[a]),(0,$.jsxs)(`div`,{style:{position:`fixed`,inset:0},children:[(0,$.jsxs)(`header`,{style:{position:`absolute`,top:0,left:0,right:0,height:44,padding:`0 16px`,background:`color-mix(in srgb, var(--bg) 82%, transparent)`,backdropFilter:`blur(8px)`,borderBottom:`1px solid var(--border)`,zIndex:10,display:`flex`,gap:14,alignItems:`center`},children:[(0,$.jsxs)(`span`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,$.jsx)(`span`,{"aria-hidden":!0,style:{width:9,height:9,borderRadius:`50%`,background:`var(--accent)`,boxShadow:`0 0 8px var(--accent)`}}),(0,$.jsx)(`strong`,{style:{color:`var(--text)`,letterSpacing:.2},children:`Rig`})]}),e&&(0,$.jsxs)(`span`,{style:{color:`var(--muted)`,fontSize:12},children:[e.nodes.toLocaleString(),` nodes ·`,` `,(e.edges_structural+e.edges_semantic).toLocaleString(),` edges ·`,` `,e.files.toLocaleString(),` files`]}),a&&(0,$.jsx)(`span`,{style:{color:`var(--accent)`,fontSize:11,fontFamily:`ui-monospace, monospace`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:a}),r&&r.pending_edges.length>0&&(0,$.jsxs)(`span`,{style:{color:`var(--pending)`,fontSize:11,border:`1px solid var(--pending)`,borderRadius:999,padding:`1px 8px`},children:[r.pending_edges.length,` pending`]}),h&&(0,$.jsxs)(`span`,{style:{color:`var(--danger)`,fontSize:12},children:[`error: `,h]}),(0,$.jsxs)(`span`,{style:{marginLeft:`auto`,display:`flex`,gap:8,alignItems:`center`},children:[(0,$.jsx)(`button`,{onClick:async()=>{await fetch(`/api/undo`,{method:`POST`}),await _()},style:{background:`var(--surface)`,color:`var(--text)`,border:`1px solid var(--border)`,borderRadius:8,padding:`5px 12px`,cursor:`pointer`,fontSize:12},children:`Undo`}),(0,$.jsx)(Bf,{})]})]}),r&&r.nodes.length>0&&(0,$.jsx)(Ff,{snapshot:r,onSelect:(e,n)=>{o(e),u(n?{id:e,x:n.x,y:n.y}:null)},focusToken:s,selectedId:a,pulses:p,onAccept:async e=>{await fetch(`/api/pending-edges/${e}/accept`,{method:`POST`}),await _()},onReject:async e=>{await fetch(`/api/pending-edges/${e}/reject`,{method:`POST`}),await _()}}),l&&(0,$.jsx)(Rf,{nodeId:l.id,x:l.x,y:l.y,onClose:()=>u(null),onJump:e=>{o(e),c({id:e,ts:Date.now()}),u(null)},onOpenDetail:()=>{f(!0),u(null)}}),(0,$.jsx)(zf,{onPick:e=>{o(e),c({id:e,ts:Date.now()})}}),(0,$.jsx)(`kbd`,{style:{position:`absolute`,bottom:12,left:12,padding:`5px 10px`,background:`color-mix(in srgb, var(--surface) 88%, transparent)`,border:`1px solid var(--border)`,borderRadius:8,color:`var(--muted)`,fontSize:11,fontFamily:`ui-monospace, monospace`,zIndex:10},children:`⌘K to search`}),a&&d&&(0,$.jsx)(Lf,{id:a,onClose:()=>f(!1),onJump:e=>{o(e),c({id:e,ts:Date.now()})}}),r&&r.nodes.length===0&&(0,$.jsx)(`div`,{style:{position:`absolute`,inset:0,display:`grid`,placeItems:`center`,textAlign:`center`,color:`var(--muted)`},children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{style:{fontSize:15,color:`var(--text)`,margin:`0 0 6px`},children:`The graph is empty.`}),(0,$.jsxs)(`p`,{style:{margin:0},children:[`Run`,` `,(0,$.jsx)(`code`,{style:{color:`var(--accent)`,background:`var(--surface)`,border:`1px solid var(--border)`,borderRadius:6,padding:`2px 6px`,fontFamily:`ui-monospace, monospace`},children:`rig index`}),` `,`in your project, then refresh.`]})]})})]})}function Hf({children:e}){let[n,r]=(0,v.useState)(`checking`),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(null);if((0,v.useEffect)(()=>{(async()=>{try{let e=await fetch(`/api/session/me`,{credentials:`include`});r(e.ok||e.status===404?`authed`:`unauthed`)}catch{r(`unauthed`)}})()},[]),n===`checking`)return(0,$.jsx)($.Fragment,{});if(n===`authed`)return(0,$.jsx)($.Fragment,{children:e});let c=async()=>{let e=i.trim();if(!e)return;let n=await fetch(`/auth?t=${encodeURIComponent(e)}`,{credentials:`include`,redirect:`manual`});n.status===302||n.ok?location.reload():s(`invalid token`)};return(0,$.jsx)(`div`,{style:{position:`fixed`,inset:0,background:`var(--bg)`,color:`var(--text)`,display:`flex`,alignItems:`center`,justifyContent:`center`,zIndex:50},children:(0,$.jsxs)(`div`,{style:{maxWidth:480,padding:32,border:`1px solid var(--border)`,borderRadius:8,background:`var(--surface2)`},children:[(0,$.jsx)(`h1`,{style:{margin:0,fontSize:20,color:`var(--accent)`},children:`Rig — sign in`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,marginTop:12},children:[`The map requires a session token. Tokens live in `,(0,$.jsx)(`code`,{children:`.rig/.runtime`}),` and rotate when you delete that file.`]}),(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--text)`,marginTop:24,marginBottom:8},children:`Option 1 — open via your AI agent`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,fontSize:12,margin:0},children:[`In Claude Code / Cursor / Codex, ask:`,` `,(0,$.jsx)(`span`,{style:{color:`var(--accent)`},children:`"open the rig map"`}),` — your agent will call`,` `,(0,$.jsx)(`code`,{children:`rig_session_token`}),` and hand you a one-click login URL.`]}),(0,$.jsx)(`h3`,{style:{fontSize:13,color:`var(--text)`,marginTop:24,marginBottom:8},children:`Option 2 — paste the token`}),(0,$.jsxs)(`p`,{style:{color:`var(--muted)`,fontSize:12,margin:`0 0 8px`},children:[(0,$.jsx)(`code`,{children:`cat .rig/.runtime`}),` in your project directory.`]}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:8},children:[(0,$.jsx)(`input`,{value:i,onChange:e=>{a(e.target.value),s(null)},onKeyDown:e=>{e.key===`Enter`&&c()},placeholder:`paste token here`,style:{flex:1,padding:`6px 10px`,background:`var(--bg)`,border:`1px solid ${o?`var(--danger)`:`var(--border)`}`,borderRadius:4,color:`var(--text)`,fontSize:13,fontFamily:`ui-monospace, monospace`,outline:`none`}}),(0,$.jsx)(`button`,{onClick:()=>void c(),style:{padding:`6px 14px`,background:`var(--accent)`,color:`var(--accent-text)`,border:`none`,borderRadius:4,cursor:`pointer`,fontSize:13,fontWeight:600},children:`sign in`})]}),o&&(0,$.jsx)(`div`,{style:{color:`var(--danger)`,fontSize:12,marginTop:6},children:o})]})})}var Uf=document.getElementById(`root`);if(!Uf)throw Error(`root mount missing`);(0,y.createRoot)(Uf).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(jf,{children:(0,$.jsx)(Hf,{children:(0,$.jsx)(Vf,{})})})}));
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
transition: background 200ms ease, color 200ms ease;
|
|
28
28
|
}
|
|
29
29
|
</style>
|
|
30
|
-
<script type="module" crossorigin src="/assets/index-
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-DP5zI6Mb.js"></script>
|
|
31
31
|
</head>
|
|
32
32
|
<body>
|
|
33
33
|
<div id="root"></div>
|