@syntrologie/adapt-gamification 2.8.0-canary.581 → 2.8.0-canary.583
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schema.d.ts +16 -16
- package/dist/schema.js +196 -181
- package/dist/schema.js.map +4 -4
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -638,14 +638,14 @@ export declare const AwardBadgeSchema: z.ZodObject<{
|
|
|
638
638
|
}, "strip", z.ZodTypeAny, {
|
|
639
639
|
type: "external";
|
|
640
640
|
endpoint: string;
|
|
641
|
-
default?: unknown;
|
|
642
641
|
method?: "GET" | "POST" | undefined;
|
|
642
|
+
default?: unknown;
|
|
643
643
|
timeoutMs?: number | undefined;
|
|
644
644
|
}, {
|
|
645
645
|
type: "external";
|
|
646
646
|
endpoint: string;
|
|
647
|
-
default?: unknown;
|
|
648
647
|
method?: "GET" | "POST" | undefined;
|
|
648
|
+
default?: unknown;
|
|
649
649
|
timeoutMs?: number | undefined;
|
|
650
650
|
}>]>>>;
|
|
651
651
|
} & {
|
|
@@ -741,8 +741,8 @@ export declare const AwardBadgeSchema: z.ZodObject<{
|
|
|
741
741
|
} | {
|
|
742
742
|
type: "external";
|
|
743
743
|
endpoint: string;
|
|
744
|
-
default?: unknown;
|
|
745
744
|
method?: "GET" | "POST" | undefined;
|
|
745
|
+
default?: unknown;
|
|
746
746
|
timeoutMs?: number | undefined;
|
|
747
747
|
} | null | undefined;
|
|
748
748
|
title?: string | undefined;
|
|
@@ -834,8 +834,8 @@ export declare const AwardBadgeSchema: z.ZodObject<{
|
|
|
834
834
|
} | {
|
|
835
835
|
type: "external";
|
|
836
836
|
endpoint: string;
|
|
837
|
-
default?: unknown;
|
|
838
837
|
method?: "GET" | "POST" | undefined;
|
|
838
|
+
default?: unknown;
|
|
839
839
|
timeoutMs?: number | undefined;
|
|
840
840
|
} | null | undefined;
|
|
841
841
|
title?: string | undefined;
|
|
@@ -1330,14 +1330,14 @@ export declare const AddPointsSchema: z.ZodObject<{
|
|
|
1330
1330
|
}, "strip", z.ZodTypeAny, {
|
|
1331
1331
|
type: "external";
|
|
1332
1332
|
endpoint: string;
|
|
1333
|
-
default?: unknown;
|
|
1334
1333
|
method?: "GET" | "POST" | undefined;
|
|
1334
|
+
default?: unknown;
|
|
1335
1335
|
timeoutMs?: number | undefined;
|
|
1336
1336
|
}, {
|
|
1337
1337
|
type: "external";
|
|
1338
1338
|
endpoint: string;
|
|
1339
|
-
default?: unknown;
|
|
1340
1339
|
method?: "GET" | "POST" | undefined;
|
|
1340
|
+
default?: unknown;
|
|
1341
1341
|
timeoutMs?: number | undefined;
|
|
1342
1342
|
}>]>>>;
|
|
1343
1343
|
} & {
|
|
@@ -1430,8 +1430,8 @@ export declare const AddPointsSchema: z.ZodObject<{
|
|
|
1430
1430
|
} | {
|
|
1431
1431
|
type: "external";
|
|
1432
1432
|
endpoint: string;
|
|
1433
|
-
default?: unknown;
|
|
1434
1433
|
method?: "GET" | "POST" | undefined;
|
|
1434
|
+
default?: unknown;
|
|
1435
1435
|
timeoutMs?: number | undefined;
|
|
1436
1436
|
} | null | undefined;
|
|
1437
1437
|
title?: string | undefined;
|
|
@@ -1520,8 +1520,8 @@ export declare const AddPointsSchema: z.ZodObject<{
|
|
|
1520
1520
|
} | {
|
|
1521
1521
|
type: "external";
|
|
1522
1522
|
endpoint: string;
|
|
1523
|
-
default?: unknown;
|
|
1524
1523
|
method?: "GET" | "POST" | undefined;
|
|
1524
|
+
default?: unknown;
|
|
1525
1525
|
timeoutMs?: number | undefined;
|
|
1526
1526
|
} | null | undefined;
|
|
1527
1527
|
title?: string | undefined;
|
|
@@ -2029,14 +2029,14 @@ export declare const actionStepSchemas: ({
|
|
|
2029
2029
|
}, "strip", z.ZodTypeAny, {
|
|
2030
2030
|
type: "external";
|
|
2031
2031
|
endpoint: string;
|
|
2032
|
-
default?: unknown;
|
|
2033
2032
|
method?: "GET" | "POST" | undefined;
|
|
2033
|
+
default?: unknown;
|
|
2034
2034
|
timeoutMs?: number | undefined;
|
|
2035
2035
|
}, {
|
|
2036
2036
|
type: "external";
|
|
2037
2037
|
endpoint: string;
|
|
2038
|
-
default?: unknown;
|
|
2039
2038
|
method?: "GET" | "POST" | undefined;
|
|
2039
|
+
default?: unknown;
|
|
2040
2040
|
timeoutMs?: number | undefined;
|
|
2041
2041
|
}>]>>>;
|
|
2042
2042
|
} & {
|
|
@@ -2132,8 +2132,8 @@ export declare const actionStepSchemas: ({
|
|
|
2132
2132
|
} | {
|
|
2133
2133
|
type: "external";
|
|
2134
2134
|
endpoint: string;
|
|
2135
|
-
default?: unknown;
|
|
2136
2135
|
method?: "GET" | "POST" | undefined;
|
|
2136
|
+
default?: unknown;
|
|
2137
2137
|
timeoutMs?: number | undefined;
|
|
2138
2138
|
} | null | undefined;
|
|
2139
2139
|
title?: string | undefined;
|
|
@@ -2225,8 +2225,8 @@ export declare const actionStepSchemas: ({
|
|
|
2225
2225
|
} | {
|
|
2226
2226
|
type: "external";
|
|
2227
2227
|
endpoint: string;
|
|
2228
|
-
default?: unknown;
|
|
2229
2228
|
method?: "GET" | "POST" | undefined;
|
|
2229
|
+
default?: unknown;
|
|
2230
2230
|
timeoutMs?: number | undefined;
|
|
2231
2231
|
} | null | undefined;
|
|
2232
2232
|
title?: string | undefined;
|
|
@@ -2720,14 +2720,14 @@ export declare const actionStepSchemas: ({
|
|
|
2720
2720
|
}, "strip", z.ZodTypeAny, {
|
|
2721
2721
|
type: "external";
|
|
2722
2722
|
endpoint: string;
|
|
2723
|
-
default?: unknown;
|
|
2724
2723
|
method?: "GET" | "POST" | undefined;
|
|
2724
|
+
default?: unknown;
|
|
2725
2725
|
timeoutMs?: number | undefined;
|
|
2726
2726
|
}, {
|
|
2727
2727
|
type: "external";
|
|
2728
2728
|
endpoint: string;
|
|
2729
|
-
default?: unknown;
|
|
2730
2729
|
method?: "GET" | "POST" | undefined;
|
|
2730
|
+
default?: unknown;
|
|
2731
2731
|
timeoutMs?: number | undefined;
|
|
2732
2732
|
}>]>>>;
|
|
2733
2733
|
} & {
|
|
@@ -2820,8 +2820,8 @@ export declare const actionStepSchemas: ({
|
|
|
2820
2820
|
} | {
|
|
2821
2821
|
type: "external";
|
|
2822
2822
|
endpoint: string;
|
|
2823
|
-
default?: unknown;
|
|
2824
2823
|
method?: "GET" | "POST" | undefined;
|
|
2824
|
+
default?: unknown;
|
|
2825
2825
|
timeoutMs?: number | undefined;
|
|
2826
2826
|
} | null | undefined;
|
|
2827
2827
|
title?: string | undefined;
|
|
@@ -2910,8 +2910,8 @@ export declare const actionStepSchemas: ({
|
|
|
2910
2910
|
} | {
|
|
2911
2911
|
type: "external";
|
|
2912
2912
|
endpoint: string;
|
|
2913
|
-
default?: unknown;
|
|
2914
2913
|
method?: "GET" | "POST" | undefined;
|
|
2914
|
+
default?: unknown;
|
|
2915
2915
|
timeoutMs?: number | undefined;
|
|
2916
2916
|
} | null | undefined;
|
|
2917
2917
|
title?: string | undefined;
|
package/dist/schema.js
CHANGED
|
@@ -10,6 +10,202 @@ function n(n2) {
|
|
|
10
10
|
// ../../sdk-contracts/dist/canvas-context.js
|
|
11
11
|
var canvasRuntimeContext = n("syntrologie:canvas-runtime");
|
|
12
12
|
|
|
13
|
+
// ../../sdk-contracts/dist/telemetry-events.js
|
|
14
|
+
var entry = (e2) => e2;
|
|
15
|
+
var TELEMETRY_EVENTS = {
|
|
16
|
+
// --- intervention metrics (April 2026) — wire names unchanged, all plan-scope
|
|
17
|
+
syntro_config_served: entry({
|
|
18
|
+
subject: "config",
|
|
19
|
+
verb: "served",
|
|
20
|
+
scope: "plan",
|
|
21
|
+
props: ["tiles", "actions"]
|
|
22
|
+
}),
|
|
23
|
+
syntro_intervention_seen: entry({
|
|
24
|
+
subject: "intervention",
|
|
25
|
+
verb: "seen",
|
|
26
|
+
scope: "plan",
|
|
27
|
+
props: ["intervention_id", "intervention_kind"]
|
|
28
|
+
}),
|
|
29
|
+
syntro_intervention_triggered: entry({
|
|
30
|
+
subject: "intervention",
|
|
31
|
+
verb: "triggered",
|
|
32
|
+
scope: "plan",
|
|
33
|
+
props: ["intervention_id", "intervention_kind"]
|
|
34
|
+
}),
|
|
35
|
+
syntro_intervention_interacted: entry({
|
|
36
|
+
subject: "intervention",
|
|
37
|
+
verb: "interacted",
|
|
38
|
+
scope: "plan",
|
|
39
|
+
props: ["intervention_id", "intervention_kind", "interaction_type"]
|
|
40
|
+
}),
|
|
41
|
+
// --- concierge (FEAT-1789150184) ---------------------------------------
|
|
42
|
+
syntro_concierge_opened: entry({
|
|
43
|
+
subject: "concierge",
|
|
44
|
+
verb: "opened",
|
|
45
|
+
scope: "open",
|
|
46
|
+
props: ["trigger", "page_path"]
|
|
47
|
+
// trigger: ConciergeOpenTrigger
|
|
48
|
+
}),
|
|
49
|
+
syntro_concierge_closed: entry({
|
|
50
|
+
subject: "concierge",
|
|
51
|
+
verb: "closed",
|
|
52
|
+
scope: "open",
|
|
53
|
+
props: ["duration_ms", "reason", "messages_sent", "tiles_dismissed", "pages_viewed"]
|
|
54
|
+
// reason: ConciergeCloseReason
|
|
55
|
+
}),
|
|
56
|
+
/**
|
|
57
|
+
* The shopper asked to leave the canvas by a link. Emitted on intent, before
|
|
58
|
+
* the host answers, so refused or denied opens are counted too (parity with
|
|
59
|
+
* syntro_concierge_closed reason navigation).
|
|
60
|
+
*
|
|
61
|
+
* On a merchant's own page a link tap closes the canvas, and
|
|
62
|
+
* `syntro_concierge_closed { reason: 'navigation' }` is the row that
|
|
63
|
+
* records it. Inside a chat app's card the frame is sandboxed: the canvas
|
|
64
|
+
* cannot navigate, does not close, and asks the host to open the link
|
|
65
|
+
* instead, so that close row never fires. This is its counterpart, and it
|
|
66
|
+
* carries the same `reason` so one query covers both surfaces.
|
|
67
|
+
*/
|
|
68
|
+
syntro_link_opened: entry({
|
|
69
|
+
subject: "link",
|
|
70
|
+
verb: "opened",
|
|
71
|
+
scope: "open",
|
|
72
|
+
props: ["kind", "reason"]
|
|
73
|
+
// kind: LinkOpenKind, reason: ConciergeCloseReason
|
|
74
|
+
}),
|
|
75
|
+
syntro_deck_paged: entry({
|
|
76
|
+
subject: "deck",
|
|
77
|
+
verb: "paged",
|
|
78
|
+
scope: "open",
|
|
79
|
+
props: ["from_index", "to_index", "method"]
|
|
80
|
+
// method: DeckPageMethod
|
|
81
|
+
}),
|
|
82
|
+
syntro_tile_dismissed: entry({
|
|
83
|
+
subject: "tile",
|
|
84
|
+
verb: "dismissed",
|
|
85
|
+
scope: "open",
|
|
86
|
+
props: ["tile_id", "tile_kind", "visible_ms"]
|
|
87
|
+
}),
|
|
88
|
+
// A tile's own data load finished: the network wait between the concierge
|
|
89
|
+
// mounting a tile and the shopper seeing its content (BUG-1784767817 was a
|
|
90
|
+
// 30 s reviews hang here). `outcome` is 'ok' | 'error'; `requested` is how
|
|
91
|
+
// many items the tile asked for, `received` how many came back.
|
|
92
|
+
syntro_tile_data_received: entry({
|
|
93
|
+
subject: "tile_data",
|
|
94
|
+
verb: "received",
|
|
95
|
+
scope: "open",
|
|
96
|
+
props: ["tile_id", "tile_kind", "total_ms", "outcome", "requested", "received"]
|
|
97
|
+
}),
|
|
98
|
+
// The three chat atoms are OPEN-scope: they carry `surface` / `open_id` and
|
|
99
|
+
// only make sense inside a concierge open. An INLINE chat bar (no concierge)
|
|
100
|
+
// still dispatches them on every turn, and the core drops each one and
|
|
101
|
+
// increments the `telemetry_dropped` health counter. That is EXPECTED on an
|
|
102
|
+
// inline-chat host page, not a bug — `telemetry_dropped` there mixes "real
|
|
103
|
+
// defect" with "inline chat has no open scope", so do not alert on it alone.
|
|
104
|
+
syntro_chat_message_sent: entry({
|
|
105
|
+
subject: "chat_message",
|
|
106
|
+
verb: "sent",
|
|
107
|
+
scope: "open",
|
|
108
|
+
props: ["turn", "chars", "via"]
|
|
109
|
+
// via: ChatSendVia
|
|
110
|
+
}),
|
|
111
|
+
syntro_chat_reply_received: entry({
|
|
112
|
+
subject: "chat_reply",
|
|
113
|
+
verb: "received",
|
|
114
|
+
scope: "open",
|
|
115
|
+
// mount_tools: the mount_* tool name of every mount this reply fired, in order (two product cards appear twice).
|
|
116
|
+
props: ["turn", "ttft_ms", "total_ms", "mounts", "cards", "mount_tools"]
|
|
117
|
+
}),
|
|
118
|
+
syntro_chat_interrupted: entry({
|
|
119
|
+
subject: "chat",
|
|
120
|
+
verb: "interrupted",
|
|
121
|
+
scope: "open",
|
|
122
|
+
props: ["turn", "after_ms"]
|
|
123
|
+
}),
|
|
124
|
+
syntro_chat_maximize_toggled: entry({
|
|
125
|
+
subject: "chat_maximize",
|
|
126
|
+
verb: "toggled",
|
|
127
|
+
scope: "open",
|
|
128
|
+
props: ["maximized"]
|
|
129
|
+
}),
|
|
130
|
+
syntro_chat_takeover_triggered: entry({
|
|
131
|
+
subject: "chat_takeover",
|
|
132
|
+
verb: "triggered",
|
|
133
|
+
scope: "open",
|
|
134
|
+
props: ["turn"]
|
|
135
|
+
}),
|
|
136
|
+
// --- search takeover (2026-09-17) ---------------------------------------
|
|
137
|
+
// All plan-scope: the search interceptor fires before any concierge open
|
|
138
|
+
// exists. No prop here ever carries query text (SEE the contract test's
|
|
139
|
+
// no-text-prop rule) — classification/signal_hits are the interceptor's
|
|
140
|
+
// own derived signals, never the string itself.
|
|
141
|
+
syntro_search_sent: entry({
|
|
142
|
+
subject: "search",
|
|
143
|
+
verb: "sent",
|
|
144
|
+
scope: "plan",
|
|
145
|
+
props: ["classification", "word_count", "signal_hits", "entry_point", "platform"]
|
|
146
|
+
// classification: SearchClassification, entry_point: SearchEntryPoint
|
|
147
|
+
}),
|
|
148
|
+
// `ms_to_skeleton` is intentionally the only timing prop: it is always
|
|
149
|
+
// knowable the instant the surface mounts. `ms_to_first_content` is NOT
|
|
150
|
+
// declared here (revision 1 defect) because a surface that never painted
|
|
151
|
+
// content still fires this event, and a required prop it cannot supply
|
|
152
|
+
// would make TelemetryCore.emit drop exactly the row worth measuring.
|
|
153
|
+
syntro_search_surface_seen: entry({
|
|
154
|
+
subject: "search_surface",
|
|
155
|
+
verb: "seen",
|
|
156
|
+
scope: "plan",
|
|
157
|
+
props: ["variant", "classification", "result_count", "ms_to_skeleton"]
|
|
158
|
+
// variant: SearchVariant, classification: SearchClassification
|
|
159
|
+
}),
|
|
160
|
+
syntro_search_result_tapped: entry({
|
|
161
|
+
subject: "search_result",
|
|
162
|
+
verb: "tapped",
|
|
163
|
+
scope: "plan",
|
|
164
|
+
props: ["variant", "region_id", "module", "position"]
|
|
165
|
+
// variant: SearchVariant
|
|
166
|
+
}),
|
|
167
|
+
syntro_search_followup_sent: entry({
|
|
168
|
+
subject: "search_followup",
|
|
169
|
+
verb: "sent",
|
|
170
|
+
scope: "plan",
|
|
171
|
+
props: ["delta_kind", "variant"]
|
|
172
|
+
// delta_kind: SearchDeltaKind, variant: SearchVariant
|
|
173
|
+
}),
|
|
174
|
+
// Declares `ms_since_boot` (not a "since surface mounted" timing prop) so a
|
|
175
|
+
// not-ready fallback the takeover never rendered is still measurable —
|
|
176
|
+
// revision 1 emitted nothing on this path.
|
|
177
|
+
syntro_search_native_served: entry({
|
|
178
|
+
subject: "search_native",
|
|
179
|
+
verb: "served",
|
|
180
|
+
scope: "plan",
|
|
181
|
+
props: ["reason", "platform", "ms_since_boot"]
|
|
182
|
+
// reason: SearchFallbackReason
|
|
183
|
+
}),
|
|
184
|
+
syntro_search_takeover_dismissed: entry({
|
|
185
|
+
subject: "search_takeover",
|
|
186
|
+
verb: "dismissed",
|
|
187
|
+
scope: "plan",
|
|
188
|
+
props: ["variant", "reason"]
|
|
189
|
+
// variant: SearchVariant, reason: SearchDismissReason
|
|
190
|
+
}),
|
|
191
|
+
// --- chat-app card lifecycle (2026-09-24) --------------------------------
|
|
192
|
+
// One row per stage a card reached, from `reportCardStage` in
|
|
193
|
+
// card-lifecycle.ts. Plan scope: most stages happen before a config is
|
|
194
|
+
// served and none happen inside a concierge open. `stage` is a
|
|
195
|
+
// CardLifecycleStage; `since_shell_ms` is the card shell's own clock, so a
|
|
196
|
+
// card's rows order themselves from the first byte of the page. The same
|
|
197
|
+
// stages reach the connector through the shell's beacon, which is the only
|
|
198
|
+
// record of a card whose SDK never booted.
|
|
199
|
+
syntro_card_lifecycle_seen: entry({
|
|
200
|
+
subject: "card_lifecycle",
|
|
201
|
+
verb: "seen",
|
|
202
|
+
scope: "plan",
|
|
203
|
+
props: ["stage", "since_shell_ms"]
|
|
204
|
+
// stage: CardLifecycleStage
|
|
205
|
+
})
|
|
206
|
+
};
|
|
207
|
+
var TELEMETRY_EVENT_NAMES = Object.keys(TELEMETRY_EVENTS);
|
|
208
|
+
|
|
13
209
|
// ../../sdk-contracts/dist/detector-events.js
|
|
14
210
|
var DETECTOR_EVENT_NAMES = [
|
|
15
211
|
"ui.hover",
|
|
@@ -4350,187 +4546,6 @@ var NotifyZ = external_exports.object({
|
|
|
4350
4546
|
icon: external_exports.string().optional().describe("Notification icon (emoji or URL)")
|
|
4351
4547
|
}).describe("Optional toast notification shown when this action triggers.").nullable().optional();
|
|
4352
4548
|
|
|
4353
|
-
// ../../sdk-contracts/dist/telemetry-events.js
|
|
4354
|
-
var entry = (e2) => e2;
|
|
4355
|
-
var TELEMETRY_EVENTS = {
|
|
4356
|
-
// --- intervention metrics (April 2026) — wire names unchanged, all plan-scope
|
|
4357
|
-
syntro_config_served: entry({
|
|
4358
|
-
subject: "config",
|
|
4359
|
-
verb: "served",
|
|
4360
|
-
scope: "plan",
|
|
4361
|
-
props: ["tiles", "actions"]
|
|
4362
|
-
}),
|
|
4363
|
-
syntro_intervention_seen: entry({
|
|
4364
|
-
subject: "intervention",
|
|
4365
|
-
verb: "seen",
|
|
4366
|
-
scope: "plan",
|
|
4367
|
-
props: ["intervention_id", "intervention_kind"]
|
|
4368
|
-
}),
|
|
4369
|
-
syntro_intervention_triggered: entry({
|
|
4370
|
-
subject: "intervention",
|
|
4371
|
-
verb: "triggered",
|
|
4372
|
-
scope: "plan",
|
|
4373
|
-
props: ["intervention_id", "intervention_kind"]
|
|
4374
|
-
}),
|
|
4375
|
-
syntro_intervention_interacted: entry({
|
|
4376
|
-
subject: "intervention",
|
|
4377
|
-
verb: "interacted",
|
|
4378
|
-
scope: "plan",
|
|
4379
|
-
props: ["intervention_id", "intervention_kind", "interaction_type"]
|
|
4380
|
-
}),
|
|
4381
|
-
// --- concierge (FEAT-1789150184) ---------------------------------------
|
|
4382
|
-
syntro_concierge_opened: entry({
|
|
4383
|
-
subject: "concierge",
|
|
4384
|
-
verb: "opened",
|
|
4385
|
-
scope: "open",
|
|
4386
|
-
props: ["trigger", "page_path"]
|
|
4387
|
-
// trigger: ConciergeOpenTrigger
|
|
4388
|
-
}),
|
|
4389
|
-
syntro_concierge_closed: entry({
|
|
4390
|
-
subject: "concierge",
|
|
4391
|
-
verb: "closed",
|
|
4392
|
-
scope: "open",
|
|
4393
|
-
props: ["duration_ms", "reason", "messages_sent", "tiles_dismissed", "pages_viewed"]
|
|
4394
|
-
// reason: ConciergeCloseReason
|
|
4395
|
-
}),
|
|
4396
|
-
/**
|
|
4397
|
-
* The shopper asked to leave the canvas by a link. Emitted on intent, before
|
|
4398
|
-
* the host answers, so refused or denied opens are counted too (parity with
|
|
4399
|
-
* syntro_concierge_closed reason navigation).
|
|
4400
|
-
*
|
|
4401
|
-
* On a merchant's own page a link tap closes the canvas, and
|
|
4402
|
-
* `syntro_concierge_closed { reason: 'navigation' }` is the row that
|
|
4403
|
-
* records it. Inside a chat app's card the frame is sandboxed: the canvas
|
|
4404
|
-
* cannot navigate, does not close, and asks the host to open the link
|
|
4405
|
-
* instead, so that close row never fires. This is its counterpart, and it
|
|
4406
|
-
* carries the same `reason` so one query covers both surfaces.
|
|
4407
|
-
*/
|
|
4408
|
-
syntro_link_opened: entry({
|
|
4409
|
-
subject: "link",
|
|
4410
|
-
verb: "opened",
|
|
4411
|
-
scope: "open",
|
|
4412
|
-
props: ["kind", "reason"]
|
|
4413
|
-
// kind: LinkOpenKind, reason: ConciergeCloseReason
|
|
4414
|
-
}),
|
|
4415
|
-
syntro_deck_paged: entry({
|
|
4416
|
-
subject: "deck",
|
|
4417
|
-
verb: "paged",
|
|
4418
|
-
scope: "open",
|
|
4419
|
-
props: ["from_index", "to_index", "method"]
|
|
4420
|
-
// method: DeckPageMethod
|
|
4421
|
-
}),
|
|
4422
|
-
syntro_tile_dismissed: entry({
|
|
4423
|
-
subject: "tile",
|
|
4424
|
-
verb: "dismissed",
|
|
4425
|
-
scope: "open",
|
|
4426
|
-
props: ["tile_id", "tile_kind", "visible_ms"]
|
|
4427
|
-
}),
|
|
4428
|
-
// A tile's own data load finished: the network wait between the concierge
|
|
4429
|
-
// mounting a tile and the shopper seeing its content (BUG-1784767817 was a
|
|
4430
|
-
// 30 s reviews hang here). `outcome` is 'ok' | 'error'; `requested` is how
|
|
4431
|
-
// many items the tile asked for, `received` how many came back.
|
|
4432
|
-
syntro_tile_data_received: entry({
|
|
4433
|
-
subject: "tile_data",
|
|
4434
|
-
verb: "received",
|
|
4435
|
-
scope: "open",
|
|
4436
|
-
props: ["tile_id", "tile_kind", "total_ms", "outcome", "requested", "received"]
|
|
4437
|
-
}),
|
|
4438
|
-
// The three chat atoms are OPEN-scope: they carry `surface` / `open_id` and
|
|
4439
|
-
// only make sense inside a concierge open. An INLINE chat bar (no concierge)
|
|
4440
|
-
// still dispatches them on every turn, and the core drops each one and
|
|
4441
|
-
// increments the `telemetry_dropped` health counter. That is EXPECTED on an
|
|
4442
|
-
// inline-chat host page, not a bug — `telemetry_dropped` there mixes "real
|
|
4443
|
-
// defect" with "inline chat has no open scope", so do not alert on it alone.
|
|
4444
|
-
syntro_chat_message_sent: entry({
|
|
4445
|
-
subject: "chat_message",
|
|
4446
|
-
verb: "sent",
|
|
4447
|
-
scope: "open",
|
|
4448
|
-
props: ["turn", "chars", "via"]
|
|
4449
|
-
// via: ChatSendVia
|
|
4450
|
-
}),
|
|
4451
|
-
syntro_chat_reply_received: entry({
|
|
4452
|
-
subject: "chat_reply",
|
|
4453
|
-
verb: "received",
|
|
4454
|
-
scope: "open",
|
|
4455
|
-
// mount_tools: the mount_* tool name of every mount this reply fired, in order (two product cards appear twice).
|
|
4456
|
-
props: ["turn", "ttft_ms", "total_ms", "mounts", "cards", "mount_tools"]
|
|
4457
|
-
}),
|
|
4458
|
-
syntro_chat_interrupted: entry({
|
|
4459
|
-
subject: "chat",
|
|
4460
|
-
verb: "interrupted",
|
|
4461
|
-
scope: "open",
|
|
4462
|
-
props: ["turn", "after_ms"]
|
|
4463
|
-
}),
|
|
4464
|
-
syntro_chat_maximize_toggled: entry({
|
|
4465
|
-
subject: "chat_maximize",
|
|
4466
|
-
verb: "toggled",
|
|
4467
|
-
scope: "open",
|
|
4468
|
-
props: ["maximized"]
|
|
4469
|
-
}),
|
|
4470
|
-
syntro_chat_takeover_triggered: entry({
|
|
4471
|
-
subject: "chat_takeover",
|
|
4472
|
-
verb: "triggered",
|
|
4473
|
-
scope: "open",
|
|
4474
|
-
props: ["turn"]
|
|
4475
|
-
}),
|
|
4476
|
-
// --- search takeover (2026-09-17) ---------------------------------------
|
|
4477
|
-
// All plan-scope: the search interceptor fires before any concierge open
|
|
4478
|
-
// exists. No prop here ever carries query text (SEE the contract test's
|
|
4479
|
-
// no-text-prop rule) — classification/signal_hits are the interceptor's
|
|
4480
|
-
// own derived signals, never the string itself.
|
|
4481
|
-
syntro_search_sent: entry({
|
|
4482
|
-
subject: "search",
|
|
4483
|
-
verb: "sent",
|
|
4484
|
-
scope: "plan",
|
|
4485
|
-
props: ["classification", "word_count", "signal_hits", "entry_point", "platform"]
|
|
4486
|
-
// classification: SearchClassification, entry_point: SearchEntryPoint
|
|
4487
|
-
}),
|
|
4488
|
-
// `ms_to_skeleton` is intentionally the only timing prop: it is always
|
|
4489
|
-
// knowable the instant the surface mounts. `ms_to_first_content` is NOT
|
|
4490
|
-
// declared here (revision 1 defect) because a surface that never painted
|
|
4491
|
-
// content still fires this event, and a required prop it cannot supply
|
|
4492
|
-
// would make TelemetryCore.emit drop exactly the row worth measuring.
|
|
4493
|
-
syntro_search_surface_seen: entry({
|
|
4494
|
-
subject: "search_surface",
|
|
4495
|
-
verb: "seen",
|
|
4496
|
-
scope: "plan",
|
|
4497
|
-
props: ["variant", "classification", "result_count", "ms_to_skeleton"]
|
|
4498
|
-
// variant: SearchVariant, classification: SearchClassification
|
|
4499
|
-
}),
|
|
4500
|
-
syntro_search_result_tapped: entry({
|
|
4501
|
-
subject: "search_result",
|
|
4502
|
-
verb: "tapped",
|
|
4503
|
-
scope: "plan",
|
|
4504
|
-
props: ["variant", "region_id", "module", "position"]
|
|
4505
|
-
// variant: SearchVariant
|
|
4506
|
-
}),
|
|
4507
|
-
syntro_search_followup_sent: entry({
|
|
4508
|
-
subject: "search_followup",
|
|
4509
|
-
verb: "sent",
|
|
4510
|
-
scope: "plan",
|
|
4511
|
-
props: ["delta_kind", "variant"]
|
|
4512
|
-
// delta_kind: SearchDeltaKind, variant: SearchVariant
|
|
4513
|
-
}),
|
|
4514
|
-
// Declares `ms_since_boot` (not a "since surface mounted" timing prop) so a
|
|
4515
|
-
// not-ready fallback the takeover never rendered is still measurable —
|
|
4516
|
-
// revision 1 emitted nothing on this path.
|
|
4517
|
-
syntro_search_native_served: entry({
|
|
4518
|
-
subject: "search_native",
|
|
4519
|
-
verb: "served",
|
|
4520
|
-
scope: "plan",
|
|
4521
|
-
props: ["reason", "platform", "ms_since_boot"]
|
|
4522
|
-
// reason: SearchFallbackReason
|
|
4523
|
-
}),
|
|
4524
|
-
syntro_search_takeover_dismissed: entry({
|
|
4525
|
-
subject: "search_takeover",
|
|
4526
|
-
verb: "dismissed",
|
|
4527
|
-
scope: "plan",
|
|
4528
|
-
props: ["variant", "reason"]
|
|
4529
|
-
// variant: SearchVariant, reason: SearchDismissReason
|
|
4530
|
-
})
|
|
4531
|
-
};
|
|
4532
|
-
var TELEMETRY_EVENT_NAMES = Object.keys(TELEMETRY_EVENTS);
|
|
4533
|
-
|
|
4534
4549
|
// src/schema.ts
|
|
4535
4550
|
var ActionTriggerZ = { triggerWhen: TriggerWhenZ };
|
|
4536
4551
|
var badgeSchema = external_exports.object({
|