@fallen-8/studio 0.0.32 → 0.0.34
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/{cssMode-Czf2vRA3.js → cssMode-DYrO7mzE.js} +1 -1
- package/dist-lib/f8-studio.css +1 -1
- package/dist-lib/f8-studio.js +1 -1
- package/dist-lib/{freemarker2-BtInkOsd.js → freemarker2-DwJ7Gnp5.js} +1 -1
- package/dist-lib/{handlebars-UwZ7mBGA.js → handlebars-WBN0RoUy.js} +1 -1
- package/dist-lib/{html-BXX93YIe.js → html-CSlk2JAN.js} +1 -1
- package/dist-lib/{htmlMode-BCqQu1PO.js → htmlMode-DJM01mlt.js} +1 -1
- package/dist-lib/{index-DFm6T7Un.js → index-Bos9nOk4.js} +22071 -21469
- package/dist-lib/{javascript-CK1z7Ynl.js → javascript-0lm5wWDk.js} +1 -1
- package/dist-lib/{jsonMode-C4Q3fVvV.js → jsonMode-B31ZDaaW.js} +1 -1
- package/dist-lib/{liquid-BnCUERBj.js → liquid-H4Ky5pbN.js} +1 -1
- package/dist-lib/{mdx-D2enmFMs.js → mdx-CE9-t0EL.js} +1 -1
- package/dist-lib/{python-DJvSF53q.js → python-jjz-2Uc2.js} +1 -1
- package/dist-lib/{razor-RerkagjP.js → razor-CdP7MM4C.js} +1 -1
- package/dist-lib/{tsMode-C-6d-f_-.js → tsMode-RcVDJfHg.js} +1 -1
- package/dist-lib/types/api/types.d.ts +26 -2
- package/dist-lib/types/components/ConfigurationSurface.d.ts +42 -0
- package/dist-lib/types/components/FileDropzone.d.ts +23 -0
- package/dist-lib/types/components/ObservabilitySection.d.ts +11 -0
- package/dist-lib/types/components/SettingRow.d.ts +0 -5
- package/dist-lib/types/lib/configCatalog.d.ts +95 -0
- package/dist-lib/{typescript-aCo3H3H0.js → typescript-BVlrrfJR.js} +1 -1
- package/dist-lib/{xml-CSt-F-dl.js → xml-C__t96fk.js} +1 -1
- package/dist-lib/{yaml-kSsc3ru_.js → yaml-DS5TUYqz.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-Bos9nOk4.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-Bos9nOk4.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-Bos9nOk4.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-Bos9nOk4.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-Bos9nOk4.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-Bos9nOk4.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))
|
|
@@ -126,6 +126,12 @@ export interface BulkImportResultREST {
|
|
|
126
126
|
verticesCreated: number;
|
|
127
127
|
edgesCreated: number;
|
|
128
128
|
linesRead: number;
|
|
129
|
+
/**
|
|
130
|
+
* Whether every committed batch reached the write-ahead log (platform-integrity-audit W5).
|
|
131
|
+
* `false` means the counts above are real but a restart would lose part of the import, so the
|
|
132
|
+
* graph needs a checkpoint. Optional because an older server does not send it.
|
|
133
|
+
*/
|
|
134
|
+
durable?: boolean;
|
|
129
135
|
}
|
|
130
136
|
/**
|
|
131
137
|
* GET /ns/{ns}/generate - what a benchmark-graph generation created. Generation is ADDITIVE, so
|
|
@@ -965,7 +971,7 @@ export interface DelegateValidationResult {
|
|
|
965
971
|
diagnostics: DelegateDiagnostic[];
|
|
966
972
|
}
|
|
967
973
|
/** What kind of value a provider setting takes, which is all a form needs to render it. */
|
|
968
|
-
export type SettingKind = "Text" | "Number" | "Boolean" | "Url" | "Credential";
|
|
974
|
+
export type SettingKind = "Text" | "Number" | "Boolean" | "Url" | "Credential" | "File";
|
|
969
975
|
/** One setting, as data. `help` says where to find the value in the source system. */
|
|
970
976
|
export interface IntegrationSetting {
|
|
971
977
|
key: string;
|
|
@@ -974,6 +980,11 @@ export interface IntegrationSetting {
|
|
|
974
980
|
required: boolean;
|
|
975
981
|
help: string;
|
|
976
982
|
defaultValue?: string | null;
|
|
983
|
+
/**
|
|
984
|
+
* `File` settings only: the extensions the picker offers, as the HTML attribute spells them.
|
|
985
|
+
* A hint, not a rule - a browser ignores it for a dropped file and the runtime never checks it.
|
|
986
|
+
*/
|
|
987
|
+
accept?: string | null;
|
|
977
988
|
}
|
|
978
989
|
/**
|
|
979
990
|
* What an integration IS, as data that is true before any run exists. A form is rendered from
|
|
@@ -998,9 +1009,17 @@ export interface IntegrationDiagnostic {
|
|
|
998
1009
|
message: string;
|
|
999
1010
|
subject?: string | null;
|
|
1000
1011
|
}
|
|
1012
|
+
/** One file a job carries: its own name, and its bytes base64. */
|
|
1013
|
+
export interface IntegrationJobFile {
|
|
1014
|
+
/** The file's own name, used verbatim in the run's messages. Never a path. */
|
|
1015
|
+
name: string;
|
|
1016
|
+
/** The file's BYTES, base64 - not its text, so a UTF-16 extract survives the trip. */
|
|
1017
|
+
contentBase64: string;
|
|
1018
|
+
}
|
|
1001
1019
|
/**
|
|
1002
1020
|
* The whole configuration of one run. A credential setting's value arrives in `credentialValues` and
|
|
1003
|
-
* never in `settings`: the runtime leases and redacts the first
|
|
1021
|
+
* a file setting's file in `files`, never in `settings`: the runtime leases and redacts the first,
|
|
1022
|
+
* holds the second for the run and drops it, and treats `settings` as ordinary data.
|
|
1004
1023
|
*/
|
|
1005
1024
|
export interface IntegrationJobRequest {
|
|
1006
1025
|
providerId: string;
|
|
@@ -1009,6 +1028,11 @@ export interface IntegrationJobRequest {
|
|
|
1009
1028
|
settings: Record<string, string>;
|
|
1010
1029
|
/** Secrets. Held for the run and dropped; never persisted here, never echoed back. */
|
|
1011
1030
|
credentialValues: Record<string, string>;
|
|
1031
|
+
/**
|
|
1032
|
+
* Files, by the file setting each was supplied for. Held for the run and dropped: the runtime
|
|
1033
|
+
* mounts no directory, so this is the only way a file reaches a provider.
|
|
1034
|
+
*/
|
|
1035
|
+
files?: Record<string, IntegrationJobFile>;
|
|
1012
1036
|
embedSummaries?: boolean;
|
|
1013
1037
|
}
|
|
1014
1038
|
/** The only account of a job, because the runtime keeps none. */
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ApiError } from "../api/client";
|
|
2
|
+
import type { ObservabilityConfigREST, PendingRestartREST, SettingREST } from "../api/types";
|
|
3
|
+
/**
|
|
4
|
+
* The configuration surface (feature configuration-surface): one dialog holding everything this
|
|
5
|
+
* instance binds, reached from the single Configure button on the Connect screen's configuration card.
|
|
6
|
+
*
|
|
7
|
+
* It exists because the card used to render all hundred-odd catalogued settings as ONE flat list,
|
|
8
|
+
* inline, in a twelve-row window. Here they are sectioned, searchable and filterable, and one section
|
|
9
|
+
* shows at a time.
|
|
10
|
+
*
|
|
11
|
+
* It deliberately owns NO server state: the draft, the mutation, the poll suspension and the lock
|
|
12
|
+
* gating all stay on the card, which outlives this dialog. Two observers on the config query would let
|
|
13
|
+
* react-query take the shortest refetch interval, and the card polling every ten seconds would replace
|
|
14
|
+
* a value under a half-typed field here, which is exactly what the poll suspension exists to prevent.
|
|
15
|
+
* What this component does own is where you are looking: the section, the query and the filter. Those
|
|
16
|
+
* live under Dialog.Content, which Radix unmounts on close, so they reset without an effect.
|
|
17
|
+
*/
|
|
18
|
+
export interface ConfigurationSurfaceProps {
|
|
19
|
+
open: boolean;
|
|
20
|
+
onClose: () => void;
|
|
21
|
+
/** Named in the header, because the settings behind it belong to one instance and not the next. */
|
|
22
|
+
instanceName: string;
|
|
23
|
+
settings: readonly SettingREST[];
|
|
24
|
+
pendingRestart: readonly PendingRestartREST[];
|
|
25
|
+
observability: ObservabilityConfigREST;
|
|
26
|
+
draft: Record<string, string | null>;
|
|
27
|
+
dirtyCount: number;
|
|
28
|
+
onChange: (key: string, value: string) => void;
|
|
29
|
+
onClear: (key: string) => void;
|
|
30
|
+
onSave: () => void;
|
|
31
|
+
saving: boolean;
|
|
32
|
+
writeError: ApiError | Error | null;
|
|
33
|
+
/** Whether the server accepts PATCH /config at all (both operator acts are in place). */
|
|
34
|
+
writesAllowed: boolean;
|
|
35
|
+
/** False when an embed host locked the instance, which gates the whole editable region. */
|
|
36
|
+
editable: boolean;
|
|
37
|
+
/** Per key, because the namespace lock narrows to one prefix rather than the whole surface. */
|
|
38
|
+
isRowDisabled: (key: string) => boolean;
|
|
39
|
+
/** A blanked numeric field the server would refuse the whole batch over, if there is one. */
|
|
40
|
+
blankNumericKey?: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function ConfigurationSurface(props: ConfigurationSurfaceProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* The drop half of taking a file from the user: the dashed target, the drag highlight, and the one
|
|
4
|
+
* rule that is easy to get wrong (`preventDefault` on drag-over, or the browser navigates to the
|
|
5
|
+
* file instead). Shared by the Knowledge screen's document ingest and the Integrations screen's
|
|
6
|
+
* file settings, because a second copy of the drag handlers is a second thing to get wrong.
|
|
7
|
+
*
|
|
8
|
+
* What each screen keeps is what differs: Knowledge INGESTS on drop, Integrations STAGES for a run
|
|
9
|
+
* that also needs an identity, and each owns its own file picker so the button next to it can mean
|
|
10
|
+
* what that screen needs it to mean.
|
|
11
|
+
*/
|
|
12
|
+
export declare function FileDropzone(props: {
|
|
13
|
+
/** Called with the dropped file. */
|
|
14
|
+
onFile: (file: File) => void;
|
|
15
|
+
/** Greys the target out and refuses drops, for a screen that is not ready to take one. */
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
/** What the target says when nothing is being dragged over it. */
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
/** Defaults to `dropzone`. */
|
|
20
|
+
testId?: string;
|
|
21
|
+
/** Extra classes, for a screen whose layout needs its own margins. */
|
|
22
|
+
className?: string;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ObservabilityConfigREST, SettingREST } from "../api/types";
|
|
2
|
+
export interface ObservabilitySectionProps {
|
|
3
|
+
observability: ObservabilityConfigREST;
|
|
4
|
+
/** The section's descriptors. Empty on an instance that publishes no settings inventory. */
|
|
5
|
+
settings: readonly SettingREST[];
|
|
6
|
+
draft: Record<string, string | null>;
|
|
7
|
+
onChange: (key: string, value: string) => void;
|
|
8
|
+
onClear: (key: string) => void;
|
|
9
|
+
isRowDisabled: (key: string) => boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function ObservabilitySection({ observability, settings, draft, onChange, onClear, isRowDisabled, }: ObservabilitySectionProps): import("react").JSX.Element;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import type { SettingREST } from "../api/types";
|
|
2
|
-
/** The environment-variable spelling an operator has to remove to manage a key here instead. */
|
|
3
|
-
export declare function environmentSpelling(key: string): string;
|
|
4
|
-
export declare function isEnvironmentLocked(setting: SettingREST): boolean;
|
|
5
|
-
/** A stable, key-derived handle: Fallen8:Plugins:MaxCount -> config-setting-fallen8-plugins-maxcount. */
|
|
6
|
-
export declare function settingTestId(key: string): string;
|
|
7
2
|
export declare const SettingRow: import("react").NamedExoticComponent<{
|
|
8
3
|
setting: SettingREST;
|
|
9
4
|
/** The unsaved value, or undefined when this row is untouched. */
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { SettingREST } from "../api/types";
|
|
2
|
+
/**
|
|
3
|
+
* The client's view of the server's setting catalog (feature configuration-surface): how the
|
|
4
|
+
* instance's settings are grouped for a reader, how a query and a filter select among them, and the
|
|
5
|
+
* two per-key rules Studio derives from a descriptor.
|
|
6
|
+
*
|
|
7
|
+
* It exists because GET /config publishes a FLAT list of about a hundred descriptors in the server's
|
|
8
|
+
* own declaration order, and one flat list is what made the old inline panel unreadable. Everything
|
|
9
|
+
* here is pure: no React, no API call, so the grouping is testable on its own, which matters because
|
|
10
|
+
* a key this module silently dropped would be editable nowhere and invisible in a screenshot.
|
|
11
|
+
*
|
|
12
|
+
* It deliberately carries NO description of what an individual key means. That lives on the server's
|
|
13
|
+
* own catalog reason and on each feature's docs page; a second copy here would drift. The one thing
|
|
14
|
+
* this module does explain is what a SECTION governs, in one line, because no server field says that.
|
|
15
|
+
*/
|
|
16
|
+
/** A nav heading over a run of sections. */
|
|
17
|
+
export type ConfigGroupId = "graph" | "workloads" | "semantic" | "operations" | "reference" | "ungrouped";
|
|
18
|
+
export declare const CONFIG_GROUPS: readonly {
|
|
19
|
+
id: ConfigGroupId;
|
|
20
|
+
label: string;
|
|
21
|
+
}[];
|
|
22
|
+
export interface ConfigSection {
|
|
23
|
+
id: string;
|
|
24
|
+
group: ConfigGroupId;
|
|
25
|
+
label: string;
|
|
26
|
+
/** One line on what the section governs. Never what a single key does. */
|
|
27
|
+
blurb: string;
|
|
28
|
+
/**
|
|
29
|
+
* The raw config sections (a key's SECOND segment) this entry collects, in render order. The first
|
|
30
|
+
* is the primary: its own keys render without a sub-group header.
|
|
31
|
+
*/
|
|
32
|
+
raw: readonly string[];
|
|
33
|
+
/** True when the pane renders its rows without sub-group headers at all. */
|
|
34
|
+
flat?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Where an unmapped raw section lands, so a section this version does not know is still readable. */
|
|
37
|
+
export declare const OTHER_SECTION_ID = "other";
|
|
38
|
+
/**
|
|
39
|
+
* The ordered sections. Not alphabetical and not the server's order: the read/write sections come
|
|
40
|
+
* first in rough tuning order and the two entirely read-only ones last, because the reason to open
|
|
41
|
+
* this surface is almost always to change something.
|
|
42
|
+
*
|
|
43
|
+
* `raw` is a section NAME, never a key list: the server encodes the grouping in the key itself, and a
|
|
44
|
+
* key list would silently miss the next key added under a section.
|
|
45
|
+
*/
|
|
46
|
+
export declare const CONFIG_SECTIONS: readonly ConfigSection[];
|
|
47
|
+
/**
|
|
48
|
+
* The section a key belongs to, from its SECOND segment, which is the same rule the server states for
|
|
49
|
+
* itself. Exact-case on purpose: a mis-cased key is not the key the server publishes, and normalising
|
|
50
|
+
* it here would hide that rather than showing it under "Other".
|
|
51
|
+
*/
|
|
52
|
+
export declare function sectionOf(key: string): ConfigSection;
|
|
53
|
+
/** A run of rows under one header inside a section pane. `label` is "" for the section's own keys. */
|
|
54
|
+
export interface SettingGroup {
|
|
55
|
+
label: string;
|
|
56
|
+
settings: SettingREST[];
|
|
57
|
+
}
|
|
58
|
+
export interface SectionGroup {
|
|
59
|
+
section: ConfigSection;
|
|
60
|
+
/** Every setting in the section, in render order. */
|
|
61
|
+
settings: SettingREST[];
|
|
62
|
+
/** The sub-groups, direct keys first; a single unlabelled group when the section renders flat. */
|
|
63
|
+
groups: SettingGroup[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Buckets the published settings into the ordered sections, preserving the server's order within a
|
|
67
|
+
* raw section: the catalog authors related keys adjacently (an index switch is followed by the index
|
|
68
|
+
* id it governs) and an alphabetical re-sort would split those pairs.
|
|
69
|
+
*
|
|
70
|
+
* Every input setting comes out in exactly one section. Nothing is filtered here, so a key this
|
|
71
|
+
* version does not recognise lands in "Other" rather than disappearing.
|
|
72
|
+
*/
|
|
73
|
+
export declare function groupSettings(settings: readonly SettingREST[] | undefined): SectionGroup[];
|
|
74
|
+
/**
|
|
75
|
+
* Whether a setting matches a search. Covers the key, the exclusion rule and the reason, and
|
|
76
|
+
* deliberately NOT the value: a value here can be an endpoint or a filesystem path, and a value
|
|
77
|
+
* search would turn the box into a way to fish for one.
|
|
78
|
+
*/
|
|
79
|
+
export declare function matchesQuery(setting: SettingREST, query: string): boolean;
|
|
80
|
+
/** The environment-variable spelling an operator has to remove to manage a key here instead. */
|
|
81
|
+
export declare function environmentSpelling(key: string): string;
|
|
82
|
+
export declare function isEnvironmentLocked(setting: SettingREST): boolean;
|
|
83
|
+
/** A stable, key-derived handle: Fallen8:Plugins:MaxCount -> config-setting-fallen8-plugins-maxcount. */
|
|
84
|
+
export declare function settingTestId(key: string): string;
|
|
85
|
+
export type ConfigFilterId = "all" | "writable" | "restartPending" | "notWritable" | "setHere" | "environment";
|
|
86
|
+
/**
|
|
87
|
+
* The filter strip. Each one answers a question an operator actually arrives with, and none of them
|
|
88
|
+
* hides a row silently: the pane always states how many of how many it is showing.
|
|
89
|
+
*/
|
|
90
|
+
export declare const CONFIG_FILTERS: readonly {
|
|
91
|
+
id: ConfigFilterId;
|
|
92
|
+
label: string;
|
|
93
|
+
title: string;
|
|
94
|
+
}[];
|
|
95
|
+
export declare function matchesFilter(setting: SettingREST, filter: ConfigFilterId): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as s } from "./index-
|
|
1
|
+
import { m as s } from "./index-Bos9nOk4.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-Bos9nOk4.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-Bos9nOk4.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