@fallen-8/studio 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +93 -0
- package/dist-lib/Canvas3D-C5og4ZIQ.js +62011 -0
- package/dist-lib/F8GraphCanvas-Db7vzDtJ.js +11085 -0
- package/dist-lib/abap-Bs8kvjsq.js +1398 -0
- package/dist-lib/apex-Dspwrl5m.js +326 -0
- package/dist-lib/azcli-k1BiOau1.js +68 -0
- package/dist-lib/bat-BIP72KWc.js +100 -0
- package/dist-lib/bicep-VhQeYhS3.js +102 -0
- package/dist-lib/cameligo-DnuAXtHg.js +174 -0
- package/dist-lib/canvas.js +13 -0
- package/dist-lib/clojure-BAuDPsal.js +761 -0
- package/dist-lib/coffee-BV06qSnj.js +232 -0
- package/dist-lib/cpp-Cz8Jeyrf.js +389 -0
- package/dist-lib/csharp-F6hhlXFb.js +326 -0
- package/dist-lib/csp-KzlEHCyI.js +53 -0
- package/dist-lib/css-e4FKntZ3.js +187 -0
- package/dist-lib/cssMode-Czf2vRA3.js +1571 -0
- package/dist-lib/cypher-CpvDGKRr.js +263 -0
- package/dist-lib/dart-DdHeFWR0.js +281 -0
- package/dist-lib/dockerfile-aoNXDcio.js +130 -0
- package/dist-lib/ecl-C4Q0DYuA.js +456 -0
- package/dist-lib/elixir-C9X42b0T.js +569 -0
- package/dist-lib/f8-studio.css +1 -0
- package/dist-lib/f8-studio.js +16 -0
- package/dist-lib/flow9-Bff42pfB.js +142 -0
- package/dist-lib/freemarker2-BtInkOsd.js +989 -0
- package/dist-lib/fsharp-C6vPAsHG.js +217 -0
- package/dist-lib/go-DEr8zx9f.js +218 -0
- package/dist-lib/graphql-BiNBBRFh.js +151 -0
- package/dist-lib/handlebars-UwZ7mBGA.js +419 -0
- package/dist-lib/hcl-2T9lKuFg.js +183 -0
- package/dist-lib/html-BXX93YIe.js +308 -0
- package/dist-lib/htmlMode-BCqQu1PO.js +1581 -0
- package/dist-lib/index-DFm6T7Un.js +132450 -0
- package/dist-lib/ini-CZGtssYM.js +71 -0
- package/dist-lib/java-B260NeH3.js +232 -0
- package/dist-lib/javascript-CK1z7Ynl.js +70 -0
- package/dist-lib/jsonMode-C4Q3fVvV.js +1996 -0
- package/dist-lib/julia-kuNLM9c5.js +511 -0
- package/dist-lib/kotlin-Bz6kAefA.js +253 -0
- package/dist-lib/less-AZUtS89I.js +162 -0
- package/dist-lib/lexon-BcmgnyRb.js +157 -0
- package/dist-lib/liquid-BnCUERBj.js +240 -0
- package/dist-lib/lua-Dz1RbATg.js +162 -0
- package/dist-lib/m3-CIMooLFn.js +210 -0
- package/dist-lib/markdown-C1BsCK9P.js +229 -0
- package/dist-lib/mdx-D2enmFMs.js +165 -0
- package/dist-lib/mips-BovsnfLQ.js +198 -0
- package/dist-lib/msdax-CiRB2ZB-.js +375 -0
- package/dist-lib/mysql-BwdpPE19.js +878 -0
- package/dist-lib/objective-c-D4nfHfso.js +183 -0
- package/dist-lib/pascal--j5-PYtz.js +251 -0
- package/dist-lib/pascaligo-C7TcJxNL.js +164 -0
- package/dist-lib/perl-BzEWqUb5.js +626 -0
- package/dist-lib/pgsql-B_KZ0mGX.js +851 -0
- package/dist-lib/php-A19QHzQV.js +500 -0
- package/dist-lib/pla-COeKY1hA.js +137 -0
- package/dist-lib/postiats-BfMp7zJL.js +907 -0
- package/dist-lib/powerquery-B0TS_5Gb.js +890 -0
- package/dist-lib/powershell-5jSbKdYB.js +239 -0
- package/dist-lib/protobuf-YgnOutn3.js +420 -0
- package/dist-lib/pug-DLej6kn5.js +402 -0
- package/dist-lib/python-DJvSF53q.js +301 -0
- package/dist-lib/qsharp-AhjqtSHB.js +301 -0
- package/dist-lib/r-D-F4P80w.js +243 -0
- package/dist-lib/razor-RerkagjP.js +550 -0
- package/dist-lib/redis-hwwIlMnV.js +302 -0
- package/dist-lib/redshift-Bcm_kjEG.js +809 -0
- package/dist-lib/restructuredtext-CrdzfPP-.js +174 -0
- package/dist-lib/ruby-QC2UNm1s.js +511 -0
- package/dist-lib/rust-5aqiQ3L5.js +343 -0
- package/dist-lib/sb-B1g1ZfLJ.js +115 -0
- package/dist-lib/scala-C2U4R5Gb.js +370 -0
- package/dist-lib/scheme-DeFRbslr.js +108 -0
- package/dist-lib/scss-RSTCiCmI.js +262 -0
- package/dist-lib/shell-BpF-iNu8.js +221 -0
- package/dist-lib/solidity-C00r2mbQ.js +1367 -0
- package/dist-lib/sophia-DVW5ZKDB.js +199 -0
- package/dist-lib/sparql-B0nmpxeX.js +201 -0
- package/dist-lib/sql-CJwKPERn.js +853 -0
- package/dist-lib/st-DPlKG5DT.js +416 -0
- package/dist-lib/swift-YZBAbVHV.js +309 -0
- package/dist-lib/systemverilog-CDQSaH63.js +576 -0
- package/dist-lib/tcl-Dlu8sp6Q.js +232 -0
- package/dist-lib/tsMode-C-6d-f_-.js +886 -0
- package/dist-lib/twig-C5TO7-kw.js +392 -0
- package/dist-lib/types/api/changefeed.d.ts +113 -0
- package/dist-lib/types/api/client.d.ts +81 -0
- package/dist-lib/types/api/endpoints.d.ts +197 -0
- package/dist-lib/types/api/queries.d.ts +8 -0
- package/dist-lib/types/api/types.d.ts +1032 -0
- package/dist-lib/types/app/AppShell.d.ts +10 -0
- package/dist-lib/types/app/NamespaceScope.d.ts +11 -0
- package/dist-lib/types/app/applyStudioConfig.d.ts +18 -0
- package/dist-lib/types/app/mount.d.ts +19 -0
- package/dist-lib/types/app/nav.d.ts +91 -0
- package/dist-lib/types/app/routes.d.ts +9 -0
- package/dist-lib/types/app/studioConfig.d.ts +106 -0
- package/dist-lib/types/canvas/Canvas2D.d.ts +18 -0
- package/dist-lib/types/canvas/Canvas3D.d.ts +14 -0
- package/dist-lib/types/canvas/ConnectPanel.d.ts +10 -0
- package/dist-lib/types/canvas/FindPanel.d.ts +14 -0
- package/dist-lib/types/canvas/GraphCanvas.d.ts +66 -0
- package/dist-lib/types/canvas/StylePanel.d.ts +7 -0
- package/dist-lib/types/canvas/eclipse.d.ts +136 -0
- package/dist-lib/types/canvas/imageAssets.d.ts +3 -0
- package/dist-lib/types/canvas/styleConfig.d.ts +48 -0
- package/dist-lib/types/canvas/styleEngine.d.ts +125 -0
- package/dist-lib/types/canvas/styling.d.ts +15 -0
- package/dist-lib/types/components/AdjacencyPanel.d.ts +11 -0
- package/dist-lib/types/components/AnalyticsRunner.d.ts +1 -0
- package/dist-lib/types/components/ConfigurationPanel.d.ts +1 -0
- package/dist-lib/types/components/ConfirmDialog.d.ts +18 -0
- package/dist-lib/types/components/DurabilityNotice.d.ts +18 -0
- package/dist-lib/types/components/ElementDetail.d.ts +11 -0
- package/dist-lib/types/components/ElementTable.d.ts +19 -0
- package/dist-lib/types/components/EmbeddingsTab.d.ts +15 -0
- package/dist-lib/types/components/ErrorBox.d.ts +8 -0
- package/dist-lib/types/components/EventFeedBell.d.ts +16 -0
- package/dist-lib/types/components/EventFeedPanel.d.ts +10 -0
- package/dist-lib/types/components/Field.d.ts +14 -0
- package/dist-lib/types/components/GraphShapePanel.d.ts +1 -0
- package/dist-lib/types/components/InspectLink.d.ts +5 -0
- package/dist-lib/types/components/ListCapNote.d.ts +10 -0
- package/dist-lib/types/components/MutationsPanel.d.ts +1 -0
- package/dist-lib/types/components/NamespaceSwitcher.d.ts +22 -0
- package/dist-lib/types/components/NamespacesPanel.d.ts +11 -0
- package/dist-lib/types/components/NeighborhoodPreview.d.ts +10 -0
- package/dist-lib/types/components/PluginsPanel.d.ts +9 -0
- package/dist-lib/types/components/PropertiesTab.d.ts +4 -0
- package/dist-lib/types/components/PropertyListEditor.d.ts +26 -0
- package/dist-lib/types/components/SampleGraphsPanel.d.ts +3 -0
- package/dist-lib/types/components/SectionHelp.d.ts +11 -0
- package/dist-lib/types/components/SemanticBlockEditor.d.ts +29 -0
- package/dist-lib/types/components/SemanticQueryEditor.d.ts +15 -0
- package/dist-lib/types/components/SettingRow.d.ts +15 -0
- package/dist-lib/types/components/Stat.d.ts +10 -0
- package/dist-lib/types/components/StoredQueriesPanel.d.ts +14 -0
- package/dist-lib/types/components/StoredQueryControls.d.ts +29 -0
- package/dist-lib/types/components/Truncated.d.ts +17 -0
- package/dist-lib/types/components/TruncationBadge.d.ts +6 -0
- package/dist-lib/types/components/TypedLiteralEditor.d.ts +13 -0
- package/dist-lib/types/components/VertexFilterSlot.d.ts +25 -0
- package/dist-lib/types/delegate/DelegateEditor.d.ts +10 -0
- package/dist-lib/types/delegate/DelegateSlot.d.ts +18 -0
- package/dist-lib/types/delegate/editorOptions.d.ts +25 -0
- package/dist-lib/types/delegate/kinds.d.ts +19 -0
- package/dist-lib/types/delegate/markers.d.ts +21 -0
- package/dist-lib/types/delegate/monacoSetup.d.ts +3 -0
- package/dist-lib/types/delegate/nl/NlAssistPanel.d.ts +10 -0
- package/dist-lib/types/delegate/nl/NlBackendConfig.d.ts +12 -0
- package/dist-lib/types/delegate/nl/NlDraftList.d.ts +42 -0
- package/dist-lib/types/delegate/nl/config.d.ts +105 -0
- package/dist-lib/types/delegate/nl/feedback.d.ts +30 -0
- package/dist-lib/types/delegate/nl/format.d.ts +6 -0
- package/dist-lib/types/delegate/nl/generate.d.ts +57 -0
- package/dist-lib/types/delegate/nl/prompt.d.ts +21 -0
- package/dist-lib/types/delegate/nl/useNlRun.d.ts +24 -0
- package/dist-lib/types/delegate/providers.d.ts +26 -0
- package/dist-lib/types/delegate/snippets.d.ts +25 -0
- package/dist-lib/types/embed/F8GraphCanvas.d.ts +37 -0
- package/dist-lib/types/embed/canvas.d.ts +23 -0
- package/dist-lib/types/embed/index.d.ts +14 -0
- package/dist-lib/types/firstrun/FirstRunOverlay.d.ts +10 -0
- package/dist-lib/types/firstrun/FirstRunShow.d.ts +22 -0
- package/dist-lib/types/firstrun/beats.d.ts +23 -0
- package/dist-lib/types/firstrun/firstRunStore.d.ts +38 -0
- package/dist-lib/types/firstrun/mockGraph.d.ts +56 -0
- package/dist-lib/types/firstrun/useBeatTimeline.d.ts +35 -0
- package/dist-lib/types/firstrun/useReducedMotion.d.ts +7 -0
- package/dist-lib/types/instances/registry.d.ts +83 -0
- package/dist-lib/types/instances/types.d.ts +49 -0
- package/dist-lib/types/lib/canvasCap.d.ts +7 -0
- package/dist-lib/types/lib/connectPaths.d.ts +55 -0
- package/dist-lib/types/lib/embeddingProperties.d.ts +6 -0
- package/dist-lib/types/lib/fieldHelp.d.ts +139 -0
- package/dist-lib/types/lib/format.d.ts +16 -0
- package/dist-lib/types/lib/hydrate.d.ts +37 -0
- package/dist-lib/types/lib/indexCapabilities.d.ts +17 -0
- package/dist-lib/types/lib/jsonlGraph.d.ts +42 -0
- package/dist-lib/types/lib/listCaps.d.ts +48 -0
- package/dist-lib/types/lib/literals.d.ts +36 -0
- package/dist-lib/types/lib/namespaceName.d.ts +10 -0
- package/dist-lib/types/lib/neighborhood.d.ts +37 -0
- package/dist-lib/types/lib/patternValidation.d.ts +12 -0
- package/dist-lib/types/lib/restartCopy.d.ts +11 -0
- package/dist-lib/types/lib/sampleLoader.d.ts +95 -0
- package/dist-lib/types/lib/samples.d.ts +87 -0
- package/dist-lib/types/lib/sbomGraph.d.ts +58 -0
- package/dist-lib/types/lib/sectionHelp.d.ts +39 -0
- package/dist-lib/types/lib/semantic.d.ts +95 -0
- package/dist-lib/types/lib/storedQueries.d.ts +43 -0
- package/dist-lib/types/lib/truncate.d.ts +34 -0
- package/dist-lib/types/lib/truncation.d.ts +7 -0
- package/dist-lib/types/lib/vector.d.ts +13 -0
- package/dist-lib/types/main.d.ts +1 -0
- package/dist-lib/types/plugin/PluginEditor.d.ts +20 -0
- package/dist-lib/types/plugin/nl/PluginNlAssistPanel.d.ts +13 -0
- package/dist-lib/types/plugin/nl/pluginPrompt.d.ts +48 -0
- package/dist-lib/types/plugin/scaffolds.d.ts +26 -0
- package/dist-lib/types/screens/AnalyticsScreen.d.ts +8 -0
- package/dist-lib/types/screens/BenchmarkScreen.d.ts +1 -0
- package/dist-lib/types/screens/BrowserScreen.d.ts +6 -0
- package/dist-lib/types/screens/CanvasScreen.d.ts +10 -0
- package/dist-lib/types/screens/ConnectScreen.d.ts +1 -0
- package/dist-lib/types/screens/DashboardScreen.d.ts +13 -0
- package/dist-lib/types/screens/IndexesScreen.d.ts +8 -0
- package/dist-lib/types/screens/IntegrationsScreen.d.ts +14 -0
- package/dist-lib/types/screens/KnowledgeScreen.d.ts +1 -0
- package/dist-lib/types/screens/PathScreen.d.ts +9 -0
- package/dist-lib/types/screens/PluginsScreen.d.ts +1 -0
- package/dist-lib/types/screens/QueryScreen.d.ts +1 -0
- package/dist-lib/types/screens/SamplesScreen.d.ts +7 -0
- package/dist-lib/types/screens/SaveGamesScreen.d.ts +7 -0
- package/dist-lib/types/screens/SubgraphScreen.d.ts +1 -0
- package/dist-lib/types/state/eventFeed.d.ts +63 -0
- package/dist-lib/types/state/feedFilter.d.ts +42 -0
- package/dist-lib/types/state/graphShape.d.ts +37 -0
- package/dist-lib/types/state/instanceStore.d.ts +280 -0
- package/dist-lib/types/state/integrations.d.ts +25 -0
- package/dist-lib/types/state/liveFeed.d.ts +37 -0
- package/dist-lib/types/state/scopeKey.d.ts +8 -0
- package/dist-lib/types/state/status.d.ts +21 -0
- package/dist-lib/typescript-aCo3H3H0.js +343 -0
- package/dist-lib/typespec-BsmjDEu7.js +117 -0
- package/dist-lib/vb-ChHvIDrk.js +372 -0
- package/dist-lib/wgsl-XEp1ju8c.js +439 -0
- package/dist-lib/xml-CSt-F-dl.js +95 -0
- package/dist-lib/yaml-kSsc3ru_.js +206 -0
- package/package.json +98 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hover help for every labeled field in the studio (feature studio-mutations-ux).
|
|
3
|
+
* ONE home per explanation: screens reference these keys via <Field helpKey=…> /
|
|
4
|
+
* help(key); no help copy is inlined at call sites. Keys are grouped by concept —
|
|
5
|
+
* shared concepts first, then per-screen one-offs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FIELD_HELP: {
|
|
8
|
+
readonly elementId: "Numeric id of an existing vertex or edge. Ids are assigned by the server and shown in every result table, the canvas, and the browser.";
|
|
9
|
+
readonly propertyId: "Name of a property (key), e.g. 'age' or 'name'. Properties are typed key-value pairs on a vertex or edge.";
|
|
10
|
+
readonly typedValue: "The value plus its .NET type. The type decides how the server parses, compares, and indexes the value — 42 as Int32 and \"42\" as String are different values.";
|
|
11
|
+
readonly indexId: "Unique name of an index on this instance. Registered indices are suggested live from the server; free typing still works.";
|
|
12
|
+
readonly edgePropertyId: "The edge's type, e.g. 'knows'. Fallen-8 groups a vertex's edges by type; traversals and degree lookups address edges by this name. Not one of the edge's key-value properties.";
|
|
13
|
+
readonly mutVertexLabel: "Optional label used to categorize the new vertex, e.g. 'person'. Labels drive filtering, statistics, and canvas coloring; leave empty for an unlabeled vertex.";
|
|
14
|
+
readonly mutCreationDate: "Optional creation timestamp stored on the element. Enter Unix seconds (e.g. 1713862800) or an ISO date/time, treated as UTC unless it carries an offset; empty stores 0 (epoch).";
|
|
15
|
+
readonly mutProperties: "Initial properties written atomically with the element in the same transaction. Add one row per property; each value is typed.";
|
|
16
|
+
readonly mutEdgeSource: "Id of the existing vertex the edge starts at (its outgoing side). The edge lands in this vertex's adjacency, grouped by the edge's type.";
|
|
17
|
+
readonly mutEdgeTarget: "Id of the existing vertex the edge points to (its incoming side).";
|
|
18
|
+
readonly mutEdgeLabel: "Optional category tag, orthogonal to the edge's type (the edge property id) — not a second copy of it. Leave empty unless it says something the type doesn't.";
|
|
19
|
+
readonly mutRemoveElement: "Id of the vertex or edge to delete. Deleting a vertex also deletes all of its edges. This cannot be undone.";
|
|
20
|
+
readonly lookupKind: "What the id refers to: vertex, edge, or graphelement (either — the server figures out which).";
|
|
21
|
+
readonly maxElements: "Upper bound on how many elements the bulk view loads from GET /graph. Keep it modest on big graphs — this is a browser, not an export (use JSONL export for that).";
|
|
22
|
+
readonly bulkFilter: "Client-side filter over the loaded elements: matches an exact id or a substring of the label.";
|
|
23
|
+
readonly scanKind: "Property scan walks all elements (no index needed); 'ask an index' picks a registered index and offers the query forms its type answers.";
|
|
24
|
+
readonly propertyScope: "Specific key: scan one named property with an operator and typed literal. Any property: a case-insensitive substring search across EVERY property value (numbers and dates included, compared as text) - a cold, un-indexed full-graph discovery scan.";
|
|
25
|
+
readonly searchTerm: "The substring to look for across every property value, case-insensitively. An element matches when any of its values contains it.";
|
|
26
|
+
readonly searchLabel: "Optional: restrict the search to elements with exactly this label. Leave empty to search every label.";
|
|
27
|
+
readonly scanOperator: "How each element's property value is compared against the literal, using the literal's type ordering.";
|
|
28
|
+
readonly fulltextQuery: "Search text for the fulltext index; results come back scored with highlights.";
|
|
29
|
+
readonly spatialElementId: "Id of the element to search around; the spatial index returns everything within the given distance of it.";
|
|
30
|
+
readonly spatialDistance: "Maximum distance from the reference element, in the spatial index's units.";
|
|
31
|
+
readonly rangeLeftLimit: "Lower bound of the index range scan (typed, like every literal).";
|
|
32
|
+
readonly rangeRightLimit: "Upper bound of the index range scan (typed, like every literal).";
|
|
33
|
+
readonly rangeIncludeLeft: "Whether elements exactly at the lower bound are included (≥ vs >).";
|
|
34
|
+
readonly rangeIncludeRight: "Whether elements exactly at the upper bound are included (≤ vs <).";
|
|
35
|
+
readonly vectorQuery: "The query embedding, as a JSON array or comma-separated floats. Its dimension must match the index dimension exactly.";
|
|
36
|
+
readonly vectorK: "How many nearest neighbours to return (top-k).";
|
|
37
|
+
readonly vectorKind: "Restrict matches to vertices, edges, or allow both ('any').";
|
|
38
|
+
readonly vectorLabelConstraint: "Optional label filter applied BEFORE top-k — you still get k results, all carrying this label.";
|
|
39
|
+
readonly scanResultType: "Restrict matches to vertices, edges, or return both.";
|
|
40
|
+
readonly scanLiteral: "The typed value each element's property is compared against.";
|
|
41
|
+
readonly indexQueryForm: "How to ask this index. The forms offered come from the index's server-reported capabilities (its type decides what it can answer).";
|
|
42
|
+
readonly indexContentElementId: "Id of the vertex or edge to add to / remove from the index.";
|
|
43
|
+
readonly indexContentKey: "The typed key the element is filed under — index lookups compare against exactly this value and type.";
|
|
44
|
+
readonly indexPluginType: "Index plugin to instantiate. The list comes from the server's plugin discovery. Only VectorIndex takes creation options (dimension, metric); SpatialIndex cannot be created over REST.";
|
|
45
|
+
readonly vectorDimension: "Fixed embedding dimension for the new vector index; every vector added later must have exactly this many components.";
|
|
46
|
+
readonly vectorMetric: "Similarity metric the vector index uses. Cosine/DotProduct: higher score is better; L2: lower is better.";
|
|
47
|
+
readonly vectorAddElementId: "Id of the vertex or edge this embedding belongs to.";
|
|
48
|
+
readonly vectorAddPropertyId: "Property on the element that holds the embedding; the index reads the vector from there (WAL-recoverable, the honest default).";
|
|
49
|
+
readonly vectorAddVector: "The embedding itself, pasted as a JSON array or comma-separated floats — stored only in the index, not on the element.";
|
|
50
|
+
readonly vectorBindEmbeddingName: "Optional: bind this vector index to a named element embedding. A bound index maintains itself as a projection of that embedding — you write embeddings on the elements and the index follows; explicit vector-adds are rejected. Leave empty for a raw (bring-your-own-vector) index.";
|
|
51
|
+
readonly vectorModel: "Optional model-identity string this index expects its vectors to come from (e.g. 'bge-micro-v2#384#Cosine'). The embedding provider refuses to write mismatched vectors; a search whose provider identity differs answers 409. Diagnostic only for a raw index.";
|
|
52
|
+
readonly embeddingSearchText: "Search text. The embedding provider embeds it once (server-side), then runs kNN — you never handle the vector. Needs the provider enabled on this instance.";
|
|
53
|
+
readonly embeddingName: "Name of the embedding to read/write on this element, e.g. 'default'. Letters, digits, underscore, dash; max 64 chars. Different names hold independent vectors (and may differ in dimension).";
|
|
54
|
+
readonly embeddingVectorPaste: "The embedding vector, pasted as a JSON array or comma-separated floats. The element is the source of truth; any vector index bound to this name updates automatically on save.";
|
|
55
|
+
readonly embeddingText: "Text to embed onto this element via the server's embedding provider (stored with a model-identity stamp). Needs the provider enabled; otherwise paste a vector.";
|
|
56
|
+
readonly embeddingShowReserved: "Show the raw reserved properties ($embedding:… and $embeddingModel:…) in the plain property table. They are normally folded into the Embeddings tab.";
|
|
57
|
+
readonly semanticQuerySource: "Where the query vector comes from: paste a vector, or type text the embedding provider embeds once before the traversal starts (provider-gated).";
|
|
58
|
+
readonly semanticQueryVector: "The query vector elements are scored against, pasted as a JSON array or comma-separated floats. Embedded once, up front — the traversal itself runs no model.";
|
|
59
|
+
readonly semanticQueryText: "Query text the embedding provider embeds once before the traversal. Mutually exclusive with a pasted vector; needs the provider enabled (else the server 403s).";
|
|
60
|
+
readonly semanticEmbeddingName: "Which named element embedding to score against (default 'default'). Elements without it are simply not matched.";
|
|
61
|
+
readonly semanticMetric: "Similarity metric: Cosine/DotProduct (higher is closer) or L2 (lower is closer). Must suit the embeddings; bit-identical to the vector index's scoring.";
|
|
62
|
+
readonly semanticMinScore: "Declarative filter: keep only elements whose similarity is at least this (Cosine/DotProduct) or at most this (L2). Pure data — it compiles no C#.";
|
|
63
|
+
readonly vertexSlotMode: "How this vertex slot filters: match everything, a compiled C# fragment, or a semantic threshold against the request's semantic query (pure data — no C#). One owner per slot.";
|
|
64
|
+
readonly slotSemanticThreshold: "Vertices pass this slot when their embedding scores at least this (Cosine/DotProduct) or at most this (L2) against the semantic query. Vertices without the embedding never pass.";
|
|
65
|
+
readonly semanticCostBySimilarity: "Declarative cost (DIJKSTRA paths only): weight each vertex by similarity so the search prefers close vertices (Cosine cost = 1 − score; L2 = distance). Not available under DotProduct.";
|
|
66
|
+
readonly pathFrom: "Id of the vertex the path search starts from.";
|
|
67
|
+
readonly pathTo: "Id of the vertex the path search must reach.";
|
|
68
|
+
readonly pathAlgorithm: "Path plugin to use, e.g. BLS (breadth-first) or DIJKSTRA (cheapest paths by cost).";
|
|
69
|
+
readonly pathMaxDepth: "Maximum number of hops a path may have; caps the search space.";
|
|
70
|
+
readonly pathMaxResults: "Maximum number of paths returned (for Dijkstra: the K cheapest).";
|
|
71
|
+
readonly pathMaxWeight: "Upper bound on a path's total cost; paths weighing more are discarded.";
|
|
72
|
+
readonly connectScope: "Which canvas vertices are the start/end points: every vertex on the canvas, or only a subset you pick below. A shortest path (BLS) is searched for each unordered pair.";
|
|
73
|
+
readonly subgraphName: "Unique name the subgraph is registered under; used to fetch, recalculate, and delete it later.";
|
|
74
|
+
readonly subgraphFrom: "Optional name of an existing subgraph to search WITHIN instead of the whole graph (nesting).";
|
|
75
|
+
readonly patternType: "Step kind in the pattern sequence: Vertex matches a vertex, Edge one hop, VariableLengthEdge a min..max hop chain. Steps alternate vertex ↔ edge, starting with a vertex.";
|
|
76
|
+
readonly patternName: "Optional name for this pattern step; matched elements are reported under it in the result.";
|
|
77
|
+
readonly patternDirection: "Which way the edge step is followed from the previous vertex: outgoing, incoming, or either.";
|
|
78
|
+
readonly patternMinLength: "Minimum number of hops this variable-length step must take.";
|
|
79
|
+
readonly patternMaxLength: "Maximum number of hops this variable-length step may take (capped at 100).";
|
|
80
|
+
readonly analyticsAlgorithm: "Analytics plugin to run; the description under the picker explains what the selected one computes.";
|
|
81
|
+
readonly analyticsVertexLabel: "Only consider vertices with this label; empty runs on the whole graph.";
|
|
82
|
+
readonly analyticsEdgeProperty: "Only traverse edges of this type (their edge property id), e.g. 'knows'; empty traverses all edges.";
|
|
83
|
+
readonly analyticsDirection: "Edge direction the algorithm follows: in, out, or both. Empty keeps the algorithm's default.";
|
|
84
|
+
readonly analyticsMaxResults: "How many top-scored entries the server returns; the computation itself still runs over the whole (filtered) graph.";
|
|
85
|
+
readonly analyticsMaxIterations: "Iteration cap for iterative algorithms (e.g. PageRank rounds); empty keeps the algorithm's default.";
|
|
86
|
+
readonly analyticsTimeBudget: "Wall-clock budget in seconds; the run stops with partial results when it is exhausted (default 30).";
|
|
87
|
+
readonly analyticsDamping: "PageRank damping factor d (probability of following an edge vs. jumping anywhere); 0.85 is the classic choice.";
|
|
88
|
+
readonly analyticsEpsilon: "Convergence threshold on the total (L1-summed) score change between rounds; iteration stops once the sum falls below it.";
|
|
89
|
+
readonly analyticsWriteBack: "When checked, the run also stores each vertex's score as a property under the key below (asks for confirmation first).";
|
|
90
|
+
readonly analyticsWriteBackKey: "Property key the per-vertex scores are written to, e.g. 'analytics.pagerank'.";
|
|
91
|
+
readonly benchNodeCount: "Vertices to create IN THE ACTIVE NAMESPACE. The scale preset (100k × 10) builds ~1M edges — expect seconds of server work and real memory.";
|
|
92
|
+
readonly benchEdgesPerVertex: "Out-edges added PER VERTEX (total edges ≈ nodes × this).";
|
|
93
|
+
readonly benchDistribution: "How edge targets are drawn: uniform (flat, no hubs) or preferential (Barabási–Albert rich-get-richer — hubs emerge, analytics show structure).";
|
|
94
|
+
readonly benchIterations: "Timed passes over every edge of the currently loaded graph; more iterations tighten the median/stddev.";
|
|
95
|
+
readonly loadPath: "Server-side path of the save game to load — resolved on the machine the instance runs on, not in this browser.";
|
|
96
|
+
readonly exportVertexLabel: "Only export vertices with this label (their edges follow); empty exports all.";
|
|
97
|
+
readonly exportEdgeLabel: "Only export edges with this label; empty exports all.";
|
|
98
|
+
readonly exportEdgeType: "Only export edges of this type (their edge property id), e.g. 'knows'; combines with the edge label filter. Empty exports all.";
|
|
99
|
+
readonly instanceSwitcher: "The Fallen-8 instance every screen talks to. Register more instances on the Connect screen.";
|
|
100
|
+
readonly canvasRenderer: "The canvas projection, both WebGL: 2D (Sigma.js — pan/zoom, crisp labels) or 3D (three.js — orbit with the mouse, labels on hover). Styling, path overlays, and subgraph results work identically in both.";
|
|
101
|
+
readonly canvasLayout: "How vertices are placed. 2D: force (ForceAtlas2 physics, clusters emerge), circular ring, circle pack grouped by label, grid, or random. 3D: force (d3-force-3d) or DAG modes that layer the graph top-down / radially (cycles are tolerated, best-effort).";
|
|
102
|
+
readonly canvasNodeColor: "What decides a node's color: its label (the default) or a property whose key you type (seeded with the first property on the canvas, then editable). You don't hand-pick the colors: each distinct value gets a stable color from a fixed palette, unless every value is numeric, in which case nodes shade along a cyan→pink gradient. Missing or blank values render grey.";
|
|
103
|
+
readonly canvasNodeSize: "What decides a node's size: fixed, a numeric property whose key you type (min-max scaled), or the node's in-/out-/total degree counted over the edges currently on the canvas (expand neighbors and sizes update).";
|
|
104
|
+
readonly canvasNodeImage: "Property whose value renders AS the node: an http(s) or data URL loads that image; any other value (e.g. an emoji like 🦊) is drawn by the studio itself — emoticons need no hosting. Nodes without the property stay circles.";
|
|
105
|
+
readonly canvasEdgeColor: "What decides an edge's color: its label (default) or a property whose key you type (seeded with the first property on the canvas, then editable), with the same auto palette and cyan→pink numeric gradient rules as node colors, and missing values grey.";
|
|
106
|
+
readonly canvasEdgeWidth: "What decides an edge's width: fixed, or a numeric property whose key you type, min-max scaled into the width range. Edges without a numeric value keep the default width.";
|
|
107
|
+
readonly canvasNodeLabels: "Show vertex labels on the canvas (2D: always visible, 3D: on hover). Past 5,000 rendered elements labels are dropped automatically to protect the frame rate.";
|
|
108
|
+
readonly canvasEdgeLabels: "Show edge-container names on edges (2D: always visible, 3D: on hover). Subject to the same 5,000-element degrade threshold as node labels.";
|
|
109
|
+
readonly canvasEdgeArrows: "Draw arrowheads pointing at each edge's target vertex, making direction visible in both 2D and 3D.";
|
|
110
|
+
readonly saveGameDeleteFiles: "Also delete the checkpoint's files on the server's disk, not just its registry entry. The data is then unrecoverable.";
|
|
111
|
+
readonly feedKinds: "Event kinds to show and count. Dimensions combine like the REST filter grammar: AND across dimensions, OR within one. Resync events are exempt and always shown, because they mean continuity was lost.";
|
|
112
|
+
readonly feedElements: "Restrict to vertex or edge events: the elements dimension of the REST filter grammar.";
|
|
113
|
+
readonly feedLabels: "Exact, case-sensitive labels to match (Enter or comma adds one). An element without a label never matches a labels filter, the same rule the server applies.";
|
|
114
|
+
readonly feedKeys: "Exact property keys to match (Enter or comma adds one). Only property events carry a key, so any keys filter hides creates and removes: the same caveat as the REST grammar.";
|
|
115
|
+
readonly feedCopyRest: "Copy the configured filter as the equivalent GET /changefeed query, ready for curl or a service. Credentials never go into the URL.";
|
|
116
|
+
readonly instanceName: "Display name for this connection, shown in the instance switcher.";
|
|
117
|
+
readonly instanceUrl: "Base URL of the Fallen-8 REST API, e.g. http://localhost:5000. Leave empty when the studio is served by the instance itself (same origin).";
|
|
118
|
+
readonly instanceApiKey: "API key for instances that require one; sent as a Bearer token on every request and kept in this browser only.";
|
|
119
|
+
readonly storedQuery: "A named, pre-compiled filter set registered under POST /storedquery. Invoking by name compiles nothing — the pinned artifact runs.";
|
|
120
|
+
readonly storedQueryName: "Unique name the query is registered under and later invoked by. Allowed: letters, digits, underscore, dash; max 128 characters.";
|
|
121
|
+
readonly storedQueryDescription: "Optional human-readable note shown next to the query in the library list.";
|
|
122
|
+
readonly pluginCategory: "What you are authoring: an algorithm plugin (invoked transparently by name through the path/subgraph/analytics endpoints) or a graph function (a stored read procedure invoked by name).";
|
|
123
|
+
readonly pluginContract: "Which algorithm interface the source implements: Path (IShortestPathAlgorithm), SubGraph (ISubGraphAlgorithm) or Analytics (IGraphAnalyticsAlgorithm). Functions have a single fixed contract.";
|
|
124
|
+
readonly pluginName: "Unique name the plugin is registered under and invoked by (per namespace). Must equal the type's PluginName in the source. Allowed: letters, digits, underscore, dash; max 128 characters.";
|
|
125
|
+
readonly pluginDescription: "Optional human-readable note shown next to the plugin in the registry list.";
|
|
126
|
+
readonly pluginParameters: "Call-time parameters passed to the graph function. Values are strings in v1 (the function parses what it needs).";
|
|
127
|
+
readonly confirmTyped: "Safety catch: type the target instance's name exactly to arm the destructive action. Nothing happens until it matches.";
|
|
128
|
+
readonly nlIntent: "Describe the filter in plain language; the assistant drafts a C# filter fragment from it, which you still review and commit yourself.";
|
|
129
|
+
readonly nlBackend: "Where natural-language-to-filter translation runs: a preset endpoint or a custom one.";
|
|
130
|
+
readonly nlPreset: "Pre-configured model endpoint to use.";
|
|
131
|
+
readonly nlEndpoint: "URL of the model API endpoint that translates your prompt into a filter fragment.";
|
|
132
|
+
readonly nlApi: "Wire protocol the endpoint speaks (which request/response shape to use).";
|
|
133
|
+
readonly nlModel: "Model identifier sent to the endpoint, e.g. a model name the API expects.";
|
|
134
|
+
readonly nlTemperature: "Sampling temperature; lower is more deterministic, which suits code generation.";
|
|
135
|
+
readonly nlApiKey: "Credential for the model endpoint. Sent only to that endpoint, never to the Fallen-8 instance.";
|
|
136
|
+
};
|
|
137
|
+
export type FieldHelpKey = keyof typeof FIELD_HELP;
|
|
138
|
+
/** Accessor for odd call sites (checkbox labels, aria-labeled inputs, toggles). */
|
|
139
|
+
export declare const help: (key: FieldHelpKey) => string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Compact human numbers for stat tiles (592134058.33 -> "592.1M"). */
|
|
2
|
+
export declare function formatCompact(value: number): string;
|
|
3
|
+
/** Full number with grouping, for exact values ("10,001,000"). */
|
|
4
|
+
export declare function formatExact(value: number): string;
|
|
5
|
+
/**
|
|
6
|
+
* The one glyph this UI renders for a value the server does not have, so a row cannot mix two
|
|
7
|
+
* spellings of "absent" in one table and read as two different states.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ABSENT = "-";
|
|
10
|
+
/**
|
|
11
|
+
* A count the server may not have: grouped digits when it exists, the absent glyph when it does
|
|
12
|
+
* not. The absent case is real - a namespace the server catalogs but did not load reports
|
|
13
|
+
* null counts rather than zeros (feature namespace-startup-load) - and it must not render as
|
|
14
|
+
* "0", which would tell the operator a populated graph is empty.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatCountOrDash(value: number | null | undefined): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { EdgeREST, VertexREST } from "../api/types";
|
|
2
|
+
import type { InstanceConfig } from "../instances/types";
|
|
3
|
+
/**
|
|
4
|
+
* Scans return bare id lists (FR-8); this hydrates them into elements. Missing ids (deleted
|
|
5
|
+
* between scan and hydration) are skipped, not errors.
|
|
6
|
+
*
|
|
7
|
+
* ONE batch read does most of the work: POST /graphelements/get answers a whole page of ids in a
|
|
8
|
+
* single request, and what it returns - id, label, properties, kind - is a COMPLETE VertexREST,
|
|
9
|
+
* because a vertex carries no adjacency in this API. Five hundred ids used to be twenty rounds of
|
|
10
|
+
* twenty-five requests.
|
|
11
|
+
*
|
|
12
|
+
* Edges are the exception and are still fetched one by one. The batch route omits an edge's
|
|
13
|
+
* endpoints deliberately (shipping every endpoint of every element would dominate a several-hundred
|
|
14
|
+
* element payload), and the canvas cannot draw an edge without them, so an id the batch reports as
|
|
15
|
+
* an edge is re-read through GET /graphelement/{id}. A result that is all vertices - which is what
|
|
16
|
+
* a scan or an analytics run usually produces - costs one request; one that is all edges costs one
|
|
17
|
+
* more than before. The rounds below keep the same width.
|
|
18
|
+
*
|
|
19
|
+
* Two properties the caller relies on: the result is in the order of the ids it passed (an edge is
|
|
20
|
+
* read later but still renders where it was scanned), and progress counts ATTEMPTS, so a page with
|
|
21
|
+
* a deleted id still reaches its total. An aborted signal stops the work rather than degrading it.
|
|
22
|
+
*/
|
|
23
|
+
export declare const HYDRATION_BATCH_SIZE = 25;
|
|
24
|
+
export declare const HYDRATION_DEFAULT_CAP = 500;
|
|
25
|
+
export interface HydrationProgress {
|
|
26
|
+
done: number;
|
|
27
|
+
total: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function isEdge(element: VertexREST | EdgeREST): element is EdgeREST;
|
|
30
|
+
export declare function hydrateElements(instance: InstanceConfig, ids: number[], options?: {
|
|
31
|
+
cap?: number;
|
|
32
|
+
onProgress?: (progress: HydrationProgress) => void;
|
|
33
|
+
signal?: AbortSignal;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
elements: (VertexREST | EdgeREST)[];
|
|
36
|
+
capped: boolean;
|
|
37
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IndexDescription } from "../api/types";
|
|
2
|
+
/**
|
|
3
|
+
* The client side of the index-capability contract (feature index-workspace): which
|
|
4
|
+
* query forms the Query screen offers for an index. The server's /status inventory
|
|
5
|
+
* reports capabilities derived from the index's interfaces; this module narrows them to
|
|
6
|
+
* the families the UI knows and holds the fallback for servers predating the field.
|
|
7
|
+
*/
|
|
8
|
+
export type IndexCapability = "equality" | "range" | "fulltext" | "spatial" | "vector";
|
|
9
|
+
export declare const ALL_CAPABILITIES: readonly IndexCapability[];
|
|
10
|
+
/**
|
|
11
|
+
* The query forms to offer. Unknown index (free-form id, no inventory entry) or unknown
|
|
12
|
+
* third-party plugin on an old server: every form stays available. A mismatched form is
|
|
13
|
+
* NOT a server error — only the vector endpoint rejects; equality/range/fulltext/spatial
|
|
14
|
+
* answer EMPTY for an index they cannot serve — so the Query screen adds a hint next to
|
|
15
|
+
* an empty unknown-index result instead of pretending the server would have complained.
|
|
16
|
+
*/
|
|
17
|
+
export declare function indexCapabilities(index: IndexDescription | undefined | null): readonly IndexCapability[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fallen8-jsonl emitter (feature sample-graphs): builds interchange files the server's
|
|
3
|
+
* POST /bulk/import consumes. ONE emitter, two consumers — the sample build script
|
|
4
|
+
* (scripts/build-samples.ts) and the GitHub dependency card, which transforms an SBOM
|
|
5
|
+
* in the browser. The format contract (version 2: typed {type,value} pairs, strict
|
|
6
|
+
* fields, the System.Single[] embedding encoding) is owned by the server's
|
|
7
|
+
* JsonlGraphFormat; this module only mirrors it.
|
|
8
|
+
*/
|
|
9
|
+
export interface JsonlProperty {
|
|
10
|
+
type: string;
|
|
11
|
+
value: string;
|
|
12
|
+
}
|
|
13
|
+
export interface JsonlVertex {
|
|
14
|
+
id: number;
|
|
15
|
+
label?: string;
|
|
16
|
+
properties?: Record<string, JsonlProperty>;
|
|
17
|
+
}
|
|
18
|
+
export interface JsonlEdge {
|
|
19
|
+
id: number;
|
|
20
|
+
source: number;
|
|
21
|
+
target: number;
|
|
22
|
+
edgePropertyId: string;
|
|
23
|
+
label?: string;
|
|
24
|
+
properties?: Record<string, JsonlProperty>;
|
|
25
|
+
}
|
|
26
|
+
/** Fixed creationDate for deterministic dataset builds (2026-01-01T00:00:00Z). */
|
|
27
|
+
export declare const SAMPLE_CREATION_DATE = 1767225600;
|
|
28
|
+
/** The current fallen8-jsonl version; always stamped (System.Single[] is always available). */
|
|
29
|
+
export declare const JSONL_FORMAT_VERSION = 2;
|
|
30
|
+
/** Typed-pair constructors for the property types the datasets use. */
|
|
31
|
+
export declare const prop: {
|
|
32
|
+
string: (value: string) => JsonlProperty;
|
|
33
|
+
int32: (value: number) => JsonlProperty;
|
|
34
|
+
double: (value: number) => JsonlProperty;
|
|
35
|
+
/** An embedding vector, rounded to 5 decimals (~1e-5 cosine error, much smaller files). */
|
|
36
|
+
singleArray: (vector: readonly number[]) => JsonlProperty;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Serializes a whole graph to an importable jsonl string: meta line (exact counts, always
|
|
40
|
+
* the current format version), then vertices, then edges.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildJsonlGraph(vertices: JsonlVertex[], edges: JsonlEdge[]): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Studio-wide list limits — two INDEPENDENT ideas, both living here:
|
|
4
|
+
*
|
|
5
|
+
* 1. LIST_MAX_ROWS — a hard safety ceiling. No list ever renders more than this many rows (a
|
|
6
|
+
* runaway-DOM guard). It is NOT a display cap you hit in normal use; on the rare occasion a
|
|
7
|
+
* list is bigger, <ListCapNote> says so. Everything below the ceiling is always rendered and
|
|
8
|
+
* reachable by scrolling.
|
|
9
|
+
*
|
|
10
|
+
* 2. SCROLL_ROWS — a per-list DISPLAY threshold, in ROWS. A list shorter than its threshold
|
|
11
|
+
* renders at its natural height with NO scrollbar; once it grows past the threshold its
|
|
12
|
+
* height is capped (to about that many rows) and a scrollbar appears, so you scroll through
|
|
13
|
+
* everything. Applied purely in CSS: a `.scroll-list` wrapper reads the count from the
|
|
14
|
+
* `--scroll-rows` custom property (see index.css and the `scrollRows` helper below).
|
|
15
|
+
*
|
|
16
|
+
* Tune the numbers here, not per call site.
|
|
17
|
+
*/
|
|
18
|
+
export declare const LIST_MAX_ROWS = 10000;
|
|
19
|
+
/** Rows a list shows before it caps its height and scrolls. Add per-list entries as needed. */
|
|
20
|
+
export declare const SCROLL_ROWS: {
|
|
21
|
+
/** Any list without a reason to differ. */
|
|
22
|
+
readonly default: 12;
|
|
23
|
+
/** Save-game registry (SaveGamesScreen). */
|
|
24
|
+
readonly saveGames: 15;
|
|
25
|
+
/** Registered instances (ConnectScreen). */
|
|
26
|
+
readonly instances: 8;
|
|
27
|
+
/** Namespaces (NamespacesPanel). */
|
|
28
|
+
readonly namespaces: 12;
|
|
29
|
+
/** Ingested documents (KnowledgeScreen). */
|
|
30
|
+
readonly documents: 12;
|
|
31
|
+
/** Integrations this instance's runtime ships (IntegrationsScreen): a short, curated list. */
|
|
32
|
+
readonly integrations: 8;
|
|
33
|
+
/** One run's diagnostics (IntegrationsScreen): a CSV with many bad rows can be long. */
|
|
34
|
+
readonly diagnostics: 10;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Slice {@link items} to the hard ceiling, reporting the true total so a call site can flag the
|
|
38
|
+
* (rare) truncation via <ListCapNote>. This is the ONLY place a list's rows are ever dropped.
|
|
39
|
+
*/
|
|
40
|
+
export declare function capList<T>(items: readonly T[], max?: number): {
|
|
41
|
+
shown: T[];
|
|
42
|
+
total: number;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Inline style that tells a `.scroll-list` wrapper how many rows to show before it caps its
|
|
46
|
+
* height and scrolls. Custom CSS properties need the cast; this keeps it in one place.
|
|
47
|
+
*/
|
|
48
|
+
export declare function scrollRows(rows: number): CSSProperties;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { IndexKeySpecification, LiteralSpecification, PropertySpecification } from "../api/types";
|
|
2
|
+
/**
|
|
3
|
+
* Typed-literal editing (FR-9): everywhere the API takes
|
|
4
|
+
* { value | propertyValue, fullQualifiedTypeName } the UI offers these types instead of
|
|
5
|
+
* free-text JSON. Values always travel as strings; the server converts by type name.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LITERAL_TYPES: readonly ["System.String", "System.Int32", "System.Int64", "System.Double", "System.Boolean", "System.DateTime"];
|
|
8
|
+
export type LiteralTypeName = (typeof LITERAL_TYPES)[number];
|
|
9
|
+
export interface TypedValue {
|
|
10
|
+
type: LiteralTypeName;
|
|
11
|
+
raw: string;
|
|
12
|
+
}
|
|
13
|
+
/** Validates the raw text for its declared type; returns an error message or null. */
|
|
14
|
+
export declare function validateTypedValue(value: TypedValue): string | null;
|
|
15
|
+
/** Normalizes the raw text into the canonical wire string for its type. */
|
|
16
|
+
export declare function toWireValue(value: TypedValue): string;
|
|
17
|
+
export declare function toLiteral(value: TypedValue): LiteralSpecification;
|
|
18
|
+
export declare function toPropertySpec(propertyId: string, value: TypedValue): PropertySpecification;
|
|
19
|
+
export declare function toIndexKey(value: TypedValue): IndexKeySpecification;
|
|
20
|
+
/**
|
|
21
|
+
* Parses the optional creation-date input on the mutation forms into the wire value:
|
|
22
|
+
* a uint Unix timestamp in SECONDS. Empty keeps today's behaviour (0 = epoch); digits
|
|
23
|
+
* are taken as seconds verbatim; anything else must be ISO-shaped (YYYY-MM-DD…) and is
|
|
24
|
+
* treated as UTC unless it carries an explicit offset — Date.parse would otherwise read
|
|
25
|
+
* offset-less date-times as LOCAL time, storing a different value per browser timezone
|
|
26
|
+
* (and accept garbage like "12.5" as a date).
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseCreationDate(raw: string): {
|
|
29
|
+
ok: true;
|
|
30
|
+
seconds: number;
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
error: string;
|
|
34
|
+
};
|
|
35
|
+
/** Renders a property value received from the API for table display. */
|
|
36
|
+
export declare function formatPropertyValue(value: unknown): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client mirror of the server's namespace-name rule (Fallen8Namespaces.IsValidName). Names
|
|
3
|
+
* are permissive — any case, spaces, punctuation, Unicode — because on-disk storage is keyed
|
|
4
|
+
* by an internal id, not the name; a name is only a display label, a map key, and a URL PATH
|
|
5
|
+
* SEGMENT (/ns/{name}/…, /q/{name}/…). That last role fixes the only hard limits: no "/" or
|
|
6
|
+
* "\" (an encoded slash can't round-trip through the server), no control characters, not
|
|
7
|
+
* "."/".." (path-traversal tokens), no leading/trailing whitespace, and a length cap.
|
|
8
|
+
*/
|
|
9
|
+
export declare const NAMESPACE_NAME_MAX = 63;
|
|
10
|
+
export declare function isValidNamespaceName(name: string): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { EdgeREST, VertexREST } from "../api/types";
|
|
2
|
+
import type { InstanceConfig } from "../instances/types";
|
|
3
|
+
/**
|
|
4
|
+
* 1-hop neighborhood fetch over the per-property adjacency routes (feature
|
|
5
|
+
* adjacency-preview) — the one home for "edge-id lists → hydrated edges + endpoint
|
|
6
|
+
* vertices", shared by the Canvas screen's expand-on-demand and the Browser screen's
|
|
7
|
+
* adjacency preview. The REST Edge DTO carries no property id; the per-property listings
|
|
8
|
+
* do, so the attribution happens here. Failed hydrations are skipped, not errors.
|
|
9
|
+
*/
|
|
10
|
+
/** Edge cap for the adjacency preview — a teaser, not the canvas working set. */
|
|
11
|
+
export declare const PREVIEW_EDGE_CAP = 60;
|
|
12
|
+
/** Edge cap for canvas expand-on-demand (pre-feature constant, unchanged). */
|
|
13
|
+
export declare const EXPAND_EDGE_CAP = 200;
|
|
14
|
+
export interface Neighborhood {
|
|
15
|
+
/** Hydrated endpoint vertices, minus skipNeighborIds and failed fetches. */
|
|
16
|
+
vertices: VertexREST[];
|
|
17
|
+
edges: EdgeREST[];
|
|
18
|
+
/** true when the cap cut off edges or endpoint vertices. */
|
|
19
|
+
truncated: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A vertex's adjacent edges plus their endpoint vertices. Self-loops appear once (the
|
|
23
|
+
* "out" attribution wins). The cap applies to edges and endpoint vertices alike.
|
|
24
|
+
*/
|
|
25
|
+
export declare function fetchVertexNeighborhood(instance: InstanceConfig, vertexId: number, options: {
|
|
26
|
+
cap: number;
|
|
27
|
+
skipNeighborIds?: ReadonlySet<number>;
|
|
28
|
+
}): Promise<Neighborhood>;
|
|
29
|
+
/**
|
|
30
|
+
* An edge's endpoint vertices plus EVERY edge between them, both directions — found by
|
|
31
|
+
* intersecting the endpoints' id lists (out(s)∩in(t) ∪ in(s)∩out(t)), never by hydrating
|
|
32
|
+
* a supernode's full edge set. The focus edge is always first in the result, even if the
|
|
33
|
+
* listings raced a mutation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchEdgeNeighborhood(instance: InstanceConfig, edge: EdgeREST, options: {
|
|
36
|
+
cap: number;
|
|
37
|
+
}): Promise<Neighborhood>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PatternSpecification } from "../api/types";
|
|
2
|
+
/**
|
|
3
|
+
* Client-side pattern-sequence rules (FR-16), mirrored from the subgraph spec: the
|
|
4
|
+
* sequence alternates vertex ↔ edge starting with a vertex, a level-0 edge (sequence
|
|
5
|
+
* starting with an edge step) is also legal, VariableLengthEdge needs min ≤ max and the
|
|
6
|
+
* API caps max length at 100. The server's 400 is still surfaced if it disagrees.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAX_VARIABLE_EDGE_LENGTH = 100;
|
|
9
|
+
/** Structural subset so both wire specs and builder drafts validate with one function. */
|
|
10
|
+
type PatternStep = Pick<PatternSpecification, "type" | "minLength" | "maxLength">;
|
|
11
|
+
export declare function validatePatternSequence(patterns: PatternStep[]): string | null;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Appended to a message about a change that only the next boot will act on. */
|
|
2
|
+
export declare const TAKES_EFFECT_ON_RESTART = "takes effect on restart";
|
|
3
|
+
/** The short chip beside a row whose stored value is not the value in force. */
|
|
4
|
+
export declare const RESTART_PENDING_CHIP = "restart to apply";
|
|
5
|
+
/**
|
|
6
|
+
* The banner summary. Deliberately "differs from what this instance started with" rather than "you
|
|
7
|
+
* changed this": appsettings.json reloads on change and nothing observes it, so this lights up when
|
|
8
|
+
* an operator hand-edits that file too, and blaming the reader for someone else's edit is worse than
|
|
9
|
+
* being vague.
|
|
10
|
+
*/
|
|
11
|
+
export declare function restartBannerSummary(count: number): string;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sample-graph loader (feature sample-graphs). Fetches a curated dataset just-in-time and
|
|
3
|
+
* ingests it: (optional wipe), POST /bulk/import, create the manifest's index recipes, hand
|
|
4
|
+
* the imported elements back for the canvas. No embedding work happens for baked datasets:
|
|
5
|
+
* the vectors are in the fallen8-jsonl file and a bound VectorIndex projects them on import.
|
|
6
|
+
*
|
|
7
|
+
* A sample may additionally carry DOCUMENTS (feature knowledge-demo), which adds three steps
|
|
8
|
+
* after index creation: seed the equality indexes, bind the semantic layer, then ingest the
|
|
9
|
+
* documents through the real /document pipeline. All three are conditional on their manifest
|
|
10
|
+
* field, so a document-free sample follows exactly the path it always did.
|
|
11
|
+
*/
|
|
12
|
+
import type { GraphREST, StatusREST } from "../api/types";
|
|
13
|
+
import type { InstanceConfig } from "../instances/types";
|
|
14
|
+
import type { SampleEmbeddingInfo, SampleManifestEntry, SamplesManifest } from "./samples";
|
|
15
|
+
/**
|
|
16
|
+
* Where the datasets live. Default is SAME-ORIGIN /samples: the datasets ship with the app
|
|
17
|
+
* (Vite serves the repo samples/ in dev and copies it into wwwroot at build; the apiApp serves
|
|
18
|
+
* it), so the gallery shows the samples the app was built with, a newly added sample appears on
|
|
19
|
+
* rebuild without a GitHub round-trip, and it works offline. Override with VITE_F8_SAMPLES_BASE
|
|
20
|
+
* to point at a remote mirror (e.g. GitHub raw `.../<ref>/samples`) or a fork. No trailing slash.
|
|
21
|
+
*/
|
|
22
|
+
export declare function samplesBaseUrl(): string;
|
|
23
|
+
export declare function fetchSamplesManifest(baseUrl: string, signal?: AbortSignal): Promise<SamplesManifest>;
|
|
24
|
+
export type LoadStep = "wiping" | "fetching" | "importing" | "indexing" | "seeding" | "binding" | "ingesting" | "rendering";
|
|
25
|
+
/** Progress sink; `detail` names the current document or seeding count when there is one. */
|
|
26
|
+
export type LoadStepReporter = (step: LoadStep, detail?: string) => void;
|
|
27
|
+
export interface LoadResult {
|
|
28
|
+
graph: GraphREST;
|
|
29
|
+
verticesCreated: number;
|
|
30
|
+
edgesCreated: number;
|
|
31
|
+
/** Index keys written by the seeding step (0 when the sample has no `indexSeeds`). */
|
|
32
|
+
tagsSeeded: number;
|
|
33
|
+
/** Documents that reached `indexed` (0 when the sample has no `documents`). */
|
|
34
|
+
documentsIngested: number;
|
|
35
|
+
/** Chunks those documents produced. */
|
|
36
|
+
chunksCreated: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Runs the full ingest. `wipeFirst` must be true when the graph is non-empty (import
|
|
40
|
+
* requires an empty target — the caller gates this behind a typed confirm). Steps are
|
|
41
|
+
* reported via onStep for a progress line.
|
|
42
|
+
*/
|
|
43
|
+
export declare function loadSampleGraph(instance: InstanceConfig, entry: SampleManifestEntry, baseUrl: string, options: {
|
|
44
|
+
wipeFirst: boolean;
|
|
45
|
+
onStep?: LoadStepReporter;
|
|
46
|
+
}): Promise<LoadResult>;
|
|
47
|
+
export type EmbeddingGate = {
|
|
48
|
+
kind: "not-embedded";
|
|
49
|
+
} | {
|
|
50
|
+
kind: "ready";
|
|
51
|
+
} | {
|
|
52
|
+
kind: "provider-off";
|
|
53
|
+
} | {
|
|
54
|
+
kind: "mismatch";
|
|
55
|
+
detail: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Whether the sample's text-in features (semantic search, queryText) will work on this
|
|
59
|
+
* instance. Bring-your-own-vector always works (the vectors are in the file); this only
|
|
60
|
+
* gates TEXT-IN, which needs a provider whose identity matches the baked vectors.
|
|
61
|
+
*/
|
|
62
|
+
export declare function embeddingGate(embedding: SampleEmbeddingInfo | null, status: StatusREST | null): EmbeddingGate;
|
|
63
|
+
/**
|
|
64
|
+
* Whether a sample that ingests DOCUMENTS can run on this instance (feature knowledge-demo).
|
|
65
|
+
* `blocking: false` means the sample still loads, just with less in it: NLP enrichment is
|
|
66
|
+
* additive, so a missing sidecar costs the entity network and nothing else.
|
|
67
|
+
*/
|
|
68
|
+
export type IngestionGate = {
|
|
69
|
+
kind: "not-needed";
|
|
70
|
+
blocking: false;
|
|
71
|
+
} | {
|
|
72
|
+
kind: "ready";
|
|
73
|
+
blocking: false;
|
|
74
|
+
} | {
|
|
75
|
+
kind: "nlp-off";
|
|
76
|
+
blocking: false;
|
|
77
|
+
detail: string;
|
|
78
|
+
} | {
|
|
79
|
+
kind: "status-unknown";
|
|
80
|
+
blocking: true;
|
|
81
|
+
detail: string;
|
|
82
|
+
} | {
|
|
83
|
+
kind: "ingestion-off";
|
|
84
|
+
blocking: true;
|
|
85
|
+
detail: string;
|
|
86
|
+
} | {
|
|
87
|
+
kind: "provider-off";
|
|
88
|
+
blocking: true;
|
|
89
|
+
detail: string;
|
|
90
|
+
} | {
|
|
91
|
+
kind: "docling-unreachable";
|
|
92
|
+
blocking: true;
|
|
93
|
+
detail: string;
|
|
94
|
+
};
|
|
95
|
+
export declare function ingestionGate(entry: SampleManifestEntry, status: StatusREST | null): IngestionGate;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sample-graph manifest types (feature sample-graphs): the contract between the build
|
|
3
|
+
* script (scripts/build-samples.ts, which writes public/samples/index.json) and the
|
|
4
|
+
* Dashboard's Sample graphs section, which renders the card grid and runs the loader
|
|
5
|
+
* purely from this data. Adding a static sample is a script + manifest change — no UI
|
|
6
|
+
* code.
|
|
7
|
+
*/
|
|
8
|
+
import type { StyleConfig } from "../canvas/styleConfig";
|
|
9
|
+
/** What a sample shows off, rendered as card badges. */
|
|
10
|
+
export type SampleBadge = "canvas" | "path" | "analytics" | "semantic" | "spatial" | "knowledge";
|
|
11
|
+
/** A POST /index recipe the loader creates right after import. */
|
|
12
|
+
export interface SampleIndexRecipe {
|
|
13
|
+
uniqueId: string;
|
|
14
|
+
pluginType: string;
|
|
15
|
+
pluginOptions: Record<string, {
|
|
16
|
+
propertyId: string;
|
|
17
|
+
propertyValue: string;
|
|
18
|
+
fullQualifiedTypeName: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fills an equality index from an imported property (feature knowledge-demo). Needed because
|
|
23
|
+
* `POST /index` does NOT backfill: a DictionaryIndex created after import is EMPTY, so a
|
|
24
|
+
* sample whose documents link against it would link nothing. The loader walks the imported
|
|
25
|
+
* vertices and issues one addToIndex per vertex carrying `propertyId`. A bound VectorIndex
|
|
26
|
+
* needs none of this (it projects existing embeddings), which is why only equality indexes
|
|
27
|
+
* appear here.
|
|
28
|
+
*/
|
|
29
|
+
export interface SampleIndexSeed {
|
|
30
|
+
/** An index the sample's `indexRecipes` created. */
|
|
31
|
+
indexId: string;
|
|
32
|
+
/** The vertex property whose value becomes the index key. Untagged vertices are skipped. */
|
|
33
|
+
propertyId: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A document the loader ingests LIVE through the real pipeline after the graph is imported
|
|
37
|
+
* (feature knowledge-demo). Deliberately not baked into the jsonl: the point is that docling
|
|
38
|
+
* conversion, embedding, NLP enrichment and structural linking actually run.
|
|
39
|
+
*/
|
|
40
|
+
export interface SampleDocument {
|
|
41
|
+
/** Same-origin asset path, e.g. "documents/nw-std-0417.md". */
|
|
42
|
+
file: string;
|
|
43
|
+
/** The document name recorded in the graph. */
|
|
44
|
+
name: string;
|
|
45
|
+
/** `text` posts to /document/text (no sidecar); `binary` uploads multipart to /document. */
|
|
46
|
+
kind: "text" | "binary";
|
|
47
|
+
/** Text documents only. */
|
|
48
|
+
format?: "markdown" | "plain";
|
|
49
|
+
}
|
|
50
|
+
/** Provenance of the dataset's precomputed vectors, compared against /status.embedding. */
|
|
51
|
+
export interface SampleEmbeddingInfo {
|
|
52
|
+
name: string;
|
|
53
|
+
model: string;
|
|
54
|
+
dimension: number;
|
|
55
|
+
metric: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SampleManifestEntry {
|
|
58
|
+
id: string;
|
|
59
|
+
title: string;
|
|
60
|
+
emoji: string;
|
|
61
|
+
pitch: string;
|
|
62
|
+
vertexCount: number;
|
|
63
|
+
edgeCount: number;
|
|
64
|
+
badges: SampleBadge[];
|
|
65
|
+
/** Suggested next steps, shown after a successful load. */
|
|
66
|
+
trySteps: string[];
|
|
67
|
+
/** Same-origin asset path, e.g. "samples/karate-club.jsonl". */
|
|
68
|
+
file: string;
|
|
69
|
+
/** Applied to the instance's canvas style config on load. */
|
|
70
|
+
styleConfig: Partial<StyleConfig>;
|
|
71
|
+
indexRecipes: SampleIndexRecipe[];
|
|
72
|
+
embedding: SampleEmbeddingInfo | null;
|
|
73
|
+
/**
|
|
74
|
+
* The three fields below are OPTIONAL on purpose: absent means the loader behaves exactly
|
|
75
|
+
* as it did before feature knowledge-demo, so the document-free samples are untouched.
|
|
76
|
+
*/
|
|
77
|
+
/** Equality indexes to fill after import, because creation does not backfill. */
|
|
78
|
+
indexSeeds?: SampleIndexSeed[];
|
|
79
|
+
/** Documents ingested live after seeding, in this order. */
|
|
80
|
+
documents?: SampleDocument[];
|
|
81
|
+
/** The linking allowlist passed on every ingest; ids must come from `indexRecipes`. */
|
|
82
|
+
linkIndexIds?: string[];
|
|
83
|
+
}
|
|
84
|
+
export interface SamplesManifest {
|
|
85
|
+
version: 1;
|
|
86
|
+
samples: SampleManifestEntry[];
|
|
87
|
+
}
|