@helpai/elements 0.14.0 → 0.14.2

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 CHANGED
@@ -80,5 +80,5 @@
80
80
  ],
81
81
  "type": "module",
82
82
  "types": "./index.d.ts",
83
- "version": "0.14.0"
83
+ "version": "0.14.2"
84
84
  }
package/schema.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, E as Endpoints, L as Link, P as PAGE_AREA_SUGGESTIONS, g as PageContext, S as ServerConfig, b as SiteConfig, c as StartSessionResponse, U as UserContext, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial, h as assetSchema, i as blocksConfigSchema, j as connectionConfigPartialSchema, k as connectionConfigSchema, l as cssColorSchema, m as cssLengthSchema, n as endpointsSchema, o as linkSchema, p as localeSchema, q as pageContextSchema, s as serverConfigSchema, r as siteConfigSchema, t as startSessionResponseSchema, u as userContextSchema, v as uuid7Schema, w as widgetConfigPartialSchema, x as widgetConfigSchema, y as widgetSettingsPartialSchema, z as widgetSettingsSchema } from './deployment-Rtrqo8-b.js';
1
+ export { A as Asset, B as BlocksConfig, C as ConnectionConfig, a as ConnectionConfigPartial, E as Endpoints, L as Link, P as PAGE_AREA_SUGGESTIONS, g as PageContext, S as ServerConfig, b as SiteConfig, c as StartConversationResponse, U as UserContext, W as WidgetConfig, d as WidgetConfigPartial, e as WidgetSettings, f as WidgetSettingsPartial, h as assetSchema, i as blocksConfigSchema, j as connectionConfigPartialSchema, k as connectionConfigSchema, l as cssColorSchema, m as cssLengthSchema, n as endpointsSchema, o as linkSchema, p as localeSchema, q as pageContextSchema, s as serverConfigSchema, r as siteConfigSchema, t as startConversationResponseSchema, u as userContextSchema, v as uuid7Schema, w as widgetConfigPartialSchema, x as widgetConfigSchema, y as widgetSettingsPartialSchema, z as widgetSettingsSchema } from './deployment-CWyouRob.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  /**
@@ -56,9 +56,9 @@ declare const presentationSchema: z.ZodObject<{
56
56
  inset: z.ZodOptional<z.ZodString>;
57
57
  initialSize: z.ZodDefault<z.ZodEnum<{
58
58
  fullscreen: "fullscreen";
59
+ normal: "normal";
59
60
  expanded: "expanded";
60
61
  auto: "auto";
61
- normal: "normal";
62
62
  }>>;
63
63
  autoSizeBreakpoint: z.ZodDefault<z.ZodNumber>;
64
64
  }, z.core.$loose>>;
@@ -148,9 +148,9 @@ declare const launcherSizeSchema: z.ZodEnum<{
148
148
  }>;
149
149
  type LauncherSize = z.infer<typeof launcherSizeSchema>;
150
150
  declare const calloutShapeSchema: z.ZodEnum<{
151
- callout: "callout";
152
151
  pill: "pill";
153
152
  bubble: "bubble";
153
+ callout: "callout";
154
154
  }>;
155
155
  type CalloutShape = z.infer<typeof calloutShapeSchema>;
