@appilots/sdk 0.8.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/.build-meta.json +5 -0
- package/dist/{chunk-N7EAOLBP.js → chunk-2YPEQTL2.js} +956 -1134
- package/dist/{chunk-ZSEACJKU.mjs → chunk-3K7ORC4X.mjs} +16 -13
- package/dist/{chunk-AYWMBMSN.js → chunk-55Y2AQE7.js} +1992 -384
- package/dist/{chunk-C2KVVJ5K.mjs → chunk-G6KI7KVH.mjs} +1968 -386
- package/dist/{chunk-H7BMQTXH.js → chunk-IZEWWAA7.js} +19 -16
- package/dist/{chunk-MHWVRZYF.mjs → chunk-NA5H4IHH.mjs} +736 -919
- package/dist/hooks/index.d.mts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js +11 -11
- package/dist/hooks/index.mjs +2 -2
- package/dist/{index-BdYY-dvG.d.mts → index-BPZ0j71S.d.mts} +254 -6
- package/dist/{index-BdYY-dvG.d.ts → index-BPZ0j71S.d.ts} +254 -6
- package/dist/index.d.mts +306 -21
- package/dist/index.d.ts +306 -21
- package/dist/index.js +337 -229
- package/dist/index.mjs +269 -173
- package/dist/navigation/index.d.mts +171 -3
- package/dist/navigation/index.d.ts +171 -3
- package/dist/navigation/index.js +13 -13
- package/dist/navigation/index.mjs +2 -2
- package/metro.d.ts +16 -1
- package/metro.js +104 -10
- package/package.json +4 -2
- package/dist/registerScreen-D1oGm28T.d.mts +0 -159
- package/dist/registerScreen-D1oGm28T.d.ts +0 -159
package/dist/hooks/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
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';
|
|
2
2
|
import 'react';
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
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';
|
|
2
2
|
import 'react';
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var chunk2YPEQTL2_js = require('../chunk-2YPEQTL2.js');
|
|
4
|
+
require('../chunk-55Y2AQE7.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "useAppilots", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunk2YPEQTL2_js.useAppilots; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "useAppilotsActions", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsActions; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "useAppilotsChat", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsChat; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "useAppilotsField", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsField; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "useAppilotsNavigation", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsNavigation; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "useAppilotsSlider", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsSlider; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "useAppilotsTarget", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsTarget; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "useAppilotsToggle", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunk2YPEQTL2_js.useAppilotsToggle; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "useSuggestedPrompts", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunk2YPEQTL2_js.useSuggestedPrompts; }
|
|
43
43
|
});
|
package/dist/hooks/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { useAppilots, useAppilotsActions, useAppilotsChat, useAppilotsField, useAppilotsNavigation, useAppilotsSlider, useAppilotsTarget, useAppilotsToggle, useSuggestedPrompts } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { useAppilots, useAppilotsActions, useAppilotsChat, useAppilotsField, useAppilotsNavigation, useAppilotsSlider, useAppilotsTarget, useAppilotsToggle, useSuggestedPrompts } from '../chunk-NA5H4IHH.mjs';
|
|
2
|
+
import '../chunk-G6KI7KVH.mjs';
|
|
@@ -210,7 +210,8 @@ interface AgentAction {
|
|
|
210
210
|
destructive?: boolean;
|
|
211
211
|
}
|
|
212
212
|
interface NavigationPayload {
|
|
213
|
-
|
|
213
|
+
/** Absent only for `goBack`, which has no destination to name (#398). */
|
|
214
|
+
screenName?: string;
|
|
214
215
|
params?: Record<string, unknown>;
|
|
215
216
|
navigationAction: 'push' | 'navigate' | 'replace' | 'goBack' | 'reset';
|
|
216
217
|
/**
|
|
@@ -309,7 +310,7 @@ interface EscalationState {
|
|
|
309
310
|
*/
|
|
310
311
|
interface IntrospectionDiagnosticsInput {
|
|
311
312
|
captured: boolean;
|
|
312
|
-
failureReason?: 'sentinel-missing-internals' | 'never-mounted' | 'render-crashed' | null;
|
|
313
|
+
failureReason?: 'sentinel-missing-internals' | 'never-mounted' | 'render-crashed' | 'names-mangled' | 'walk-recognized-nothing' | null;
|
|
313
314
|
reactVersion?: string | null;
|
|
314
315
|
failureCount?: number;
|
|
315
316
|
}
|
|
@@ -472,6 +473,7 @@ interface SendMessageContext {
|
|
|
472
473
|
empty?: boolean;
|
|
473
474
|
}>;
|
|
474
475
|
}
|
|
476
|
+
|
|
475
477
|
declare class AppilotsClient {
|
|
476
478
|
private readonly baseUrl;
|
|
477
479
|
private readonly projectId;
|
|
@@ -485,6 +487,18 @@ declare class AppilotsClient {
|
|
|
485
487
|
/** Guard so identify fires at most once per client instance. */
|
|
486
488
|
private identified;
|
|
487
489
|
constructor(options: AppilotsClientOptions);
|
|
490
|
+
/**
|
|
491
|
+
* A 404 on an `/agent/*` path is almost never a missing record — those
|
|
492
|
+
* routes are static. It means the request reached SOMETHING that is not
|
|
493
|
+
* this API, or reached it at the wrong mount point, and the server's own
|
|
494
|
+
* message ("Route not found") tells the integrator nothing about which.
|
|
495
|
+
*
|
|
496
|
+
* The symptom is unmistakable once you have seen it: every message
|
|
497
|
+
* fails, including a plain "hello" that needs no tool at all, because
|
|
498
|
+
* nothing ever reaches the agent. Left as-is it reads like the agent is
|
|
499
|
+
* broken.
|
|
500
|
+
*/
|
|
501
|
+
private explainIfMisroutedBaseUrl;
|
|
488
502
|
private log;
|
|
489
503
|
private describeNonJsonResponse;
|
|
490
504
|
private request;
|
|
@@ -680,9 +694,45 @@ declare class AppilotsClient {
|
|
|
680
694
|
* produces this same shape; the wire contract it feeds is
|
|
681
695
|
* `agentSnapshotSchema` in `@appilots/shared`.
|
|
682
696
|
*/
|
|
697
|
+
/**
|
|
698
|
+
* How much the walker actually knows about an element's identifier.
|
|
699
|
+
*
|
|
700
|
+
* The observation used to say nothing here, so `btn-3` — an ordinal the
|
|
701
|
+
* walker invented — read to the model exactly like `testID="submit-order"`,
|
|
702
|
+
* which a developer wrote down on purpose. That is how a confident press on
|
|
703
|
+
* the wrong control happens.
|
|
704
|
+
*
|
|
705
|
+
* - `declared` the app named it: `testID` / `data-testid` /
|
|
706
|
+
* `accessibilityLabel` / `aria-label`. Stable across renders
|
|
707
|
+
* and across releases; safe to copy into a tool call.
|
|
708
|
+
* - `derived` folded from what the user can see — the button's own text,
|
|
709
|
+
* a `label` or `placeholder` prop. Stable as long as the copy
|
|
710
|
+
* does not change, and it changes with the app's language.
|
|
711
|
+
* - `positional` nothing but an ordinal in the current snapshot. Valid for
|
|
712
|
+
* this observation only: a re-render, a scroll or an inserted
|
|
713
|
+
* sibling moves it.
|
|
714
|
+
*
|
|
715
|
+
* ABSENT means unknown, NOT `declared` — clients published before this field
|
|
716
|
+
* existed send no provenance at all, and a missing value must never be read
|
|
717
|
+
* as the most trustworthy one.
|
|
718
|
+
*/
|
|
719
|
+
type IdentityProvenance = 'declared' | 'derived' | 'positional';
|
|
683
720
|
interface InputSnapshot {
|
|
684
721
|
/** Best identifier — testID/data-testid, accessibilityLabel/aria-label, or placeholder */
|
|
685
722
|
id?: string;
|
|
723
|
+
/** How `id` was obtained. See {@link IdentityProvenance}. */
|
|
724
|
+
provenance?: IdentityProvenance;
|
|
725
|
+
/**
|
|
726
|
+
* False when the control is mounted but currently outside the window —
|
|
727
|
+
* below the fold of a ScrollView, scrolled off the top, pushed sideways
|
|
728
|
+
* by a carousel.
|
|
729
|
+
*
|
|
730
|
+
* ABSENT MEANS UNKNOWN. The old React Native architecture cannot report a
|
|
731
|
+
* synchronous window-relative rect, and no SDK published before this
|
|
732
|
+
* field existed reports one at all; reading absence as `false` would make
|
|
733
|
+
* the agent refuse to press a control the user is looking at.
|
|
734
|
+
*/
|
|
735
|
+
onScreen?: boolean;
|
|
686
736
|
/** Human-readable label inferred from accessibility metadata or sibling text */
|
|
687
737
|
label?: string;
|
|
688
738
|
/** Current value (only present for controlled inputs) */
|
|
@@ -695,6 +745,15 @@ interface InputSnapshot {
|
|
|
695
745
|
secure?: boolean;
|
|
696
746
|
/** Inferred type based on the platform's input-type metadata */
|
|
697
747
|
type?: 'text' | 'email' | 'number' | 'phone' | 'password';
|
|
748
|
+
/**
|
|
749
|
+
* True when pressing return on this field submits — RN's
|
|
750
|
+
* `onSubmitEditing`, the web's implicit form submit.
|
|
751
|
+
*
|
|
752
|
+
* On a search box, a one-field login or a chat composer this IS the
|
|
753
|
+
* submit; the screen has no button and never will. Absent means the
|
|
754
|
+
* field declares no such handler, so the form needs a button.
|
|
755
|
+
*/
|
|
756
|
+
submitsOnReturn?: boolean;
|
|
698
757
|
/**
|
|
699
758
|
* True when this input lives inside a currently-visible modal. When a
|
|
700
759
|
* modal is open, only inModal elements can actually receive input —
|
|
@@ -705,14 +764,35 @@ interface InputSnapshot {
|
|
|
705
764
|
interface ButtonSnapshot {
|
|
706
765
|
/** Best identifier — testID/data-testid, accessibilityLabel/aria-label, or inferred from child text */
|
|
707
766
|
id?: string;
|
|
767
|
+
/** How `id` was obtained. See {@link IdentityProvenance}. */
|
|
768
|
+
provenance?: IdentityProvenance;
|
|
769
|
+
/**
|
|
770
|
+
* False when the control is mounted but currently outside the window —
|
|
771
|
+
* below the fold of a ScrollView, scrolled off the top, pushed sideways
|
|
772
|
+
* by a carousel.
|
|
773
|
+
*
|
|
774
|
+
* ABSENT MEANS UNKNOWN. The old React Native architecture cannot report a
|
|
775
|
+
* synchronous window-relative rect, and no SDK published before this
|
|
776
|
+
* field existed reports one at all; reading absence as `false` would make
|
|
777
|
+
* the agent refuse to press a control the user is looking at.
|
|
778
|
+
*/
|
|
779
|
+
onScreen?: boolean;
|
|
708
780
|
/** Human-readable label — usually the visible text inside the button */
|
|
709
781
|
label?: string;
|
|
710
782
|
/** Whether the button is disabled */
|
|
711
783
|
disabled?: boolean;
|
|
712
784
|
/**
|
|
713
|
-
* Whether
|
|
714
|
-
*
|
|
715
|
-
*
|
|
785
|
+
* Whether this control is currently in its ON state.
|
|
786
|
+
*
|
|
787
|
+
* Covers both accessibility states that mean it, because the agent
|
|
788
|
+
* needs the same thing from either: `accessibilityState.selected`
|
|
789
|
+
* (grouped, mutually-exclusive controls — segmented controls, radio
|
|
790
|
+
* groups, each option its own pressable target) and
|
|
791
|
+
* `accessibilityState.checked` (an independent checkbox).
|
|
792
|
+
*
|
|
793
|
+
* Absent means "not on OR not observable" — the walker cannot tell a
|
|
794
|
+
* custom checkbox that declares no a11y state from an ordinary button,
|
|
795
|
+
* so absence is never proof that a box is unticked.
|
|
716
796
|
*/
|
|
717
797
|
selected?: boolean;
|
|
718
798
|
/** True when this button lives inside a currently-visible modal. */
|
|
@@ -721,6 +801,19 @@ interface ButtonSnapshot {
|
|
|
721
801
|
interface ToggleSnapshot {
|
|
722
802
|
/** Best identifier */
|
|
723
803
|
id?: string;
|
|
804
|
+
/** How `id` was obtained. See {@link IdentityProvenance}. */
|
|
805
|
+
provenance?: IdentityProvenance;
|
|
806
|
+
/**
|
|
807
|
+
* False when the control is mounted but currently outside the window —
|
|
808
|
+
* below the fold of a ScrollView, scrolled off the top, pushed sideways
|
|
809
|
+
* by a carousel.
|
|
810
|
+
*
|
|
811
|
+
* ABSENT MEANS UNKNOWN. The old React Native architecture cannot report a
|
|
812
|
+
* synchronous window-relative rect, and no SDK published before this
|
|
813
|
+
* field existed reports one at all; reading absence as `false` would make
|
|
814
|
+
* the agent refuse to press a control the user is looking at.
|
|
815
|
+
*/
|
|
816
|
+
onScreen?: boolean;
|
|
724
817
|
/** Human-readable label */
|
|
725
818
|
label?: string;
|
|
726
819
|
/** Current on/off state */
|
|
@@ -731,6 +824,19 @@ interface ToggleSnapshot {
|
|
|
731
824
|
interface SliderSnapshot {
|
|
732
825
|
/** Registry id — the executable handle. */
|
|
733
826
|
id?: string;
|
|
827
|
+
/** How `id` was obtained. See {@link IdentityProvenance}. */
|
|
828
|
+
provenance?: IdentityProvenance;
|
|
829
|
+
/**
|
|
830
|
+
* False when the control is mounted but currently outside the window —
|
|
831
|
+
* below the fold of a ScrollView, scrolled off the top, pushed sideways
|
|
832
|
+
* by a carousel.
|
|
833
|
+
*
|
|
834
|
+
* ABSENT MEANS UNKNOWN. The old React Native architecture cannot report a
|
|
835
|
+
* synchronous window-relative rect, and no SDK published before this
|
|
836
|
+
* field existed reports one at all; reading absence as `false` would make
|
|
837
|
+
* the agent refuse to press a control the user is looking at.
|
|
838
|
+
*/
|
|
839
|
+
onScreen?: boolean;
|
|
734
840
|
/** Human-readable label */
|
|
735
841
|
label?: string;
|
|
736
842
|
/** Current numeric value */
|
|
@@ -821,6 +927,51 @@ interface ListDataPreviewEntry {
|
|
|
821
927
|
/** Short human-readable projection of the item (capped length). */
|
|
822
928
|
text: string;
|
|
823
929
|
}
|
|
930
|
+
/**
|
|
931
|
+
* A scrollable surface that is NOT a collection — a long form, a detail
|
|
932
|
+
* page, a settings screen inside a `ScrollView`.
|
|
933
|
+
*
|
|
934
|
+
* It exists as its own concept, and not as a `ListSnapshot` with zero
|
|
935
|
+
* rows, because everything the agent knows how to do with a list
|
|
936
|
+
* (ordinals, totals, "select the third one") is meaningless here. The
|
|
937
|
+
* only affordance is paging toward content below the fold — and without
|
|
938
|
+
* it, a screen taller than the viewport ends at the fold.
|
|
939
|
+
*/
|
|
940
|
+
interface ScrollableSnapshot {
|
|
941
|
+
/** Runtime id — the handle `scroll_list` addresses. */
|
|
942
|
+
id: string;
|
|
943
|
+
/** The container component as observed: ScrollView, ... */
|
|
944
|
+
containerType: string;
|
|
945
|
+
/** Human-readable label if the app supplied one. */
|
|
946
|
+
label?: string;
|
|
947
|
+
/** Current scroll offset in px. */
|
|
948
|
+
scrollOffsetY?: number;
|
|
949
|
+
/** True when there is content above the viewport. */
|
|
950
|
+
canScrollUp?: boolean;
|
|
951
|
+
/** True when there is content below the viewport. */
|
|
952
|
+
canScrollDown?: boolean;
|
|
953
|
+
/** True when the surface scrolls sideways rather than vertically. */
|
|
954
|
+
horizontal?: boolean;
|
|
955
|
+
}
|
|
956
|
+
/**
|
|
957
|
+
* A platform dialog covering the screen — React Native's `Alert.alert`,
|
|
958
|
+
* an action sheet, an OS permission prompt.
|
|
959
|
+
*
|
|
960
|
+
* It renders outside React, so no amount of tree walking finds it. It
|
|
961
|
+
* has to be reported separately or the agent keeps operating the app
|
|
962
|
+
* underneath a dialog that blocks every real finger.
|
|
963
|
+
*/
|
|
964
|
+
interface NativeDialogSnapshot {
|
|
965
|
+
/** Stable for as long as this dialog is open. */
|
|
966
|
+
id: string;
|
|
967
|
+
title?: string;
|
|
968
|
+
message?: string;
|
|
969
|
+
/** The buttons the user can press. Never empty. */
|
|
970
|
+
buttons: Array<{
|
|
971
|
+
label: string;
|
|
972
|
+
style?: 'default' | 'cancel' | 'destructive';
|
|
973
|
+
}>;
|
|
974
|
+
}
|
|
824
975
|
interface ChoiceOptionSnapshot {
|
|
825
976
|
/** 1-indexed option position within this group. */
|
|
826
977
|
index: number;
|
|
@@ -875,6 +1026,24 @@ interface InteractionElementSnapshot {
|
|
|
875
1026
|
selected?: boolean;
|
|
876
1027
|
/** Source that produced the element. */
|
|
877
1028
|
source?: 'list' | 'button' | 'input' | 'toggle' | 'slider' | 'choice';
|
|
1029
|
+
/**
|
|
1030
|
+
* How the underlying control's identifier was obtained. Carried up from
|
|
1031
|
+
* the snapshot entry this element was derived from, so a consumer that
|
|
1032
|
+
* only reads `elements` still knows what it is trusting. See
|
|
1033
|
+
* {@link IdentityProvenance}.
|
|
1034
|
+
*/
|
|
1035
|
+
provenance?: IdentityProvenance;
|
|
1036
|
+
/**
|
|
1037
|
+
* False when the control is mounted but currently outside the window —
|
|
1038
|
+
* below the fold of a ScrollView, scrolled off the top, pushed sideways
|
|
1039
|
+
* by a carousel.
|
|
1040
|
+
*
|
|
1041
|
+
* ABSENT MEANS UNKNOWN. The old React Native architecture cannot report a
|
|
1042
|
+
* synchronous window-relative rect, and no SDK published before this
|
|
1043
|
+
* field existed reports one at all; reading absence as `false` would make
|
|
1044
|
+
* the agent refuse to press a control the user is looking at.
|
|
1045
|
+
*/
|
|
1046
|
+
onScreen?: boolean;
|
|
878
1047
|
/** Legacy/fallback target id, if any. */
|
|
879
1048
|
targetId?: string;
|
|
880
1049
|
/** Context for row/list options. */
|
|
@@ -885,6 +1054,37 @@ interface InteractionElementSnapshot {
|
|
|
885
1054
|
*/
|
|
886
1055
|
inModal?: boolean;
|
|
887
1056
|
}
|
|
1057
|
+
/** Window-relative box, in the coordinate space the platform reports. */
|
|
1058
|
+
interface ElementRect {
|
|
1059
|
+
x: number;
|
|
1060
|
+
y: number;
|
|
1061
|
+
width: number;
|
|
1062
|
+
height: number;
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* What the CLIENT keeps about an element, which is strictly more than what
|
|
1066
|
+
* the model is told about it.
|
|
1067
|
+
*
|
|
1068
|
+
* The wire shape (`InteractionElementSnapshot`) is sized for a language
|
|
1069
|
+
* model: names, roles, state, everything it needs to decide. This one adds
|
|
1070
|
+
* what only the executor needs — coordinates it will never read aloud —
|
|
1071
|
+
* and it exists because that data was being measured and then discarded
|
|
1072
|
+
* for want of somewhere to put it that wasn't the wire.
|
|
1073
|
+
*
|
|
1074
|
+
* The split is the point. Anything added here is free: it never reaches
|
|
1075
|
+
* `agentSnapshotSchema`, never crosses the network, and never costs a
|
|
1076
|
+
* token. Anything added to the wire type is paid for on every observation
|
|
1077
|
+
* of every session, so it has to earn the model's attention.
|
|
1078
|
+
*/
|
|
1079
|
+
interface InteractionElementEntry extends InteractionElementSnapshot {
|
|
1080
|
+
/**
|
|
1081
|
+
* Where the control was on screen when the snapshot was taken. Absent
|
|
1082
|
+
* when the platform cannot measure synchronously (React Native's old
|
|
1083
|
+
* architecture) or when the element came from a source with no fiber
|
|
1084
|
+
* behind it.
|
|
1085
|
+
*/
|
|
1086
|
+
rect?: ElementRect;
|
|
1087
|
+
}
|
|
888
1088
|
interface ScreenSnapshot {
|
|
889
1089
|
/** The currently active route name, if known */
|
|
890
1090
|
route: string | null;
|
|
@@ -902,6 +1102,15 @@ interface ScreenSnapshot {
|
|
|
902
1102
|
loading: boolean;
|
|
903
1103
|
/** Whether a modal is currently open */
|
|
904
1104
|
modalOpen: boolean;
|
|
1105
|
+
/**
|
|
1106
|
+
* A native dialog covering the screen, when the SDK could observe one.
|
|
1107
|
+
*
|
|
1108
|
+
* Its presence also forces `modalOpen`, because for every purpose the
|
|
1109
|
+
* agent cares about it IS a modal — nothing behind it is touchable.
|
|
1110
|
+
* Absence is not proof there is no dialog: an OS permission prompt or
|
|
1111
|
+
* a share sheet cannot be instrumented at all.
|
|
1112
|
+
*/
|
|
1113
|
+
nativeDialog?: NativeDialogSnapshot;
|
|
905
1114
|
/**
|
|
906
1115
|
* Lists detected in the visible tree. Each list's items have their
|
|
907
1116
|
* own per-item texts/buttons/inputs/toggles, NOT duplicated in the
|
|
@@ -914,6 +1123,12 @@ interface ScreenSnapshot {
|
|
|
914
1123
|
* for select-like flows where no text input exists.
|
|
915
1124
|
*/
|
|
916
1125
|
choiceGroups: ChoiceGroupSnapshot[];
|
|
1126
|
+
/**
|
|
1127
|
+
* Scrollable surfaces that carry no rows. Absent/empty means either
|
|
1128
|
+
* the screen does not scroll or the SDK could not observe that it
|
|
1129
|
+
* does — never that the visible content is all the content.
|
|
1130
|
+
*/
|
|
1131
|
+
scrollables?: ScrollableSnapshot[];
|
|
917
1132
|
/**
|
|
918
1133
|
* Interaction graph: visible actionable elements with stable ids,
|
|
919
1134
|
* semantic roles, labels, and execution fallbacks. Agents should
|
|
@@ -936,6 +1151,21 @@ interface ScreenSnapshot {
|
|
|
936
1151
|
stats?: {
|
|
937
1152
|
visitedFibers: number;
|
|
938
1153
|
skippedHidden: number;
|
|
1154
|
+
/**
|
|
1155
|
+
* How many controls the walker could name, and how well.
|
|
1156
|
+
*
|
|
1157
|
+
* `WalkDetectorCounts` counts RECOGNITIONS, not emissions, so a screen
|
|
1158
|
+
* whose controls were all silently dropped still reported healthy
|
|
1159
|
+
* detector numbers. This is the emission side: `positional` climbing is
|
|
1160
|
+
* the signal that an app needs annotating, and comparing it between a
|
|
1161
|
+
* debug and a release build is the first real measurement of what
|
|
1162
|
+
* minification costs the agent.
|
|
1163
|
+
*/
|
|
1164
|
+
identity?: {
|
|
1165
|
+
declared: number;
|
|
1166
|
+
derived: number;
|
|
1167
|
+
positional: number;
|
|
1168
|
+
};
|
|
939
1169
|
};
|
|
940
1170
|
}
|
|
941
1171
|
/**
|
|
@@ -1059,6 +1289,24 @@ interface AppilotsConfig {
|
|
|
1059
1289
|
* @default true
|
|
1060
1290
|
*/
|
|
1061
1291
|
suppressNativeConfirm?: boolean;
|
|
1292
|
+
/**
|
|
1293
|
+
* Record the app's own `Alert.alert` dialogs so the agent can SEE
|
|
1294
|
+
* them.
|
|
1295
|
+
*
|
|
1296
|
+
* A native dialog renders outside React, so it is invisible to the
|
|
1297
|
+
* tree walk — and because every press invokes the React handler
|
|
1298
|
+
* directly, the agent otherwise keeps operating the app underneath a
|
|
1299
|
+
* dialog that blocks every real finger. With tracking on, the
|
|
1300
|
+
* observation reports the dialog, presses behind it fail honestly,
|
|
1301
|
+
* and the agent can answer it.
|
|
1302
|
+
*
|
|
1303
|
+
* Like the suppression above, this replaces a global that belongs to
|
|
1304
|
+
* your app, so it is opt-outable: set `false` to keep `Alert.alert`
|
|
1305
|
+
* untouched — at the cost of the agent acting blind whenever one is
|
|
1306
|
+
* up. See `platform/nativeDialogTracking.ts`.
|
|
1307
|
+
* @default true
|
|
1308
|
+
*/
|
|
1309
|
+
trackNativeDialogs?: boolean;
|
|
1062
1310
|
}
|
|
1063
1311
|
interface AppilotsProviderProps {
|
|
1064
1312
|
/**
|
|
@@ -1646,4 +1894,4 @@ interface UseSuggestedPromptsReturn {
|
|
|
1646
1894
|
*/
|
|
1647
1895
|
declare function useSuggestedPrompts(options: UseSuggestedPromptsOptions): UseSuggestedPromptsReturn;
|
|
1648
1896
|
|
|
1649
|
-
export {
|
|
1897
|
+
export { componentRegistry as $, type AppilotsThemeTokens as A, type BreadcrumbItem as B, type ComponentRegistry as C, type ListSnapshot as D, type EscalationState as E, type FieldEntry as F, type RemotePersonalization as G, type SliderEntry as H, type InteractionElementEntry as I, type SuggestedPrompt as J, type ToggleEntry as K, type ListItemSnapshot as L, type MessageRole as M, type NavigationPayload as N, type ToggleSnapshot as O, type PartialThemeTokens as P, type UseAppilotsFieldOptions as Q, RateLimitedError as R, type ScreenSnapshot as S, type TargetEntry as T, type UIInteractionPayload as U, type UseAppilotsSliderOptions as V, type UseAppilotsTargetOptions as W, type UseAppilotsToggleOptions as X, type UseSuggestedPromptsOptions as Y, type UseSuggestedPromptsReturn as Z, clearAppilotsDebugTraces as _, type AppilotsLocale as a, createComponentRegistry as a0, defaultDarkTheme as a1, defaultLightTheme as a2, describeAction as a3, getAppilotsDebugTraces as a4, humanizeError as a5, mergeThemeTokens as a6, recordAppilotsDebugTrace as a7, subscribeAppilotsDebugTraces as a8, useAppilots as a9, useAppilotsActions as aa, useAppilotsChat as ab, useAppilotsContext as ac, useAppilotsField as ad, useAppilotsNavigation as ae, useAppilotsSlider as af, useAppilotsTarget as ag, useAppilotsToggle as ah, useSuggestedPrompts as ai, type AgentAction as b, type AgentPermissions as c, type AppilotsEvent as d, type AgentActionType as e, type AgentMessage as f, AppilotsClient as g, type AppilotsClientOptions as h, type AppilotsConfig as i, type AppilotsEventHandler as j, type AppilotsEventType as k, AppilotsProvider as l, type AppilotsProviderProps as m, type AppilotsTraceEntry as n, type AppilotsUser as o, type BreadcrumbState as p, type ButtonSnapshot as q, type ChatMessage as r, type ChoiceGroupSnapshot as s, type ChoiceOptionSnapshot as t, type ComponentEntry as u, type ComponentKind as v, type FormFillPayload as w, type InputSnapshot as x, type InteractionElementListContext as y, type InteractionElementSnapshot as z };
|