@umbraco-ai/core 1.10.0 → 1.11.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/package.json +3 -3
- package/types/umbraco-ai-public-types.d.ts +607 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umbraco-ai/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./types/umbraco-ai-public-types.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"README.md"
|
|
9
9
|
],
|
|
10
10
|
"peerDependencies": {
|
|
11
|
-
"@umbraco-cms/backoffice": "^17.
|
|
11
|
+
"@umbraco-cms/backoffice": "^17.4.0",
|
|
12
12
|
"chart.js": "^4.5.1",
|
|
13
|
-
"diff": "^
|
|
13
|
+
"diff": "^9.0.0"
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -24,32 +24,220 @@ import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
|
|
|
24
24
|
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
|
|
25
25
|
import { UUIFormControlMixinElement } from '@umbraco-ui/uui-base';
|
|
26
26
|
|
|
27
|
-
declare
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
export declare type AiDocumentMetadataModel = {
|
|
28
|
+
contentTypeKey: string;
|
|
29
|
+
variants: Array<AiVariantIdModel>;
|
|
30
|
+
isVariant: boolean;
|
|
31
|
+
isSegmented: boolean;
|
|
32
|
+
name?: string | null;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export declare type AiDocumentMetadataModelWritable = {
|
|
36
|
+
contentTypeKey: string;
|
|
37
|
+
variants: Array<AiVariantIdModelWritable>;
|
|
38
|
+
isVariant: boolean;
|
|
39
|
+
isSegmented: boolean;
|
|
40
|
+
name?: string | null;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export declare type AiPropertyOperationModel = 'AddItem' | 'RemoveItem' | 'MoveItem' | 'SetValue' | 'ClearValue';
|
|
44
|
+
|
|
45
|
+
declare type AiPropertyPathSegmentModel = {
|
|
46
|
+
[key: string]: never;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export declare type AiPropertyValueOperationErrorModel = {
|
|
50
|
+
code: string;
|
|
51
|
+
message: string;
|
|
52
|
+
details?: {
|
|
53
|
+
[key: string]: JsonNode;
|
|
54
|
+
} | null;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export declare type AiVariantIdModel = {
|
|
58
|
+
culture?: string | null;
|
|
59
|
+
segment?: string | null;
|
|
60
|
+
readonly isInvariant: boolean;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export declare type AiVariantIdModelWritable = {
|
|
64
|
+
culture?: string | null;
|
|
65
|
+
segment?: string | null;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
declare type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';
|
|
69
|
+
|
|
70
|
+
declare interface Auth {
|
|
71
|
+
/**
|
|
72
|
+
* Which part of the request do we use to send the auth?
|
|
73
|
+
*
|
|
74
|
+
* @default 'header'
|
|
75
|
+
*/
|
|
76
|
+
in?: 'header' | 'query' | 'cookie';
|
|
77
|
+
/**
|
|
78
|
+
* Header or query parameter name.
|
|
79
|
+
*
|
|
80
|
+
* @default 'Authorization'
|
|
81
|
+
*/
|
|
82
|
+
name?: string;
|
|
83
|
+
scheme?: 'basic' | 'bearer';
|
|
84
|
+
type: 'apiKey' | 'http';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
declare type AuthToken = string | undefined;
|
|
88
|
+
|
|
89
|
+
declare type BodySerializer = (body: unknown) => unknown;
|
|
90
|
+
|
|
91
|
+
declare type BuildUrlFn = <TData extends {
|
|
92
|
+
body?: unknown;
|
|
93
|
+
path?: Record<string, unknown>;
|
|
94
|
+
query?: Record<string, unknown>;
|
|
95
|
+
url: string;
|
|
96
|
+
}>(options: TData & Options_2<TData>) => string;
|
|
97
|
+
|
|
98
|
+
declare type Client = Client_2<RequestFn, Config, MethodFn, BuildUrlFn, SseFn> & {
|
|
99
|
+
interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
declare type Client_2<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
|
|
103
|
+
/**
|
|
104
|
+
* Returns the final request URL.
|
|
105
|
+
*/
|
|
106
|
+
buildUrl: BuildUrlFn;
|
|
107
|
+
getConfig: () => Config;
|
|
108
|
+
request: RequestFn;
|
|
109
|
+
setConfig: (config: Config) => Config;
|
|
110
|
+
} & {
|
|
111
|
+
[K in HttpMethod]: MethodFn;
|
|
112
|
+
} & ([SseFn] extends [never] ? {
|
|
113
|
+
sse?: never;
|
|
114
|
+
} : {
|
|
115
|
+
sse: {
|
|
116
|
+
[K in HttpMethod]: SseFn;
|
|
33
117
|
};
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
declare interface ClientOptions {
|
|
121
|
+
baseUrl?: string;
|
|
122
|
+
responseStyle?: ResponseStyle;
|
|
123
|
+
throwOnError?: boolean;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
declare interface Config<T extends ClientOptions = ClientOptions> extends Omit<RequestInit, 'body' | 'headers' | 'method'>, Config_2 {
|
|
127
|
+
/**
|
|
128
|
+
* Base URL for all requests made by this client.
|
|
129
|
+
*/
|
|
130
|
+
baseUrl?: T['baseUrl'];
|
|
131
|
+
/**
|
|
132
|
+
* Fetch API implementation. You can use this option to provide a custom
|
|
133
|
+
* fetch instance.
|
|
134
|
+
*
|
|
135
|
+
* @default globalThis.fetch
|
|
136
|
+
*/
|
|
137
|
+
fetch?: typeof fetch;
|
|
138
|
+
/**
|
|
139
|
+
* Please don't use the Fetch client for Next.js applications. The `next`
|
|
140
|
+
* options won't have any effect.
|
|
141
|
+
*
|
|
142
|
+
* Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead.
|
|
143
|
+
*/
|
|
144
|
+
next?: never;
|
|
145
|
+
/**
|
|
146
|
+
* Return the response data parsed in a specified format. By default, `auto`
|
|
147
|
+
* will infer the appropriate method from the `Content-Type` response header.
|
|
148
|
+
* You can override this behavior with any of the {@link Body} methods.
|
|
149
|
+
* Select `stream` if you don't want to parse response data at all.
|
|
150
|
+
*
|
|
151
|
+
* @default 'auto'
|
|
152
|
+
*/
|
|
153
|
+
parseAs?: 'arrayBuffer' | 'auto' | 'blob' | 'formData' | 'json' | 'stream' | 'text';
|
|
154
|
+
/**
|
|
155
|
+
* Should we return only data or multiple fields (data, error, response, etc.)?
|
|
156
|
+
*
|
|
157
|
+
* @default 'fields'
|
|
158
|
+
*/
|
|
159
|
+
responseStyle?: ResponseStyle;
|
|
160
|
+
/**
|
|
161
|
+
* Throw an error instead of returning it in the response?
|
|
162
|
+
*
|
|
163
|
+
* @default false
|
|
164
|
+
*/
|
|
165
|
+
throwOnError?: T['throwOnError'];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
declare interface Config_2 {
|
|
169
|
+
/**
|
|
170
|
+
* Auth token or a function returning auth token. The resolved value will be
|
|
171
|
+
* added to the request payload as defined by its `security` array.
|
|
172
|
+
*/
|
|
173
|
+
auth?: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken;
|
|
174
|
+
/**
|
|
175
|
+
* A function for serializing request body parameter. By default,
|
|
176
|
+
* {@link JSON.stringify()} will be used.
|
|
177
|
+
*/
|
|
178
|
+
bodySerializer?: BodySerializer | null;
|
|
179
|
+
/**
|
|
180
|
+
* An object containing any HTTP headers that you want to pre-populate your
|
|
181
|
+
* `Headers` object with.
|
|
182
|
+
*
|
|
183
|
+
* {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more}
|
|
184
|
+
*/
|
|
185
|
+
headers?: RequestInit['headers'] | Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined | unknown>;
|
|
186
|
+
/**
|
|
187
|
+
* The request method.
|
|
188
|
+
*
|
|
189
|
+
* {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
|
|
190
|
+
*/
|
|
191
|
+
method?: Uppercase<HttpMethod>;
|
|
192
|
+
/**
|
|
193
|
+
* A function for serializing request query parameters. By default, arrays
|
|
194
|
+
* will be exploded in form style, objects will be exploded in deepObject
|
|
195
|
+
* style, and reserved characters are percent-encoded.
|
|
196
|
+
*
|
|
197
|
+
* This method will have no effect if the native `paramsSerializer()` Axios
|
|
198
|
+
* API function is used.
|
|
199
|
+
*
|
|
200
|
+
* {@link https://swagger.io/docs/specification/serialization/#query View examples}
|
|
201
|
+
*/
|
|
202
|
+
querySerializer?: QuerySerializer | QuerySerializerOptions;
|
|
203
|
+
/**
|
|
204
|
+
* A function validating request data. This is useful if you want to ensure
|
|
205
|
+
* the request conforms to the desired shape, so it can be safely sent to
|
|
206
|
+
* the server.
|
|
207
|
+
*/
|
|
208
|
+
requestValidator?: (data: unknown) => Promise<unknown>;
|
|
209
|
+
/**
|
|
210
|
+
* A function transforming response data before it's returned. This is useful
|
|
211
|
+
* for post-processing data, e.g., converting ISO strings into Date objects.
|
|
212
|
+
*/
|
|
213
|
+
responseTransformer?: (data: unknown) => Promise<unknown>;
|
|
214
|
+
/**
|
|
215
|
+
* A function validating response data. This is useful if you want to ensure
|
|
216
|
+
* the response conforms to the desired shape, so it can be safely passed to
|
|
217
|
+
* the transformers and returned to the user.
|
|
218
|
+
*/
|
|
219
|
+
responseValidator?: (data: unknown) => Promise<unknown>;
|
|
34
220
|
}
|
|
35
221
|
|
|
36
222
|
/**
|
|
37
|
-
* Configures a generated hey-api client
|
|
38
|
-
*
|
|
223
|
+
* Configures a generated hey-api client for authenticated calls to the
|
|
224
|
+
* Umbraco backoffice Management API.
|
|
39
225
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
226
|
+
* Delegates to `authContext.configureClient(client)`, which:
|
|
227
|
+
* - Sets `baseUrl`, `credentials: 'include'`, and an `auth` callback that
|
|
228
|
+
* gates each request on `#ensureTokenReady` (inline refresh + cross-tab
|
|
229
|
+
* Web Lock coordination).
|
|
230
|
+
* - Binds the default response interceptors (401 retry, 403 handling,
|
|
231
|
+
* error normalization, server notifications) with the auth context's
|
|
232
|
+
* own host so the `UmbAuthSignalerContext` is registered at `umb-app`
|
|
233
|
+
* and emissions reach `UmbAuthContext` correctly.
|
|
46
234
|
*
|
|
47
235
|
* @param host The entry point's `host` parameter (`UmbElement`).
|
|
48
236
|
* @param client The generated hey-api client to configure.
|
|
49
237
|
* @returns A Promise that resolves once auth is configured on the client.
|
|
50
238
|
* @public
|
|
51
239
|
*/
|
|
52
|
-
export declare function configureAiClient(host: UmbElement, client:
|
|
240
|
+
export declare function configureAiClient(host: UmbElement, client: unknown): Promise<void>;
|
|
53
241
|
|
|
54
242
|
export declare const coreClientReady: Promise<void>;
|
|
55
243
|
|
|
@@ -101,6 +289,8 @@ declare type EntityVersionResponseModel = {
|
|
|
101
289
|
changeDescription?: string | null;
|
|
102
290
|
};
|
|
103
291
|
|
|
292
|
+
declare type ErrInterceptor<Err, Res, Req, Options> = (error: Err, response: Res, request: Req, options: Options) => Err | Promise<Err>;
|
|
293
|
+
|
|
104
294
|
export declare function formatDateTime(input: string | Date, locale?: string): string;
|
|
105
295
|
|
|
106
296
|
/**
|
|
@@ -111,6 +301,57 @@ export declare function formatDateTime(input: string | Date, locale?: string): s
|
|
|
111
301
|
*/
|
|
112
302
|
export declare function hasEntityAdapter(entityType: string): boolean;
|
|
113
303
|
|
|
304
|
+
declare type HttpMethod = 'connect' | 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace';
|
|
305
|
+
|
|
306
|
+
declare class Interceptors<Interceptor> {
|
|
307
|
+
fns: Array<Interceptor | null>;
|
|
308
|
+
clear(): void;
|
|
309
|
+
eject(id: number | Interceptor): void;
|
|
310
|
+
exists(id: number | Interceptor): boolean;
|
|
311
|
+
getInterceptorIndex(id: number | Interceptor): number;
|
|
312
|
+
update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false;
|
|
313
|
+
use(fn: Interceptor): number;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
declare type InvokeData = {
|
|
317
|
+
body?: PropertyValueOperationRequestModelWritable;
|
|
318
|
+
path?: never;
|
|
319
|
+
query?: never;
|
|
320
|
+
url: '/umbraco/ai/management/api/v1/property-value-operation';
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
declare type InvokeErrors = {
|
|
324
|
+
/**
|
|
325
|
+
* Bad Request
|
|
326
|
+
*/
|
|
327
|
+
400: unknown;
|
|
328
|
+
/**
|
|
329
|
+
* The resource is protected and requires an authentication token
|
|
330
|
+
*/
|
|
331
|
+
401: unknown;
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
declare type InvokeResponses = {
|
|
335
|
+
/**
|
|
336
|
+
* OK
|
|
337
|
+
*/
|
|
338
|
+
200: PropertyValueOperationResponseModel;
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
declare type JsonNode = {
|
|
342
|
+
options?: JsonNodeOptions | null;
|
|
343
|
+
parent?: JsonNode | null;
|
|
344
|
+
root: JsonNode;
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
declare type JsonNodeOptions = {
|
|
348
|
+
propertyNameCaseInsensitive: boolean;
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
declare type JsonNodeWritable = {
|
|
352
|
+
[key: string]: never;
|
|
353
|
+
};
|
|
354
|
+
|
|
114
355
|
/**
|
|
115
356
|
* Manifest for entity adapter extensions.
|
|
116
357
|
*/
|
|
@@ -124,6 +365,27 @@ export declare interface ManifestEntityAdapter extends ManifestBase {
|
|
|
124
365
|
}>;
|
|
125
366
|
}
|
|
126
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Manifest for property value preparer extensions.
|
|
370
|
+
*
|
|
371
|
+
* Registered preparers are looked up by `forPropertyEditorSchemaAlias` whenever the entity
|
|
372
|
+
* adapter is about to call `setPropertyValue`. The first matching preparer's `prepare` is
|
|
373
|
+
* invoked; editors with no registered preparer use a small default that attempts JSON.parse on
|
|
374
|
+
* string input and returns the result unchanged.
|
|
375
|
+
*/
|
|
376
|
+
export declare interface ManifestUaiPropertyValuePreparer extends ManifestBase {
|
|
377
|
+
type: typeof UAI_PROPERTY_VALUE_PREPARER_EXTENSION_TYPE;
|
|
378
|
+
/**
|
|
379
|
+
* The CMS property editor schema alias this preparer handles (e.g. `Umbraco.BlockList`).
|
|
380
|
+
* Matched case-insensitively against the property editor of the value being applied.
|
|
381
|
+
*/
|
|
382
|
+
forPropertyEditorSchemaAlias: string;
|
|
383
|
+
/** The preparer API class loader. */
|
|
384
|
+
api: () => Promise<{
|
|
385
|
+
default: new () => UaiPropertyValuePreparerApi;
|
|
386
|
+
}>;
|
|
387
|
+
}
|
|
388
|
+
|
|
127
389
|
/**
|
|
128
390
|
* Manifest for request context contributor extensions.
|
|
129
391
|
*
|
|
@@ -188,6 +450,131 @@ export declare interface ManifestUaiTestFeatureEntityRepository extends Manifest
|
|
|
188
450
|
};
|
|
189
451
|
}
|
|
190
452
|
|
|
453
|
+
declare type MethodFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
|
454
|
+
|
|
455
|
+
declare interface Middleware<Req, Res, Err, Options> {
|
|
456
|
+
error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
|
|
457
|
+
request: Interceptors<ReqInterceptor<Req, Options>>;
|
|
458
|
+
response: Interceptors<ResInterceptor<Res, Req, Options>>;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
declare type ObjectStyle = 'form' | 'deepObject';
|
|
462
|
+
|
|
463
|
+
declare type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>;
|
|
464
|
+
|
|
465
|
+
declare type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options_2<TData, ThrowOnError, TResponse> & {
|
|
466
|
+
/**
|
|
467
|
+
* You can provide a client instance returned by `createClient()` instead of
|
|
468
|
+
* individual options. This might be also useful if you want to implement a
|
|
469
|
+
* custom client.
|
|
470
|
+
*/
|
|
471
|
+
client?: Client;
|
|
472
|
+
/**
|
|
473
|
+
* You can pass arbitrary values through the `meta` object. This can be
|
|
474
|
+
* used to access values that aren't defined as part of the SDK function.
|
|
475
|
+
*/
|
|
476
|
+
meta?: Record<string, unknown>;
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
declare type Options_2<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown, TResponseStyle extends ResponseStyle = 'fields'> = OmitKeys<RequestOptions<TResponse, TResponseStyle, ThrowOnError>, 'body' | 'path' | 'query' | 'url'> & ([TData] extends [never] ? unknown : Omit<TData, 'url'>);
|
|
480
|
+
|
|
481
|
+
export declare type PropertyValueOperationRequestModel = {
|
|
482
|
+
path: Array<AiPropertyPathSegmentModel>;
|
|
483
|
+
operation: AiPropertyOperationModel;
|
|
484
|
+
args?: JsonNode | null;
|
|
485
|
+
rootValue?: JsonNode | null;
|
|
486
|
+
rootEditorSchemaAlias: string;
|
|
487
|
+
documentMetadata: AiDocumentMetadataModel;
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
export declare type PropertyValueOperationRequestModelWritable = {
|
|
491
|
+
path: Array<AiPropertyPathSegmentModel>;
|
|
492
|
+
operation: AiPropertyOperationModel;
|
|
493
|
+
args?: JsonNodeWritable | null;
|
|
494
|
+
rootValue?: JsonNodeWritable | null;
|
|
495
|
+
rootEditorSchemaAlias: string;
|
|
496
|
+
documentMetadata: AiDocumentMetadataModelWritable;
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
export declare type PropertyValueOperationResponseModel = {
|
|
500
|
+
success: boolean;
|
|
501
|
+
newRootValue?: JsonNode | null;
|
|
502
|
+
blockKey?: string | null;
|
|
503
|
+
error?: AiPropertyValueOperationErrorModel | null;
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
export declare class PropertyValueOperationsService {
|
|
507
|
+
static invoke<ThrowOnError extends boolean = false>(options?: Options<InvokeData, ThrowOnError>): RequestResult<InvokeResponses, InvokeErrors, ThrowOnError, "fields">;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
declare type QuerySerializer = (query: Record<string, unknown>) => string;
|
|
511
|
+
|
|
512
|
+
declare type QuerySerializerOptions = QuerySerializerOptionsObject & {
|
|
513
|
+
/**
|
|
514
|
+
* Per-parameter serialization overrides. When provided, these settings
|
|
515
|
+
* override the global array/object settings for specific parameter names.
|
|
516
|
+
*/
|
|
517
|
+
parameters?: Record<string, QuerySerializerOptionsObject>;
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
declare type QuerySerializerOptionsObject = {
|
|
521
|
+
allowReserved?: boolean;
|
|
522
|
+
array?: Partial<SerializerOptions<ArrayStyle>>;
|
|
523
|
+
object?: Partial<SerializerOptions<ObjectStyle>>;
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
declare type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;
|
|
527
|
+
|
|
528
|
+
declare type RequestFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> & Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
|
529
|
+
|
|
530
|
+
declare interface RequestOptions<TData = unknown, TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends Config<{
|
|
531
|
+
responseStyle: TResponseStyle;
|
|
532
|
+
throwOnError: ThrowOnError;
|
|
533
|
+
}>, Pick<ServerSentEventsOptions<TData>, 'onRequest' | 'onSseError' | 'onSseEvent' | 'sseDefaultRetryDelay' | 'sseMaxRetryAttempts' | 'sseMaxRetryDelay'> {
|
|
534
|
+
/**
|
|
535
|
+
* Any body that you want to add to your request.
|
|
536
|
+
*
|
|
537
|
+
* {@link https://developer.mozilla.org/docs/Web/API/fetch#body}
|
|
538
|
+
*/
|
|
539
|
+
body?: unknown;
|
|
540
|
+
path?: Record<string, unknown>;
|
|
541
|
+
query?: Record<string, unknown>;
|
|
542
|
+
/**
|
|
543
|
+
* Security mechanism(s) to use for the request.
|
|
544
|
+
*/
|
|
545
|
+
security?: ReadonlyArray<Auth>;
|
|
546
|
+
url: Url;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
declare type RequestResult<TData = unknown, TError = unknown, ThrowOnError extends boolean = boolean, TResponseStyle extends ResponseStyle = 'fields'> = ThrowOnError extends true ? Promise<TResponseStyle extends 'data' ? TData extends Record<string, unknown> ? TData[keyof TData] : TData : {
|
|
550
|
+
data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
|
|
551
|
+
request: Request;
|
|
552
|
+
response: Response;
|
|
553
|
+
}> : Promise<TResponseStyle extends 'data' ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined : ({
|
|
554
|
+
data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
|
|
555
|
+
error: undefined;
|
|
556
|
+
} | {
|
|
557
|
+
data: undefined;
|
|
558
|
+
error: TError extends Record<string, unknown> ? TError[keyof TError] : TError;
|
|
559
|
+
}) & {
|
|
560
|
+
request: Request;
|
|
561
|
+
response: Response;
|
|
562
|
+
}>;
|
|
563
|
+
|
|
564
|
+
declare type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>;
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Looks up the preparer registered for a given editor schema alias and runs it. Editors with no
|
|
568
|
+
* registered preparer fall back to a permissive default that attempts JSON.parse on string input
|
|
569
|
+
* and returns the result unchanged.
|
|
570
|
+
*/
|
|
571
|
+
export declare function resolveAndPrepareValue(value: unknown, editorAlias: string | undefined, currentValue: unknown): Promise<unknown>;
|
|
572
|
+
|
|
573
|
+
declare interface ResolvedRequestOptions<TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
|
|
574
|
+
headers: Headers;
|
|
575
|
+
serializedBody?: string;
|
|
576
|
+
}
|
|
577
|
+
|
|
191
578
|
/**
|
|
192
579
|
* Resolve an entity adapter by entity type.
|
|
193
580
|
*
|
|
@@ -208,6 +595,98 @@ export declare interface ManifestUaiTestFeatureEntityRepository extends Manifest
|
|
|
208
595
|
*/
|
|
209
596
|
export declare function resolveEntityAdapterByType(entityType: string): Promise<UaiEntityAdapterApi | undefined>;
|
|
210
597
|
|
|
598
|
+
declare type ResponseStyle = 'data' | 'fields';
|
|
599
|
+
|
|
600
|
+
declare interface SerializerOptions<T> {
|
|
601
|
+
/**
|
|
602
|
+
* @default true
|
|
603
|
+
*/
|
|
604
|
+
explode: boolean;
|
|
605
|
+
style: T;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
declare type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> & Pick<Config_2, 'method' | 'responseTransformer' | 'responseValidator'> & {
|
|
609
|
+
/**
|
|
610
|
+
* Fetch API implementation. You can use this option to provide a custom
|
|
611
|
+
* fetch instance.
|
|
612
|
+
*
|
|
613
|
+
* @default globalThis.fetch
|
|
614
|
+
*/
|
|
615
|
+
fetch?: typeof fetch;
|
|
616
|
+
/**
|
|
617
|
+
* Implementing clients can call request interceptors inside this hook.
|
|
618
|
+
*/
|
|
619
|
+
onRequest?: (url: string, init: RequestInit) => Promise<Request>;
|
|
620
|
+
/**
|
|
621
|
+
* Callback invoked when a network or parsing error occurs during streaming.
|
|
622
|
+
*
|
|
623
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
624
|
+
*
|
|
625
|
+
* @param error The error that occurred.
|
|
626
|
+
*/
|
|
627
|
+
onSseError?: (error: unknown) => void;
|
|
628
|
+
/**
|
|
629
|
+
* Callback invoked when an event is streamed from the server.
|
|
630
|
+
*
|
|
631
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
632
|
+
*
|
|
633
|
+
* @param event Event streamed from the server.
|
|
634
|
+
* @returns Nothing (void).
|
|
635
|
+
*/
|
|
636
|
+
onSseEvent?: (event: StreamEvent<TData>) => void;
|
|
637
|
+
serializedBody?: RequestInit['body'];
|
|
638
|
+
/**
|
|
639
|
+
* Default retry delay in milliseconds.
|
|
640
|
+
*
|
|
641
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
642
|
+
*
|
|
643
|
+
* @default 3000
|
|
644
|
+
*/
|
|
645
|
+
sseDefaultRetryDelay?: number;
|
|
646
|
+
/**
|
|
647
|
+
* Maximum number of retry attempts before giving up.
|
|
648
|
+
*/
|
|
649
|
+
sseMaxRetryAttempts?: number;
|
|
650
|
+
/**
|
|
651
|
+
* Maximum retry delay in milliseconds.
|
|
652
|
+
*
|
|
653
|
+
* Applies only when exponential backoff is used.
|
|
654
|
+
*
|
|
655
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
656
|
+
*
|
|
657
|
+
* @default 30000
|
|
658
|
+
*/
|
|
659
|
+
sseMaxRetryDelay?: number;
|
|
660
|
+
/**
|
|
661
|
+
* Optional sleep function for retry backoff.
|
|
662
|
+
*
|
|
663
|
+
* Defaults to using `setTimeout`.
|
|
664
|
+
*/
|
|
665
|
+
sseSleepFn?: (ms: number) => Promise<void>;
|
|
666
|
+
url: string;
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
declare type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {
|
|
670
|
+
stream: AsyncGenerator<TData extends Record<string, unknown> ? TData[keyof TData] : TData, TReturn, TNext>;
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
declare type SseFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<never, TResponseStyle, ThrowOnError>, 'method'>) => Promise<ServerSentEventsResult<TData, TError>>;
|
|
674
|
+
|
|
675
|
+
declare interface StreamEvent<TData = unknown> {
|
|
676
|
+
data: TData;
|
|
677
|
+
event?: string;
|
|
678
|
+
id?: string;
|
|
679
|
+
retry?: number;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
declare interface TDataShape {
|
|
683
|
+
body?: unknown;
|
|
684
|
+
headers?: unknown;
|
|
685
|
+
path?: unknown;
|
|
686
|
+
query?: unknown;
|
|
687
|
+
url: string;
|
|
688
|
+
}
|
|
689
|
+
|
|
211
690
|
/**
|
|
212
691
|
* Converts a string to camelCase by splitting on separators (-, _, ., spaces).
|
|
213
692
|
* Used for converting tool/scope IDs to localization key format.
|
|
@@ -245,6 +724,11 @@ export declare const UAI_ITEM_PICKER_MODAL: UmbModalToken<UaiItemPickerModalData
|
|
|
245
724
|
|
|
246
725
|
export declare const UAI_MONITORING_MENU_ALIAS = "Uai.Menu.Monitoring";
|
|
247
726
|
|
|
727
|
+
/**
|
|
728
|
+
* Extension type alias for property value preparers.
|
|
729
|
+
*/
|
|
730
|
+
export declare const UAI_PROPERTY_VALUE_PREPARER_EXTENSION_TYPE = "uaiPropertyValuePreparer";
|
|
731
|
+
|
|
248
732
|
/**
|
|
249
733
|
* Extension type alias for request context contributors.
|
|
250
734
|
*/
|
|
@@ -557,7 +1041,10 @@ export declare class UaiDocumentAdapter implements UaiEntityAdapterApi {
|
|
|
557
1041
|
getName(workspaceContext: unknown): string;
|
|
558
1042
|
/**
|
|
559
1043
|
* Get an observable for the document name for reactive updates.
|
|
560
|
-
* Uses the variants observable which properly tracks name changes
|
|
1044
|
+
* Uses the variants observable which properly tracks name changes, and
|
|
1045
|
+
* picks the variant whose culture matches what the editor currently has
|
|
1046
|
+
* focused so the AI context selector shows the right name on multi-
|
|
1047
|
+
* variant documents.
|
|
561
1048
|
*/
|
|
562
1049
|
getNameObservable(workspaceContext: unknown): Observable<string | undefined> | undefined;
|
|
563
1050
|
/**
|
|
@@ -573,7 +1060,12 @@ export declare class UaiDocumentAdapter implements UaiEntityAdapterApi {
|
|
|
573
1060
|
/**
|
|
574
1061
|
* Serialize document for LLM context.
|
|
575
1062
|
* Uses structure to get all properties, then merges with values.
|
|
576
|
-
*
|
|
1063
|
+
*
|
|
1064
|
+
* Multi-variant content: `getValues()` returns one entry per
|
|
1065
|
+
* (alias, culture, segment). We pick the entry that matches the variant
|
|
1066
|
+
* the editor currently has focused, falling back to the invariant entry
|
|
1067
|
+
* for properties that don't vary, so prompt template variables like
|
|
1068
|
+
* `{{header}}` resolve to the active culture's value.
|
|
577
1069
|
*/
|
|
578
1070
|
serializeForLlm(workspaceContext: unknown): Promise<UaiSerializedEntity>;
|
|
579
1071
|
/**
|
|
@@ -583,6 +1075,19 @@ export declare class UaiDocumentAdapter implements UaiEntityAdapterApi {
|
|
|
583
1075
|
* Only supports text-based properties (TextBox, TextArea) for now.
|
|
584
1076
|
*/
|
|
585
1077
|
applyValueChange(workspaceContext: unknown, change: UaiValueChange): Promise<UaiValueChangeResult>;
|
|
1078
|
+
/**
|
|
1079
|
+
* Persist staged changes to the document (equivalent to clicking Save).
|
|
1080
|
+
* Delegates to the workspace's `requestSubmit()`; any validation failure thrown by the
|
|
1081
|
+
* workspace is converted into a structured error so the LLM can read it.
|
|
1082
|
+
*/
|
|
1083
|
+
save(workspaceContext: unknown): Promise<UaiPersistResult>;
|
|
1084
|
+
/**
|
|
1085
|
+
* Save the document and publish it. Resolves the document publishing workspace context as a
|
|
1086
|
+
* sibling of the workspace context (both register against the same host) and delegates to
|
|
1087
|
+
* `saveAndPublish()`. On multi-variant documents this can surface the CMS's variant-picker
|
|
1088
|
+
* modal — same UX as clicking the Save and publish button.
|
|
1089
|
+
*/
|
|
1090
|
+
publish(workspaceContext: unknown): Promise<UaiPersistResult>;
|
|
586
1091
|
/**
|
|
587
1092
|
* Cleanup method required by UmbApi base type.
|
|
588
1093
|
* Currently no resources to clean up as the adapter is stateless.
|
|
@@ -737,6 +1242,19 @@ export declare interface UaiEntityAdapterApi extends UmbApi {
|
|
|
737
1242
|
* @returns Result indicating success or failure with error message
|
|
738
1243
|
*/
|
|
739
1244
|
applyValueChange?(workspaceContext: unknown, change: UaiValueChange): Promise<UaiValueChangeResult>;
|
|
1245
|
+
/**
|
|
1246
|
+
* Persist the workspace's staged changes (the equivalent of clicking the workspace's Save
|
|
1247
|
+
* button). Optional — entity types that don't own their own save (e.g. blocks, whose changes
|
|
1248
|
+
* save with the parent document) should omit this so the caller can return a clear "not
|
|
1249
|
+
* supported" error.
|
|
1250
|
+
*/
|
|
1251
|
+
save?(workspaceContext: unknown): Promise<UaiPersistResult>;
|
|
1252
|
+
/**
|
|
1253
|
+
* Persist the workspace's staged changes and publish them. Optional — only entity types with
|
|
1254
|
+
* a publish concept (documents) implement this; media and other always-live entities should
|
|
1255
|
+
* omit it.
|
|
1256
|
+
*/
|
|
1257
|
+
publish?(workspaceContext: unknown): Promise<UaiPersistResult>;
|
|
740
1258
|
}
|
|
741
1259
|
|
|
742
1260
|
/**
|
|
@@ -784,6 +1302,19 @@ export declare class UaiEntityAdapterContext extends UmbControllerBase {
|
|
|
784
1302
|
* @returns Result indicating success or failure with error message
|
|
785
1303
|
*/
|
|
786
1304
|
applyValueChange(change: UaiValueChange): Promise<UaiValueChangeResult>;
|
|
1305
|
+
/**
|
|
1306
|
+
* Persist the currently selected entity's staged changes (equivalent of the user clicking
|
|
1307
|
+
* Save). Returns a structured "not supported" error when the entity type doesn't own a save
|
|
1308
|
+
* action — most commonly when the user has a block workspace selected, since block changes
|
|
1309
|
+
* save with the parent document.
|
|
1310
|
+
*/
|
|
1311
|
+
saveSelectedEntity(): Promise<UaiPersistResult>;
|
|
1312
|
+
/**
|
|
1313
|
+
* Persist and publish the currently selected entity. Returns a structured "not supported"
|
|
1314
|
+
* error for entity types without a publish concept (media, blocks) — publishing only applies
|
|
1315
|
+
* to documents.
|
|
1316
|
+
*/
|
|
1317
|
+
publishSelectedEntity(): Promise<UaiPersistResult>;
|
|
787
1318
|
}
|
|
788
1319
|
|
|
789
1320
|
/**
|
|
@@ -971,6 +1502,18 @@ export declare class UaiPartialUpdateCommand<TReceiver> extends UaiCommandBase<T
|
|
|
971
1502
|
execute(receiver: TReceiver): void;
|
|
972
1503
|
}
|
|
973
1504
|
|
|
1505
|
+
/**
|
|
1506
|
+
* Result of a save (or save-and-publish) operation triggered by an AI tool. Adapters convert
|
|
1507
|
+
* exceptions thrown by the underlying workspace into a structured payload so the LLM can read the
|
|
1508
|
+
* error message rather than treat the call as silently successful.
|
|
1509
|
+
*/
|
|
1510
|
+
declare interface UaiPersistResult {
|
|
1511
|
+
/** Whether persistence completed successfully. */
|
|
1512
|
+
success: boolean;
|
|
1513
|
+
/** Human-readable error message if persistence failed. */
|
|
1514
|
+
error?: string;
|
|
1515
|
+
}
|
|
1516
|
+
|
|
974
1517
|
export declare type UaiPickableItemModel = {
|
|
975
1518
|
value: string;
|
|
976
1519
|
label: string;
|
|
@@ -1043,6 +1586,38 @@ export declare class UaiProfilePickerElement extends UaiProfilePickerElement_bas
|
|
|
1043
1586
|
|
|
1044
1587
|
declare const UaiProfilePickerElement_base: HTMLElementConstructor<UmbFormControlMixinElement<string | string[] | undefined>> & typeof UmbLitElement;
|
|
1045
1588
|
|
|
1589
|
+
/**
|
|
1590
|
+
* Property Value Preparer
|
|
1591
|
+
*
|
|
1592
|
+
* Editor-specific frontend adjustment applied to a property value on its way from an AI tool
|
|
1593
|
+
* (or any caller of `UaiEntityAdapterContext.applyValueChange`) into `workspaceContext.setPropertyValue`.
|
|
1594
|
+
*
|
|
1595
|
+
* Preparers exist because some property editor lit components have frontend-only quirks that the
|
|
1596
|
+
* backend dispatcher can't fix:
|
|
1597
|
+
* - block-shaped editors return pre-built object envelopes that must NOT be re-stringified;
|
|
1598
|
+
* - rich-text expects `{ markup, blocks }` and may receive a bare markup string;
|
|
1599
|
+
* - media picker 3's thumbnail subcomponent doesn't react to in-place `mediaKey` changes, so we
|
|
1600
|
+
* re-mint the entry's `key` to force lit to re-mount the subcomponent.
|
|
1601
|
+
*
|
|
1602
|
+
* Each preparer owns ALL the editor-specific behavior — including any JSON.parse on string input,
|
|
1603
|
+
* any shape adjustments, and any reactivity workarounds. Preparers are stateless and pure.
|
|
1604
|
+
*
|
|
1605
|
+
* Third parties register a preparer for their own editor's quirks via
|
|
1606
|
+
* `uaiPropertyValuePreparer` extension manifest. Editors with no registered preparer fall back to
|
|
1607
|
+
* a default that attempts JSON.parse on string inputs and returns the result.
|
|
1608
|
+
*/
|
|
1609
|
+
export declare interface UaiPropertyValuePreparerApi {
|
|
1610
|
+
/**
|
|
1611
|
+
* Adjust a value on its way to `setPropertyValue`.
|
|
1612
|
+
*
|
|
1613
|
+
* @param value The new value being applied (whatever shape the caller produced).
|
|
1614
|
+
* @param currentValue The value currently staged in the workspace, if any. Used by preparers
|
|
1615
|
+
* that need to compare incoming entries to existing ones (e.g. to detect content changes).
|
|
1616
|
+
* @returns The adjusted value to pass through to `setPropertyValue`.
|
|
1617
|
+
*/
|
|
1618
|
+
prepare(value: unknown, currentValue: unknown): unknown | Promise<unknown>;
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1046
1621
|
/**
|
|
1047
1622
|
* Mutable context bag passed to each contributor.
|
|
1048
1623
|
* Mirrors the backend AIRuntimeContext pattern -- contributors
|
|
@@ -1166,6 +1741,14 @@ export declare interface UaiSerializedEntity {
|
|
|
1166
1741
|
name: string;
|
|
1167
1742
|
/** Parent unique when creating a new entity. Undefined for existing entities. */
|
|
1168
1743
|
parentUnique?: string | null;
|
|
1744
|
+
/**
|
|
1745
|
+
* Active culture the editor was on when the entity was serialized.
|
|
1746
|
+
* Null/undefined for invariant entities. Used by the server to pick the
|
|
1747
|
+
* matching property entry from `data.properties` on multi-variant content.
|
|
1748
|
+
*/
|
|
1749
|
+
culture?: string | null;
|
|
1750
|
+
/** Active segment when the entity was serialized. */
|
|
1751
|
+
segment?: string | null;
|
|
1169
1752
|
/**
|
|
1170
1753
|
* Free-form entity data as JSON object.
|
|
1171
1754
|
* Adapters decide the structure based on entity type.
|
|
@@ -1175,7 +1758,7 @@ export declare interface UaiSerializedEntity {
|
|
|
1175
1758
|
* {
|
|
1176
1759
|
* contentType: "blogPost",
|
|
1177
1760
|
* properties: [
|
|
1178
|
-
* { alias: "title", label: "Title", editorAlias: "Umbraco.TextBox", value: "Hello" }
|
|
1761
|
+
* { alias: "title", label: "Title", editorAlias: "Umbraco.TextBox", value: "Hello", culture: "en-US", segment: null }
|
|
1179
1762
|
* ]
|
|
1180
1763
|
* }
|
|
1181
1764
|
* ```
|
|
@@ -1194,15 +1777,18 @@ export declare interface UaiSerializedEntity {
|
|
|
1194
1777
|
|
|
1195
1778
|
/**
|
|
1196
1779
|
* Serialized property for LLM context.
|
|
1197
|
-
*
|
|
1198
|
-
*
|
|
1199
|
-
*
|
|
1780
|
+
* Used as the element type of `UaiSerializedEntity.data.properties` for CMS entities.
|
|
1781
|
+
*
|
|
1782
|
+
* `culture` and `segment` describe which variant this property value belongs to:
|
|
1783
|
+
* `null` means invariant (no culture/segment dimension on the property).
|
|
1200
1784
|
*/
|
|
1201
1785
|
export declare interface UaiSerializedProperty {
|
|
1202
1786
|
alias: string;
|
|
1203
1787
|
label: string;
|
|
1204
1788
|
editorAlias: string;
|
|
1205
1789
|
value: unknown;
|
|
1790
|
+
culture: string | null;
|
|
1791
|
+
segment: string | null;
|
|
1206
1792
|
}
|
|
1207
1793
|
|
|
1208
1794
|
/**
|