@cms.ai/brand_brain 0.0.1 → 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/README.md +165 -38
- package/dist/index.cjs +272 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +560 -16
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +560 -16
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +261 -10
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.cjs +261 -13
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +579 -20
- package/dist/react/index.d.cts.map +1 -1
- package/dist/react/index.d.mts +579 -20
- package/dist/react/index.d.mts.map +1 -1
- package/dist/react/index.mjs +261 -13
- package/dist/react/index.mjs.map +1 -1
- package/llms.txt +115 -0
- package/package.json +6 -5
- package/src/GuideClient.test.ts +28 -0
- package/src/GuideClient.ts +24 -3
- package/src/chat-stream.test.ts +28 -0
- package/src/chat-stream.ts +28 -3
- package/src/index.ts +2 -0
- package/src/react/index.ts +1 -1
- package/src/react/useGuide.ts +107 -6
- package/src/skill-state.test.ts +144 -0
- package/src/skill-state.ts +206 -0
- package/src/types.ts +504 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types.ts","../../src/GuideClient.ts","../../src/react/useGuide.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types.ts","../../src/GuideClient.ts","../../src/skill-state.ts","../../src/react/useGuide.ts"],"mappings":"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"}
|
package/dist/react/index.mjs
CHANGED
|
@@ -1386,7 +1386,11 @@ const SSEMessageType = {
|
|
|
1386
1386
|
TextMessageEnd: "TEXT_MESSAGE_END",
|
|
1387
1387
|
Custom: "CUSTOM"
|
|
1388
1388
|
};
|
|
1389
|
-
/**
|
|
1389
|
+
/**
|
|
1390
|
+
* The `name` on `CUSTOM` guide events (skill payloads). `SkillGate` and
|
|
1391
|
+
* `SkillError` never surface as `skill` stream events — the SDK re-maps them to
|
|
1392
|
+
* the dedicated `gate` / `error` {@link GuideStreamEvent} variants.
|
|
1393
|
+
*/
|
|
1390
1394
|
const GuideEvent = {
|
|
1391
1395
|
SkillStart: "skill_start",
|
|
1392
1396
|
SkillContent: "skill_content",
|
|
@@ -1406,8 +1410,17 @@ const GuideEvent = {
|
|
|
1406
1410
|
SkillSolutionDesignDiagram: "skill_solutiondesign_diagram",
|
|
1407
1411
|
SkillEnd: "skill_end",
|
|
1408
1412
|
SkillError: "skill_error",
|
|
1409
|
-
SkillGate: "skill_gate"
|
|
1410
|
-
|
|
1413
|
+
SkillGate: "skill_gate"
|
|
1414
|
+
};
|
|
1415
|
+
/** The guide skill types. `answer` is always on; the rest are enabled per-guide. */
|
|
1416
|
+
const SkillResponseType = {
|
|
1417
|
+
Answer: "answer",
|
|
1418
|
+
HowTo: "howto",
|
|
1419
|
+
Diagnose: "diagnose",
|
|
1420
|
+
Recommend: "recommend",
|
|
1421
|
+
Playlist: "playlist",
|
|
1422
|
+
BusinessCase: "businesscase",
|
|
1423
|
+
SolutionDesign: "solutiondesign"
|
|
1411
1424
|
};
|
|
1412
1425
|
/** Analytics events fired by the SDK bootstrap. */
|
|
1413
1426
|
const EmbedTrackingEvent = {
|
|
@@ -1444,7 +1457,13 @@ async function* streamConversation(params) {
|
|
|
1444
1457
|
body: JSON.stringify(body),
|
|
1445
1458
|
signal
|
|
1446
1459
|
});
|
|
1447
|
-
if (!response.ok || !response.body)
|
|
1460
|
+
if (!response.ok || !response.body) {
|
|
1461
|
+
let detail = "";
|
|
1462
|
+
try {
|
|
1463
|
+
detail = (await response.text()).trim();
|
|
1464
|
+
} catch {}
|
|
1465
|
+
throw new Error(`[brand_brain] Conversation request failed with status ${response.status}${detail ? `: ${detail}` : ""}`);
|
|
1466
|
+
}
|
|
1448
1467
|
const reader = response.body.getReader();
|
|
1449
1468
|
const decoder = new TextDecoder();
|
|
1450
1469
|
let buffer = "";
|
|
@@ -1503,6 +1522,13 @@ function mapFrame(frame) {
|
|
|
1503
1522
|
default: return null;
|
|
1504
1523
|
}
|
|
1505
1524
|
}
|
|
1525
|
+
/**
|
|
1526
|
+
* Names that surface as typed `skill` events. `SkillGate`/`SkillError` are
|
|
1527
|
+
* re-mapped to the `gate`/`error` variants below, so they are excluded here;
|
|
1528
|
+
* any name outside this set is a server event this SDK version predates and
|
|
1529
|
+
* flows through as `skill-unknown`.
|
|
1530
|
+
*/
|
|
1531
|
+
const SKILL_EVENT_NAMES = new Set(Object.values(GuideEvent).filter((name) => name !== GuideEvent.SkillGate && name !== GuideEvent.SkillError));
|
|
1506
1532
|
function mapCustomFrame(frame) {
|
|
1507
1533
|
if (!frame.name) return null;
|
|
1508
1534
|
const value = frame.value ?? {};
|
|
@@ -1515,20 +1541,42 @@ function mapCustomFrame(frame) {
|
|
|
1515
1541
|
if (frame.name === GuideEvent.SkillError) return {
|
|
1516
1542
|
type: "error",
|
|
1517
1543
|
message: value.message ?? "Skill error",
|
|
1518
|
-
code: value.errorType
|
|
1544
|
+
code: value.errorType,
|
|
1545
|
+
retryable: value.retryable,
|
|
1546
|
+
retryHint: value.retryHint
|
|
1519
1547
|
};
|
|
1520
|
-
return {
|
|
1548
|
+
if (SKILL_EVENT_NAMES.has(frame.name)) return {
|
|
1521
1549
|
type: "skill",
|
|
1522
1550
|
name: frame.name,
|
|
1523
1551
|
value
|
|
1524
1552
|
};
|
|
1553
|
+
return {
|
|
1554
|
+
type: "skill-unknown",
|
|
1555
|
+
name: frame.name,
|
|
1556
|
+
value
|
|
1557
|
+
};
|
|
1525
1558
|
}
|
|
1526
1559
|
//#endregion
|
|
1527
1560
|
//#region src/GuideClient.ts
|
|
1561
|
+
/**
|
|
1562
|
+
* The account is resolved by the branded host the SDK talks to, and that host
|
|
1563
|
+
* must be same-site with `baseUrl` for the visitor cookies to attach — so the
|
|
1564
|
+
* `baseUrl` hostname IS the registered account domain. Derive it from there
|
|
1565
|
+
* rather than the host page's `window.location`, which is an unrelated origin
|
|
1566
|
+
* for cross-site embeds and produces a "Domain not found" 404 on resolve.
|
|
1567
|
+
*/
|
|
1528
1568
|
function resolveDomain(config) {
|
|
1529
1569
|
if (config.domain) return config.domain;
|
|
1530
|
-
|
|
1531
|
-
|
|
1570
|
+
return hostnameFromBaseUrl(config.baseUrl);
|
|
1571
|
+
}
|
|
1572
|
+
/**
|
|
1573
|
+
* Normalize `baseUrl` to the bare host the server stores: lowercased, no port,
|
|
1574
|
+
* no leading `www.` (the domain write-path strips it, so a `www.` host can
|
|
1575
|
+
* never match). Accepts a bare host too, in case `baseUrl` omits the protocol.
|
|
1576
|
+
*/
|
|
1577
|
+
function hostnameFromBaseUrl(baseUrl) {
|
|
1578
|
+
const withProtocol = /^[a-z][a-z0-9+.-]*:\/\//i.test(baseUrl) ? baseUrl : `https://${baseUrl}`;
|
|
1579
|
+
return new URL(withProtocol).hostname.toLowerCase().replace(/^www\./, "");
|
|
1532
1580
|
}
|
|
1533
1581
|
/**
|
|
1534
1582
|
* The client returned by {@link initGuide}. Holds the resolved guide, the
|
|
@@ -1582,7 +1630,9 @@ var GuideClient = class GuideClient {
|
|
|
1582
1630
|
this.#api = createApiClient(this.apiBaseUrl, this.fetchImpl);
|
|
1583
1631
|
}
|
|
1584
1632
|
static async init(config) {
|
|
1585
|
-
const
|
|
1633
|
+
const globalFetch = typeof globalThis.fetch === "function" ? globalThis.fetch.bind(globalThis) : void 0;
|
|
1634
|
+
const fetchImpl = config.fetch ?? globalFetch;
|
|
1635
|
+
if (!fetchImpl) throw new Error("[brand_brain] No `fetch` is available — pass `config.fetch` when running without a global fetch.");
|
|
1586
1636
|
const apiBaseUrl = toApiBaseUrl(config.baseUrl);
|
|
1587
1637
|
const domain = resolveDomain(config);
|
|
1588
1638
|
const guide = await createApiClient(apiBaseUrl, fetchImpl).guides.resolve({
|
|
@@ -1721,26 +1771,181 @@ async function initGuide(config) {
|
|
|
1721
1771
|
return GuideClient.init(config);
|
|
1722
1772
|
}
|
|
1723
1773
|
//#endregion
|
|
1774
|
+
//#region src/skill-state.ts
|
|
1775
|
+
/** A fresh, empty turn state. */
|
|
1776
|
+
function createSkillTurn() {
|
|
1777
|
+
return {
|
|
1778
|
+
skill: null,
|
|
1779
|
+
status: "streaming",
|
|
1780
|
+
messageId: null,
|
|
1781
|
+
diagnoseSubtype: null,
|
|
1782
|
+
followUpSkill: null,
|
|
1783
|
+
content: "",
|
|
1784
|
+
documents: [],
|
|
1785
|
+
contentRecommendations: [],
|
|
1786
|
+
followUpRecommendations: [],
|
|
1787
|
+
ctas: [],
|
|
1788
|
+
diagnoseHeader: null,
|
|
1789
|
+
diagnoseQuestions: [],
|
|
1790
|
+
playlistHeader: null,
|
|
1791
|
+
playlistItems: [],
|
|
1792
|
+
howToOutline: null,
|
|
1793
|
+
howToSteps: [],
|
|
1794
|
+
businessCaseFormats: [],
|
|
1795
|
+
businessCaseDrafts: {},
|
|
1796
|
+
businessCaseContent: {},
|
|
1797
|
+
solutionDesignHeader: null,
|
|
1798
|
+
solutionDesignNodes: [],
|
|
1799
|
+
solutionDesignEdges: [],
|
|
1800
|
+
skillInstanceId: null
|
|
1801
|
+
};
|
|
1802
|
+
}
|
|
1803
|
+
/** A recommendations payload is content cards iff its entries carry `targetSkill`. */
|
|
1804
|
+
function isContentRecommendations(recommendations) {
|
|
1805
|
+
return recommendations.length > 0 && "targetSkill" in recommendations[0];
|
|
1806
|
+
}
|
|
1807
|
+
/**
|
|
1808
|
+
* Fold one `skill` stream event into the turn state. Pure and immutable — the
|
|
1809
|
+
* returned object is a new reference whenever anything changed, so the result
|
|
1810
|
+
* can back React state directly:
|
|
1811
|
+
*
|
|
1812
|
+
* ```ts
|
|
1813
|
+
* let turn = createSkillTurn();
|
|
1814
|
+
* for await (const event of client.ask(message)) {
|
|
1815
|
+
* if (event.type === "skill") turn = reduceSkillEvent(turn, event);
|
|
1816
|
+
* }
|
|
1817
|
+
* ```
|
|
1818
|
+
*/
|
|
1819
|
+
function reduceSkillEvent(turn, event) {
|
|
1820
|
+
switch (event.name) {
|
|
1821
|
+
case GuideEvent.SkillStart: return {
|
|
1822
|
+
...event.value.skill === SkillResponseType.BusinessCase && turn.skill === SkillResponseType.BusinessCase ? {
|
|
1823
|
+
...createSkillTurn(),
|
|
1824
|
+
businessCaseFormats: turn.businessCaseFormats,
|
|
1825
|
+
businessCaseDrafts: turn.businessCaseDrafts,
|
|
1826
|
+
businessCaseContent: turn.businessCaseContent
|
|
1827
|
+
} : createSkillTurn(),
|
|
1828
|
+
skill: event.value.skill,
|
|
1829
|
+
messageId: event.value.messageId,
|
|
1830
|
+
diagnoseSubtype: event.value.diagnoseSubtype ?? null,
|
|
1831
|
+
followUpSkill: event.value.followUpSkill ?? null
|
|
1832
|
+
};
|
|
1833
|
+
case GuideEvent.SkillContent: return {
|
|
1834
|
+
...turn,
|
|
1835
|
+
content: turn.content + event.value.delta
|
|
1836
|
+
};
|
|
1837
|
+
case GuideEvent.SkillDocuments: return {
|
|
1838
|
+
...turn,
|
|
1839
|
+
documents: event.value.documents
|
|
1840
|
+
};
|
|
1841
|
+
case GuideEvent.SkillRecommendations: return isContentRecommendations(event.value.recommendations) ? {
|
|
1842
|
+
...turn,
|
|
1843
|
+
contentRecommendations: event.value.recommendations
|
|
1844
|
+
} : {
|
|
1845
|
+
...turn,
|
|
1846
|
+
followUpRecommendations: event.value.recommendations
|
|
1847
|
+
};
|
|
1848
|
+
case GuideEvent.SkillCTAs: return {
|
|
1849
|
+
...turn,
|
|
1850
|
+
ctas: event.value.ctas
|
|
1851
|
+
};
|
|
1852
|
+
case GuideEvent.SkillDiagnoseHeader: return {
|
|
1853
|
+
...turn,
|
|
1854
|
+
diagnoseHeader: event.value.header
|
|
1855
|
+
};
|
|
1856
|
+
case GuideEvent.SkillDiagnoseQuestion: return {
|
|
1857
|
+
...turn,
|
|
1858
|
+
diagnoseQuestions: [...turn.diagnoseQuestions, event.value.question]
|
|
1859
|
+
};
|
|
1860
|
+
case GuideEvent.SkillPlaylistHeader: return {
|
|
1861
|
+
...turn,
|
|
1862
|
+
playlistHeader: event.value.header
|
|
1863
|
+
};
|
|
1864
|
+
case GuideEvent.SkillPlaylistItems: return {
|
|
1865
|
+
...turn,
|
|
1866
|
+
playlistItems: event.value.items
|
|
1867
|
+
};
|
|
1868
|
+
case GuideEvent.SkillPlaylistRationale: return {
|
|
1869
|
+
...turn,
|
|
1870
|
+
playlistItems: turn.playlistItems.map((item) => item.id === event.value.itemId ? {
|
|
1871
|
+
...item,
|
|
1872
|
+
rationale: event.value.rationale
|
|
1873
|
+
} : item)
|
|
1874
|
+
};
|
|
1875
|
+
case GuideEvent.SkillHowToOutline: return {
|
|
1876
|
+
...turn,
|
|
1877
|
+
howToOutline: event.value.outline,
|
|
1878
|
+
skillInstanceId: event.value.skillInstanceId ?? turn.skillInstanceId
|
|
1879
|
+
};
|
|
1880
|
+
case GuideEvent.SkillHowToSteps: return {
|
|
1881
|
+
...turn,
|
|
1882
|
+
howToSteps: event.value.steps
|
|
1883
|
+
};
|
|
1884
|
+
case GuideEvent.SkillBusinessCaseChooser: return {
|
|
1885
|
+
...turn,
|
|
1886
|
+
businessCaseFormats: event.value.formats,
|
|
1887
|
+
businessCaseDrafts: event.value.drafts
|
|
1888
|
+
};
|
|
1889
|
+
case GuideEvent.SkillBusinessCaseDelta: {
|
|
1890
|
+
const existing = turn.businessCaseContent[event.value.subType] ?? "";
|
|
1891
|
+
return {
|
|
1892
|
+
...turn,
|
|
1893
|
+
businessCaseContent: {
|
|
1894
|
+
...turn.businessCaseContent,
|
|
1895
|
+
[event.value.subType]: existing + event.value.delta
|
|
1896
|
+
}
|
|
1897
|
+
};
|
|
1898
|
+
}
|
|
1899
|
+
case GuideEvent.SkillSolutionDesignHeader: return {
|
|
1900
|
+
...turn,
|
|
1901
|
+
solutionDesignHeader: event.value.header
|
|
1902
|
+
};
|
|
1903
|
+
case GuideEvent.SkillSolutionDesignDiagram: return {
|
|
1904
|
+
...turn,
|
|
1905
|
+
solutionDesignNodes: event.value.nodes,
|
|
1906
|
+
solutionDesignEdges: event.value.edges
|
|
1907
|
+
};
|
|
1908
|
+
case GuideEvent.SkillEnd: return {
|
|
1909
|
+
...turn,
|
|
1910
|
+
status: "complete",
|
|
1911
|
+
skillInstanceId: event.value.skillInstanceId ?? event.value.skillResponseId ?? turn.skillInstanceId
|
|
1912
|
+
};
|
|
1913
|
+
default: return event;
|
|
1914
|
+
}
|
|
1915
|
+
}
|
|
1916
|
+
//#endregion
|
|
1724
1917
|
//#region src/react/useGuide.ts
|
|
1725
1918
|
/**
|
|
1726
1919
|
* React binding over {@link initGuide}. Bootstraps once per `baseUrl`+`slug`,
|
|
1727
|
-
* mirrors the streamed reply into
|
|
1920
|
+
* mirrors the streamed reply into `messages`, folds structured skill events
|
|
1921
|
+
* into `skillTurn`, surfaces email gates, and ends the session on unmount —
|
|
1728
1922
|
* encapsulating the streaming/cleanup patterns so generated UIs stay correct.
|
|
1729
1923
|
*/
|
|
1730
1924
|
function useGuide(config) {
|
|
1731
1925
|
const [client, setClient] = useState(null);
|
|
1732
1926
|
const [messages, setMessages] = useState([]);
|
|
1927
|
+
const [skillTurn, setSkillTurn] = useState(null);
|
|
1928
|
+
const [gate, setGate] = useState(null);
|
|
1733
1929
|
const [isStreaming, setIsStreaming] = useState(false);
|
|
1734
1930
|
const [error, setError] = useState(null);
|
|
1735
1931
|
const { baseUrl, slug } = config;
|
|
1736
1932
|
const configRef = useRef(config);
|
|
1737
1933
|
configRef.current = config;
|
|
1934
|
+
const turnRef = useRef(null);
|
|
1935
|
+
const lastAskRef = useRef(null);
|
|
1738
1936
|
useEffect(() => {
|
|
1739
1937
|
let active = true;
|
|
1740
1938
|
let created = null;
|
|
1939
|
+
setClient(null);
|
|
1940
|
+
setMessages([]);
|
|
1941
|
+
setSkillTurn(null);
|
|
1942
|
+
setGate(null);
|
|
1943
|
+
setError(null);
|
|
1944
|
+
turnRef.current = null;
|
|
1945
|
+
lastAskRef.current = null;
|
|
1741
1946
|
initGuide(configRef.current).then((instance) => {
|
|
1742
1947
|
if (!active) {
|
|
1743
|
-
instance.endSession();
|
|
1948
|
+
instance.endSession().catch(() => {});
|
|
1744
1949
|
return;
|
|
1745
1950
|
}
|
|
1746
1951
|
created = instance;
|
|
@@ -1751,15 +1956,32 @@ function useGuide(config) {
|
|
|
1751
1956
|
});
|
|
1752
1957
|
return () => {
|
|
1753
1958
|
active = false;
|
|
1754
|
-
created?.endSession();
|
|
1959
|
+
created?.endSession().catch(() => {});
|
|
1755
1960
|
};
|
|
1756
1961
|
}, [baseUrl, slug]);
|
|
1757
1962
|
const ask = useCallback(async (message, options) => {
|
|
1758
1963
|
if (!client) return;
|
|
1964
|
+
lastAskRef.current = {
|
|
1965
|
+
message,
|
|
1966
|
+
options
|
|
1967
|
+
};
|
|
1759
1968
|
setIsStreaming(true);
|
|
1760
1969
|
setError(null);
|
|
1970
|
+
setGate(null);
|
|
1761
1971
|
try {
|
|
1762
|
-
for await (const event of client.ask(message, options))
|
|
1972
|
+
for await (const event of client.ask(message, options)) {
|
|
1973
|
+
configRef.current.onEvent?.(event);
|
|
1974
|
+
if (event.type === "text" || event.type === "message-start") setMessages([...client.messages]);
|
|
1975
|
+
else if (event.type === "skill") {
|
|
1976
|
+
turnRef.current = reduceSkillEvent(turnRef.current ?? createSkillTurn(), event);
|
|
1977
|
+
setSkillTurn(turnRef.current);
|
|
1978
|
+
} else if (event.type === "gate") setGate({
|
|
1979
|
+
skill: event.skill,
|
|
1980
|
+
prompt: event.prompt,
|
|
1981
|
+
skillInstanceId: event.skillInstanceId
|
|
1982
|
+
});
|
|
1983
|
+
else if (event.type === "error") setError(new Error(event.message));
|
|
1984
|
+
}
|
|
1763
1985
|
setMessages([...client.messages]);
|
|
1764
1986
|
} catch (err) {
|
|
1765
1987
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
@@ -1767,18 +1989,44 @@ function useGuide(config) {
|
|
|
1767
1989
|
setIsStreaming(false);
|
|
1768
1990
|
}
|
|
1769
1991
|
}, [client]);
|
|
1992
|
+
const submitGate = useCallback(async (email, options) => {
|
|
1993
|
+
if (!client) throw new Error("[brand_brain] Guide is not ready yet — wait for isReady before submitting the gate.");
|
|
1994
|
+
const pending = gate;
|
|
1995
|
+
const result = await client.submitGate(email, {
|
|
1996
|
+
...pending && {
|
|
1997
|
+
skill: pending.skill,
|
|
1998
|
+
prompt: pending.prompt,
|
|
1999
|
+
skillInstanceId: pending.skillInstanceId
|
|
2000
|
+
},
|
|
2001
|
+
...options
|
|
2002
|
+
});
|
|
2003
|
+
if (result.success) setGate(null);
|
|
2004
|
+
return result;
|
|
2005
|
+
}, [client, gate]);
|
|
2006
|
+
const retryLastAsk = useCallback(async () => {
|
|
2007
|
+
const last = lastAskRef.current;
|
|
2008
|
+
if (last) await ask(last.message, last.options);
|
|
2009
|
+
}, [ask]);
|
|
1770
2010
|
const reset = useCallback(() => {
|
|
1771
2011
|
client?.reset();
|
|
1772
2012
|
setMessages([]);
|
|
2013
|
+
setSkillTurn(null);
|
|
2014
|
+
setGate(null);
|
|
2015
|
+
turnRef.current = null;
|
|
2016
|
+
lastAskRef.current = null;
|
|
1773
2017
|
}, [client]);
|
|
1774
2018
|
return {
|
|
1775
2019
|
client,
|
|
1776
2020
|
guide: client?.guide ?? null,
|
|
1777
2021
|
messages,
|
|
2022
|
+
skillTurn,
|
|
2023
|
+
gate,
|
|
1778
2024
|
isReady: client !== null,
|
|
1779
2025
|
isStreaming,
|
|
1780
2026
|
error,
|
|
1781
2027
|
ask,
|
|
2028
|
+
submitGate,
|
|
2029
|
+
retryLastAsk,
|
|
1782
2030
|
reset
|
|
1783
2031
|
};
|
|
1784
2032
|
}
|