@personaai/react 0.7.4 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -284,6 +284,13 @@ interface SendMessageOverride {
284
284
  threadId?: string | Promise<string | undefined>;
285
285
  /** Answers/approves a paused interrupt from a previous turn instead of starting a fresh one. */
286
286
  resume?: PersonaResumeValue;
287
+ /**
288
+ * Caller-supplied context (e.g. a live end-user profile snapshot) appended to this turn's
289
+ * system prompt only — never persisted, never visible to later turns. Capped at 4000
290
+ * characters server-side (rejected with a 400, not truncated). Mirrors
291
+ * `@personaai/sdk`'s `SendMessageOptions.contextOverride`.
292
+ */
293
+ contextOverride?: string;
287
294
  }
288
295
  /**
289
296
  * `useVoice`'s call state, driven by `voice_activity` events from the
@@ -318,6 +325,16 @@ interface UseVoiceOptions {
318
325
  * leave undefined) to start a fresh conversation.
319
326
  */
320
327
  threadId?: string;
328
+ /**
329
+ * Caller-supplied context appended to the Agent's system instruction for
330
+ * this call — same field/cap/contract as `useChat`'s `sendMessage(text, {
331
+ * contextOverride })`. Unlike text chat, this is a **one-time append at
332
+ * connect**, not re-applied per turn: Gemini Live's system instruction is
333
+ * fixed for the whole call, so changing it means ending this call and
334
+ * starting a new `start()`. Capped at 4000 characters server-side
335
+ * (rejected with a 400, not truncated).
336
+ */
337
+ contextOverride?: string;
321
338
  }
322
339
  interface UseVoiceResult {
323
340
  state: PersonaVoiceState;
package/dist/index.d.ts CHANGED
@@ -284,6 +284,13 @@ interface SendMessageOverride {
284
284
  threadId?: string | Promise<string | undefined>;
285
285
  /** Answers/approves a paused interrupt from a previous turn instead of starting a fresh one. */
286
286
  resume?: PersonaResumeValue;
287
+ /**
288
+ * Caller-supplied context (e.g. a live end-user profile snapshot) appended to this turn's
289
+ * system prompt only — never persisted, never visible to later turns. Capped at 4000
290
+ * characters server-side (rejected with a 400, not truncated). Mirrors
291
+ * `@personaai/sdk`'s `SendMessageOptions.contextOverride`.
292
+ */
293
+ contextOverride?: string;
287
294
  }
288
295
  /**
289
296
  * `useVoice`'s call state, driven by `voice_activity` events from the
@@ -318,6 +325,16 @@ interface UseVoiceOptions {
318
325
  * leave undefined) to start a fresh conversation.
319
326
  */
320
327
  threadId?: string;
328
+ /**
329
+ * Caller-supplied context appended to the Agent's system instruction for
330
+ * this call — same field/cap/contract as `useChat`'s `sendMessage(text, {
331
+ * contextOverride })`. Unlike text chat, this is a **one-time append at
332
+ * connect**, not re-applied per turn: Gemini Live's system instruction is
333
+ * fixed for the whole call, so changing it means ending this call and
334
+ * starting a new `start()`. Capped at 4000 characters server-side
335
+ * (rejected with a 400, not truncated).
336
+ */
337
+ contextOverride?: string;
321
338
  }
322
339
  interface UseVoiceResult {
323
340
  state: PersonaVoiceState;
package/dist/index.js CHANGED
@@ -595,12 +595,14 @@ function useChat(options = {}) {
595
595
  agentId: targetAgentId,
596
596
  threadId: threadId ?? overrideOptions?.threadId,
597
597
  hasResume: !!overrideOptions?.resume,
598
+ hasContextOverride: !!overrideOptions?.contextOverride,
598
599
  messageCount: messages.length
599
600
  });
600
601
  chatLogger.trace("sendMessage details", {
601
602
  agentId: targetAgentId,
602
603
  promptPreview: prompt.slice(0, 200),
603
- hasResume: !!overrideOptions?.resume
604
+ hasResume: !!overrideOptions?.resume,
605
+ hasContextOverride: !!overrideOptions?.contextOverride
604
606
  });
605
607
  const userMessage = {
606
608
  id: `user-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
@@ -655,7 +657,8 @@ function useChat(options = {}) {
655
657
  agentId: targetAgentId,
656
658
  messages: payloadMessages,
657
659
  threadId: resolvedThreadId,
658
- resume: overrideOptions?.resume
660
+ resume: overrideOptions?.resume,
661
+ contextOverride: overrideOptions?.contextOverride
659
662
  }),
660
663
  signal: controller.signal
661
664
  });
@@ -1389,6 +1392,7 @@ function useVoice(options = {}) {
1389
1392
  const voiceLogger = useMemo3(() => logger.child("voice"), [logger]);
1390
1393
  const agentId = options.agentId || defaultAgentId;
1391
1394
  const threadId = options.threadId;
1395
+ const contextOverride = options.contextOverride;
1392
1396
  const [state, setState] = useState4("idle");
1393
1397
  const [isMuted, setIsMuted] = useState4(false);
1394
1398
  const [transcript, setTranscript] = useState4(
@@ -1658,14 +1662,19 @@ function useVoice(options = {}) {
1658
1662
  setToolCalls([]);
1659
1663
  acceptedTurnSeqRef.current = 0;
1660
1664
  setState("connecting");
1661
- voiceLogger.debug("start() called", { agentId, threadId });
1665
+ voiceLogger.debug("start() called", {
1666
+ agentId,
1667
+ threadId,
1668
+ hasContextOverride: !!contextOverride
1669
+ });
1662
1670
  try {
1663
1671
  const res = await fetchWithAuth("/voice/sessions", {
1664
1672
  method: "POST",
1665
1673
  headers: { "Content-Type": "application/json" },
1666
1674
  body: JSON.stringify({
1667
1675
  agentId,
1668
- ...threadId ? { threadId } : {}
1676
+ ...threadId ? { threadId } : {},
1677
+ ...contextOverride ? { contextOverride } : {}
1669
1678
  })
1670
1679
  });
1671
1680
  if (!res.ok) {
@@ -1701,7 +1710,7 @@ function useVoice(options = {}) {
1701
1710
  }
1702
1711
  teardownAudio();
1703
1712
  }
1704
- }, [agentId, threadId, fetchWithAuth, handleMessage, teardownAudio, voiceLogger]);
1713
+ }, [agentId, threadId, contextOverride, fetchWithAuth, handleMessage, teardownAudio, voiceLogger]);
1705
1714
  const mute = useCallback4((muted) => {
1706
1715
  setIsMuted(muted);
1707
1716
  streamRef.current?.getAudioTracks().forEach((track) => {