@ltm-blueverse/alpha-semantic-hub 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1674 -0
  3. package/explorer/README.md +282 -0
  4. package/explorer/src/App.css +0 -0
  5. package/explorer/src/App.tsx +2035 -0
  6. package/explorer/src/ErrorBoundary.tsx +112 -0
  7. package/explorer/src/ExploreWorkspaceTabs.tsx +29 -0
  8. package/explorer/src/assets/hero.png +0 -0
  9. package/explorer/src/assets/react.svg +1 -0
  10. package/explorer/src/assets/vite.svg +1 -0
  11. package/explorer/src/explorerCapabilities.ts +24 -0
  12. package/explorer/src/index.css +71 -0
  13. package/explorer/src/main.tsx +7 -0
  14. package/explorer/src/store/edgePairKeys.d.ts +2 -0
  15. package/explorer/src/store/edgePairKeys.js +7 -0
  16. package/explorer/src/store/graphStore.ts +183 -0
  17. package/explorer/src/store/registryStore.ts +78 -0
  18. package/explorer/src/types.d.ts +16 -0
  19. package/explorer/src/ui/primitives.css +414 -0
  20. package/explorer/src/ui/primitives.tsx +170 -0
  21. package/explorer/src/workspaces/DecisionWorkspace/DecisionWorkspace.tsx +279 -0
  22. package/explorer/src/workspaces/DiffMergeWorkspace/DiffMergeWorkspace.tsx +121 -0
  23. package/explorer/src/workspaces/EnrichWorkspace/EntityResolutionTab.tsx +454 -0
  24. package/explorer/src/workspaces/EnrichWorkspace/RegistryTab.tsx +285 -0
  25. package/explorer/src/workspaces/GraphWorkspace/GraphCanvas.tsx +2673 -0
  26. package/explorer/src/workspaces/GraphWorkspace/GraphInspectorPanel.tsx +771 -0
  27. package/explorer/src/workspaces/GraphWorkspace/GraphLoadingOverlay.tsx +410 -0
  28. package/explorer/src/workspaces/GraphWorkspace/GraphWorkspace.tsx +3584 -0
  29. package/explorer/src/workspaces/GraphWorkspace/MarkdownContentViewer.tsx +705 -0
  30. package/explorer/src/workspaces/GraphWorkspace/SigmaSceneAdapter.tsx +55 -0
  31. package/explorer/src/workspaces/GraphWorkspace/TimelinePanel.tsx +193 -0
  32. package/explorer/src/workspaces/GraphWorkspace/behaviors/clickSelectionBehavior.ts +29 -0
  33. package/explorer/src/workspaces/GraphWorkspace/behaviors/fitViewBehavior.ts +15 -0
  34. package/explorer/src/workspaces/GraphWorkspace/behaviors/focusCameraBehavior.ts +25 -0
  35. package/explorer/src/workspaces/GraphWorkspace/behaviors/hoverActivationBehavior.ts +15 -0
  36. package/explorer/src/workspaces/GraphWorkspace/behaviors/pathHighlightBehavior.ts +52 -0
  37. package/explorer/src/workspaces/GraphWorkspace/behaviors/searchFocusBehavior.ts +36 -0
  38. package/explorer/src/workspaces/GraphWorkspace/behaviors/types.ts +41 -0
  39. package/explorer/src/workspaces/GraphWorkspace/behaviors/viewModeSwitchBehavior.ts +29 -0
  40. package/explorer/src/workspaces/GraphWorkspace/graphAnalytics.ts +779 -0
  41. package/explorer/src/workspaces/GraphWorkspace/graphColorLegend.ts +36 -0
  42. package/explorer/src/workspaces/GraphWorkspace/graphConfig.ts +102 -0
  43. package/explorer/src/workspaces/GraphWorkspace/graphEntityShape.ts +34 -0
  44. package/explorer/src/workspaces/GraphWorkspace/graphLoading.ts +84 -0
  45. package/explorer/src/workspaces/GraphWorkspace/graphSceneLayers.ts +775 -0
  46. package/explorer/src/workspaces/GraphWorkspace/graphSceneState.ts +2753 -0
  47. package/explorer/src/workspaces/GraphWorkspace/graphStructureLayer.ts +335 -0
  48. package/explorer/src/workspaces/GraphWorkspace/graphTheme.ts +1078 -0
  49. package/explorer/src/workspaces/GraphWorkspace/graphViewCopy.ts +41 -0
  50. package/explorer/src/workspaces/GraphWorkspace/localGraphTransition.ts +9 -0
  51. package/explorer/src/workspaces/GraphWorkspace/markdownEditorState.ts +114 -0
  52. package/explorer/src/workspaces/GraphWorkspace/markdownResourceClient.ts +103 -0
  53. package/explorer/src/workspaces/GraphWorkspace/markdownUrlSafety.ts +29 -0
  54. package/explorer/src/workspaces/GraphWorkspace/nodeMarkdownSync.ts +81 -0
  55. package/explorer/src/workspaces/GraphWorkspace/pluginRegistryPredicates.ts +24 -0
  56. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPlugin.tsx +353 -0
  57. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPluginPhaseC.tsx +522 -0
  58. package/explorer/src/workspaces/GraphWorkspace/plugins/index.ts +16 -0
  59. package/explorer/src/workspaces/GraphWorkspace/plugins/legendPlugin.tsx +120 -0
  60. package/explorer/src/workspaces/GraphWorkspace/plugins/neighborhoodPanelPlugin.tsx +231 -0
  61. package/explorer/src/workspaces/GraphWorkspace/plugins/temporalOverlayPlugin.tsx +142 -0
  62. package/explorer/src/workspaces/GraphWorkspace/plugins/types.ts +106 -0
  63. package/explorer/src/workspaces/GraphWorkspace/realtimeGraphAttributes.ts +50 -0
  64. package/explorer/src/workspaces/GraphWorkspace/scene.ts +79 -0
  65. package/explorer/src/workspaces/GraphWorkspace/sigmaNativeRendering.ts +421 -0
  66. package/explorer/src/workspaces/GraphWorkspace/smallGraphLayout.ts +135 -0
  67. package/explorer/src/workspaces/GraphWorkspace/temporalLifecyclePredicates.ts +31 -0
  68. package/explorer/src/workspaces/GraphWorkspace/temporalScrubberBounds.ts +46 -0
  69. package/explorer/src/workspaces/GraphWorkspace/temporalSnapshotGuards.ts +113 -0
  70. package/explorer/src/workspaces/GraphWorkspace/types.ts +395 -0
  71. package/explorer/src/workspaces/GraphWorkspace/useLoadGraph.ts +746 -0
  72. package/explorer/src/workspaces/GraphWorkspace/useMarkdownEditor.ts +177 -0
  73. package/explorer/src/workspaces/ImportExportWorkspace/ImportExportWorkspace.tsx +196 -0
  74. package/explorer/src/workspaces/LineageWorkspace/LineageDiagram.tsx +177 -0
  75. package/explorer/src/workspaces/ManageWorkspace/KGOverviewTab.tsx +291 -0
  76. package/explorer/src/workspaces/ManageWorkspace/OntologySummaryTab.tsx +346 -0
  77. package/explorer/src/workspaces/MemoryWorkspace.tsx +464 -0
  78. package/explorer/src/workspaces/OntologyWorkspace/AlignmentsTab.tsx +437 -0
  79. package/explorer/src/workspaces/OntologyWorkspace/HealthTab.tsx +214 -0
  80. package/explorer/src/workspaces/OntologyWorkspace/OntologyEditor.tsx +770 -0
  81. package/explorer/src/workspaces/OntologyWorkspace/OntologyLoader.tsx +913 -0
  82. package/explorer/src/workspaces/OntologyWorkspace/OntologyManager.tsx +930 -0
  83. package/explorer/src/workspaces/OntologyWorkspace/OntologySearch.tsx +590 -0
  84. package/explorer/src/workspaces/OntologyWorkspace/ProposalReview.tsx +429 -0
  85. package/explorer/src/workspaces/OntologyWorkspace/SKOSVocabularyManager.tsx +696 -0
  86. package/explorer/src/workspaces/OntologyWorkspace/ShaclStudio.tsx +363 -0
  87. package/explorer/src/workspaces/OntologyWorkspace/VersionsTab.tsx +546 -0
  88. package/explorer/src/workspaces/OntologyWorkspace/api.ts +164 -0
  89. package/explorer/src/workspaces/OntologyWorkspace/index.tsx +101 -0
  90. package/explorer/src/workspaces/OntologyWorkspace/ontologyEditorModel.ts +87 -0
  91. package/explorer/src/workspaces/OntologyWorkspace/ontologyUrlState.ts +94 -0
  92. package/explorer/src/workspaces/OntologyWorkspace/types.ts +119 -0
  93. package/explorer/src/workspaces/ReasoningWorkspace.tsx +243 -0
  94. package/explorer/src/workspaces/SparqlWorkspace/SparqlWorkspace.tsx +271 -0
  95. package/explorer/src/workspaces/VocabularyWorkspace/ConceptTree.tsx +97 -0
  96. package/explorer/src/workspaces/VocabularyWorkspace/ImportDropzone.tsx +95 -0
  97. package/explorer/src/workspaces/VocabularyWorkspace/PropertyPanel.tsx +116 -0
  98. package/explorer/src/workspaces/VocabularyWorkspace/Sidebar.tsx +112 -0
  99. package/explorer/src/workspaces/VocabularyWorkspace/VocabularyWorkspace.tsx +70 -0
  100. package/explorer/src/workspaces/VocabularyWorkspace/queries.ts +52 -0
  101. package/explorer/src/workspaces/VocabularyWorkspace/types.ts +24 -0
  102. package/package.json +31 -0
  103. package/plugins/.claude-plugin/README.md +262 -0
  104. package/plugins/.claude-plugin/marketplace.json +20 -0
  105. package/plugins/.claude-plugin/plugin.json +33 -0
  106. package/plugins/.cline-plugin/README.md +32 -0
  107. package/plugins/.cline-plugin/marketplace.json +17 -0
  108. package/plugins/.cline-plugin/plugin.json +35 -0
  109. package/plugins/.codex-plugin/marketplace.json +21 -0
  110. package/plugins/.codex-plugin/plugin.json +35 -0
  111. package/plugins/.continue-plugin/README.md +34 -0
  112. package/plugins/.continue-plugin/marketplace.json +17 -0
  113. package/plugins/.continue-plugin/plugin.json +33 -0
  114. package/plugins/.cursor-plugin/marketplace.json +18 -0
  115. package/plugins/.cursor-plugin/plugin.json +32 -0
  116. package/plugins/.openclaw-plugin/README.md +62 -0
  117. package/plugins/.openclaw-plugin/marketplace.json +18 -0
  118. package/plugins/.openclaw-plugin/plugin.json +46 -0
  119. package/plugins/.pi-plugin/README.md +35 -0
  120. package/plugins/.vscode-plugin/README.md +48 -0
  121. package/plugins/.vscode-plugin/marketplace.json +17 -0
  122. package/plugins/.vscode-plugin/plugin.json +35 -0
  123. package/plugins/.windsurf-plugin/README.md +39 -0
  124. package/plugins/.windsurf-plugin/marketplace.json +17 -0
  125. package/plugins/.windsurf-plugin/plugin.json +35 -0
  126. package/plugins/agents/decision-advisor.md +126 -0
  127. package/plugins/agents/explainability.md +129 -0
  128. package/plugins/agents/kg-assistant.md +73 -0
  129. package/plugins/hooks/hooks.json +12 -0
  130. package/plugins/skills/causal/SKILL.md +74 -0
  131. package/plugins/skills/change/SKILL.md +80 -0
  132. package/plugins/skills/decision/SKILL.md +197 -0
  133. package/plugins/skills/deduplicate/SKILL.md +41 -0
  134. package/plugins/skills/embed/SKILL.md +230 -0
  135. package/plugins/skills/explain/SKILL.md +44 -0
  136. package/plugins/skills/export/SKILL.md +67 -0
  137. package/plugins/skills/extract/SKILL.md +93 -0
  138. package/plugins/skills/ingest/SKILL.md +38 -0
  139. package/plugins/skills/ontology/SKILL.md +89 -0
  140. package/plugins/skills/policy/SKILL.md +66 -0
  141. package/plugins/skills/provenance/SKILL.md +70 -0
  142. package/plugins/skills/query/SKILL.md +84 -0
  143. package/plugins/skills/reason/SKILL.md +201 -0
  144. package/plugins/skills/temporal/SKILL.md +164 -0
  145. package/plugins/skills/validate/SKILL.md +228 -0
  146. package/plugins/skills/visualize/SKILL.md +249 -0
