@fallen-8/studio 0.0.35 → 0.0.37
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-CmDAo5BT.js} +1 -1
- package/dist-lib/{F8GraphCanvas-Db7vzDtJ.js → F8GraphCanvas-COQKIUas.js} +826 -812
- package/dist-lib/canvas.js +1 -1
- package/dist-lib/{cssMode-C_3o84wD.js → cssMode-Cm-p9yGb.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-DU-Ctapi.js} +1 -1
- package/dist-lib/{handlebars-CpHr0qpx.js → handlebars-BsqZtC5a.js} +1 -1
- package/dist-lib/{html-Bug9RG5l.js → html-CUyknR5b.js} +1 -1
- package/dist-lib/{htmlMode-Ml4537rc.js → htmlMode-DjyPljE2.js} +1 -1
- package/dist-lib/{index-B9b5xEwe.js → index-BQbFjItv.js} +26366 -25874
- package/dist-lib/{javascript-DvuxCyB4.js → javascript-CVQBymBa.js} +1 -1
- package/dist-lib/{jsonMode-BU3w8kmM.js → jsonMode-B3hcJ0l3.js} +1 -1
- package/dist-lib/{liquid-r_J0hX64.js → liquid-DLrt4Cls.js} +1 -1
- package/dist-lib/{mdx-5vg3Qy8b.js → mdx-DePkemui.js} +1 -1
- package/dist-lib/{python-DlLCDuTf.js → python-CUe0bWsE.js} +1 -1
- package/dist-lib/{razor-D-OmEXY0.js → razor-DD_zUh3z.js} +1 -1
- package/dist-lib/{tsMode-Dophy2cR.js → tsMode-Ae3UtOmp.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 +2 -12
- package/dist-lib/types/app/routes.d.ts +7 -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/components/StoredQueriesPanel.d.ts +16 -11
- package/dist-lib/types/components/StoredQueryControls.d.ts +3 -4
- 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/lib/storedQueries.d.ts +10 -0
- package/dist-lib/types/screens/IntegrationsScreen.d.ts +4 -3
- package/dist-lib/types/screens/PathScreen.d.ts +3 -0
- package/dist-lib/types/screens/SamplesScreen.d.ts +3 -3
- package/dist-lib/types/screens/TraverseScreen.d.ts +1 -0
- package/dist-lib/types/state/instanceStore.d.ts +51 -0
- package/dist-lib/types/state/status.d.ts +20 -1
- package/dist-lib/{typescript-oqqsXxrY.js → typescript-LNGesWYR.js} +1 -1
- package/dist-lib/{xml-pmqwhaBA.js → xml-BuD_-6ib.js} +1 -1
- package/dist-lib/{yaml-DN1I59zm.js → yaml-DCzPbyTS.js} +1 -1
- package/package.json +1 -1
- package/dist-lib/types/screens/DashboardScreen.d.ts +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as Et } from "./index-
|
|
1
|
+
import { m as Et } from "./index-BQbFjItv.js";
|
|
2
2
|
var Lt = Object.defineProperty, Ot = Object.getOwnPropertyDescriptor, Nt = Object.getOwnPropertyNames, Rt = Object.prototype.hasOwnProperty, Mt = (e, r, i, n) => {
|
|
3
3
|
if (r && typeof r == "object" || typeof r == "function")
|
|
4
4
|
for (let t of Nt(r))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as l } from "./index-
|
|
1
|
+
import { m as l } from "./index-BQbFjItv.js";
|
|
2
2
|
var d = Object.defineProperty, s = Object.getOwnPropertyDescriptor, c = Object.getOwnPropertyNames, u = Object.prototype.hasOwnProperty, m = (t, e, r, n) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let i of c(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as s } from "./index-
|
|
1
|
+
import { m as s } from "./index-BQbFjItv.js";
|
|
2
2
|
var d = Object.defineProperty, c = Object.getOwnPropertyDescriptor, p = Object.getOwnPropertyNames, a = Object.prototype.hasOwnProperty, k = (n, e, i, r) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let o of p(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as o } from "./index-
|
|
1
|
+
import { m as o } from "./index-BQbFjItv.js";
|
|
2
2
|
var a = Object.defineProperty, l = Object.getOwnPropertyDescriptor, p = Object.getOwnPropertyNames, c = Object.prototype.hasOwnProperty, g = (t, e, n, s) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let r of p(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m } from "./index-
|
|
1
|
+
import { m } from "./index-BQbFjItv.js";
|
|
2
2
|
var s = Object.defineProperty, c = Object.getOwnPropertyDescriptor, l = Object.getOwnPropertyNames, d = Object.prototype.hasOwnProperty, p = (t, e, o, n) => {
|
|
3
3
|
if (e && typeof e == "object" || typeof e == "function")
|
|
4
4
|
for (let r of l(e))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as O, m as I } from "./index-
|
|
1
|
+
import { t as O, m as I } from "./index-BQbFjItv.js";
|
|
2
2
|
var N = Object.defineProperty, M = Object.getOwnPropertyDescriptor, R = Object.getOwnPropertyNames, K = Object.prototype.hasOwnProperty, E = (e, t, i, o) => {
|
|
3
3
|
if (t && typeof t == "object" || typeof t == "function")
|
|
4
4
|
for (let n of R(t))
|
|
@@ -33,11 +33,35 @@ export declare class ApiError extends Error {
|
|
|
33
33
|
readonly body: string;
|
|
34
34
|
constructor(status: number, url: string, body: string);
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* A request that was accepted and never answered. Distinct from {@link ApiError}, which carries a
|
|
38
|
+
* status the server chose: this one exists because there was no answer at all.
|
|
39
|
+
*
|
|
40
|
+
* It has a status of 0 so a caller can still branch on `status`, and it is what turns "the spinner
|
|
41
|
+
* never stops" into a stated failure. That distinction is not theoretical - a broken IPv6 loopback
|
|
42
|
+
* forward on one published port left the Connect screen reading "checking..." indefinitely, with no
|
|
43
|
+
* error anywhere, because a hung fetch never settles and so never becomes an error at all.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ApiTimeoutError extends Error {
|
|
46
|
+
readonly status = 0;
|
|
47
|
+
readonly url: string;
|
|
48
|
+
readonly timeoutMs: number;
|
|
49
|
+
constructor(url: string, timeoutMs: number);
|
|
50
|
+
}
|
|
36
51
|
export interface RequestOptions {
|
|
37
52
|
method?: "GET" | "POST" | "PUT" | "DELETE" | "HEAD" | "PATCH";
|
|
38
53
|
body?: unknown;
|
|
39
54
|
query?: Record<string, string | number | boolean | undefined>;
|
|
40
55
|
signal?: AbortSignal;
|
|
56
|
+
/**
|
|
57
|
+
* Abort after this long and fail with {@link ApiTimeoutError}.
|
|
58
|
+
*
|
|
59
|
+
* OPT-IN, per call, and deliberately not a default: a job run over a 100 MiB extract legitimately
|
|
60
|
+
* takes half a minute, and a blanket timeout would abort exactly the long operations this API
|
|
61
|
+
* exists for. It belongs on the REACHABILITY probes, whose whole question is "is it there?" and
|
|
62
|
+
* whose answer arrives in milliseconds or not at all.
|
|
63
|
+
*/
|
|
64
|
+
timeoutMs?: number;
|
|
41
65
|
/**
|
|
42
66
|
* Namespace scoping (feature graph-namespaces). "namespace" (the default) prefixes the
|
|
43
67
|
* path with /ns/{namespace} when the instance is namespace-bound - the namespace is
|
|
@@ -72,6 +96,22 @@ export declare function resolveAuthHeaders(instance: InstanceConfig): Promise<Re
|
|
|
72
96
|
* Shared by {@link apiRequest} and the raw-fetch bulk endpoints so every failure looks the same.
|
|
73
97
|
*/
|
|
74
98
|
export declare function throwIfNotOk(response: Response, url: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* One request's deadline: a signal that aborts when the caller's does OR when the timeout expires,
|
|
101
|
+
* and a flag saying which of the two happened.
|
|
102
|
+
*
|
|
103
|
+
* Built by hand rather than with `AbortSignal.any`, which jsdom does not implement - a test suite
|
|
104
|
+
* that cannot run the code is not covering it.
|
|
105
|
+
*
|
|
106
|
+
* `timeoutMs` undefined or 0 means no deadline at all: the caller's own signal passes through
|
|
107
|
+
* unchanged and `expired` never becomes true. Exported so a caller with its own timeout budget
|
|
108
|
+
* (nl-assist's model-call ceiling, generate.ts) reuses this rather than re-deriving it.
|
|
109
|
+
*/
|
|
110
|
+
export declare function startDeadline(caller: AbortSignal | undefined, timeoutMs: number | undefined): {
|
|
111
|
+
signal: AbortSignal | undefined;
|
|
112
|
+
expired: boolean;
|
|
113
|
+
done: () => void;
|
|
114
|
+
};
|
|
75
115
|
export declare function apiRequest<T>(instance: InstanceConfig, path: string, options?: RequestOptions): Promise<T | null>;
|
|
76
116
|
/**
|
|
77
117
|
* Multipart POST (feature unstructured-ingestion: the document upload). Same URL scoping,
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { InstanceConfig } from "../instances/types";
|
|
2
|
-
import type { AnalyticsResultREST, DocumentBinding, DocumentDetail, DocumentEntityList, DocumentList, DocumentSearchResult, DocumentSearchSpecification, DocumentSummary, IngestTextSpecification,
|
|
2
|
+
import type { AnalyticsResultREST, DocumentBinding, DocumentDetail, DocumentEntityList, DocumentList, DocumentSearchResult, DocumentSearchSpecification, DocumentSummary, IngestTextSpecification, IntegrationJobRequest, IntegrationRunAccepted, IntegrationRunState, IntegrationProvider, NamespaceActivationREST, NamespaceEntry, NamespacesResponse, NamespaceTriState, AnalyticsSpecification, BenchmarkResult, BulkImportResultREST, GraphGenerationResult, AlgorithmPluginRegistration, DelegateKind, DelegateValidationResult, EdgeREST, EmbedElementSpecification, FunctionPluginRegistration, GraphFunctionResultREST, PluginAuthoringCategory, PluginDetailREST, PluginSummaryREST, PluginValidationResult, PluginValidationSpecification, ConfigREST, ConfigWriteREST, ConfigWriteSpec, ChatCompletionSpec, ChatCompletionResultREST, EmbeddingSearchSpecification, EmbeddingWriteSpecification, SaveGame, EdgeSpecification, FulltextIndexScanSpecification, FulltextSearchResultREST, GraphREST, GraphStatisticsREST, IndexAddToSpecification, IndexKeySpecification, IndexScanSpecification, PartitionMembersREST, PathREST, PathSpecification, PluginSpecification, PropertySearchSpecification, PropertySpecification, RangeIndexScanSpecification, ScanSpecification, SearchDistanceSpecification, GraphElementBatchREST, StatusREST, StoredQueryDetailREST, StoredQuerySpecification, StoredQuerySummaryREST, SubGraphSpecification, SubGraphSummary, VectorIndexAddSpecification, VectorIndexScanSpecification, VectorSearchResultREST, VertexREST, VertexSpecification } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* The reachability probe, and the ONE call with a deadline (see `RequestOptions.timeoutMs`).
|
|
5
|
+
*
|
|
6
|
+
* `/status` answers in milliseconds or the instance is not usable, so a probe still pending after
|
|
7
|
+
* ten seconds has told us what we needed to know. Without the deadline a hung connection leaves the
|
|
8
|
+
* promise pending for ever, and every screen that renders "checking..." until this succeeds says
|
|
9
|
+
* "checking..." for ever - which is worse than an error, because an error names an address.
|
|
10
|
+
*/
|
|
3
11
|
export declare const getStatus: (i: InstanceConfig, signal?: AbortSignal) => Promise<StatusREST | null>;
|
|
4
12
|
/**
|
|
5
13
|
* Instance configuration (feature instance-config): the read-only operator view of the
|
|
@@ -194,4 +202,22 @@ export declare const listEntities: (i: InstanceConfig, options?: {
|
|
|
194
202
|
/** The integrations this instance's runtime ships. A 403 or 401 means the capability is off. */
|
|
195
203
|
export declare const listIntegrationProviders: (i: InstanceConfig, signal?: AbortSignal) => Promise<IntegrationProvider[] | null>;
|
|
196
204
|
/** Runs one job and returns its report. A job that RAN and failed still answers 200. */
|
|
197
|
-
|
|
205
|
+
/**
|
|
206
|
+
* Starts a run. Answers a run id, NOT a report: the report is read afterwards from
|
|
207
|
+
* getIntegrationRun, because any real source outlives the connection that would have carried it.
|
|
208
|
+
* Everything that can reject the job still fails this call, so a resolved promise means it started.
|
|
209
|
+
*/
|
|
210
|
+
export declare const submitIntegrationJob: (i: InstanceConfig, job: IntegrationJobRequest) => Promise<IntegrationRunAccepted | null>;
|
|
211
|
+
/**
|
|
212
|
+
* One identity's current or most recent run: the phase while it runs, the report once it ends.
|
|
213
|
+
* Answers 404 when the runtime has no slot for that identity, which a caller should read as "not
|
|
214
|
+
* this process" rather than as an error.
|
|
215
|
+
*/
|
|
216
|
+
export declare const getIntegrationRun: (i: InstanceConfig, instanceId: string) => Promise<IntegrationRunState | null>;
|
|
217
|
+
/**
|
|
218
|
+
* Asks the run in flight under one identity to stop. Answers 202 and not 200 because a stop is a
|
|
219
|
+
* REQUEST honoured at the run's next safe point, so the run as answered here is the run as it was
|
|
220
|
+
* when the stop was recorded, and getIntegrationRun is what shows it taking effect. A 404 means
|
|
221
|
+
* nothing is in flight: a run that already ended is not cancellable. Cancelling twice is not an error.
|
|
222
|
+
*/
|
|
223
|
+
export declare const cancelIntegrationRun: (i: InstanceConfig, instanceId: string) => Promise<IntegrationRunState | null>;
|
|
@@ -189,7 +189,8 @@ export interface StatusREST {
|
|
|
189
189
|
* a single outcome. The reason it is on the cheap status surface at all: a client that reconciles
|
|
190
190
|
* against the graph and then deletes what nothing asserts any more would otherwise draw that
|
|
191
191
|
* conclusion from truncated history with no way to know. The integrations runtime does exactly
|
|
192
|
-
* that and defers deletion on this block;
|
|
192
|
+
* that and defers deletion on this block; the human watching deserves the same signal, which is
|
|
193
|
+
* why the app shell renders it too (see DurabilityNotice).
|
|
193
194
|
*/
|
|
194
195
|
export interface DurabilityREST {
|
|
195
196
|
walEnabled: boolean;
|
|
@@ -985,6 +986,13 @@ export interface IntegrationSetting {
|
|
|
985
986
|
* A hint, not a rule - a browser ignores it for a dropped file and the runtime never checks it.
|
|
986
987
|
*/
|
|
987
988
|
accept?: string | null;
|
|
989
|
+
/**
|
|
990
|
+
* `File` settings only: whether the setting takes SEVERAL files rather than one. A statement
|
|
991
|
+
* about the source and not a convenience - a vehicle network arrives as one extract per domain,
|
|
992
|
+
* and the files reference each other, so only the whole set describes it. The runtime refuses the
|
|
993
|
+
* flag on any other kind at startup, so a form can trust it wherever it appears.
|
|
994
|
+
*/
|
|
995
|
+
multiple?: boolean;
|
|
988
996
|
}
|
|
989
997
|
/**
|
|
990
998
|
* What an integration IS, as data that is true before any run exists. A form is rendered from
|
|
@@ -1003,6 +1011,68 @@ export interface IntegrationProvider {
|
|
|
1003
1011
|
readOnly: boolean;
|
|
1004
1012
|
entitySummaryTemplate?: string | null;
|
|
1005
1013
|
}
|
|
1014
|
+
/**
|
|
1015
|
+
* The phases a run passes through, in order. Mirrors RunPhases in the integrations runtime, which is
|
|
1016
|
+
* the one place they are defined; the Studio renders a row per phase, so a name that drifts is a
|
|
1017
|
+
* silently missing row rather than a failure.
|
|
1018
|
+
*/
|
|
1019
|
+
export declare const RUN_PHASES: readonly ["observe", "validate", "resolve", "write-elements", "write-edges", "embed-summaries", "reconcile"];
|
|
1020
|
+
/** What the job route answers when it ACCEPTS a run rather than waiting for it. */
|
|
1021
|
+
export interface IntegrationRunAccepted {
|
|
1022
|
+
runId: string;
|
|
1023
|
+
providerId: string;
|
|
1024
|
+
integrationInstanceId: string;
|
|
1025
|
+
/** Where to watch it, as the runtime spells it. */
|
|
1026
|
+
progress: string;
|
|
1027
|
+
}
|
|
1028
|
+
/**
|
|
1029
|
+
* One identity's current or most recent run.
|
|
1030
|
+
*
|
|
1031
|
+
* Deliberately not a run history. The runtime's RunTracker states exactly how narrow that is, and
|
|
1032
|
+
* why a report has to be readable after the run at all.
|
|
1033
|
+
*/
|
|
1034
|
+
export interface IntegrationRunState {
|
|
1035
|
+
runId: string;
|
|
1036
|
+
providerId: string;
|
|
1037
|
+
integrationInstanceId: string;
|
|
1038
|
+
namespace?: string | null;
|
|
1039
|
+
startedAt: string;
|
|
1040
|
+
finishedAt?: string | null;
|
|
1041
|
+
running: boolean;
|
|
1042
|
+
elapsedMilliseconds: number;
|
|
1043
|
+
/**
|
|
1044
|
+
* Whether this run was PICKED UP after a restart of the runtime rather than started in this
|
|
1045
|
+
* process. It changes what the fields around it mean: `runId` and `startedAt` are the original
|
|
1046
|
+
* ones, so the elapsed figure spans the outage, `completedPhases` already holds what the earlier
|
|
1047
|
+
* attempt got through, and a report's counts cover only the part after the pickup.
|
|
1048
|
+
*/
|
|
1049
|
+
resumed?: boolean;
|
|
1050
|
+
/** The phase now, or null once the run has ended. */
|
|
1051
|
+
phase?: string | null;
|
|
1052
|
+
/** How far through the current phase, where it counts. Zero when it does not. */
|
|
1053
|
+
phaseDone: number;
|
|
1054
|
+
phaseTotal: number;
|
|
1055
|
+
completedPhases: string[];
|
|
1056
|
+
/** The phase a run STOPPED in when it did not finish cleanly; null for a clean or in-flight run. */
|
|
1057
|
+
stoppedInPhase?: string | null;
|
|
1058
|
+
/** Whether the JOB asked for summary embedding. A fact about the run, not about this component. */
|
|
1059
|
+
embedRequested?: boolean;
|
|
1060
|
+
/**
|
|
1061
|
+
* Whether a stop has been ASKED FOR. It stays true after the run ends, which is what separates the
|
|
1062
|
+
* two outcomes a request can have: with `cancelled` the run stopped because of it, without it the
|
|
1063
|
+
* run had already passed its last safe point and finished normally.
|
|
1064
|
+
*/
|
|
1065
|
+
cancelRequested?: boolean;
|
|
1066
|
+
/**
|
|
1067
|
+
* Whether the run ENDED because it was cancelled. A third terminal state beside succeeded and
|
|
1068
|
+
* failed, not a kind of failure.
|
|
1069
|
+
*/
|
|
1070
|
+
cancelled?: boolean;
|
|
1071
|
+
/** Present once there is one, for a failed run as well as a successful one. */
|
|
1072
|
+
report?: IntegrationJobReport | null;
|
|
1073
|
+
/** Set only when the run produced no report at all because it threw. */
|
|
1074
|
+
error?: string | null;
|
|
1075
|
+
}
|
|
1006
1076
|
/** Something a run needs a reader to know, with a stable code to grep for and alert on. */
|
|
1007
1077
|
export interface IntegrationDiagnostic {
|
|
1008
1078
|
code: string;
|
|
@@ -1031,9 +1101,27 @@ export interface IntegrationJobRequest {
|
|
|
1031
1101
|
/**
|
|
1032
1102
|
* Files, by the file setting each was supplied for. Held for the run and dropped: the runtime
|
|
1033
1103
|
* mounts no directory, so this is the only way a file reaches a provider.
|
|
1104
|
+
*
|
|
1105
|
+
* A setting the descriptor declares `multiple` takes an ORDERED list, and the order is part of
|
|
1106
|
+
* the meaning: a provider that composes its files resolves references across the union and gives
|
|
1107
|
+
* a re-declared path to the file listed first. Any other setting takes the bare object, which is
|
|
1108
|
+
* what the runtime requires there - it refuses a list of one for a setting that takes one file.
|
|
1109
|
+
*/
|
|
1110
|
+
files?: Record<string, IntegrationJobFile | IntegrationJobFile[]>;
|
|
1111
|
+
/**
|
|
1112
|
+
* Whether the run should embed one summary per entity, rendered from the provider's
|
|
1113
|
+
* `entitySummaryTemplate`. Default off in the runtime: embedding every element of every run is
|
|
1114
|
+
* cost and noise in equal measure. Needs an embedding provider on the target, and needs the
|
|
1115
|
+
* provider to declare a template - without either, the run still succeeds and simply embeds
|
|
1116
|
+
* nothing, with a diagnostic saying so.
|
|
1034
1117
|
*/
|
|
1035
|
-
files?: Record<string, IntegrationJobFile>;
|
|
1036
1118
|
embedSummaries?: boolean;
|
|
1119
|
+
/**
|
|
1120
|
+
* Which named embedding the summaries are written to. Omitted means the runtime's own default,
|
|
1121
|
+
* `"default"`, which is also the name the document layer binds its index to - so out of the box
|
|
1122
|
+
* integration summaries and document chunks share one bound index.
|
|
1123
|
+
*/
|
|
1124
|
+
embeddingName?: string;
|
|
1037
1125
|
}
|
|
1038
1126
|
/** The only account of a job, because the runtime keeps none. */
|
|
1039
1127
|
export interface IntegrationJobReport {
|
|
@@ -1049,6 +1137,12 @@ export interface IntegrationJobReport {
|
|
|
1049
1137
|
deletionsDeferred: number;
|
|
1050
1138
|
issuedMutations: boolean;
|
|
1051
1139
|
summariesEmbedded?: number;
|
|
1140
|
+
/**
|
|
1141
|
+
* Whether the run was stopped on request at a safe point. A flag of its own rather than an
|
|
1142
|
+
* `errorKind`, because nothing is wrong: the counts above are what really landed, and a cancelled
|
|
1143
|
+
* report never carries an errorKind.
|
|
1144
|
+
*/
|
|
1145
|
+
cancelled?: boolean;
|
|
1052
1146
|
error?: string | null;
|
|
1053
1147
|
errorKind?: string | null;
|
|
1054
1148
|
credentialFingerprint?: string | null;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { DurabilityREST } from "../api/types";
|
|
2
|
+
/**
|
|
3
|
+
* What the shell knows about the ACTIVE namespace, read from the one /status cache row every
|
|
4
|
+
* screen already shares.
|
|
5
|
+
*
|
|
6
|
+
* Two shell-level surfaces consume this and are COUPLED, which is why one hook answers both: the
|
|
7
|
+
* durability banner (AppShell) and the first-run auto-show (FirstRunOverlay). A namespace that is
|
|
8
|
+
* empty BECAUSE its recovery was truncated must get the warning, not a welcome tour - on the old
|
|
9
|
+
* Dashboard that was ordering (the notice rendered above the show), and a modal cannot be ordered
|
|
10
|
+
* behind its own scrim, so the warning suppresses the show instead.
|
|
11
|
+
*/
|
|
12
|
+
export interface NamespaceSignals {
|
|
13
|
+
/** The durability block for this namespace; null/undefined from a server that does not report. */
|
|
14
|
+
durability: DurabilityREST | null | undefined;
|
|
15
|
+
/** True when the block names at least one of the three exceptional states. */
|
|
16
|
+
durabilityUnhealthy: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Strictly 0 vertices, and KNOWN to be 0. /status answers for a namespace the server catalogs
|
|
19
|
+
* but did not load with null counts, and reading that as empty would greet an operator with
|
|
20
|
+
* "get started" over a graph that holds data.
|
|
21
|
+
*
|
|
22
|
+
* LIVE: it follows the change feed within ~300ms of any mutation. Anything that must not fire
|
|
23
|
+
* mid-operation has to latch it rather than derive from it - a sample load is a tabula rasa
|
|
24
|
+
* followed by an import, so this is briefly true in the middle of one.
|
|
25
|
+
*/
|
|
26
|
+
empty: boolean;
|
|
27
|
+
/** Non-zero vertex count, i.e. the graph is known to hold data (re-arms the first-run show). */
|
|
28
|
+
populated: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether /status has answered for this namespace at all. `empty` and `populated` are both false
|
|
31
|
+
* while it has not, which is indistinguishable from a not-loaded namespace without this.
|
|
32
|
+
*/
|
|
33
|
+
known: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The per-namespace key both the first-run store and the caches use: `<instanceId>/<ns>`, or the
|
|
36
|
+
* bare instance id on a server that predates namespaces (see boundInstance). Null with no
|
|
37
|
+
* active instance.
|
|
38
|
+
*/
|
|
39
|
+
key: string | null;
|
|
40
|
+
}
|
|
41
|
+
export declare function useNamespaceSignals(): NamespaceSignals;
|
|
@@ -13,11 +13,6 @@ export declare const NAV: readonly [{
|
|
|
13
13
|
readonly label: "Connect";
|
|
14
14
|
readonly icon: "◉";
|
|
15
15
|
readonly scoped: false;
|
|
16
|
-
}, {
|
|
17
|
-
readonly leaf: "dashboard";
|
|
18
|
-
readonly label: "Dashboard";
|
|
19
|
-
readonly icon: "▦";
|
|
20
|
-
readonly scoped: true;
|
|
21
16
|
}, {
|
|
22
17
|
readonly leaf: "samples";
|
|
23
18
|
readonly label: "Samples";
|
|
@@ -44,15 +39,10 @@ export declare const NAV: readonly [{
|
|
|
44
39
|
readonly icon: "⌗";
|
|
45
40
|
readonly scoped: true;
|
|
46
41
|
}, {
|
|
47
|
-
readonly leaf: "
|
|
48
|
-
readonly label: "
|
|
42
|
+
readonly leaf: "traverse";
|
|
43
|
+
readonly label: "Traverse";
|
|
49
44
|
readonly icon: "↝";
|
|
50
45
|
readonly scoped: true;
|
|
51
|
-
}, {
|
|
52
|
-
readonly leaf: "subgraphs";
|
|
53
|
-
readonly label: "Subgraph";
|
|
54
|
-
readonly icon: "◫";
|
|
55
|
-
readonly scoped: true;
|
|
56
46
|
}, {
|
|
57
47
|
readonly leaf: "analytics";
|
|
58
48
|
readonly label: "Analytics";
|