@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.
Files changed (52) hide show
  1. package/dist/commands/assistant-appearance-ops.d.ts +3 -0
  2. package/dist/commands/assistant-appearance-ops.d.ts.map +1 -0
  3. package/dist/commands/assistant-appearance-ops.js +148 -0
  4. package/dist/commands/assistant-appearance-ops.js.map +1 -0
  5. package/dist/commands/assistant-ops.d.ts.map +1 -1
  6. package/dist/commands/assistant-ops.js +4 -1
  7. package/dist/commands/assistant-ops.js.map +1 -1
  8. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +3 -3
  9. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +25 -18
  10. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance-store.d.ts +34 -0
  11. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance-store.js +12 -0
  12. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance.d.ts +18 -0
  13. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-appearance.js +228 -0
  14. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +31 -0
  15. package/node_modules/@noodle-borg/{service/dist/routes → assistant-gateway/dist}/assistant-configuration.js +12 -1
  16. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-delegated-projection.d.ts +12 -0
  17. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  18. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +1 -0
  19. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.d.ts +38 -0
  20. package/node_modules/@noodle-borg/assistant-gateway/dist/embed-store.d.ts +3 -0
  21. package/node_modules/@noodle-borg/assistant-gateway/dist/embed-store.js +4 -0
  22. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-assistant-appearance-store.d.ts +8 -0
  23. package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-assistant-appearance-store.js +26 -0
  24. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +7 -0
  25. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +7 -0
  26. package/node_modules/@noodle-borg/assistant-gateway/dist/public-configuration.d.ts +22 -0
  27. package/node_modules/@noodle-borg/assistant-gateway/dist/public-configuration.js +25 -0
  28. package/node_modules/@noodle-borg/assistant-gateway/package.json +3 -1
  29. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +6 -2
  30. package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +3 -3
  31. package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +2 -2
  32. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +38 -0
  33. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +56 -4
  34. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +25 -47
  35. package/node_modules/@noodle-borg/service/dist/credential-broker.js +1 -1
  36. package/node_modules/@noodle-borg/service/dist/invocation-context.js +1 -2
  37. package/node_modules/@noodle-borg/service/dist/local-options.d.ts +1 -0
  38. package/node_modules/@noodle-borg/service/dist/registry-compile.js +1 -1
  39. package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +1 -3
  40. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +104 -0
  41. package/node_modules/@noodle-borg/service/dist/routes/assistant-dispatch.js +23 -0
  42. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -2
  43. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +1 -2
  44. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +41 -0
  45. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +6 -11
  46. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +2 -3
  47. package/node_modules/@noodle-borg/service/dist/service.js +3 -1
  48. package/node_modules/@noodleseed/assistant/README.md +54 -20
  49. package/node_modules/@noodleseed/assistant/package.json +1 -1
  50. package/package.json +1 -1
  51. /package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-delegated-projection.js +0 -0
  52. /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.0"
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: z
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
- .strict()
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
- .strict()
232
- .optional(),
233
- header: z
234
- .object({
228
+ }),
229
+ header: optionalStrictObject({
235
230
  mark: z.enum(['none', 'brand-mark', 'status']).optional(),
236
- badge: z
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
- .strict()
243
- .optional(),
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
- .strict()
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
- layout: z
267
- .object({
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(960).optional(),
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
- .strict()
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
- .strict()
291
- .optional(),
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';