@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.
Files changed (39) hide show
  1. package/lib/module/components/AIAgent.js +141 -22
  2. package/lib/module/components/AIAgent.js.map +1 -1
  3. package/lib/module/components/AgentChatBar.js +3 -14
  4. package/lib/module/components/AgentChatBar.js.map +1 -1
  5. package/lib/module/services/telemetry/TelemetryService.js +5 -2
  6. package/lib/module/services/telemetry/TelemetryService.js.map +1 -1
  7. package/lib/module/services/telemetry/deviceMetadata.js +10 -0
  8. package/lib/module/services/telemetry/deviceMetadata.js.map +1 -0
  9. package/lib/module/support/EscalationEventSource.js +168 -0
  10. package/lib/module/support/EscalationEventSource.js.map +1 -0
  11. package/lib/module/support/SupportChatModal.js +32 -4
  12. package/lib/module/support/SupportChatModal.js.map +1 -1
  13. package/lib/module/support/escalateTool.js +8 -2
  14. package/lib/module/support/escalateTool.js.map +1 -1
  15. package/lib/module/support/index.js +2 -0
  16. package/lib/module/support/index.js.map +1 -1
  17. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  18. package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
  19. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +2 -1
  20. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -1
  21. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts +6 -0
  22. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +1 -0
  23. package/lib/typescript/src/support/EscalationEventSource.d.ts +38 -0
  24. package/lib/typescript/src/support/EscalationEventSource.d.ts.map +1 -0
  25. package/lib/typescript/src/support/SupportChatModal.d.ts +3 -1
  26. package/lib/typescript/src/support/SupportChatModal.d.ts.map +1 -1
  27. package/lib/typescript/src/support/escalateTool.d.ts +1 -0
  28. package/lib/typescript/src/support/escalateTool.d.ts.map +1 -1
  29. package/lib/typescript/src/support/index.d.ts +1 -0
  30. package/lib/typescript/src/support/index.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/components/AIAgent.tsx +134 -21
  33. package/src/components/AgentChatBar.tsx +2 -9
  34. package/src/services/telemetry/TelemetryService.ts +6 -1
  35. package/src/services/telemetry/deviceMetadata.ts +13 -0
  36. package/src/support/EscalationEventSource.ts +190 -0
  37. package/src/support/SupportChatModal.tsx +58 -22
  38. package/src/support/escalateTool.ts +8 -2
  39. 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":"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","ignoreList":[]}
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;AAGrD;AACA,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,UAAU,QAAQ,iBAAc","ignoreList":[]}
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":"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"}
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,2CA+NnB"}
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,2EAA2E;IAC3E,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;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;IAcnC,0CAA0C;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C5B,oEAAoE;YACtD,YAAY;IAU1B,kDAAkD;YACpC,YAAY;IAkB1B,uCAAuC;IACvC,OAAO,CAAC,SAAS;CAGlB"}
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,6 @@
1
+ export interface DeviceMetadata {
2
+ platform: string;
3
+ osVersion: string;
4
+ }
5
+ export declare function getDeviceMetadata(): DeviceMetadata;
6
+ //# sourceMappingURL=deviceMetadata.d.ts.map
@@ -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;CAC7B;AA0CD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,OAAO,EACP,aAAqB,EACrB,UAAkB,EAClB,kBAAsB,GACvB,EAAE,qBAAqB,2CAyKvB"}
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;AAQtD,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,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"}
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;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,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.11",
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
- if (selectedTicketId === ticketId) {
326
- supportSocket?.disconnect();
327
- setSupportSocket(null);
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
- supportSocket?.disconnect();
337
- setSupportSocket(null);
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
- }, [supportSocket, selectedTicketId]);
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: (navRef as any)?.getCurrentRoute?.()?.name ?? 'unknown',
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: 'New escalation', screen: 'unknown', status: 'open', history: [], createdAt: new Date().toISOString(), wsUrl: '' }, ...prev];
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(selectedTicketId ?? undefined);
522
+ clearSupport(ticketId);
436
523
  },
437
524
  });
438
525
  // eslint-disable-next-line react-hooks/exhaustive-deps
439
- }, [analyticsKey, navRef, customTools]);
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
- if (supportSocket && selectedTicketId) {
705
- pendingSocketsRef.current.set(selectedTicketId, supportSocket);
706
- logger.info('AIAgent', '★ Socket cached for ticket:', selectedTicketId, '— stays alive for badge updates');
707
- }
708
- setSupportSocket(null);
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
- }, [supportSocket, selectedTicketId]);
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
- ticketScreen: {
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
- ticketScreen: {
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
+ }