@guava-ai/guava-sdk 0.42.0 → 0.44.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 (42) hide show
  1. package/README.md +3 -3
  2. package/bin/example-runner.ts +4 -0
  3. package/dist/bin/example-runner.js +4 -0
  4. package/dist/bin/example-runner.js.map +1 -1
  5. package/dist/examples/warm-transfer.d.ts +1 -0
  6. package/dist/examples/warm-transfer.js +111 -0
  7. package/dist/examples/warm-transfer.js.map +1 -0
  8. package/dist/src/agent.d.ts +5 -2
  9. package/dist/src/agent.js +114 -108
  10. package/dist/src/agent.js.map +1 -1
  11. package/dist/src/call.d.ts +82 -37
  12. package/dist/src/call.js +227 -91
  13. package/dist/src/call.js.map +1 -1
  14. package/dist/src/commands.d.ts +36 -0
  15. package/dist/src/commands.js +17 -1
  16. package/dist/src/commands.js.map +1 -1
  17. package/dist/src/events.d.ts +12 -0
  18. package/dist/src/events.js +7 -1
  19. package/dist/src/events.js.map +1 -1
  20. package/dist/src/index.d.ts +2 -2
  21. package/dist/src/index.js +3 -1
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/runner.js +12 -2
  24. package/dist/src/runner.js.map +1 -1
  25. package/dist/src/socket/client.js +1 -1
  26. package/dist/src/utils.d.ts +12 -0
  27. package/dist/src/utils.js +43 -1
  28. package/dist/src/utils.js.map +1 -1
  29. package/dist/src/version.d.ts +1 -1
  30. package/dist/src/version.js +1 -1
  31. package/examples/README.md +1 -0
  32. package/examples/warm-transfer.ts +90 -0
  33. package/package.json +1 -1
  34. package/src/agent.ts +105 -45
  35. package/src/call.ts +207 -111
  36. package/src/commands.ts +22 -0
  37. package/src/events.ts +8 -0
  38. package/src/index.ts +2 -1
  39. package/src/runner.ts +11 -2
  40. package/src/socket/client.ts +1 -1
  41. package/src/utils.ts +48 -1
  42. package/src/version.ts +1 -1
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.InboundTunnelEvent = exports.GuavaEvent = exports.EscalateEvent = exports.AgentDTMFSentEvent = exports.DTMFPressedEvent = exports.DTMF_DIGITS = exports.ExecuteActionEvent = exports.ActionRequestEvent = exports.ChoiceQueryEvent = exports.BotSessionEnded = exports.OutboundCallFailed = exports.OutboundCallConnected = exports.TaskCompletedEvent = exports.ActionItemCompletedEvent = exports.IntentEvent = exports.AgentQuestionEvent = exports.WarningEvent = exports.ErrorEvent = exports.AgentSpeechEvent = exports.CallerSpeechEvent = exports.InboundCallEvent = exports.SessionStartedEvent = void 0;
36
+ exports.InboundTunnelEvent = exports.GuavaEvent = exports.EscalateEvent = exports.WebRTCMessageEvent = exports.AgentDTMFSentEvent = exports.DTMFPressedEvent = exports.DTMF_DIGITS = exports.ExecuteActionEvent = exports.ActionRequestEvent = exports.ChoiceQueryEvent = exports.BotSessionEnded = exports.OutboundCallFailed = exports.OutboundCallConnected = exports.TaskCompletedEvent = exports.ActionItemCompletedEvent = exports.IntentEvent = exports.AgentQuestionEvent = exports.WarningEvent = exports.ErrorEvent = exports.AgentSpeechEvent = exports.CallerSpeechEvent = exports.InboundCallEvent = exports.SessionStartedEvent = void 0;
37
37
  exports.decodeEventDict = decodeEventDict;
38
38
  exports.decodeEvent = decodeEvent;
39
39
  const z = __importStar(require("zod"));
@@ -157,6 +157,11 @@ exports.AgentDTMFSentEvent = z.object({
157
157
  digits: z.array(z.enum(exports.DTMF_DIGITS)),
158
158
  requested_by: z.enum(["agent", "developer"]).default("agent"),
159
159
  });
