@mobileai/react-native 0.9.11 → 0.9.13

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 (68) hide show
  1. package/README.md +480 -61
  2. package/lib/module/components/AIAgent.js +202 -25
  3. package/lib/module/components/AIAgent.js.map +1 -1
  4. package/lib/module/components/AgentChatBar.js +15 -16
  5. package/lib/module/components/AgentChatBar.js.map +1 -1
  6. package/lib/module/components/DiscoveryTooltip.js +128 -0
  7. package/lib/module/components/DiscoveryTooltip.js.map +1 -0
  8. package/lib/module/core/AgentRuntime.js +77 -1
  9. package/lib/module/core/AgentRuntime.js.map +1 -1
  10. package/lib/module/core/FiberTreeWalker.js +5 -1
  11. package/lib/module/core/FiberTreeWalker.js.map +1 -1
  12. package/lib/module/core/systemPrompt.js +41 -3
  13. package/lib/module/core/systemPrompt.js.map +1 -1
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/module/services/telemetry/TelemetryService.js +5 -2
  16. package/lib/module/services/telemetry/TelemetryService.js.map +1 -1
  17. package/lib/module/services/telemetry/deviceMetadata.js +10 -0
  18. package/lib/module/services/telemetry/deviceMetadata.js.map +1 -0
  19. package/lib/module/support/EscalationEventSource.js +168 -0
  20. package/lib/module/support/EscalationEventSource.js.map +1 -0
  21. package/lib/module/support/SupportChatModal.js +32 -4
  22. package/lib/module/support/SupportChatModal.js.map +1 -1
  23. package/lib/module/support/escalateTool.js +8 -2
  24. package/lib/module/support/escalateTool.js.map +1 -1
  25. package/lib/module/support/index.js +2 -0
  26. package/lib/module/support/index.js.map +1 -1
  27. package/lib/typescript/src/components/AIAgent.d.ts +18 -2
  28. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  29. package/lib/typescript/src/components/AgentChatBar.d.ts +5 -1
  30. package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
  31. package/lib/typescript/src/components/DiscoveryTooltip.d.ts +15 -0
  32. package/lib/typescript/src/components/DiscoveryTooltip.d.ts.map +1 -0
  33. package/lib/typescript/src/core/AgentRuntime.d.ts +7 -0
  34. package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
  35. package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +1 -1
  36. package/lib/typescript/src/core/systemPrompt.d.ts +1 -1
  37. package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
  38. package/lib/typescript/src/core/types.d.ts +19 -0
  39. package/lib/typescript/src/core/types.d.ts.map +1 -1
  40. package/lib/typescript/src/index.d.ts +1 -1
  41. package/lib/typescript/src/index.d.ts.map +1 -1
  42. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +2 -1
  43. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -1
  44. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts +6 -0
  45. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +1 -0
  46. package/lib/typescript/src/support/EscalationEventSource.d.ts +38 -0
  47. package/lib/typescript/src/support/EscalationEventSource.d.ts.map +1 -0
  48. package/lib/typescript/src/support/SupportChatModal.d.ts +3 -1
  49. package/lib/typescript/src/support/SupportChatModal.d.ts.map +1 -1
  50. package/lib/typescript/src/support/escalateTool.d.ts +1 -0
  51. package/lib/typescript/src/support/escalateTool.d.ts.map +1 -1
  52. package/lib/typescript/src/support/index.d.ts +1 -0
  53. package/lib/typescript/src/support/index.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/src/components/AIAgent.tsx +209 -22
  56. package/src/components/AgentChatBar.tsx +21 -10
  57. package/src/components/DiscoveryTooltip.tsx +148 -0
  58. package/src/core/AgentRuntime.ts +87 -1
  59. package/src/core/FiberTreeWalker.ts +5 -0
  60. package/src/core/systemPrompt.ts +41 -3
  61. package/src/core/types.ts +21 -0
  62. package/src/index.ts +1 -0
  63. package/src/services/telemetry/TelemetryService.ts +6 -1
  64. package/src/services/telemetry/deviceMetadata.ts +13 -0
  65. package/src/support/EscalationEventSource.ts +190 -0
  66. package/src/support/SupportChatModal.tsx +58 -22
  67. package/src/support/escalateTool.ts +8 -2
  68. package/src/support/index.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export { AudioOutputService } from './services/AudioOutputService';