156
156
  declare const calloutPositionSchema: z.ZodEnum<{
@@ -162,9 +162,9 @@ type CalloutPosition = z.infer<typeof calloutPositionSchema>;
162
162
  declare const launcherCalloutSchema: z.ZodObject<{
163
163
  text: z.ZodDefault<z.ZodString>;
164
164
  shape: z.ZodDefault<z.ZodEnum<{
165
- callout: "callout";
166
165
  pill: "pill";
167
166
  bubble: "bubble";
167
+ callout: "callout";
168
168
  }>>;
169
169
  position: z.ZodDefault<z.ZodEnum<{
170
170
  auto: "auto";
@@ -195,9 +195,9 @@ declare const launcherOptionsSchema: z.ZodObject<{
195
195
  callout: z.ZodOptional<z.ZodObject<{
196
196
  text: z.ZodDefault<z.ZodString>;
197
197
  shape: z.ZodDefault<z.ZodEnum<{
198
- callout: "callout";
199
198
  pill: "pill";
200
199
  bubble: "bubble";
200
+ callout: "callout";
201
201
  }>>;
202
202
  position: z.ZodDefault<z.ZodEnum<{
203
203
  auto: "auto";
@@ -240,9 +240,9 @@ type LauncherOptions = z.infer<typeof launcherOptionsSchema>;
240
240
 
241
241
  declare const initialSizeSchema: z.ZodEnum<{
242
242
  fullscreen: "fullscreen";
243
+ normal: "normal";
243
244
  expanded: "expanded";
244
245
  auto: "auto";
245
- normal: "normal";
246
246
  }>;
247
247
  declare const resizeOptionsSchema: z.ZodObject<{
248
248
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -269,9 +269,9 @@ declare const sizeOptionsSchema: z.ZodObject<{
269
269
  inset: z.ZodOptional<z.ZodString>;
270
270
  initialSize: z.ZodDefault<z.ZodEnum<{
271
271
  fullscreen: "fullscreen";
272
+ normal: "normal";
272
273
  expanded: "expanded";
273
274
  auto: "auto";
274
- normal: "normal";
275
275
  }>>;
276
276
  autoSizeBreakpoint: z.ZodDefault<z.ZodNumber>;
277
277
  }, z.core.$loose>;
@@ -323,40 +323,40 @@ type FeatureFlags = z.infer<typeof featureFlagsSchema>;
323
323
  */
324
324
 
325
325
  declare const actionNameSchema: z.ZodEnum<{
326
- close: "close";
327
326
  expand: "expand";
328
327
  fullscreen: "fullscreen";
329
328
  popOut: "popOut";
330
- clear: "clear";
331
- theme: "theme";
329
+ close: "close";
332
330
  language: "language";
331
+ theme: "theme";
333
332
  history: "history";
333
+ clear: "clear";
334
334
  sound: "sound";
335
335
  }>;
336
336
  type ActionName = z.infer<typeof actionNameSchema>;
337
337
  declare const headerActionsSchema: z.ZodArray<z.ZodEnum<{
338
- close: "close";
339
338
  expand: "expand";
340
339
  fullscreen: "fullscreen";
341
340
  popOut: "popOut";
342
- clear: "clear";
343
- theme: "theme";
341
+ close: "close";
344
342
  language: "language";
343
+ theme: "theme";
345
344
  history: "history";
345
+ clear: "clear";
346
346
  sound: "sound";
347
347
  }>>;
348
348
  type HeaderActions = z.infer<typeof headerActionsSchema>;
349
349
  /** Section wrapper — `actions` list wrapped under `header` in the dashboard form. */
350
350
  declare const headerSchema: z.ZodObject<{
351
351
  actions: z.ZodOptional<z.ZodArray<z.ZodEnum<{
352
- close: "close";
353
352
  expand: "expand";
354
353
  fullscreen: "fullscreen";
355
354
  popOut: "popOut";
356
- clear: "clear";
357
- theme: "theme";
355
+ close: "close";
358
356
  language: "language";
357
+ theme: "theme";
359
358
  history: "history";
359
+ clear: "clear";
360
360
  sound: "sound";
361
361
  }>>>;
362
362
  }, z.core.$loose>;
@@ -372,33 +372,33 @@ type HeaderOptions = z.infer<typeof headerSchema>;
372
372
  */
373
373
 
374
374
  declare const feedbackEventSchema: z.ZodEnum<{
375
- voiceStart: "voiceStart";
376
- voiceStop: "voiceStop";
377
375
  error: "error";
378
376
  messageReceived: "messageReceived";
379
377
  messageSent: "messageSent";
378
+ voiceStart: "voiceStart";
379
+ voiceStop: "voiceStop";
380
380
  }>;
381
381
  type FeedbackEvent = z.infer<typeof feedbackEventSchema>;
382
382
  declare const soundOptionsSchema: z.ZodObject<{
383
383
  enabled: z.ZodDefault<z.ZodBoolean>;
384
384
  volume: z.ZodDefault<z.ZodNumber>;
385
385
  events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
386
- voiceStart: "voiceStart";
387
- voiceStop: "voiceStop";
388
386
  error: "error";
389
387
  messageReceived: "messageReceived";
390
388
  messageSent: "messageSent";
389
+ voiceStart: "voiceStart";
390
+ voiceStop: "voiceStop";
391
391
  }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
392
392
  }, z.core.$loose>;
393
393
  type SoundOptions = z.infer<typeof soundOptionsSchema>;
394
394
  declare const hapticsOptionsSchema: z.ZodObject<{
395
395
  enabled: z.ZodDefault<z.ZodBoolean>;
396
396
  events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
397
- voiceStart: "voiceStart";
398
- voiceStop: "voiceStop";
399
397
  error: "error";
400
398
  messageReceived: "messageReceived";
401
399
  messageSent: "messageSent";
400
+ voiceStart: "voiceStart";
401
+ voiceStop: "voiceStop";
402
402
  }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodArray<z.ZodNumber>]>>>;
403
403
  }, z.core.$loose>;
404
404
  type HapticsOptions = z.infer<typeof hapticsOptionsSchema>;
@@ -407,21 +407,21 @@ declare const feedbackSchema: z.ZodObject<{
407
407
  enabled: z.ZodDefault<z.ZodBoolean>;
408
408
  volume: z.ZodDefault<z.ZodNumber>;
409
409
  events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
410
- voiceStart: "voiceStart";
411
- voiceStop: "voiceStop";
412
410
  error: "error";
413
411
  messageReceived: "messageReceived";
414
412
  messageSent: "messageSent";
413
+ voiceStart: "voiceStart";
414
+ voiceStop: "voiceStop";
415
415
  }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
416
416
  }, z.core.$loose>>;
417
417
  haptics: z.ZodOptional<z.ZodObject<{
418
418
  enabled: z.ZodDefault<z.ZodBoolean>;
419
419
  events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
420
- voiceStart: "voiceStart";
421
- voiceStop: "voiceStop";
422
420
  error: "error";
423
421
  messageReceived: "messageReceived";
424
422
  messageSent: "messageSent";
423
+ voiceStart: "voiceStart";
424
+ voiceStop: "voiceStop";
425
425
  }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodArray<z.ZodNumber>]>>>;
426
426
  }, z.core.$loose>>;
427
427
  }, z.core.$loose>;