160
+ /** A message sent by a connected WebRTC client. */
161
+ exports.WebRTCMessageEvent = z.object({
162
+ event_type: z.literal("webrtc-message"),
163
+ payload: z.record(z.string(), z.json()).default({}),
164
+ });
160
165
  exports.EscalateEvent = z.object({
161
166
  event_type: z.literal("escalate"),
162
167
  requested_by: z.enum(["human", "agent"]).default("human"),
@@ -181,6 +186,7 @@ exports.GuavaEvent = z.discriminatedUnion("event_type", [
181
186
  exports.EscalateEvent,
182
187
  exports.DTMFPressedEvent,
183
188
  exports.AgentDTMFSentEvent,
189
+ exports.WebRTCMessageEvent,
184
190
  ]);
185
191
  const _KNOWN_EVENT_TYPES = new Set(exports.GuavaEvent.options.map((schema) => schema.shape.event_type.value));
186
192
  function decodeEventDict(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ export { Logger, getConsoleLogger, getDefaultLogger } from "./logging.ts";
8
8
  export { Agent, CallInfo } from "./agent.ts";
9
9
  export { SIPCallInfo } from "./socket/call-info.ts";
10
10
  export { SipUri } from "./sip.ts";
11
- export { Call, DEFAULT_REACH_PERSON_OUTCOMES } from "./call.ts";
11
+ export { BaseCall, Call, RemoteCall, DEFAULT_REACH_PERSON_OUTCOMES } from "./call.ts";
12
12
  export type { ReachPersonOutcome } from "./call.ts";
13
13
  export type { SpeedPreset, Language } from "./commands.ts";
14
- export type { BotSessionEnded, TerminationReason, DTMFPressedEvent, AgentDTMFSentEvent, DTMFDigit, OutboundCallFailed, } from "./events.ts";
14
+ export type { BotSessionEnded, TerminationReason, DTMFPressedEvent, AgentDTMFSentEvent, DTMFDigit, OutboundCallFailed, WebRTCMessageEvent, } from "./events.ts";
15
15
  export { TestSession } from "./testing/session.ts";
16
16
  export { MockCall } from "./testing/mocks.ts";
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockCall = exports.TestSession = exports.DEFAULT_REACH_PERSON_OUTCOMES = exports.Call = exports.SipUri = exports.SIPCallInfo = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.Campaign = exports.Runner = exports.Client = void 0;
3
+ exports.MockCall = exports.TestSession = exports.DEFAULT_REACH_PERSON_OUTCOMES = exports.RemoteCall = exports.Call = exports.BaseCall = exports.SipUri = exports.SIPCallInfo = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.Campaign = exports.Runner = exports.Client = void 0;
4
4
  var client_ts_1 = require("./client.js");
5
5
  Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_ts_1.Client; } });
6
6
  var runner_ts_1 = require("./runner.js");
