@appilots/sdk 0.11.0 → 0.11.3

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.
@@ -1,2 +1,2 @@
1
- export { J as SuggestedPrompt, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from '../index-BPZ0j71S.mjs';
1
+ export { J as SuggestedPrompt, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from '../index-BR-33WMN.mjs';
2
2
  import 'react';
@@ -1,2 +1,2 @@
1
- export { J as SuggestedPrompt, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from '../index-BPZ0j71S.js';
1
+ export { J as SuggestedPrompt, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from '../index-BR-33WMN.js';
2
2
  import 'react';
@@ -1,43 +1,43 @@
1
1
  'use strict';
2
2
 
3
- var chunk2YPEQTL2_js = require('../chunk-2YPEQTL2.js');
4
- require('../chunk-55Y2AQE7.js');
3
+ var chunkUFMTRGML_js = require('../chunk-UFMTRGML.js');
4
+ require('../chunk-SUMIABJK.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "useAppilots", {
9
9
  enumerable: true,
10
- get: function () { return chunk2YPEQTL2_js.useAppilots; }
10
+ get: function () { return chunkUFMTRGML_js.useAppilots; }
11
11
  });
12
12
  Object.defineProperty(exports, "useAppilotsActions", {
13
13
  enumerable: true,
14
- get: function () { return chunk2YPEQTL2_js.useAppilotsActions; }
14
+ get: function () { return chunkUFMTRGML_js.useAppilotsActions; }
15
15
  });
16
16
  Object.defineProperty(exports, "useAppilotsChat", {
17
17
  enumerable: true,
18
- get: function () { return chunk2YPEQTL2_js.useAppilotsChat; }
18
+ get: function () { return chunkUFMTRGML_js.useAppilotsChat; }
19
19
  });
20
20
  Object.defineProperty(exports, "useAppilotsField", {
21
21
  enumerable: true,
22
- get: function () { return chunk2YPEQTL2_js.useAppilotsField; }
22
+ get: function () { return chunkUFMTRGML_js.useAppilotsField; }
23
23
  });
24
24
  Object.defineProperty(exports, "useAppilotsNavigation", {
25
25
  enumerable: true,
26
- get: function () { return chunk2YPEQTL2_js.useAppilotsNavigation; }
26
+ get: function () { return chunkUFMTRGML_js.useAppilotsNavigation; }
27
27
  });
28
28
  Object.defineProperty(exports, "useAppilotsSlider", {
29
29
  enumerable: true,
30
- get: function () { return chunk2YPEQTL2_js.useAppilotsSlider; }
30
+ get: function () { return chunkUFMTRGML_js.useAppilotsSlider; }
31
31
  });
32
32
  Object.defineProperty(exports, "useAppilotsTarget", {
33
33
  enumerable: true,
34
- get: function () { return chunk2YPEQTL2_js.useAppilotsTarget; }
34
+ get: function () { return chunkUFMTRGML_js.useAppilotsTarget; }
35
35
  });
36
36
  Object.defineProperty(exports, "useAppilotsToggle", {
37
37
  enumerable: true,
38
- get: function () { return chunk2YPEQTL2_js.useAppilotsToggle; }
38
+ get: function () { return chunkUFMTRGML_js.useAppilotsToggle; }
39
39
  });
40
40
  Object.defineProperty(exports, "useSuggestedPrompts", {
41
41
  enumerable: true,
42
- get: function () { return chunk2YPEQTL2_js.useSuggestedPrompts; }
42
+ get: function () { return chunkUFMTRGML_js.useSuggestedPrompts; }
43
43
  });
@@ -1,2 +1,2 @@
1
- export { useAppilots, useAppilotsActions, useAppilotsChat, useAppilotsField, useAppilotsNavigation, useAppilotsSlider, useAppilotsTarget, useAppilotsToggle, useSuggestedPrompts } from '../chunk-NA5H4IHH.mjs';
2
- import '../chunk-G6KI7KVH.mjs';
1
+ export { useAppilots, useAppilotsActions, useAppilotsChat, useAppilotsField, useAppilotsNavigation, useAppilotsSlider, useAppilotsTarget, useAppilotsToggle, useSuggestedPrompts } from '../chunk-2ZDELL54.mjs';
2
+ import '../chunk-ROXXCDIG.mjs';
@@ -250,7 +250,7 @@ interface UIInteractionPayload {
250
250
  componentId: string;
251
251
  /** Canonical server/LLM identifier. `componentId` is kept as SDK alias. */
252
252
  targetId?: string;
253
- action: 'press' | 'longPress' | 'scroll' | 'swipe' | 'focus' | 'set_value';
253
+ action: 'press' | 'longPress' | 'toggle' | 'scroll' | 'swipe' | 'focus' | 'set_value';
254
254
  /**
255
255
  * Numeric value for `set_value` (sliders / adjustable controls).
256
256
  * The handler clamps to the slider's [min, max] and snaps to its step.
@@ -754,6 +754,45 @@ interface InputSnapshot {
754
754
  * field declares no such handler, so the form needs a button.
755
755
  */
756
756
  submitsOnReturn?: boolean;
757
+ /**
758
+ * The app is asking for this field before the form can be submitted.
759
+ *
760
+ * ABSENT MEANS UNKNOWN, not optional: most apps never declare it, and
761
+ * reading absence as "not required" would let the agent submit a form
762
+ * it could have known was incomplete.
763
+ */
764
+ required?: boolean;
765
+ /**
766
+ * The app is currently rejecting this field's value.
767
+ *
768
+ * This is the fact the agent used to recover by READING — the error
769
+ * copy next to the input ("Campo obrigatório", "Formato inválido").
770
+ * Carrying the fact as a boolean is what lets a redacted observation
771
+ * still support recovery, and it is cheaper than the sentence even
772
+ * when nothing is redacted.
773
+ *
774
+ * Absent means the app declares no validity state — never that the
775
+ * field is valid.
776
+ */
777
+ invalid?: boolean;
778
+ /**
779
+ * Whether the field currently holds anything.
780
+ *
781
+ * Deliberately its own field rather than an inference over `value`.
782
+ * The value belongs to the user and is the first thing a privacy
783
+ * policy withholds; the EXISTENCE of a value belongs to the agent and
784
+ * is what stops it from filling the same field twice on a later hop.
785
+ * Separating them is what lets the second survive without the first.
786
+ */
787
+ filled?: boolean;
788
+ /**
789
+ * This input has keyboard focus right now.
790
+ *
791
+ * Tells apart "empty because nobody typed" from "empty because the
792
+ * user is typing in it at this moment" — the difference between
793
+ * completing a form and interrupting someone mid-sentence.
794
+ */
795
+ focused?: boolean;
757
796
  /**
758
797
  * True when this input lives inside a currently-visible modal. When a
759
798
  * modal is open, only inModal elements can actually receive input —
@@ -1085,6 +1124,67 @@ interface InteractionElementEntry extends InteractionElementSnapshot {
1085
1124
  */
1086
1125
  rect?: ElementRect;
1087
1126
  }
1127
+ /**
1128
+ * What changed between the previous observation and this one.
1129
+ *
1130
+ * The client holds both snapshots; the server only ever sees one. So the
1131
+ * question the agent loop asks most often — "did the action I just took
1132
+ * do anything?" — is one the client can answer as a FACT and the server
1133
+ * can only guess at. Today it guesses: `effect: 'none'` on the turn trail
1134
+ * is derived server-side from heuristics over a single snapshot.
1135
+ *
1136
+ * Everything here is shape, never content: counts, booleans, and field
1137
+ * ids that the app declared itself. That is not an accident of design —
1138
+ * it is what lets this survive a redacted or content-free observation
1139
+ * intact, and it is why the most useful signal in the observation is also
1140
+ * the cheapest one to send.
1141
+ *
1142
+ * ABSENT vs `unchanged: true` is the load-bearing distinction, and it is
1143
+ * the same one `truncated` exists to make. Absent means there was no
1144
+ * previous observation to compare against (the first capture of a
1145
+ * mission). `unchanged: true` means we DID compare and nothing moved —
1146
+ * which is the strongest evidence there is that an action did nothing.
1147
+ */
1148
+ interface SnapshotDelta {
1149
+ /** The active route is not the one the previous observation reported. */
1150
+ routeChanged?: boolean;
1151
+ /** A modal or native dialog is up now and was not before. */
1152
+ modalOpened?: boolean;
1153
+ /** A modal or native dialog was up before and is gone now. */
1154
+ modalClosed?: boolean;
1155
+ /** A loading indicator appeared. */
1156
+ loadingStarted?: boolean;
1157
+ /** A loading indicator that was showing is gone. */
1158
+ loadingFinished?: boolean;
1159
+ /** How many distinct visible texts are present now that were not before. */
1160
+ textsAdded?: number;
1161
+ /** How many distinct visible texts are gone. */
1162
+ textsRemoved?: number;
1163
+ /** Net change in mounted list rows, summed across every list. */
1164
+ visibleRowsDelta?: number;
1165
+ /**
1166
+ * Net change in the lists' reported DATA totals, summed. This is the
1167
+ * one that answers "did the record actually get created", because it
1168
+ * moves even when virtualization keeps the new row unmounted.
1169
+ */
1170
+ totalRowsDelta?: number;
1171
+ /**
1172
+ * Fields that went from empty to filled. Declared ids only — a
1173
+ * `derived` id is folded from visible copy, so publishing it here
1174
+ * would smuggle content through a field that claims to carry none.
1175
+ */
1176
+ fieldsNewlyFilled?: string[];
1177
+ /** Fields that went from filled to empty. Declared ids only. */
1178
+ fieldsCleared?: string[];
1179
+ /** Some field is reporting invalid that was not reporting it before. */
1180
+ invalidAppeared?: boolean;
1181
+ /**
1182
+ * Nothing above fired: we compared two observations and the screen is
1183
+ * structurally identical. Present only when every other field is
1184
+ * absent, so a reader never has to check all of them to know.
1185
+ */
1186
+ unchanged?: boolean;
1187
+ }
1088
1188
  interface ScreenSnapshot {
1089
1189
  /** The currently active route name, if known */
1090
1190
  route: string | null;
@@ -1147,6 +1247,17 @@ interface ScreenSnapshot {
1147
1247
  * from a short one.
1148
1248
  */
1149
1249
  truncated?: boolean;
1250
+ /**
1251
+ * What moved since the previous observation. See {@link SnapshotDelta}
1252
+ * — absent means there was nothing to compare against, which is a
1253
+ * different statement from "nothing changed".
1254
+ *
1255
+ * Attached by the platform adapter rather than by the walker: the
1256
+ * baseline has to be the last snapshot that was actually SENT, and
1257
+ * `captureSnapshot` is also called for internal probes that never
1258
+ * leave the device.
1259
+ */
1260
+ delta?: SnapshotDelta;
1150
1261
  /** Diagnostic counts for debugging */
1151
1262
  stats?: {
1152
1263
  visitedFibers: number;
@@ -250,7 +250,7 @@ interface UIInteractionPayload {
250
250
  componentId: string;
251
251
  /** Canonical server/LLM identifier. `componentId` is kept as SDK alias. */
252
252
  targetId?: string;
253
- action: 'press' | 'longPress' | 'scroll' | 'swipe' | 'focus' | 'set_value';
253
+ action: 'press' | 'longPress' | 'toggle' | 'scroll' | 'swipe' | 'focus' | 'set_value';
254
254
  /**
255
255
  * Numeric value for `set_value` (sliders / adjustable controls).
256
256
  * The handler clamps to the slider's [min, max] and snaps to its step.
@@ -754,6 +754,45 @@ interface InputSnapshot {
754
754
  * field declares no such handler, so the form needs a button.
755
755
  */
756
756
  submitsOnReturn?: boolean;
757
+ /**
758
+ * The app is asking for this field before the form can be submitted.
759
+ *
760
+ * ABSENT MEANS UNKNOWN, not optional: most apps never declare it, and
761
+ * reading absence as "not required" would let the agent submit a form
762
+ * it could have known was incomplete.
763
+ */
764
+ required?: boolean;
765
+ /**
766
+ * The app is currently rejecting this field's value.
767
+ *
768
+ * This is the fact the agent used to recover by READING — the error
769
+ * copy next to the input ("Campo obrigatório", "Formato inválido").
770
+ * Carrying the fact as a boolean is what lets a redacted observation
771
+ * still support recovery, and it is cheaper than the sentence even
772
+ * when nothing is redacted.
773
+ *
774
+ * Absent means the app declares no validity state — never that the
775
+ * field is valid.
776
+ */
777
+ invalid?: boolean;
778
+ /**
779
+ * Whether the field currently holds anything.
780
+ *
781
+ * Deliberately its own field rather than an inference over `value`.
782
+ * The value belongs to the user and is the first thing a privacy
783
+ * policy withholds; the EXISTENCE of a value belongs to the agent and
784
+ * is what stops it from filling the same field twice on a later hop.
785
+ * Separating them is what lets the second survive without the first.
786
+ */
787
+ filled?: boolean;
788
+ /**
789
+ * This input has keyboard focus right now.
790
+ *
791
+ * Tells apart "empty because nobody typed" from "empty because the
792
+ * user is typing in it at this moment" — the difference between
793
+ * completing a form and interrupting someone mid-sentence.
794
+ */
795
+ focused?: boolean;
757
796
  /**
758
797
  * True when this input lives inside a currently-visible modal. When a
759
798
  * modal is open, only inModal elements can actually receive input —
@@ -1085,6 +1124,67 @@ interface InteractionElementEntry extends InteractionElementSnapshot {
1085
1124
  */
1086
1125
  rect?: ElementRect;
1087
1126
  }
1127
+ /**
1128
+ * What changed between the previous observation and this one.
1129
+ *
1130
+ * The client holds both snapshots; the server only ever sees one. So the
1131
+ * question the agent loop asks most often — "did the action I just took
1132
+ * do anything?" — is one the client can answer as a FACT and the server
1133
+ * can only guess at. Today it guesses: `effect: 'none'` on the turn trail
1134
+ * is derived server-side from heuristics over a single snapshot.
1135
+ *
1136
+ * Everything here is shape, never content: counts, booleans, and field
1137
+ * ids that the app declared itself. That is not an accident of design —
1138
+ * it is what lets this survive a redacted or content-free observation
1139
+ * intact, and it is why the most useful signal in the observation is also
1140
+ * the cheapest one to send.
1141
+ *
1142
+ * ABSENT vs `unchanged: true` is the load-bearing distinction, and it is
1143
+ * the same one `truncated` exists to make. Absent means there was no
1144
+ * previous observation to compare against (the first capture of a
1145
+ * mission). `unchanged: true` means we DID compare and nothing moved —
1146
+ * which is the strongest evidence there is that an action did nothing.
1147
+ */
1148
+ interface SnapshotDelta {
1149
+ /** The active route is not the one the previous observation reported. */
1150
+ routeChanged?: boolean;
1151
+ /** A modal or native dialog is up now and was not before. */
1152
+ modalOpened?: boolean;
1153
+ /** A modal or native dialog was up before and is gone now. */
1154
+ modalClosed?: boolean;
1155
+ /** A loading indicator appeared. */
1156
+ loadingStarted?: boolean;
1157
+ /** A loading indicator that was showing is gone. */
1158
+ loadingFinished?: boolean;
1159
+ /** How many distinct visible texts are present now that were not before. */
1160
+ textsAdded?: number;
1161
+ /** How many distinct visible texts are gone. */
1162
+ textsRemoved?: number;
1163
+ /** Net change in mounted list rows, summed across every list. */
1164
+ visibleRowsDelta?: number;
1165
+ /**
1166
+ * Net change in the lists' reported DATA totals, summed. This is the
1167
+ * one that answers "did the record actually get created", because it
1168
+ * moves even when virtualization keeps the new row unmounted.
1169
+ */
1170
+ totalRowsDelta?: number;
1171
+ /**
1172
+ * Fields that went from empty to filled. Declared ids only — a
1173
+ * `derived` id is folded from visible copy, so publishing it here
1174
+ * would smuggle content through a field that claims to carry none.
1175
+ */
1176
+ fieldsNewlyFilled?: string[];
1177
+ /** Fields that went from filled to empty. Declared ids only. */
1178
+ fieldsCleared?: string[];
1179
+ /** Some field is reporting invalid that was not reporting it before. */
1180
+ invalidAppeared?: boolean;
1181
+ /**
1182
+ * Nothing above fired: we compared two observations and the screen is
1183
+ * structurally identical. Present only when every other field is
1184
+ * absent, so a reader never has to check all of them to know.
1185
+ */
1186
+ unchanged?: boolean;
1187
+ }
1088
1188
  interface ScreenSnapshot {
1089
1189
  /** The currently active route name, if known */
1090
1190
  route: string | null;
@@ -1147,6 +1247,17 @@ interface ScreenSnapshot {
1147
1247
  * from a short one.
1148
1248
  */
1149
1249
  truncated?: boolean;
1250
+ /**
1251
+ * What moved since the previous observation. See {@link SnapshotDelta}
1252
+ * — absent means there was nothing to compare against, which is a
1253
+ * different statement from "nothing changed".
1254
+ *
1255
+ * Attached by the platform adapter rather than by the walker: the
1256
+ * baseline has to be the last snapshot that was actually SENT, and
1257
+ * `captureSnapshot` is also called for internal probes that never
1258
+ * leave the device.
1259
+ */
1260
+ delta?: SnapshotDelta;
1150
1261
  /** Diagnostic counts for debugging */
1151
1262
  stats?: {
1152
1263
  visitedFibers: number;
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as PartialThemeTokens, A as AppilotsThemeTokens, a as AppilotsLocale, b as AgentAction, I as InteractionElementEntry, C as ComponentRegistry, c as AgentPermissions, S as ScreenSnapshot, F as FieldEntry, d as AppilotsEvent } from './index-BPZ0j71S.mjs';
2
- export { e as AgentActionType, f as AgentMessage, g as AppilotsClient, h as AppilotsClientOptions, i as AppilotsConfig, j as AppilotsEventHandler, k as AppilotsEventType, l as AppilotsProvider, m as AppilotsProviderProps, n as AppilotsTraceEntry, o as AppilotsUser, B as BreadcrumbItem, p as BreadcrumbState, q as ButtonSnapshot, r as ChatMessage, s as ChoiceGroupSnapshot, t as ChoiceOptionSnapshot, u as ComponentEntry, v as ComponentKind, E as EscalationState, w as FormFillPayload, x as InputSnapshot, y as InteractionElementListContext, z as InteractionElementSnapshot, L as ListItemSnapshot, D as ListSnapshot, M as MessageRole, N as NavigationPayload, R as RateLimitedError, G as RemotePersonalization, H as SliderEntry, J as SuggestedPrompt, T as TargetEntry, K as ToggleEntry, O as ToggleSnapshot, U as UIInteractionPayload, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, _ as clearAppilotsDebugTraces, $ as componentRegistry, a0 as createComponentRegistry, a1 as defaultDarkTheme, a2 as defaultLightTheme, a3 as describeAction, a4 as getAppilotsDebugTraces, a5 as humanizeError, a6 as mergeThemeTokens, a7 as recordAppilotsDebugTrace, a8 as subscribeAppilotsDebugTraces, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ac as useAppilotsContext, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from './index-BPZ0j71S.mjs';
1
+ import { P as PartialThemeTokens, A as AppilotsThemeTokens, a as AppilotsLocale, b as AgentAction, I as InteractionElementEntry, C as ComponentRegistry, c as AgentPermissions, S as ScreenSnapshot, F as FieldEntry, d as AppilotsEvent } from './index-BR-33WMN.mjs';
2
+ export { e as AgentActionType, f as AgentMessage, g as AppilotsClient, h as AppilotsClientOptions, i as AppilotsConfig, j as AppilotsEventHandler, k as AppilotsEventType, l as AppilotsProvider, m as AppilotsProviderProps, n as AppilotsTraceEntry, o as AppilotsUser, B as BreadcrumbItem, p as BreadcrumbState, q as ButtonSnapshot, r as ChatMessage, s as ChoiceGroupSnapshot, t as ChoiceOptionSnapshot, u as ComponentEntry, v as ComponentKind, E as EscalationState, w as FormFillPayload, x as InputSnapshot, y as InteractionElementListContext, z as InteractionElementSnapshot, L as ListItemSnapshot, D as ListSnapshot, M as MessageRole, N as NavigationPayload, R as RateLimitedError, G as RemotePersonalization, H as SliderEntry, J as SuggestedPrompt, T as TargetEntry, K as ToggleEntry, O as ToggleSnapshot, U as UIInteractionPayload, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, _ as clearAppilotsDebugTraces, $ as componentRegistry, a0 as createComponentRegistry, a1 as defaultDarkTheme, a2 as defaultLightTheme, a3 as describeAction, a4 as getAppilotsDebugTraces, a5 as humanizeError, a6 as mergeThemeTokens, a7 as recordAppilotsDebugTrace, a8 as subscribeAppilotsDebugTraces, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ac as useAppilotsContext, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from './index-BR-33WMN.mjs';
3
3
  import * as React$1 from 'react';
4
4
  import React__default from 'react';
5
5
  export { AppilotsNavigationContainer, NavigationConfig, ScreenMetadata, registerScreen, setCurrentScreen } from './navigation/index.mjs';
@@ -289,6 +289,31 @@ interface LegacyThemeShape {
289
289
  borderRadius?: number;
290
290
  fontFamily?: string;
291
291
  }
292
+ /**
293
+ * testID contract — the SDK's e2e surface.
294
+ *
295
+ * Every control an integrator's e2e suite has to drive carries a stable
296
+ * `testID`, and the id is the ONLY handle we promise. Copy is not: the
297
+ * visible label and the `accessibilityLabel` both come from the i18n
298
+ * bundle, so a harness that matches on them has to try every locale the
299
+ * app ships and then guess.
300
+ *
301
+ * The close button was the hole. It had a localized `accessibilityLabel`
302
+ * and no id, so integrators matched its text in three languages and fell
303
+ * back to a swipe when none hit. `assistant-clear` was the same hole one
304
+ * button over.
305
+ *
306
+ * The id alone did not fix what found it, and it is worth knowing why:
307
+ * the run that failed was failing on REACHABILITY, not on matching — the
308
+ * sheet used to overflow off the top of the screen when the keyboard
309
+ * opened, taking this header with it, and a harness taps by coordinate.
310
+ * That is fixed in the styles below; see `chatContainer`.
311
+ *
312
+ * The ids live in `AppilotsChat.testIds.realTree.test.tsx` and are
313
+ * published in apps/docs (`sdk/test-ids`). Adding one is additive;
314
+ * renaming or removing one is a BREAKING change for every integrator's
315
+ * test suite, whether or not the TypeScript surface moved.
316
+ */
292
317
  /**
293
318
  * Public entry point.
294
319
  *
@@ -1259,6 +1284,6 @@ declare function executeAction(action: AgentAction, context: ExecutorContext): P
1259
1284
  * (`X-Appilots-Sdk-Version`). Kept identical to package.json by the
1260
1285
  * release flow; `version.test.ts` fails if the two ever disagree.
1261
1286
  */
1262
- declare const SDK_VERSION = "0.11.0";
1287
+ declare const SDK_VERSION = "0.11.3";
1263
1288
 
1264
1289
  export { ActionBreadcrumb, type ActionBreadcrumbProps, type ActionResult, AgentAction, AgentPermissions, type AppilotsButtonProps, AppilotsChat, type AppilotsChatMode, type AppilotsChatPosition, type AppilotsChatProps, type AppilotsChatTheme, AppilotsEvent, AppilotsI18nProvider, type AppilotsI18nProviderProps, type AppilotsInputProps, AppilotsLocale, type AppilotsRC, AppilotsRegistryProvider, type AppilotsSelfCheckReport, type AppilotsStringKey, type AppilotsStrings, type AppilotsSwitchProps, AppilotsThemeProvider, type AppilotsThemeProviderProps, AppilotsThemeTokens, type AutoTrackingState, ChatIcon, type ChatIconProps, ComponentRegistry, ConfirmDialog, type ConfirmDialogProps, type ElementRegistry, type ExecutorContext, FieldEntry, HeadsetIcon, type HeadsetIconProps, InteractionElementEntry, type IntrospectionDiagnostics, type IntrospectionFailureReason, type ListEntry, type ListRegistry, type NameManglingProbe, PartialThemeTokens, SDK_VERSION, ScreenSnapshot, type SelfCheckRegistry, type SelfCheckWalk, type TailwindResolvedConfig, type WalkDetectorCounts, _patchJsxRuntimes, appilotsSelfCheck, appilotsTheme, appilotsThemeFromTailwind, captureSnapshot, createAppilotsButton, createAppilotsInput, createAppilotsSwitch, createElementRegistry, createListRegistry, detectDeviceLocale, elementRegistry, enableAppilotsAutoTracking, executeAction, getAutoTrackingState, getGlobalConfig, getIntrospectionDiagnostics, initAppilots, isAutoTrackingEnabled, listRegistry, resolveLocale, useAppilotsI18n, useAppilotsTheme, useResolvedRegistry };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as PartialThemeTokens, A as AppilotsThemeTokens, a as AppilotsLocale, b as AgentAction, I as InteractionElementEntry, C as ComponentRegistry, c as AgentPermissions, S as ScreenSnapshot, F as FieldEntry, d as AppilotsEvent } from './index-BPZ0j71S.js';
2
- export { e as AgentActionType, f as AgentMessage, g as AppilotsClient, h as AppilotsClientOptions, i as AppilotsConfig, j as AppilotsEventHandler, k as AppilotsEventType, l as AppilotsProvider, m as AppilotsProviderProps, n as AppilotsTraceEntry, o as AppilotsUser, B as BreadcrumbItem, p as BreadcrumbState, q as ButtonSnapshot, r as ChatMessage, s as ChoiceGroupSnapshot, t as ChoiceOptionSnapshot, u as ComponentEntry, v as ComponentKind, E as EscalationState, w as FormFillPayload, x as InputSnapshot, y as InteractionElementListContext, z as InteractionElementSnapshot, L as ListItemSnapshot, D as ListSnapshot, M as MessageRole, N as NavigationPayload, R as RateLimitedError, G as RemotePersonalization, H as SliderEntry, J as SuggestedPrompt, T as TargetEntry, K as ToggleEntry, O as ToggleSnapshot, U as UIInteractionPayload, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, _ as clearAppilotsDebugTraces, $ as componentRegistry, a0 as createComponentRegistry, a1 as defaultDarkTheme, a2 as defaultLightTheme, a3 as describeAction, a4 as getAppilotsDebugTraces, a5 as humanizeError, a6 as mergeThemeTokens, a7 as recordAppilotsDebugTrace, a8 as subscribeAppilotsDebugTraces, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ac as useAppilotsContext, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from './index-BPZ0j71S.js';
1
+ import { P as PartialThemeTokens, A as AppilotsThemeTokens, a as AppilotsLocale, b as AgentAction, I as InteractionElementEntry, C as ComponentRegistry, c as AgentPermissions, S as ScreenSnapshot, F as FieldEntry, d as AppilotsEvent } from './index-BR-33WMN.js';
2
+ export { e as AgentActionType, f as AgentMessage, g as AppilotsClient, h as AppilotsClientOptions, i as AppilotsConfig, j as AppilotsEventHandler, k as AppilotsEventType, l as AppilotsProvider, m as AppilotsProviderProps, n as AppilotsTraceEntry, o as AppilotsUser, B as BreadcrumbItem, p as BreadcrumbState, q as ButtonSnapshot, r as ChatMessage, s as ChoiceGroupSnapshot, t as ChoiceOptionSnapshot, u as ComponentEntry, v as ComponentKind, E as EscalationState, w as FormFillPayload, x as InputSnapshot, y as InteractionElementListContext, z as InteractionElementSnapshot, L as ListItemSnapshot, D as ListSnapshot, M as MessageRole, N as NavigationPayload, R as RateLimitedError, G as RemotePersonalization, H as SliderEntry, J as SuggestedPrompt, T as TargetEntry, K as ToggleEntry, O as ToggleSnapshot, U as UIInteractionPayload, Q as UseAppilotsFieldOptions, V as UseAppilotsSliderOptions, W as UseAppilotsTargetOptions, X as UseAppilotsToggleOptions, Y as UseSuggestedPromptsOptions, Z as UseSuggestedPromptsReturn, _ as clearAppilotsDebugTraces, $ as componentRegistry, a0 as createComponentRegistry, a1 as defaultDarkTheme, a2 as defaultLightTheme, a3 as describeAction, a4 as getAppilotsDebugTraces, a5 as humanizeError, a6 as mergeThemeTokens, a7 as recordAppilotsDebugTrace, a8 as subscribeAppilotsDebugTraces, a9 as useAppilots, aa as useAppilotsActions, ab as useAppilotsChat, ac as useAppilotsContext, ad as useAppilotsField, ae as useAppilotsNavigation, af as useAppilotsSlider, ag as useAppilotsTarget, ah as useAppilotsToggle, ai as useSuggestedPrompts } from './index-BR-33WMN.js';
3
3
  import * as React$1 from 'react';
4
4
  import React__default from 'react';
5
5
  export { AppilotsNavigationContainer, NavigationConfig, ScreenMetadata, registerScreen, setCurrentScreen } from './navigation/index.js';
@@ -289,6 +289,31 @@ interface LegacyThemeShape {
289
289
  borderRadius?: number;
290
290
  fontFamily?: string;
291
291
  }
292
+ /**
293
+ * testID contract — the SDK's e2e surface.
294
+ *
295
+ * Every control an integrator's e2e suite has to drive carries a stable
296
+ * `testID`, and the id is the ONLY handle we promise. Copy is not: the
297
+ * visible label and the `accessibilityLabel` both come from the i18n
298
+ * bundle, so a harness that matches on them has to try every locale the
299
+ * app ships and then guess.
300
+ *
301
+ * The close button was the hole. It had a localized `accessibilityLabel`
302
+ * and no id, so integrators matched its text in three languages and fell
303
+ * back to a swipe when none hit. `assistant-clear` was the same hole one
304
+ * button over.
305
+ *
306
+ * The id alone did not fix what found it, and it is worth knowing why:
307
+ * the run that failed was failing on REACHABILITY, not on matching — the
308
+ * sheet used to overflow off the top of the screen when the keyboard
309
+ * opened, taking this header with it, and a harness taps by coordinate.
310
+ * That is fixed in the styles below; see `chatContainer`.
311
+ *
312
+ * The ids live in `AppilotsChat.testIds.realTree.test.tsx` and are
313
+ * published in apps/docs (`sdk/test-ids`). Adding one is additive;
314
+ * renaming or removing one is a BREAKING change for every integrator's
315
+ * test suite, whether or not the TypeScript surface moved.
316
+ */
292
317
  /**
293
318
  * Public entry point.
294
319
  *
@@ -1259,6 +1284,6 @@ declare function executeAction(action: AgentAction, context: ExecutorContext): P
1259
1284
  * (`X-Appilots-Sdk-Version`). Kept identical to package.json by the
1260
1285
  * release flow; `version.test.ts` fails if the two ever disagree.
1261
1286
  */
1262
- declare const SDK_VERSION = "0.11.0";
1287
+ declare const SDK_VERSION = "0.11.3";
1263
1288
 
1264
1289
  export { ActionBreadcrumb, type ActionBreadcrumbProps, type ActionResult, AgentAction, AgentPermissions, type AppilotsButtonProps, AppilotsChat, type AppilotsChatMode, type AppilotsChatPosition, type AppilotsChatProps, type AppilotsChatTheme, AppilotsEvent, AppilotsI18nProvider, type AppilotsI18nProviderProps, type AppilotsInputProps, AppilotsLocale, type AppilotsRC, AppilotsRegistryProvider, type AppilotsSelfCheckReport, type AppilotsStringKey, type AppilotsStrings, type AppilotsSwitchProps, AppilotsThemeProvider, type AppilotsThemeProviderProps, AppilotsThemeTokens, type AutoTrackingState, ChatIcon, type ChatIconProps, ComponentRegistry, ConfirmDialog, type ConfirmDialogProps, type ElementRegistry, type ExecutorContext, FieldEntry, HeadsetIcon, type HeadsetIconProps, InteractionElementEntry, type IntrospectionDiagnostics, type IntrospectionFailureReason, type ListEntry, type ListRegistry, type NameManglingProbe, PartialThemeTokens, SDK_VERSION, ScreenSnapshot, type SelfCheckRegistry, type SelfCheckWalk, type TailwindResolvedConfig, type WalkDetectorCounts, _patchJsxRuntimes, appilotsSelfCheck, appilotsTheme, appilotsThemeFromTailwind, captureSnapshot, createAppilotsButton, createAppilotsInput, createAppilotsSwitch, createElementRegistry, createListRegistry, detectDeviceLocale, elementRegistry, enableAppilotsAutoTracking, executeAction, getAutoTrackingState, getGlobalConfig, getIntrospectionDiagnostics, initAppilots, isAutoTrackingEnabled, listRegistry, resolveLocale, useAppilotsI18n, useAppilotsTheme, useResolvedRegistry };