@cms.ai/brand_brain 0.0.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.
@@ -0,0 +1,387 @@
1
+ //#region src/types.d.ts
2
+ /** The `name` on `CUSTOM` guide events (skill payloads). */
3
+ declare const GuideEvent: {
4
+ readonly SkillStart: "skill_start";
5
+ readonly SkillContent: "skill_content";
6
+ readonly SkillDocuments: "skill_documents";
7
+ readonly SkillRecommendations: "skill_recommendations";
8
+ readonly SkillCTAs: "skill_ctas";
9
+ readonly SkillDiagnoseHeader: "skill_diagnose_header";
10
+ readonly SkillDiagnoseQuestion: "skill_diagnose_question";
11
+ readonly SkillPlaylistItems: "skill_playlist_items";
12
+ readonly SkillPlaylistHeader: "skill_playlist_header";
13
+ readonly SkillPlaylistRationale: "skill_playlist_rationale";
14
+ readonly SkillHowToOutline: "skill_howto_outline";
15
+ readonly SkillHowToSteps: "skill_howto_steps";
16
+ readonly SkillBusinessCaseChooser: "skill_businesscase_chooser";
17
+ readonly SkillBusinessCaseDelta: "skill_businesscase_delta";
18
+ readonly SkillSolutionDesignHeader: "skill_solutiondesign_header";
19
+ readonly SkillSolutionDesignDiagram: "skill_solutiondesign_diagram";
20
+ readonly SkillEnd: "skill_end";
21
+ readonly SkillError: "skill_error";
22
+ readonly SkillGate: "skill_gate";
23
+ readonly InputSuggestions: "input_suggestions";
24
+ };
25
+ type GuideEventName = (typeof GuideEvent)[keyof typeof GuideEvent];
26
+ /** The guide skill types. `answer` is always on; the rest are enabled per-guide. */
27
+ declare const SkillResponseType: {
28
+ readonly Answer: "answer";
29
+ readonly HowTo: "howto";
30
+ readonly Diagnose: "diagnose";
31
+ readonly Recommend: "recommend";
32
+ readonly Playlist: "playlist";
33
+ readonly BusinessCase: "businesscase";
34
+ readonly SolutionDesign: "solutiondesign";
35
+ };
36
+ type SkillResponseTypeType = (typeof SkillResponseType)[keyof typeof SkillResponseType];
37
+ /**
38
+ * The `eventType` passed to {@link GuideClient.track}. Any server-recognized
39
+ * event string is accepted — use an {@link EmbedTrackingEvent} member for the
40
+ * common cases.
41
+ */
42
+ type TrackEventType = string;
43
+ /** Consent tiers a visitor can grant. `essential` is always granted server-side. */
44
+ interface ConsentLevels {
45
+ functional?: boolean;
46
+ analytical?: boolean;
47
+ }
48
+ /** Per-guide UI copy overrides. */
49
+ interface GuideCustomization {
50
+ welcomeMessage?: string;
51
+ chatInputPlaceholders?: string[];
52
+ suggestionsTitle?: string;
53
+ helpTitle?: string;
54
+ pickUpWhereYouLeftOff?: string;
55
+ showGuideName?: boolean;
56
+ sideTabButtonText?: string;
57
+ pdfDisclaimerLine1?: string;
58
+ pdfDisclaimerLine2?: string;
59
+ pdfDownloadDescription?: string;
60
+ }
61
+ /** Lightweight knowledge-graph snapshot for page-load visualization. */
62
+ interface GuideGraphSnapshot {
63
+ nodes: Array<{
64
+ id: string;
65
+ name: string;
66
+ type: string;
67
+ tier: number;
68
+ }>;
69
+ edges: Array<{
70
+ from: string;
71
+ to: string;
72
+ relationship: string;
73
+ strength: number;
74
+ }>;
75
+ }
76
+ /**
77
+ * Resolved guide metadata returned by `guides.resolve`. `theme` / `skillIconStyle`
78
+ * are left as `unknown` in v1 — read them defensively or narrow as needed.
79
+ */
80
+ interface ResolvedGuide {
81
+ id: string;
82
+ name: string;
83
+ slug: string;
84
+ brandKitId: string | null;
85
+ magicLinkFormId: string | null;
86
+ accountId: string;
87
+ companyName: string;
88
+ gdprEnabled: boolean;
89
+ advancedSettings: {
90
+ gatePdfDownload: boolean;
91
+ };
92
+ theme: unknown;
93
+ skillIconStyle: unknown;
94
+ faviconUrl: string | null;
95
+ logoUrl: string | null;
96
+ heroImageUrl: string | null;
97
+ customization: GuideCustomization | null;
98
+ graphSnapshot: GuideGraphSnapshot | null;
99
+ }
100
+ /** A conversation record. */
101
+ interface Conversation {
102
+ id: string;
103
+ accountId: string;
104
+ guideId: string;
105
+ visitorId: string;
106
+ sessionId: string;
107
+ title: string | null;
108
+ createdAt: Date;
109
+ deletedAt: Date | null;
110
+ }
111
+ /** A persisted conversation message. */
112
+ interface ConversationMessage {
113
+ id: string;
114
+ accountId: string;
115
+ conversationId: string;
116
+ role: "human" | "assistant";
117
+ content: string | null;
118
+ isSynthetic: boolean;
119
+ createdAt: Date;
120
+ deletedAt: Date | null;
121
+ }
122
+ /** A conversation plus a page of its messages. */
123
+ interface ConversationWithMessages {
124
+ conversation: Conversation;
125
+ messages: ConversationMessage[];
126
+ }
127
+ /** A persisted skill deliverable. `data` shape varies by `type`. */
128
+ interface SkillInstance {
129
+ id: string;
130
+ skillOutputId: string;
131
+ accountId: string;
132
+ conversationId: string;
133
+ type: SkillResponseTypeType;
134
+ visitorId: string;
135
+ sessionId: string;
136
+ title: string | null;
137
+ data: Record<string, unknown>;
138
+ surfacedCta: unknown;
139
+ sharedAt: Date | null;
140
+ createdAt: Date;
141
+ updatedAt: Date;
142
+ deletedAt: Date | null;
143
+ }
144
+ /** A skill instance as returned in history lists (no `data`/`surfacedCta`). */
145
+ interface SkillHistoryInstance {
146
+ id: string;
147
+ skillOutputId: string;
148
+ accountId: string;
149
+ conversationId: string;
150
+ type: SkillResponseTypeType;
151
+ visitorId: string;
152
+ sessionId: string;
153
+ title: string | null;
154
+ sharedAt: Date | null;
155
+ createdAt: Date;
156
+ updatedAt: Date;
157
+ deletedAt: Date | null;
158
+ stepsCompleted: number | null;
159
+ totalSteps: number | null;
160
+ }
161
+ /** Skill history grouped by conversation. */
162
+ interface SkillHistoryGroup {
163
+ conversationId: string;
164
+ conversationTitle: string | null;
165
+ latestActivityAt: Date;
166
+ instances: SkillHistoryInstance[];
167
+ }
168
+ interface UpdateSkillInstanceResult {
169
+ id: string;
170
+ data: Record<string, unknown>;
171
+ updatedAt: Date;
172
+ }
173
+ interface SelectDraftResult {
174
+ skillInstanceId: string | null;
175
+ }
176
+ interface MarkSharedResult {
177
+ sharedAt: Date;
178
+ }
179
+ interface ImportSharedResult {
180
+ skillInstanceId: string;
181
+ type: SkillResponseTypeType;
182
+ conversationId: string;
183
+ }
184
+ /** The current visitor's tracking + consent + email status. */
185
+ interface VisitorStatus {
186
+ visitorId: string;
187
+ isTracked: boolean;
188
+ consent: {
189
+ functional: boolean;
190
+ analytical: boolean;
191
+ };
192
+ email: string | null;
193
+ verified: boolean;
194
+ }
195
+ /** Result of an email-gate submission. */
196
+ interface SubmitGateResult {
197
+ success: boolean;
198
+ needsVerification: boolean;
199
+ }
200
+ /** Optional lead-capture fields beyond the ones the SDK fills automatically. */
201
+ interface SubmitGateOptions {
202
+ redirectUrl?: string;
203
+ skill?: string;
204
+ prompt?: string;
205
+ skillInstanceId?: string;
206
+ hostUrl?: string;
207
+ requireVerification?: boolean;
208
+ downloadIntent?: boolean;
209
+ shareIntent?: boolean;
210
+ }
211
+ interface InitGuideConfig {
212
+ /**
213
+ * Branded host origin the SDK talks to, e.g. "https://guide.acme.com". Must be
214
+ * on the customer's own root domain so the visitor cookies stay same-site.
215
+ * `/api/v3` is appended automatically.
216
+ */
217
+ baseUrl: string;
218
+ /** Guide slug to resolve (e.g. "default"). */
219
+ slug: string;
220
+ /**
221
+ * Host domain used for account resolution + attribution. Defaults to
222
+ * `window.location.hostname`. Required when running without a browser window.
223
+ */
224
+ domain?: string;
225
+ /**
226
+ * Consent handling on init:
227
+ * - `"auto"` (default): grant all tiers when the guide has GDPR disabled; wait
228
+ * for an explicit `setConsent()` when it is enabled.
229
+ * - explicit levels: submit these immediately.
230
+ * - `false`: submit nothing; call `setConsent()` yourself.
231
+ */
232
+ consent?: "auto" | ConsentLevels | false;
233
+ /** Fire an initial `embed_loaded` + page-view event on init. Default `true`. */
234
+ trackLoad?: boolean;
235
+ /**
236
+ * Custom fetch implementation (SSR/testing). Defaults to `globalThis.fetch`.
237
+ * `credentials: "include"` is always applied so visitor cookies ride along.
238
+ */
239
+ fetch?: typeof globalThis.fetch;
240
+ }
241
+ /** A message in the SDK's in-memory conversation history. */
242
+ interface ChatMessage {
243
+ id: string;
244
+ role: "user" | "assistant";
245
+ content: string;
246
+ }
247
+ interface AskOptions {
248
+ /** Force a specific skill, bypassing server-side LLM routing. */
249
+ forcedSkill?: SkillResponseTypeType;
250
+ /** Abort the in-flight stream. */
251
+ signal?: AbortSignal;
252
+ }
253
+ /**
254
+ * A single event yielded by {@link GuideClient.ask}. The common case is `text`
255
+ * (the streamed chat reply); `skill` carries every structured skill payload,
256
+ * discriminated by its {@link GuideEventName} `name`.
257
+ */
258
+ type GuideStreamEvent = {
259
+ type: "run-started";
260
+ runId: string;
261
+ } | {
262
+ type: "message-start";
263
+ messageId: string;
264
+ role: string;
265
+ } | {
266
+ type: "text";
267
+ messageId: string;
268
+ delta: string;
269
+ } | {
270
+ type: "message-end";
271
+ messageId: string;
272
+ } | {
273
+ type: "skill";
274
+ name: GuideEventName;
275
+ value: Record<string, unknown>;
276
+ } | {
277
+ type: "gate";
278
+ skill: SkillResponseTypeType;
279
+ prompt?: string;
280
+ skillInstanceId?: string;
281
+ } | {
282
+ type: "error";
283
+ message: string;
284
+ code?: string;
285
+ } | {
286
+ type: "run-finished";
287
+ finishReason?: string;
288
+ };
289
+ //#endregion
290
+ //#region src/GuideClient.d.ts
291
+ interface ConversationsApi {
292
+ getOrCreate(): Promise<Conversation>;
293
+ list(): Promise<Conversation[]>;
294
+ get(conversationId: string, options?: {
295
+ cursor?: string;
296
+ limit?: number;
297
+ }): Promise<ConversationWithMessages>;
298
+ delete(conversationId: string): Promise<Conversation>;
299
+ }
300
+ interface SkillsApi {
301
+ listHistory(): Promise<SkillHistoryGroup[]>;
302
+ get(skillInstanceId: string): Promise<SkillInstance>;
303
+ update(skillInstanceId: string, data: Record<string, unknown>): Promise<UpdateSkillInstanceResult>;
304
+ selectDraft(draftId: string): Promise<SelectDraftResult>;
305
+ markShared(skillInstanceId: string): Promise<MarkSharedResult>;
306
+ importShared(sourceSkillInstanceId: string): Promise<ImportSharedResult>;
307
+ }
308
+ /**
309
+ * The client returned by {@link initGuide}. Holds the resolved guide, the
310
+ * credentialed live API client, and the in-memory conversation history. Every
311
+ * method reuses an existing public endpoint — the SDK adds no server surface.
312
+ */
313
+ declare class GuideClient {
314
+ #private;
315
+ /** Resolved guide metadata (ids, theme, customization). */
316
+ readonly guide: ResolvedGuide;
317
+ private readonly apiBaseUrl;
318
+ private readonly domain;
319
+ private readonly fetchImpl;
320
+ private readonly history;
321
+ private constructor();
322
+ static init(config: InitGuideConfig): Promise<GuideClient>;
323
+ /** The account this guide belongs to (used implicitly by history calls). */
324
+ get accountId(): string;
325
+ /** The in-memory conversation history accumulated by {@link ask}. */
326
+ get messages(): readonly ChatMessage[];
327
+ /**
328
+ * Send a message and stream the reply. Yields text deltas for the chat bubble
329
+ * plus every structured skill event; the full 7-skill surface flows through
330
+ * one stream. The user + assistant turns are appended to {@link messages}.
331
+ */
332
+ ask(message: string, options?: AskOptions): AsyncGenerator<GuideStreamEvent>;
333
+ /** Clear the in-memory conversation history (server-side history is unaffected). */
334
+ reset(): void;
335
+ /** Grant consent tiers. `essential` is always forced true server-side. */
336
+ setConsent(levels: ConsentLevels): Promise<void>;
337
+ /** Read the current visitor's tracking + consent + email status. */
338
+ getStatus(): Promise<VisitorStatus>;
339
+ /** Capture a lead email (sends a magic link when verification is required). */
340
+ submitGate(email: string, options?: SubmitGateOptions): Promise<SubmitGateResult>;
341
+ /**
342
+ * Fire an analytics event. Fire-and-forget — never throws into the host page.
343
+ * Uses a raw request (the same shape the embed script posts) so it stays
344
+ * decoupled from the typed client's event enum.
345
+ */
346
+ track(eventType: TrackEventType, properties?: Record<string, unknown>): void;
347
+ /** Fire the initial `embed_loaded` (with attribution) + first page view. */
348
+ trackLoad(): void;
349
+ /** Record a page view (call on client-side route changes in an SPA). */
350
+ trackPageView(url?: string): void;
351
+ /** End the current visit (best to call on `pagehide`). */
352
+ endSession(): Promise<void>;
353
+ /** Conversation history CRUD, scoped to this guide + account. */
354
+ readonly conversations: ConversationsApi;
355
+ /** Persisted skill deliverables (how-to progress, diagnose answers, etc.). */
356
+ readonly skills: SkillsApi;
357
+ private applyInitialConsent;
358
+ }
359
+ //#endregion
360
+ //#region src/react/useGuide.d.ts
361
+ interface UseGuideResult {
362
+ /** The client once bootstrapped, else `null`. */
363
+ client: GuideClient | null;
364
+ /** Resolved guide metadata once ready, else `null`. */
365
+ guide: ResolvedGuide | null;
366
+ /** Conversation history, kept in sync with the client. */
367
+ messages: ChatMessage[];
368
+ /** `true` once the client has finished initializing. */
369
+ isReady: boolean;
370
+ /** `true` while a reply is streaming. */
371
+ isStreaming: boolean;
372
+ /** Init or stream error, else `null`. */
373
+ error: Error | null;
374
+ /** Send a message and stream the reply into `messages`. */
375
+ ask: (message: string, options?: AskOptions) => Promise<void>;
376
+ /** Clear the in-memory conversation. */
377
+ reset: () => void;
378
+ }
379
+ /**
380
+ * React binding over {@link initGuide}. Bootstraps once per `baseUrl`+`slug`,
381
+ * mirrors the streamed reply into state, and ends the session on unmount —
382
+ * encapsulating the streaming/cleanup patterns so generated UIs stay correct.
383
+ */
384
+ declare function useGuide(config: InitGuideConfig): UseGuideResult;
385
+ //#endregion
386
+ export { type UseGuideResult, useGuide };
387
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types.ts","../../src/GuideClient.ts","../../src/react/useGuide.ts"],"mappings":"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"}