@guava-ai/guava-sdk 0.23.0 → 0.25.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.
- package/README.md +13 -3
- package/bin/example-runner.ts +138 -11
- package/dist/bin/example-runner.d.ts +23 -6
- package/dist/bin/example-runner.js +112 -9
- package/dist/bin/example-runner.js.map +1 -1
- package/dist/examples/{example.test.js → agent-testing.test.js} +2 -2
- package/dist/examples/agent-testing.test.js.map +1 -0
- package/dist/examples/help-desk.js +22 -8
- package/dist/examples/help-desk.js.map +1 -1
- package/dist/examples/multiple-agents.d.ts +1 -0
- package/dist/examples/multiple-agents.js +52 -0
- package/dist/examples/multiple-agents.js.map +1 -0
- package/dist/examples/property-insurance.js +14 -3
- package/dist/examples/property-insurance.js.map +1 -1
- package/dist/examples/restaurant-waitlist.js +9 -1
- package/dist/examples/restaurant-waitlist.js.map +1 -1
- package/dist/examples/scheduling-outbound.js +5 -6
- package/dist/examples/scheduling-outbound.js.map +1 -1
- package/dist/src/action-item.d.ts +4 -4
- package/dist/src/action-item.js +1 -1
- package/dist/src/action-item.js.map +1 -1
- package/dist/src/agent.d.ts +31 -11
- package/dist/src/agent.js +278 -135
- package/dist/src/agent.js.map +1 -1
- package/dist/src/call.d.ts +12 -1
- package/dist/src/call.js +87 -24
- package/dist/src/call.js.map +1 -1
- package/dist/src/client.d.ts +3 -0
- package/dist/src/client.js +6 -0
- package/dist/src/client.js.map +1 -1
- package/dist/src/commands.d.ts +37 -9
- package/dist/src/commands.js +13 -3
- package/dist/src/commands.js.map +1 -1
- package/dist/src/events.d.ts +28 -1
- package/dist/src/events.js +10 -2
- package/dist/src/events.js.map +1 -1
- package/dist/src/example-utils.d.ts +2 -0
- package/dist/src/example-utils.js +115 -0
- package/dist/src/example-utils.js.map +1 -0
- package/dist/src/health.d.ts +35 -0
- package/dist/src/health.js +99 -0
- package/dist/src/health.js.map +1 -0
- package/dist/src/helpers/index.d.ts +1 -0
- package/dist/src/helpers/index.js +9 -0
- package/dist/src/helpers/index.js.map +1 -0
- package/dist/src/helpers/llm.d.ts +43 -1
- package/dist/src/helpers/llm.js +247 -0
- package/dist/src/helpers/llm.js.map +1 -1
- package/dist/src/helpers/server-rag.d.ts +25 -0
- package/dist/src/helpers/server-rag.js +119 -0
- package/dist/src/helpers/server-rag.js.map +1 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/runner.d.ts +10 -0
- package/dist/src/runner.js +101 -0
- package/dist/src/runner.js.map +1 -0
- package/dist/src/socket/protocol.d.ts +4 -4
- package/dist/src/testing/mocks.d.ts +6 -0
- package/dist/src/testing/mocks.js +12 -0
- package/dist/src/testing/mocks.js.map +1 -1
- package/dist/src/testing/session.d.ts +7 -0
- package/dist/src/testing/session.js +3 -22
- package/dist/src/testing/session.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/examples/{example.test.ts → agent-testing.test.ts} +1 -1
- package/examples/help-desk.ts +21 -12
- package/examples/multiple-agents.ts +18 -0
- package/examples/property-insurance.ts +15 -3
- package/examples/restaurant-waitlist.ts +10 -1
- package/examples/scheduling-outbound.ts +5 -6
- package/package.json +9 -1
- package/src/action-item.ts +1 -1
- package/src/agent.ts +273 -147
- package/src/call.ts +115 -24
- package/src/client.ts +7 -0
- package/src/commands.ts +16 -2
- package/src/events.ts +11 -1
- package/src/example-utils.ts +87 -0
- package/src/health.ts +120 -0
- package/src/helpers/index.ts +2 -0
- package/src/helpers/llm.ts +170 -1
- package/src/helpers/server-rag.ts +132 -0
- package/src/index.ts +3 -1
- package/src/runner.ts +39 -0
- package/src/testing/mocks.ts +17 -0
- package/src/testing/session.ts +2 -22
- package/src/version.ts +1 -1
- package/dist/examples/example.test.js.map +0 -1
- /package/dist/examples/{example.test.d.ts → agent-testing.test.d.ts} +0 -0
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.MockCall = void 0;
|
|
7
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
4
8
|
const call_ts_1 = require("../call.js");
|
|
5
9
|
class MockCall extends call_ts_1.Call {
|
|
10
|
+
constructor(args = {}) {
|
|
11
|
+
super(args.callId ?? `mock-${node_crypto_1.default.randomBytes(6).toString("hex")}`, args.callInfo ?? {
|
|
12
|
+
call_type: "pstn",
|
|
13
|
+
from_number: null,
|
|
14
|
+
to_number: "+15555555555",
|
|
15
|
+
caller_id: null,
|
|
16
|
+
}, args.variables ?? {});
|
|
17
|
+
}
|
|
6
18
|
get commands() {
|
|
7
19
|
return this._commandQueue;
|
|
8
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/testing/mocks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/testing/mocks.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAiC;AACjC,wCAAkC;AAIlC,MAAa,QAAS,SAAQ,cAAI;IAChC,YACE,OAAkF,EAAE;QAEpF,KAAK,CACH,IAAI,CAAC,MAAM,IAAI,QAAQ,qBAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAC9D,IAAI,CAAC,QAAQ,IAAI;YACf,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,IAAI;SAChB,EACD,IAAI,CAAC,SAAS,IAAI,EAAE,CACrB,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,UAAmB;QAC7C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IAC5C,CAAC;CACF;AAvBD,4BAuBC"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type WebSocket from "ws";
|
|
2
|
+
import * as z from "zod";
|
|
2
3
|
import { type BotTTS, type InjectASR, TestingEvent } from "./protocol.ts";
|
|
3
4
|
import type { Client } from "../client.ts";
|
|
5
|
+
export declare const _evalResponseSchema: z.ZodObject<{
|
|
6
|
+
results: z.ZodArray<z.ZodObject<{
|
|
7
|
+
passed: z.ZodBoolean;
|
|
8
|
+
reasoning: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, z.core.$strip>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
4
11
|
export declare class TestSession {
|
|
5
12
|
private readonly _ws;
|
|
6
13
|
private readonly _client;
|
|
@@ -33,12 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TestSession = void 0;
|
|
36
|
+
exports.TestSession = exports._evalResponseSchema = void 0;
|
|
37
37
|
const node_crypto_1 = require("node:crypto");
|
|
38
38
|
const z = __importStar(require("zod"));
|
|
39
39
|
const protocol_ts_1 = require("./protocol.js");
|
|
40
40
|
const llm_ts_1 = require("../helpers/llm.js");
|
|
41
|
-
|
|
41
|
+
exports._evalResponseSchema = z.object({
|
|
42
42
|
results: z.array(z.object({
|
|
43
43
|
passed: z.boolean(),
|
|
44
44
|
reasoning: z.string().optional(),
|
|
@@ -170,26 +170,7 @@ ${transcript || "(empty — no conversation occurred)"}
|
|
|
170
170
|
|
|
171
171
|
Criteria:
|
|
172
172
|
${criteriaList}`;
|
|
173
|
-
const
|
|
174
|
-
type: "object",
|
|
175
|
-
properties: {
|
|
176
|
-
results: {
|
|
177
|
-
type: "array",
|
|
178
|
-
items: {
|
|
179
|
-
type: "object",
|
|
180
|
-
properties: {
|
|
181
|
-
passed: { type: "boolean" },
|
|
182
|
-
reasoning: { type: "string" },
|
|
183
|
-
},
|
|
184
|
-
required: ["passed"],
|
|
185
|
-
additionalProperties: false,
|
|
186
|
-
},
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
required: ["results"],
|
|
190
|
-
additionalProperties: false,
|
|
191
|
-
};
|
|
192
|
-
const evalResponse = _evalResponseSchema.parse(JSON.parse(await (0, llm_ts_1._generate)(this._client, prompt, evalSchema)));
|
|
173
|
+
const evalResponse = exports._evalResponseSchema.parse(JSON.parse(await (0, llm_ts_1._generate)(this._client, prompt, z.toJSONSchema(exports._evalResponseSchema))));
|
|
193
174
|
if (evalResponse.results.length !== allCriteria.length) {
|
|
194
175
|
throw new Error(`Evaluation returned ${evalResponse.results.length} results for ${allCriteria.length} criteria.`);
|
|
195
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/testing/session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA0C;AAC1C,uCAAyB;AACzB,+CAA0E;AAE1E,8CAA8C;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/testing/session.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.
|
|
1
|
+
export declare const SDK_VERSION = "0.25.0";
|
package/dist/src/version.js
CHANGED
|
@@ -10,7 +10,7 @@ import { agent } from "@guava-ai/guava-sdk/examples/help-desk";
|
|
|
10
10
|
describe("HelpDeskAgent", () => {
|
|
11
11
|
test("handler unit test - new purchase routes to sales", async () => {
|
|
12
12
|
const suggestion = await agent.handlers.onActionRequest(new MockCall(), "make a new purchase");
|
|
13
|
-
expect(suggestion).
|
|
13
|
+
expect(suggestion).toContainEqual({ key: "sales" });
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
test("new purchase routes to sales", async () => {
|
package/examples/help-desk.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as guava from "@guava-ai/guava-sdk";
|
|
2
|
-
import { DocumentQA
|
|
2
|
+
import { DocumentQA } from "@guava-ai/guava-sdk/helpers";
|
|
3
|
+
import { IntentRecognizer } from "@guava-ai/guava-sdk/helpers";
|
|
3
4
|
import { FURNITURE_RETAILER_QA } from "@guava-ai/guava-sdk/example-data";
|
|
4
|
-
import { getDefaultLogger } from "@guava-ai/guava-sdk";
|
|
5
5
|
|
|
6
6
|
export const agent = new guava.Agent({
|
|
7
7
|
name: "Nova",
|
|
@@ -9,22 +9,24 @@ export const agent = new guava.Agent({
|
|
|
9
9
|
purpose: "Answer questions and route callers to the appropriate department.",
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const documentQA = new DocumentQA({
|
|
13
|
+
documents: FURNITURE_RETAILER_QA,
|
|
14
|
+
namespace: "clearfield-home-living-qa",
|
|
15
|
+
});
|
|
15
16
|
|
|
16
|
-
const intentRecognizer = new IntentRecognizer(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
const intentRecognizer = new IntentRecognizer([
|
|
18
|
+
"sales",
|
|
19
|
+
"delivery-and-returns",
|
|
20
|
+
"account-management",
|
|
21
|
+
"other",
|
|
22
|
+
]);
|
|
20
23
|
|
|
21
24
|
agent.onQuestion(async (_call: guava.Call, question: string) => {
|
|
22
25
|
return await documentQA.ask(question);
|
|
23
26
|
});
|
|
24
27
|
|
|
25
28
|
agent.onActionRequest(async (_call: guava.Call, request: string) => {
|
|
26
|
-
|
|
27
|
-
return { key };
|
|
29
|
+
return await intentRecognizer.classify(request);
|
|
28
30
|
});
|
|
29
31
|
|
|
30
32
|
agent.onAction("sales", async (call: guava.Call) => {
|
|
@@ -60,12 +62,19 @@ export async function run(args: string[]) {
|
|
|
60
62
|
await agent.listenWebrtc();
|
|
61
63
|
} else if (args.includes("--phone")) {
|
|
62
64
|
agent.listenPhone(process.env.GUAVA_AGENT_NUMBER!);
|
|
65
|
+
} else if (args.includes("--sip")) {
|
|
66
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
67
|
+
if (!sipCode) {
|
|
68
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
await agent.listenSip(sipCode);
|
|
63
72
|
} else if (args.includes("--local")) {
|
|
64
73
|
await agent.callLocal();
|
|
65
74
|
} else if (args.includes("--chat")) {
|
|
66
75
|
await agent.chat();
|
|
67
76
|
} else {
|
|
68
|
-
console.error("Usage: guava-example help-desk --phone | --webrtc | --local | --chat");
|
|
77
|
+
console.error("Usage: guava-example help-desk --phone | --webrtc | --sip | --local | --chat");
|
|
69
78
|
process.exit(1);
|
|
70
79
|
}
|
|
71
80
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as guava from "@guava-ai/guava-sdk";
|
|
2
|
+
|
|
3
|
+
const agentA = new guava.Agent({
|
|
4
|
+
name: "Grace",
|
|
5
|
+
purpose: "You are a helpful voice agent.",
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
const agentB = new guava.Agent({
|
|
9
|
+
name: "Jordan",
|
|
10
|
+
purpose: "You are a helpful voice agent.",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export async function run(_args: string[]) {
|
|
14
|
+
const runner = new guava.Runner();
|
|
15
|
+
runner.listenPhone(agentA, process.env.GUAVA_AGENT_NUMBER!);
|
|
16
|
+
runner.listenWebrtc(agentB);
|
|
17
|
+
await runner.run();
|
|
18
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as guava from "@guava-ai/guava-sdk";
|
|
2
|
-
import { DocumentQA } from "@guava-ai/guava-sdk/helpers
|
|
2
|
+
import { DocumentQA } from "@guava-ai/guava-sdk/helpers";
|
|
3
3
|
import { PROPERTY_INSURANCE_POLICY } from "@guava-ai/guava-sdk/example-data";
|
|
4
4
|
|
|
5
5
|
const agent = new guava.Agent({
|
|
@@ -9,7 +9,10 @@ const agent = new guava.Agent({
|
|
|
9
9
|
|
|
10
10
|
// This is a built-in knowledge base helper that we will use for this example.
|
|
11
11
|
// You can use any RAG system you prefer.
|
|
12
|
-
const documentQA = new DocumentQA(
|
|
12
|
+
const documentQA = new DocumentQA({
|
|
13
|
+
documents: PROPERTY_INSURANCE_POLICY,
|
|
14
|
+
namespace: "harper-valley-property-insurance",
|
|
15
|
+
});
|
|
13
16
|
|
|
14
17
|
// When the Agent is asked a question that it cannot answer, it will invoke the on_question callback.
|
|
15
18
|
agent.onQuestion(async (call: guava.Call, question: string) => {
|
|
@@ -23,12 +26,21 @@ export async function run(args: string[]) {
|
|
|
23
26
|
await agent.listenWebrtc();
|
|
24
27
|
} else if (args.includes("--phone")) {
|
|
25
28
|
agent.listenPhone(process.env.GUAVA_AGENT_NUMBER!);
|
|
29
|
+
} else if (args.includes("--sip")) {
|
|
30
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
31
|
+
if (!sipCode) {
|
|
32
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
await agent.listenSip(sipCode);
|
|
26
36
|
} else if (args.includes("--local")) {
|
|
27
37
|
await agent.callLocal();
|
|
28
38
|
} else if (args.includes("--chat")) {
|
|
29
39
|
await agent.chat();
|
|
30
40
|
} else {
|
|
31
|
-
console.error(
|
|
41
|
+
console.error(
|
|
42
|
+
"Usage: guava-example property-insurance --phone | --webrtc | --sip | --local | --chat",
|
|
43
|
+
);
|
|
32
44
|
process.exit(1);
|
|
33
45
|
}
|
|
34
46
|
}
|
|
@@ -47,12 +47,21 @@ export async function run(args: string[]) {
|
|
|
47
47
|
await agent.listenWebrtc();
|
|
48
48
|
} else if (args.includes("--phone")) {
|
|
49
49
|
agent.listenPhone(process.env.GUAVA_AGENT_NUMBER!);
|
|
50
|
+
} else if (args.includes("--sip")) {
|
|
51
|
+
const sipCode = args[args.indexOf("--sip") + 1];
|
|
52
|
+
if (!sipCode) {
|
|
53
|
+
console.error("Error: --sip requires a SIP code argument.");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
await agent.listenSip(sipCode);
|
|
50
57
|
} else if (args.includes("--local")) {
|
|
51
58
|
await agent.callLocal();
|
|
52
59
|
} else if (args.includes("--chat")) {
|
|
53
60
|
await agent.chat();
|
|
54
61
|
} else {
|
|
55
|
-
console.error(
|
|
62
|
+
console.error(
|
|
63
|
+
"Usage: guava-example restaurant-waitlist --phone | --webrtc | --sip | --local | --chat",
|
|
64
|
+
);
|
|
56
65
|
process.exit(1);
|
|
57
66
|
}
|
|
58
67
|
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import * as guava from "@guava-ai/guava-sdk";
|
|
2
|
-
import { DatetimeFilter } from "@guava-ai/guava-sdk/helpers
|
|
2
|
+
import { DatetimeFilter } from "@guava-ai/guava-sdk/helpers";
|
|
3
3
|
import { mockAppointmentsForFuture } from "@guava-ai/guava-sdk/example-data";
|
|
4
|
+
import { getAgentNumber } from "@guava-ai/guava-sdk/example-utils";
|
|
4
5
|
|
|
5
6
|
const agent = new guava.Agent({
|
|
6
7
|
organization: "Bright Smile Dental",
|
|
7
8
|
purpose: "You are calling patients to help them schedule a dental appointment",
|
|
8
9
|
});
|
|
9
10
|
|
|
10
|
-
const datetimeFilter = new DatetimeFilter(
|
|
11
|
-
sourceList: mockAppointmentsForFuture(),
|
|
12
|
-
});
|
|
11
|
+
const datetimeFilter = new DatetimeFilter(mockAppointmentsForFuture());
|
|
13
12
|
|
|
14
13
|
agent.onCallStart(async (call: guava.Call) => {
|
|
15
14
|
await call.reachPerson(await call.getVariable("patientName"));
|
|
@@ -35,7 +34,7 @@ agent.onReachPerson(async (call: guava.Call, outcome: string) => {
|
|
|
35
34
|
],
|
|
36
35
|
});
|
|
37
36
|
} else {
|
|
38
|
-
await call.hangup("
|
|
37
|
+
await call.hangup("Appropriately end the call.");
|
|
39
38
|
}
|
|
40
39
|
});
|
|
41
40
|
|
|
@@ -58,7 +57,7 @@ export async function run(args: string[]) {
|
|
|
58
57
|
process.exit(1);
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
agent.callPhone(
|
|
60
|
+
agent.callPhone(await getAgentNumber(), toNumber, {
|
|
62
61
|
patientName: patientName,
|
|
63
62
|
});
|
|
64
63
|
}
|
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.
|
|
5
|
+
"version": "0.25.0",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"main": "dist/src/index.js",
|
|
8
8
|
"types": "dist/src/index.d.ts",
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"types": "./dist/src/index.d.ts",
|
|
12
12
|
"default": "./dist/src/index.js"
|
|
13
13
|
},
|
|
14
|
+
"./helpers": {
|
|
15
|
+
"types": "./dist/src/helpers/index.d.ts",
|
|
16
|
+
"default": "./dist/src/helpers/index.js"
|
|
17
|
+
},
|
|
14
18
|
"./helpers/openai": {
|
|
15
19
|
"types": "./dist/src/helpers/openai.d.ts",
|
|
16
20
|
"default": "./dist/src/helpers/openai.js"
|
|
@@ -19,6 +23,10 @@
|
|
|
19
23
|
"types": "./dist/src/example-data.d.ts",
|
|
20
24
|
"default": "./dist/src/example-data.js"
|
|
21
25
|
},
|
|
26
|
+
"./example-utils": {
|
|
27
|
+
"types": "./dist/src/example-utils.d.ts",
|
|
28
|
+
"default": "./dist/src/example-utils.js"
|
|
29
|
+
},
|
|
22
30
|
"./examples/help-desk": {
|
|
23
31
|
"types": "./dist/examples/help-desk.d.ts",
|
|
24
32
|
"default": "./dist/examples/help-desk.js"
|
package/src/action-item.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
|
|
3
3
|
export const FieldItemType = z.union(
|
|
4
|
-
(["text", "date", "
|
|
4
|
+
(["text", "date", "integer", "digit_sequence", "multiple_choice", "calendar_slot"] as const).map(
|
|
5
5
|
(val) => z.literal(val),
|
|
6
6
|
),
|
|
7
7
|
);
|