@mobileai/react-native 0.9.11 → 0.9.12
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/lib/module/components/AIAgent.js +141 -22
- package/lib/module/components/AIAgent.js.map +1 -1
- package/lib/module/components/AgentChatBar.js +3 -14
- package/lib/module/components/AgentChatBar.js.map +1 -1
- package/lib/module/services/telemetry/TelemetryService.js +5 -2
- package/lib/module/services/telemetry/TelemetryService.js.map +1 -1
- package/lib/module/services/telemetry/deviceMetadata.js +10 -0
- package/lib/module/services/telemetry/deviceMetadata.js.map +1 -0
- package/lib/module/support/EscalationEventSource.js +168 -0
- package/lib/module/support/EscalationEventSource.js.map +1 -0
- package/lib/module/support/SupportChatModal.js +32 -4
- package/lib/module/support/SupportChatModal.js.map +1 -1
- package/lib/module/support/escalateTool.js +8 -2
- package/lib/module/support/escalateTool.js.map +1 -1
- package/lib/module/support/index.js +2 -0
- package/lib/module/support/index.js.map +1 -1
- package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
- package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +2 -1
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -1
- package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts +6 -0
- package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +1 -0
- package/lib/typescript/src/support/EscalationEventSource.d.ts +38 -0
- package/lib/typescript/src/support/EscalationEventSource.d.ts.map +1 -0
- package/lib/typescript/src/support/SupportChatModal.d.ts +3 -1
- package/lib/typescript/src/support/SupportChatModal.d.ts.map +1 -1
- package/lib/typescript/src/support/escalateTool.d.ts +1 -0
- package/lib/typescript/src/support/escalateTool.d.ts.map +1 -1
- package/lib/typescript/src/support/index.d.ts +1 -0
- package/lib/typescript/src/support/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/AIAgent.tsx +134 -21
- package/src/components/AgentChatBar.tsx +2 -9
- package/src/services/telemetry/TelemetryService.ts +6 -1
- package/src/services/telemetry/deviceMetadata.ts +13 -0
- package/src/support/EscalationEventSource.ts +190 -0
- package/src/support/SupportChatModal.tsx +58 -22
- package/src/support/escalateTool.ts +8 -2
- package/src/support/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EscalationSocket","ENDPOINTS","getDeviceId","logger","MOBILEAI_HOST","escalation","createEscalateTool","depsOrConfig","legacyGetContext","deps","config","getContext","getHistory","analyticsKey","onHumanReply","onEscalationStarted","onTypingChange","onTicketClosed","userContext","pushToken","pushTokenType","provider","socket","name","description","parameters","reason","type","required","execute","args","String","context","warn","history","slice","info","res","fetch","method","headers","body","JSON","stringify","screen","currentScreen","stepsBeforeEscalation","deviceId","ok","ticketId","wsUrl","json","disconnect","onReply","reply","replyTicketId","substring","v","closedTicketId","onError","err","error","connect","status","message","escalationMessage","escalationContext","conversationSummary","originalQuery","onEscalate"],"sourceRoot":"../../../src","sources":["support/escalateTool.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,gBAAgB,QAAQ,uBAAoB;AAErD,SAASC,SAAS,QAAQ,wBAAqB;AAC/C,SAASC,WAAW,QAAQ,iCAA8B;AAC1D,SAASC,MAAM,QAAQ,oBAAiB;AAExC,MAAMC,aAAa,
|
|
1
|
+
{"version":3,"names":["EscalationSocket","ENDPOINTS","getDeviceId","getDeviceMetadata","logger","MOBILEAI_HOST","escalation","createEscalateTool","depsOrConfig","legacyGetContext","deps","config","getContext","getHistory","analyticsKey","onHumanReply","onEscalationStarted","onTypingChange","onTicketClosed","userContext","pushToken","pushTokenType","getScreenFlow","provider","socket","name","description","parameters","reason","type","required","execute","args","String","context","warn","history","slice","info","res","fetch","method","headers","body","JSON","stringify","screen","currentScreen","stepsBeforeEscalation","device","screenFlow","deviceId","ok","ticketId","wsUrl","json","disconnect","onReply","reply","replyTicketId","substring","v","closedTicketId","onError","err","error","connect","status","message","escalationMessage","escalationContext","conversationSummary","originalQuery","onEscalate"],"sourceRoot":"../../../src","sources":["support/escalateTool.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,8 @@ export { buildSupportPrompt } from "./supportPrompt.js";
|
|
|
12
12
|
// Escalation tool + WebSocket manager
|
|
13
13
|
export { createEscalateTool } from "./escalateTool.js";
|
|
14
14
|
export { EscalationSocket } from "./EscalationSocket.js";
|
|
15
|
+
export { EscalationEventSource } from "./EscalationEventSource.js";
|
|
16
|
+
|
|
15
17
|
// UI Components
|
|
16
18
|
export { SupportGreeting } from "./SupportGreeting.js";
|
|
17
19
|
export { CSATSurvey } from "./CSATSurvey.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["buildSupportPrompt","createEscalateTool","EscalationSocket","SupportGreeting","CSATSurvey"],"sourceRoot":"../../../src","sources":["support/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA;;AAYA;AACA,SAASA,kBAAkB,QAAQ,oBAAiB;;AAEpD;AACA,SAASC,kBAAkB,QAAQ,mBAAgB;AACnD,SAASC,gBAAgB,QAAQ,uBAAoB;
|
|
1
|
+
{"version":3,"names":["buildSupportPrompt","createEscalateTool","EscalationSocket","EscalationEventSource","SupportGreeting","CSATSurvey"],"sourceRoot":"../../../src","sources":["support/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA;;AAYA;AACA,SAASA,kBAAkB,QAAQ,oBAAiB;;AAEpD;AACA,SAASC,kBAAkB,QAAQ,mBAAgB;AACnD,SAASC,gBAAgB,QAAQ,uBAAoB;AAErD,SAASC,qBAAqB,QAAQ,4BAAyB;;AAE/D;AACA,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,UAAU,QAAQ,iBAAc","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAgent.d.ts","sourceRoot":"","sources":["../../../../src/components/AIAgent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAC;AAgBf,OAAO,KAAK,EAA0B,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAa,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAgent.d.ts","sourceRoot":"","sources":["../../../../src/components/AIAgent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentChatBar.d.ts","sourceRoot":"","sources":["../../../../src/components/AgentChatBar.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAUzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,UAAU,iBAAiB;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,qBAAqB;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iCAAiC;IACjC,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuVD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,cAAyB,EACzB,IAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAmB,EACnB,cAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,OAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAqB,EACrB,eAAe,EACf,YAAiB,EACjB,WAAe,GAChB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"AgentChatBar.d.ts","sourceRoot":"","sources":["../../../../src/components/AgentChatBar.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAUzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,UAAU,iBAAiB;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,qBAAqB;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iCAAiC;IACjC,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuVD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,cAAyB,EACzB,IAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAmB,EACnB,cAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,OAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAqB,EACrB,eAAe,EACf,YAAiB,EACjB,WAAe,GAChB,EAAE,iBAAiB,2CA8NnB"}
|
|
@@ -14,11 +14,12 @@ export declare class TelemetryService {
|
|
|
14
14
|
private config;
|
|
15
15
|
private sessionId;
|
|
16
16
|
private currentScreen;
|
|
17
|
+
private screenFlow;
|
|
17
18
|
private flushTimer;
|
|
18
19
|
private isFlushing;
|
|
19
20
|
private appStateSubscription;
|
|
20
|
-
/** Public getter for the current screen, used by auto-capture utilities */
|
|
21
21
|
get screen(): string;
|
|
22
|
+
getScreenFlow(): string[];
|
|
22
23
|
/**
|
|
23
24
|
* True while the AI agent is executing a tool (tap, type, navigate, etc.).
|
|
24
25
|
* The touch interceptor checks this flag to avoid double-counting AI actions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../../../../src/services/telemetry/TelemetryService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsDnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAA6D;IAEzF,
|
|
1
|
+
{"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../../../../src/services/telemetry/TelemetryService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsDnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAA6D;IAEzF,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,aAAa,IAAI,MAAM,EAAE;IAIzB;;;;OAIG;IACH,aAAa,UAAS;IAEf,KAAK,EAAE,WAAW,CAAC;IAE1B,4DAA4D;IAC5D,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;gBAIzB,MAAM,EAAE,eAAe;IAgBnC,kDAAkD;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC5B,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B,sCAAsC;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAmC7D,8DAA8D;IAC9D,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAenC,0CAA0C;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C5B,oEAAoE;YACtD,YAAY;IAU1B,kDAAkD;YACpC,YAAY;IAkB1B,uCAAuC;IACvC,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/services/telemetry/deviceMetadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EscalationEventSource — SSE client using fetch + ReadableStream.
|
|
3
|
+
*
|
|
4
|
+
* Uses only the fetch API (available in all React Native runtimes)
|
|
5
|
+
* to consume Server-Sent Events — no EventSource polyfill needed.
|
|
6
|
+
* Provides a reliable, auto-reconnecting channel for server-push
|
|
7
|
+
* events like `ticket_closed` that complements the bidirectional
|
|
8
|
+
* WebSocket used for chat.
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle:
|
|
11
|
+
* 1. SDK calls connect() → fetch with streaming response
|
|
12
|
+
* 2. Server holds connection open, pushes `ticket_closed` when agent resolves
|
|
13
|
+
* 3. On disconnect, auto-reconnects with exponential backoff (max 5 attempts)
|
|
14
|
+
* 4. If ticket is already closed, server responds immediately with the event
|
|
15
|
+
*/
|
|
16
|
+
export interface EscalationEventSourceOptions {
|
|
17
|
+
url: string;
|
|
18
|
+
onTicketClosed?: (ticketId: string) => void;
|
|
19
|
+
onConnected?: (ticketId: string) => void;
|
|
20
|
+
onError?: (error: Error) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare class EscalationEventSource {
|
|
23
|
+
private abortController;
|
|
24
|
+
private intentionalClose;
|
|
25
|
+
private reconnectAttempts;
|
|
26
|
+
private reconnectTimer;
|
|
27
|
+
private readonly maxReconnectAttempts;
|
|
28
|
+
private readonly options;
|
|
29
|
+
constructor(options: EscalationEventSourceOptions);
|
|
30
|
+
connect(): void;
|
|
31
|
+
disconnect(): void;
|
|
32
|
+
private openConnection;
|
|
33
|
+
private readStream;
|
|
34
|
+
private readFullResponse;
|
|
35
|
+
private handleEvent;
|
|
36
|
+
private scheduleReconnect;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=EscalationEventSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EscalationEventSource.d.ts","sourceRoot":"","sources":["../../../../src/support/EscalationEventSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,EAAE,4BAA4B;IAIjD,OAAO,IAAI,IAAI;IAMf,UAAU,IAAI,IAAI;YAYJ,cAAc;YAkCd,UAAU;YAwCV,gBAAgB;IA2B9B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,iBAAiB;CAe1B"}
|
|
@@ -13,7 +13,9 @@ interface SupportChatModalProps {
|
|
|
13
13
|
isThinking?: boolean;
|
|
14
14
|
/** Optional: externally controlled scroll trigger. Pass when messages update externally. */
|
|
15
15
|
scrollToEndTrigger?: number;
|
|
16
|
+
/** Ticket status — when 'closed' or 'resolved', input is hidden and a banner is shown. */
|
|
17
|
+
ticketStatus?: string;
|
|
16
18
|
}
|
|
17
|
-
export declare function SupportChatModal({ visible, messages, onSend, onClose, isAgentTyping, isThinking, scrollToEndTrigger, }: SupportChatModalProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function SupportChatModal({ visible, messages, onSend, onClose, isAgentTyping, isThinking, scrollToEndTrigger, ticketStatus, }: SupportChatModalProps): import("react/jsx-runtime").JSX.Element;
|
|
18
20
|
export {};
|
|
19
21
|
//# sourceMappingURL=SupportChatModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupportChatModal.d.ts","sourceRoot":"","sources":["../../../../src/support/SupportChatModal.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SupportChatModal.d.ts","sourceRoot":"","sources":["../../../../src/support/SupportChatModal.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4CD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,OAAO,EACP,aAAqB,EACrB,UAAkB,EAClB,kBAAsB,EACtB,YAAY,GACb,EAAE,qBAAqB,2CAoLvB"}
|
|
@@ -18,6 +18,7 @@ export interface EscalationToolDeps {
|
|
|
18
18
|
role: string;
|
|
19
19
|
content: string;
|
|
20
20
|
}>;
|
|
21
|
+
getScreenFlow?: () => string[];
|
|
21
22
|
onHumanReply?: (reply: string, ticketId?: string) => void;
|
|
22
23
|
onEscalationStarted?: (ticketId: string, socket: EscalationSocket) => void;
|
|
23
24
|
onTypingChange?: (isTyping: boolean) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalateTool.d.ts","sourceRoot":"","sources":["../../../../src/support/escalateTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"escalateTool.d.ts","sourceRoot":"","sources":["../../../../src/support/escalateTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IACjE,UAAU,EAAE,MAAM,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3E,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;KACpD,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;AAC7E,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,GAC/D,cAAc,CAAC"}
|
|
@@ -6,6 +6,7 @@ export { buildSupportPrompt } from './supportPrompt';
|
|
|
6
6
|
export { createEscalateTool } from './escalateTool';
|
|
7
7
|
export { EscalationSocket } from './EscalationSocket';
|
|
8
8
|
export type { SocketReplyHandler } from './EscalationSocket';
|
|
9
|
+
export { EscalationEventSource } from './EscalationEventSource';
|
|
9
10
|
export { SupportGreeting } from './SupportGreeting';
|
|
10
11
|
export { CSATSurvey } from './CSATSurvey';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/support/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/support/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mobileai/react-native",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"description": "Build autonomous AI agents for React Native and Expo apps. Provides AI-native UI traversal, tool calling, and structured reasoning.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"source": "./src/index.ts",
|
|
@@ -37,6 +37,7 @@ import { IdleDetector } from '../core/IdleDetector';
|
|
|
37
37
|
import { ProactiveHint } from './ProactiveHint';
|
|
38
38
|
import { createEscalateTool } from '../support/escalateTool';
|
|
39
39
|
import { EscalationSocket } from '../support/EscalationSocket';
|
|
40
|
+
import { EscalationEventSource } from '../support/EscalationEventSource';
|
|
40
41
|
import { SupportChatModal } from '../support/SupportChatModal';
|
|
41
42
|
import { ENDPOINTS } from '../config/endpoints';
|
|
42
43
|
|
|
@@ -312,42 +313,100 @@ export function AIAgent({
|
|
|
312
313
|
// Cache of live sockets by ticketId — keeps sockets alive even when user
|
|
313
314
|
// navigates back to the ticket list, so new messages still trigger badge updates.
|
|
314
315
|
const pendingSocketsRef = useRef<Map<string, EscalationSocket>>(new Map());
|
|
316
|
+
// SSE connections per ticket — reliable fallback for ticket_closed events
|
|
317
|
+
// when the WebSocket is disconnected. EventSource auto-reconnects.
|
|
318
|
+
const sseRef = useRef<Map<string, EscalationEventSource>>(new Map());
|
|
315
319
|
|
|
316
320
|
const totalUnread = Object.values(unreadCounts).reduce((sum, count) => sum + count, 0);
|
|
317
321
|
|
|
322
|
+
// CRITICAL: clearSupport uses REFS and functional setters — never closure values.
|
|
323
|
+
// This function is captured by long-lived callbacks (escalation sockets, restored
|
|
324
|
+
// sockets) that may hold stale references. Using refs guarantees the current
|
|
325
|
+
// selectedTicketId and supportSocket are always read, not snapshot values.
|
|
318
326
|
const clearSupport = useCallback((ticketId?: string) => {
|
|
319
327
|
if (ticketId) {
|
|
320
|
-
// Remove specific ticket + its cached socket
|
|
328
|
+
// Remove specific ticket + its cached socket and SSE
|
|
321
329
|
const cached = pendingSocketsRef.current.get(ticketId);
|
|
322
330
|
if (cached) { cached.disconnect(); pendingSocketsRef.current.delete(ticketId); }
|
|
331
|
+
const sse = sseRef.current.get(ticketId);
|
|
332
|
+
if (sse) { sse.disconnect(); sseRef.current.delete(ticketId); }
|
|
323
333
|
setTickets(prev => prev.filter(t => t.id !== ticketId));
|
|
324
334
|
setUnreadCounts(prev => { const n = { ...prev }; delete n[ticketId]; return n; });
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
335
|
+
|
|
336
|
+
// If user was viewing this ticket, close the support modal + switch to ticket list
|
|
337
|
+
if (selectedTicketIdRef.current === ticketId) {
|
|
338
|
+
setSupportSocket(prev => { prev?.disconnect(); return null; });
|
|
328
339
|
setSelectedTicketId(null);
|
|
329
340
|
setIsLiveAgentTyping(false);
|
|
330
341
|
setMessages([]);
|
|
331
342
|
}
|
|
343
|
+
|
|
344
|
+
// If no tickets remain, switch back to text mode
|
|
345
|
+
setTickets(prev => {
|
|
346
|
+
if (prev.length === 0) {
|
|
347
|
+
setMode('text');
|
|
348
|
+
}
|
|
349
|
+
return prev;
|
|
350
|
+
});
|
|
332
351
|
} else {
|
|
333
|
-
// Clear all — disconnect every cached socket
|
|
352
|
+
// Clear all — disconnect every cached socket and SSE
|
|
334
353
|
pendingSocketsRef.current.forEach(s => s.disconnect());
|
|
335
354
|
pendingSocketsRef.current.clear();
|
|
336
|
-
|
|
337
|
-
|
|
355
|
+
sseRef.current.forEach(s => s.disconnect());
|
|
356
|
+
sseRef.current.clear();
|
|
357
|
+
setSupportSocket(prev => { prev?.disconnect(); return null; });
|
|
338
358
|
setSelectedTicketId(null);
|
|
339
359
|
setTickets([]);
|
|
340
360
|
setUnreadCounts({});
|
|
341
361
|
setIsLiveAgentTyping(false);
|
|
342
362
|
setMode('text');
|
|
343
363
|
}
|
|
344
|
-
}, [
|
|
364
|
+
}, []);
|
|
365
|
+
|
|
366
|
+
const openSSE = useCallback((ticketId: string) => {
|
|
367
|
+
if (sseRef.current.has(ticketId)) return;
|
|
368
|
+
if (!analyticsKey) return;
|
|
369
|
+
|
|
370
|
+
const sseUrl = `${ENDPOINTS.escalation}/api/v1/escalations/events?analyticsKey=${encodeURIComponent(analyticsKey)}&ticketId=${encodeURIComponent(ticketId)}`;
|
|
371
|
+
const sse = new EscalationEventSource({
|
|
372
|
+
url: sseUrl,
|
|
373
|
+
onTicketClosed: (tid) => {
|
|
374
|
+
logger.info('AIAgent', 'SSE: ticket_closed received for', tid);
|
|
375
|
+
setUnreadCounts(prev => {
|
|
376
|
+
const next = { ...prev };
|
|
377
|
+
delete next[tid];
|
|
378
|
+
return next;
|
|
379
|
+
});
|
|
380
|
+
clearSupport(tid);
|
|
381
|
+
},
|
|
382
|
+
onConnected: (tid) => {
|
|
383
|
+
logger.info('AIAgent', 'SSE: connected for ticket', tid);
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
sse.connect();
|
|
387
|
+
sseRef.current.set(ticketId, sse);
|
|
388
|
+
logger.info('AIAgent', 'SSE opened for ticket:', ticketId);
|
|
389
|
+
}, [analyticsKey, clearSupport]);
|
|
345
390
|
|
|
346
391
|
const clearMessages = useCallback(() => {
|
|
347
392
|
setMessages([]);
|
|
348
393
|
setLastResult(null);
|
|
349
394
|
}, []);
|
|
350
395
|
|
|
396
|
+
const getResolvedScreenName = useCallback(() => {
|
|
397
|
+
const routeName = (navRef as any)?.getCurrentRoute?.()?.name;
|
|
398
|
+
if (typeof routeName === 'string' && routeName.trim().length > 0) {
|
|
399
|
+
return routeName;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
const telemetryScreen = telemetryRef.current?.screen;
|
|
403
|
+
if (typeof telemetryScreen === 'string' && telemetryScreen !== 'Unknown') {
|
|
404
|
+
return telemetryScreen;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return 'unknown';
|
|
408
|
+
}, [navRef]);
|
|
409
|
+
|
|
351
410
|
// ─── Auto-create MobileAI escalation tool ─────────────────────
|
|
352
411
|
// When analyticsKey is present and consumer hasn't provided their own
|
|
353
412
|
// escalate_to_human tool, auto-wire the MobileAI platform provider.
|
|
@@ -359,12 +418,13 @@ export function AIAgent({
|
|
|
359
418
|
config: { provider: 'mobileai' },
|
|
360
419
|
analyticsKey,
|
|
361
420
|
getContext: () => ({
|
|
362
|
-
currentScreen: (
|
|
421
|
+
currentScreen: getResolvedScreenName(),
|
|
363
422
|
originalQuery: '',
|
|
364
423
|
stepsBeforeEscalation: 0,
|
|
365
424
|
}),
|
|
366
425
|
getHistory: () =>
|
|
367
426
|
messages.map((m) => ({ role: m.role, content: m.content })),
|
|
427
|
+
getScreenFlow: () => telemetryRef.current?.getScreenFlow() ?? [],
|
|
368
428
|
userContext,
|
|
369
429
|
pushToken,
|
|
370
430
|
pushTokenType,
|
|
@@ -372,15 +432,42 @@ export function AIAgent({
|
|
|
372
432
|
logger.info('AIAgent', '★★★ onEscalationStarted FIRED — ticketId:', tid);
|
|
373
433
|
// Cache the live socket so handleTicketSelect can reuse it without reconnecting
|
|
374
434
|
pendingSocketsRef.current.set(tid, socket);
|
|
435
|
+
// Open SSE for reliable ticket_closed delivery
|
|
436
|
+
openSSE(tid);
|
|
437
|
+
|
|
438
|
+
const currentScreen = getResolvedScreenName();
|
|
375
439
|
setTickets(prev => {
|
|
376
440
|
if (prev.find(t => t.id === tid)) {
|
|
377
441
|
logger.info('AIAgent', '★★★ Ticket already in list, skipping add');
|
|
378
442
|
return prev;
|
|
379
443
|
}
|
|
380
|
-
const newList = [{ id: tid, reason: '
|
|
444
|
+
const newList = [{ id: tid, reason: 'Connecting to agent...', screen: currentScreen, status: 'open', history: [], createdAt: new Date().toISOString(), wsUrl: '' }, ...prev];
|
|
381
445
|
logger.info('AIAgent', '★★★ Tickets updated, new length:', newList.length);
|
|
382
446
|
return newList;
|
|
383
447
|
});
|
|
448
|
+
|
|
449
|
+
// Fetch real ticket data from backend to replace the placeholder
|
|
450
|
+
void (async () => {
|
|
451
|
+
try {
|
|
452
|
+
const res = await fetch(`${ENDPOINTS.escalation}/api/v1/escalations/${tid}?analyticsKey=${encodeURIComponent(analyticsKey!)}`);
|
|
453
|
+
if (res.ok) {
|
|
454
|
+
const data = await res.json();
|
|
455
|
+
setTickets(prev => prev.map(t => {
|
|
456
|
+
if (t.id !== tid) return t;
|
|
457
|
+
return {
|
|
458
|
+
...t,
|
|
459
|
+
reason: data.reason || t.reason,
|
|
460
|
+
screen: data.screen || t.screen,
|
|
461
|
+
status: data.status || t.status,
|
|
462
|
+
history: Array.isArray(data.history) ? data.history : t.history,
|
|
463
|
+
};
|
|
464
|
+
}));
|
|
465
|
+
}
|
|
466
|
+
} catch {
|
|
467
|
+
// Best-effort — placeholder is still usable
|
|
468
|
+
}
|
|
469
|
+
})();
|
|
470
|
+
|
|
384
471
|
// Switch to human mode so the ticket LIST is visible — do NOT auto-select
|
|
385
472
|
setMode('human');
|
|
386
473
|
setAutoExpandTrigger(prev => {
|
|
@@ -432,11 +519,11 @@ export function AIAgent({
|
|
|
432
519
|
return next;
|
|
433
520
|
});
|
|
434
521
|
}
|
|
435
|
-
clearSupport(
|
|
522
|
+
clearSupport(ticketId);
|
|
436
523
|
},
|
|
437
524
|
});
|
|
438
525
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
439
|
-
}, [analyticsKey, navRef,
|
|
526
|
+
}, [analyticsKey, customTools, getResolvedScreenName, navRef, openSSE, userContext, pushToken, pushTokenType, messages, clearSupport]);
|
|
440
527
|
|
|
441
528
|
// ─── Restore pending tickets on app start ──────────────────────
|
|
442
529
|
useEffect(() => {
|
|
@@ -487,6 +574,11 @@ export function AIAgent({
|
|
|
487
574
|
setMode('human');
|
|
488
575
|
setAutoExpandTrigger(prev => prev + 1);
|
|
489
576
|
|
|
577
|
+
// Open SSE for every restored ticket — reliable ticket_closed delivery
|
|
578
|
+
for (const t of fetchedTickets) {
|
|
579
|
+
openSSE(t.id);
|
|
580
|
+
}
|
|
581
|
+
|
|
490
582
|
// If there is exactly one ticket, pre-wire its WebSocket so it is ready
|
|
491
583
|
// the moment the user taps the card (no extra connect delay).
|
|
492
584
|
if (fetchedTickets.length === 1) {
|
|
@@ -701,15 +793,19 @@ export function AIAgent({
|
|
|
701
793
|
const handleBackToTickets = useCallback(() => {
|
|
702
794
|
// Cache socket in pendingSocketsRef instead of disconnecting —
|
|
703
795
|
// keeps the WS alive so new messages update unreadCounts in real time.
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
796
|
+
const currentTicketId = selectedTicketIdRef.current;
|
|
797
|
+
// Use functional setter to read + cache the current socket without closure dependency
|
|
798
|
+
setSupportSocket(prev => {
|
|
799
|
+
if (prev && currentTicketId) {
|
|
800
|
+
pendingSocketsRef.current.set(currentTicketId, prev);
|
|
801
|
+
logger.info('AIAgent', '★ Socket cached for ticket:', currentTicketId, '— stays alive for badge updates');
|
|
802
|
+
}
|
|
803
|
+
return null;
|
|
804
|
+
});
|
|
709
805
|
setSelectedTicketId(null);
|
|
710
806
|
setMessages([]);
|
|
711
807
|
setIsLiveAgentTyping(false);
|
|
712
|
-
}, [
|
|
808
|
+
}, []); // No dependencies — uses refs/functional setters
|
|
713
809
|
|
|
714
810
|
const mergedCustomTools = useMemo(() => {
|
|
715
811
|
if (!autoEscalateTool) return customTools;
|
|
@@ -837,8 +933,13 @@ export function AIAgent({
|
|
|
837
933
|
telemetryRef.current = telemetry;
|
|
838
934
|
bindTelemetryService(telemetry);
|
|
839
935
|
telemetry.start();
|
|
936
|
+
|
|
937
|
+
const initialRoute = navRef?.getCurrentRoute?.();
|
|
938
|
+
if (initialRoute?.name) {
|
|
939
|
+
telemetry.setScreen(initialRoute.name);
|
|
940
|
+
}
|
|
840
941
|
}); // initDeviceId
|
|
841
|
-
}, [analyticsKey, analyticsProxyUrl, analyticsProxyHeaders, debug]);
|
|
942
|
+
}, [analyticsKey, analyticsProxyUrl, analyticsProxyHeaders, bindTelemetryService, debug, navRef]);
|
|
842
943
|
|
|
843
944
|
// ─── Security warnings ──────────────────────────────────────
|
|
844
945
|
|
|
@@ -1221,15 +1322,26 @@ export function AIAgent({
|
|
|
1221
1322
|
logger.info('AIAgent', `User message: "${message}"`);
|
|
1222
1323
|
setLastUserMessage(message.trim());
|
|
1223
1324
|
|
|
1224
|
-
// Intercom-style transparent intercept:
|
|
1325
|
+
// Intercom-style transparent intercept:
|
|
1225
1326
|
// If we're connected to a human agent, all text input goes directly to them.
|
|
1226
1327
|
if (selectedTicketId && supportSocket) {
|
|
1328
|
+
// Gate: do not allow sending if the ticket is closed/resolved.
|
|
1329
|
+
const activeTicket = tickets.find(t => t.id === selectedTicketId);
|
|
1330
|
+
const CLOSED_STATUSES = ['closed', 'resolved'];
|
|
1331
|
+
if (activeTicket && CLOSED_STATUSES.includes(activeTicket.status)) {
|
|
1332
|
+
setLastResult({
|
|
1333
|
+
success: false,
|
|
1334
|
+
message: 'This conversation is closed. Please start a new request.',
|
|
1335
|
+
steps: [],
|
|
1336
|
+
});
|
|
1337
|
+
return;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1227
1340
|
if (supportSocket.sendText(message)) {
|
|
1228
1341
|
setMessages((prev) => [
|
|
1229
1342
|
...prev,
|
|
1230
1343
|
{ id: `user-${Date.now()}`, role: 'user', content: message.trim(), timestamp: Date.now() },
|
|
1231
1344
|
]);
|
|
1232
|
-
|
|
1233
1345
|
setIsThinking(true);
|
|
1234
1346
|
setStatusText('Sending to agent...');
|
|
1235
1347
|
setTimeout(() => {
|
|
@@ -1506,6 +1618,7 @@ export function AIAgent({
|
|
|
1506
1618
|
isAgentTyping={isLiveAgentTyping}
|
|
1507
1619
|
isThinking={isThinking}
|
|
1508
1620
|
scrollToEndTrigger={chatScrollTrigger}
|
|
1621
|
+
ticketStatus={tickets.find(t => t.id === selectedTicketId)?.status}
|
|
1509
1622
|
/>
|
|
1510
1623
|
</View>
|
|
1511
1624
|
</View>
|
|
@@ -637,7 +637,6 @@ export function AgentChatBar({
|
|
|
637
637
|
)}
|
|
638
638
|
</View>
|
|
639
639
|
<View style={styles.ticketMeta}>
|
|
640
|
-
<Text style={styles.ticketScreen}>{ticket.screen}</Text>
|
|
641
640
|
<Text style={[styles.ticketStatus, ticket.status === 'open' && styles.statusOpen]}>
|
|
642
641
|
{ticket.status}
|
|
643
642
|
</Text>
|
|
@@ -837,10 +836,7 @@ const styles = StyleSheet.create({
|
|
|
837
836
|
alignItems: 'center',
|
|
838
837
|
marginTop: 6,
|
|
839
838
|
},
|
|
840
|
-
|
|
841
|
-
color: 'rgba(255, 255, 255, 0.5)',
|
|
842
|
-
fontSize: 12,
|
|
843
|
-
},
|
|
839
|
+
|
|
844
840
|
ticketStatus: {
|
|
845
841
|
fontSize: 11,
|
|
846
842
|
fontWeight: '600',
|
|
@@ -1080,10 +1076,7 @@ const audioStyles = StyleSheet.create({
|
|
|
1080
1076
|
alignItems: 'center',
|
|
1081
1077
|
marginTop: 6,
|
|
1082
1078
|
},
|
|
1083
|
-
|
|
1084
|
-
color: 'rgba(255, 255, 255, 0.5)',
|
|
1085
|
-
fontSize: 12,
|
|
1086
|
-
},
|
|
1079
|
+
|
|
1087
1080
|
ticketStatus: {
|
|
1088
1081
|
fontSize: 11,
|
|
1089
1082
|
fontWeight: '600',
|
|
@@ -76,15 +76,19 @@ export class TelemetryService {
|
|
|
76
76
|
private config: TelemetryConfig;
|
|
77
77
|
private sessionId: string;
|
|
78
78
|
private currentScreen = 'Unknown';
|
|
79
|
+
private screenFlow: string[] = [];
|
|
79
80
|
private flushTimer: ReturnType<typeof setInterval> | null = null;
|
|
80
81
|
private isFlushing = false;
|
|
81
82
|
private appStateSubscription: ReturnType<typeof AppState.addEventListener> | null = null;
|
|
82
83
|
|
|
83
|
-
/** Public getter for the current screen, used by auto-capture utilities */
|
|
84
84
|
get screen(): string {
|
|
85
85
|
return this.currentScreen;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
getScreenFlow(): string[] {
|
|
89
|
+
return [...this.screenFlow];
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
/**
|
|
89
93
|
* True while the AI agent is executing a tool (tap, type, navigate, etc.).
|
|
90
94
|
* The touch interceptor checks this flag to avoid double-counting AI actions
|
|
@@ -224,6 +228,7 @@ export class TelemetryService {
|
|
|
224
228
|
if (this.currentScreen !== screenName) {
|
|
225
229
|
const prevScreen = this.currentScreen;
|
|
226
230
|
this.currentScreen = screenName;
|
|
231
|
+
this.screenFlow.push(screenName);
|
|
227
232
|
|
|
228
233
|
this.track('screen_view', {
|
|
229
234
|
screen: screenName,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
export interface DeviceMetadata {
|
|
4
|
+
platform: string;
|
|
5
|
+
osVersion: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function getDeviceMetadata(): DeviceMetadata {
|
|
9
|
+
return {
|
|
10
|
+
platform: Platform.OS === 'ios' ? 'iOS' : Platform.OS === 'android' ? 'Android' : Platform.OS,
|
|
11
|
+
osVersion: String(Platform.Version),
|
|
12
|
+
};
|
|
13
|
+
}
|