@fallen-8/studio 0.0.35 → 0.0.36
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/dist-lib/{Canvas3D-C5og4ZIQ.js → Canvas3D-BXYc6PEP.js} +1 -1
- package/dist-lib/{F8GraphCanvas-Db7vzDtJ.js → F8GraphCanvas-Ckq0NuuE.js} +8 -2
- package/dist-lib/canvas.js +1 -1
- package/dist-lib/{cssMode-C_3o84wD.js → cssMode-nGncvC5m.js} +1 -1
- package/dist-lib/f8-studio.css +1 -1
- package/dist-lib/f8-studio.js +2 -2
- package/dist-lib/{freemarker2-2fqgZiA6.js → freemarker2-CP74sa8J.js} +1 -1
- package/dist-lib/{handlebars-CpHr0qpx.js → handlebars-QALLOIn0.js} +1 -1
- package/dist-lib/{html-Bug9RG5l.js → html-85a-cm74.js} +1 -1
- package/dist-lib/{htmlMode-Ml4537rc.js → htmlMode-BgQACh7e.js} +1 -1
- package/dist-lib/{index-B9b5xEwe.js → index-CQF9rZdm.js} +25575 -25158
- package/dist-lib/{javascript-DvuxCyB4.js → javascript-C5gSrEJX.js} +1 -1
- package/dist-lib/{jsonMode-BU3w8kmM.js → jsonMode-CPyHCN9i.js} +1 -1
- package/dist-lib/{liquid-r_J0hX64.js → liquid-C-WFafiu.js} +1 -1
- package/dist-lib/{mdx-5vg3Qy8b.js → mdx-Cqij6eG9.js} +1 -1
- package/dist-lib/{python-DlLCDuTf.js → python-DxKmSiUE.js} +1 -1
- package/dist-lib/{razor-D-OmEXY0.js → razor-C_PJXRiv.js} +1 -1
- package/dist-lib/{tsMode-Dophy2cR.js → tsMode-BPfWv0l3.js} +1 -1
- package/dist-lib/types/api/client.d.ts +40 -0
- package/dist-lib/types/api/endpoints.d.ts +28 -2
- package/dist-lib/types/api/types.d.ts +96 -2
- package/dist-lib/types/app/namespaceSignals.d.ts +41 -0
- package/dist-lib/types/app/nav.d.ts +0 -5
- package/dist-lib/types/app/routes.d.ts +2 -2
- package/dist-lib/types/app/scopedRoute.d.ts +24 -0
- package/dist-lib/types/components/DurabilityNotice.d.ts +22 -7
- package/dist-lib/types/components/FileDropzone.d.ts +7 -2
- package/dist-lib/types/components/Stat.d.ts +1 -1
- package/dist-lib/types/delegate/nl/useNlRun.d.ts +7 -0
- package/dist-lib/types/firstrun/FirstRunOverlay.d.ts +37 -4
- package/dist-lib/types/firstrun/FirstRunShow.d.ts +4 -4
- package/dist-lib/types/instances/registry.d.ts +8 -2
- package/dist-lib/types/lib/embeddingProperties.d.ts +22 -0
- package/dist-lib/types/lib/findSimilar.d.ts +21 -0
- package/dist-lib/types/lib/pollIntervals.d.ts +13 -0
- package/dist-lib/types/lib/samples.d.ts +1 -1
- package/dist-lib/types/screens/IntegrationsScreen.d.ts +4 -3
- package/dist-lib/types/screens/SamplesScreen.d.ts +3 -3
- package/dist-lib/types/state/instanceStore.d.ts +30 -0
- package/dist-lib/types/state/status.d.ts +20 -1
- package/dist-lib/{typescript-oqqsXxrY.js → typescript-CmUu7z19.js} +1 -1
- package/dist-lib/{xml-pmqwhaBA.js → xml-BID2APnO.js} +1 -1
- package/dist-lib/{yaml-DN1I59zm.js → yaml-CpQ-mN6F.js} +1 -1
- package/package.json +1 -1
- package/dist-lib/types/screens/DashboardScreen.d.ts +0 -13
|
@@ -4,15 +4,30 @@ import type { DurabilityREST } from "../api/types";
|
|
|
4
4
|
*
|
|
5
5
|
* The engine has published this on /status for a while and a machine already acts on it - the
|
|
6
6
|
* integrations runtime refuses to delete anything while it is unhealthy - but nothing showed it to
|
|
7
|
-
* the person watching. That was the gap: "a client writes into a
|
|
8
|
-
*
|
|
7
|
+
* the person watching. That was the gap the signal exists to close: "a client writes into a
|
|
8
|
+
* degraded log and nobody watching finds out". It is rendered by the app shell, so it reaches that
|
|
9
|
+
* person on whatever screen they are on rather than on one they had to think to open.
|
|
9
10
|
*
|
|
10
|
-
* Deliberately SILENT when everything is fine. A
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* Deliberately SILENT when everything is fine. A banner that is always there stops being read, and
|
|
12
|
+
* the three states worth interrupting for are all exceptional: the log is degraded (commits are
|
|
13
|
+
* landing in memory only), the last recovery was truncated (the graph is a prefix of history, so
|
|
14
|
+
* anything reconciling against it is reasoning from incomplete data), or the last checkpoint
|
|
15
|
+
* dropped indexes (they are gone after the next load).
|
|
15
16
|
*/
|
|
17
|
+
/** One thing worth interrupting for: what is wrong, and what it means for this graph. */
|
|
18
|
+
export interface DurabilityProblem {
|
|
19
|
+
title: string;
|
|
20
|
+
detail: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The three exceptional states, as prose - and the ONE home for "is durability worth saying
|
|
24
|
+
* something about", which the shell also asks (an empty namespace whose recovery was truncated
|
|
25
|
+
* gets this warning instead of the first-run welcome; see AppShell).
|
|
26
|
+
*
|
|
27
|
+
* Absent is not healthy: an older server simply does not report, and saying nothing is honest,
|
|
28
|
+
* whereas rendering "durable" from missing data would be an invention.
|
|
29
|
+
*/
|
|
30
|
+
export declare function durabilityProblems(durability: DurabilityREST | null | undefined): DurabilityProblem[];
|
|
16
31
|
export declare function DurabilityNotice({ durability }: {
|
|
17
32
|
durability: DurabilityREST | null | undefined;
|
|
18
33
|
}): import("react").JSX.Element | null;
|
|
@@ -10,8 +10,13 @@ import { type ReactNode } from "react";
|
|
|
10
10
|
* what that screen needs it to mean.
|
|
11
11
|
*/
|
|
12
12
|
export declare function FileDropzone(props: {
|
|
13
|
-
/** Called with the dropped
|
|
14
|
-
|
|
13
|
+
/** Called with the dropped files, in the order the browser reported them, and never with none. */
|
|
14
|
+
onFiles: (files: File[]) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Takes every file of one drop rather than the first. A source handed over as a SET of files
|
|
17
|
+
* needs it: without it the rest of the drop is silently ignored, which reads as a lost file.
|
|
18
|
+
*/
|
|
19
|
+
multiple?: boolean;
|
|
15
20
|
/** Greys the target out and refuses drops, for a screen that is not ready to take one. */
|
|
16
21
|
disabled?: boolean;
|
|
17
22
|
/** What the target says when nothing is being dragged over it. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* One labeled stat cell (
|
|
2
|
+
* One labeled stat cell (benchmark results, Graph shape numbers, and
|
|
3
3
|
* value tiles fed user/algorithm-controlled strings such as the embedding model id or an
|
|
4
4
|
* analytics statistic key). Both lines truncate with a full-value title so an unbounded
|
|
5
5
|
* label or value can never overflow the fixed-width tile.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NlAssistConfig } from "./config";
|
|
1
2
|
/**
|
|
2
3
|
* Run lifecycle shared by both NL panels (the delegate editor's and the plugin editor's).
|
|
3
4
|
* It exists because the two panels had the same two defects in duplicate:
|
|
@@ -22,3 +23,9 @@ export declare function useNlRun(): {
|
|
|
22
23
|
* the original hang was reported.
|
|
23
24
|
*/
|
|
24
25
|
export declare function useElapsedSeconds(active: boolean): number;
|
|
26
|
+
/**
|
|
27
|
+
* Informational-only reachability read (nl-assist-ux FR-2), shared by both NL panels: custom mode
|
|
28
|
+
* probes the configured endpoint, instance mode reports nothing (its reachability is the instance
|
|
29
|
+
* connection itself, shown on Connect). Never gates generation.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useReachabilityProbe(configured: boolean, isInstance: boolean, effective: NlAssistConfig): boolean | null;
|
|
@@ -1,10 +1,43 @@
|
|
|
1
|
+
import type { NamespaceSignals } from "../app/namespaceSignals";
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* The first-run show's ONE host (feature studio-first-run), rendered once by the app shell. Radix
|
|
4
|
+
* Dialog gives the focus trap, Escape-to-close, and focus restore for free.
|
|
5
|
+
*
|
|
6
|
+
* It opens on two paths, and the difference is entirely in what closing means:
|
|
7
|
+
*
|
|
8
|
+
* - **auto** - the operator is on a screen ABOUT a graph and that graph was empty WHEN THEY
|
|
9
|
+
* ARRIVED at the namespace (see the `arrival` latch: emptiness is live, arrival is not), and
|
|
10
|
+
* they have not dismissed the show for it. Closing by ANY route (Close, Escape, the scrim,
|
|
11
|
+
* "Explore on my own") records the dismissal; an auto-opening modal that came back on the next
|
|
12
|
+
* navigation would be unusable. The memory is per namespace and re-armed the moment that
|
|
13
|
+
* namespace is seen non-empty, so a graph that genuinely empties later shows the intro again the
|
|
14
|
+
* next time you arrive at it.
|
|
15
|
+
* - **replay** - the rail's Intro button, available at any time regardless of the connection
|
|
16
|
+
* state, the graph being empty, or the dismissal. Closing it leaves the flag alone UNLESS the
|
|
17
|
+
* auto path is armed for this namespace, in which case closing counts for both (see `armed`).
|
|
5
18
|
*
|
|
6
19
|
* The show creates NOTHING: its handoff buttons only navigate (to the Sample gallery or the
|
|
7
20
|
* import screen) or dismiss. The unit-test graph endpoint is deliberately never wired in (see
|
|
8
21
|
* CLAUDE.md); newcomers reach a populated graph through the curated Sample gallery.
|
|
9
22
|
*/
|
|
10
|
-
export declare function FirstRunOverlay(
|
|
23
|
+
export declare function FirstRunOverlay({ signals, connected, onGraphScreen, }: {
|
|
24
|
+
/** The active namespace's shell-level signals - what decides the auto path. */
|
|
25
|
+
signals: NamespaceSignals;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the active instance answered AND authorized. /status reports real counts to an
|
|
28
|
+
* unauthorized caller too, so without this an instance that rejected the credential would greet
|
|
29
|
+
* the operator with a walkthrough on top of the "rejected the credential" guard.
|
|
30
|
+
*/
|
|
31
|
+
connected: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the current route is a namespace-scoped screen (`/q/{ns}/…`).
|
|
34
|
+
*
|
|
35
|
+
* The auto path is deliberately silent on the Fallen-8-level screens - Connect, Save games,
|
|
36
|
+
* Integrations. The walkthrough is about a GRAPH, and those three are where you wire one up:
|
|
37
|
+
* registering an instance, naming namespaces, restoring a checkpoint, pointing an integration at
|
|
38
|
+
* a system. Interrupting that with a modal is not onboarding, it is an ambush, and the very
|
|
39
|
+
* first thing a newcomer does after connecting is click a rail entry - which lands them on a
|
|
40
|
+
* scoped screen, where the show opens with nothing half-finished behind it.
|
|
41
|
+
*/
|
|
42
|
+
onGraphScreen: boolean;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
*
|
|
6
6
|
* It CREATES NOTHING: it renders a hardcoded mock as SVG and animates it with CSS. It issues no
|
|
7
7
|
* network request of its own. Only the handoff buttons perform a real action, on click, through
|
|
8
|
-
* the injected handlers - so the auto-show (
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* the injected handlers - so the auto-show (opened for a newcomer on an empty namespace) and the
|
|
9
|
+
* manual replay (the rail's Intro button) are the SAME component with the same contract, hosted by
|
|
10
|
+
* the same <FirstRunOverlay>; only the entry point differs. Prev/Next/dots let a viewer step through at their pace.
|
|
11
11
|
*/
|
|
12
12
|
export interface FirstRunShowProps {
|
|
13
|
-
/** "auto" =
|
|
13
|
+
/** "auto" = a newcomer on an empty namespace; "replay" = the rail's Intro. Used only for labels. */
|
|
14
14
|
variant: "auto" | "replay";
|
|
15
15
|
/** Dismiss into the app (auto: remember dismissal; replay: close the overlay). */
|
|
16
16
|
onExplore: () => void;
|
|
@@ -70,8 +70,7 @@ export declare function useActiveInstance(): InstanceConfig | null;
|
|
|
70
70
|
/**
|
|
71
71
|
* The active instance plus its per-namespace workspace store - the preamble every connected
|
|
72
72
|
* screen needs (the AppShell connection gate guarantees an active instance, hence the non-null).
|
|
73
|
-
* The
|
|
74
|
-
* /ns/{activeNamespace}/… explicitly, and the workspace store is keyed per namespace so
|
|
73
|
+
* The instance is bound per `boundInstance`, and the workspace store is keyed per namespace so
|
|
75
74
|
* results, drafts and canvas state never cross namespaces.
|
|
76
75
|
*/
|
|
77
76
|
export declare function useInstanceStore(): {
|
|
@@ -81,3 +80,10 @@ export declare function useInstanceStore(): {
|
|
|
81
80
|
<U>(selector: (state: import("../state/instanceStore").WorkspaceState) => U): U;
|
|
82
81
|
} & import("zustand").StoreApi<import("../state/instanceStore").WorkspaceState>;
|
|
83
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* The bound active instance for SHELL-level consumers, or null when no instance is active.
|
|
85
|
+
* `useInstanceStore` is this plus the workspace store, but it asserts an instance because it is
|
|
86
|
+
* only ever called from a screen behind the connection gate; the shell itself (the durability
|
|
87
|
+
* banner, the first-run auto-show) renders before that gate and must tolerate "none".
|
|
88
|
+
*/
|
|
89
|
+
export declare function useBoundInstance(): InstanceConfig | null;
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
/** A property is reserved (embedding state) when it uses either embedding prefix. */
|
|
2
2
|
export declare function isReservedEmbeddingProperty(propertyId: string): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* The element's own properties first, engine-written embedding state last, order otherwise
|
|
5
|
+
* preserved. For a TRUNCATED preview (the element table's properties cell), which is the only
|
|
6
|
+
* place this matters: a reserved marker is bookkeeping the operator did not write and cannot edit
|
|
7
|
+
* here, so spending the character budget on it before their own data is backwards.
|
|
8
|
+
*
|
|
9
|
+
* It was not hypothetical. On a graph with embeddings, `$embeddingModel:default=bge-m3#1024#Cosine`
|
|
10
|
+
* is ~44 of the ~80 available characters, and the REST egress emits properties in no guaranteed
|
|
11
|
+
* order - so a movie row rendered as "year=2010, $embeddingModel:default=…, plot=A thief who
|
|
12
|
+
* steals…" with `title=` cut off entirely, and the published semantic-search screenshot showed no
|
|
13
|
+
* film title in any of its ten rows.
|
|
14
|
+
*/
|
|
15
|
+
export declare function userPropertiesFirst<T extends {
|
|
16
|
+
propertyId: string;
|
|
17
|
+
}>(properties: T[]): T[];
|
|
18
|
+
/**
|
|
19
|
+
* The stored vector as the Query screen's vector box wants it: the WHOLE bracketed list, where
|
|
20
|
+
* previewVector deliberately gives four components and a dimension. Both shapes the REST egress
|
|
21
|
+
* can send are accepted (a Single[] array, or the bracketed string form). Null when the value is
|
|
22
|
+
* not a vector at all.
|
|
23
|
+
*/
|
|
24
|
+
export declare function vectorQueryText(value: unknown): string | null;
|
|
3
25
|
/** A one-line preview of a stored vector value. The REST egress sends Single[] values as
|
|
4
26
|
* the bracketed string form (see AGraphElement.FormatPropertyValue), so both shapes are
|
|
5
27
|
* truncated — a 1024-dim embedding must never dump raw into the table. */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EdgeREST, IndexDescription, VertexREST } from "../api/types";
|
|
2
|
+
import type { ScanPrefill } from "../state/instanceStore";
|
|
3
|
+
/**
|
|
4
|
+
* "Find elements like this one", composed entirely on the client (feature element-similarity-search).
|
|
5
|
+
*
|
|
6
|
+
* There is no element-as-query mode anywhere in the product: `/embedding/search` takes text and
|
|
7
|
+
* `/scan/index/vector` takes a vector, so the only way to ask "what is like THIS" is to read the
|
|
8
|
+
* element's own stored embedding and search with it. That read is free - the vector is already in
|
|
9
|
+
* the element's properties, which the caller has already fetched.
|
|
10
|
+
*
|
|
11
|
+
* The searchable index is the one BOUND to that embedding name. An unbound index holds vectors that
|
|
12
|
+
* exist nowhere else, so it cannot be expected to contain this element at all, and a bound index of
|
|
13
|
+
* a different name projects different vectors. No bound index means the gesture has nowhere to run,
|
|
14
|
+
* which is a reason to show rather than a button to grey out silently.
|
|
15
|
+
*/
|
|
16
|
+
export interface SimilarSearch {
|
|
17
|
+
prefill: ScanPrefill;
|
|
18
|
+
embeddingName: string;
|
|
19
|
+
}
|
|
20
|
+
/** Every embedding this element carries that a bound vector index actually projects. */
|
|
21
|
+
export declare function similarSearchesFor(element: VertexREST | EdgeREST, indices: IndexDescription[] | null | undefined, isEdge: boolean): SimilarSearch[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The poll cadence shared by every observer of an instance's two cheap discovery routes:
|
|
3
|
+
* `/status` (the connection probe, the durability banner, the Instances row health cell) and
|
|
4
|
+
* `/ns` (the namespace inventory, read by the switcher, NamespacesPanel and the namespace-recover
|
|
5
|
+
* screen). All of them key their query on `[instanceId, "status"]` or `[instanceId, "namespaces"]`,
|
|
6
|
+
* and TanStack times `refetchInterval` PER OBSERVER: two observers of one key with two different
|
|
7
|
+
* intervals do not give each consumer its own poll rate, they refresh the shared row on the union
|
|
8
|
+
* of both cadences, so neither consumer gets the interval it declared and the shorter one sets the
|
|
9
|
+
* floor for both. One constant removes the possibility.
|
|
10
|
+
*
|
|
11
|
+
* Tune the number here, not per call site.
|
|
12
|
+
*/
|
|
13
|
+
export declare const STATUS_POLL_MS = 15000;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sample-graph manifest types (feature sample-graphs): the contract between the build
|
|
3
3
|
* script (scripts/build-samples.ts, which writes public/samples/index.json) and the
|
|
4
|
-
*
|
|
4
|
+
* Samples screen, which renders the card grid and runs the loader
|
|
5
5
|
* purely from this data. Adding a static sample is a script + manifest change — no UI
|
|
6
6
|
* code.
|
|
7
7
|
*/
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* needed its own component would be a contract failure rather than a UI task, and the agent that
|
|
8
8
|
* writes the fourth integration cannot write a React component for it anyway.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Submitting STARTS a run and does not wait for it: the runtime answers a run id, and this screen
|
|
11
|
+
* then watches that run - the phase it is in, and its report once it ends. That is not a run history
|
|
12
|
+
* (the boundary is on IntegrationRunState), so there is no schedule, no list of past runs and no
|
|
13
|
+
* saved job list here; timing belongs to whoever wants the data.
|
|
13
14
|
*/
|
|
14
15
|
export declare function IntegrationsScreen(): import("react").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Samples (feature sample-graphs): the one-click demo gallery
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Samples (feature sample-graphs): the one-click demo gallery. It has its own rail entry so every
|
|
3
|
+
* card spans the full width and carries its "what you can test" steps, with a tag bar to filter
|
|
4
|
+
* by capability. Namespace-scoped - a load replaces
|
|
5
5
|
* the active namespace's graph (SampleGraphsPanel owns the loader + typed-confirm wipe).
|
|
6
6
|
*/
|
|
7
7
|
export declare function SamplesScreen(): import("react").JSX.Element;
|
|
@@ -199,12 +199,41 @@ export declare const DEFAULT_CANVAS_TOOLS_DRAFT: CanvasToolsDraft;
|
|
|
199
199
|
/** One-shot navigation intent: "open Query with this index preselected" (cleared on consume). */
|
|
200
200
|
export interface ScanPrefill {
|
|
201
201
|
indexId: string;
|
|
202
|
+
/**
|
|
203
|
+
* A query vector to search WITH, in the bracketed form the vector box parses. Set by the
|
|
204
|
+
* "find similar" gesture, which reads it off the source element's own stored embedding: the
|
|
205
|
+
* search surface takes a vector, never an element id, so the element-as-query gesture is
|
|
206
|
+
* composed on this side rather than asked of the server.
|
|
207
|
+
*/
|
|
208
|
+
vectorText?: string;
|
|
209
|
+
/**
|
|
210
|
+
* The element the vector came from, so it can be dropped from its own results. There is no
|
|
211
|
+
* self-exclusion anywhere in the engine or the REST contract, so an unfiltered search returns
|
|
212
|
+
* the source element at rank 1 every time.
|
|
213
|
+
*/
|
|
214
|
+
sourceElementId?: number;
|
|
215
|
+
/**
|
|
216
|
+
* The source element's label, inherited as the search constraint. Not a convenience: several
|
|
217
|
+
* entity kinds embed as little more than their identifier, so an unconstrained similarity
|
|
218
|
+
* search over such a graph ranks identifier-shaped noise against real matches.
|
|
219
|
+
*/
|
|
220
|
+
label?: string;
|
|
221
|
+
kind?: "any" | "vertex" | "edge";
|
|
202
222
|
}
|
|
203
223
|
export interface WorkspaceState {
|
|
204
224
|
/** The Events panel's interest filter (feature studio-event-feed, see feedFilter.ts). */
|
|
205
225
|
feedFilter: FeedFilterDraft;
|
|
206
226
|
/** One-shot navigation intent: "open the Browser inspecting this element id". */
|
|
207
227
|
inspectPrefill: number | null;
|
|
228
|
+
/**
|
|
229
|
+
* The integration identity whose run this instance is watching, or null.
|
|
230
|
+
*
|
|
231
|
+
* PERSISTED, unlike the one-shot prefills, and that is the point: a run outlives the request that
|
|
232
|
+
* started it and can take hours, so reopening the screen - or reloading the page - has to re-attach
|
|
233
|
+
* to it rather than lose it. The identity is enough to re-find the run, because the runtime keys its
|
|
234
|
+
* slot by exactly that.
|
|
235
|
+
*/
|
|
236
|
+
integrationWatch: string | null;
|
|
208
237
|
canvasNodes: Record<number, CanvasNode>;
|
|
209
238
|
canvasEdges: Record<number, CanvasEdge>;
|
|
210
239
|
styleConfig: StyleConfig;
|
|
@@ -240,6 +269,7 @@ export interface WorkspaceState {
|
|
|
240
269
|
setScanPrefill: (prefill: ScanPrefill | null) => void;
|
|
241
270
|
setFeedFilter: (patch: Partial<FeedFilterDraft>) => void;
|
|
242
271
|
setInspectPrefill: (id: number | null) => void;
|
|
272
|
+
setIntegrationWatch: (instanceId: string | null) => void;
|
|
243
273
|
}
|
|
244
274
|
type WorkspaceStore = UseBoundStore<StoreApi<WorkspaceState>>;
|
|
245
275
|
/**
|
|
@@ -4,8 +4,27 @@ import type { InstanceConfig } from "../instances/types";
|
|
|
4
4
|
* consumer reads one cache row and rides its periodic refresh; /status is the cheap
|
|
5
5
|
* discovery surface (available plugins + live index inventory — feature
|
|
6
6
|
* studio-index-discovery), unlike the budgeted Graph-shape pass in graphShape.ts.
|
|
7
|
+
*
|
|
8
|
+
* Accepts null and then asks nothing: the shell-level readers (the durability banner, the
|
|
9
|
+
* first-run auto-show) render outside the connection gate, so "no instance yet" is a state they
|
|
10
|
+
* pass through rather than an assertion they can make.
|
|
11
|
+
*
|
|
12
|
+
* Pass poll: true to drive the shared row on a timer. Exactly one caller does - the app shell,
|
|
13
|
+
* on the same 15s cadence as its instance health probe - because the durability banner is a
|
|
14
|
+
* warning nobody goes looking for: it has to arrive while the operator is on some other screen.
|
|
15
|
+
* Every other observer rides that refresh through the shared cache row and asks for nothing.
|
|
16
|
+
*
|
|
17
|
+
* Polling implies `retry: 0`, matching the health probe, and that pairing is load-bearing rather
|
|
18
|
+
* than tidy: on a server that predates namespaces the bound view collapses to the raw instance, so
|
|
19
|
+
* this row and the probe become the SAME query key. react-query takes `retry` from whichever
|
|
20
|
+
* observer initiated the current fetch, so without this the probe's deliberate fail-fast became a
|
|
21
|
+
* coin flip against a default of three retries - and for the ~7s of backoff that won, a dead
|
|
22
|
+
* instance still read "online" with the nav unlocked. There is no point retrying a 15s poll anyway;
|
|
23
|
+
* the next tick is the retry.
|
|
7
24
|
*/
|
|
8
|
-
export declare function useStatus(instance: InstanceConfig
|
|
25
|
+
export declare function useStatus(instance: InstanceConfig | null, options?: {
|
|
26
|
+
poll?: boolean;
|
|
27
|
+
}): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../api/types").StatusREST | null>, Error>;
|
|
9
28
|
/**
|
|
10
29
|
* The instance's configuration (features instance-config and writable-instance-config): the setting
|
|
11
30
|
* inventory, the semantic providers and the observability posture behind the Connect Configuration
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as s } from "./index-
|
|
1
|
+
import { m as s } from "./index-CQF9rZdm.js";
|
|
2
2
|
var c = Object.defineProperty, a = Object.getOwnPropertyDescriptor, p = Object.getOwnPropertyNames, g = Object.prototype.hasOwnProperty, l = (t, e, o, i) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let n of p(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as r } from "./index-
|
|
1
|
+
import { m as r } from "./index-CQF9rZdm.js";
|
|
2
2
|
var m = Object.defineProperty, c = Object.getOwnPropertyDescriptor, l = Object.getOwnPropertyNames, d = Object.prototype.hasOwnProperty, p = (t, e, o, i) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let n of l(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as l } from "./index-
|
|
1
|
+
import { m as l } from "./index-CQF9rZdm.js";
|
|
2
2
|
var i = Object.defineProperty, c = Object.getOwnPropertyDescriptor, u = Object.getOwnPropertyNames, s = Object.prototype.hasOwnProperty, d = (n, e, r, o) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let t of u(e))
|
package/package.json
CHANGED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dashboard (FR-2/3/4): the status overview for the active namespace — vertex/edge counts
|
|
3
|
-
* and memory, from /status. It is deliberately lean: the sample gallery, the persistence/
|
|
4
|
-
* administration actions, the stored-query library, the plugin registry, and the instance
|
|
5
|
-
* configuration (semantic providers, observability) each have their own home (Samples, Save
|
|
6
|
-
* games, Query, Plugins, and the Connect Configuration section).
|
|
7
|
-
*
|
|
8
|
-
* On an empty, not-yet-dismissed namespace this is also the home of the first-run show
|
|
9
|
-
* (feature studio-first-run): instead of three zeroed tiles a newcomer gets an animated,
|
|
10
|
-
* read-only walkthrough that creates nothing. It is dismissed per namespace and re-armed the
|
|
11
|
-
* moment the namespace is seen non-empty, so a returning user is never nagged.
|
|
12
|
-
*/
|
|
13
|
-
export declare function DashboardScreen(): import("react").JSX.Element;
|