@bytexbyte/nxtlinq-ai-agent-web-development 0.1.2 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useVoiceMode.d.ts","sourceRoot":"","sources":["../../../../src/legacy/core/lib/useVoiceMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACpG,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAgBzB,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,cAA8B,GAC/B,EAAE,mBAAmB;;;;;;;;;;EAkWrB"}
1
+ {"version":3,"file":"useVoiceMode.d.ts","sourceRoot":"","sources":["../../../../src/legacy/core/lib/useVoiceMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACpG,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAgBzB,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,cAA8B,GAC/B,EAAE,mBAAmB;;;;;;;;;;EAoXrB"}
@@ -361,6 +361,25 @@ export function useVoiceMode({ apiKey, apiSecret, pseudoId, externalId, aitId, w
361
361
  };
362
362
  }, [handleStatus, handleTranscriptTurn, handleTranscriptUi, handleDone]);
363
363
  React.useEffect(() => () => { void stopVoiceSessionRef.current('unmount'); }, []);
364
+ // 追踪当前的 isVoiceMode 状态,用于 visibilitychange 事件
365
+ const isVoiceModeRef = React.useRef(isVoiceMode);
366
+ React.useEffect(() => {
367
+ isVoiceModeRef.current = isVoiceMode;
368
+ }, [isVoiceMode]);
369
+ // App 進入背景時立即退出語音 mode,防止後台語音連線異常斷開
370
+ React.useEffect(() => {
371
+ if (typeof document === 'undefined')
372
+ return;
373
+ const handleVisibilityChange = () => {
374
+ if (document.visibilityState !== 'hidden')
375
+ return;
376
+ if (!isVoiceModeRef.current)
377
+ return;
378
+ void exitVoiceMode();
379
+ };
380
+ document.addEventListener('visibilitychange', handleVisibilityChange);
381
+ return () => document.removeEventListener('visibilitychange', handleVisibilityChange);
382
+ }, [exitVoiceMode]);
364
383
  return {
365
384
  isVoiceMode,
366
385
  voiceStatus,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytexbyte/nxtlinq-ai-agent-web-development",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "React Web headless SDK for nxtlinq AI Agent — hooks and browser ports",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -45,7 +45,7 @@
45
45
  "universal-cookie": "^8.0.1"
46
46
  },
47
47
  "devDependencies": {
48
- "@bytexbyte/nxtlinq-ai-agent-core-development": "0.3.9",
48
+ "@bytexbyte/nxtlinq-ai-agent-core-development": "workspace:^",
49
49
  "@types/react": "^18.2.64",
50
50
  "@types/react-dom": "^18.2.25",
51
51
  "react": "^18.2.0",
@@ -401,6 +401,24 @@ export function useVoiceMode({
401
401
 
402
402
  React.useEffect(() => () => { void stopVoiceSessionRef.current('unmount'); }, []);
403
403
 
404
+ // 追踪当前的 isVoiceMode 状态,用于 visibilitychange 事件
405
+ const isVoiceModeRef = React.useRef(isVoiceMode);
406
+ React.useEffect(() => {
407
+ isVoiceModeRef.current = isVoiceMode;
408
+ }, [isVoiceMode]);
409
+
410
+ // App 進入背景時立即退出語音 mode,防止後台語音連線異常斷開
411
+ React.useEffect(() => {
412
+ if (typeof document === 'undefined') return;
413
+ const handleVisibilityChange = () => {
414
+ if (document.visibilityState !== 'hidden') return;
415
+ if (!isVoiceModeRef.current) return;
416
+ void exitVoiceMode();
417
+ };
418
+ document.addEventListener('visibilitychange', handleVisibilityChange);
419
+ return () => document.removeEventListener('visibilitychange', handleVisibilityChange);
420
+ }, [exitVoiceMode]);
421
+
404
422
  return {
405
423
  isVoiceMode,
406
424
  voiceStatus,