@agno-hq/chat-react 0.3.0 → 0.3.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.
- package/README.md +83 -1
- package/dist/chat/index.cjs +98 -78
- package/dist/chat/index.d.cts +222 -112
- package/dist/chat/index.d.ts +222 -112
- package/dist/chat/index.js +2 -2
- package/dist/{chunk-ROFIOWGX.cjs → chunk-55HQJGLP.cjs} +2 -5
- package/dist/chunk-55HQJGLP.cjs.map +1 -0
- package/dist/{chunk-62IEW2HM.js → chunk-6V2YIPHF.js} +2 -5
- package/dist/chunk-6V2YIPHF.js.map +1 -0
- package/dist/{chunk-MUOMZG4V.js → chunk-BZC2674Z.js} +405 -130
- package/dist/chunk-BZC2674Z.js.map +1 -0
- package/dist/{chunk-ERCKKOF4.cjs → chunk-JEPFGKHH.cjs} +444 -164
- package/dist/chunk-JEPFGKHH.cjs.map +1 -0
- package/dist/core/index.cjs +19 -19
- package/dist/core/index.js +1 -1
- package/dist/index.cjs +117 -97
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/styles.css +272 -65
- package/package.json +1 -1
- package/dist/chunk-62IEW2HM.js.map +0 -1
- package/dist/chunk-ERCKKOF4.cjs.map +0 -1
- package/dist/chunk-MUOMZG4V.js.map +0 -1
- package/dist/chunk-ROFIOWGX.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { AgnoChat, AgnoMark, ArrowUp, BehindTheScenes, BookOpen, Box, Brain, ChatBubble, ChatInput, ChatLauncher, ChatProvider, ChatWindow, Check, ChevronDown, Citations, Close, Copy, EntityBadge, EntitySelector, EventLog, Favicon, FileAudio, FileIcon, FilePreview, FileVideo, Followups, Globe, GridLoader, HoverPreview, HumanInput, LinkPreviewCard, Markdown, MemberResponses, Memory, Message, MessageList, Multimedia, Paperclip, Plus, Pulse, QuickPrompts, Reasoning, Rerun, SessionList, SourceCard, SourcesProvider, Spinner, StatusIndicator, Stop, TeamGlyph, ToolCalls, Trash, WorkflowSteps, Wrench, behindTheScenesItems, behindTheScenesLabel, collectSources, cx, displayUrl, faviconUrl, getProviderIcon, hasBehindTheScenes, linkCitations, normalizeFollowups, quickPromptLabel, quickPromptText, sourceHost, sourcesFromMarkdown, useAgnoChat, useChatContext, useLinkPreview, useOptionalChatContext, useResolvedChat, useResolvedClassNames, useSources, withoutSourcesLine, writeClipboard } from './chunk-
|
|
2
|
+
export { AgnoChat, AgnoMark, ArrowUp, BehindTheScenes, BookOpen, Box, Brain, ChatBubble, ChatInput, ChatLauncher, ChatProvider, ChatWindow, Check, ChevronDown, Citations, Close, Copy, EntityBadge, EntitySelector, EventLog, Favicon, FileAudio, FileIcon, FilePreview, FileType, FileVideo, Followups, Globe, GridLoader, HoverPreview, HumanInput, LinkIcon, LinkPreviewCard, Markdown, MemberResponses, Memory, Message, MessageList, Multimedia, Paperclip, Plus, Pulse, QuickPrompts, Reasoning, Rerun, SessionList, SourceCard, SourcesProvider, Spinner, StatusIndicator, Stop, TeamGlyph, ToolCalls, Trash, WorkflowSteps, Wrench, admitFiles, behindTheScenesItems, behindTheScenesLabel, collectSources, cx, displayUrl, faviconUrl, fileAccepted, getProviderIcon, hasBehindTheScenes, linkCitations, normalizeFollowups, quickPromptLabel, quickPromptText, sourceHost, sourcesFromMarkdown, useAgnoChat, useChatContext, useLinkComponent, useLinkPreview, useOptionalChatContext, useResolvedChat, useResolvedClassNames, useSources, withoutSourcesLine, writeClipboard } from './chunk-BZC2674Z.js';
|
|
3
3
|
export { RunEvent, TeamRunEvent, WorkflowRunEvent } from './chunk-RE7ZT73K.js';
|
|
4
|
-
export { AgnoClient, activityLabel, applyStepEvent, applySubRunEvent, isCompletedEvent, isContentEvent, isErrorEvent, isFollowupsCompletedEvent, isPausedEvent, isReasoningStepEvent, isStepEvent, isSubRunEvent, isToolEvent, mergeTool, normaliseBaseUrl, sessionRunsToMessages, streamRun, toolsFromEvent } from './chunk-
|
|
4
|
+
export { AgnoClient, activityLabel, applyStepEvent, applySubRunEvent, isCompletedEvent, isContentEvent, isErrorEvent, isFollowupsCompletedEvent, isPausedEvent, isReasoningStepEvent, isStepEvent, isSubRunEvent, isToolEvent, mergeTool, normaliseBaseUrl, sessionRunsToMessages, streamRun, toolsFromEvent } from './chunk-6V2YIPHF.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/styles.css
CHANGED
|
@@ -126,7 +126,12 @@
|
|
|
126
126
|
.agno-root,
|
|
127
127
|
.agno-root *,
|
|
128
128
|
.agno-launcher,
|
|
129
|
-
.agno-launcher
|
|
129
|
+
.agno-launcher *,
|
|
130
|
+
/* Portalled to <body>, outside the embed. */
|
|
131
|
+
.agno-hovercard,
|
|
132
|
+
.agno-hovercard *,
|
|
133
|
+
.agno-sources__list,
|
|
134
|
+
.agno-sources__list * {
|
|
130
135
|
box-sizing: border-box;
|
|
131
136
|
}
|
|
132
137
|
|
|
@@ -854,7 +859,7 @@
|
|
|
854
859
|
}
|
|
855
860
|
|
|
856
861
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
857
|
-
Sources — the
|
|
862
|
+
Sources — the pills under an answer (Figma: Components Library › Sources found)
|
|
858
863
|
───────────────────────────────────────────────────────────────────────── */
|
|
859
864
|
|
|
860
865
|
.agno-sources {
|
|
@@ -863,58 +868,161 @@
|
|
|
863
868
|
gap: 8px;
|
|
864
869
|
}
|
|
865
870
|
.agno-sources__head {
|
|
866
|
-
color: var(--agno-
|
|
871
|
+
color: var(--agno-primary);
|
|
867
872
|
font-family: var(--agno-font-mono);
|
|
868
873
|
font-size: 0.75rem;
|
|
869
|
-
|
|
870
|
-
|
|
874
|
+
line-height: 1rem;
|
|
875
|
+
letter-spacing: -0.02em;
|
|
871
876
|
}
|
|
872
|
-
/*
|
|
877
|
+
/* A single row of fixed-width pills; wraps only when the column can't hold them. */
|
|
873
878
|
.agno-sources__grid {
|
|
874
879
|
display: flex;
|
|
875
880
|
flex-wrap: wrap;
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
.agno-sources__more {
|
|
879
|
-
align-self: flex-start;
|
|
880
|
-
padding: 0;
|
|
881
|
-
background: none;
|
|
882
|
-
border: none;
|
|
883
|
-
color: var(--agno-muted);
|
|
884
|
-
cursor: pointer;
|
|
885
|
-
font: inherit;
|
|
886
|
-
font-size: 0.75rem;
|
|
887
|
-
}
|
|
888
|
-
.agno-sources__more:hover {
|
|
889
|
-
color: var(--agno-primary);
|
|
881
|
+
align-items: center;
|
|
882
|
+
gap: 12px;
|
|
890
883
|
}
|
|
891
884
|
|
|
892
885
|
.agno-source {
|
|
893
886
|
display: flex;
|
|
894
887
|
align-items: center;
|
|
895
888
|
gap: 8px;
|
|
889
|
+
width: 160px;
|
|
890
|
+
max-width: 100%;
|
|
896
891
|
min-width: 0;
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
border: 1px solid transparent;
|
|
900
|
-
border-radius: var(--agno-radius-md);
|
|
892
|
+
padding: 4px 8px 4px 4px;
|
|
893
|
+
border-radius: var(--agno-radius-sm);
|
|
901
894
|
background: var(--agno-secondary-soft);
|
|
902
895
|
color: inherit;
|
|
903
896
|
text-decoration: none;
|
|
904
|
-
transition:
|
|
897
|
+
transition: background 0.15s ease;
|
|
905
898
|
}
|
|
906
899
|
a.agno-source:hover {
|
|
907
|
-
border-color: var(--agno-border);
|
|
908
900
|
background: var(--agno-secondary);
|
|
909
901
|
}
|
|
902
|
+
/* 24px avatar box; the icon fills it. Doubled up to outrank `.agno-favicon`. */
|
|
903
|
+
.agno-favicon.agno-source__icon {
|
|
904
|
+
flex: 0 0 24px;
|
|
905
|
+
width: 24px;
|
|
906
|
+
height: 24px;
|
|
907
|
+
border-radius: 6px;
|
|
908
|
+
}
|
|
909
|
+
.agno-source__icon.agno-favicon--glyph svg {
|
|
910
|
+
width: 14px;
|
|
911
|
+
height: 14px;
|
|
912
|
+
}
|
|
910
913
|
.agno-source__title {
|
|
914
|
+
flex: 1;
|
|
911
915
|
min-width: 0;
|
|
912
916
|
overflow: hidden;
|
|
913
917
|
text-overflow: ellipsis;
|
|
914
918
|
white-space: nowrap;
|
|
915
|
-
|
|
916
|
-
font-
|
|
917
|
-
|
|
919
|
+
color: var(--agno-muted);
|
|
920
|
+
font-size: 0.75rem;
|
|
921
|
+
font-weight: 400;
|
|
922
|
+
line-height: 1.25rem;
|
|
923
|
+
letter-spacing: -0.02em;
|
|
924
|
+
text-decoration: underline;
|
|
925
|
+
text-underline-position: from-font;
|
|
926
|
+
}
|
|
927
|
+
.agno-source__link {
|
|
928
|
+
flex: 0 0 16px;
|
|
929
|
+
color: var(--agno-primary);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/* "+N more": the next few favicons fanned out, then the count. */
|
|
933
|
+
.agno-sources__more {
|
|
934
|
+
display: flex;
|
|
935
|
+
align-items: center;
|
|
936
|
+
gap: 4px;
|
|
937
|
+
padding: 4px 8px;
|
|
938
|
+
border: none;
|
|
939
|
+
border-radius: var(--agno-radius-sm);
|
|
940
|
+
background: var(--agno-secondary);
|
|
941
|
+
color: var(--agno-muted);
|
|
942
|
+
cursor: pointer;
|
|
943
|
+
font: inherit;
|
|
944
|
+
font-size: 0.75rem;
|
|
945
|
+
line-height: 1.0625rem;
|
|
946
|
+
letter-spacing: -0.02em;
|
|
947
|
+
transition: color 0.15s ease;
|
|
948
|
+
}
|
|
949
|
+
.agno-sources__more:hover {
|
|
950
|
+
color: var(--agno-primary);
|
|
951
|
+
}
|
|
952
|
+
.agno-sources__stack {
|
|
953
|
+
display: flex;
|
|
954
|
+
align-items: center;
|
|
955
|
+
}
|
|
956
|
+
.agno-favicon.agno-sources__stack-icon {
|
|
957
|
+
flex: 0 0 24px;
|
|
958
|
+
width: 24px;
|
|
959
|
+
height: 24px;
|
|
960
|
+
border-radius: 6px;
|
|
961
|
+
/* Opaque, so the icon beneath doesn't show through; a ring in the pill
|
|
962
|
+
colour then separates each from the one under it. */
|
|
963
|
+
background: var(--agno-bg);
|
|
964
|
+
box-shadow: 0 0 0 1px var(--agno-secondary);
|
|
965
|
+
}
|
|
966
|
+
.agno-sources__stack-icon + .agno-sources__stack-icon {
|
|
967
|
+
margin-left: -16px;
|
|
968
|
+
}
|
|
969
|
+
.agno-sources__stack-icon.agno-favicon--glyph svg {
|
|
970
|
+
width: 14px;
|
|
971
|
+
height: 14px;
|
|
972
|
+
}
|
|
973
|
+
.agno-sources__more-label {
|
|
974
|
+
display: flex;
|
|
975
|
+
align-items: center;
|
|
976
|
+
height: 24px;
|
|
977
|
+
white-space: nowrap;
|
|
978
|
+
}
|
|
979
|
+
.agno-sources__overflow {
|
|
980
|
+
display: inline-flex;
|
|
981
|
+
}
|
|
982
|
+
.agno-sources__more[aria-expanded='true'] {
|
|
983
|
+
color: var(--agno-primary);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
/* The rest of the sources, listed above the "+N more" pill. Portalled to
|
|
987
|
+
<body> like the hover card, so the transcript can't clip it. */
|
|
988
|
+
.agno-sources__list {
|
|
989
|
+
position: fixed;
|
|
990
|
+
z-index: 2147483000;
|
|
991
|
+
display: flex;
|
|
992
|
+
flex-direction: column;
|
|
993
|
+
overflow: hidden;
|
|
994
|
+
border: 1px solid var(--agno-border);
|
|
995
|
+
border-radius: var(--agno-radius-sm);
|
|
996
|
+
background: var(--agno-secondary-soft);
|
|
997
|
+
-webkit-backdrop-filter: blur(4px);
|
|
998
|
+
backdrop-filter: blur(4px);
|
|
999
|
+
color: var(--agno-primary);
|
|
1000
|
+
font-family: var(--agno-font);
|
|
1001
|
+
animation: agno-hovercard-in 0.12s ease-out;
|
|
1002
|
+
}
|
|
1003
|
+
/* Positioned by its top edge either way; anchoring above means lifting the
|
|
1004
|
+
list by its own height, which only CSS knows. */
|
|
1005
|
+
.agno-sources__list--top {
|
|
1006
|
+
transform: translateY(-100%);
|
|
1007
|
+
}
|
|
1008
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1009
|
+
.agno-sources__list {
|
|
1010
|
+
animation: none;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
/* A source as a row of the list: full width, flat, divided by hairlines. */
|
|
1014
|
+
.agno-source--row {
|
|
1015
|
+
width: 100%;
|
|
1016
|
+
max-width: none;
|
|
1017
|
+
padding: 8px;
|
|
1018
|
+
border-radius: 0;
|
|
1019
|
+
background: transparent;
|
|
1020
|
+
}
|
|
1021
|
+
.agno-source--row + .agno-source--row {
|
|
1022
|
+
border-top: 1px solid var(--agno-border);
|
|
1023
|
+
}
|
|
1024
|
+
a.agno-source--row:hover {
|
|
1025
|
+
background: var(--agno-tint);
|
|
918
1026
|
}
|
|
919
1027
|
|
|
920
1028
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
@@ -1815,6 +1923,7 @@ a.agno-source:hover {
|
|
|
1815
1923
|
padding: 8px 24px 12px;
|
|
1816
1924
|
}
|
|
1817
1925
|
.agno-input__dock {
|
|
1926
|
+
position: relative;
|
|
1818
1927
|
width: 100%;
|
|
1819
1928
|
max-width: 800px;
|
|
1820
1929
|
margin: 0 auto;
|
|
@@ -1826,14 +1935,40 @@ a.agno-source:hover {
|
|
|
1826
1935
|
border-radius: var(--agno-radius-xl);
|
|
1827
1936
|
background: var(--agno-accent);
|
|
1828
1937
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
|
|
1938
|
+
transition: border-color 0.15s ease;
|
|
1939
|
+
}
|
|
1940
|
+
.agno-input[data-dragging='true'] .agno-input__dock {
|
|
1941
|
+
border-color: var(--agno-brand);
|
|
1942
|
+
}
|
|
1943
|
+
/* Covers the dock while files are dragged over it. */
|
|
1944
|
+
.agno-input__drop {
|
|
1945
|
+
position: absolute;
|
|
1946
|
+
inset: 0;
|
|
1947
|
+
z-index: 1;
|
|
1948
|
+
display: flex;
|
|
1949
|
+
align-items: center;
|
|
1950
|
+
justify-content: center;
|
|
1951
|
+
gap: 8px;
|
|
1952
|
+
border-radius: inherit;
|
|
1953
|
+
background: var(--agno-accent);
|
|
1954
|
+
color: var(--agno-muted);
|
|
1955
|
+
font-size: 0.8125rem;
|
|
1956
|
+
pointer-events: none;
|
|
1957
|
+
}
|
|
1958
|
+
.agno-input__error {
|
|
1959
|
+
margin: 0;
|
|
1960
|
+
padding: 0 4px;
|
|
1961
|
+
color: var(--agno-error);
|
|
1962
|
+
font-size: 0.75rem;
|
|
1963
|
+
line-height: 1.25rem;
|
|
1829
1964
|
}
|
|
1830
1965
|
/* Attachment previews — the AgentOS upload banner: a count with "clear all",
|
|
1831
|
-
then a scrolling row of thumbnails and typed file cards
|
|
1966
|
+
then a scrolling row of bordered thumbnails and typed file cards, fading out
|
|
1967
|
+
at the dock's right edge. */
|
|
1832
1968
|
.agno-files {
|
|
1833
1969
|
display: flex;
|
|
1834
1970
|
flex-direction: column;
|
|
1835
|
-
gap:
|
|
1836
|
-
padding: 4px 4px 2px;
|
|
1971
|
+
gap: 8px;
|
|
1837
1972
|
}
|
|
1838
1973
|
.agno-files__head {
|
|
1839
1974
|
display: flex;
|
|
@@ -1848,23 +1983,39 @@ a.agno-source:hover {
|
|
|
1848
1983
|
line-height: 1rem;
|
|
1849
1984
|
letter-spacing: 0.02em;
|
|
1850
1985
|
text-transform: uppercase;
|
|
1986
|
+
white-space: nowrap;
|
|
1851
1987
|
}
|
|
1852
1988
|
.agno-files__count {
|
|
1853
|
-
color: var(--
|
|
1989
|
+
color: rgba(var(--color-primary), 0.5);
|
|
1854
1990
|
}
|
|
1855
1991
|
.agno-files__clear {
|
|
1856
1992
|
display: inline-flex;
|
|
1857
1993
|
align-items: center;
|
|
1858
|
-
gap:
|
|
1994
|
+
gap: 8px;
|
|
1859
1995
|
border: none;
|
|
1860
1996
|
background: none;
|
|
1861
1997
|
padding: 0;
|
|
1862
1998
|
color: var(--agno-primary);
|
|
1863
1999
|
cursor: pointer;
|
|
1864
2000
|
}
|
|
2001
|
+
.agno-files__strip {
|
|
2002
|
+
position: relative;
|
|
2003
|
+
}
|
|
2004
|
+
/* Pinned to the strip's edge, above the row, so it holds still while the row
|
|
2005
|
+
scrolls beneath it. */
|
|
2006
|
+
.agno-files__strip::after {
|
|
2007
|
+
content: '';
|
|
2008
|
+
position: absolute;
|
|
2009
|
+
top: 0;
|
|
2010
|
+
right: 0;
|
|
2011
|
+
bottom: 0;
|
|
2012
|
+
width: 32px;
|
|
2013
|
+
pointer-events: none;
|
|
2014
|
+
background: linear-gradient(to right, rgba(var(--color-primary-accent), 0.1), var(--agno-accent));
|
|
2015
|
+
}
|
|
1865
2016
|
.agno-files__row {
|
|
1866
2017
|
display: flex;
|
|
1867
|
-
align-items:
|
|
2018
|
+
align-items: center;
|
|
1868
2019
|
gap: 8px;
|
|
1869
2020
|
overflow-x: auto;
|
|
1870
2021
|
scrollbar-width: none;
|
|
@@ -1872,75 +2023,89 @@ a.agno-source:hover {
|
|
|
1872
2023
|
.agno-files__row::-webkit-scrollbar {
|
|
1873
2024
|
display: none;
|
|
1874
2025
|
}
|
|
2026
|
+
/* Every item is a 54px-tall bordered tile; the remove control is a tab folded
|
|
2027
|
+
into its top-right corner, sharing the tile's border. */
|
|
1875
2028
|
.agno-file {
|
|
1876
2029
|
position: relative;
|
|
1877
2030
|
flex: none;
|
|
2031
|
+
display: flex;
|
|
2032
|
+
align-items: center;
|
|
2033
|
+
gap: 8px;
|
|
2034
|
+
height: 54px;
|
|
2035
|
+
overflow: hidden;
|
|
2036
|
+
border: 1px solid var(--agno-border);
|
|
2037
|
+
border-radius: 4px;
|
|
2038
|
+
}
|
|
2039
|
+
.agno-file--image {
|
|
2040
|
+
width: 69px;
|
|
2041
|
+
justify-content: center;
|
|
2042
|
+
}
|
|
2043
|
+
.agno-file--card {
|
|
2044
|
+
width: 166px;
|
|
2045
|
+
padding: 4px 8px;
|
|
2046
|
+
background: var(--agno-bg);
|
|
1878
2047
|
}
|
|
1879
2048
|
.agno-file__remove {
|
|
1880
2049
|
position: absolute;
|
|
1881
|
-
top: -
|
|
1882
|
-
right: -
|
|
1883
|
-
z-index: 1;
|
|
2050
|
+
top: -1px;
|
|
2051
|
+
right: -1px;
|
|
1884
2052
|
display: grid;
|
|
1885
2053
|
place-items: center;
|
|
1886
|
-
padding:
|
|
1887
|
-
border:
|
|
1888
|
-
border-
|
|
1889
|
-
|
|
1890
|
-
|
|
2054
|
+
padding: 3px 3px 4px 4px;
|
|
2055
|
+
border: 1px solid var(--agno-border);
|
|
2056
|
+
border-top: none;
|
|
2057
|
+
border-right: none;
|
|
2058
|
+
border-radius: 0 0 0 8px;
|
|
2059
|
+
background: var(--agno-secondary);
|
|
2060
|
+
color: var(--agno-primary);
|
|
1891
2061
|
cursor: pointer;
|
|
2062
|
+
filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05));
|
|
1892
2063
|
}
|
|
1893
2064
|
.agno-file__thumb {
|
|
1894
2065
|
display: block;
|
|
1895
|
-
width:
|
|
1896
|
-
height:
|
|
2066
|
+
width: 100%;
|
|
2067
|
+
height: 100%;
|
|
1897
2068
|
object-fit: cover;
|
|
1898
|
-
border-radius: var(--agno-radius-sm);
|
|
1899
|
-
}
|
|
1900
|
-
.agno-file__card {
|
|
1901
|
-
display: flex;
|
|
1902
|
-
align-items: center;
|
|
1903
|
-
gap: 8px;
|
|
1904
|
-
height: 54px;
|
|
1905
|
-
padding: 0 12px;
|
|
1906
|
-
border: 1px solid var(--agno-border);
|
|
1907
|
-
border-radius: var(--agno-radius-sm);
|
|
1908
|
-
background: var(--agno-bg);
|
|
1909
2069
|
}
|
|
1910
2070
|
.agno-file__mark {
|
|
1911
2071
|
display: grid;
|
|
1912
2072
|
place-items: center;
|
|
1913
2073
|
flex: none;
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
2074
|
+
width: 24px;
|
|
2075
|
+
height: 24px;
|
|
2076
|
+
padding: 4px;
|
|
2077
|
+
border-radius: 6px;
|
|
2078
|
+
background: var(--agno-secondary);
|
|
1917
2079
|
color: var(--agno-primary);
|
|
1918
2080
|
}
|
|
1919
2081
|
.agno-file__meta {
|
|
1920
2082
|
display: flex;
|
|
2083
|
+
flex: 1 1 0;
|
|
1921
2084
|
flex-direction: column;
|
|
2085
|
+
justify-content: center;
|
|
2086
|
+
gap: 2px;
|
|
2087
|
+
height: 40px;
|
|
1922
2088
|
min-width: 0;
|
|
1923
2089
|
}
|
|
1924
2090
|
.agno-file__name {
|
|
1925
|
-
max-width: 8rem;
|
|
1926
2091
|
overflow: hidden;
|
|
1927
2092
|
text-overflow: ellipsis;
|
|
1928
2093
|
white-space: nowrap;
|
|
1929
|
-
font-size: 0.
|
|
1930
|
-
line-height: 1.
|
|
2094
|
+
font-size: 0.75rem;
|
|
2095
|
+
line-height: 1.0625rem;
|
|
2096
|
+
letter-spacing: -0.02em;
|
|
1931
2097
|
color: var(--agno-primary);
|
|
1932
2098
|
}
|
|
1933
2099
|
.agno-file__type {
|
|
1934
|
-
max-width: 8rem;
|
|
1935
2100
|
overflow: hidden;
|
|
1936
2101
|
text-overflow: ellipsis;
|
|
1937
2102
|
white-space: nowrap;
|
|
1938
2103
|
font-family: var(--agno-font-mono);
|
|
1939
|
-
font-size: 0.
|
|
2104
|
+
font-size: 0.75rem;
|
|
1940
2105
|
line-height: 1rem;
|
|
1941
2106
|
letter-spacing: 0.02em;
|
|
1942
2107
|
text-transform: uppercase;
|
|
1943
|
-
color:
|
|
2108
|
+
color: var(--agno-muted);
|
|
1944
2109
|
}
|
|
1945
2110
|
.agno-input__field {
|
|
1946
2111
|
display: flex;
|
|
@@ -1984,6 +2149,48 @@ a.agno-source:hover {
|
|
|
1984
2149
|
gap: 8px;
|
|
1985
2150
|
}
|
|
1986
2151
|
|
|
2152
|
+
/* Compact: one row, the field with the controls beside it — the Figma
|
|
2153
|
+
"Textarea" component (8px padding, 12px gap, 24px field and buttons). */
|
|
2154
|
+
.agno-input--compact .agno-input__dock {
|
|
2155
|
+
gap: 8px;
|
|
2156
|
+
border-radius: var(--agno-radius-lg);
|
|
2157
|
+
box-shadow: none;
|
|
2158
|
+
}
|
|
2159
|
+
.agno-input--compact .agno-input__row {
|
|
2160
|
+
align-items: flex-end;
|
|
2161
|
+
gap: 12px;
|
|
2162
|
+
}
|
|
2163
|
+
.agno-input--compact .agno-input__field {
|
|
2164
|
+
flex: 1;
|
|
2165
|
+
min-width: 0;
|
|
2166
|
+
background: none;
|
|
2167
|
+
border-radius: 0;
|
|
2168
|
+
}
|
|
2169
|
+
.agno-input--compact .agno-input__textarea {
|
|
2170
|
+
min-height: 24px;
|
|
2171
|
+
max-height: 120px;
|
|
2172
|
+
padding: 1.5px 8px;
|
|
2173
|
+
line-height: 21px;
|
|
2174
|
+
}
|
|
2175
|
+
.agno-input--compact .agno-input__actions {
|
|
2176
|
+
gap: 8px;
|
|
2177
|
+
padding-bottom: 0;
|
|
2178
|
+
}
|
|
2179
|
+
.agno-input--compact .agno-btn--icon {
|
|
2180
|
+
width: 24px;
|
|
2181
|
+
height: 24px;
|
|
2182
|
+
border-radius: var(--agno-radius-sm);
|
|
2183
|
+
}
|
|
2184
|
+
.agno-input--compact .agno-btn--ghost {
|
|
2185
|
+
color: var(--agno-muted);
|
|
2186
|
+
}
|
|
2187
|
+
.agno-input--compact .agno-btn--ghost:hover:not(:disabled) {
|
|
2188
|
+
color: var(--agno-primary);
|
|
2189
|
+
}
|
|
2190
|
+
.agno-input--compact .agno-btn--icon:not(.agno-btn--ghost) {
|
|
2191
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
2192
|
+
}
|
|
2193
|
+
|
|
1987
2194
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
1988
2195
|
Buttons — Agno OS `Button` (DM Mono, uppercase, rounded-md)
|
|
1989
2196
|
───────────────────────────────────────────────────────────────────────── */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agno-hq/chat-react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Composable, embeddable React components for AgentOS — a headless chat hook, a provider for building your own layout, and drop-in chat embeds.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Agno",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/stream.ts","../src/core/client.ts","../src/core/session.ts","../src/core/events.ts"],"names":["id"],"mappings":"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","file":"chunk-62IEW2HM.js","sourcesContent":["/**\n * Streaming parser for AgentOS run endpoints.\n *\n * AgentOS streams a run as a sequence of JSON objects concatenated on the wire\n * (not strictly newline-delimited). Each object is one \"run event\". This module\n * reads the response body incrementally, extracts complete JSON objects as they\n * arrive, and hands each one to a callback.\n *\n * It supports both the legacy shape (the event object sent directly) and the\n * newer envelope shape ({ event: string, data: string | object }), normalising\n * both into a flat event object with an `event` discriminator field.\n */\n\nimport type { RunEvent } from './types'\n\n/** A parsed, normalised run event. Shape varies by `event` type — see types.ts. */\nexport interface StreamEvent {\n event: RunEvent | string\n [key: string]: unknown\n}\n\ninterface Envelope {\n event: string\n data: string | Record<string, unknown>\n}\n\nfunction isEnvelope(data: unknown): data is Envelope {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'event' in data &&\n 'data' in data &&\n typeof (data as Envelope).event === 'string'\n )\n}\n\nfunction isFlatEvent(data: unknown): data is StreamEvent {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'event' in data &&\n !('data' in data) &&\n typeof (data as StreamEvent).event === 'string'\n )\n}\n\nfunction normaliseEnvelope(env: Envelope): StreamEvent {\n let parsed: Record<string, unknown> = {}\n if (typeof env.data === 'string') {\n try {\n parsed = JSON.parse(env.data)\n } catch {\n parsed = {}\n }\n } else if (env.data && typeof env.data === 'object') {\n parsed = env.data\n }\n return { event: env.event, ...parsed }\n}\n\n/**\n * Pulls every complete JSON object out of `buffer`, emitting each via `onEvent`.\n * Returns the unconsumed tail (a partial object awaiting more bytes).\n */\nfunction drainBuffer(buffer: string, onEvent: (e: StreamEvent) => void): string {\n let start = buffer.indexOf('{')\n\n while (start !== -1 && start < buffer.length) {\n let depth = 0\n let inString = false\n let escape = false\n let end = -1\n\n for (let i = start; i < buffer.length; i++) {\n const ch = buffer[i]\n if (inString) {\n if (escape) escape = false\n else if (ch === '\\\\') escape = true\n else if (ch === '\"') inString = false\n } else if (ch === '\"') {\n inString = true\n } else if (ch === '{') {\n depth++\n } else if (ch === '}') {\n depth--\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n\n if (end === -1) break // incomplete object; wait for more data\n\n const slice = buffer.slice(start, end + 1)\n try {\n const parsed = JSON.parse(slice)\n if (isEnvelope(parsed)) onEvent(normaliseEnvelope(parsed))\n else if (isFlatEvent(parsed)) onEvent(parsed)\n } catch {\n // Not valid JSON despite balanced braces — skip this opening brace.\n start = buffer.indexOf('{', start + 1)\n continue\n }\n\n buffer = buffer.slice(end + 1).trim()\n start = buffer.indexOf('{')\n }\n\n return buffer\n}\n\nexport interface StreamRunOptions {\n url: string\n body: FormData | Record<string, unknown>\n headers?: Record<string, string>\n signal?: AbortSignal\n onEvent: (event: StreamEvent) => void\n onError: (error: Error) => void\n onComplete: () => void\n}\n\n/**\n * POSTs a run request and streams the response, calling `onEvent` for every\n * run event as it arrives. Resolves when the stream ends.\n */\nexport async function streamRun(options: StreamRunOptions): Promise<void> {\n const { url, body, headers = {}, signal, onEvent, onError, onComplete } = options\n let buffer = ''\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n ...(!(body instanceof FormData) && { 'Content-Type': 'application/json' }),\n ...headers,\n },\n body: body instanceof FormData ? body : JSON.stringify(body),\n signal,\n })\n\n if (!response.ok) {\n let detail: string\n try {\n const err = await response.json()\n detail = err?.detail ? String(err.detail) : `${response.status} ${response.statusText}`\n } catch {\n detail = `${response.status} ${response.statusText}`\n }\n throw new Error(detail)\n }\n if (!response.body) throw new Error('No response body')\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n\n for (;;) {\n const { done, value } = await reader.read()\n if (done) {\n buffer = drainBuffer(buffer, onEvent)\n onComplete()\n return\n }\n buffer += decoder.decode(value, { stream: true })\n buffer = drainBuffer(buffer, onEvent)\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n onComplete()\n return\n }\n onError(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","/**\n * Thin client for an AgentOS HTTP backend.\n *\n * Wraps the discovery, run, continue, cancel and session endpoints. Streaming\n * runs are handled by `streamRun` from ./stream; everything else is plain JSON.\n */\n\nimport { streamRun, type StreamEvent } from './stream'\nimport type {\n Entity,\n EntityType,\n RunEventData,\n SessionsResponse,\n ToolExecution,\n} from './types'\n\n/** Normalise a base URL: add a scheme for bare hosts, strip trailing slash. */\nexport function normaliseBaseUrl(value: string | null | undefined): string {\n if (!value) return ''\n let url = value.trim()\n if (!/^https?:\\/\\//.test(url)) {\n const isLocal = url.startsWith('localhost') || /^\\d{1,3}(\\.\\d{1,3}){3}/.test(url)\n url = `${isLocal ? 'http' : 'https'}://${url}`\n }\n return url.replace(/\\/+$/, '')\n}\n\nexport interface AgnoClientOptions {\n /** AgentOS base URL, e.g. \"http://localhost:7777\". */\n baseUrl: string\n /** Optional headers (e.g. Authorization) added to every request. */\n headers?: Record<string, string>\n /** Default db_id used for session listing where the backend requires it. */\n dbId?: string\n}\n\ninterface RunArgs {\n type: EntityType\n id: string\n message?: string\n sessionId?: string\n userId?: string\n files?: File[]\n /** Extra form fields appended verbatim. */\n extra?: Record<string, string>\n signal?: AbortSignal\n onEvent: (event: RunEventData) => void\n onError: (error: Error) => void\n onComplete: () => void\n}\n\ninterface ContinueArgs {\n type: EntityType\n id: string\n runId: string\n sessionId?: string\n userId?: string\n /** Resolved tool executions (agents/teams human-in-the-loop). */\n tools?: ToolExecution[]\n /** Resolved step requirements (workflow human-in-the-loop). */\n stepRequirements?: unknown[]\n signal?: AbortSignal\n onEvent: (event: RunEventData) => void\n onError: (error: Error) => void\n onComplete: () => void\n}\n\nconst RUN_PATH: Record<EntityType, string> = {\n agent: 'agents',\n team: 'teams',\n workflow: 'workflows',\n}\n\nexport class AgnoClient {\n readonly baseUrl: string\n readonly headers: Record<string, string>\n readonly dbId?: string\n\n constructor(options: AgnoClientOptions) {\n this.baseUrl = normaliseBaseUrl(options.baseUrl)\n this.headers = options.headers ?? {}\n this.dbId = options.dbId\n }\n\n private async getJson<T>(path: string): Promise<T> {\n const res = await fetch(`${this.baseUrl}${path}`, { headers: this.headers })\n if (!res.ok) throw new Error(`GET ${path} failed: ${res.status} ${res.statusText}`)\n return res.json() as Promise<T>\n }\n\n /** Liveness check against /health. Returns the HTTP status code. */\n async health(): Promise<number> {\n try {\n const res = await fetch(`${this.baseUrl}/health`, { headers: this.headers })\n return res.status\n } catch {\n return 0\n }\n }\n\n /* ----------------------------- discovery ----------------------------- */\n\n async getAgents(): Promise<Entity[]> {\n const data = await this.getJson<any[]>('/agents').catch(() => [])\n return data.map((a) => ({\n type: 'agent' as const,\n id: a.agent_id ?? a.id,\n name: a.name ?? a.agent_id ?? a.id,\n description: a.description,\n model: a.model,\n db_id: a.db_id,\n }))\n }\n\n async getTeams(): Promise<Entity[]> {\n const data = await this.getJson<any[]>('/teams').catch(() => [])\n return data.map((t) => ({\n type: 'team' as const,\n id: t.team_id ?? t.id,\n name: t.name ?? t.team_id ?? t.id,\n description: t.description,\n model: t.model,\n db_id: t.db_id,\n }))\n }\n\n async getWorkflows(): Promise<Entity[]> {\n const data = await this.getJson<any[]>('/workflows').catch(() => [])\n return data.map((w) => ({\n type: 'workflow' as const,\n id: w.workflow_id ?? w.id,\n name: w.name ?? w.workflow_id ?? w.id,\n description: w.description,\n model: w.model,\n db_id: w.db_id,\n }))\n }\n\n /** All runnable entities (agents, teams, workflows) in one list. */\n async getEntities(): Promise<Entity[]> {\n const [agents, teams, workflows] = await Promise.all([\n this.getAgents(),\n this.getTeams(),\n this.getWorkflows(),\n ])\n return [...agents, ...teams, ...workflows]\n }\n\n /* ------------------------------ sessions ----------------------------- */\n\n async getSessions(type: EntityType, componentId: string, dbId?: string): Promise<SessionsResponse> {\n const url = new URL(`${this.baseUrl}/sessions`)\n url.searchParams.set('type', type)\n url.searchParams.set('component_id', componentId)\n const db = dbId ?? this.dbId\n if (db) url.searchParams.set('db_id', db)\n try {\n const res = await fetch(url.toString(), { headers: this.headers })\n if (!res.ok) return { data: [] }\n return (await res.json()) as SessionsResponse\n } catch {\n return { data: [] }\n }\n }\n\n /** Runs (with messages/tools/events) for a session — used to rehydrate chat history. */\n async getSessionRuns(type: EntityType, sessionId: string, dbId?: string): Promise<any[]> {\n const url = new URL(`${this.baseUrl}/sessions/${sessionId}/runs`)\n url.searchParams.set('type', type)\n const db = dbId ?? this.dbId\n if (db) url.searchParams.set('db_id', db)\n const res = await fetch(url.toString(), { headers: this.headers })\n if (!res.ok) throw new Error(`Failed to load session: ${res.statusText}`)\n return res.json()\n }\n\n async deleteSession(sessionId: string, dbId?: string): Promise<boolean> {\n const url = new URL(`${this.baseUrl}/sessions/${sessionId}`)\n const db = dbId ?? this.dbId\n if (db) url.searchParams.set('db_id', db)\n const res = await fetch(url.toString(), { method: 'DELETE', headers: this.headers })\n return res.ok\n }\n\n /* -------------------------------- runs ------------------------------- */\n\n /** Start a streaming run for an agent, team or workflow. */\n async run(args: RunArgs): Promise<void> {\n const form = new FormData()\n if (args.message != null) form.append('message', args.message)\n form.append('stream', 'true')\n if (args.sessionId) form.append('session_id', args.sessionId)\n if (args.userId) form.append('user_id', args.userId)\n for (const file of args.files ?? []) form.append('files', file)\n for (const [k, v] of Object.entries(args.extra ?? {})) form.append(k, v)\n\n const url = `${this.baseUrl}/${RUN_PATH[args.type]}/${args.id}/runs`\n return streamRun({\n url,\n body: form,\n headers: this.headers,\n signal: args.signal,\n onEvent: (e) => args.onEvent(e as RunEventData),\n onError: args.onError,\n onComplete: args.onComplete,\n })\n }\n\n /** Continue a paused run (resolving a human-in-the-loop requirement). */\n async continueRun(args: ContinueArgs): Promise<void> {\n const form = new FormData()\n form.append('stream', 'true')\n if (args.sessionId) form.append('session_id', args.sessionId)\n if (args.userId) form.append('user_id', args.userId)\n\n if (args.type === 'workflow') {\n if (args.stepRequirements) form.append('step_requirements', JSON.stringify(args.stepRequirements))\n } else if (args.tools) {\n form.append('tools', JSON.stringify(args.tools))\n }\n\n const url = `${this.baseUrl}/${RUN_PATH[args.type]}/${args.id}/runs/${args.runId}/continue`\n return streamRun({\n url,\n body: form,\n headers: this.headers,\n signal: args.signal,\n onEvent: (e) => args.onEvent(e as RunEventData),\n onError: args.onError,\n onComplete: args.onComplete,\n })\n }\n\n /** Cancel an in-flight run. */\n async cancelRun(type: EntityType, id: string, runId: string, sessionId?: string): Promise<boolean> {\n const url = new URL(`${this.baseUrl}/${RUN_PATH[type]}/${id}/runs/${runId}/cancel`)\n if (sessionId) url.searchParams.set('session_id', sessionId)\n try {\n const res = await fetch(url.toString(), { method: 'POST', headers: this.headers })\n return res.ok\n } catch {\n return false\n }\n }\n}\n\nexport type { StreamEvent }\n","/**\n * Helpers for turning AgentOS session history into render-ready chat messages.\n *\n * `GET /sessions/{id}/runs` returns an array of run records. Each run carries\n * the user input plus the agent's content, tools, reasoning, references and\n * media — enough to reconstruct the transcript for a past session.\n */\n\nimport type { ChatMessage, ReasoningStep, ReferenceData, RunEventData, ToolExecution } from './types'\n\ninterface SessionRun {\n run_id?: string\n session_id?: string\n run_input?: unknown\n content?: unknown\n created_at?: number\n status?: string\n /** Present when the agent was configured with `store_events`. */\n events?: RunEventData[]\n tools?: ToolExecution[]\n images?: ChatMessage['images']\n videos?: ChatMessage['videos']\n audio?: ChatMessage['audio']\n response_audio?: ChatMessage['response_audio']\n extra_data?: {\n reasoning_steps?: ReasoningStep[]\n references?: ReferenceData[]\n }\n reasoning_steps?: ReasoningStep[]\n references?: ReferenceData[]\n followups?: string[]\n}\n\nfunction toText(value: unknown): string {\n if (value == null) return ''\n if (typeof value === 'string') return value\n // Some inputs/outputs arrive as content-part arrays or objects.\n if (Array.isArray(value)) {\n return value\n .map((part) =>\n part && typeof part === 'object' && 'text' in part ? String((part as { text: unknown }).text) : '',\n )\n .filter(Boolean)\n .join(' ')\n }\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>\n if (typeof obj.input_content === 'string') return obj.input_content\n if (typeof obj.message === 'string') return obj.message\n if (typeof obj.content === 'string') return obj.content\n return '```json\\n' + JSON.stringify(value, null, 2) + '\\n```'\n }\n return String(value)\n}\n\nlet seq = 0\nconst id = (prefix: string) => `${prefix}-${seq++}`\n\n/** Convert the runs of a session into an ordered list of chat messages. */\nexport function sessionRunsToMessages(runs: SessionRun[]): ChatMessage[] {\n if (!Array.isArray(runs)) return []\n const messages: ChatMessage[] = []\n\n for (const run of runs) {\n const created = run.created_at ?? Math.floor(Date.now() / 1000)\n\n const userContent = toText(run.run_input)\n if (userContent) {\n messages.push({\n id: id('hist-u'),\n role: 'user',\n content: userContent,\n created_at: created,\n })\n }\n\n messages.push({\n id: id('hist-a'),\n role: 'agent',\n content: toText(run.content),\n created_at: created,\n status: 'completed',\n run_id: run.run_id,\n session_id: run.session_id,\n tool_calls: run.tools && run.tools.length ? run.tools : undefined,\n // Stored events let the behind-the-scenes panel look the same in history\n // as it does live.\n events: run.events && run.events.length ? run.events : undefined,\n reasoning_steps: run.reasoning_steps ?? run.extra_data?.reasoning_steps,\n references: run.references ?? run.extra_data?.references,\n followups: run.followups && run.followups.length ? run.followups : undefined,\n images: run.images,\n videos: run.videos,\n audio: run.audio,\n response_audio: run.response_audio,\n })\n }\n\n return messages\n}\n","/**\n * Helpers for classifying run events and turning them into UI labels.\n *\n * Agent, team and workflow events share shapes but use different name prefixes\n * (e.g. `RunContent` vs `TeamRunContent`). These helpers let the rest of the\n * library treat them uniformly.\n */\n\nimport type { ChatMessage, RunEventData, SubRun, ToolExecution, WorkflowStep } from './types'\n\nconst name = (e: RunEventData): string => String(e.event ?? '')\n\nexport const isStartedEvent = (e: RunEventData): boolean =>\n name(e) === 'RunStarted' ||\n name(e) === 'TeamRunStarted' ||\n name(e) === 'WorkflowStarted' ||\n name(e) === 'ReasoningStarted' ||\n name(e) === 'TeamReasoningStarted'\n\nexport const isContentEvent = (e: RunEventData): boolean =>\n name(e) === 'RunContent' || name(e) === 'TeamRunContent' || name(e) === 'WorkflowAgentCompleted'\n\nexport const isContentCompletedEvent = (e: RunEventData): boolean =>\n name(e) === 'RunContentCompleted' || name(e) === 'TeamRunContentCompleted'\n\nexport const isCompletedEvent = (e: RunEventData): boolean =>\n name(e) === 'RunCompleted' ||\n name(e) === 'TeamRunCompleted' ||\n name(e) === 'WorkflowCompleted'\n\nexport const isErrorEvent = (e: RunEventData): boolean =>\n name(e) === 'RunError' ||\n name(e) === 'TeamRunError' ||\n name(e) === 'WorkflowError' ||\n name(e) === 'StepError' ||\n name(e) === 'ToolCallError' ||\n name(e) === 'TeamToolCallError'\n\nexport const isCancelledEvent = (e: RunEventData): boolean =>\n name(e) === 'RunCancelled' ||\n name(e) === 'TeamRunCancelled' ||\n name(e) === 'WorkflowCancelled'\n\nexport const isPausedEvent = (e: RunEventData): boolean =>\n name(e) === 'RunPaused' ||\n name(e) === 'TeamRunPaused' ||\n name(e) === 'WorkflowPaused' ||\n name(e) === 'StepPaused' ||\n name(e) === 'RouterPaused' ||\n name(e) === 'ConditionPaused'\n\nexport const isToolStartedEvent = (e: RunEventData): boolean =>\n name(e) === 'ToolCallStarted' || name(e) === 'TeamToolCallStarted'\n\nexport const isToolCompletedEvent = (e: RunEventData): boolean =>\n name(e) === 'ToolCallCompleted' || name(e) === 'TeamToolCallCompleted'\n\nexport const isToolEvent = (e: RunEventData): boolean =>\n isToolStartedEvent(e) || isToolCompletedEvent(e) || name(e) === 'ToolCallError' || name(e) === 'TeamToolCallError'\n\nexport const isReasoningStepEvent = (e: RunEventData): boolean =>\n name(e) === 'ReasoningStep' || name(e) === 'TeamReasoningStep'\n\nexport const isReasoningCompletedEvent = (e: RunEventData): boolean =>\n name(e) === 'ReasoningCompleted' || name(e) === 'TeamReasoningCompleted'\n\n/** The follow-up prompts an agent built with `followups=True` suggests. */\nexport const isFollowupsCompletedEvent = (e: RunEventData): boolean =>\n name(e) === 'FollowupsCompleted' || name(e) === 'TeamFollowupsCompleted'\n\n/**\n * A nested-run event — a team member's turn or a workflow step executor.\n * Identified by a `parent_run_id` on an agent/team content/tool/run event.\n */\nexport function isSubRunEvent(e: RunEventData): boolean {\n if (!e.parent_run_id) return false\n const ev = name(e)\n return (\n isContentEvent(e) ||\n isToolEvent(e) ||\n isCompletedEvent(e) ||\n isErrorEvent(e) ||\n ev === 'RunStarted' ||\n ev === 'TeamRunStarted'\n )\n}\n\n/** A workflow step lifecycle event (start / output / complete / error). */\nexport function isStepEvent(e: RunEventData): boolean {\n const ev = name(e)\n return ev === 'StepStarted' || ev === 'StepCompleted' || ev === 'StepOutput' || ev === 'StepError'\n}\n\n/** Tool executions carried by an event, from either the single or array field. */\nexport function toolsFromEvent(e: RunEventData): ToolExecution[] {\n const out: ToolExecution[] = []\n if (e.tool) out.push(e.tool)\n if (Array.isArray(e.tools)) out.push(...e.tools)\n return out\n}\n\n/** Apply a content chunk and its related metadata to a message. */\nexport function applyContentEvent(message: ChatMessage, e: RunEventData): ChatMessage {\n const next: ChatMessage = { ...message }\n\n if (typeof e.content === 'string' && e.content) {\n next.content = message.content + e.content\n } else if (e.content && typeof e.content === 'object') {\n next.content = message.content + '\\n```json\\n' + JSON.stringify(e.content, null, 2) + '\\n```\\n'\n }\n\n if (e.reasoning_steps?.length) next.reasoning_steps = e.reasoning_steps\n if (e.extra_data?.reasoning_steps?.length) next.reasoning_steps = e.extra_data.reasoning_steps\n if (e.references?.length) next.references = e.references\n if (e.extra_data?.references?.length) next.references = e.extra_data.references\n if (e.citations) next.citations = e.citations\n\n const tools = toolsFromEvent(e)\n if (tools.length) {\n let toolCalls = message.tool_calls ?? []\n for (const tool of tools) toolCalls = mergeTool(toolCalls, tool)\n next.tool_calls = toolCalls\n }\n\n if (e.images?.length) next.images = e.images\n if (e.videos?.length) next.videos = e.videos\n if (e.audio?.length) next.audio = e.audio\n if (e.response_audio?.transcript) {\n next.response_audio = {\n ...message.response_audio,\n transcript: (message.response_audio?.transcript ?? '') + e.response_audio.transcript,\n }\n }\n\n return next\n}\n\n/**\n * A short human-readable label describing what a run is doing at the moment of\n * this event — for a live status line (\"Calling get_weather\", \"Reasoning…\").\n * Returns null for events that don't warrant a status change.\n */\nexport function activityLabel(e: RunEventData): string | null {\n const ev = name(e)\n switch (ev) {\n case 'RunStarted':\n case 'TeamRunStarted':\n case 'WorkflowStarted':\n return 'Thinking'\n case 'ModelRequestStarted':\n case 'TeamModelRequestStarted':\n return 'Generating'\n case 'ReasoningStarted':\n case 'TeamReasoningStarted':\n case 'ReasoningStep':\n case 'TeamReasoningStep':\n case 'ReasoningContentDelta':\n case 'TeamReasoningContentDelta':\n return 'Reasoning'\n case 'MemoryUpdateStarted':\n case 'TeamMemoryUpdateStarted':\n return 'Updating memory'\n case 'SessionSummaryStarted':\n case 'TeamSessionSummaryStarted':\n return 'Summarising session'\n case 'CompressionStarted':\n return 'Compressing context'\n case 'FollowupsStarted':\n case 'TeamFollowupsStarted':\n return 'Suggesting follow-ups'\n case 'ToolCallStarted':\n case 'TeamToolCallStarted': {\n const tool = e.tool?.tool_name\n return tool ? `Calling ${tool}` : 'Calling tool'\n }\n case 'ToolCallCompleted':\n case 'TeamToolCallCompleted':\n return 'Generating'\n case 'StepStarted':\n return e.step_name ? `Running step: ${e.step_name}` : 'Running step'\n case 'LoopIterationStarted':\n return `Loop iteration ${e.iteration ?? ''}`.trim()\n case 'ParallelExecutionStarted':\n return 'Running parallel steps'\n case 'RouterExecutionStarted':\n return 'Routing'\n case 'ConditionExecutionStarted':\n return 'Evaluating condition'\n default:\n return null\n }\n}\n\nfunction textOf(value: unknown): string | undefined {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object') return '```json\\n' + JSON.stringify(value, null, 2) + '\\n```'\n return undefined\n}\n\n/** Apply a nested member/executor run event into a message's `members`. */\nexport function applySubRunEvent(\n message: ChatMessage,\n e: RunEventData,\n kind: SubRun['kind'],\n): ChatMessage {\n const rid = e.run_id || e.parent_run_id || 'sub'\n const members = message.members ? [...message.members] : []\n const idx = members.findIndex((s) => s.run_id === rid)\n const base: SubRun = idx >= 0 ? { ...members[idx] } : { run_id: rid, kind, content: '', status: 'running' }\n\n base.name = base.name || (e.agent_name as string) || (e.team_name as string) || (e.agent_id as string)\n\n const tools = toolsFromEvent(e)\n if (tools.length) {\n let tc = base.tool_calls ?? []\n for (const t of tools) tc = mergeTool(tc, t)\n base.tool_calls = tc\n }\n\n if (isErrorEvent(e)) {\n base.status = 'error'\n } else if (isCompletedEvent(e)) {\n base.status = 'completed'\n const final = textOf(e.content)\n if (final) base.content = final\n } else if (isContentEvent(e)) {\n const delta = typeof e.content === 'string' ? e.content : ''\n if (delta) base.content += delta\n }\n\n if (idx >= 0) members[idx] = base\n else members.push(base)\n return { ...message, members }\n}\n\n/** Apply a workflow `Step*` event into a message's `steps`. */\nexport function applyStepEvent(message: ChatMessage, e: RunEventData): ChatMessage {\n const ev = name(e)\n const key = (e.step_name as string) || `step-${JSON.stringify(e.step_index ?? '')}`\n const steps = message.steps ? [...message.steps] : []\n const idx = steps.findIndex((s) => s.key === key)\n const step: WorkflowStep =\n idx >= 0\n ? { ...steps[idx] }\n : { key, name: e.step_name, index: e.step_index, status: 'running' }\n\n if (ev === 'StepStarted') {\n step.status = 'running'\n } else if (ev === 'StepError') {\n step.status = 'error'\n step.error = e.error || (typeof e.content === 'string' ? e.content : undefined)\n } else {\n // StepCompleted / StepOutput\n step.status = 'completed'\n const stepResponse = (e.step_response ?? e.step_output) as { content?: unknown } | undefined\n const content = textOf(e.content) ?? textOf(stepResponse?.content)\n if (content) step.content = content\n }\n\n if (idx >= 0) steps[idx] = step\n else steps.push(step)\n return { ...message, steps }\n}\n\n/** Merge a tool execution into a list, updating an existing entry by id/name. */\nexport function mergeTool(list: ToolExecution[], tool: ToolExecution): ToolExecution[] {\n const key = tool.tool_call_id || `${tool.tool_name}-${tool.created_at}`\n const idx = list.findIndex((t) => {\n if (t.tool_call_id && tool.tool_call_id) return t.tool_call_id === tool.tool_call_id\n return `${t.tool_name}-${t.created_at}` === key\n })\n if (idx >= 0) {\n const next = [...list]\n next[idx] = { ...next[idx], ...tool }\n return next\n }\n return [...list, tool]\n}\n"]}
|