@@ -0,0 +1,282 @@
1
+ # Alpha Semantic Hub Knowledge Explorer
2
+
3
+ A browser-based graph workbench for the [Alpha Semantic Hub](https://github.com/DeejayAI/alpha-semantic-hub) platform. Pan and zoom live graphs, scrub the timeline, trace every decision's causal chain, resolve duplicates, and author your ontology visually. Built on React 19 + Sigma.js.
4
+
5
+ ---
6
+
7
+ ## Requirements
8
+
9
+ | Dependency | Minimum version |
10
+ | --- | --- |
11
+ | Python | 3.10+ |
12
+ | Node.js | 18.x or higher (20.x recommended) |
13
+ | npm | 9.x or higher |
14
+
15
+ ```bash
16
+ python --version
17
+ node --version
18
+ npm --version
19
+ ```
20
+
21
+ ---
22
+
23
+ ## Two ways to run the Explorer
24
+
25
+ ### Option A — pip install (recommended for users)
26
+
27
+ Install the package with the explorer extras. The pre-built frontend bundle is included in the wheel so no Node.js is required.
28
+
29
+ ```bash
30
+ pip install "alphasemantichub[explorer]"
31
+ ```
32
+
33
+ Launch the dashboard by pointing it at any graph JSON file:
34
+
35
+ ```bash
36
+ alphasemantichub-explorer --graph my_graph.json
37
+ ```
38
+
39
+ The server starts at `http://127.0.0.1:8000` and opens the dashboard in your default browser automatically.
40
+
41
+ CLI flags:
42
+
43
+ | Flag | Default | Description |
44
+ | --- | --- | --- |
45
+ | `--graph` / `-g` | *(required)* | Path to a ContextGraph JSON file |
46
+ | `--port` / `-p` | `8000` | Port to bind the server to |
47
+ | `--host` | `127.0.0.1` | Host to bind (use `127.0.0.1` for local-only; see security note below) |
48
+ | `--no-browser` | off | Skip opening the browser automatically |
49
+
50
+ Examples:
51
+
52
+ ```bash
53
+ # Default — opens at http://127.0.0.1:8000
54
+ alphasemantichub-explorer --graph my_graph.json
55
+
56
+ # Custom port
57
+ alphasemantichub-explorer --graph my_graph.json --port 8080
58
+
59
+ # Suppress auto-open
60
+ alphasemantichub-explorer --graph my_graph.json --no-browser
61
+
62
+ # Equivalent using python -m
63
+ python -m alphasemantichub.explorer --graph my_graph.json
64
+ ```
65
+
66
+ > **Security note:** Since v0.6.5 the Explorer API requires an API key on protected routes. Set the `ASHUB_API_KEY` environment variable and send it as the `X-API-Key` header; without a configured key, protected routes fail closed with `503` rather than serving anonymously. To opt into unauthenticated access for local development only, set `ASHUB_ALLOW_ANONYMOUS=true` explicitly. (`/api/health` and `/api/info` are intentionally unauthenticated.)
67
+ >
68
+ > The default `--host 127.0.0.1` binds to localhost only, so it is not reachable from other machines on your network. If you bind to `0.0.0.0`, all graph data is readable and writable by any host that can reach the port (subject to API-key auth). The CLI prints a warning when binding to a non-loopback host in anonymous mode or when `ASHUB_API_KEY` is unset.
69
+
70
+ ---
71
+
72
+ ### Option B — run from source (for contributors / frontend development)
73
+
74
+ This mode runs the React dev server with hot module replacement, so frontend changes appear in the browser instantly without rebuilding.
75
+
76
+ #### Step 1 — Clone the repo
77
+
78
+ ```bash
79
+ git clone https://github.com/DeejayAI/alpha-semantic-hub.git
80
+ cd alphasemantichub
81
+ ```
82
+
83
+ #### Step 2 — Install the Python package
84
+
85
+ ```bash
86
+ pip install -e ".[explorer]"
87
+ ```
88
+
89
+ #### Step 3 — Install frontend dependencies
90
+
91
+ ```bash
92
+ cd explorer
93
+ npm ci
94
+ ```
95
+
96
+ #### Step 4 — Start the Python backend
97
+
98
+ Open a terminal in the repo root:
99
+
100
+ ```bash
101
+ alphasemantichub-explorer --graph path/to/my_graph.json --no-browser
102
+ ```
103
+
104
+ This starts the API on `http://127.0.0.1:8000`. Keep this terminal open.
105
+
106
+ #### Step 5 — Start the frontend dev server
107
+
108
+ Open a second terminal in `explorer/`:
109
+
110
+ ```bash
111
+ npm run dev
112
+ ```
113
+
114
+ Vite starts on **`http://localhost:5173`**. Open that URL in your browser. All `/api` and `/ws` requests are automatically proxied to the Python backend at `http://127.0.0.1:8000`.
115
+
116
+ ---
117
+
118
+ ## Building the production bundle
119
+
120
+ If you need to serve the UI from the Python server directly (without the Vite dev server):
121
+
122
+ ```bash
123
+ cd explorer
124
+ npm ci
125
+ npm run build
126
+ ```
127
+
128
+ This writes the compiled assets to `../alphasemantichub/static/`. The Python server then serves the full dashboard at `http://127.0.0.1:8000` — no separate Vite process needed.
129
+
130
+ ---
131
+
132
+ ## Workspaces
133
+
134
+ | Workspace | What you can do |
135
+ | --- | --- |
136
+ | **Knowledge Graph** | Live Sigma.js canvas · ForceAtlas2 layout · Ego Mode · semantic distance heatmap · path highlighting |
137
+ | **Timeline** | Temporal event scrubber — watch the graph evolve across time |
138
+ | **Decisions** | Browse causal chains behind every recorded decision with outcome badges and confidence scores |
139
+ | **Registry** | Live audit log of every graph mutation (add-node, add-edge, delete, update) |
140
+ | **Entity Resolution** | Review and merge duplicate entities with blocking + semantic dedup |
141
+ | **KG Overview** | Aggregate stats, community breakdown, centrality heatmap |
142
+ | **Ontology Hub** | SHACL Studio · visual drag-and-drop editor · cross-ontology alignments · SKOS browser |
143
+ | **Lineage** | W3C PROV-O provenance visualization for any entity |
144
+
145
+ ---
146
+
147
+ ## Environment variables
148
+
149
+ | Variable | Default | Description |
150
+ | --- | --- | --- |
151
+ | `EXPLORER_CORS_ORIGINS` | `http://localhost:5173,http://127.0.0.1:5173` | Comma-separated list of allowed CORS origins |
152
+ | `EXPLORER_CORS_CREDENTIALS` | `false` | Set to `true` to allow credentialed cross-origin requests (only needed behind an authenticating reverse proxy) |
153
+ | `ASHUB_API_KEY` | *(unset)* | API key required on protected routes since v0.6.5; send it as the `X-API-Key` header. When unset, protected routes fail closed with `503`. |
154
+ | `ASHUB_ALLOW_ANONYMOUS` | `false` | Set to `true` to opt into unauthenticated access (local development only). |
155
+
156
+ ---
157
+
158
+ ## Available scripts
159
+
160
+ Run these from inside the `explorer/` directory:
161
+
162
+ ```bash
163
+ # Start the dev server with hot module replacement
164
+ npm run dev
165
+
166
+ # Type-check and build the production bundle into ../alphasemantichub/static/
167
+ npm run build
168
+
169
+ # Preview the production build locally
170
+ npm run preview
171
+
172
+ # Run ESLint over all source files
173
+ npm run lint
174
+
175
+ # Run the graph store multi-edge unit tests
176
+ npm run test:graph-store
177
+
178
+ # Run the graph workspace display tests
179
+ npm run test:graph-workspace
180
+ ```
181
+
182
+ ---
183
+
184
+ ## API & WebSocket proxy (dev mode only)
185
+
186
+ During development, Vite forwards requests automatically — no CORS configuration needed:
187
+
188
+ | Pattern | Forwarded to |
189
+ | --- | --- |
190
+ | `/api/*` | `http://127.0.0.1:8000/api/*` |
191
+ | `/ws/*` | `ws://127.0.0.1:8000/ws/*` |
192
+
193
+ To run the backend on a different port, update `server.proxy` in [vite.config.ts](vite.config.ts).
194
+
195
+ ---
196
+
197
+ ## Project structure
198
+
199
+ ```text
200
+ explorer/
201
+ ├── src/
202
+ │ ├── App.tsx # Root layout, tab routing, workspace wiring
203
+ │ ├── index.css # Global resets, fonts, keyframe animations
204
+ │ ├── store/
205
+ │ │ ├── graphStore.ts # In-memory graph state
206
+ │ │ └── registryStore.ts # Pub/sub audit registry
207
+ │ └── workspaces/
208
+ │ ├── GraphWorkspace/ # Sigma.js canvas + inspector + behaviors
209
+ │ ├── DecisionWorkspace/ # Causal flow diagram + decision list
210
+ │ ├── DiffMergeWorkspace/ # Graph diff and merge view
211
+ │ ├── EnrichWorkspace/ # Entity resolution + registry tabs
212
+ │ ├── ImportExportWorkspace/ # Import CSV/JSON, export graph
213
+ │ ├── LineageWorkspace/ # W3C PROV-O lineage diagram
214
+ │ ├── ManageWorkspace/ # KG Overview + Ontology Summary
215
+ │ ├── OntologyWorkspace/ # SHACL Studio, visual editor, SKOS browser
216
+ │ ├── SparqlWorkspace/ # In-browser SPARQL query editor
217
+ │ └── VocabularyWorkspace/ # SKOS vocabulary manager
218
+ ├── index.html
219
+ ├── vite.config.ts # Dev proxy → 127.0.0.1:8000, build → ../alphasemantichub/static
220
+ └── package.json
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Troubleshooting
226
+
227
+ ### Dashboard shows a blank white page or "UI not available" message
228
+
229
+ The frontend bundle is missing from the server's static directory. Fix options:
230
+
231
+ - **If you installed via pip:** `pip install --upgrade "alphasemantichub[explorer]"` — the wheel includes the pre-built bundle.
232
+ - **If you installed from source:** run `cd explorer && npm ci && npm run build` from the repo root, then restart the server.
233
+ - **In dev mode:** use the Vite dev server at `http://localhost:5173` instead of the backend URL.
234
+
235
+ ### Blank graph / no data loads in the browser
236
+
237
+ - Confirm the Python backend is running and check the terminal for errors.
238
+ - Open browser DevTools → Network tab and look for failed `/api/graph` requests.
239
+ - If the backend is on a different port, update `server.proxy` in `vite.config.ts`.
240
+
241
+ ### `npm ci` fails or reports missing lockfile
242
+
243
+ The `package-lock.json` must be present. Run `npm install` once to generate it, commit it, then use `npm ci` going forward.
244
+
245
+ ### `npm run dev` fails with Node version error
246
+
247
+ Vite 6 requires **Node 18 or higher**. Run `node --version` to check. If you're on Node 16, upgrade via [nvm](https://github.com/nvm-sh/nvm) or the official Node.js installer.
248
+
249
+ ### Port 5173 already in use
250
+
251
+ Vite automatically tries the next available port and prints the actual URL in the terminal. Use the URL shown in the output.
252
+
253
+ ### WebSocket not connecting (real-time mutations not appearing)
254
+
255
+ - Confirm the backend exposes the `/ws/graph-updates` WebSocket endpoint.
256
+ - Check DevTools → Network → WS tab for the connection status and error code.
257
+ - Ensure the backend version matches the frontend — mixing major versions can cause protocol mismatches.
258
+ - **Authentication:** `/ws/graph-updates` enforces the same API key as the REST routes. Browsers cannot set custom headers on a WebSocket handshake, so pass the key as a query parameter instead:
259
+ ```
260
+ ws://127.0.0.1:8000/ws/graph-updates?api_key=<your-key>
261
+ ```
262
+ Non-browser clients (native apps, scripts) may send it as the `X-API-Key` header. A missing or incorrect key results in close code `4401`; if `ASHUB_API_KEY` is unset and `ASHUB_ALLOW_ANONYMOUS` is not `true`, the connection is also rejected. Note that API keys in URLs appear in server logs — prefer the header for non-browser clients.
263
+
264
+ ---
265
+
266
+ ## Tech stack
267
+
268
+ - **React 19** + TypeScript (strict mode)
269
+ - **Vite 6** with `babel-plugin-react-compiler`
270
+ - **Sigma.js 3** + **Graphology** — graph rendering and in-memory graph model
271
+ - **ForceAtlas2** — physics-based layout
272
+ - **@tanstack/react-query** — async data fetching for ontology and vocab tabs
273
+ - **vis-timeline** — temporal event visualization
274
+ - **@xyflow/react** — lineage diagram rendering
275
+ - **Monaco Editor** — in-browser SPARQL / SHACL editor
276
+ - **lucide-react** — icon set
277
+
278
+ ---
279
+
280
+ ## Contributing
281
+
282
+ See the root [CONTRIBUTING.md](../CONTRIBUTING.md) and open issues on the main [Alpha Semantic Hub repository](https://github.com/DeejayAI/alpha-semantic-hub).
File without changes