@noodleseed/one 0.141.2 → 0.142.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/commands/assistant-appearance-ops.d.ts +3 -0
- package/dist/commands/assistant-appearance-ops.d.ts.map +1 -0
- package/dist/commands/assistant-appearance-ops.js +148 -0
- package/dist/commands/assistant-appearance-ops.js.map +1 -0
- package/dist/commands/assistant-ops.d.ts.map +1 -1
- package/dist/commands/assistant-ops.js +4 -1
- package/dist/commands/assistant-ops.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +25 -18
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance-store.d.ts +34 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance-store.js +12 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance.d.ts +18 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance.js +228 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +31 -0
- package/node_modules/@noodle-borg/{service/dist/routes → assistant-gateway/dist}/assistant-configuration.js +12 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-delegated-projection.d.ts +12 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.d.ts +38 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/embed-store.d.ts +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/embed-store.js +4 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-assistant-appearance-store.d.ts +8 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-assistant-appearance-store.js +26 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +7 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +7 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/public-configuration.d.ts +22 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/public-configuration.js +25 -0
- package/node_modules/@noodle-borg/assistant-gateway/package.json +3 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +6 -2
- package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +3 -3
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +2 -2
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +38 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +56 -4
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +25 -47
- package/node_modules/@noodle-borg/service/dist/credential-broker.js +1 -1
- package/node_modules/@noodle-borg/service/dist/invocation-context.js +1 -2
- package/node_modules/@noodle-borg/service/dist/local-options.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +1 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +104 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-dispatch.js +23 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +1 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +41 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +6 -11
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +2 -3
- package/node_modules/@noodle-borg/service/dist/service.js +3 -1
- package/node_modules/@noodleseed/assistant/README.md +54 -20
- package/node_modules/@noodleseed/assistant/package.json +1 -1
- package/package.json +1 -1
- /package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-delegated-projection.js +0 -0
- /package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-view-availability.js +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** Assistant gateway contracts and in-memory adapters safe for the published CLI runtime. */
|
|
2
2
|
export * from './artifact-projection.js';
|
|
3
|
+
export * from './assistant-appearance.js';
|
|
4
|
+
export * from './assistant-appearance-store.js';
|
|
5
|
+
export * from './assistant-configuration.js';
|
|
3
6
|
export * from './assistant-context.js';
|
|
4
7
|
export * from './assistant-customer-issuer.js';
|
|
5
8
|
export * from './assistant-customer-routing.js';
|
|
9
|
+
export * from './assistant-delegated-projection.js';
|
|
6
10
|
export * from './assistant-guide.js';
|
|
7
11
|
export * from './assistant-interaction-state.js';
|
|
8
12
|
export * from './assistant-interactive.js';
|
|
@@ -10,12 +14,15 @@ export * from './assistant-presentation.js';
|
|
|
10
14
|
export * from './assistant-sensitive-values.js';
|
|
11
15
|
export * from './assistant-store.js';
|
|
12
16
|
export * from './assistant-transcript.js';
|
|
17
|
+
export * from './assistant-view-availability.js';
|
|
13
18
|
export * from './elevation.js';
|
|
14
19
|
export * from './elevation-store.js';
|
|
15
20
|
export * from './embed-script.js';
|
|
16
21
|
export * from './embed-store.js';
|
|
22
|
+
export * from './in-memory-assistant-appearance-store.js';
|
|
17
23
|
export * from './in-memory-elevation-store.js';
|
|
18
24
|
export * from './in-memory-embed-store.js';
|
|
25
|
+
export * from './public-configuration.js';
|
|
19
26
|
export * from './public-session.js';
|
|
20
27
|
export * from './public-surface.js';
|
|
21
28
|
export * from './public-turn.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PublicEmbedRecord, type PublicEmbedStore } from './embed-store.js';
|
|
2
|
+
import type { PublicSurface } from './public-surface.js';
|
|
3
|
+
export interface PublicConfigurationRequest {
|
|
4
|
+
readonly embedId: unknown;
|
|
5
|
+
readonly origin: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface PublicConfigurationPorts {
|
|
8
|
+
readonly embeds: Pick<PublicEmbedStore, 'lookup'>;
|
|
9
|
+
resolveActiveSurface(embed: PublicEmbedRecord): Promise<PublicSurface | undefined>;
|
|
10
|
+
}
|
|
11
|
+
export type PublicConfigurationResult = {
|
|
12
|
+
readonly ok: true;
|
|
13
|
+
readonly embed: PublicEmbedRecord;
|
|
14
|
+
} | {
|
|
15
|
+
readonly ok: false;
|
|
16
|
+
readonly status: number;
|
|
17
|
+
readonly code: string;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
};
|
|
20
|
+
/** Authorize a browser-safe appearance read without opening or charging for a conversation. */
|
|
21
|
+
export declare function authorizePublicConfiguration(request: PublicConfigurationRequest, ports: PublicConfigurationPorts): Promise<PublicConfigurationResult>;
|
|
22
|
+
//# sourceMappingURL=public-configuration.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isPublicEmbedId } from './embed-store.js';
|
|
2
|
+
/** Authorize a browser-safe appearance read without opening or charging for a conversation. */
|
|
3
|
+
export async function authorizePublicConfiguration(request, ports) {
|
|
4
|
+
if (typeof request.embedId !== 'string' || !isPublicEmbedId(request.embedId)) {
|
|
5
|
+
return refuse(400, 'invalid_embed_id', 'embedId is required');
|
|
6
|
+
}
|
|
7
|
+
if (typeof request.origin !== 'string' || request.origin.length === 0) {
|
|
8
|
+
return refuse(403, 'origin_not_allowed', 'origin is not allowed');
|
|
9
|
+
}
|
|
10
|
+
const embed = await ports.embeds.lookup(request.embedId);
|
|
11
|
+
if (embed === undefined)
|
|
12
|
+
return refuse(403, 'embed_not_found', 'embed is not available');
|
|
13
|
+
const surface = await ports.resolveActiveSurface(embed);
|
|
14
|
+
if (surface === undefined) {
|
|
15
|
+
return refuse(409, 'surface_unavailable', 'assistant deployment is unavailable');
|
|
16
|
+
}
|
|
17
|
+
if (!surface.origins.includes(request.origin)) {
|
|
18
|
+
return refuse(403, 'origin_not_allowed', 'origin is not allowed');
|
|
19
|
+
}
|
|
20
|
+
return { ok: true, embed };
|
|
21
|
+
}
|
|
22
|
+
function refuse(status, code, message) {
|
|
23
|
+
return { ok: false, status, code, message };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=public-configuration.js.map
|
|
@@ -37,10 +37,12 @@
|
|
|
37
37
|
"@noodle-borg/admission-limits": "0.0.0",
|
|
38
38
|
"@noodle-borg/app-package": "0.0.0",
|
|
39
39
|
"@noodle-borg/compiler": "0.0.0",
|
|
40
|
+
"@noodle-borg/connector-defs": "0.0.0",
|
|
40
41
|
"@noodle-borg/module": "0.0.0",
|
|
41
42
|
"@noodle-borg/protocol": "0.0.0",
|
|
42
43
|
"@noodle-borg/runtime": "0.0.0",
|
|
43
|
-
"@noodleseed/assistant": "1.25.
|
|
44
|
+
"@noodleseed/assistant": "1.25.1",
|
|
45
|
+
"zod": "^4.4.3"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
48
|
"@types/node": "^24.13.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ConfigRef } from './config.js';
|
|
2
2
|
export type AssistantLayoutMode = 'floating' | 'inline' | 'drawer';
|
|
3
|
-
export type AssistantPosition = 'bottom-left' | 'bottom-right';
|
|
4
|
-
export type AssistantThemeMode = 'auto' | 'light' | 'dark';
|
|
3
|
+
export type AssistantPosition = 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
4
|
+
export type AssistantThemeMode = 'auto' | 'light' | 'dark' | 'invert';
|
|
5
5
|
export type AssistantPresentationTone = 'neutral' | 'success' | 'warning' | 'danger';
|
|
6
6
|
/**
|
|
7
7
|
* Safe, renderer-owned presentation primitives for the embedded assistant. Colors and brand identity
|
|
@@ -16,6 +16,7 @@ export interface AssistantPresentationOptions {
|
|
|
16
16
|
readonly radius?: number;
|
|
17
17
|
};
|
|
18
18
|
readonly launcher?: {
|
|
19
|
+
readonly style?: 'pill' | 'bubble';
|
|
19
20
|
readonly icon?: 'brand-mark' | 'chat' | 'none';
|
|
20
21
|
readonly size?: 'md' | 'lg';
|
|
21
22
|
readonly status?: 'none' | 'session';
|
|
@@ -42,6 +43,7 @@ export interface AssistantPresentationOptions {
|
|
|
42
43
|
export interface AssistantLabels {
|
|
43
44
|
readonly welcomeHeading?: string;
|
|
44
45
|
readonly welcomeMessage?: string;
|
|
46
|
+
readonly launcherPlaceholder?: string;
|
|
45
47
|
readonly composerPlaceholder?: string;
|
|
46
48
|
readonly thinking?: string;
|
|
47
49
|
readonly send?: string;
|
|
@@ -74,6 +76,7 @@ export interface AssistantLabels {
|
|
|
74
76
|
readonly signUpAction?: string;
|
|
75
77
|
}
|
|
76
78
|
export interface AssistantUiOptions {
|
|
79
|
+
readonly theme?: AssistantThemeMode;
|
|
77
80
|
readonly layout?: {
|
|
78
81
|
readonly mode?: AssistantLayoutMode;
|
|
79
82
|
readonly position?: AssistantPosition;
|
|
@@ -93,6 +96,7 @@ export interface AssistantUiOptions {
|
|
|
93
96
|
readonly showHeader?: boolean;
|
|
94
97
|
readonly showAvatars?: boolean;
|
|
95
98
|
readonly showTimestamps?: boolean;
|
|
99
|
+
readonly showPoweredBy?: boolean;
|
|
96
100
|
};
|
|
97
101
|
readonly labels?: AssistantLabels;
|
|
98
102
|
readonly presentation?: AssistantPresentationOptions;
|
|
@@ -1751,11 +1751,11 @@ export declare function Overlay({ open, defaultOpen, onOpenChange, mode, title,
|
|
|
1751
1751
|
'aria-describedby': string | undefined;
|
|
1752
1752
|
resource?: string | undefined | undefined;
|
|
1753
1753
|
id?: string | undefined | undefined;
|
|
1754
|
+
style?: import("react").CSSProperties | undefined;
|
|
1754
1755
|
dir?: string | undefined | undefined;
|
|
1755
1756
|
content?: string | undefined | undefined;
|
|
1756
1757
|
"aria-errormessage"?: string | undefined | undefined;
|
|
1757
1758
|
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
1758
|
-
style?: import("react").CSSProperties | undefined;
|
|
1759
1759
|
lang?: string | undefined | undefined;
|
|
1760
1760
|
defaultChecked?: boolean | undefined | undefined;
|
|
1761
1761
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
@@ -4314,6 +4314,7 @@ export declare function QuantityStepper({ value, min, max, step, onChange, decre
|
|
|
4314
4314
|
resource?: string | undefined | undefined;
|
|
4315
4315
|
id?: string | undefined | undefined;
|
|
4316
4316
|
title?: string | undefined | undefined;
|
|
4317
|
+
style?: import("react").CSSProperties | undefined;
|
|
4317
4318
|
dir?: string | undefined | undefined;
|
|
4318
4319
|
content?: string | undefined | undefined;
|
|
4319
4320
|
"aria-labelledby"?: string | undefined | undefined;
|
|
@@ -4321,7 +4322,6 @@ export declare function QuantityStepper({ value, min, max, step, onChange, decre
|
|
|
4321
4322
|
"aria-errormessage"?: string | undefined | undefined;
|
|
4322
4323
|
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
4323
4324
|
children?: ReactNode;
|
|
4324
|
-
style?: import("react").CSSProperties | undefined;
|
|
4325
4325
|
lang?: string | undefined | undefined;
|
|
4326
4326
|
defaultChecked?: boolean | undefined | undefined;
|
|
4327
4327
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
@@ -4601,6 +4601,7 @@ export declare function ChoiceGroup<Value extends string>({ values, selected, on
|
|
|
4601
4601
|
resource?: string | undefined | undefined;
|
|
4602
4602
|
id?: string | undefined | undefined;
|
|
4603
4603
|
title?: string | undefined | undefined;
|
|
4604
|
+
style?: import("react").CSSProperties | undefined;
|
|
4604
4605
|
dir?: string | undefined | undefined;
|
|
4605
4606
|
content?: string | undefined | undefined;
|
|
4606
4607
|
"aria-labelledby"?: string | undefined | undefined;
|
|
@@ -4608,7 +4609,6 @@ export declare function ChoiceGroup<Value extends string>({ values, selected, on
|
|
|
4608
4609
|
"aria-errormessage"?: string | undefined | undefined;
|
|
4609
4610
|
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
4610
4611
|
children?: ReactNode;
|
|
4611
|
-
style?: import("react").CSSProperties | undefined;
|
|
4612
4612
|
lang?: string | undefined | undefined;
|
|
4613
4613
|
defaultChecked?: boolean | undefined | undefined;
|
|
4614
4614
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
@@ -302,13 +302,13 @@ export declare function InlineList({ items, className, ...props }: InlineListPro
|
|
|
302
302
|
resource?: string | undefined | undefined;
|
|
303
303
|
id?: string | undefined | undefined;
|
|
304
304
|
title?: string | undefined | undefined;
|
|
305
|
+
style?: import("react").CSSProperties | undefined;
|
|
305
306
|
dir?: string | undefined | undefined;
|
|
306
307
|
content?: string | undefined | undefined;
|
|
307
308
|
"aria-labelledby"?: string | undefined | undefined;
|
|
308
309
|
"aria-describedby"?: string | undefined | undefined;
|
|
309
310
|
"aria-errormessage"?: string | undefined | undefined;
|
|
310
311
|
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
311
|
-
style?: import("react").CSSProperties | undefined;
|
|
312
312
|
lang?: string | undefined | undefined;
|
|
313
313
|
defaultChecked?: boolean | undefined | undefined;
|
|
314
314
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
@@ -588,13 +588,13 @@ export declare function InlineCarousel<Item>({ items, maxItems, children, classN
|
|
|
588
588
|
resource?: string | undefined | undefined;
|
|
589
589
|
id?: string | undefined | undefined;
|
|
590
590
|
title?: string | undefined | undefined;
|
|
591
|
+
style?: import("react").CSSProperties | undefined;
|
|
591
592
|
dir?: string | undefined | undefined;
|
|
592
593
|
content?: string | undefined | undefined;
|
|
593
594
|
"aria-labelledby"?: string | undefined | undefined;
|
|
594
595
|
"aria-describedby"?: string | undefined | undefined;
|
|
595
596
|
"aria-errormessage"?: string | undefined | undefined;
|
|
596
597
|
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
597
|
-
style?: import("react").CSSProperties | undefined;
|
|
598
598
|
lang?: string | undefined | undefined;
|
|
599
599
|
defaultChecked?: boolean | undefined | undefined;
|
|
600
600
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
@@ -59,6 +59,14 @@ const JSON_FLAG = flag({
|
|
|
59
59
|
type: 'boolean',
|
|
60
60
|
summary: 'Emit one JSON result envelope.',
|
|
61
61
|
});
|
|
62
|
+
const REVISION_FLAG = flag({
|
|
63
|
+
...FLAG_FIELDS,
|
|
64
|
+
name: 'revision',
|
|
65
|
+
type: 'integer',
|
|
66
|
+
value: '<n>',
|
|
67
|
+
summary: 'Appearance revision reviewed before this mutation.',
|
|
68
|
+
constraints: { minimum: 0 },
|
|
69
|
+
});
|
|
62
70
|
const TENANT_FLAGS = [
|
|
63
71
|
ORG_FLAG,
|
|
64
72
|
APP_FLAG,
|
|
@@ -163,6 +171,35 @@ const CLIENTS_SUBCOMMAND = subcommand({
|
|
|
163
171
|
}),
|
|
164
172
|
],
|
|
165
173
|
});
|
|
174
|
+
const APPEARANCE_SUBCOMMAND = subcommand({
|
|
175
|
+
...SUBCOMMAND_FIELDS,
|
|
176
|
+
name: 'appearance',
|
|
177
|
+
summary: 'Inspect or replace the environment-scoped embedded assistant appearance.',
|
|
178
|
+
subcommands: [
|
|
179
|
+
clientLeaf('show', 'Show the active revision and field provenance without printing values.', {
|
|
180
|
+
...LEAF_FIELDS,
|
|
181
|
+
flags: [],
|
|
182
|
+
}),
|
|
183
|
+
clientLeaf('apply', 'Replace the complete browser-safe appearance override from JSON.', {
|
|
184
|
+
...LEAF_FIELDS,
|
|
185
|
+
flags: [
|
|
186
|
+
flag({
|
|
187
|
+
...FLAG_FIELDS,
|
|
188
|
+
name: 'file',
|
|
189
|
+
type: 'string',
|
|
190
|
+
value: '<appearance.json>',
|
|
191
|
+
summary: 'Complete browser-safe appearance override.',
|
|
192
|
+
required: true,
|
|
193
|
+
}),
|
|
194
|
+
REVISION_FLAG,
|
|
195
|
+
],
|
|
196
|
+
}),
|
|
197
|
+
clientLeaf('reset', 'Remove the operator override and restore inherited defaults.', {
|
|
198
|
+
...LEAF_FIELDS,
|
|
199
|
+
flags: [REVISION_FLAG],
|
|
200
|
+
}),
|
|
201
|
+
],
|
|
202
|
+
});
|
|
166
203
|
export const ASSISTANT_COMMAND = {
|
|
167
204
|
name: 'assistant',
|
|
168
205
|
section: 'operate',
|
|
@@ -200,6 +237,7 @@ export const ASSISTANT_COMMAND = {
|
|
|
200
237
|
],
|
|
201
238
|
jsonOutput: { mode: 'single' },
|
|
202
239
|
}),
|
|
240
|
+
APPEARANCE_SUBCOMMAND,
|
|
203
241
|
CLIENTS_SUBCOMMAND,
|
|
204
242
|
EMBEDS_SUBCOMMAND,
|
|
205
243
|
BUDGET_SUBCOMMAND,
|
|
@@ -181,6 +181,12 @@ export declare const manifestV1Schema: z.ZodObject<{
|
|
|
181
181
|
}, z.core.$strict>>;
|
|
182
182
|
}, z.core.$strict>]>>;
|
|
183
183
|
assistant: z.ZodOptional<z.ZodObject<{
|
|
184
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
185
|
+
light: "light";
|
|
186
|
+
dark: "dark";
|
|
187
|
+
auto: "auto";
|
|
188
|
+
invert: "invert";
|
|
189
|
+
}>>;
|
|
184
190
|
layout: z.ZodOptional<z.ZodObject<{
|
|
185
191
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
186
192
|
floating: "floating";
|
|
@@ -189,6 +195,7 @@ export declare const manifestV1Schema: z.ZodObject<{
|
|
|
189
195
|
}>>;
|
|
190
196
|
position: z.ZodOptional<z.ZodEnum<{
|
|
191
197
|
"bottom-left": "bottom-left";
|
|
198
|
+
"bottom-center": "bottom-center";
|
|
192
199
|
"bottom-right": "bottom-right";
|
|
193
200
|
}>>;
|
|
194
201
|
panelWidth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -210,10 +217,12 @@ export declare const manifestV1Schema: z.ZodObject<{
|
|
|
210
217
|
showHeader: z.ZodOptional<z.ZodBoolean>;
|
|
211
218
|
showAvatars: z.ZodOptional<z.ZodBoolean>;
|
|
212
219
|
showTimestamps: z.ZodOptional<z.ZodBoolean>;
|
|
220
|
+
showPoweredBy: z.ZodOptional<z.ZodBoolean>;
|
|
213
221
|
}, z.core.$strict>>;
|
|
214
222
|
labels: z.ZodOptional<z.ZodObject<{
|
|
215
223
|
welcomeHeading: z.ZodOptional<z.ZodString>;
|
|
216
224
|
welcomeMessage: z.ZodOptional<z.ZodString>;
|
|
225
|
+
launcherPlaceholder: z.ZodOptional<z.ZodString>;
|
|
217
226
|
composerPlaceholder: z.ZodOptional<z.ZodString>;
|
|
218
227
|
thinking: z.ZodOptional<z.ZodString>;
|
|
219
228
|
send: z.ZodOptional<z.ZodString>;
|
|
@@ -261,6 +270,10 @@ export declare const manifestV1Schema: z.ZodObject<{
|
|
|
261
270
|
radius: z.ZodOptional<z.ZodNumber>;
|
|
262
271
|
}, z.core.$strict>>;
|
|
263
272
|
launcher: z.ZodOptional<z.ZodObject<{
|
|
273
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
274
|
+
pill: "pill";
|
|
275
|
+
bubble: "bubble";
|
|
276
|
+
}>>;
|
|
264
277
|
icon: z.ZodOptional<z.ZodEnum<{
|
|
265
278
|
none: "none";
|
|
266
279
|
"brand-mark": "brand-mark";
|
|
@@ -306,8 +319,8 @@ export declare const manifestV1Schema: z.ZodObject<{
|
|
|
306
319
|
"paper-plane": "paper-plane";
|
|
307
320
|
}>>;
|
|
308
321
|
shape: z.ZodOptional<z.ZodEnum<{
|
|
309
|
-
rounded: "rounded";
|
|
310
322
|
pill: "pill";
|
|
323
|
+
rounded: "rounded";
|
|
311
324
|
}>>;
|
|
312
325
|
}, z.core.$strict>>;
|
|
313
326
|
messages: z.ZodOptional<z.ZodObject<{
|
|
@@ -639,6 +652,12 @@ export declare const manifestV2Schema: z.ZodObject<{
|
|
|
639
652
|
confirmationFallback: z.ZodLiteral<"host">;
|
|
640
653
|
}, z.core.$strict>>;
|
|
641
654
|
assistant: z.ZodOptional<z.ZodObject<{
|
|
655
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
656
|
+
light: "light";
|
|
657
|
+
dark: "dark";
|
|
658
|
+
auto: "auto";
|
|
659
|
+
invert: "invert";
|
|
660
|
+
}>>;
|
|
642
661
|
layout: z.ZodOptional<z.ZodObject<{
|
|
643
662
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
644
663
|
floating: "floating";
|
|
@@ -647,6 +666,7 @@ export declare const manifestV2Schema: z.ZodObject<{
|
|
|
647
666
|
}>>;
|
|
648
667
|
position: z.ZodOptional<z.ZodEnum<{
|
|
649
668
|
"bottom-left": "bottom-left";
|
|
669
|
+
"bottom-center": "bottom-center";
|
|
650
670
|
"bottom-right": "bottom-right";
|
|
651
671
|
}>>;
|
|
652
672
|
panelWidth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -668,10 +688,12 @@ export declare const manifestV2Schema: z.ZodObject<{
|
|
|
668
688
|
showHeader: z.ZodOptional<z.ZodBoolean>;
|
|
669
689
|
showAvatars: z.ZodOptional<z.ZodBoolean>;
|
|
670
690
|
showTimestamps: z.ZodOptional<z.ZodBoolean>;
|
|
691
|
+
showPoweredBy: z.ZodOptional<z.ZodBoolean>;
|
|
671
692
|
}, z.core.$strict>>;
|
|
672
693
|
labels: z.ZodOptional<z.ZodObject<{
|
|
673
694
|
welcomeHeading: z.ZodOptional<z.ZodString>;
|
|
674
695
|
welcomeMessage: z.ZodOptional<z.ZodString>;
|
|
696
|
+
launcherPlaceholder: z.ZodOptional<z.ZodString>;
|
|
675
697
|
composerPlaceholder: z.ZodOptional<z.ZodString>;
|
|
676
698
|
thinking: z.ZodOptional<z.ZodString>;
|
|
677
699
|
send: z.ZodOptional<z.ZodString>;
|
|
@@ -719,6 +741,10 @@ export declare const manifestV2Schema: z.ZodObject<{
|
|
|
719
741
|
radius: z.ZodOptional<z.ZodNumber>;
|
|
720
742
|
}, z.core.$strict>>;
|
|
721
743
|
launcher: z.ZodOptional<z.ZodObject<{
|
|
744
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
745
|
+
pill: "pill";
|
|
746
|
+
bubble: "bubble";
|
|
747
|
+
}>>;
|
|
722
748
|
icon: z.ZodOptional<z.ZodEnum<{
|
|
723
749
|
none: "none";
|
|
724
750
|
"brand-mark": "brand-mark";
|
|
@@ -764,8 +790,8 @@ export declare const manifestV2Schema: z.ZodObject<{
|
|
|
764
790
|
"paper-plane": "paper-plane";
|
|
765
791
|
}>>;
|
|
766
792
|
shape: z.ZodOptional<z.ZodEnum<{
|
|
767
|
-
rounded: "rounded";
|
|
768
793
|
pill: "pill";
|
|
794
|
+
rounded: "rounded";
|
|
769
795
|
}>>;
|
|
770
796
|
}, z.core.$strict>>;
|
|
771
797
|
messages: z.ZodOptional<z.ZodObject<{
|
|
@@ -1307,6 +1333,12 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1307
1333
|
}, z.core.$strict>>;
|
|
1308
1334
|
}, z.core.$strict>]>>;
|
|
1309
1335
|
assistant: z.ZodOptional<z.ZodObject<{
|
|
1336
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
1337
|
+
light: "light";
|
|
1338
|
+
dark: "dark";
|
|
1339
|
+
auto: "auto";
|
|
1340
|
+
invert: "invert";
|
|
1341
|
+
}>>;
|
|
1310
1342
|
layout: z.ZodOptional<z.ZodObject<{
|
|
1311
1343
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
1312
1344
|
floating: "floating";
|
|
@@ -1315,6 +1347,7 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1315
1347
|
}>>;
|
|
1316
1348
|
position: z.ZodOptional<z.ZodEnum<{
|
|
1317
1349
|
"bottom-left": "bottom-left";
|
|
1350
|
+
"bottom-center": "bottom-center";
|
|
1318
1351
|
"bottom-right": "bottom-right";
|
|
1319
1352
|
}>>;
|
|
1320
1353
|
panelWidth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1336,10 +1369,12 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1336
1369
|
showHeader: z.ZodOptional<z.ZodBoolean>;
|
|
1337
1370
|
showAvatars: z.ZodOptional<z.ZodBoolean>;
|
|
1338
1371
|
showTimestamps: z.ZodOptional<z.ZodBoolean>;
|
|
1372
|
+
showPoweredBy: z.ZodOptional<z.ZodBoolean>;
|
|
1339
1373
|
}, z.core.$strict>>;
|
|
1340
1374
|
labels: z.ZodOptional<z.ZodObject<{
|
|
1341
1375
|
welcomeHeading: z.ZodOptional<z.ZodString>;
|
|
1342
1376
|
welcomeMessage: z.ZodOptional<z.ZodString>;
|
|
1377
|
+
launcherPlaceholder: z.ZodOptional<z.ZodString>;
|
|
1343
1378
|
composerPlaceholder: z.ZodOptional<z.ZodString>;
|
|
1344
1379
|
thinking: z.ZodOptional<z.ZodString>;
|
|
1345
1380
|
send: z.ZodOptional<z.ZodString>;
|
|
@@ -1387,6 +1422,10 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1387
1422
|
radius: z.ZodOptional<z.ZodNumber>;
|
|
1388
1423
|
}, z.core.$strict>>;
|
|
1389
1424
|
launcher: z.ZodOptional<z.ZodObject<{
|
|
1425
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
1426
|
+
pill: "pill";
|
|
1427
|
+
bubble: "bubble";
|
|
1428
|
+
}>>;
|
|
1390
1429
|
icon: z.ZodOptional<z.ZodEnum<{
|
|
1391
1430
|
none: "none";
|
|
1392
1431
|
"brand-mark": "brand-mark";
|
|
@@ -1432,8 +1471,8 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1432
1471
|
"paper-plane": "paper-plane";
|
|
1433
1472
|
}>>;
|
|
1434
1473
|
shape: z.ZodOptional<z.ZodEnum<{
|
|
1435
|
-
rounded: "rounded";
|
|
1436
1474
|
pill: "pill";
|
|
1475
|
+
rounded: "rounded";
|
|
1437
1476
|
}>>;
|
|
1438
1477
|
}, z.core.$strict>>;
|
|
1439
1478
|
messages: z.ZodOptional<z.ZodObject<{
|
|
@@ -1764,6 +1803,12 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1764
1803
|
confirmationFallback: z.ZodLiteral<"host">;
|
|
1765
1804
|
}, z.core.$strict>>;
|
|
1766
1805
|
assistant: z.ZodOptional<z.ZodObject<{
|
|
1806
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
1807
|
+
light: "light";
|
|
1808
|
+
dark: "dark";
|
|
1809
|
+
auto: "auto";
|
|
1810
|
+
invert: "invert";
|
|
1811
|
+
}>>;
|
|
1767
1812
|
layout: z.ZodOptional<z.ZodObject<{
|
|
1768
1813
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
1769
1814
|
floating: "floating";
|
|
@@ -1772,6 +1817,7 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1772
1817
|
}>>;
|
|
1773
1818
|
position: z.ZodOptional<z.ZodEnum<{
|
|
1774
1819
|
"bottom-left": "bottom-left";
|
|
1820
|
+
"bottom-center": "bottom-center";
|
|
1775
1821
|
"bottom-right": "bottom-right";
|
|
1776
1822
|
}>>;
|
|
1777
1823
|
panelWidth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1793,10 +1839,12 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1793
1839
|
showHeader: z.ZodOptional<z.ZodBoolean>;
|
|
1794
1840
|
showAvatars: z.ZodOptional<z.ZodBoolean>;
|
|
1795
1841
|
showTimestamps: z.ZodOptional<z.ZodBoolean>;
|
|
1842
|
+
showPoweredBy: z.ZodOptional<z.ZodBoolean>;
|
|
1796
1843
|
}, z.core.$strict>>;
|
|
1797
1844
|
labels: z.ZodOptional<z.ZodObject<{
|
|
1798
1845
|
welcomeHeading: z.ZodOptional<z.ZodString>;
|
|
1799
1846
|
welcomeMessage: z.ZodOptional<z.ZodString>;
|
|
1847
|
+
launcherPlaceholder: z.ZodOptional<z.ZodString>;
|
|
1800
1848
|
composerPlaceholder: z.ZodOptional<z.ZodString>;
|
|
1801
1849
|
thinking: z.ZodOptional<z.ZodString>;
|
|
1802
1850
|
send: z.ZodOptional<z.ZodString>;
|
|
@@ -1844,6 +1892,10 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1844
1892
|
radius: z.ZodOptional<z.ZodNumber>;
|
|
1845
1893
|
}, z.core.$strict>>;
|
|
1846
1894
|
launcher: z.ZodOptional<z.ZodObject<{
|
|
1895
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
1896
|
+
pill: "pill";
|
|
1897
|
+
bubble: "bubble";
|
|
1898
|
+
}>>;
|
|
1847
1899
|
icon: z.ZodOptional<z.ZodEnum<{
|
|
1848
1900
|
none: "none";
|
|
1849
1901
|
"brand-mark": "brand-mark";
|
|
@@ -1889,8 +1941,8 @@ export declare const manifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1889
1941
|
"paper-plane": "paper-plane";
|
|
1890
1942
|
}>>;
|
|
1891
1943
|
shape: z.ZodOptional<z.ZodEnum<{
|
|
1892
|
-
rounded: "rounded";
|
|
1893
1944
|
pill: "pill";
|
|
1945
|
+
rounded: "rounded";
|
|
1894
1946
|
}>>;
|
|
1895
1947
|
}, z.core.$strict>>;
|
|
1896
1948
|
messages: z.ZodOptional<z.ZodObject<{
|
|
@@ -210,75 +210,56 @@ const serverBrandingSchema = z
|
|
|
210
210
|
})
|
|
211
211
|
.strict();
|
|
212
212
|
const assistantPresentationToneSchema = z.enum(['neutral', 'success', 'warning', 'danger']);
|
|
213
|
+
const optionalStrictObject = (shape) => z.object(shape).strict().optional();
|
|
213
214
|
const assistantPresentationSchema = z
|
|
214
215
|
.object({
|
|
215
|
-
panel:
|
|
216
|
-
.object({
|
|
216
|
+
panel: optionalStrictObject({
|
|
217
217
|
surface: z.enum(['solid', 'glass']).optional(),
|
|
218
218
|
elevation: z.enum(['soft', 'dramatic']).optional(),
|
|
219
219
|
border: z.enum(['subtle', 'strong']).optional(),
|
|
220
220
|
radius: z.number().int().min(0).max(64).optional(),
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
.optional(),
|
|
224
|
-
launcher: z
|
|
225
|
-
.object({
|
|
221
|
+
}),
|
|
222
|
+
launcher: optionalStrictObject({
|
|
223
|
+
style: z.enum(['pill', 'bubble']).optional(),
|
|
226
224
|
icon: z.enum(['brand-mark', 'chat', 'none']).optional(),
|
|
227
225
|
size: z.enum(['md', 'lg']).optional(),
|
|
228
226
|
status: z.enum(['none', 'session']).optional(),
|
|
229
227
|
effect: z.enum(['none', 'pulse']).optional(),
|
|
230
|
-
})
|
|
231
|
-
|
|
232
|
-
.optional(),
|
|
233
|
-
header: z
|
|
234
|
-
.object({
|
|
228
|
+
}),
|
|
229
|
+
header: optionalStrictObject({
|
|
235
230
|
mark: z.enum(['none', 'brand-mark', 'status']).optional(),
|
|
236
|
-
badge:
|
|
237
|
-
.object({
|
|
231
|
+
badge: optionalStrictObject({
|
|
238
232
|
text: z.string().trim().min(1).max(80),
|
|
239
233
|
tone: assistantPresentationToneSchema.optional(),
|
|
240
234
|
indicator: z.boolean().optional(),
|
|
241
|
-
})
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
})
|
|
245
|
-
.strict()
|
|
246
|
-
.optional(),
|
|
247
|
-
composer: z
|
|
248
|
-
.object({
|
|
235
|
+
}),
|
|
236
|
+
}),
|
|
237
|
+
composer: optionalStrictObject({
|
|
249
238
|
leadingIcon: z.enum(['none', 'brand-mark']).optional(),
|
|
250
239
|
sendIcon: z.enum(['arrow-up', 'paper-plane']).optional(),
|
|
251
240
|
shape: z.enum(['rounded', 'pill']).optional(),
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
.optional(),
|
|
255
|
-
messages: z
|
|
256
|
-
.object({
|
|
241
|
+
}),
|
|
242
|
+
messages: optionalStrictObject({
|
|
257
243
|
userStyle: z.enum(['bubble', 'accent']).optional(),
|
|
258
244
|
assistantStyle: z.enum(['plain', 'bubble']).optional(),
|
|
259
|
-
})
|
|
260
|
-
.strict()
|
|
261
|
-
.optional(),
|
|
245
|
+
}),
|
|
262
246
|
})
|
|
263
247
|
.strict();
|
|
264
248
|
const assistantUiSchema = z
|
|
265
249
|
.object({
|
|
266
|
-
|
|
267
|
-
|
|
250
|
+
theme: z.enum(['auto', 'light', 'dark', 'invert']).optional(),
|
|
251
|
+
layout: optionalStrictObject({
|
|
268
252
|
mode: z.enum(['floating', 'inline', 'drawer']).optional(),
|
|
269
|
-
position: z.enum(['bottom-left', 'bottom-right']).optional(),
|
|
270
|
-
panelWidth: z.number().int().min(280).max(
|
|
253
|
+
position: z.enum(['bottom-left', 'bottom-center', 'bottom-right']).optional(),
|
|
254
|
+
panelWidth: z.number().int().min(280).max(1200).optional(),
|
|
271
255
|
panelMinHeight: z.number().int().min(240).max(1600).optional(),
|
|
272
256
|
panelMaxHeight: z.number().int().min(320).max(2400).optional(),
|
|
273
257
|
edgeOffset: z.number().int().min(0).max(96).optional(),
|
|
274
258
|
zIndex: z.number().int().min(0).max(2147483647).optional(),
|
|
275
259
|
density: z.enum(['compact', 'comfortable']).optional(),
|
|
276
260
|
mobileFullscreen: z.boolean().optional(),
|
|
277
|
-
})
|
|
278
|
-
|
|
279
|
-
.optional(),
|
|
280
|
-
behavior: z
|
|
281
|
-
.object({
|
|
261
|
+
}),
|
|
262
|
+
behavior: optionalStrictObject({
|
|
282
263
|
startOpen: z.boolean().optional(),
|
|
283
264
|
closeOnEscape: z.boolean().optional(),
|
|
284
265
|
closeOnOutsideClick: z.boolean().optional(),
|
|
@@ -286,13 +267,12 @@ const assistantUiSchema = z
|
|
|
286
267
|
showHeader: z.boolean().optional(),
|
|
287
268
|
showAvatars: z.boolean().optional(),
|
|
288
269
|
showTimestamps: z.boolean().optional(),
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
labels: z
|
|
293
|
-
.object({
|
|
270
|
+
showPoweredBy: z.boolean().optional(),
|
|
271
|
+
}),
|
|
272
|
+
labels: optionalStrictObject({
|
|
294
273
|
welcomeHeading: z.string().trim().min(1).max(160).optional(),
|
|
295
274
|
welcomeMessage: z.string().max(1000).optional(),
|
|
275
|
+
launcherPlaceholder: z.string().trim().min(1).max(160).optional(),
|
|
296
276
|
composerPlaceholder: z.string().trim().min(1).max(160).optional(),
|
|
297
277
|
thinking: z.string().trim().min(1).max(80).optional(),
|
|
298
278
|
send: z.string().trim().min(1).max(80).optional(),
|
|
@@ -322,9 +302,7 @@ const assistantUiSchema = z
|
|
|
322
302
|
signInBody: z.string().max(240).optional(),
|
|
323
303
|
signInAction: z.string().trim().min(1).max(80).optional(),
|
|
324
304
|
signUpAction: z.string().trim().min(1).max(80).optional(),
|
|
325
|
-
})
|
|
326
|
-
.strict()
|
|
327
|
-
.optional(),
|
|
305
|
+
}),
|
|
328
306
|
presentation: assistantPresentationSchema.optional(),
|
|
329
307
|
suggestedPrompts: z.array(z.string().trim().min(1).max(240)).max(8).optional(),
|
|
330
308
|
privacyUrl: httpsUrlSchema.optional(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { delegatedAuthOperationKeys } from '@noodle-borg/assistant-gateway/portable';
|
|
1
2
|
import { CredentialUnavailableError, credentialBindingDescriptorFromRequest, MapServiceBroker, } from '@noodle-borg/runtime';
|
|
2
|
-
import { delegatedAuthOperationKeys } from './assistant-delegated-projection.js';
|
|
3
3
|
import { fetchCustomClientCredentials, fetchOAuth2ClientCredentials, } from './client-credentials-fetch.js';
|
|
4
4
|
import { buildCredentialBindingIndex, } from './credential-binding-index.js';
|
|
5
5
|
import { exchangeFirebaseTokenForSessionCookie, fetchFirebaseRefreshToken, fetchMicrosoftRefreshToken, requireFirebaseCaller, requireFirebaseProvider, requireMicrosoftCaller, requireMicrosoftDelegatedBinding, } from './credential-broker-delegated-refresh.js';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { invocationContextSystemMessage, resolveInvocationContext, } from '@noodle-borg/assistant-gateway/portable';
|
|
1
|
+
import { invocationContextSystemMessage, resolveInvocationContext, toolTouchesDelegatedAuth, } from '@noodle-borg/assistant-gateway/portable';
|
|
2
2
|
import { executeAmbientContext, } from '@noodle-borg/runtime';
|
|
3
|
-
import { toolTouchesDelegatedAuth } from './assistant-delegated-projection.js';
|
|
4
3
|
/** Resolve one immutable snapshot, including a schema-validated read-only ambient provider. */
|
|
5
4
|
export async function resolveInvocationContextSnapshot(input) {
|
|
6
5
|
const callerPreference = {
|
|
@@ -7,6 +7,7 @@ import type { ServerRegistry } from './registry.js';
|
|
|
7
7
|
import type { ConfigStore, TenantBridgeAuthConfig } from './store.js';
|
|
8
8
|
type LocalRuntimeOptions = {
|
|
9
9
|
readonly assistantStore?: import('@noodle-borg/assistant-gateway/portable').AssistantStore;
|
|
10
|
+
readonly assistantAppearance?: import('@noodle-borg/assistant-gateway/portable').AssistantAppearanceSettingsStore;
|
|
10
11
|
readonly publicEmbeds?: import('@noodle-borg/assistant-gateway/portable').PublicEmbedStore;
|
|
11
12
|
readonly elevations?: import('@noodle-borg/assistant-gateway/portable').AssistantElevationStore;
|
|
12
13
|
readonly admissionCounters?: import('@noodle-borg/admission-limits/portable').DailyCounterStore;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { publicSurfaceDelegatedAuthErrors } from '@noodle-borg/assistant-gateway/portable';
|
|
1
2
|
import { compile, InMemoryCatalog, } from '@noodle-borg/compiler';
|
|
2
3
|
import { compileConnectors, delegatedTokenExchangeIdentityErrors, } from '@noodle-borg/connector-defs';
|
|
3
4
|
import { InMemoryConnectorRegistry, resolveManagedOrigins, } from '@noodle-borg/runtime';
|
|
4
5
|
import { AppPackageSnapshotError, createAppPackageSnapshot, } from './app-package-snapshot.js';
|
|
5
6
|
import { missingServerConfigErrors } from './assistant-bindings.js';
|
|
6
|
-
import { publicSurfaceDelegatedAuthErrors } from './assistant-delegated-projection.js';
|
|
7
7
|
import { ManagedConfigBroker } from './credential-broker.js';
|
|
8
8
|
import { deploymentCredentialBrokerOptions } from './credential-broker-options.js';
|
|
9
9
|
import { normalizePersistedManifestForCompile } from './manifest-normalize.js';
|