@@ -504,7 +504,7 @@ type ComposerOptions = z.infer<typeof composerOptionsSchema>;
504
504
  /**
505
505
  * Welcome section — how the agent's greeting messages render when
506
506
  * the chat opens. Content (the actual message text + suggestions)
507
- * comes from the server's start-session response; this schema only
507
+ * comes from the server's start-conversation response; this schema only
508
508
  * governs the visual presentation (animation style + speed).
509
509
  */
510
510
 
@@ -550,8 +550,8 @@ type FooterOptions = z.infer<typeof footerSchema>;
550
550
  /**
551
551
  * Forms section — an **event-driven forms engine**. A deployment declares an
552
552
  * ordered array of form definitions, each bound to trigger event(s), shown as a
553
- * blocking composer gate or inline in the transcript, deduped by frequency, and
554
- * recorded via one shared submit endpoint (`endpoints.forms`).
553
+ * a prompt that replaces the composer (gating chat until submit/skip), deduped
554
+ * by frequency, and recorded via one shared submit endpoint (`endpoints.submitForm`).
555
555
  *
556
556
  * Generic across verticals (healthcare, insurance, dealerships, clinics) — the
557
557
  * widget has NO industry logic; a clinic triage intake, an insurance claim form,
@@ -562,16 +562,16 @@ type FooterOptions = z.infer<typeof footerSchema>;
562
562
 
563
563
  declare const fieldTypeSchema: z.ZodEnum<{
564
564
  number: "number";
565
- select: "select";
566
- textarea: "textarea";
567
- time: "time";
568
565
  text: "text";
569
- checkbox: "checkbox";
570
- radio: "radio";
571
566
  url: "url";
572
567
  email: "email";
573
568
  tel: "tel";
574
569
  date: "date";
570
+ time: "time";
571
+ textarea: "textarea";
572
+ select: "select";
573
+ radio: "radio";
574
+ checkbox: "checkbox";
575
575
  multiselect: "multiselect";
576
576
  }>;
577
577
  type FieldType = z.infer<typeof fieldTypeSchema>;
@@ -596,16 +596,16 @@ declare const formFieldSchema: z.ZodObject<{
596
596
  label: z.ZodString;
597
597
  type: z.ZodEnum<{
598
598
  number: "number";
599
- select: "select";
600
- textarea: "textarea";
601
- time: "time";
602
599
  text: "text";
603
- checkbox: "checkbox";
604
- radio: "radio";
605
600
  url: "url";
606
601
  email: "email";
607
602
  tel: "tel";
608
603
  date: "date";
604
+ time: "time";
605
+ textarea: "textarea";
606
+ select: "select";
607
+ radio: "radio";
608
+ checkbox: "checkbox";
609
609
  multiselect: "multiselect";
610
610
  }>;
611
611
  placeholder: z.ZodOptional<z.ZodString>;
@@ -656,16 +656,16 @@ declare const formDefSchema: z.ZodObject<{
656
656
  label: z.ZodString;
657
657
  type: z.ZodEnum<{
658
658
  number: "number";
659
- select: "select";
660
- textarea: "textarea";
661
- time: "time";
662
659
  text: "text";
663
- checkbox: "checkbox";
664
- radio: "radio";
665
660
  url: "url";
666
661
  email: "email";
667
662
  tel: "tel";
668
663
  date: "date";
664
+ time: "time";
665
+ textarea: "textarea";
666
+ select: "select";
667
+ radio: "radio";
668
+ checkbox: "checkbox";
669
669
  multiselect: "multiselect";
670
670
  }>;
671
671
  placeholder: z.ZodOptional<z.ZodString>;
@@ -692,10 +692,9 @@ declare const formDefSchema: z.ZodObject<{
692
692
  description: z.ZodOptional<z.ZodString>;
693
693
  submitLabel: z.ZodOptional<z.ZodString>;
694
694
  skippable: z.ZodDefault<z.ZodBoolean>;
695
- blocking: z.ZodDefault<z.ZodBoolean>;
696
695
  frequency: z.ZodDefault<z.ZodEnum<{
697
696
  once: "once";
698
- session: "session";
697
+ conversation: "conversation";
699
698
  always: "always";
700
699
  }>>;
701
700
  mirrorToContext: z.ZodDefault<z.ZodBoolean>;
@@ -715,16 +714,16 @@ declare const formsSchema: z.ZodArray<z.ZodObject<{
715
714
  label: z.ZodString;
716
715
  type: z.ZodEnum<{
717
716
  number: "number";
718
- select: "select";
719
- textarea: "textarea";
720
- time: "time";
721
717
  text: "text";
722
- checkbox: "checkbox";
723
- radio: "radio";
724
718
  url: "url";
725
719
  email: "email";
726
720
  tel: "tel";
727
721
  date: "date";
722
+ time: "time";
723
+ textarea: "textarea";
724
+ select: "select";
725
+ radio: "radio";
726
+ checkbox: "checkbox";
728
727
  multiselect: "multiselect";
729
728
  }>;
730
729
  placeholder: z.ZodOptional<z.ZodString>;
@@ -751,10 +750,9 @@ declare const formsSchema: z.ZodArray<z.ZodObject<{
751
750
  description: z.ZodOptional<z.ZodString>;
752
751
  submitLabel: z.ZodOptional<z.ZodString>;
753
752
  skippable: z.ZodDefault<z.ZodBoolean>;
754
- blocking: z.ZodDefault<z.ZodBoolean>;
755
753
  frequency: z.ZodDefault<z.ZodEnum<{
756
754
  once: "once";
757
- session: "session";
755
+ conversation: "conversation";
758
756
  always: "always";
759
757
  }>>;
760
758
  mirrorToContext: z.ZodDefault<z.ZodBoolean>;
@@ -791,24 +789,24 @@ type I18nOptions = z.infer<typeof i18nSchema>;
791
789
  * One tab → no tab bar (just that content). Zero → an empty state. Only
792
790
  * meaningful in `floating` / `drawer` / `modal` modes.
793
791
  *
794
- * The list arrives via the start-session (`config.modules`); each non-chat
792
+ * The list arrives via the start-conversation (`config.modules`); each non-chat
795
793
  * tab lazy-fetches its content from `GET /ai/agent/content` scoped by its
796
794
  * `category`. See `docs/api/messenger-modules.md` + `docs/api/content.md`.
797
795
  */
