@fallen-8/studio 0.0.37 → 0.0.39
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-CmDAo5BT.js → Canvas3D-CafFy8T8.js} +1 -1
- package/dist-lib/{F8GraphCanvas-COQKIUas.js → F8GraphCanvas-CMXizZ4K.js} +904 -865
- package/dist-lib/canvas.js +1 -1
- package/dist-lib/{cssMode-Cm-p9yGb.js → cssMode-Dd6oqVGH.js} +1 -1
- package/dist-lib/f8-studio.css +1 -1
- package/dist-lib/f8-studio.js +2 -2
- package/dist-lib/{freemarker2-DU-Ctapi.js → freemarker2-_7Qea7qU.js} +1 -1
- package/dist-lib/{handlebars-BsqZtC5a.js → handlebars-BrjKnoRC.js} +1 -1
- package/dist-lib/{html-CUyknR5b.js → html-CZOSsAmT.js} +1 -1
- package/dist-lib/{htmlMode-DjyPljE2.js → htmlMode-DmeNRJyP.js} +1 -1
- package/dist-lib/{index-BQbFjItv.js → index-CGOXemLg.js} +27547 -26386
- package/dist-lib/{javascript-CVQBymBa.js → javascript-E9zK2eIG.js} +1 -1
- package/dist-lib/{jsonMode-B3hcJ0l3.js → jsonMode-BmT8sixk.js} +1 -1
- package/dist-lib/{liquid-DLrt4Cls.js → liquid-mEomZ5zY.js} +1 -1
- package/dist-lib/{mdx-DePkemui.js → mdx-poAEdYDh.js} +1 -1
- package/dist-lib/{python-CUe0bWsE.js → python-BkeUbXrt.js} +1 -1
- package/dist-lib/{razor-DD_zUh3z.js → razor-CSXbiZmb.js} +1 -1
- package/dist-lib/{tsMode-Ae3UtOmp.js → tsMode-jcKLVReC.js} +1 -1
- package/dist-lib/types/api/client.d.ts +49 -0
- package/dist-lib/types/api/endpoints.d.ts +56 -10
- package/dist-lib/types/api/types.d.ts +72 -3
- package/dist-lib/types/canvas/InteractPanel.d.ts +19 -0
- package/dist-lib/types/components/ConfigurationSurface.d.ts +23 -2
- package/dist-lib/types/components/ErrorBox.d.ts +6 -0
- package/dist-lib/types/components/SemanticBlockEditor.d.ts +4 -1
- package/dist-lib/types/components/SemanticQueryEditor.d.ts +8 -1
- package/dist-lib/types/components/SettingRow.d.ts +14 -0
- package/dist-lib/types/delegate/nl/NlDraftStats.d.ts +13 -0
- package/dist-lib/types/delegate/nl/config.d.ts +5 -4
- package/dist-lib/types/delegate/nl/generate.d.ts +6 -0
- package/dist-lib/types/lib/canvasCap.d.ts +10 -0
- package/dist-lib/types/lib/canvasInteract.d.ts +174 -0
- package/dist-lib/types/lib/fieldHelp.d.ts +10 -1
- package/dist-lib/types/lib/fileLimits.d.ts +69 -0
- package/dist-lib/types/lib/format.d.ts +8 -0
- package/dist-lib/types/lib/listCaps.d.ts +16 -2
- package/dist-lib/types/lib/modelProvenance.d.ts +26 -0
- package/dist-lib/types/lib/neighborhood.d.ts +1 -0
- package/dist-lib/types/lib/vectorIndexCreate.d.ts +49 -0
- package/dist-lib/types/lib/vectorSearch.d.ts +19 -0
- package/dist-lib/types/state/instanceStore.d.ts +59 -4
- package/dist-lib/types/state/integrations.d.ts +21 -1
- package/dist-lib/{typescript-LNGesWYR.js → typescript-BqWn12P7.js} +1 -1
- package/dist-lib/{xml-BuD_-6ib.js → xml-BkH9m6gQ.js} +1 -1
- package/dist-lib/{yaml-DCzPbyTS.js → yaml-DURIwCnM.js} +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as Et } from "./index-
|
|
1
|
+
import { m as Et } from "./index-CGOXemLg.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-CGOXemLg.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-CGOXemLg.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-CGOXemLg.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-CGOXemLg.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-CGOXemLg.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))
|
|
@@ -96,6 +96,13 @@ export declare function resolveAuthHeaders(instance: InstanceConfig): Promise<Re
|
|
|
96
96
|
* Shared by {@link apiRequest} and the raw-fetch bulk endpoints so every failure looks the same.
|
|
97
97
|
*/
|
|
98
98
|
export declare function throwIfNotOk(response: Response, url: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Turns one non-ok answer into an {@link ApiError}, whatever transport read it. Separate from
|
|
101
|
+
* {@link throwIfNotOk} because {@link apiUpload} goes through XMLHttpRequest and has no
|
|
102
|
+
* `Response`, and a second copy of this would be a second place for the namespace announcement
|
|
103
|
+
* below to go stale.
|
|
104
|
+
*/
|
|
105
|
+
export declare function raiseApiError(status: number, url: string, body: string): never;
|
|
99
106
|
/**
|
|
100
107
|
* One request's deadline: a signal that aborts when the caller's does OR when the timeout expires,
|
|
101
108
|
* and a flag saying which of the two happened.
|
|
@@ -119,3 +126,45 @@ export declare function apiRequest<T>(instance: InstanceConfig, path: string, op
|
|
|
119
126
|
* itself, so no Content-Type is written here.
|
|
120
127
|
*/
|
|
121
128
|
export declare function apiForm<T>(instance: InstanceConfig, path: string, form: FormData, options?: Pick<RequestOptions, "signal" | "scope">): Promise<T | null>;
|
|
129
|
+
/**
|
|
130
|
+
* Whether a failure is somebody having cancelled rather than something having gone wrong.
|
|
131
|
+
*
|
|
132
|
+
* It exists because react-query does NOT treat an aborted MUTATION as a cancellation the way it
|
|
133
|
+
* treats an aborted query: the mutation moves to `isError` with the abort as its error, so a call
|
|
134
|
+
* site that renders `isError` puts a red box on the screen of the person who just pressed cancel.
|
|
135
|
+
*
|
|
136
|
+
* Matched on the NAME alone, deliberately. Neither `instanceof DOMException` nor `instanceof Error`
|
|
137
|
+
* can be relied on here: jsdom's `DOMException` does not extend `Error`, so an `instanceof Error`
|
|
138
|
+
* check passes in a browser and fails in the test suite - which is the worst of both, a guard that
|
|
139
|
+
* is only absent where it is being verified. Every abort reason carries this name, whatever its
|
|
140
|
+
* class.
|
|
141
|
+
*/
|
|
142
|
+
export declare function wasCancelled(error: unknown): boolean;
|
|
143
|
+
/** How far a send has got. `total` is null when the browser will not say how much there is. */
|
|
144
|
+
export interface UploadProgress {
|
|
145
|
+
sent: number;
|
|
146
|
+
total: number | null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Multipart POST that reports how far the SEND has got (feature integration-file-transport).
|
|
150
|
+
*
|
|
151
|
+
* XMLHttpRequest and not `fetch`, for one reason: fetch cannot report upload progress. A
|
|
152
|
+
* `ReadableStream` request body can, but it requires HTTP/2 and `duplex: "half"`, is unsupported in
|
|
153
|
+
* Safari, and would make progress depend on the transport an instance happens to be reached over.
|
|
154
|
+
* XHR reports it everywhere, so this is a deliberate exception rather than legacy code, and it is
|
|
155
|
+
* the ONLY one: everything without a progress bar goes through {@link apiForm}.
|
|
156
|
+
*
|
|
157
|
+
* The progress matters because of what this carries. An integration job may be gigabytes of
|
|
158
|
+
* extracts, and a send with no feedback is indistinguishable from a hang - which is exactly what
|
|
159
|
+
* the operator who prompted this feature reported: they pressed run, saw nothing for minutes, and
|
|
160
|
+
* then got an error.
|
|
161
|
+
*
|
|
162
|
+
* Failures are shaped like every other call's: an {@link ApiError} for a status, an abort rethrown
|
|
163
|
+
* as an abort so react-query reads it as a cancellation, and a `TypeError` for a transport failure,
|
|
164
|
+
* which is the same class `fetch` throws and which `ErrorBox` renders as an unreachable instance.
|
|
165
|
+
*/
|
|
166
|
+
export declare function apiUpload<T>(instance: InstanceConfig, path: string, form: FormData, options?: {
|
|
167
|
+
signal?: AbortSignal;
|
|
168
|
+
scope?: "namespace" | "fallen8";
|
|
169
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
170
|
+
}): Promise<T | null>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { UploadProgress } from "./client";
|
|
1
2
|
import type { InstanceConfig } from "../instances/types";
|
|
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
|
+
import type { AnalyticsResultREST, DocumentBinding, DocumentDetail, DocumentEntityList, DocumentList, DocumentSearchResult, DocumentSearchSpecification, DocumentSummary, FileLimits, 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, ChatModelsREST, 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
|
/**
|
|
4
5
|
* The reachability probe, and the ONE call with a deadline (see `RequestOptions.timeoutMs`).
|
|
5
6
|
*
|
|
@@ -33,6 +34,15 @@ export declare const writeConfig: (i: InstanceConfig, spec: ConfigWriteSpec, sig
|
|
|
33
34
|
* This is the DEFAULT NL-assist transport (custom endpoints stay browser-direct, off this path).
|
|
34
35
|
*/
|
|
35
36
|
export declare const postChat: (i: InstanceConfig, spec: ChatCompletionSpec, signal?: AbortSignal) => Promise<ChatCompletionResultREST | null>;
|
|
37
|
+
/**
|
|
38
|
+
* What the RUNNING chat backend catalogues (feature chat-model-catalog): one bounded read that fans
|
|
39
|
+
* out to the backend's own model list. Fallen-8-level and gated exactly like POST /chat (403 when the
|
|
40
|
+
* chat capability is off), so Studio only calls it where the answer is actionable.
|
|
41
|
+
*
|
|
42
|
+
* The answer is not the whole resolvable set: a backend can serve a name it does not catalogue, which
|
|
43
|
+
* is why the picker fed from this stays free-text.
|
|
44
|
+
*/
|
|
45
|
+
export declare const getChatModels: (i: InstanceConfig, signal?: AbortSignal) => Promise<ChatModelsREST | null>;
|
|
36
46
|
/** Authorized iff the instance needs no key or accepted ours (server contract on StatusREST.ApiKeyRequired). */
|
|
37
47
|
export declare const isAuthorized: (s: StatusREST) => boolean;
|
|
38
48
|
/**
|
|
@@ -102,12 +112,12 @@ export declare const getGraphElement: (i: InstanceConfig, id: number, signal?: A
|
|
|
102
112
|
* which re-reads those singly.
|
|
103
113
|
*/
|
|
104
114
|
export declare const getGraphElements: (i: InstanceConfig, ids: number[], signal?: AbortSignal) => Promise<GraphElementBatchREST | null>;
|
|
105
|
-
export declare const getOutEdgeProperties: (i: InstanceConfig, id: number) => Promise<string[] | null>;
|
|
106
|
-
export declare const getInEdgeProperties: (i: InstanceConfig, id: number) => Promise<string[] | null>;
|
|
107
|
-
export declare const getOutEdges: (i: InstanceConfig, id: number, edgePropertyId: string) => Promise<number[] | null>;
|
|
108
|
-
export declare const getInEdges: (i: InstanceConfig, id: number, edgePropertyId: string) => Promise<number[] | null>;
|
|
109
|
-
export declare const getInDegree: (i: InstanceConfig, id: number) => Promise<number | null>;
|
|
110
|
-
export declare const getOutDegree: (i: InstanceConfig, id: number) => Promise<number | null>;
|
|
115
|
+
export declare const getOutEdgeProperties: (i: InstanceConfig, id: number, signal?: AbortSignal) => Promise<string[] | null>;
|
|
116
|
+
export declare const getInEdgeProperties: (i: InstanceConfig, id: number, signal?: AbortSignal) => Promise<string[] | null>;
|
|
117
|
+
export declare const getOutEdges: (i: InstanceConfig, id: number, edgePropertyId: string, signal?: AbortSignal) => Promise<number[] | null>;
|
|
118
|
+
export declare const getInEdges: (i: InstanceConfig, id: number, edgePropertyId: string, signal?: AbortSignal) => Promise<number[] | null>;
|
|
119
|
+
export declare const getInDegree: (i: InstanceConfig, id: number, signal?: AbortSignal) => Promise<number | null>;
|
|
120
|
+
export declare const getOutDegree: (i: InstanceConfig, id: number, signal?: AbortSignal) => Promise<number | null>;
|
|
111
121
|
export declare const getEdgePropertyDegree: (i: InstanceConfig, id: number, direction: "in" | "out", edgePropertyId: string) => Promise<number | null>;
|
|
112
122
|
export declare const getEdgeSource: (i: InstanceConfig, id: number) => Promise<number | null>;
|
|
113
123
|
export declare const getEdgeTarget: (i: InstanceConfig, id: number) => Promise<number | null>;
|
|
@@ -125,7 +135,7 @@ export declare const deleteElementEmbedding: (i: InstanceConfig, id: number, nam
|
|
|
125
135
|
/** Embed text and store it as the element's named embedding (+ model stamp), one txn. */
|
|
126
136
|
export declare const embedElement: (i: InstanceConfig, spec: EmbedElementSpecification) => Promise<boolean | null>;
|
|
127
137
|
/** Semantic search: embed the query text once, then kNN — same result shape as scanVector. */
|
|
128
|
-
export declare const embeddingSearch: (i: InstanceConfig, spec: EmbeddingSearchSpecification) => Promise<VectorSearchResultREST | null>;
|
|
138
|
+
export declare const embeddingSearch: (i: InstanceConfig, spec: EmbeddingSearchSpecification, signal?: AbortSignal) => Promise<VectorSearchResultREST | null>;
|
|
129
139
|
export declare const createIndex: (i: InstanceConfig, spec: PluginSpecification) => Promise<boolean | null>;
|
|
130
140
|
export declare const addToIndex: (i: InstanceConfig, indexId: string, spec: IndexAddToSpecification) => Promise<boolean | null>;
|
|
131
141
|
export declare const removeIndexKey: (i: InstanceConfig, indexId: string, key: IndexKeySpecification) => Promise<boolean | null>;
|
|
@@ -201,13 +211,49 @@ export declare const listEntities: (i: InstanceConfig, options?: {
|
|
|
201
211
|
}, signal?: AbortSignal) => Promise<DocumentEntityList | null>;
|
|
202
212
|
/** The integrations this instance's runtime ships. A 403 or 401 means the capability is off. */
|
|
203
213
|
export declare const listIntegrationProviders: (i: InstanceConfig, signal?: AbortSignal) => Promise<IntegrationProvider[] | null>;
|
|
204
|
-
/**
|
|
214
|
+
/**
|
|
215
|
+
* What a job may carry on THIS instance: the ceilings already reconciled with the proxy's own
|
|
216
|
+
* transport bound, so there is one number per question and nothing to combine here. Read before
|
|
217
|
+
* staging so an oversized set is refused in the form rather than after an upload.
|
|
218
|
+
*
|
|
219
|
+
* An instance too old to serve it answers 404, which is why every caller has to treat "unknown"
|
|
220
|
+
* as "check nothing" rather than substituting a guess: a hardcoded ceiling here is how Studio
|
|
221
|
+
* came to carry one BELOW the runtime's and refuse jobs the instance would have accepted.
|
|
222
|
+
*/
|
|
223
|
+
export declare const getIntegrationLimits: (i: InstanceConfig, signal?: AbortSignal) => Promise<FileLimits | null>;
|
|
205
224
|
/**
|
|
206
225
|
* Starts a run. Answers a run id, NOT a report: the report is read afterwards from
|
|
207
226
|
* getIntegrationRun, because any real source outlives the connection that would have carried it.
|
|
208
227
|
* Everything that can reject the job still fails this call, so a resolved promise means it started.
|
|
228
|
+
*
|
|
229
|
+
* Sent as a MULTIPART FORM (feature integration-file-transport): the document in a `job` part with
|
|
230
|
+
* its `files` map left out, and each file as its own part streamed straight from the browser's
|
|
231
|
+
* handle. There is deliberately no JSON fallback here, even though the instance still accepts one -
|
|
232
|
+
* keeping it would mean keeping a base64 encoder, and that encoder is what capped a job at about
|
|
233
|
+
* 384 MiB regardless of what the instance would have accepted. Against an apiApp too old to accept
|
|
234
|
+
* multipart the answer is a 415, which says so plainly.
|
|
235
|
+
*
|
|
236
|
+
* `onProgress` is how far the SEND has got, which for a multi-gigabyte set of extracts is the
|
|
237
|
+
* difference between a progress bar and an apparent hang.
|
|
238
|
+
*/
|
|
239
|
+
export declare const submitIntegrationJob: (i: InstanceConfig, job: IntegrationJobRequest, options?: {
|
|
240
|
+
signal?: AbortSignal;
|
|
241
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
242
|
+
}) => Promise<IntegrationRunAccepted | null>;
|
|
243
|
+
/**
|
|
244
|
+
* The job as a multipart form. Exported so a test can assert on the parts rather than on a mock's
|
|
245
|
+
* arguments: what matters is the shape that goes on the wire.
|
|
246
|
+
*
|
|
247
|
+
* The `job` part is a STRING and not a Blob. Appending a Blob makes the browser declare a filename
|
|
248
|
+
* on that part, which the runtime refuses by name because a value part carrying a filename is how
|
|
249
|
+
* the whole envelope gets sent as a file.
|
|
250
|
+
*
|
|
251
|
+
* The part naming is the runtime's grammar: `files[<key>]` for a setting given one file,
|
|
252
|
+
* `files[<key>][<n>]` numbered from 0 for one given several. The distinction is load-bearing rather
|
|
253
|
+
* than cosmetic - a list of one is a different statement from one file, and a setting the descriptor
|
|
254
|
+
* does not declare `multiple` refuses the list form.
|
|
209
255
|
*/
|
|
210
|
-
export declare
|
|
256
|
+
export declare function integrationJobForm(job: IntegrationJobRequest): FormData;
|
|
211
257
|
/**
|
|
212
258
|
* One identity's current or most recent run: the phase while it runs, the report once it ends.
|
|
213
259
|
* Answers 404 when the runtime has no slot for that identity, which a caller should read as "not
|
|
@@ -435,6 +435,10 @@ export interface EmbeddingProviderStatsREST {
|
|
|
435
435
|
export interface ChatProviderStatsREST {
|
|
436
436
|
enabled: boolean;
|
|
437
437
|
backend: string | null;
|
|
438
|
+
/**
|
|
439
|
+
* From the configured options, not from a probe target: reported for EVERY backend, including
|
|
440
|
+
* the ones with no residency API.
|
|
441
|
+
*/
|
|
438
442
|
model: string | null;
|
|
439
443
|
loaded: boolean;
|
|
440
444
|
resident?: boolean | null;
|
|
@@ -526,8 +530,28 @@ export interface ChatCompletionStatsREST {
|
|
|
526
530
|
export interface ChatCompletionResultREST {
|
|
527
531
|
content: string;
|
|
528
532
|
model: string | null;
|
|
533
|
+
/**
|
|
534
|
+
* Which backend served THIS response (feature model-providers), stamped by the server. Null on
|
|
535
|
+
* a server predating the field. Per-call versus ambient: see lib/modelProvenance.ts.
|
|
536
|
+
*/
|
|
537
|
+
backend?: string | null;
|
|
529
538
|
stats?: ChatCompletionStatsREST | null;
|
|
530
539
|
}
|
|
540
|
+
export interface ChatModelREST {
|
|
541
|
+
/** Verbatim from the backend's catalog; the server sorts ordinally for a stable contract. */
|
|
542
|
+
name: string;
|
|
543
|
+
/** Null when the backend does not say (OpenAI, Anthropic, an old sidecar, a failed lookup). */
|
|
544
|
+
capability: "completion" | "embedding" | null;
|
|
545
|
+
/** Whether a worker can serve it right now; null when the backend reports nothing. */
|
|
546
|
+
available: boolean | null;
|
|
547
|
+
/** The backend's own class string, passed through verbatim and carrying no published legend. */
|
|
548
|
+
class: string | null;
|
|
549
|
+
}
|
|
550
|
+
export interface ChatModelsREST {
|
|
551
|
+
/** The running backend's name, in the spelling ChatCompletionResultREST.backend uses. */
|
|
552
|
+
backend: string;
|
|
553
|
+
models: ChatModelREST[];
|
|
554
|
+
}
|
|
531
555
|
export interface GraphStatisticsREST {
|
|
532
556
|
vertexCount: number;
|
|
533
557
|
edgeCount: number;
|
|
@@ -793,6 +817,14 @@ export interface SubGraphSemanticSummary {
|
|
|
793
817
|
pattern: string;
|
|
794
818
|
minScore: number;
|
|
795
819
|
}[] | null;
|
|
820
|
+
/**
|
|
821
|
+
* Which embedding backend turned queryText into the bound vector, and that function's identity
|
|
822
|
+
* stamp (`name[@version]#dimension#metric`) - both stamped at registration and carried with the
|
|
823
|
+
* recipe, so the echo is the same on create, on read and after a recalculate. Absent for a
|
|
824
|
+
* vector-in registration: no embed call happened, so there is nothing honest to report.
|
|
825
|
+
*/
|
|
826
|
+
embeddingBackend?: string | null;
|
|
827
|
+
embeddingIdentity?: string | null;
|
|
796
828
|
}
|
|
797
829
|
export interface SubGraphSummary {
|
|
798
830
|
name: string;
|
|
@@ -1003,6 +1035,13 @@ export interface IntegrationProvider {
|
|
|
1003
1035
|
id: string;
|
|
1004
1036
|
displayName: string;
|
|
1005
1037
|
description: string;
|
|
1038
|
+
/**
|
|
1039
|
+
* Absolute http(s) URL of the integration's own documentation, when it declares one. It is what
|
|
1040
|
+
* keeps `description` a sentence instead of a reference manual in a table cell. Optional: an
|
|
1041
|
+
* older runtime, or a provider whose author wrote no page, sends none. Render it only through
|
|
1042
|
+
* `docsHref` in state/integrations.ts, which refuses a scheme a browser should not follow.
|
|
1043
|
+
*/
|
|
1044
|
+
docsUrl?: string | null;
|
|
1006
1045
|
settings: IntegrationSetting[];
|
|
1007
1046
|
entityKinds: string[];
|
|
1008
1047
|
claimTypes: string[];
|
|
@@ -1079,18 +1118,48 @@ export interface IntegrationDiagnostic {
|
|
|
1079
1118
|
message: string;
|
|
1080
1119
|
subject?: string | null;
|
|
1081
1120
|
}
|
|
1082
|
-
/**
|
|
1121
|
+
/**
|
|
1122
|
+
* One file a job carries: the browser's own handle on it.
|
|
1123
|
+
*
|
|
1124
|
+
* A `File` and NOT its bytes, which is the whole of feature integration-file-transport on this side.
|
|
1125
|
+
* The version this replaced carried `contentBase64`, so the tab had to hold every file's bytes, the
|
|
1126
|
+
* base64 expansion of them and the serialised request all at once; a set of AUTOSAR extracts left
|
|
1127
|
+
* gigabytes resident before the send even started, and the encoder failed outright at about 384 MiB
|
|
1128
|
+
* of input because a JavaScript string caps at 512 MiB. A handle costs nothing until the browser
|
|
1129
|
+
* streams it off disk.
|
|
1130
|
+
*
|
|
1131
|
+
* The price, and it is real: the file is read at SEND time, so one moved, renamed or edited after
|
|
1132
|
+
* being staged fails then rather than at pick time. The form says so.
|
|
1133
|
+
*/
|
|
1083
1134
|
export interface IntegrationJobFile {
|
|
1084
1135
|
/** The file's own name, used verbatim in the run's messages. Never a path. */
|
|
1085
1136
|
name: string;
|
|
1086
|
-
/** The
|
|
1087
|
-
|
|
1137
|
+
/** The handle. Nothing reads it until the request is sent. */
|
|
1138
|
+
file: File;
|
|
1088
1139
|
}
|
|
1089
1140
|
/**
|
|
1090
1141
|
* The whole configuration of one run. A credential setting's value arrives in `credentialValues` and
|
|
1091
1142
|
* a file setting's file in `files`, never in `settings`: the runtime leases and redacts the first,
|
|
1092
1143
|
* holds the second for the run and drops it, and treats `settings` as ordinary data.
|
|
1093
1144
|
*/
|
|
1145
|
+
/**
|
|
1146
|
+
* What a job may carry on one instance (feature integration-file-transport), from
|
|
1147
|
+
* `GET /integrations/limits`. Already the ceiling that BINDS: the runtime owns the configuration,
|
|
1148
|
+
* but every request arrives through the apiApp's transport bound, so the proxy reconciles the two
|
|
1149
|
+
* and serves one number per question. Nothing here is combined client-side, on purpose - a client
|
|
1150
|
+
* that computes its own ceiling is how Studio ended up with one below the runtime's.
|
|
1151
|
+
*
|
|
1152
|
+
* Zero or less means that ceiling is switched off, which only `maxJobFiles` can report: the byte
|
|
1153
|
+
* ceilings always have the proxy's transport bound behind them.
|
|
1154
|
+
*/
|
|
1155
|
+
export interface FileLimits {
|
|
1156
|
+
/** The most decoded bytes ONE file may carry. */
|
|
1157
|
+
maxFileBytes: number;
|
|
1158
|
+
/** The most decoded bytes one job's files may come to in TOTAL, across every file setting. */
|
|
1159
|
+
maxJobFileBytes: number;
|
|
1160
|
+
/** How many files one job may carry, counted across every file setting. */
|
|
1161
|
+
maxJobFiles: number;
|
|
1162
|
+
}
|
|
1094
1163
|
export interface IntegrationJobRequest {
|
|
1095
1164
|
providerId: string;
|
|
1096
1165
|
integrationInstanceId: string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ElementRef } from "./GraphCanvas";
|
|
2
|
+
/**
|
|
3
|
+
* Canvas "Interact" tab (feature canvas-interact): filters build a MATCH SET over the canvas
|
|
4
|
+
* vertices, and two view-only verbs apply to it - expand every match's neighborhood, or remove
|
|
5
|
+
* every match from the view. With no filter active the match set is every canvas vertex, which is
|
|
6
|
+
* how "expand all" is expressed rather than as a separate button.
|
|
7
|
+
*
|
|
8
|
+
* Label, property and on-canvas degree are cheap, so they evaluate live on every render. Database
|
|
9
|
+
* degree and the semantic threshold cost server round trips, so they run behind Preview, and any
|
|
10
|
+
* filter edit or canvas change INVALIDATES that result: acting on a stale match set is the bug
|
|
11
|
+
* this lifecycle exists to prevent. Nothing here touches the database.
|
|
12
|
+
*/
|
|
13
|
+
export declare function InteractPanel({ selected, onSelect, onHover, }: {
|
|
14
|
+
/** What the Detail panel currently shows, so a bulk remove can retire a selection it took. */
|
|
15
|
+
selected: ElementRef | null;
|
|
16
|
+
onSelect: (ref: ElementRef | null) => void;
|
|
17
|
+
/** Spotlight a previewed vertex on the canvas, the Find tab's affordance. */
|
|
18
|
+
onHover?: (ref: ElementRef | null) => void;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
1
|
+
import { ApiError } from "../api/client";
|
|
2
|
+
import type { InstanceConfig } from "../instances/types";
|
|
3
|
+
import type { ChatProviderStatsREST, ObservabilityConfigREST, PendingRestartREST, SettingREST } from "../api/types";
|
|
3
4
|
/**
|
|
4
5
|
* The configuration surface (feature configuration-surface): one dialog holding everything this
|
|
5
6
|
* instance binds, reached from the single Configure button on the Connect screen's configuration card.
|
|
@@ -14,12 +15,24 @@ import type { ObservabilityConfigREST, PendingRestartREST, SettingREST } from ".
|
|
|
14
15
|
* a value under a half-typed field here, which is exactly what the poll suspension exists to prevent.
|
|
15
16
|
* What this component does own is where you are looking: the section, the query and the filter. Those
|
|
16
17
|
* live under Dialog.Content, which Radix unmounts on close, so they reset without an effect.
|
|
18
|
+
*
|
|
19
|
+
* The ONE server read it does own is the chat model catalog (feature chat-model-catalog), because it
|
|
20
|
+
* only makes sense once the operator has navigated to one particular section: it sits on its own cache
|
|
21
|
+
* key, is never polled, fetches at most once per visit and unmounts with this subtree. The draft still
|
|
22
|
+
* belongs to the card, so this cannot replace a value under a half-typed field.
|
|
17
23
|
*/
|
|
18
24
|
export interface ConfigurationSurfaceProps {
|
|
19
25
|
open: boolean;
|
|
20
26
|
onClose: () => void;
|
|
21
27
|
/** Named in the header, because the settings behind it belong to one instance and not the next. */
|
|
22
28
|
instanceName: string;
|
|
29
|
+
/**
|
|
30
|
+
* The instance the catalog read addresses (feature chat-model-catalog). A PROP rather than a
|
|
31
|
+
* registry subscription: everything else here is prop-driven, and subscribing re-rendered this
|
|
32
|
+
* subtree during an instance switch instead of letting it unmount, so it could paint one pass
|
|
33
|
+
* addressing the new instance while every other prop still described the old one.
|
|
34
|
+
*/
|
|
35
|
+
instance: InstanceConfig | null;
|
|
23
36
|
settings: readonly SettingREST[];
|
|
24
37
|
pendingRestart: readonly PendingRestartREST[];
|
|
25
38
|
observability: ObservabilityConfigREST;
|
|
@@ -38,5 +51,13 @@ export interface ConfigurationSurfaceProps {
|
|
|
38
51
|
isRowDisabled: (key: string) => boolean;
|
|
39
52
|
/** A blanked numeric field the server would refuse the whole batch over, if there is one. */
|
|
40
53
|
blankNumericKey?: string;
|
|
54
|
+
/**
|
|
55
|
+
* The chat gateway's RUNNING state (feature chat-model-catalog), absent or null when the instance
|
|
56
|
+
* reports none. Two facts live only here: whether chat is on at all, and which backend is actually
|
|
57
|
+
* serving. Neither is derivable from the inventory - Fallen8:Chat:Enabled is never-writable so its
|
|
58
|
+
* value is withheld, and the Backend descriptor publishes the STORED value, which after a write is
|
|
59
|
+
* the pending one. The picker follows what is running.
|
|
60
|
+
*/
|
|
61
|
+
chat?: ChatProviderStatsREST | null;
|
|
41
62
|
}
|
|
42
63
|
export declare function ConfigurationSurface(props: ConfigurationSurfaceProps): import("react").JSX.Element;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Every failed request shows HTTP status + server message (NFR: never a silent console
|
|
3
3
|
* error). A network-level failure renders as the disconnected state with a retry.
|
|
4
|
+
*
|
|
5
|
+
* The fallback title is deliberately NOT about requests. This box also renders throws from the
|
|
6
|
+
* client side of a mutation, where no request was made at all: an integration submit that could
|
|
7
|
+
* not build its body reported "Request failed / Invalid string length", which sent the reader
|
|
8
|
+
* looking for a server fault that did not exist. A title is a claim, so the generic one claims
|
|
9
|
+
* only what is always true.
|
|
4
10
|
*/
|
|
5
11
|
export declare function ErrorBox({ error, onRetry }: {
|
|
6
12
|
error: unknown;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type SemanticDraft } from "../lib/semantic";
|
|
2
|
+
import type { EmbeddingProviderStatsREST } from "../api/types";
|
|
2
3
|
/**
|
|
3
4
|
* The Path screen's declarative semantic block (feature element-embeddings): the shared
|
|
4
5
|
* query core (SemanticQueryEditor) plus the block-local minScore filter and
|
|
@@ -11,7 +12,7 @@ import { type SemanticDraft } from "../lib/semantic";
|
|
|
11
12
|
* Controlled: the parent owns the SemanticDraft and derives which delegate slots to
|
|
12
13
|
* disable from semanticOwnsVertex{Filter,Cost}.
|
|
13
14
|
*/
|
|
14
|
-
export declare function SemanticBlockEditor({ draft, onChange, allowCost, costDisabledReason, providerEnabled, embeddingNames, idPrefix, disabled, disabledReason, }: {
|
|
15
|
+
export declare function SemanticBlockEditor({ draft, onChange, allowCost, costDisabledReason, providerEnabled, provider, embeddingNames, idPrefix, disabled, disabledReason, }: {
|
|
15
16
|
draft: SemanticDraft;
|
|
16
17
|
onChange: (patch: Partial<SemanticDraft>) => void;
|
|
17
18
|
/** costBySimilarity is a path concept; false disables the cost slot entirely. */
|
|
@@ -21,6 +22,8 @@ export declare function SemanticBlockEditor({ draft, onChange, allowCost, costDi
|
|
|
21
22
|
costDisabledReason?: string;
|
|
22
23
|
/** Resolved provider state; null = unknown (no graph shape computed yet). */
|
|
23
24
|
providerEnabled: boolean | null;
|
|
25
|
+
/** Passed straight to SemanticQueryEditor, which documents it. */
|
|
26
|
+
provider?: EmbeddingProviderStatsREST | null;
|
|
24
27
|
embeddingNames: string[];
|
|
25
28
|
idPrefix: string;
|
|
26
29
|
/** e.g. a stored template is selected — the block cannot apply. */
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import type { SemanticQueryDraft } from "../lib/semantic";
|
|
2
|
+
import type { EmbeddingProviderStatsREST } from "../api/types";
|
|
2
3
|
/**
|
|
3
4
|
* The semantic QUERY fields (source, vector/text, embedding name, metric) — the one query
|
|
4
5
|
* every semantic decision of a request scores against. Extracted so the Path screen's
|
|
5
6
|
* block editor and the Subgraph screen's per-request query section render exactly one
|
|
6
7
|
* implementation. Pure data — it compiles no C#.
|
|
7
8
|
*/
|
|
8
|
-
export declare function SemanticQueryEditor({ query, onChange, providerEnabled, embeddingNames, idPrefix, }: {
|
|
9
|
+
export declare function SemanticQueryEditor({ query, onChange, providerEnabled, provider, embeddingNames, idPrefix, }: {
|
|
9
10
|
query: SemanticQueryDraft;
|
|
10
11
|
onChange: (patch: Partial<SemanticQueryDraft>) => void;
|
|
11
12
|
/** Resolved provider state; null = unknown (no graph shape computed yet). */
|
|
12
13
|
providerEnabled: boolean | null;
|
|
14
|
+
/**
|
|
15
|
+
* The provider snapshot behind {@link providerEnabled}, when the caller holds it: it names the
|
|
16
|
+
* backend and embedding function that will turn the text into a vector. Optional, so a call
|
|
17
|
+
* site that cannot answer that question simply says nothing.
|
|
18
|
+
*/
|
|
19
|
+
provider?: EmbeddingProviderStatsREST | null;
|
|
13
20
|
embeddingNames: string[];
|
|
14
21
|
idPrefix: string;
|
|
15
22
|
}): import("react").JSX.Element;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { SettingREST } from "../api/types";
|
|
2
|
+
/** One value a string row can OFFER without requiring it (feature chat-model-catalog). */
|
|
3
|
+
export interface SettingSuggestion {
|
|
4
|
+
value: string;
|
|
5
|
+
/** What is known about it, shown beside the value; omitted when nothing is known. */
|
|
6
|
+
label?: string;
|
|
7
|
+
}
|
|
2
8
|
export declare const SettingRow: import("react").NamedExoticComponent<{
|
|
3
9
|
setting: SettingREST;
|
|
4
10
|
/** The unsaved value, or undefined when this row is untouched. */
|
|
@@ -7,4 +13,12 @@ export declare const SettingRow: import("react").NamedExoticComponent<{
|
|
|
7
13
|
onClear: (key: string) => void;
|
|
8
14
|
/** True when the whole editable region is gated off (an embed host locked it). */
|
|
9
15
|
disabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Values to offer on a `string` row, as a native combobox. OFFER is the whole contract: a typed
|
|
18
|
+
* value outside the list is not an error, because for a model name the list is not the whole
|
|
19
|
+
* resolvable set. Absent (or empty) leaves the row exactly as it was.
|
|
20
|
+
*/
|
|
21
|
+
suggestions?: readonly SettingSuggestion[];
|
|
22
|
+
/** One line under the control, for whoever supplied the suggestions to say why it could not. */
|
|
23
|
+
note?: string;
|
|
10
24
|
}>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { NlGenerationStats } from "./generate";
|
|
2
|
+
/**
|
|
3
|
+
* One draft's generation stats (nl-assist-ux FR-5), the row UNDER the draft label: the summary
|
|
4
|
+
* line plus the provider's raw fields on demand. Both NL panels render this one component, so
|
|
5
|
+
* the formatter and the markup have a single home.
|
|
6
|
+
*
|
|
7
|
+
* The backend segment is whatever the stats object captured with THIS draft carries, never the
|
|
8
|
+
* live configuration (see lib/modelProvenance.ts). The row sits BELOW the label, not beside it:
|
|
9
|
+
* a same-row block costs the label width the panel's 288px sidebar does not have.
|
|
10
|
+
*/
|
|
11
|
+
export declare function NlDraftStats({ stats }: {
|
|
12
|
+
stats: NlGenerationStats;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -26,10 +26,11 @@ export interface NlAssistConfig {
|
|
|
26
26
|
maxRetries: number;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
* nl-assist-finetune).
|
|
31
|
-
*
|
|
32
|
-
*
|
|
29
|
+
* CUSTOM-MODE ONLY: the prefill for the model field, and the fine-tune the compose stack pulls
|
|
30
|
+
* (produced by nl-assist-finetune). It says nothing about instance mode - the server owns that
|
|
31
|
+
* model and reports it on /status, which is where the panels read it from. If the chosen model is
|
|
32
|
+
* absent on the endpoint, calls 404 - create it with the training pipeline or pick the stock
|
|
33
|
+
* phi4-mini preset.
|
|
33
34
|
*/
|
|
34
35
|
export declare const DEFAULT_NL_MODEL = "phi4-f8-mini";
|
|
35
36
|
export declare const DEFAULT_NL_CONFIG: NlAssistConfig;
|
|
@@ -34,6 +34,12 @@ export interface NlGenerationStats {
|
|
|
34
34
|
completionTokens?: number;
|
|
35
35
|
durationMs?: number;
|
|
36
36
|
tokensPerSecond?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Which server-side backend produced THIS draft, from that call's own response. Undefined in
|
|
39
|
+
* custom mode, deliberately: a browser-direct call reaches no Fallen-8, so there is no server
|
|
40
|
+
* selector to report and inventing one would sit a fabricated name beside real ones.
|
|
41
|
+
*/
|
|
42
|
+
backend?: string;
|
|
37
43
|
/** The provider's stats fields verbatim, for the expandable raw view. */
|
|
38
44
|
raw: Record<string, unknown>;
|
|
39
45
|
}
|
|
@@ -5,3 +5,13 @@
|
|
|
5
5
|
* sample-graph loaders and the Canvas screen's "Show whole graph" load.
|
|
6
6
|
*/
|
|
7
7
|
export declare const CANVAS_ELEMENT_CAP = 20000;
|
|
8
|
+
/**
|
|
9
|
+
* The most elements (vertices PLUS edges) a bulk expand will grow the canvas to before it stops
|
|
10
|
+
* and says so (feature canvas-interact).
|
|
11
|
+
*
|
|
12
|
+
* A separate number from `CANVAS_ELEMENT_CAP` on purpose: that one bounds each KIND of a fetch, so
|
|
13
|
+
* "Show whole graph" can legitimately leave 20,000 vertices AND 20,000 edges on the canvas. A
|
|
14
|
+
* sweep refusing to grow a canvas the app itself just filled would be enforcing a ceiling nothing
|
|
15
|
+
* else in the product has, which is why this is the sum and twice the size.
|
|
16
|
+
*/
|
|
17
|
+
export declare const CANVAS_EXPAND_CEILING: number;
|