@tai42/studio-sdk 20.0.0 → 21.0.0
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/components/components.css +7 -0
- package/dist/components/execution-key-picker.js.map +1 -1
- package/dist/components/extension-grouping.d.ts +8 -12
- package/dist/components/extension-grouping.d.ts.map +1 -1
- package/dist/components/extension-grouping.js +12 -15
- package/dist/components/extension-grouping.js.map +1 -1
- package/dist/components/extension-picker.d.ts +3 -4
- package/dist/components/extension-picker.d.ts.map +1 -1
- package/dist/components/extension-picker.js +10 -10
- package/dist/components/extension-picker.js.map +1 -1
- package/dist/components/fleet-report.d.ts +10 -5
- package/dist/components/fleet-report.d.ts.map +1 -1
- package/dist/components/fleet-report.js +20 -3
- package/dist/components/fleet-report.js.map +1 -1
- package/dist/components/json-tree-model.d.ts +19 -7
- package/dist/components/json-tree-model.d.ts.map +1 -1
- package/dist/components/json-tree-model.js +32 -8
- package/dist/components/json-tree-model.js.map +1 -1
- package/dist/components/json-tree.d.ts +10 -1
- package/dist/components/json-tree.d.ts.map +1 -1
- package/dist/components/json-tree.js +7 -4
- package/dist/components/json-tree.js.map +1 -1
- package/dist/components/select.d.ts +6 -0
- package/dist/components/select.d.ts.map +1 -1
- package/dist/components/select.js +3 -2
- package/dist/components/select.js.map +1 -1
- package/dist/components/served-media.d.ts +50 -4
- package/dist/components/served-media.d.ts.map +1 -1
- package/dist/components/served-media.js +69 -19
- package/dist/components/served-media.js.map +1 -1
- package/dist/env-markers.d.ts +25 -0
- package/dist/env-markers.d.ts.map +1 -0
- package/dist/env-markers.js +63 -0
- package/dist/env-markers.js.map +1 -0
- package/dist/hooks/interactions-stream.d.ts.map +1 -1
- package/dist/hooks/interactions-stream.js +9 -7
- package/dist/hooks/interactions-stream.js.map +1 -1
- package/dist/hooks/useApi.d.ts +2264 -912
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useCapabilities.d.ts +5 -9
- package/dist/hooks/useCapabilities.d.ts.map +1 -1
- package/dist/hooks/useCapabilities.js +8 -33
- package/dist/hooks/useCapabilities.js.map +1 -1
- package/dist/host.d.ts +2 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +8 -0
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/plugin/coverage.d.ts +14 -0
- package/dist/plugin/coverage.d.ts.map +1 -0
- package/dist/plugin/coverage.js +14 -0
- package/dist/plugin/coverage.js.map +1 -0
- package/dist/plugin/registry.d.ts +11 -1
- package/dist/plugin/registry.d.ts.map +1 -1
- package/dist/plugin/registry.js +33 -4
- package/dist/plugin/registry.js.map +1 -1
- package/dist/plugin/types.d.ts +43 -1
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/state-binding/UpdateRow.d.ts +2 -2
- package/dist/state-binding/UpdateRow.js +1 -1
- package/dist/state-binding/UpdateRow.js.map +1 -1
- package/dist/state-binding/adapter.d.ts +12 -8
- package/dist/state-binding/adapter.d.ts.map +1 -1
- package/dist/state-binding/adapter.js +30 -13
- package/dist/state-binding/adapter.js.map +1 -1
- package/package.json +5 -4
- package/src/components/components.css +7 -0
- package/src/components/execution-key-picker.tsx +1 -1
- package/src/components/extension-grouping.ts +22 -22
- package/src/components/extension-picker.tsx +13 -14
- package/src/components/fleet-report.tsx +66 -7
- package/src/components/json-tree-model.ts +36 -8
- package/src/components/json-tree.tsx +24 -4
- package/src/components/select.tsx +11 -1
- package/src/components/served-media.tsx +150 -16
- package/src/env-markers.ts +70 -0
- package/src/hooks/interactions-stream.ts +9 -7
- package/src/hooks/useCapabilities.ts +8 -31
- package/src/host.ts +2 -0
- package/src/index.ts +16 -2
- package/src/plugin/coverage.ts +23 -0
- package/src/plugin/registry.ts +58 -3
- package/src/plugin/types.ts +45 -1
- package/src/state-binding/README.md +10 -7
- package/src/state-binding/UpdateRow.tsx +3 -3
- package/src/state-binding/adapter.ts +31 -16
package/dist/plugin/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The Studio-plugin authoring contract. A platform plugin ships an ESM bundle
|
|
3
3
|
* that exports a `register(context)` entry ({@link PluginEntry}); the host calls
|
|
4
4
|
* it with a {@link PluginContext} through which the plugin contributes tool
|
|
5
|
-
* panels, pages, settings tabs,
|
|
5
|
+
* panels, pages, settings tabs, sidebar nav entries and conversation route panels.
|
|
6
6
|
*
|
|
7
7
|
* Two styling paths are sanctioned, and only these two:
|
|
8
8
|
* 1. SDK components plus inline styles that read the design-system tokens
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* its own. Bundled third-party base CSS is exempt from rule (c) but rules
|
|
21
21
|
* (a) and (b) still bind it.
|
|
22
22
|
*/
|
|
23
|
+
import type { ConversationRouteView } from '@tai42/api-client';
|
|
23
24
|
import type { ComponentType } from 'react';
|
|
24
25
|
/**
|
|
25
26
|
* A capability requirement a contribution may declare. `routes` is a list of
|
|
@@ -204,12 +205,41 @@ export interface SettingsTabContribution {
|
|
|
204
205
|
export interface RegisteredSettingsTab extends SettingsTabContribution {
|
|
205
206
|
readonly pluginId: string;
|
|
206
207
|
}
|
|
208
|
+
/** A conversation route row as `GET /api/conversations` lists it, on the `channel` door. */
|
|
209
|
+
export type ChannelConversationRoute = Extract<ConversationRouteView, {
|
|
210
|
+
readonly door: 'channel';
|
|
211
|
+
}>;
|
|
212
|
+
/** Props a contributed route panel receives. */
|
|
213
|
+
export interface RoutePanelProps {
|
|
214
|
+
readonly pluginId: string;
|
|
215
|
+
/** The route row the panel decorates; its `channel` is the contribution's channel. */
|
|
216
|
+
readonly route: ChannelConversationRoute;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* A panel the conversations drill-in renders above the thread list of every route on
|
|
220
|
+
* one channel. One panel per channel deployment-wide.
|
|
221
|
+
*/
|
|
222
|
+
export interface RoutePanelContribution {
|
|
223
|
+
/** The channel name whose routes this panel decorates (`ConversationRouteView.channel`). */
|
|
224
|
+
readonly channel: string;
|
|
225
|
+
/** Names the panel region (its aria-label and the error card label). */
|
|
226
|
+
readonly title: string;
|
|
227
|
+
readonly component: ComponentType<RoutePanelProps>;
|
|
228
|
+
/** Capability gate (see {@link RequiredCapabilities}); absent ⇒ full-only. */
|
|
229
|
+
readonly requiredCapabilities?: RequiredCapabilities;
|
|
230
|
+
}
|
|
231
|
+
/** A route panel as stored in the registry, stamped with the plugin that registered it. */
|
|
232
|
+
export interface RegisteredRoutePanel extends RoutePanelContribution {
|
|
233
|
+
readonly pluginId: string;
|
|
234
|
+
}
|
|
207
235
|
/** Everything a single plugin bundle has registered at import time. */
|
|
208
236
|
export interface PluginContributions {
|
|
209
237
|
readonly toolPanels: ReadonlyMap<string, ToolPanelContribution>;
|
|
210
238
|
readonly pages: readonly RegisteredPage[];
|
|
211
239
|
readonly settingsTabs: readonly RegisteredSettingsTab[];
|
|
212
240
|
readonly navEntries: readonly RegisteredNavEntry[];
|
|
241
|
+
/** Route panels keyed by the channel they decorate. */
|
|
242
|
+
readonly routePanels: ReadonlyMap<string, RegisteredRoutePanel>;
|
|
213
243
|
}
|
|
214
244
|
/**
|
|
215
245
|
* The registration surface a plugin receives in its `register(context)` entry.
|
|
@@ -234,6 +264,18 @@ export interface PluginContext {
|
|
|
234
264
|
* registers (a nav entry with no page is a dead link and is rejected loudly).
|
|
235
265
|
*/
|
|
236
266
|
registerNavEntry(contribution: NavEntryContribution): void;
|
|
267
|
+
/**
|
|
268
|
+
* Register a panel for the routes of one channel. The plugin's manifest must list the
|
|
269
|
+
* same channels under `contributions.route_panels`, or the plugin fails to load.
|
|
270
|
+
*/
|
|
271
|
+
registerRoutePanel(contribution: RoutePanelContribution): void;
|
|
272
|
+
/**
|
|
273
|
+
* The resolved absolute base of one of this plugin's route items, e.g. `/api/channels/web`,
|
|
274
|
+
* or `null` when the item has no mount on this deployment (an optional router not listed, a
|
|
275
|
+
* channel not loaded). Never throws; a feature that needs the base shows its own unavailable
|
|
276
|
+
* state for `null`. Call it during `register` and keep the value.
|
|
277
|
+
*/
|
|
278
|
+
routeBase(itemName: string): string | null;
|
|
237
279
|
}
|
|
238
280
|
/**
|
|
239
281
|
* A plugin bundle's entry: the default plugin API. The host imports the bundle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugin/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClF;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACnD,8EAA8E;IAC9E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GACzB,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAE9E,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugin/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The update list of one attached state. Each update applies AFTER the run: either
|
|
3
3
|
* a template `update` jq (picked by name, whose declared input is authored through
|
|
4
|
-
* the adapter mapping) or a custom jq over
|
|
5
|
-
* the whole op batch itself. An optional op-id expression carries idempotency.
|
|
4
|
+
* the adapter mapping) or a custom jq over the tool output (its `.`, with the run input
|
|
5
|
+
* bound as `$input` and the record as `$record`) that authors the whole op batch itself. An optional op-id expression carries idempotency.
|
|
6
6
|
*/
|
|
7
7
|
import type { ReactNode } from 'react';
|
|
8
8
|
import type { TemplateJqSuggestion } from './BindingJqField';
|
|
@@ -52,7 +52,7 @@ function UpdateRowEditor({ update, index, updateJq, sources, suggestions, templa
|
|
|
52
52
|
options: updateJq.map((entry) => ({ value: entry.ref, label: optionLabel(entry) })),
|
|
53
53
|
},
|
|
54
54
|
{ label: 'Custom', options: [{ value: CUSTOM, label: 'Custom jq' }] },
|
|
55
|
-
] }) }), writes !== null ? _jsx(Badge, { variant: "neutral", children: `writes: ${writes}` }) : null, _jsx(Button, { type: "button", variant: "ghost", "aria-label": `Remove update ${String(index + 1)}`, onClick: onRemove, children: _jsx(CloseIcon, { "aria-hidden": "true" }) })] }), isCustom ? (_jsx(BindingTemplatedJqField, { label: `Custom update jq ${String(index + 1)}`, required: true, description: "A jq over
|
|
55
|
+
] }) }), writes !== null ? _jsx(Badge, { variant: "neutral", children: `writes: ${writes}` }) : null, _jsx(Button, { type: "button", variant: "ghost", "aria-label": `Remove update ${String(index + 1)}`, onClick: onRemove, children: _jsx(CloseIcon, { "aria-hidden": "true" }) })] }), isCustom ? (_jsx(BindingTemplatedJqField, { label: `Custom update jq ${String(index + 1)}`, required: true, description: "A jq over the tool output (`.`), with `$input` and `$record` bound, returning a template-relative op batch.", value: update.jq, onChange: (next) => {
|
|
56
56
|
onChange({
|
|
57
57
|
template_jq: null,
|
|
58
58
|
jq: next ?? { content: '' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateRow.js","sourceRoot":"","sources":["../../src/state-binding/UpdateRow.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"UpdateRow.js","sourceRoot":"","sources":["../../src/state-binding/UpdateRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A named template `update` jq declares an input object (its `params` / declared
|
|
5
5
|
* input keys). A binding must map the run's OUTPUT (and the run's INPUT) into that
|
|
6
|
-
* object; that mapping is the `adapter` — a single jq program over
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* object; that mapping is the `adapter` — a single jq program over the tool output
|
|
7
|
+
* (its `.`) with the run input bound as `$input`, that CONSTRUCTS the update jq's
|
|
8
|
+
* declared input (which the update jq then reads as `$input`, over the record).
|
|
9
9
|
*
|
|
10
10
|
* The editor authors the adapter as a ROW form: one row per declared input key,
|
|
11
11
|
* each row picking one of three value sources — a picked field (from the run's
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
* loud, human error the editor renders in a `role="alert"`, never a silent empty
|
|
17
17
|
* object.
|
|
18
18
|
*/
|
|
19
|
-
/** Which
|
|
19
|
+
/** Which value a picked field reads: the tool output (the program's `.`) or the run input (`$input`). */
|
|
20
20
|
export type FieldRoot = 'output' | 'input';
|
|
21
|
-
/** A picked field: a path into
|
|
21
|
+
/** A picked field: a path into the tool output or the run input. */
|
|
22
22
|
export interface FieldSource {
|
|
23
23
|
readonly kind: 'field';
|
|
24
24
|
readonly root: FieldRoot;
|
|
@@ -29,7 +29,7 @@ export interface LiteralSource {
|
|
|
29
29
|
readonly kind: 'literal';
|
|
30
30
|
readonly json: string;
|
|
31
31
|
}
|
|
32
|
-
/** A raw jq expression over
|
|
32
|
+
/** A raw jq expression over the tool output (its `.`), with the run input bound as `$input`. */
|
|
33
33
|
export interface JqSource {
|
|
34
34
|
readonly kind: 'jq';
|
|
35
35
|
readonly expr: string;
|
|
@@ -51,13 +51,17 @@ export type AdapterCompileResult = {
|
|
|
51
51
|
};
|
|
52
52
|
/** An object key rendered for jq: a bare identifier, or a quoted string otherwise. */
|
|
53
53
|
export declare function jqKey(key: string): string;
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* A picked field rendered as a jq path: an output field reads off the program root
|
|
56
|
+
* (`.user.name`, `.["odd key"]`, the whole output `.`), an input field off the bound run
|
|
57
|
+
* input (`$input.user.name`, the whole input `$input`).
|
|
58
|
+
*/
|
|
55
59
|
export declare function fieldPathToJq(root: FieldRoot, path: readonly string[]): string;
|
|
56
60
|
/** The jq fragment ONE row's value compiles to — the row's "show jq". */
|
|
57
61
|
export declare function rowValueJq(source: MappingSource): AdapterCompileResult;
|
|
58
62
|
/**
|
|
59
63
|
* Compile a mapping form into ONE adapter jq that constructs the update jq's
|
|
60
|
-
* declared input over
|
|
64
|
+
* declared input over the tool output and `$input`. An empty form compiles to the
|
|
61
65
|
* empty object `{}`; a blank target, a duplicate target, or an invalid source is a
|
|
62
66
|
* loud error.
|
|
63
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/state-binding/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/state-binding/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,yGAAyG;AACzG,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3C,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,gGAAgG;AAChG,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnE,0FAA0F;AAC1F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,6EAA6E;AAC7E,MAAM,MAAM,oBAAoB,GAC9B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAI9F,sFAAsF;AACtF,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQ9E;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,CAsBtE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,oBAAoB,CAchF;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,EAAE,CAK3E;AAgBD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgChE;AAmCD,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAqB5D;AAmBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AASD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAGrF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI5F"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A named template `update` jq declares an input object (its `params` / declared
|
|
5
5
|
* input keys). A binding must map the run's OUTPUT (and the run's INPUT) into that
|
|
6
|
-
* object; that mapping is the `adapter` — a single jq program over
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* object; that mapping is the `adapter` — a single jq program over the tool output
|
|
7
|
+
* (its `.`) with the run input bound as `$input`, that CONSTRUCTS the update jq's
|
|
8
|
+
* declared input (which the update jq then reads as `$input`, over the record).
|
|
9
9
|
*
|
|
10
10
|
* The editor authors the adapter as a ROW form: one row per declared input key,
|
|
11
11
|
* each row picking one of three value sources — a picked field (from the run's
|
|
@@ -21,13 +21,19 @@ const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
|
21
21
|
export function jqKey(key) {
|
|
22
22
|
return IDENTIFIER.test(key) ? key : JSON.stringify(key);
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* A picked field rendered as a jq path: an output field reads off the program root
|
|
26
|
+
* (`.user.name`, `.["odd key"]`, the whole output `.`), an input field off the bound run
|
|
27
|
+
* input (`$input.user.name`, the whole input `$input`).
|
|
28
|
+
*/
|
|
25
29
|
export function fieldPathToJq(root, path) {
|
|
26
|
-
let out =
|
|
30
|
+
let out = root === 'input' ? '$input' : '';
|
|
27
31
|
for (const segment of path) {
|
|
28
|
-
out += IDENTIFIER.test(segment)
|
|
32
|
+
out += IDENTIFIER.test(segment)
|
|
33
|
+
? `.${segment}`
|
|
34
|
+
: `${out === '' ? '.' : ''}[${JSON.stringify(segment)}]`;
|
|
29
35
|
}
|
|
30
|
-
return out;
|
|
36
|
+
return out === '' ? '.' : out;
|
|
31
37
|
}
|
|
32
38
|
/** The jq fragment ONE row's value compiles to — the row's "show jq". */
|
|
33
39
|
export function rowValueJq(source) {
|
|
@@ -58,7 +64,7 @@ export function rowValueJq(source) {
|
|
|
58
64
|
}
|
|
59
65
|
/**
|
|
60
66
|
* Compile a mapping form into ONE adapter jq that constructs the update jq's
|
|
61
|
-
* declared input over
|
|
67
|
+
* declared input over the tool output and `$input`. An empty form compiles to the
|
|
62
68
|
* empty object `{}`; a blank target, a duplicate target, or an invalid source is a
|
|
63
69
|
* loud error.
|
|
64
70
|
*/
|
|
@@ -93,7 +99,7 @@ export function defaultRowsForInput(params) {
|
|
|
93
99
|
// `compileAdapter` emits a canonical, PARSEABLE shape so a stored adapter reopens as
|
|
94
100
|
// the form it was authored in (never UI-only state): the object
|
|
95
101
|
// `{ <key>: (<value>), … }` where `<key>` is a bare identifier or a JSON string and
|
|
96
|
-
// `<value>` is one of — a field path
|
|
102
|
+
// `<value>` is one of — a field path `.…` (output) / `$input…` (input), a JSON literal, or a raw
|
|
97
103
|
// jq expression. `parseAdapter` inverts it; `parse(compileAdapter(rows).jq) === rows`
|
|
98
104
|
// for every row kind whose literal is already canonical JSON. A shape it does not
|
|
99
105
|
// recognise returns `null` — the editor falls back to the raw-jq escape hatch.
|
|
@@ -102,11 +108,22 @@ const BRACKET_SEGMENT = /^\[("(?:[^"\\]|\\.)*")\]/;
|
|
|
102
108
|
const ADAPTER_KEY = /^("(?:[^"\\]|\\.)*"|[A-Za-z_][A-Za-z0-9_]*)\s*:\s*\(/;
|
|
103
109
|
/** Recover a field source from a pure path expression, or `null` if it is not one. */
|
|
104
110
|
export function parseFieldPath(value) {
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
let root;
|
|
112
|
+
let rest;
|
|
113
|
+
if (value === '.')
|
|
114
|
+
return { kind: 'field', root: 'output', path: [] };
|
|
115
|
+
if (value.startsWith('$input')) {
|
|
116
|
+
root = 'input';
|
|
117
|
+
rest = value.slice('$input'.length);
|
|
118
|
+
}
|
|
119
|
+
else if (value.startsWith('.')) {
|
|
120
|
+
root = 'output';
|
|
121
|
+
// A root bracket (`.["odd key"]`) drops its leading dot; a root key keeps it (`.a`).
|
|
122
|
+
rest = value.startsWith('.[') ? value.slice(1) : value;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
107
125
|
return null;
|
|
108
|
-
|
|
109
|
-
let rest = value.slice(head[0].length);
|
|
126
|
+
}
|
|
110
127
|
const path = [];
|
|
111
128
|
while (rest.length > 0) {
|
|
112
129
|
if (rest.startsWith('.')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/state-binding/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAqCH,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,sFAAsF;AACtF,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/state-binding/adapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tai42/studio-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.0.0",
|
|
4
4
|
"description": "The Studio plugin contract, shared UI components, and hooks that every feature builds on.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "tai42 <oss@tai42.ai>",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"@radix-ui/react-select": "^2.3.2",
|
|
97
97
|
"@radix-ui/react-tabs": "^1.1.21",
|
|
98
98
|
"@radix-ui/react-tooltip": "^1.2.16",
|
|
99
|
-
"@tai42/api-client": "
|
|
99
|
+
"@tai42/api-client": "21.0.0"
|
|
100
100
|
},
|
|
101
101
|
"scripts": {
|
|
102
102
|
"build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
@@ -104,7 +104,8 @@
|
|
|
104
104
|
"lint": "eslint src scripts --max-warnings 0",
|
|
105
105
|
"format:check": "prettier --check \"src/**/*.{ts,tsx,css}\" \"scripts/**/*.mjs\"",
|
|
106
106
|
"test": "vitest run",
|
|
107
|
-
"api:
|
|
108
|
-
"api:
|
|
107
|
+
"api:build": "tsc -b tsconfig.build.json --clean && pnpm run build",
|
|
108
|
+
"api:check": "pnpm run api:build && api-extractor run --config config/api-extractor.index.json && api-extractor run --config config/api-extractor.host.json && api-extractor run --config config/api-extractor.testing.json && api-extractor run --config config/api-extractor.schema-form.json",
|
|
109
|
+
"api:update": "pnpm run api:build && api-extractor run --local --config config/api-extractor.index.json && api-extractor run --local --config config/api-extractor.host.json && api-extractor run --local --config config/api-extractor.testing.json && api-extractor run --local --config config/api-extractor.schema-form.json"
|
|
109
110
|
}
|
|
110
111
|
}
|
|
@@ -2075,6 +2075,13 @@
|
|
|
2075
2075
|
border-bottom: 1px solid var(--tai-color-border);
|
|
2076
2076
|
}
|
|
2077
2077
|
|
|
2078
|
+
/* The bar already pads its edges, so the brand drops its own inline padding here:
|
|
2079
|
+
at 320 px the brand, the three-option theme switch and the menu button then fit
|
|
2080
|
+
on one row, and the switch never wraps into a box taller than the bar. */
|
|
2081
|
+
.tai-topbar .tai-brand {
|
|
2082
|
+
padding-inline: 0;
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2078
2085
|
/* -- Master / detail ---------------------------------------------------------------
|
|
2079
2086
|
`data-pane` drives the layout at every width: `list` gives the list the full
|
|
2080
2087
|
width with no empty detail pane; `detail` shows a balanced two-pane split.
|
|
@@ -39,7 +39,7 @@ export function isExecutionKeyListEmpty(query: ExecutionKeyQuery): boolean {
|
|
|
39
39
|
function keyFingerprint(key: TokensPayload[number]): string | undefined {
|
|
40
40
|
const data = key.policy_data;
|
|
41
41
|
if (typeof data !== 'object' || data === null) return undefined;
|
|
42
|
-
const value =
|
|
42
|
+
const value = data.key_fingerprint;
|
|
43
43
|
return typeof value === 'string' ? value : undefined;
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -4,26 +4,19 @@
|
|
|
4
4
|
* `ExtensionPicker`. Kept free of React so the grouping logic is unit-tested
|
|
5
5
|
* directly.
|
|
6
6
|
*
|
|
7
|
-
* The `/api/extensions` catalog is a flat list of `{ name, kind }` entries. Two
|
|
7
|
+
* The `/api/extensions` catalog is a flat list of `{ name, kind, multiple }` entries. Two
|
|
8
8
|
* independent groupings live here:
|
|
9
9
|
* - `groupIntoFamilies` groups a tool's composed branch VARIANTS (which share a
|
|
10
10
|
* base tool name and append underscore suffixes — `tool`, `tool_a`, `tool_a_b`)
|
|
11
11
|
* back into one FAMILY keyed by that base name (the catalog view);
|
|
12
|
-
* - `groupByKind` groups the catalog by extension KIND (the picker view),
|
|
13
|
-
* the `
|
|
12
|
+
* - `groupByKind` groups the catalog by extension KIND (the picker view), each
|
|
13
|
+
* group carrying the served `multiple` flag of its kind.
|
|
14
14
|
* `kindVariant` maps each serialized `kind` value to a design-system Badge variant.
|
|
15
15
|
*/
|
|
16
16
|
import type { Extension } from '@tai42/api-client';
|
|
17
17
|
|
|
18
18
|
import type { BadgeProps } from './badge';
|
|
19
19
|
|
|
20
|
-
/**
|
|
21
|
-
* The single non-stackable extension kind: at most one `backend` extension may
|
|
22
|
-
* appear in a combo (the `backend` kind is declared non-stackable, `multiple=False`).
|
|
23
|
-
* The `ExtensionPicker` enforces single-select for this kind.
|
|
24
|
-
*/
|
|
25
|
-
export const NON_STACKABLE_KIND = 'backend';
|
|
26
|
-
|
|
27
20
|
/** One base tool and every extension entry that branches from it. */
|
|
28
21
|
export interface ExtensionFamily {
|
|
29
22
|
/** The base tool name (the segment before the first underscore). */
|
|
@@ -36,8 +29,9 @@ export interface ExtensionFamily {
|
|
|
36
29
|
export interface ExtensionKindGroup {
|
|
37
30
|
/** The serialized kind value (`wrapper` / `transformer` / `backend`). */
|
|
38
31
|
readonly kind: string;
|
|
39
|
-
/** Whether this kind is
|
|
40
|
-
|
|
32
|
+
/** Whether a combo may carry several extensions of this kind; `false` is single-select
|
|
33
|
+
* in the picker. Served per kind by the catalog. */
|
|
34
|
+
readonly multiple: boolean;
|
|
41
35
|
/** The kind's entries, ordered by name. */
|
|
42
36
|
readonly members: readonly Extension[];
|
|
43
37
|
}
|
|
@@ -79,23 +73,29 @@ export function groupIntoFamilies(extensions: readonly Extension[]): ExtensionFa
|
|
|
79
73
|
/**
|
|
80
74
|
* Group a flat extension list by `kind`, for the picker. Groups are ordered by
|
|
81
75
|
* kind and each group's members by name, so the render order is stable regardless
|
|
82
|
-
* of the server's list order.
|
|
76
|
+
* of the server's list order. Each group carries its kind's served `multiple`; a kind
|
|
77
|
+
* whose entries disagree is a catalog fault and throws.
|
|
83
78
|
*/
|
|
84
79
|
export function groupByKind(extensions: readonly Extension[]): ExtensionKindGroup[] {
|
|
85
|
-
const byKind = new Map<string, Extension[]>();
|
|
80
|
+
const byKind = new Map<string, { multiple: boolean; members: Extension[] }>();
|
|
86
81
|
for (const extension of extensions) {
|
|
87
|
-
const
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
byKind.set(extension.kind, [extension]);
|
|
82
|
+
const group = byKind.get(extension.kind);
|
|
83
|
+
if (group === undefined) {
|
|
84
|
+
byKind.set(extension.kind, { multiple: extension.multiple, members: [extension] });
|
|
85
|
+
continue;
|
|
92
86
|
}
|
|
87
|
+
if (group.multiple !== extension.multiple) {
|
|
88
|
+
throw new Error(
|
|
89
|
+
`extension kind ${extension.kind} is served as both single- and multi-select`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
group.members.push(extension);
|
|
93
93
|
}
|
|
94
94
|
return [...byKind.entries()]
|
|
95
|
-
.map(([kind,
|
|
95
|
+
.map(([kind, group]) => ({
|
|
96
96
|
kind,
|
|
97
|
-
|
|
98
|
-
members: [...members].sort((a, b) => a.name.localeCompare(b.name)),
|
|
97
|
+
multiple: group.multiple,
|
|
98
|
+
members: [...group.members].sort((a, b) => a.name.localeCompare(b.name)),
|
|
99
99
|
}))
|
|
100
100
|
.sort((a, b) => a.kind.localeCompare(b.kind));
|
|
101
101
|
}
|
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
* live in the SDK). It is PRESENTATIONAL: the caller fetches `available` and owns
|
|
7
7
|
* the selected `value`; this component fetches nothing.
|
|
8
8
|
*
|
|
9
|
-
* The catalog is GROUPED by `kind`.
|
|
10
|
-
* one
|
|
11
|
-
*
|
|
12
|
-
* freely multi-select. Selection order is preserved (the combo is ordered — the
|
|
9
|
+
* The catalog is GROUPED by `kind`. A kind the catalog serves as not `multiple` is
|
|
10
|
+
* SINGLE-SELECT — checking one of its extensions replaces any other of that kind
|
|
11
|
+
* already in the combo; a `multiple` kind is freely multi-select. Selection order is preserved (the combo is ordered — the
|
|
13
12
|
* stacking order that produces the branch tool name), so a newly-checked extension
|
|
14
13
|
* appends to the end and unchecking removes in place.
|
|
15
14
|
*
|
|
@@ -60,20 +59,20 @@ export function ExtensionPicker({
|
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
/**
|
|
63
|
-
* Toggle a single extension. For a
|
|
64
|
-
* first strips any other selected member of that kind before
|
|
65
|
-
* combo carries at most one
|
|
66
|
-
* preserved: a newly-checked name lands at the end.
|
|
62
|
+
* Toggle a single extension. For a kind the catalog serves as not `multiple`,
|
|
63
|
+
* checking one first strips any other selected member of that kind before
|
|
64
|
+
* appending, so the combo carries at most one of it; unchecking just removes it.
|
|
65
|
+
* Order is preserved: a newly-checked name lands at the end.
|
|
67
66
|
*/
|
|
68
|
-
const toggle = (extension: Extension,
|
|
67
|
+
const toggle = (extension: Extension, multiple: boolean, checked: boolean): void => {
|
|
69
68
|
if (!checked) {
|
|
70
69
|
onChange(value.filter((name) => name !== extension.name));
|
|
71
70
|
return;
|
|
72
71
|
}
|
|
73
72
|
if (selected.has(extension.name)) return;
|
|
74
|
-
const siblingNames =
|
|
75
|
-
?
|
|
76
|
-
:
|
|
73
|
+
const siblingNames = multiple
|
|
74
|
+
? undefined
|
|
75
|
+
: new Set(available.filter((e) => e.kind === extension.kind).map((e) => e.name));
|
|
77
76
|
const kept =
|
|
78
77
|
siblingNames === undefined ? [...value] : value.filter((name) => !siblingNames.has(name));
|
|
79
78
|
onChange([...kept, extension.name]);
|
|
@@ -87,7 +86,7 @@ export function ExtensionPicker({
|
|
|
87
86
|
and the single-select qualifier rides beside it as secondary text. */}
|
|
88
87
|
<div className="tai-row">
|
|
89
88
|
<Badge variant={kindVariant(group.kind)}>{group.kind}</Badge>
|
|
90
|
-
{group.
|
|
89
|
+
{group.multiple ? null : <span className="tai-muted">(single-select)</span>}
|
|
91
90
|
</div>
|
|
92
91
|
<div className="tai-row">
|
|
93
92
|
{group.members.map((extension) => (
|
|
@@ -97,7 +96,7 @@ export function ExtensionPicker({
|
|
|
97
96
|
checked={selected.has(extension.name)}
|
|
98
97
|
disabled={disabled}
|
|
99
98
|
onCheckedChange={(checked) => {
|
|
100
|
-
toggle(extension, group.
|
|
99
|
+
toggle(extension, group.multiple, checked);
|
|
101
100
|
}}
|
|
102
101
|
/>
|
|
103
102
|
))}
|