798
796
 
799
797
  declare const moduleLayoutSchema: z.ZodEnum<{
800
- home: "home";
801
798
  chat: "chat";
802
799
  help: "help";
800
+ home: "home";
803
801
  news: "news";
804
802
  }>;
805
803
  type ModuleLayout = z.infer<typeof moduleLayoutSchema>;
806
804
  declare const moduleSchema: z.ZodObject<{
807
805
  label: z.ZodString;
808
806
  layout: z.ZodEnum<{
809
- home: "home";
810
807
  chat: "chat";
811
808
  help: "help";
809
+ home: "home";
812
810
  news: "news";
813
811
  }>;
814
812
  contentTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -834,9 +832,9 @@ type ModuleOptions = z.infer<typeof moduleSchema>;
834
832
  declare const modulesSchema: z.ZodArray<z.ZodObject<{
835
833
  label: z.ZodString;
836
834
  layout: z.ZodEnum<{
837
- home: "home";
838
835
  chat: "chat";
839
836
  help: "help";
837
+ home: "home";
840
838
  news: "news";
841
839
  }>;
842
840
  contentTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
package/schema.json CHANGED
@@ -167,7 +167,7 @@
167
167
  },
168
168
  "submitForm": {
169
169
  "default": "/ai/agent/submit-form",
170
- "description": "Form submission endpoint. The widget POSTs each completed form's values here (fire-and-forget), keyed by the same visitorId + sessionId as the conversation; the payload carries `formId` + `trigger` so the backend can route. Optional — a 404 is ignored.",
170
+ "description": "Form submission endpoint. The widget POSTs each completed form's values here (fire-and-forget), keyed by the same visitorId + conversationId as the conversation; the payload carries `formId` + `trigger` so the backend can route. Optional — a 404 is ignored.",
171
171
  "type": "string",
172
172
  "minLength": 1,
173
173
  "maxLength": 2048
@@ -469,7 +469,7 @@
469
469
  "type": "boolean"
470
470
  },
471
471
  "popOutUrl": {
472
- "description": "URL the `popOut` action opens in a new tab (carries `?chat=<id>&widgetId=<id>` query params). Falls back to the brand's build-time default. Set this to point at your own dedicated chat page (e.g. `https://app.acme.com/chat`). Server-pushable on `/start-session.widget.behavior.popOutUrl`.",
472
+ "description": "URL the `popOut` action opens in a new tab (carries `?chat=<id>&widgetId=<id>` query params). Falls back to the brand's build-time default. Set this to point at your own dedicated chat page (e.g. `https://app.acme.com/chat`). Server-pushable on `/start-conversation.widget.behavior.popOutUrl`.",
473
473
  "type": "string",
474
474
  "minLength": 1,
475
475
  "maxLength": 2048
@@ -1586,21 +1586,16 @@
1586
1586
  },
1587
1587
  "skippable": {
1588
1588
  "default": false,
1589
- "description": "Show a Skip control.",
1590
- "type": "boolean"
1591
- },
1592
- "blocking": {
1593
- "default": false,
1594
- "description": "Gate the composer (honored only for `pre-chat` / `after-messages`); otherwise renders inline.",
1589
+ "description": "Show a Skip control so the visitor can dismiss the form.",
1595
1590
  "type": "boolean"
1596
1591
  },
1597
1592
  "frequency": {
1598
1593
  "default": "once",
1599
- "description": "`once` (persisted per-device), `session`, or `always`.",
1594
+ "description": "`once` (per device, persisted), `conversation` (re-eligible each new conversation), or `always`.",
1600
1595
  "type": "string",
1601
1596
  "enum": [
1602
1597
  "once",
1603
- "session",
1598
+ "conversation",
1604
1599
  "always"
1605
1600
  ]
1606
1601
  },
@@ -1615,19 +1610,17 @@
1615
1610
  "on",
1616
1611
  "fields",
1617
1612
  "skippable",
1618
- "blocking",
1619
1613
  "frequency",
1620
1614
  "mirrorToContext"
1621
1615
  ],