@@ -20,7 +20,9 @@ Object.defineProperty(exports, "SIPCallInfo", { enumerable: true, get: function
20
20
  var sip_ts_1 = require("./sip.js");
21
21
  Object.defineProperty(exports, "SipUri", { enumerable: true, get: function () { return sip_ts_1.SipUri; } });
22
22
  var call_ts_1 = require("./call.js");
23
+ Object.defineProperty(exports, "BaseCall", { enumerable: true, get: function () { return call_ts_1.BaseCall; } });
23
24
  Object.defineProperty(exports, "Call", { enumerable: true, get: function () { return call_ts_1.Call; } });
25
+ Object.defineProperty(exports, "RemoteCall", { enumerable: true, get: function () { return call_ts_1.RemoteCall; } });
24
26
  Object.defineProperty(exports, "DEFAULT_REACH_PERSON_OUTCOMES", { enumerable: true, get: function () { return call_ts_1.DEFAULT_REACH_PERSON_OUTCOMES; } });
25
27
  var session_ts_1 = require("./testing/session.js");
26
28
  Object.defineProperty(exports, "TestSession", { enumerable: true, get: function () { return session_ts_1.TestSession; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAQjB,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,sDAAoD;AAA3C,2GAAA,WAAW,OAAA;AACpB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,qCAAgE;AAAvD,+FAAA,IAAI,OAAA;AAAE,wHAAA,6BAA6B,OAAA;AAW5C,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAQjB,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,sDAAoD;AAA3C,2GAAA,WAAW,OAAA;AACpB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,qCAAsF;AAA7E,mGAAA,QAAQ,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,wHAAA,6BAA6B,OAAA;AAYlE,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
@@ -69,7 +69,10 @@ class Runner {
69
69
  listenWebrtc(agent, webrtcCode) {
70
70
  const ctx = this._healthCtx.createCtx();
71
71
  this._tasks.push(async () => {
72
- const code = webrtcCode ?? (await agent._client.createWebrtcAgent(3600));
72
+ // Unlike the Python SDK, code creation happens here to prevent Runner.listen_webrtc from becoming async.
73
+ if (!webrtcCode)
74
+ this._logger.info("No WebRTC code provided. Creating a temporary one.");
75
+ const code = webrtcCode || (await agent._client.createWebrtcAgent(3600));
73
76
  return agent._listenInbound(ctx, { webrtc_code: code }, {}, this._drainController.signal);
74
77
  });
75
78
  return this;
@@ -94,8 +97,15 @@ class Runner {
94
97
  this._drainController.abort();
95
98
  })
96
99
  : utils_ts_1.nullDisposable, false);
97
- await Promise.all(this._tasks.map((task) => task()));
100
+ // Wait for every task, so one failing doesn't tear down signal handling and
101
+ // the health server while others are still draining.
102
+ const results = await Promise.allSettled(this._tasks.map((task) => task()));
98
103
  this._logger.info("All tasks done.");
104
+ const errors = results.flatMap((r) => (r.status === "rejected" ? [r.reason] : []));
105
+ if (errors.length === 1)
106
+ throw errors[0];
107
+ if (errors.length > 1)
108
+ throw new AggregateError(errors, `${errors.length} runner tasks failed.`);
99
109
  }
100
110
  catch (e_1) {
101
111
  env_1.error = e_1;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
@@ -246,7 +246,7 @@ let GuavaSocket = (() => {
246
246
  socket.close();
247
247
  reject(new Error("Timed out waiting for open-ack"));
248
248
  });
249
- }, 10_000);
249
+ }, 15_000);
250
250
  socket.once("message", (data) => {
251
251
  clearTimeout(ackTimeout);
252
252
  try {
@@ -4,7 +4,19 @@ export declare function getCliConfigPath(): string;
4
4
  export declare function getBaseUrl(): string;
5
5
  export declare function sleep(ms: number): Promise<void>;
6
6
  export declare function fetchOrThrow(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
7
+ /**
8
+ * POST that retries network errors and retryable statuses, throwing on a final
9
+ * error status. A single Idempotency-Key is sent with every attempt so the
10
+ * server can drop duplicates.
11
+ *
12
+ * @param retries - Number of retries after the first attempt.
13
+ */
14
+ export declare function idempotentPost(input: string | URL, init?: Omit<RequestInit, "method">, retries?: number): Promise<Response>;
7
15
  /** A Disposable whose disposal does nothing. Useful as a conditional no-op. */
8
16
  export declare const nullDisposable: Disposable;
17
+ /**
18
+ * Run `listener` when `signal` aborts, or immediately if it already has.
19
+ * Dispose to unregister.
20
+ */
9
21
  export declare function onAbort(signal: AbortSignal, listener: () => void): Disposable;
10
22
  export declare function onSignal(handler: (signal: "SIGINT" | "SIGTERM") => void): Disposable;
package/dist/src/utils.js CHANGED
@@ -39,6 +39,7 @@ exports.getCliConfigPath = getCliConfigPath;
39
39
  exports.getBaseUrl = getBaseUrl;
40
40
  exports.sleep = sleep;
41
41
  exports.fetchOrThrow = fetchOrThrow;
42
+ exports.idempotentPost = idempotentPost;
42
43
  exports.onAbort = onAbort;
43
44
  exports.onSignal = onSignal;
44
45
  const fs = __importStar(require("node:fs"));
@@ -100,10 +101,51 @@ async function fetchOrThrow(input, init) {
100
101
  }
101
102
  return res;
102
103
  }
104
+ /**
105
+ * Whether `e` is a fetch network failure. Bad input (e.g. an invalid URL) is
106
+ * also a TypeError, but with a different message. Avoids `instanceof`, since
107
+ * fetch errors can come from another realm (e.g. under Jest).
108
+ */
109
+ function isNetworkError(e) {
110
+ const { name, message } = (e ?? {});
111
+ return name === "TypeError" && message === "fetch failed";
112
+ }
113
+ const RETRYABLE_STATUS_CODES = new Set([408, 409, 429, 500, 502, 503, 504]);
114
+ const RETRY_DELAYS_MS = [0, 500, 1000, 2000, 5000];
115
+ /**
116
+ * POST that retries network errors and retryable statuses, throwing on a final
117
+ * error status. A single Idempotency-Key is sent with every attempt so the
118
+ * server can drop duplicates.
119
+ *
120
+ * @param retries - Number of retries after the first attempt.
121
+ */
122
+ async function idempotentPost(input, init = {}, retries = 3) {
123
+ const headers = new Headers(init.headers);
124
+ if (!headers.has("Idempotency-Key"))
125
+ headers.set("Idempotency-Key", crypto.randomUUID());
126
+ for (let attempt = 0;; attempt++) {
127
+ try {
128
+ return await fetchOrThrow(input, { ...init, method: "POST", headers });
129
+ }
130
+ catch (e) {
131
+ const retryable = isNetworkError(e) || (e instanceof HttpStatusError && RETRYABLE_STATUS_CODES.has(e.status));
132
+ if (attempt === retries || !retryable)
133
+ throw e;
134
+ }
135
+ await sleep(RETRY_DELAYS_MS[Math.min(attempt, RETRY_DELAYS_MS.length - 1)]);
136
+ }
137
+ }
103
138
  /** A Disposable whose disposal does nothing. Useful as a conditional no-op. */
104
139
  exports.nullDisposable = { [Symbol.dispose]() { } };
140
+ /**
141
+ * Run `listener` when `signal` aborts, or immediately if it already has.
142
+ * Dispose to unregister.
143
+ */
105
144
  function onAbort(signal, listener) {
106
- signal.throwIfAborted();
145
+ if (signal.aborted) {
146
+ listener();
147
+ return exports.nullDisposable;
148
+ }
107
149
  signal.addEventListener("abort", listener, { once: true });
108
150
  return {
109
151
  [Symbol.dispose]() {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.42.0";
1
+ export declare const SDK_VERSION = "0.44.0";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SDK_VERSION = void 0;
4
- exports.SDK_VERSION = "0.42.0";
4
+ exports.SDK_VERSION = "0.44.0";
5
5
  //# sourceMappingURL=version.js.map
@@ -8,3 +8,4 @@
8
8
  - [restaurant-waitlist.ts](./restaurant-waitlist.ts) - Inbound call agent for a restaurant that collects caller name, party size, and phone number to add callers to a waitlist using a structured task.
9
9
  - [scheduling-outbound.ts](./scheduling-outbound.ts) - Outbound call agent for a dental office that uses `reachPerson` to confirm contact availability, then schedules appointments using a searchable calendar-slot field backed by `DatetimeFilter`.
10
10
  - [slow-speech.ts](./slow-speech.ts) - Minimal inbound agent that sets `speechSpeed` so the agent speaks at a slower pace, with a simple `onQuestion` handler.
11
+ - [warm-transfer.ts](./warm-transfer.ts) - Inbound agent that collects the caller's reason, then has a second agent call a rep to brief them; once the rep is ready, `RemoteCall` transfers the original call and the outbound call into a shared conference.
@@ -0,0 +1,90 @@
1
+ import crypto from "node:crypto";
2
+ import { Command } from "commander";
3
+ import * as guava from "@guava-ai/guava-sdk";
4
+ import { getAgentNumber } from "@guava-ai/guava-sdk/example-utils";
5
+
6
+ let agentNumber: string;
7
+ let transferDestination: string;
8
+
9
+ const agent = new guava.Agent({
10
+ name: "Nova",
11
+ organization: "Acme Corp",
12
+ });
13
+
14
+ agent.onCallStart(async (call: guava.Call) => {
15
+ await call.setTask({
16
+ taskId: "collect_reason",
17
+ checklist: [guava.Field({ key: "reason_for_calling", fieldType: "text" })],
18
+ });
19
+ });
20
+
21
+ agent.onTaskComplete("collect_reason", async (call: guava.Call) => {
22
+ await call.setTask({
23
+ taskId: "stall_customer",
24
+ objective: `Inform the caller that you're checking if a customer service
25
+ representative is ready to help them. Stay with the caller on the
26
+ line until the expert notifies you that the representative is ready.`,
27
+ });
28
+
29
+ // Generate a random conference ID that will be eventually used to join the two calls.
30
+ const conferenceId = crypto.randomBytes(10).toString("hex");
31
+
32
+ // Place the outbound call in the background, so this handler doesn't block until it
33
+ // ends. Pass this call's ID so the outbound call can transfer it later.
34
+ outboundAgent
35
+ .callPhone(agentNumber, transferDestination, {
36
+ conference_id: conferenceId,
37
+ original_call_id: call.id,
38
+ call_reason: await call.getField("reason_for_calling"),
39
+ })
40
+ .catch((err) => console.error("Outbound call failed:", err));
41
+ });
42
+
43
+ const outboundAgent = new guava.Agent({
44
+ name: "Nova",
45
+ organization: "Acme Corp",
46
+ purpose:
47
+ "You are an outbound calling agent. You talk to customer service representatives on behalf of callers and brief them before a warm transfer.",
48
+ });
49
+
50
+ outboundAgent.onCallStart(async (call: guava.Call) => {
51
+ await call.setTask({
52
+ taskId: "confirm_ready",
53
+ objective: `A caller is calling about ${await call.getVariable("call_reason")}. You are not talking to the caller - you are talking to a customer service representative.`,
54
+ checklist: [
55
+ "Inform the customer service agent of the caller's reason for calling.",
56
+ "Determine if the service agent is ready for a transfer.",
57
+ ],
58
+ });
59
+ });
60
+
61
+ outboundAgent.onTaskComplete("confirm_ready", async (call: guava.Call) => {
62
+ const conferenceId = await call.getVariable("conference_id");
63
+ const otherCall = new guava.RemoteCall(await call.getVariable("original_call_id"));
64
+
65
+ // Join the two calls.
66
+ const destination = `conference:${conferenceId}`;
67
+ await otherCall.transfer(destination, "The customer service representative is ready.");
68
+ await call.transfer(
69
+ destination,
70
+ "Transfer to the caller. Tell the rep that you are 'Patching in the caller.'",
71
+ );
72
+ });
73
+
74
+ export async function run(prog: string, args: string[]) {
75
+ const program = new Command()
76
+ .name(prog)
77
+ .showHelpAfterError()
78
+ .requiredOption("--transfer-destination <phone_number>", "Number to warm transfer callers to.")
79
+ .option(
80
+ "--agent-number <phone_number>",
81
+ "Number to listen on. Defaults to GUAVA_AGENT_NUMBER or your account's number.",
82
+ )
83
+ .action(async (options: { transferDestination: string; agentNumber?: string }) => {
84
+ transferDestination = options.transferDestination;
85
+ agentNumber = options.agentNumber ?? (await getAgentNumber());
86
+ await agent.listenPhone(agentNumber);
87
+ });
88
+
89
+ await program.parseAsync(args, { from: "user" });
90
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@guava-ai/guava-sdk",
3
3
  "description": "The official TypeScript SDK for building Guava voice agents.",
4
4
  "homepage": "https://docs.goguava.ai/typescript-sdk/",
5
- "version": "0.42.0",
5
+ "version": "0.44.0",
6
6
  "type": "commonjs",
7
7
  "main": "dist/src/index.js",
8
8
  "types": "dist/src/index.d.ts",