18
18
  export { KnowledgeBaseService } from './services/KnowledgeBaseService';
19
19
  export { MobileAI } from './services/telemetry';
20
20
  export { logger } from './utils/logger';
21
- export type { AgentConfig, AgentMode, ExecutionResult, InteractiveElement, DehydratedScreen, ToolDefinition, ActionDefinition, TokenUsage, KnowledgeEntry, KnowledgeRetriever, KnowledgeBaseConfig, ChatBarTheme, AIMessage, AIProviderName, ScreenMap, ScreenMapEntry, } from './core/types';
21
+ export type { AgentConfig, AgentMode, ExecutionResult, InteractiveElement, DehydratedScreen, ToolDefinition, ActionDefinition, TokenUsage, KnowledgeEntry, KnowledgeRetriever, KnowledgeBaseConfig, ChatBarTheme, AIMessage, AIProviderName, ScreenMap, ScreenMapEntry, InteractionMode, } from './core/types';
22
22
  export type { VoiceServiceConfig, VoiceServiceCallbacks, VoiceStatus, } from './services/VoiceService';
23
23
  export type { TelemetryConfig, TelemetryEvent, } from './services/telemetry';
24
24
  export { SupportGreeting, CSATSurvey, buildSupportPrompt, createEscalateTool, EscalationSocket } from './support';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElH,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,GACd,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElH,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,GACd,MAAM,WAAW,CAAC"}
@@ -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.13",
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",
@@ -30,18 +30,43 @@ import { AudioOutputService } from '../services/AudioOutputService';
30
30
  import { TelemetryService, bindTelemetryService } from '../services/telemetry';
31
31
  import { extractTouchLabel, checkRageClick } from '../services/telemetry/TouchAutoCapture';
32
32
  import { initDeviceId, getDeviceId } from '../services/telemetry/device';
33
- import type { AgentConfig, AgentMode, ExecutionResult, ToolDefinition, AgentStep, TokenUsage, KnowledgeBaseConfig, ChatBarTheme, AIMessage, AIProviderName, ScreenMap, ProactiveHelpConfig } from '../core/types';
33
+ import type { AgentConfig, AgentMode, ExecutionResult, ToolDefinition, AgentStep, TokenUsage, KnowledgeBaseConfig, ChatBarTheme, AIMessage, AIProviderName, ScreenMap, ProactiveHelpConfig, InteractionMode } from '../core/types';
34
34
  import { AgentErrorBoundary } from './AgentErrorBoundary';
35
35
  import { HighlightOverlay } from './HighlightOverlay';
36
36
  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
 
43
44
  // ─── Context ───────────────────────────────────────────────────
44
45
 
46
+ // ─── AsyncStorage Helper (same pattern as TicketStore) ─────────
47
+
48
+ /** Try to load AsyncStorage for tooltip persistence. Optional peer dep. */
49
+ function getTooltipStorage(): any | null {
50
+ try {
51
+ const origError = console.error;
52
+ console.error = (...args: unknown[]) => {
53
+ const msg = args[0];
54
+ if (typeof msg === 'string' && msg.includes('AsyncStorage')) return;
55
+ origError.apply(console, args);
56
+ };
57
+ try {
58
+ const mod = require('@react-native-async-storage/async-storage');
59
+ const candidate = mod?.default ?? mod?.AsyncStorage ?? null;
60
+ if (candidate && typeof candidate.getItem === 'function') return candidate;
61
+ return null;
62
+ } finally {
63
+ console.error = origError;
64
+ }
65
+ } catch {
66
+ return null;
67
+ }
68
+ }
69
+
45
70
  // ─── Props ─────────────────────────────────────────────────────
46
71
 