1622
1616
  "additionalProperties": {}
1623
1617
  },
1624
- "description": "Event-driven forms — an ordered list (order = priority). Each binds to trigger event(s), shows blocking or inline, dedupes by frequency, and records via `endpoints.forms`. Generic across verticals.",
1618
+ "description": "Event-driven forms — an ordered list (order = priority). Each binds to trigger event(s), gates the chat until submit/skip, dedupes by frequency, and records via `endpoints.submitForm`. Generic across verticals.",
1625
1619
  "examples": [
1626
1620
  [
1627
1621
  {
1628
1622
  "id": "intake",
1629
1623
  "on": "pre-chat",
1630
- "blocking": true,
1631
1624
  "fields": [
1632
1625
  {
1633
1626
  "name": "email",
@@ -1641,7 +1634,6 @@
1641
1634
  {
1642
1635
  "id": "lead",
1643
1636
  "on": "pre-chat",
1644
- "blocking": true,
1645
1637
  "title": "Before we start",
1646
1638
  "fields": [
1647
1639
  {
@@ -1883,10 +1875,10 @@
1883
1875
  ]
1884
1876
  },
1885
1877
  "site": {
1886
- "description": "Site config — applies in `mode: \"page\"`. Comes from the start-session response, not user-edited."
1878
+ "description": "Site config — applies in `mode: \"page\"`. Comes from the start-conversation response, not user-edited."
1887
1879
  },
1888
1880
  "blocks": {
1889
- "description": "Blocks (nav + link cards) — applies in `mode: \"page\"`. Comes from the start-session response."
1881
+ "description": "Blocks (nav + link cards) — applies in `mode: \"page\"`. Comes from the start-conversation response."
1890
1882
  }
1891
1883
  },
1892
1884
  "required": [
@@ -1917,7 +1909,7 @@
1917
1909
  }
1918
1910
  ]
1919
1911
  },
1920
- "StartSessionResponse": {
1912
+ "StartConversationResponse": {
1921
1913
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1922
1914
  "type": "object",
1923
1915
  "properties": {
@@ -2230,7 +2222,7 @@
2230
2222
  "type": "boolean"
2231
2223
  },
2232
2224
  "popOutUrl": {
2233
- "description": "URL the `popOut` action opens in a new tab (carries `?chat=<id>&widgetId=<id>` query params). Falls back to the brand's build-time default. Set this to point at your own dedicated chat page (e.g. `https://app.acme.com/chat`). Server-pushable on `/start-session.widget.behavior.popOutUrl`.",
2225
+ "description": "URL the `popOut` action opens in a new tab (carries `?chat=<id>&widgetId=<id>` query params). Falls back to the brand's build-time default. Set this to point at your own dedicated chat page (e.g. `https://app.acme.com/chat`). Server-pushable on `/start-conversation.widget.behavior.popOutUrl`.",
2234
2226
  "type": "string",
2235
2227
  "minLength": 1,
2236
2228
  "maxLength": 2048
@@ -3347,21 +3339,16 @@
3347
3339
  },
3348
3340
  "skippable": {
3349
3341
  "default": false,
3350
- "description": "Show a Skip control.",
3351
- "type": "boolean"
3352
- },
3353
- "blocking": {
3354
- "default": false,
3355
- "description": "Gate the composer (honored only for `pre-chat` / `after-messages`); otherwise renders inline.",
3342
+ "description": "Show a Skip control so the visitor can dismiss the form.",
3356
3343
  "type": "boolean"
3357
3344
  },
3358
3345
  "frequency": {
3359
3346
  "default": "once",
3360
- "description": "`once` (persisted per-device), `session`, or `always`.",
3347
+ "description": "`once` (per device, persisted), `conversation` (re-eligible each new conversation), or `always`.",
3361
3348
  "type": "string",
3362
3349
  "enum": [
3363
3350
  "once",
3364
- "session",
3351
+ "conversation",
3365
3352
  "always"
3366
3353
  ]
3367
3354
  },
@@ -3376,19 +3363,17 @@
3376
3363
  "on",
3377
3364
  "fields",
3378
3365
  "skippable",
3379
- "blocking",
3380
3366
  "frequency",
3381
3367
  "mirrorToContext"
3382
3368
  ],
3383
3369
  "additionalProperties": {}
3384
3370
  },
3385
- "description": "Event-driven forms — an ordered list (order = priority). Each binds to trigger event(s), shows blocking or inline, dedupes by frequency, and records via `endpoints.forms`. Generic across verticals.",
3371
+ "description": "Event-driven forms — an ordered list (order = priority). Each binds to trigger event(s), gates the chat until submit/skip, dedupes by frequency, and records via `endpoints.submitForm`. Generic across verticals.",
3386
3372
  "examples": [
3387
3373
  [
3388
3374
  {
3389
3375
  "id": "intake",
3390
3376
  "on": "pre-chat",
3391
- "blocking": true,
3392
3377
  "fields": [
3393
3378
  {
3394
3379
  "name": "email",
@@ -3402,7 +3387,6 @@
3402
3387
  {
3403
3388
  "id": "lead",
3404
3389
  "on": "pre-chat",
3405
- "blocking": true,
3406
3390
  "title": "Before we start",
3407
3391
  "fields": [
3408
3392
  {
@@ -3856,7 +3840,7 @@
3856
3840
  "visitorId": {
3857
3841
  "type": "string"
3858
3842
  },
3859
- "sessionId": {
3843
+ "conversationId": {
3860
3844
  "type": "string"
3861
3845
  },
3862
3846
  "canContinue": {
@@ -3884,7 +3868,7 @@
3884
3868
  "invalid"
3885
3869
  ]
3886
3870
  },
3887
- "sessionId": {
3871
+ "conversationId": {
3888
3872
  "type": "string",
3889
3873
  "enum": [
3890
3874
  "conflict",
@@ -3900,7 +3884,7 @@
3900
3884
  "deployment",
3901
3885
  "agent",
3902
3886
  "visitorId",
3903
- "sessionId",
3887
+ "conversationId",
3904
3888
  "canContinue",
3905
3889
  "messages"
3906
3890
  ],