@talk2view/sdk 0.19.0 → 0.20.0

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 (49) hide show
  1. package/README.md +8 -2
  2. package/dist/auth.d.ts +8 -0
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +27 -11
  5. package/dist/auth.js.map +1 -1
  6. package/dist/chat/index.d.ts +1 -0
  7. package/dist/chat/index.d.ts.map +1 -1
  8. package/dist/chat/index.js +1 -0
  9. package/dist/chat/index.js.map +1 -1
  10. package/dist/chat/launcher.d.ts.map +1 -1
  11. package/dist/chat/launcher.js +6 -2
  12. package/dist/chat/launcher.js.map +1 -1
  13. package/dist/chat/provider.d.ts +7 -0
  14. package/dist/chat/provider.d.ts.map +1 -1
  15. package/dist/chat/provider.js +22 -1
  16. package/dist/chat/provider.js.map +1 -1
  17. package/dist/chat/voice-button.d.ts +34 -0
  18. package/dist/chat/voice-button.d.ts.map +1 -0
  19. package/dist/chat/voice-button.js +175 -0
  20. package/dist/chat/voice-button.js.map +1 -0
  21. package/dist/chat-css.js +1 -1
  22. package/dist/chat.css +1 -1
  23. package/dist/chat.isolated.css +169 -3
  24. package/dist/chat.raw.css +169 -3
  25. package/dist/event-emitter.d.ts +1 -0
  26. package/dist/event-emitter.d.ts.map +1 -1
  27. package/dist/event-emitter.js +3 -0
  28. package/dist/event-emitter.js.map +1 -1
  29. package/dist/index.d.ts +21 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +34 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/types.d.ts +60 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/voice-error.d.ts +8 -0
  36. package/dist/voice-error.d.ts.map +1 -0
  37. package/dist/voice-error.js +10 -0
  38. package/dist/voice-error.js.map +1 -0
  39. package/dist/voice-facade.d.ts +57 -0
  40. package/dist/voice-facade.d.ts.map +1 -0
  41. package/dist/voice-facade.js +139 -0
  42. package/dist/voice-facade.js.map +1 -0
  43. package/dist/voice.d.ts +157 -0
  44. package/dist/voice.d.ts.map +1 -0
  45. package/dist/voice.js +630 -0
  46. package/dist/voice.js.map +1 -0
  47. package/docs/chat.md +4 -4
  48. package/docs/voice.md +88 -0
  49. package/package.json +3 -1
@@ -687,6 +687,9 @@
687
687
  .t2v-chat .h-\[17px\] {
688
688
  height: 17px !important;
689
689
  }
690
+ .t2v-chat .h-\[20px\] {
691
+ height: 20px !important;
692
+ }
690
693
  .t2v-chat .h-\[29px\] {
691
694
  height: 29px !important;
692
695
  }
@@ -771,6 +774,9 @@
771
774
  .t2v-chat .w-\[14px\] {
772
775
  width: 14px !important;
773
776
  }
777
+ .t2v-chat .w-\[22px\] {
778
+ width: 22px !important;
779
+ }
774
780
  .t2v-chat .w-\[40px\] {
775
781
  width: 40px !important;
776
782
  }
@@ -3339,14 +3345,154 @@
3339
3345
  animation: t2v-cursor-blink 1s step-end infinite;
3340
3346
  }
3341
3347
  }
