@diegoaltoworks/talker 0.1.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/LICENSE +21 -0
- package/README.md +299 -0
- package/dist/adapters/twilio.d.ts +12 -0
- package/dist/adapters/twilio.d.ts.map +1 -0
- package/dist/core/chat.d.ts +14 -0
- package/dist/core/chat.d.ts.map +1 -0
- package/dist/core/chatbot/client.d.ts +12 -0
- package/dist/core/chatbot/client.d.ts.map +1 -0
- package/dist/core/chatbot/conversations.d.ts +14 -0
- package/dist/core/chatbot/conversations.d.ts.map +1 -0
- package/dist/core/chatbot/index.d.ts +9 -0
- package/dist/core/chatbot/index.d.ts.map +1 -0
- package/dist/core/chatbot/types.d.ts +25 -0
- package/dist/core/chatbot/types.d.ts.map +1 -0
- package/dist/core/context.d.ts +61 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.test.d.ts +2 -0
- package/dist/core/context.test.d.ts.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.test.d.ts +2 -0
- package/dist/core/errors.test.d.ts.map +1 -0
- package/dist/core/logger.d.ts +11 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/phrases.d.ts +30 -0
- package/dist/core/phrases.d.ts.map +1 -0
- package/dist/core/phrases.test.d.ts +2 -0
- package/dist/core/phrases.test.d.ts.map +1 -0
- package/dist/core/processing/incoming.d.ts +12 -0
- package/dist/core/processing/incoming.d.ts.map +1 -0
- package/dist/core/processing/index.d.ts +10 -0
- package/dist/core/processing/index.d.ts.map +1 -0
- package/dist/core/processing/openai.d.ts +15 -0
- package/dist/core/processing/openai.d.ts.map +1 -0
- package/dist/core/processing/outgoing.d.ts +12 -0
- package/dist/core/processing/outgoing.d.ts.map +1 -0
- package/dist/core/processing/prompts.d.ts +14 -0
- package/dist/core/processing/prompts.d.ts.map +1 -0
- package/dist/core/twiml.d.ts +31 -0
- package/dist/core/twiml.d.ts.map +1 -0
- package/dist/core/twiml.test.d.ts +2 -0
- package/dist/core/twiml.test.d.ts.map +1 -0
- package/dist/core/voice.d.ts +16 -0
- package/dist/core/voice.d.ts.map +1 -0
- package/dist/core/voice.test.d.ts +2 -0
- package/dist/core/voice.test.d.ts.map +1 -0
- package/dist/core/xml.d.ts +8 -0
- package/dist/core/xml.d.ts.map +1 -0
- package/dist/core/xml.test.d.ts +2 -0
- package/dist/core/xml.test.d.ts.map +1 -0
- package/dist/db/client.d.ts +25 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/index.d.ts +12 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/migrate.d.ts +8 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/persist.d.ts +18 -0
- package/dist/db/persist.d.ts.map +1 -0
- package/dist/db/sessions.d.ts +57 -0
- package/dist/db/sessions.d.ts.map +1 -0
- package/dist/flows/index.d.ts +12 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/intent.d.ts +11 -0
- package/dist/flows/intent.d.ts.map +1 -0
- package/dist/flows/loader.d.ts +12 -0
- package/dist/flows/loader.d.ts.map +1 -0
- package/dist/flows/manager.d.ts +14 -0
- package/dist/flows/manager.d.ts.map +1 -0
- package/dist/flows/params.d.ts +12 -0
- package/dist/flows/params.d.ts.map +1 -0
- package/dist/flows/registry.d.ts +35 -0
- package/dist/flows/registry.d.ts.map +1 -0
- package/dist/flows/utils.d.ts +12 -0
- package/dist/flows/utils.d.ts.map +1 -0
- package/dist/flows/utils.test.d.ts +2 -0
- package/dist/flows/utils.test.d.ts.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1840 -0
- package/dist/index.mjs +1771 -0
- package/dist/plugin.d.ts +31 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/routes/call/handle-answer.d.ts +10 -0
- package/dist/routes/call/handle-answer.d.ts.map +1 -0
- package/dist/routes/call/handle-initial.d.ts +10 -0
- package/dist/routes/call/handle-initial.d.ts.map +1 -0
- package/dist/routes/call/handle-nospeech.d.ts +10 -0
- package/dist/routes/call/handle-nospeech.d.ts.map +1 -0
- package/dist/routes/call/handle-respond.d.ts +11 -0
- package/dist/routes/call/handle-respond.d.ts.map +1 -0
- package/dist/routes/call/handle-status.d.ts +9 -0
- package/dist/routes/call/handle-status.d.ts.map +1 -0
- package/dist/routes/call/index.d.ts +14 -0
- package/dist/routes/call/index.d.ts.map +1 -0
- package/dist/routes/call/pending.d.ts +20 -0
- package/dist/routes/call/pending.d.ts.map +1 -0
- package/dist/routes/call/processor.d.ts +13 -0
- package/dist/routes/call/processor.d.ts.map +1 -0
- package/dist/routes/sms/handle-incoming.d.ts +10 -0
- package/dist/routes/sms/handle-incoming.d.ts.map +1 -0
- package/dist/routes/sms/index.d.ts +13 -0
- package/dist/routes/sms/index.d.ts.map +1 -0
- package/dist/routes/sms/processor.d.ts +12 -0
- package/dist/routes/sms/processor.d.ts.map +1 -0
- package/dist/standalone.d.ts +44 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/types.d.ts +240 -0
- package/dist/types.d.ts.map +1 -0
- package/language/de.json +27 -0
- package/language/en.json +27 -0
- package/language/es.json +27 -0
- package/language/fr.json +27 -0
- package/language/nl.json +27 -0
- package/language/pt.json +27 -0
- package/package.json +103 -0
- package/prompts/incoming.md +88 -0
- package/prompts/outgoing.md +58 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outgoing Response Processor
|
|
3
|
+
*
|
|
4
|
+
* Post-processes outgoing responses: channel-appropriate formatting
|
|
5
|
+
* (voice vs SMS), language translation, brevity enforcement.
|
|
6
|
+
*/
|
|
7
|
+
import type { Channel, TalkerDependencies } from "../../types";
|
|
8
|
+
/**
|
|
9
|
+
* Post-process an outgoing response for the telephony channel
|
|
10
|
+
*/
|
|
11
|
+
export declare function processOutgoing(deps: TalkerDependencies, phoneNumber: string, botResponse: string, channel?: Channel): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=outgoing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outgoing.d.ts","sourceRoot":"","sources":["../../../src/core/processing/outgoing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAO/D;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads and caches system prompts for the incoming/outgoing processing pipeline.
|
|
5
|
+
* Looks in custom paths first, then falls back to built-in prompts.
|
|
6
|
+
*/
|
|
7
|
+
import type { TalkerDependencies } from "../../types";
|
|
8
|
+
export declare function getIncomingPrompt(deps: TalkerDependencies): string;
|
|
9
|
+
export declare function getOutgoingPrompt(deps: TalkerDependencies): string;
|
|
10
|
+
/**
|
|
11
|
+
* Reset prompt cache (for testing)
|
|
12
|
+
*/
|
|
13
|
+
export declare function resetPromptCache(): void;
|
|
14
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/core/processing/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoBtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAYlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAWlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TwiML Generation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Generates Twilio Markup Language (TwiML) XML for voice and SMS responses.
|
|
5
|
+
*/
|
|
6
|
+
import type { TalkerConfig } from "../types";
|
|
7
|
+
/**
|
|
8
|
+
* Generate TwiML for a speech gather with response
|
|
9
|
+
*/
|
|
10
|
+
export declare function gatherTwiml(prompt: string, language: string, config: TalkerConfig, phoneNumber?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate TwiML for a simple say
|
|
13
|
+
*/
|
|
14
|
+
export declare function sayTwiml(message: string, language: string, config: TalkerConfig): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generate TwiML for transferring to a human
|
|
17
|
+
*/
|
|
18
|
+
export declare function transferTwiml(language: string, config: TalkerConfig): string;
|
|
19
|
+
/**
|
|
20
|
+
* Generate TwiML for the "one moment please" acknowledgment
|
|
21
|
+
*/
|
|
22
|
+
export declare function acknowledgmentTwiml(language: string, config: TalkerConfig): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate TwiML for ending a call with a farewell
|
|
25
|
+
*/
|
|
26
|
+
export declare function farewellTwiml(language: string, config: TalkerConfig): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate TwiML for an SMS response
|
|
29
|
+
*/
|
|
30
|
+
export declare function messageTwiml(message: string): string;
|
|
31
|
+
//# sourceMappingURL=twiml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twiml.d.ts","sourceRoot":"","sources":["../../src/core/twiml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAM1D;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAMxF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAS5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CASlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twiml.test.d.ts","sourceRoot":"","sources":["../../src/core/twiml.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice configuration for different languages
|
|
3
|
+
*
|
|
4
|
+
* Maps language codes to TTS voice identifiers and BCP-47 language tags.
|
|
5
|
+
* Default configuration uses Amazon Polly voices via Twilio.
|
|
6
|
+
*/
|
|
7
|
+
import type { VoiceConfig } from "../types";
|
|
8
|
+
/**
|
|
9
|
+
* Get voice configuration for a language, with optional custom overrides
|
|
10
|
+
*/
|
|
11
|
+
export declare function getVoiceConfig(language: string, customVoices?: Record<string, VoiceConfig>): VoiceConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Get the default voice map (useful for consumers who want to extend it)
|
|
14
|
+
*/
|
|
15
|
+
export declare function getDefaultVoices(): Record<string, VoiceConfig>;
|
|
16
|
+
//# sourceMappingURL=voice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../src/core/voice.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAa5C;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACzC,WAAW,CAKb;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAE9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.test.d.ts","sourceRoot":"","sources":["../../src/core/voice.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../src/core/xml.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.test.d.ts","sourceRoot":"","sources":["../../src/core/xml.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Client
|
|
3
|
+
*
|
|
4
|
+
* Lazy-initialized Turso/libSQL client.
|
|
5
|
+
* Returns null when not configured — all callers handle this gracefully.
|
|
6
|
+
*/
|
|
7
|
+
import { type Client } from "@libsql/client";
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the database client from config.
|
|
10
|
+
* Called once during setup; subsequent calls to getDbClient() return the cached client.
|
|
11
|
+
*/
|
|
12
|
+
export declare function initDbClient(url: string, authToken: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Set the database client directly (for testing with mock/in-memory clients).
|
|
15
|
+
*/
|
|
16
|
+
export declare function setDbClient(mockClient: Client | null): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get the database client. Returns null if not configured.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getDbClient(): Client | null;
|
|
21
|
+
/**
|
|
22
|
+
* Close the database client.
|
|
23
|
+
*/
|
|
24
|
+
export declare function closeDbClient(): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAK3D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAajE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAYnD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Module
|
|
3
|
+
*
|
|
4
|
+
* Optional session persistence to Turso/libSQL.
|
|
5
|
+
* Activates when database.url and database.authToken are provided in config.
|
|
6
|
+
*/
|
|
7
|
+
export { closeDbClient, getDbClient, initDbClient } from "./client";
|
|
8
|
+
export { runMigrations } from "./migrate";
|
|
9
|
+
export { persistFinalSession, persistSession } from "./persist";
|
|
10
|
+
export { generateId, generateSessionId, insertMessage, saveSessionWithMessages, updateSessionIncremental, upsertSession, } from "./sessions";
|
|
11
|
+
export type { MessageRecord, SessionRecord } from "./sessions";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCnD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Persistence Helpers
|
|
3
|
+
*
|
|
4
|
+
* Non-blocking helpers that save conversation state to the database.
|
|
5
|
+
* Safe to call when database is not configured — gracefully no-ops.
|
|
6
|
+
*/
|
|
7
|
+
import type { Channel } from "../types";
|
|
8
|
+
/**
|
|
9
|
+
* Persist the current conversation state to the database.
|
|
10
|
+
* Non-blocking — fires and forgets. Logs errors but never throws.
|
|
11
|
+
*/
|
|
12
|
+
export declare function persistSession(phoneNumber: string, channel: Channel, conversationId?: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Persist the final session state when a call completes.
|
|
15
|
+
* Sets the reason and optional transfer reason.
|
|
16
|
+
*/
|
|
17
|
+
export declare function persistFinalSession(phoneNumber: string, channel: Channel, reason: "ended" | "redirected", transferReason?: string): void;
|
|
18
|
+
//# sourceMappingURL=persist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../src/db/persist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAIxC;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAsCN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GAAG,YAAY,EAC9B,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CA2BN"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Persistence
|
|
3
|
+
*
|
|
4
|
+
* Saves telephony sessions and messages to talker_sessions / talker_messages.
|
|
5
|
+
* All operations are graceful — they return false/skip when the database is not configured.
|
|
6
|
+
*/
|
|
7
|
+
import type { Channel } from "../types";
|
|
8
|
+
export interface SessionRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
phoneNumber: string;
|
|
11
|
+
channel: Channel;
|
|
12
|
+
reason: "ended" | "redirected";
|
|
13
|
+
language: string;
|
|
14
|
+
startedAt: number;
|
|
15
|
+
endedAt: number;
|
|
16
|
+
durationMs: number;
|
|
17
|
+
transferReason?: string;
|
|
18
|
+
conversationId?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface MessageRecord {
|
|
21
|
+
id: string;
|
|
22
|
+
sessionId: string;
|
|
23
|
+
role: "user" | "assistant";
|
|
24
|
+
content: string;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
}
|
|
27
|
+
declare function generateId(): string;
|
|
28
|
+
export declare function generateSessionId(phoneNumber: string, startTime: number): string;
|
|
29
|
+
/**
|
|
30
|
+
* Upsert a session (insert or update)
|
|
31
|
+
*/
|
|
32
|
+
export declare function upsertSession(session: SessionRecord): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Insert a single message (idempotent — skips duplicates)
|
|
35
|
+
*/
|
|
36
|
+
export declare function insertMessage(message: MessageRecord): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Save session and messages in one go
|
|
39
|
+
*/
|
|
40
|
+
export declare function saveSessionWithMessages(session: SessionRecord, messages: Array<{
|
|
41
|
+
role: "user" | "assistant";
|
|
42
|
+
content: string;
|
|
43
|
+
timestamp: number;
|
|
44
|
+
}>): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Update session incrementally after each interaction.
|
|
47
|
+
* Called non-blocking after every call/sms exchange.
|
|
48
|
+
*/
|
|
49
|
+
export declare function updateSessionIncremental(phoneNumber: string, channel: Channel, context: {
|
|
50
|
+
createdAt: number;
|
|
51
|
+
}, language: string, messages: Array<{
|
|
52
|
+
role: "user" | "assistant";
|
|
53
|
+
content: string;
|
|
54
|
+
timestamp: number;
|
|
55
|
+
}>, conversationId?: string): Promise<boolean>;
|
|
56
|
+
export { generateId };
|
|
57
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iBAAS,UAAU,IAAI,MAAM,CAE5B;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAiD5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB5E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GAClF,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACnF,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,OAAO,CAAC,CAwClB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Engine
|
|
3
|
+
*
|
|
4
|
+
* Re-exports flow system components.
|
|
5
|
+
*/
|
|
6
|
+
export { FlowRegistry } from "./registry";
|
|
7
|
+
export { processFlow, shouldExitFlow } from "./manager";
|
|
8
|
+
export { loadFlowsFromDirectory } from "./loader";
|
|
9
|
+
export { detectIntent } from "./intent";
|
|
10
|
+
export { extractParameters } from "./params";
|
|
11
|
+
export { getExitMessage } from "./utils";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flows/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM-powered Intent Detection
|
|
3
|
+
*
|
|
4
|
+
* Classifies user messages into flow intents using OpenAI.
|
|
5
|
+
*/
|
|
6
|
+
import type { IntentDetection, LoadedFlow, TalkerDependencies } from "../types";
|
|
7
|
+
/**
|
|
8
|
+
* Detect user intent using LLM
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectIntent(deps: TalkerDependencies, phoneNumber: string, userMessage: string, flows: Map<string, LoadedFlow>, conversationContext?: string[]): Promise<IntentDetection>;
|
|
11
|
+
//# sourceMappingURL=intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/flows/intent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAIhF;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,eAAe,CAAC,CAmG1B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Flow Loader
|
|
3
|
+
*
|
|
4
|
+
* Discovers and loads flow definitions from the filesystem.
|
|
5
|
+
* Each flow is a directory containing: flow.json, handler.ts, instructions.md
|
|
6
|
+
*/
|
|
7
|
+
import type { LoadedFlow } from "../types";
|
|
8
|
+
/**
|
|
9
|
+
* Load all flows from a directory
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadFlowsFromDirectory(flowsDir: string): Promise<Map<string, LoadedFlow>>;
|
|
12
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/flows/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAA4C,UAAU,EAAE,MAAM,UAAU,CAAC;AAErF;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CA8B/F"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Manager
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the flow lifecycle: triggering, parameter collection,
|
|
5
|
+
* execution, and cleanup.
|
|
6
|
+
*/
|
|
7
|
+
import type { Channel, FlowResult, TalkerDependencies } from "../types";
|
|
8
|
+
import type { FlowRegistry } from "./registry";
|
|
9
|
+
export { shouldExitFlow } from "./utils";
|
|
10
|
+
/**
|
|
11
|
+
* Process a flow for a user message
|
|
12
|
+
*/
|
|
13
|
+
export declare function processFlow(deps: TalkerDependencies, registry: FlowRegistry, phoneNumber: string, userMessage: string, channel: Channel): Promise<FlowResult>;
|
|
14
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/flows/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,CAAC,CAgJrB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Extraction
|
|
3
|
+
*
|
|
4
|
+
* Uses OpenAI to extract structured parameters from user messages
|
|
5
|
+
* based on flow schema definitions.
|
|
6
|
+
*/
|
|
7
|
+
import type { FlowExtractionResult, LoadedFlow, TalkerDependencies } from "../types";
|
|
8
|
+
/**
|
|
9
|
+
* Extract parameters from user message using OpenAI
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractParameters(deps: TalkerDependencies, flow: LoadedFlow, phoneNumber: string, userMessage: string, existingParams: Record<string, unknown>): Promise<FlowExtractionResult>;
|
|
12
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/flows/params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAIrF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,oBAAoB,CAAC,CA2I/B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for loaded flows. Provides flow lookup, intent matching,
|
|
5
|
+
* and instruction loading.
|
|
6
|
+
*/
|
|
7
|
+
import type { LoadedFlow, TalkerDependencies } from "../types";
|
|
8
|
+
export declare class FlowRegistry {
|
|
9
|
+
private flows;
|
|
10
|
+
private flowsDir;
|
|
11
|
+
constructor(flowsDir: string);
|
|
12
|
+
/**
|
|
13
|
+
* Load all flows from the flows directory
|
|
14
|
+
*/
|
|
15
|
+
loadFlows(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Get a flow by name
|
|
18
|
+
*/
|
|
19
|
+
getFlow(name: string): LoadedFlow | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Match user message to a flow using hybrid approach:
|
|
22
|
+
* 1. Critical keyword detection (immediate)
|
|
23
|
+
* 2. LLM intent classification
|
|
24
|
+
*/
|
|
25
|
+
matchFlow(deps: TalkerDependencies, phoneNumber: string, message: string, conversationContext?: string[]): Promise<LoadedFlow | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Get all loaded flows
|
|
28
|
+
*/
|
|
29
|
+
getAllFlows(): LoadedFlow[];
|
|
30
|
+
/**
|
|
31
|
+
* Get flow instructions content
|
|
32
|
+
*/
|
|
33
|
+
getInstructions(flowName: string): string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/flows/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAM/D,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C;;;;OAIG;IACG,SAAS,CACb,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAyClC;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAI3B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAO1C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow utility functions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if user wants to exit the current flow
|
|
6
|
+
*/
|
|
7
|
+
export declare function shouldExitFlow(message: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Get exit message for a specific language
|
|
10
|
+
*/
|
|
11
|
+
export declare function getExitMessage(language: string, languageDir?: string): string;
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/flows/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/flows/utils.test.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Talker — Telephony Plugin for Chatter
|
|
3
|
+
*
|
|
4
|
+
* Adds voice call and SMS support to Chatter chatbots via Twilio.
|
|
5
|
+
* Can also run as a standalone telephony server with a custom chatFn.
|
|
6
|
+
*
|
|
7
|
+
* ## Usage as Chatter Plugin
|
|
8
|
+
*
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { createServer } from "@diegoaltoworks/chatter";
|
|
11
|
+
* import { createTelephonyRoutes } from "@diegoaltoworks/talker";
|
|
12
|
+
*
|
|
13
|
+
* const app = await createServer({
|
|
14
|
+
* ...chatterConfig,
|
|
15
|
+
* customRoutes: (app, deps) => {
|
|
16
|
+
* createTelephonyRoutes(app, deps, {
|
|
17
|
+
* twilio: { accountSid, authToken, phoneNumber },
|
|
18
|
+
* transferNumber: "+44...",
|
|
19
|
+
* });
|
|
20
|
+
* },
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ## Usage as Standalone Server
|
|
25
|
+
*
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { createStandaloneServer } from "@diegoaltoworks/talker";
|
|
28
|
+
*
|
|
29
|
+
* const app = await createStandaloneServer({
|
|
30
|
+
* openaiApiKey: process.env.OPENAI_API_KEY!,
|
|
31
|
+
* chatFn: async (phone, msg) => myBot.reply(msg),
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* Bun.serve({ port: 3000, fetch: app.fetch });
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @packageDocumentation
|
|
38
|
+
*/
|
|
39
|
+
export { createTelephonyRoutes } from "./plugin";
|
|
40
|
+
export { createStandaloneServer } from "./standalone";
|
|
41
|
+
export type { StandaloneConfig } from "./standalone";
|
|
42
|
+
export type { TalkerConfig, TalkerDependencies, TelephonyFeatureFlags, TwilioConfig, ChatbotConfig, ProcessingConfig, Channel, VoiceConfig, IncomingResult, TelephonyContext, Phrases, } from "./types";
|
|
43
|
+
export type { FlowDefinition, FlowSchema, FlowSchemaProperty, FlowState, FlowHandler, FlowHandlerResult, FlowHandlerContext, FlowPrefill, FlowExtractionResult, FlowResult, IntentDetection, LoadedFlow, } from "./types";
|
|
44
|
+
export { processIncoming, processOutgoing } from "./core/processing";
|
|
45
|
+
export { getVoiceConfig, getDefaultVoices } from "./core/voice";
|
|
46
|
+
export { escapeXml } from "./core/xml";
|
|
47
|
+
export { getPhrase, getFarewellPhrase, getFlowPhrase, getSmsPhrase, loadPhrases, } from "./core/phrases";
|
|
48
|
+
export { getOrCreateContext, getContext, clearContext, clearAllContexts, setDetectedLanguage, getDetectedLanguage, addMessage, getMessageHistory, setActiveFlow, getActiveFlow, updateFlowParams, clearActiveFlow, incrementNoSpeechRetries, resetNoSpeechRetries, getLastPrompt, setLastPrompt, startCleanup, stopCleanup, } from "./core/context";
|
|
49
|
+
export { gatherTwiml, sayTwiml, transferTwiml, acknowledgmentTwiml, farewellTwiml, messageTwiml, } from "./core/twiml";
|
|
50
|
+
export { FlowRegistry } from "./flows/registry";
|
|
51
|
+
export { processFlow, shouldExitFlow } from "./flows/manager";
|
|
52
|
+
export { loadFlowsFromDirectory } from "./flows/loader";
|
|
53
|
+
export { getExitMessage } from "./flows/utils";
|
|
54
|
+
export { sendSMS } from "./adapters/twilio";
|
|
55
|
+
export { initDbClient, getDbClient, closeDbClient } from "./db/client";
|
|
56
|
+
export { runMigrations } from "./db/migrate";
|
|
57
|
+
export { persistFinalSession, persistSession } from "./db/persist";
|
|
58
|
+
export type { SessionRecord, MessageRecord } from "./db/sessions";
|
|
59
|
+
export { callRoutes } from "./routes/call";
|
|
60
|
+
export { smsRoutes } from "./routes/sms";
|
|
61
|
+
export { logger } from "./core/logger";
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,OAAO,GACR,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|