47
72
  interface AIAgentProps {
@@ -222,6 +247,24 @@ interface AIAgentProps {
222
247
  * "fcm" is recommended for universal bare/Expo support.
223
248
  */
224
249
  pushTokenType?: 'fcm' | 'expo' | 'apns';
250
+
251
+ /**
252
+ * Controls how the agent handles irreversible UI actions.
253
+ * 'copilot' (default): AI pauses before final commit actions (place order, delete, submit).
254
+ * 'autopilot': Full autonomy — all actions execute without confirmation.
255
+ *
256
+ * In copilot mode, the AI works silently (navigates, fills forms, scrolls) and
257
+ * pauses ONCE before the final irreversible action. Elements with aiConfirm={true}
258
+ * also trigger a code-level confirmation gate as a safety net.
259
+ */
260
+ interactionMode?: InteractionMode;
261
+
262
+ /**
263
+ * Show a one-time discovery tooltip above the chat FAB.
264
+ * Tells new users the AI can navigate and interact with the app.
265
+ * Default: true (shows once, then remembered via AsyncStorage)
266
+ */
267
+ showDiscoveryTooltip?: boolean;
225
268
  }
226
269
 
227
270
 
@@ -274,6 +317,8 @@ export function AIAgent({
274
317
  userContext,
275
318
  pushToken,
276
319
  pushTokenType,
320
+ interactionMode,
321
+ showDiscoveryTooltip: showDiscoveryTooltipProp = true,
277
322
  }: AIAgentProps) {
278
323
  // Configure logger based on debug prop
279
324
  React.useEffect(() => {
@@ -312,42 +357,127 @@ export function AIAgent({
312
357
  // Cache of live sockets by ticketId — keeps sockets alive even when user
313
358
  // navigates back to the ticket list, so new messages still trigger badge updates.
314
359
  const pendingSocketsRef = useRef<Map<string, EscalationSocket>>(new Map());
360
+ // SSE connections per ticket — reliable fallback for ticket_closed events
361
+ // when the WebSocket is disconnected. EventSource auto-reconnects.
362
+ const sseRef = useRef<Map<string, EscalationEventSource>>(new Map());
315
363
 
316
364
  const totalUnread = Object.values(unreadCounts).reduce((sum, count) => sum + count, 0);
317
365
 
366
+ // ── Discovery Tooltip (one-time) ──────────────────────────
367
+ const [tooltipVisible, setTooltipVisible] = useState(false);
368
+
369
+ useEffect(() => {
370
+ if (!showDiscoveryTooltipProp) return;
371
+ void (async () => {
372
+ try {
373
+ const AS = getTooltipStorage();
374
+ if (!AS) { setTooltipVisible(true); return; }
375
+ const seen = await AS.getItem('@mobileai_tooltip_seen');
376
+ if (!seen) setTooltipVisible(true);
377
+ } catch {
378
+ setTooltipVisible(true);
379
+ }
380
+ })();
381
+ }, [showDiscoveryTooltipProp]);
382
+
383
+ const handleTooltipDismiss = useCallback(() => {
384
+ setTooltipVisible(false);
385
+ void (async () => {
386
+ try {
387
+ const AS = getTooltipStorage();
388
+ await AS?.setItem('@mobileai_tooltip_seen', 'true');
389
+ } catch { /* graceful */ }
390
+ })();
391
+ }, []);
392
+
393
+ // CRITICAL: clearSupport uses REFS and functional setters — never closure values.
394
+ // This function is captured by long-lived callbacks (escalation sockets, restored
395
+ // sockets) that may hold stale references. Using refs guarantees the current
396
+ // selectedTicketId and supportSocket are always read, not snapshot values.
318
397
  const clearSupport = useCallback((ticketId?: string) => {
319
398
  if (ticketId) {
320
- // Remove specific ticket + its cached socket
399
+ // Remove specific ticket + its cached socket and SSE
321
400
  const cached = pendingSocketsRef.current.get(ticketId);
322
401
  if (cached) { cached.disconnect(); pendingSocketsRef.current.delete(ticketId); }
402
+ const sse = sseRef.current.get(ticketId);
403
+ if (sse) { sse.disconnect(); sseRef.current.delete(ticketId); }
323
404
  setTickets(prev => prev.filter(t => t.id !== ticketId));
324
405
  setUnreadCounts(prev => { const n = { ...prev }; delete n[ticketId]; return n; });
325
- if (selectedTicketId === ticketId) {
326
- supportSocket?.disconnect();
327
- setSupportSocket(null);
406
+
407
+ // If user was viewing this ticket, close the support modal + switch to ticket list
408
+ if (selectedTicketIdRef.current === ticketId) {
409
+ setSupportSocket(prev => { prev?.disconnect(); return null; });
328
410
  setSelectedTicketId(null);
329
411
  setIsLiveAgentTyping(false);
330
412
  setMessages([]);
331
413
  }
414
+
415
+ // If no tickets remain, switch back to text mode
416
+ setTickets(prev => {
417
+ if (prev.length === 0) {
418
+ setMode('text');
419
+ }
420
+ return prev;
421
+ });
332
422
  } else {
333
- // Clear all — disconnect every cached socket
423
+ // Clear all — disconnect every cached socket and SSE
334
424
  pendingSocketsRef.current.forEach(s => s.disconnect());
335
425
  pendingSocketsRef.current.clear();
336
- supportSocket?.disconnect();
337
- setSupportSocket(null);
426
+ sseRef.current.forEach(s => s.disconnect());
427
+ sseRef.current.clear();
428
+ setSupportSocket(prev => { prev?.disconnect(); return null; });
338
429
  setSelectedTicketId(null);
339
430
  setTickets([]);
340
431
  setUnreadCounts({});
341
432
  setIsLiveAgentTyping(false);
342
433
  setMode('text');
343
434
  }
344
- }, [supportSocket, selectedTicketId]);
435
+ }, []);
436
+
437
+ const openSSE = useCallback((ticketId: string) => {
438
+ if (sseRef.current.has(ticketId)) return;
439
+ if (!analyticsKey) return;
440
+
441
+ const sseUrl = `${ENDPOINTS.escalation}/api/v1/escalations/events?analyticsKey=${encodeURIComponent(analyticsKey)}&ticketId=${encodeURIComponent(ticketId)}`;
442
+ const sse = new EscalationEventSource({
443
+ url: sseUrl,
444
+ onTicketClosed: (tid) => {
445
+ logger.info('AIAgent', 'SSE: ticket_closed received for', tid);
446
+ setUnreadCounts(prev => {
447
+ const next = { ...prev };
448
+ delete next[tid];
449
+ return next;
450
+ });
451
+ clearSupport(tid);
452
+ },
453
+ onConnected: (tid) => {
454
+ logger.info('AIAgent', 'SSE: connected for ticket', tid);
455
+ },
456
+ });
457
+ sse.connect();
458
+ sseRef.current.set(ticketId, sse);
459
+ logger.info('AIAgent', 'SSE opened for ticket:', ticketId);
460
+ }, [analyticsKey, clearSupport]);
345
461
 
346
462
  const clearMessages = useCallback(() => {
347
463
  setMessages([]);
348
464
  setLastResult(null);
349
465
  }, []);
350
466
 
467
+ const getResolvedScreenName = useCallback(() => {
468
+ const routeName = (navRef as any)?.getCurrentRoute?.()?.name;
469
+ if (typeof routeName === 'string' && routeName.trim().length > 0) {
470
+ return routeName;
471
+ }
472
+
473
+ const telemetryScreen = telemetryRef.current?.screen;
474
+ if (typeof telemetryScreen === 'string' && telemetryScreen !== 'Unknown') {
475
+ return telemetryScreen;
476
+ }
477
+
478
+ return 'unknown';
479
+ }, [navRef]);
480
+
351
481
  // ─── Auto-create MobileAI escalation tool ─────────────────────
352
482
  // When analyticsKey is present and consumer hasn't provided their own
353
483
  // escalate_to_human tool, auto-wire the MobileAI platform provider.
@@ -359,12 +489,13 @@ export function AIAgent({
359
489
  config: { provider: 'mobileai' },
360
490
  analyticsKey,
361
491
  getContext: () => ({
362
- currentScreen: (navRef as any)?.getCurrentRoute?.()?.name ?? 'unknown',
492
+ currentScreen: getResolvedScreenName(),
363
493
  originalQuery: '',
364
494
  stepsBeforeEscalation: 0,
365
495
  }),
366
496
  getHistory: () =>
367
497
  messages.map((m) => ({ role: m.role, content: m.content })),
498
+ getScreenFlow: () => telemetryRef.current?.getScreenFlow() ?? [],
368
499
  userContext,
369
500
  pushToken,
370
501
  pushTokenType,
@@ -372,15 +503,42 @@ export function AIAgent({
372
503
  logger.info('AIAgent', '★★★ onEscalationStarted FIRED — ticketId:', tid);
373
504
  // Cache the live socket so handleTicketSelect can reuse it without reconnecting
374
505
  pendingSocketsRef.current.set(tid, socket);
506
+ // Open SSE for reliable ticket_closed delivery
507
+ openSSE(tid);
508
+
509
+ const currentScreen = getResolvedScreenName();
375
510
  setTickets(prev => {
376
511
  if (prev.find(t => t.id === tid)) {
377
512
  logger.info('AIAgent', '★★★ Ticket already in list, skipping add');
378
513
  return prev;
379
514
  }
380
- const newList = [{ id: tid, reason: 'New escalation', screen: 'unknown', status: 'open', history: [], createdAt: new Date().toISOString(), wsUrl: '' }, ...prev];
515
+ const newList = [{ id: tid, reason: 'Connecting to agent...', screen: currentScreen, status: 'open', history: [], createdAt: new Date().toISOString(), wsUrl: '' }, ...prev];
381
516
  logger.info('AIAgent', '★★★ Tickets updated, new length:', newList.length);
382
517
  return newList;
383
518
  });
519
+
520
+ // Fetch real ticket data from backend to replace the placeholder
521
+ void (async () => {
522
+ try {
523
+ const res = await fetch(`${ENDPOINTS.escalation}/api/v1/escalations/${tid}?analyticsKey=${encodeURIComponent(analyticsKey!)}`);
524
+ if (res.ok) {
525
+ const data = await res.json();
526
+ setTickets(prev => prev.map(t => {
527
+ if (t.id !== tid) return t;
528
+ return {
529
+ ...t,
530
+ reason: data.reason || t.reason,
531
+ screen: data.screen || t.screen,
532
+ status: data.status || t.status,
533
+ history: Array.isArray(data.history) ? data.history : t.history,
534
+ };
535
+ }));
536
+ }
537
+ } catch {
538
+ // Best-effort — placeholder is still usable
539
+ }
540
+ })();
541
+
384
542
  // Switch to human mode so the ticket LIST is visible — do NOT auto-select
385
543
  setMode('human');
386
544
  setAutoExpandTrigger(prev => {
@@ -432,11 +590,11 @@ export function AIAgent({
432
590
  return next;
433
591
  });
434
592
  }
435
- clearSupport(selectedTicketId ?? undefined);
593
+ clearSupport(ticketId);
436
594
  },
437
595
  });
438
596
  // eslint-disable-next-line react-hooks/exhaustive-deps
439
- }, [analyticsKey, navRef, customTools]);
597
+ }, [analyticsKey, customTools, getResolvedScreenName, navRef, openSSE, userContext, pushToken, pushTokenType, messages, clearSupport]);
440
598
 
441
599
  // ─── Restore pending tickets on app start ──────────────────────
442
600
  useEffect(() => {
@@ -487,6 +645,11 @@ export function AIAgent({
487
645
  setMode('human');
488
646
  setAutoExpandTrigger(prev => prev + 1);
489
647
 
648
+ // Open SSE for every restored ticket — reliable ticket_closed delivery
649
+ for (const t of fetchedTickets) {
650
+ openSSE(t.id);
651
+ }
652
+
490
653
  // If there is exactly one ticket, pre-wire its WebSocket so it is ready
491
654
  // the moment the user taps the card (no extra connect delay).
492
655
  if (fetchedTickets.length === 1) {
@@ -701,15 +864,19 @@ export function AIAgent({
701
864
  const handleBackToTickets = useCallback(() => {
702
865
  // Cache socket in pendingSocketsRef instead of disconnecting —
703
866
  // 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);
867
+ const currentTicketId = selectedTicketIdRef.current;
868
+ // Use functional setter to read + cache the current socket without closure dependency
869
+ setSupportSocket(prev => {
870
+ if (prev && currentTicketId) {
871
+ pendingSocketsRef.current.set(currentTicketId, prev);
872
+ logger.info('AIAgent', '★ Socket cached for ticket:', currentTicketId, '— stays alive for badge updates');
873
+ }
874
+ return null;
875
+ });
709
876
  setSelectedTicketId(null);
710
877
  setMessages([]);
711
878
  setIsLiveAgentTyping(false);
712
- }, [supportSocket, selectedTicketId]);
879
+ }, []); // No dependencies — uses refs/functional setters
713
880
 
714
881
  const mergedCustomTools = useMemo(() => {
715
882
  if (!autoEscalateTool) return customTools;
@@ -774,6 +941,7 @@ export function AIAgent({
774
941
  screenMap: useScreenMap ? screenMap : undefined,
775
942
  maxTokenBudget,
776
943
  maxCostUSD,
944
+ interactionMode,
777
945
  // Block the agent loop until user responds
778
946
  onAskUser: mode === 'voice' ? undefined : ((question: string) => {
779
947
  return new Promise<string>((resolve) => {
@@ -837,8 +1005,13 @@ export function AIAgent({
837
1005
  telemetryRef.current = telemetry;
838
1006
  bindTelemetryService(telemetry);
839
1007
  telemetry.start();
1008
+
1009
+ const initialRoute = navRef?.getCurrentRoute?.();
1010
+ if (initialRoute?.name) {
1011
+ telemetry.setScreen(initialRoute.name);
1012
+ }
840
1013
  }); // initDeviceId
841
- }, [analyticsKey, analyticsProxyUrl, analyticsProxyHeaders, debug]);
1014
+ }, [analyticsKey, analyticsProxyUrl, analyticsProxyHeaders, bindTelemetryService, debug, navRef]);
842
1015
 
843
1016
  // ─── Security warnings ──────────────────────────────────────
844
1017
 
@@ -1221,15 +1394,26 @@ export function AIAgent({
1221
1394
  logger.info('AIAgent', `User message: "${message}"`);
1222
1395
  setLastUserMessage(message.trim());
1223
1396
 
1224
- // Intercom-style transparent intercept:
1397
+ // Intercom-style transparent intercept:
1225
1398
  // If we're connected to a human agent, all text input goes directly to them.
1226
1399
  if (selectedTicketId && supportSocket) {
1400
+ // Gate: do not allow sending if the ticket is closed/resolved.
1401
+ const activeTicket = tickets.find(t => t.id === selectedTicketId);
1402
+ const CLOSED_STATUSES = ['closed', 'resolved'];
1403
+ if (activeTicket && CLOSED_STATUSES.includes(activeTicket.status)) {
1404
+ setLastResult({
1405
+ success: false,
1406
+ message: 'This conversation is closed. Please start a new request.',
1407
+ steps: [],
1408
+ });
1409
+ return;
1410
+ }
1411
+
1227
1412
  if (supportSocket.sendText(message)) {
1228
1413
  setMessages((prev) => [
1229
1414
  ...prev,
1230
1415
  { id: `user-${Date.now()}`, role: 'user', content: message.trim(), timestamp: Date.now() },
1231
1416
  ]);
1232
-
1233
1417
  setIsThinking(true);
1234
1418
  setStatusText('Sending to agent...');
1235
1419
  setTimeout(() => {
@@ -1493,6 +1677,8 @@ export function AIAgent({
1493
1677
  autoExpandTrigger={autoExpandTrigger}
1494
1678
  unreadCounts={unreadCounts}
1495
1679
  totalUnread={totalUnread}
1680
+ showDiscoveryTooltip={tooltipVisible}
1681
+ onTooltipDismiss={handleTooltipDismiss}
1496
1682
  />
1497
1683
  </ProactiveHint>
1498
1684
  )}
@@ -1506,6 +1692,7 @@ export function AIAgent({
1506
1692
  isAgentTyping={isLiveAgentTyping}
1507
1693
  isThinking={isThinking}
1508
1694
  scrollToEndTrigger={chatScrollTrigger}
1695
+ ticketStatus={tickets.find(t => t.id === selectedTicketId)?.status}
1509
1696
  />
1510
1697
  </View>
1511
1698
  </View>