@shogo-ai/voice 1.10.0 → 2.4.1

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 +89 -0
  2. package/dist/{chunk-S3S2RNO6.js → chunk-BI6SL35K.js} +1 -184
  3. package/dist/chunk-CLF25CZC.js +987 -0
  4. package/dist/chunk-KMSL5PWK.js +540 -0
  5. package/dist/chunk-ME3SIZZU.js +581 -0
  6. package/dist/chunk-TQOBJMEK.js +17 -0
  7. package/dist/{chunk-T3T4EBWY.js → chunk-UH75UVM2.js} +6 -2
  8. package/dist/chunk-UW7VQ3S6.js +148 -0
  9. package/dist/chunk-XE4LLC7Z.js +1067 -0
  10. package/dist/chunk-ZAW6F3YT.js +172 -0
  11. package/dist/index.cjs +735 -25
  12. package/dist/index.d.cts +373 -3
  13. package/dist/index.d.ts +373 -3
  14. package/dist/index.js +59 -3
  15. package/dist/live/client.cjs +173 -0
  16. package/dist/live/client.d.cts +132 -0
  17. package/dist/live/client.d.ts +132 -0
  18. package/dist/live/client.js +9 -0
  19. package/dist/native/index.d.cts +5 -2
  20. package/dist/native/index.d.ts +5 -2
  21. package/dist/native/index.js +15 -11
  22. package/dist/{organicParticlesShaders-DIva0vBO.d.ts → organicParticlesShaders-seZq7jYX.d.cts} +1 -421
  23. package/dist/{organicParticlesShaders-DIva0vBO.d.cts → organicParticlesShaders-seZq7jYX.d.ts} +1 -421
  24. package/dist/particlesConfig-0YbdPOdY.d.cts +223 -0
  25. package/dist/particlesConfig-0YbdPOdY.d.ts +223 -0
  26. package/dist/react/conversation.cjs +789 -0
  27. package/dist/react/conversation.d.cts +134 -0
  28. package/dist/react/conversation.d.ts +134 -0
  29. package/dist/react/conversation.js +13 -0
  30. package/dist/react/index.cjs +374 -36
  31. package/dist/react/index.d.cts +10 -141
  32. package/dist/react/index.d.ts +10 -141
  33. package/dist/react/index.js +23 -770
  34. package/dist/react/visuals.cjs +1048 -0
  35. package/dist/react/visuals.d.cts +70 -0
  36. package/dist/react/visuals.d.ts +70 -0
  37. package/dist/react/visuals.js +10 -0
  38. package/dist/route/agent.cjs +1038 -85
  39. package/dist/route/agent.js +3 -3
  40. package/dist/route/audio-tags.cjs +1038 -85
  41. package/dist/route/audio-tags.js +3 -3
  42. package/dist/route/index.cjs +1042 -85
  43. package/dist/route/index.d.cts +19 -3
  44. package/dist/route/index.d.ts +19 -3
  45. package/dist/route/index.js +3 -3
  46. package/dist/route/music.cjs +1038 -85
  47. package/dist/route/music.js +3 -3
  48. package/dist/route/op.cjs +2118 -0
  49. package/dist/route/op.d.cts +43 -0
  50. package/dist/route/op.d.ts +43 -0
  51. package/dist/route/op.js +27 -0
  52. package/dist/route/signed-url.cjs +1038 -85
  53. package/dist/route/signed-url.js +3 -3
  54. package/dist/route/tts-preview.cjs +1038 -85
  55. package/dist/route/tts-preview.d.cts +6 -4
  56. package/dist/route/tts-preview.d.ts +6 -4
  57. package/dist/route/tts-preview.js +3 -3
  58. package/dist/server.cjs +1038 -85
  59. package/dist/server.d.cts +40 -8
  60. package/dist/server.d.ts +40 -8
  61. package/dist/server.js +2 -2
  62. package/dist/types-Bfhu-aQH.d.cts +199 -0
  63. package/dist/types-Bfhu-aQH.d.ts +199 -0
  64. package/dist/{types-W9y6eMj3.d.ts → types-CadjTXNH.d.cts} +193 -12
  65. package/dist/{types-W9y6eMj3.d.cts → types-CadjTXNH.d.ts} +193 -12
  66. package/package.json +21 -1
  67. package/dist/chunk-B4JC3DK2.js +0 -529
  68. package/dist/chunk-O362EJQR.js +0 -524