3342
- .t2v-chat .aui-modal-button {
3348
+ .t2v-chat .t2v-voice, .t2v-chat.t2v-voice {
3349
+ position: relative;
3350
+ display: flex;
3351
+ align-items: flex-end;
3352
+ }
3353
+ .t2v-chat .t2v-voice {
3354
+ margin-inline-end: 0.5rem;
3355
+ }
3356
+ .t2v-chat.t2v-voice {
3357
+ display: inline-flex;
3358
+ height: auto;
3359
+ }
3360
+ .t2v-chat .t2v-voice-button {
3361
+ display: inline-flex;
3362
+ flex-shrink: 0;
3363
+ align-items: center;
3364
+ justify-content: center;
3365
+ width: 4rem;
3366
+ height: 4rem;
3367
+ padding: 0;
3368
+ border: 0;
3369
+ border-radius: 0;
3370
+ background-color: var(--primary);
3371
+ color: var(--primary-foreground);
3372
+ cursor: pointer;
3373
+ box-shadow: 0 6px 20px -8px rgb(2 28 37 / 0.55);
3374
+ }
3375
+ .t2v-chat .t2v-voice-button:hover {
3376
+ filter: brightness(0.95);
3377
+ }
3378
+ .t2v-chat .t2v-voice-button:active {
3379
+ scale: 0.96;
3380
+ }
3381
+ .t2v-chat .t2v-voice-button:focus-visible {
3382
+ outline: 2px solid var(--ring);
3383
+ outline-offset: 6px;
3384
+ }
3385
+ .t2v-chat .t2v-voice-button[data-state='listening'] {
3386
+ background-color: var(--primary-foreground);
3387
+ color: var(--primary);
3388
+ }
3389
+ .t2v-chat .t2v-voice-spin {
3390
+ animation: t2v-voice-spin 0.9s linear infinite;
3391
+ }
3392
+ @media (prefers-reduced-motion: no-preference) {
3393
+ .t2v-chat .t2v-voice-button {
3394
+ transition: scale 150ms ease-out;
3395
+ }
3396
+ }
3397
+ @media (prefers-reduced-motion: reduce) {
3398
+ .t2v-chat .t2v-voice-button .t2v-wave-bar {
3399
+ animation: none;
3400
+ }
3401
+ }
3402
+ .t2v-chat .t2v-voice-popover {
3403
+ position: absolute;
3404
+ inset-block-end: calc(100% + 0.75rem);
3405
+ inset-inline-end: 0;
3406
+ display: flex;
3407
+ flex-direction: column;
3408
+ align-items: flex-end;
3409
+ gap: 0.5rem;
3410
+ width: max-content;
3411
+ max-width: min(20rem, calc(100vw - 2rem));
3412
+ font-size: 0.8125rem;
3413
+ line-height: 1.4;
3414
+ }
3415
+ .t2v-chat .t2v-voice-status, .t2v-chat .t2v-voice-error {
3416
+ border: 1px solid var(--border);
3417
+ border-radius: var(--radius);
3418
+ background-color: var(--popover);
3419
+ color: var(--popover-foreground);
3420
+ box-shadow: 0 6px 20px -8px rgb(2 28 37 / 0.35);
3421
+ }
3422
+ .t2v-chat .t2v-voice-status {
3423
+ padding: 0.375rem 0.75rem;
3424
+ font-weight: 500;
3425
+ white-space: nowrap;
3426
+ }
3427
+ .t2v-chat .t2v-voice-error {
3428
+ display: flex;
3429
+ align-items: flex-start;
3430
+ gap: 0.5rem;
3431
+ padding: 0.5rem 0.5rem 0.5rem 0.75rem;
3432
+ border-inline-start: 3px solid var(--destructive);
3433
+ }
3434
+ .t2v-chat .t2v-voice-dismiss {
3435
+ display: inline-flex;
3436
+ flex-shrink: 0;
3437
+ padding: 0.125rem;
3438
+ border: 0;
3439
+ background: transparent;
3440
+ color: var(--muted-foreground);
3441
+ cursor: pointer;
3442
+ }
3443
+ .t2v-chat .t2v-voice-dismiss:hover {
3444
+ color: var(--popover-foreground);
3445
+ }
3446
+ .t2v-chat .t2v-voice-dismiss:focus-visible {
3447
+ outline: 2px solid var(--ring);
3448
+ outline-offset: 1px;
3449
+ }
3450
+ .t2v-chat .t2v-voice-approval {
3451
+ width: 20rem;
3452
+ max-width: 100%;
3453
+ color-scheme: light;
3454
+ background-color: #ffffff;
3455
+ box-shadow: 0 16px 48px -24px rgb(0 0 0 / 0.35);
3456
+ --t2v-bg: #ffffff;
3457
+ --t2v-foreground: var(--t2v-smoke);
3458
+ --t2v-surface: var(--t2v-ivory);
3459
+ --t2v-surface-hover: var(--t2v-stone);
3460
+ @supports (color: color-mix(in lab, red, red)) {
3461
+ --t2v-surface-hover: color-mix(in srgb, var(--t2v-stone) 25%, var(--t2v-ivory));
3462
+ }
3463
+ --t2v-muted: var(--t2v-slate);
3464
+ --t2v-border: var(--t2v-stone);
3465
+ --t2v-error: #bb524e;
3466
+ --t2v-radius-sm: calc(var(--radius) * 0.6);
3467
+ --t2v-radius-md: calc(var(--radius) * 0.8);
3468
+ --t2v-radius-lg: var(--radius);
3469
+ --t2v-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3470
+ }
3471
+ .t2v-chat .t2v-voice-approval > [role='region'] {
3472
+ margin: 0 !important;
3473
+ }
3474
+ .t2v-chat .t2v-voice-sr {
3475
+ position: absolute;
3476
+ width: 1px;
3477
+ height: 1px;
3478
+ margin: -1px;
3479
+ padding: 0;
3480
+ overflow: hidden;
3481
+ clip-path: inset(50%);
3482
+ white-space: nowrap;
3483
+ border: 0;
3484
+ }
3485
+ .t2v-chat .t2v-voice-tucked:not([data-on]) {
3486
+ display: none;
3487
+ }
3488
+ .t2v-chat .aui-modal-button, .t2v-chat .t2v-voice-button {
3343
3489
  position: relative;
3344
3490
  --t2v-beam-tail: #26c8b8;
3345
3491
  --t2v-beam-mid: #73ffff;
3346
3492
  --t2v-beam-head: #ffffff;
3347
3493
  --t2v-beam-ring: rgb(115 255 255 / 0.4);
3348
3494
  }
3349
- .t2v-chat .aui-modal-button::before {
3495
+ .t2v-chat .aui-modal-button::before, .t2v-chat .t2v-voice-button::before {
3350
3496
  content: "";
3351
3497
  position: absolute;
3352
3498
  inset: 0;
@@ -3358,11 +3504,26 @@
3358
3504
  animation: t2v-beam 3.2s linear infinite;
3359
3505
  }
3360
3506
  @media (prefers-reduced-motion: reduce) {
3361
- .t2v-chat .aui-modal-button::before {
3507
+ .t2v-chat .aui-modal-button::before, .t2v-chat .t2v-voice-button::before {
3362
3508
  background: linear-gradient(var(--t2v-beam-mid) 0 0);
3363
3509
  animation: t2v-beam-breathe 2.4s ease-in-out infinite;
3364
3510
  }
3365
3511
  }
3512
+ .t2v-chat .t2v-voice-button[data-state='connecting']::before, .t2v-chat .t2v-voice-button[data-state='listening']::before {
3513
+ filter: drop-shadow(0 0 9px var(--t2v-beam-mid));
3514
+ animation-duration: 1.2s;
3515
+ }
3516
+ @media (prefers-reduced-motion: reduce) {
3517
+ .t2v-chat .t2v-voice-button[data-state='connecting']::before, .t2v-chat .t2v-voice-button[data-state='listening']::before {
3518
+ animation-duration: 1.1s;
3519
+ }
3520
+ }
3521
+ .t2v-chat .t2v-voice-button[data-busy] {
3522
+ --t2v-beam-tail: #bb524e;
3523
+ --t2v-beam-mid: #f0a74a;
3524
+ --t2v-beam-head: #fff490;
3525
+ --t2v-beam-ring: rgb(240 167 74 / 0.4);
3526
+ }
3366
3527
  .t2v-chat .t2v-tool-approval-prompt {
3367
3528
  display: -webkit-box;
3368
3529
  -webkit-box-orient: vertical;
@@ -3442,6 +3603,11 @@
3442
3603
  opacity: 0;
3443
3604
  }
3444
3605
  }
3606
+ @keyframes t2v-voice-spin {
3607
+ to {
3608
+ rotate: 360deg;
3609
+ }
3610
+ }
3445
3611
  @keyframes t2v-collapsible-down {
3446
3612
  from {
3447
3613
  height: 0;
package/dist/chat.raw.css CHANGED
@@ -694,6 +694,9 @@
694
694
  .h-\[17px\] {
695
695
  height: 17px;
696
696
  }
697
+ .h-\[20px\] {
698
+ height: 20px;
699
+ }
697
700
  .h-\[29px\] {
698
701
  height: 29px;
699
702
  }
@@ -778,6 +781,9 @@
778
781
  .w-\[14px\] {
779
782
  width: 14px;
780
783
  }
784
+ .w-\[22px\] {
785
+ width: 22px;
786
+ }
781
787
  .w-\[40px\] {
782
788
  width: 40px;
783
789
  }
@@ -3347,14 +3353,154 @@
3347
3353
  animation: t2v-cursor-blink 1s step-end infinite;
3348
3354
  }
3349
3355
  }
3350
- .aui-modal-button {
3356
+ .t2v-voice, :root.t2v-voice {
3357
+ position: relative;
3358
+ display: flex;
3359
+ align-items: flex-end;
3360
+ }
3361
+ .t2v-voice {
3362
+ margin-inline-end: 0.5rem;
3363
+ }
3364
+ :root.t2v-voice {
3365
+ display: inline-flex;
3366
+ height: auto;
3367
+ }
3368
+ .t2v-voice-button {
3369
+ display: inline-flex;
3370
+ flex-shrink: 0;
3371
+ align-items: center;
3372
+ justify-content: center;
3373
+ width: 4rem;
3374
+ height: 4rem;
3375
+ padding: 0;
3376
+ border: 0;
3377
+ border-radius: 0;
3378
+ background-color: var(--primary);
3379
+ color: var(--primary-foreground);
3380
+ cursor: pointer;
3381
+ box-shadow: 0 6px 20px -8px rgb(2 28 37 / 0.55);
3382
+ }
3383
+ .t2v-voice-button:hover {
3384
+ filter: brightness(0.95);
3385
+ }
3386
+ .t2v-voice-button:active {
3387
+ scale: 0.96;
3388
+ }
3389
+ .t2v-voice-button:focus-visible {
3390
+ outline: 2px solid var(--ring);
3391
+ outline-offset: 6px;
3392
+ }
3393
+ .t2v-voice-button[data-state='listening'] {
3394
+ background-color: var(--primary-foreground);
3395
+ color: var(--primary);
3396
+ }
3397
+ .t2v-voice-spin {
3398
+ animation: t2v-voice-spin 0.9s linear infinite;
3399
+ }
3400
+ @media (prefers-reduced-motion: no-preference) {
3401
+ .t2v-voice-button {
3402
+ transition: scale 150ms ease-out;
3403
+ }
3404
+ }
3405
+ @media (prefers-reduced-motion: reduce) {
3406
+ .t2v-voice-button .t2v-wave-bar {
3407
+ animation: none;
3408
+ }
3409
+ }
3410
+ .t2v-voice-popover {
3411
+ position: absolute;
3412
+ inset-block-end: calc(100% + 0.75rem);
3413
+ inset-inline-end: 0;
3414
+ display: flex;
3415
+ flex-direction: column;
3416
+ align-items: flex-end;
3417
+ gap: 0.5rem;
3418
+ width: max-content;
3419
+ max-width: min(20rem, calc(100vw - 2rem));
3420
+ font-size: 0.8125rem;
3421
+ line-height: 1.4;
3422
+ }
3423
+ .t2v-voice-status, .t2v-voice-error {
3424
+ border: 1px solid var(--border);
3425
+ border-radius: var(--radius);
3426
+ background-color: var(--popover);
3427
+ color: var(--popover-foreground);
3428
+ box-shadow: 0 6px 20px -8px rgb(2 28 37 / 0.35);
3429
+ }
3430
+ .t2v-voice-status {
3431
+ padding: 0.375rem 0.75rem;
3432
+ font-weight: 500;
3433
+ white-space: nowrap;
3434
+ }
3435
+ .t2v-voice-error {
3436
+ display: flex;
3437
+ align-items: flex-start;
3438
+ gap: 0.5rem;
3439
+ padding: 0.5rem 0.5rem 0.5rem 0.75rem;
3440
+ border-inline-start: 3px solid var(--destructive);
3441
+ }
3442
+ .t2v-voice-dismiss {
3443
+ display: inline-flex;
3444
+ flex-shrink: 0;
3445
+ padding: 0.125rem;
3446
+ border: 0;
3447
+ background: transparent;
3448
+ color: var(--muted-foreground);
3449
+ cursor: pointer;
3450
+ }
3451
+ .t2v-voice-dismiss:hover {
3452
+ color: var(--popover-foreground);
3453
+ }
3454
+ .t2v-voice-dismiss:focus-visible {
3455
+ outline: 2px solid var(--ring);
3456
+ outline-offset: 1px;
3457
+ }
3458
+ .t2v-voice-approval {
3459
+ width: 20rem;
3460
+ max-width: 100%;
3461
+ color-scheme: light;
3462
+ background-color: #ffffff;
3463
+ box-shadow: 0 16px 48px -24px rgb(0 0 0 / 0.35);
3464
+ --t2v-bg: #ffffff;
3465
+ --t2v-foreground: var(--t2v-smoke);
3466
+ --t2v-surface: var(--t2v-ivory);
3467
+ --t2v-surface-hover: var(--t2v-stone);
3468
+ @supports (color: color-mix(in lab, red, red)) {
3469
+ --t2v-surface-hover: color-mix(in srgb, var(--t2v-stone) 25%, var(--t2v-ivory));
3470
+ }
3471
+ --t2v-muted: var(--t2v-slate);
3472
+ --t2v-border: var(--t2v-stone);
3473
+ --t2v-error: #bb524e;
3474
+ --t2v-radius-sm: calc(var(--radius) * 0.6);
3475
+ --t2v-radius-md: calc(var(--radius) * 0.8);
3476
+ --t2v-radius-lg: var(--radius);
3477
+ --t2v-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3478
+ }
3479
+ .t2v-voice-approval > [role='region'] {
3480
+ margin: 0 !important;
3481
+ }
3482
+ .t2v-voice-sr {
3483
+ position: absolute;
3484
+ width: 1px;
3485
+ height: 1px;
3486
+ margin: -1px;
3487
+ padding: 0;
3488
+ overflow: hidden;
3489
+ clip-path: inset(50%);
3490
+ white-space: nowrap;
3491
+ border: 0;
3492
+ }
3493
+ .t2v-voice-tucked:not([data-on]) {
3494
+ display: none;
3495
+ }
3496
+ .aui-modal-button, .t2v-voice-button {
3351
3497
  position: relative;
3352
3498
  --t2v-beam-tail: #26c8b8;
3353
3499
  --t2v-beam-mid: #73ffff;
3354
3500
  --t2v-beam-head: #ffffff;
3355
3501
  --t2v-beam-ring: rgb(115 255 255 / 0.4);
3356
3502
  }
3357
- .aui-modal-button::before {
3503
+ .aui-modal-button::before, .t2v-voice-button::before {
3358
3504
  content: "";
3359
3505
  position: absolute;
3360
3506
  inset: 0;
@@ -3366,11 +3512,26 @@
3366
3512
  animation: t2v-beam 3.2s linear infinite;
3367
3513
  }
3368
3514
  @media (prefers-reduced-motion: reduce) {
3369
- .aui-modal-button::before {
3515
+ .aui-modal-button::before, .t2v-voice-button::before {
3370
3516
  background: linear-gradient(var(--t2v-beam-mid) 0 0);
3371
3517
  animation: t2v-beam-breathe 2.4s ease-in-out infinite;
3372
3518
  }
3373
3519
  }
3520
+ .t2v-voice-button[data-state='connecting']::before, .t2v-voice-button[data-state='listening']::before {
3521
+ filter: drop-shadow(0 0 9px var(--t2v-beam-mid));
3522
+ animation-duration: 1.2s;
3523
+ }
3524
+ @media (prefers-reduced-motion: reduce) {
3525
+ .t2v-voice-button[data-state='connecting']::before, .t2v-voice-button[data-state='listening']::before {
3526
+ animation-duration: 1.1s;
3527
+ }
3528
+ }
3529
+ .t2v-voice-button[data-busy] {
3530
+ --t2v-beam-tail: #bb524e;
3531
+ --t2v-beam-mid: #f0a74a;
3532
+ --t2v-beam-head: #fff490;
3533
+ --t2v-beam-ring: rgb(240 167 74 / 0.4);
3534
+ }
3374
3535
  .t2v-tool-approval-prompt {
3375
3536
  display: -webkit-box;
3376
3537
  -webkit-box-orient: vertical;
@@ -3450,6 +3611,11 @@
3450
3611
  opacity: 0;
3451
3612
  }
3452
3613
  }
3614
+ @keyframes t2v-voice-spin {
3615
+ to {
3616
+ rotate: 360deg;
3617
+ }
3618
+ }
3453
3619
  @keyframes collapsible-down {
3454
3620
  from {
3455
3621
  height: 0;
@@ -1,6 +1,7 @@
1
1
  export declare class TypedEventEmitter<TEvents extends Record<string, unknown[]>> {
2
2
  private listeners;
3
3
  on<K extends keyof TEvents>(event: K, callback: (...args: TEvents[K]) => void): () => void;
4
+ off<K extends keyof TEvents>(event: K, callback: (...args: TEvents[K]) => void): void;
4
5
  emit<K extends keyof TEvents>(event: K, ...args: TEvents[K]): void;
5
6
  removeAllListeners(): void;
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IACtE,OAAO,CAAC,SAAS,CAA+D;IAEhF,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EACxB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GACtC,MAAM,IAAI;IASb,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IASlE,kBAAkB,IAAI,IAAI;CAG3B"}
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IACtE,OAAO,CAAC,SAAS,CAA+D;IAEhF,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EACxB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GACtC,MAAM,IAAI;IASb,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAIrF,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IASlE,kBAAkB,IAAI,IAAI;CAG3B"}
@@ -8,6 +8,9 @@ export class TypedEventEmitter {
8
8
  set.add(callback);
9
9
  return () => set.delete(callback);
10
10
  }
11
+ off(event, callback) {
12
+ this.listeners.get(event)?.delete(callback);
13
+ }
11
14
  emit(event, ...args) {
12
15
  const set = this.listeners.get(event);
13
16
  if (set) {
@@ -1 +1 @@
1
- {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IACpB,SAAS,GAAG,IAAI,GAAG,EAAoD,CAAC;IAEhF,EAAE,CACA,KAAQ,EACR,QAAuC;QAEvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QACvC,GAAG,CAAC,GAAG,CAAC,QAAwC,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAwC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAA0B,KAAQ,EAAE,GAAG,IAAgB;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IACpB,SAAS,GAAG,IAAI,GAAG,EAAoD,CAAC;IAEhF,EAAE,CACA,KAAQ,EACR,QAAuC;QAEvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QACvC,GAAG,CAAC,GAAG,CAAC,QAAwC,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAwC,CAAC,CAAC;IACpE,CAAC;IAED,GAAG,CAA0B,KAAQ,EAAE,QAAuC;QAC5E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAwC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAA0B,KAAQ,EAAE,GAAG,IAAgB;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -34,6 +34,7 @@ import { T2VAuth } from './auth.js';
34
34
  import { T2VSession } from './sessions.js';
35
35
  import { T2VSkills } from './skills.js';
36
36
  import { T2VTools } from './tools.js';
37
+ import { T2VVoice } from './voice-facade.js';
37
38
  import type { AgentStatus, Attachment, AudioModelsResponse, ChatEvent, ChatMessage, ConversationSnapshot, DisplayMessage, HumanDecision, PartnerConfig, PendingApproval, ModelsResponse, T2VConfig, T2VEventMap, TranscriptionResponse } from './types.js';
38
39
  type SessionClearCallback = () => void;
39
40
  type SessionCreateCallback = (toolNames: string[]) => void;
@@ -74,8 +75,15 @@ export declare class Talk2View {
74
75
  /** True between stop() and stream teardown, so the abort isn't surfaced as an error. */
75
76
  private _stopped;
76
77
  private readonly emitter;
78
+ private _voice;
77
79
  private debug;
78
80
  constructor(config: T2VConfig);
81
+ /**
82
+ * The realtime voice agent (`<VoiceButton>` uses this). A thin facade built
83
+ * on first access; the voice controller and the Pipecat client libraries
84
+ * load on the first `start()`.
85
+ */
86
+ get voice(): T2VVoice;
79
87
  /**
80
88
  * Create a new chat session.
81
89
  */
@@ -258,6 +266,13 @@ export declare class Talk2View {
258
266
  * whatever replaces the conversation it belongs to.
259
267
  */
260
268
  private endCurrentTurn;
269
+ /**
270
+ * A call belongs to the account that started it. A deliberate sign-out or a
271
+ * switch to another account hangs it up (`stopped`); a session that died
272
+ * under it (`null` without {@link T2VAuth.logout}) ends it as `auth_expired`,
273
+ * with an `auth_expired` error, so the end-user is told to sign in again.
274
+ */
275
+ private endVoiceCallForIdentityChange;
261
276
  /**
262
277
  * Drop the cached session when the signed-in identity changes, so the next
263
278
  * chat() opens a fresh session owned by the new user. Unlike {@link clearSession}
@@ -377,5 +392,10 @@ export { T2VTools } from './tools.js';
377
392
  /** @internal Exported for typing `t2v.on(...)`. Not part of the supported surface. */
378
393
  export { TypedEventEmitter } from './event-emitter.js';
379
394
  export { T2VError, AuthenticationError, PartnerKeyError, SessionError, NetworkError } from './errors.js';
380
- export type { T2VEventMap, T2VConfig, User, Attachment, AttachmentContentPart, MessageContentPart, TextContentPart, ChatEvent, ChatMessage, ConversationSnapshot, ClientTool, ClientToolSchema, ToolHandler, TokenResponse, SignupOutcome, ToolCallInterrupt, AgentStatus, ChatCompletionChunk, RegisterToolsResponse, RegisterSkillsResponse, UserSkill, HumanDecision, PendingApproval, PermissionResult, PermissionCheckResult, ToolPermissionCallback, Model, AudioModel, ModelsResponse, TranscriptionResponse, AudioModelsResponse, GeneratedImageDisplay, ImageFailureDisplay, ImageToolDisplay, ImageGenerationRequest, ImageEditRequest, ImageData, ImagesResponse, ImageModel, ImageModelsResponse, PartnerConfig, UserPreferences, DisplayMessage, ToolStep, } from './types.js';
395
+ export { T2VVoice } from './voice-facade.js';
396
+ /** @internal Exported for typing `t2v.voice`. Not part of the supported surface. */
397
+ export type { T2VVoiceOptions, VoiceControllerLoader } from './voice-facade.js';
398
+ export { VoiceStartError } from './voice-error.js';
399
+ export type { T2VVoiceController, T2VVoiceDeps, VoiceLibs, VoiceLibLoader } from './voice.js';
400
+ export type { T2VEventMap, T2VConfig, User, Attachment, AttachmentContentPart, MessageContentPart, TextContentPart, ChatEvent, ChatMessage, ConversationSnapshot, ClientTool, ClientToolSchema, ToolHandler, TokenResponse, SignupOutcome, ToolCallInterrupt, AgentStatus, ChatCompletionChunk, RegisterToolsResponse, RegisterSkillsResponse, UserSkill, HumanDecision, PendingApproval, PermissionResult, PermissionCheckResult, ToolPermissionCallback, Model, AudioModel, ModelsResponse, TranscriptionResponse, AudioModelsResponse, GeneratedImageDisplay, ImageFailureDisplay, ImageToolDisplay, ImageGenerationRequest, ImageEditRequest, ImageData, ImagesResponse, ImageModel, ImageModelsResponse, PartnerConfig, UserPreferences, DisplayMessage, ToolStep, VoiceSessionResponse, VoiceState, VoiceEndReason, VoiceError, VoiceTranscript, VoiceToolCall, VoicePendingApproval, VoiceEventMap, VoiceIceServer, } from './types.js';
381
401
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -39,6 +39,7 @@ import { getIsAnonymous, hasValidTokens } from './storage.js';
39
39
  import { T2VSession, buildUserContent } from './sessions.js';
40
40
  import { T2VSkills } from './skills.js';
41
41
  import { T2VTools, stripNullArgs } from './tools.js';
42
+ import { T2VVoice } from './voice-facade.js';
42
43
  /**
43
44
  * Refusals from POST /v1/auth/anonymous that only signing in — or Talk2View
44
45
  * finishing setup for the partner — can get past: the partner offers no
@@ -136,6 +137,7 @@ export class Talk2View {
136
137
  /** True between stop() and stream teardown, so the abort isn't surfaced as an error. */
137
138
  _stopped = false;
138
139
  emitter = new TypedEventEmitter();
140
+ _voice = null;
139
141
  debug(...args) {
140
142
  if (this.config.debug)
141
143
  console.log('[T2V]', ...args);
@@ -168,10 +170,28 @@ export class Talk2View {
168
170
  if (userId !== this._authUserId) {
169
171
  this._warmUp = null; // a different end-user has a different key
170
172
  this._authUserId = userId;
173
+ this.endVoiceCallForIdentityChange(userId);
171
174
  this.resetSessionForIdentityChange();
172
175
  }
173
176
  });
174
177
  }
178
+ /**
179
+ * The realtime voice agent (`<VoiceButton>` uses this). A thin facade built
180
+ * on first access; the voice controller and the Pipecat client libraries
181
+ * load on the first `start()`.
182
+ */
183
+ get voice() {
184
+ if (!this._voice) {
185
+ this._voice = new T2VVoice({
186
+ request: (endpoint, options) => this.client.request(endpoint, options),
187
+ ensureSession: () => this.ensureSession(),
188
+ getValidAccessToken: (opts) => this.auth.getValidAccessToken(opts),
189
+ tools: this.tools,
190
+ partnerKey: this.config.partnerKey,
191
+ });
192
+ }
193
+ return this._voice;
194
+ }
175
195
  /**
176
196
  * Create a new chat session.
177
197
  */
@@ -595,6 +615,18 @@ export class Talk2View {
595
615
  this._streamAbort = null;
596
616
  this._stopped = false;
597
617
  }
618
+ /**
619
+ * A call belongs to the account that started it. A deliberate sign-out or a
620
+ * switch to another account hangs it up (`stopped`); a session that died
621
+ * under it (`null` without {@link T2VAuth.logout}) ends it as `auth_expired`,
622
+ * with an `auth_expired` error, so the end-user is told to sign in again.
623
+ */
624
+ endVoiceCallForIdentityChange(userId) {
625
+ if (!this._voice)
626
+ return;
627
+ const expired = userId === null && !this.auth.signingOut;
628
+ void (expired ? this._voice.expire() : this._voice.stop());
629
+ }
598
630
  /**
599
631
  * Drop the cached session when the signed-in identity changes, so the next
600
632
  * chat() opens a fresh session owned by the new user. Unlike {@link clearSession}
@@ -1002,4 +1034,6 @@ export { T2VTools } from './tools.js';
1002
1034
  /** @internal Exported for typing `t2v.on(...)`. Not part of the supported surface. */
1003
1035
  export { TypedEventEmitter } from './event-emitter.js';
1004
1036
  export { T2VError, AuthenticationError, PartnerKeyError, SessionError, NetworkError } from './errors.js';
1037
+ export { T2VVoice } from './voice-facade.js';
1038
+ export { VoiceStartError } from './voice-error.js';
1005
1039
  //# sourceMappingURL=index.js.map