@@ -0,0 +1,172 @@
1
+ import {
2
+ stripAudioTags
3
+ } from "./chunk-Q3TJAJ54.js";
4
+
5
+ // src/shared/postJson.ts
6
+ function createPostJson({
7
+ authHeaders,
8
+ fetchCredentials
9
+ }) {
10
+ return async function postJson(path, body) {
11
+ return fetch(path, {
12
+ method: "POST",
13
+ headers: { "content-type": "application/json", ...authHeaders() },
14
+ credentials: fetchCredentials,
15
+ body: JSON.stringify(body)
16
+ });
17
+ };
18
+ }
19
+
20
+ // src/shared/memory.ts
21
+ function createMemoryAddTool({
22
+ postJson,
23
+ memoryAddPath
24
+ }) {
25
+ return async (params) => {
26
+ const fact = typeof params.fact === "string" ? params.fact : "";
27
+ if (!fact.trim()) return "Memory save failed: empty fact.";
28
+ try {
29
+ const res = await postJson(memoryAddPath, { fact });
30
+ if (!res.ok) return "Failed to save memory.";
31
+ return "Memory saved.";
32
+ } catch {
33
+ return "Memory save failed.";
34
+ }
35
+ };
36
+ }
37
+ function createMemoryContextInjector({
38
+ postJson,
39
+ memoryRetrievePath,
40
+ conversationRef,
41
+ enabled,
42
+ lastInjectedRef
43
+ }) {
44
+ return async function inject(userText) {
45
+ if (!enabled) return;
46
+ try {
47
+ const res = await postJson(memoryRetrievePath, { query: userText, limit: 4 });
48
+ if (!res.ok) return;
49
+ const data = await res.json();
50
+ const results = data.results ?? [];
51
+ if (!results.length) return;
52
+ const lines = results.map((r) => `- ${r.chunk.trim().replace(/\s+/g, " ").slice(0, 200)}`).join("\n");
53
+ if (lines === lastInjectedRef.current) return;
54
+ lastInjectedRef.current = lines;
55
+ const payload = `Relevant memory about this user:
56
+ ${lines}`;
57
+ conversationRef.current?.sendContextualUpdate(payload);
58
+ } catch {
59
+ }
60
+ };
61
+ }
62
+
63
+ // src/shared/transcript.ts
64
+ function createTranscriptDisconnectHandler({
65
+ isRestartingRef,
66
+ weStartedSessionRef,
67
+ transcriptRef,
68
+ onTranscript,
69
+ transcriptIngestPath,
70
+ postJson
71
+ }) {
72
+ return function handleTranscriptOnDisconnect() {
73
+ if (isRestartingRef.current) {
74
+ return;
75
+ }
76
+ if (!weStartedSessionRef.current) {
77
+ transcriptRef.current = [];
78
+ return;
79
+ }
80
+ weStartedSessionRef.current = false;
81
+ const transcript = transcriptRef.current.join("\n");
82
+ transcriptRef.current = [];
83
+ if (onTranscript) {
84
+ void onTranscript(transcript);
85
+ return;
86
+ }
87
+ const trimmed = transcript.trim();
88
+ if (trimmed.length < 20) return;
89
+ void postJson(transcriptIngestPath, { transcript: trimmed }).catch(() => {
90
+ });
91
+ };
92
+ }
93
+ function appendTranscriptLine(msg, { transcriptRef, weStartedSessionRef }) {
94
+ if (!msg?.message || !msg?.source) return;
95
+ if (!weStartedSessionRef.current) return;
96
+ const speaker = msg.source === "user" ? "User" : "Agent";
97
+ const cleaned = msg.source === "user" ? msg.message : stripAudioTags(msg.message);
98
+ if (!cleaned) return;
99
+ transcriptRef.current.push(`${speaker}: ${cleaned}`);
100
+ }
101
+
102
+ // src/shared/sessionPayload.ts
103
+ function sanitizeDynamicVariables(raw) {
104
+ if (raw == null) return {};
105
+ const out = {};
106
+ for (const [k, v] of Object.entries(raw)) {
107
+ if (v == null) continue;
108
+ out[k] = typeof v === "string" ? v : String(v);
109
+ }
110
+ return out;
111
+ }
112
+ function buildSessionPayload(opts) {
113
+ const dynamicVariables = {
114
+ ...sanitizeDynamicVariables(opts.dynamicVariables),
115
+ character_name: opts.characterName,
116
+ user_context: opts.userContext
117
+ };
118
+ if (typeof opts.conversationId === "string" && opts.conversationId.length > 0) {
119
+ dynamicVariables.conversation_id = opts.conversationId;
120
+ }
121
+ const payload = {
122
+ signedUrl: opts.signedUrl,
123
+ dynamicVariables
124
+ };
125
+ const agentOverrides = {};
126
+ if (opts.suppressFirstMessage) {
127
+ agentOverrides.firstMessage = "";
128
+ }
129
+ if (typeof opts.agentPromptOverride === "string" && opts.agentPromptOverride.length > 0) {
130
+ agentOverrides.prompt = { prompt: opts.agentPromptOverride };
131
+ }
132
+ if (Object.keys(agentOverrides).length > 0) {
133
+ payload.overrides = { agent: agentOverrides };
134
+ }
135
+ return payload;
136
+ }
137
+ async function fetchSignedUrl({
138
+ path,
139
+ fetchCredentials,
140
+ authHeaders
141
+ }) {
142
+ const res = await fetch(path, {
143
+ credentials: fetchCredentials,
144
+ headers: authHeaders()
145
+ });
146
+ if (!res.ok) throw new Error(`Signed URL request failed: ${res.status}`);
147
+ return await res.json();
148
+ }
149
+ function withProjectQuery(signedUrlPath, params) {
150
+ const tail = [];
151
+ if (typeof params.projectId === "string" && params.projectId.length > 0) {
152
+ tail.push(`projectId=${encodeURIComponent(params.projectId)}`);
153
+ }
154
+ if (typeof params.agentName === "string" && params.agentName.length > 0) {
155
+ tail.push(`agentName=${encodeURIComponent(params.agentName)}`);
156
+ }
157
+ if (tail.length === 0) return signedUrlPath;
158
+ const sep = signedUrlPath.includes("?") ? "&" : "?";
159
+ return `${signedUrlPath}${sep}${tail.join("&")}`;
160
+ }
161
+
162
+ export {
163
+ createPostJson,
164
+ createMemoryAddTool,
165
+ createMemoryContextInjector,
166
+ createTranscriptDisconnectHandler,
167
+ appendTranscriptLine,
168
+ buildSessionPayload,
169
+ fetchSignedUrl,
170
+ withProjectQuery
171
+ };
172
+ //# sourceMappingURL=chunk-ZAW6F3YT.js.map