@vertesia/ui 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260804.124748Z
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/lib/core/hooks/useScrollableSearch.d.ts +1 -1
- package/lib/core/hooks/useScrollableSearch.d.ts.map +1 -1
- package/lib/core/hooks/useScrollableSearch.js +15 -2
- package/lib/core/hooks/useScrollableSearch.js.map +1 -1
- package/lib/env/index.d.ts +4 -0
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.js +3 -8
- package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts +8 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +53 -17
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +25 -10
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +24 -9
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +15 -3
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +9 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +97 -2
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +12 -3
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/agent/chat/index.d.ts +1 -1
- package/lib/features/agent/chat/index.d.ts.map +1 -1
- package/lib/features/agent/chat/index.js.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts +8 -6
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.js +8 -3
- package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +4 -1
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +31 -3
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +128 -6
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.d.ts +2 -2
- package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +2 -2
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +5 -1
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +2 -2
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/ObjectSchemaEditor.d.ts +2 -2
- package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.d.ts +2 -2
- package/lib/features/store/types/SelectContentType.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.d.ts +2 -2
- package/lib/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/store/types/TableLayoutEditor.d.ts +2 -2
- package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +1267 -6
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.js +5 -0
- package/lib/features/store/types/TypeRegistry.js.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.js +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +1251 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.d.ts +2 -2
- package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.js +4 -0
- package/lib/features/store/types/typeCatalogCache.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts +118 -7
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/i18n/locales/ar.json +2 -1
- package/lib/i18n/locales/de.json +2 -1
- package/lib/i18n/locales/en.json +5 -1
- package/lib/i18n/locales/es.json +2 -1
- package/lib/i18n/locales/fr.json +2 -1
- package/lib/i18n/locales/it.json +2 -1
- package/lib/i18n/locales/ja.json +2 -1
- package/lib/i18n/locales/ko.json +2 -1
- package/lib/i18n/locales/pt.json +2 -1
- package/lib/i18n/locales/ru.json +2 -1
- package/lib/i18n/locales/tr.json +2 -1
- package/lib/i18n/locales/zh-TW.json +2 -1
- package/lib/i18n/locales/zh.json +2 -1
- package/lib/session/UserSession.d.ts +18 -4
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/shell/apps/AppInstallationProvider.d.ts +222 -2
- package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
- package/lib/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +34 -34
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +13 -13
- package/lib/vertesia-ui-widgets.js +18 -18
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts +7 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +62 -6
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/package.json +31 -31
- package/src/core/hooks/useScrollableSearch.test.tsx +139 -0
- package/src/core/hooks/useScrollableSearch.tsx +17 -3
- package/src/env/index.ts +2 -0
- package/src/features/agent/chat/AgentChatPlaybackControls.test.tsx +2 -0
- package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +51 -6
- package/src/features/agent/chat/AgentRequestInputOverlay.tsx +5 -7
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +195 -3
- package/src/features/agent/chat/ModernAgentConversation.tsx +106 -22
- package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +75 -20
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +112 -0
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +62 -10
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +36 -4
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +2 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +71 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +3 -1
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +18 -4
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +95 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +111 -1
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +57 -0
- package/src/features/agent/chat/hooks/useAgentStream.ts +12 -3
- package/src/features/agent/chat/index.ts +1 -0
- package/src/features/facets/PromptsFacetsNav.tsx +17 -9
- package/src/features/store/objects/components/ContentOverview.tsx +4 -1
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -2
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +2 -2
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +2 -2
- package/src/features/store/types/IntakePolicyEditor.tsx +12 -4
- package/src/features/store/types/IntakePolicyForm.tsx +25 -0
- package/src/features/store/types/ObjectSchemaEditor.tsx +2 -2
- package/src/features/store/types/SelectContentType.tsx +9 -9
- package/src/features/store/types/SelectContentTypeModal.tsx +5 -5
- package/src/features/store/types/TableLayoutEditor.tsx +2 -2
- package/src/features/store/types/TypeRegistry.ts +8 -3
- package/src/features/store/types/intake-policy-editor.logic.ts +10 -2
- package/src/features/store/types/typeCatalogCache.ts +10 -3
- package/src/i18n/locales/ar.json +2 -1
- package/src/i18n/locales/de.json +2 -1
- package/src/i18n/locales/en.json +5 -1
- package/src/i18n/locales/es.json +2 -1
- package/src/i18n/locales/fr.json +2 -1
- package/src/i18n/locales/it.json +2 -1
- package/src/i18n/locales/ja.json +2 -1
- package/src/i18n/locales/ko.json +2 -1
- package/src/i18n/locales/pt.json +2 -1
- package/src/i18n/locales/ru.json +2 -1
- package/src/i18n/locales/tr.json +2 -1
- package/src/i18n/locales/zh-TW.json +2 -1
- package/src/i18n/locales/zh.json +2 -1
- package/src/shell/login/InviteAcceptModal.tsx +4 -4
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +13 -9
- package/src/widgets/monacoEditor/MonacoEditor.tsx +83 -7
|
@@ -34,7 +34,7 @@ interface ScrollableSearchOptions<ResultT, PayloadT, PageT = number> {
|
|
|
34
34
|
*/
|
|
35
35
|
nextPageTrigger: React.RefObject<HTMLElement | null>;
|
|
36
36
|
}
|
|
37
|
-
interface ScrollableSearchResult<ResultT, PayloadT, PageT = number> {
|
|
37
|
+
export interface ScrollableSearchResult<ResultT, PayloadT, PageT = number> {
|
|
38
38
|
/**
|
|
39
39
|
* Initiates a new search with the given payload
|
|
40
40
|
* @param payload The search payload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollableSearch.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/useScrollableSearch.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc,CAAC,OAAO,EAAE,KAAK;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,KAAK,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,IAAI,CAC/C,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,GAAG,IAAI,EAClB,QAAQ,EAAE,MAAM,KACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7C,UAAU,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM;IAC/D;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C;;OAEG;IACH,OAAO,EAAE,QAAQ,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACxD;AAED,
|
|
1
|
+
{"version":3,"file":"useScrollableSearch.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/useScrollableSearch.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc,CAAC,OAAO,EAAE,KAAK;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,KAAK,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,IAAI,CAC/C,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,GAAG,IAAI,EAClB,QAAQ,EAAE,MAAM,KACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7C,UAAU,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM;IAC/D;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C;;OAEG;IACH,OAAO,EAAE,QAAQ,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM;IACrE;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAEpC;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM,EACjE,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EACvD,YAAY,GAAE,OAAO,EAAO,GAC7B,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAkGlD;AAED,KAAK,eAAe,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAEnH,UAAU,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CACtD,SAAQ,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC1E,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EACxD,IAAI,EAAE,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CAAC,EACvD,YAAY,GAAE,OAAO,EAAO,GAC7B,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAcnD"}
|
|
@@ -11,25 +11,38 @@ export function useScrollableSearch(opts, dependencies = []) {
|
|
|
11
11
|
const [results, setResults] = useState([]);
|
|
12
12
|
const [nextPage, setNextPage] = useState(null);
|
|
13
13
|
const [isSearching, setIsSearching] = useState(false);
|
|
14
|
+
// Bumped by search()/refresh() so the fetch effect re-runs even when the
|
|
15
|
+
// payload/page state is unchanged (e.g. refresh on the first page).
|
|
16
|
+
const [refreshTick, setRefreshTick] = useState(0);
|
|
14
17
|
// Track current request to prevent stale results
|
|
15
18
|
const requestIdRef = useRef(0);
|
|
19
|
+
// Latest-ref for the search function: callers routinely pass an inline
|
|
20
|
+
// closure, which gets a new identity on every render. Depending on it in
|
|
21
|
+
// the fetch effect made every completed request re-trigger the effect —
|
|
22
|
+
// an infinite request loop. The ref always points at the latest closure
|
|
23
|
+
// without participating in the effect's dependencies.
|
|
24
|
+
const searchFnRef = useRef(opts.search);
|
|
25
|
+
searchFnRef.current = opts.search;
|
|
16
26
|
const search = (payload) => {
|
|
17
27
|
setPage(null);
|
|
18
28
|
setResults([]); // Clear old results immediately
|
|
19
29
|
setNextPage(null);
|
|
20
30
|
setLastPayload(payload);
|
|
31
|
+
setRefreshTick((tick) => tick + 1);
|
|
21
32
|
};
|
|
22
33
|
const searchMore = () => {
|
|
23
34
|
if (nextPage !== null) {
|
|
24
35
|
setPage(nextPage);
|
|
25
36
|
}
|
|
26
37
|
};
|
|
38
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: refreshTick is an intentional external trigger — refresh() bumps it to re-run the fetch when payload/page are unchanged
|
|
27
39
|
useEffect(() => {
|
|
28
40
|
// Increment request ID to mark previous requests as stale
|
|
29
41
|
requestIdRef.current += 1;
|
|
30
42
|
const currentRequestId = requestIdRef.current;
|
|
31
43
|
setIsSearching(true);
|
|
32
|
-
|
|
44
|
+
searchFnRef
|
|
45
|
+
.current(lastPayload, page, pageSize)
|
|
33
46
|
.then((r) => {
|
|
34
47
|
// Only update state if this is still the current request
|
|
35
48
|
if (currentRequestId !== requestIdRef.current) {
|
|
@@ -59,7 +72,7 @@ export function useScrollableSearch(opts, dependencies = []) {
|
|
|
59
72
|
setIsSearching(false);
|
|
60
73
|
}
|
|
61
74
|
});
|
|
62
|
-
}, [...dependencies, lastPayload,
|
|
75
|
+
}, [...dependencies, lastPayload, refreshTick, page, pageSize]);
|
|
63
76
|
// Intersection observer for infinite scrolling
|
|
64
77
|
useIntersectionObserver(opts.nextPageTrigger, () => {
|
|
65
78
|
if (!isSearching && nextPage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollableSearch.js","sourceRoot":"","sources":["../../../src/core/hooks/useScrollableSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AA4FpE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAC/B,IAAuD,EACvD,eAA0B,EAAE;IAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAW,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useScrollableSearch.js","sourceRoot":"","sources":["../../../src/core/hooks/useScrollableSearch.tsx"],"names":[],"mappings":"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"}
|
package/lib/env/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface EnvProps {
|
|
|
13
13
|
sts: string;
|
|
14
14
|
git?: string;
|
|
15
15
|
mcp?: string;
|
|
16
|
+
/** Appgen app-gateway endpoint (serves live development previews and app bundles). */
|
|
17
|
+
gateway?: string;
|
|
16
18
|
};
|
|
17
19
|
firebase?: {
|
|
18
20
|
apiKey: string;
|
|
@@ -68,6 +70,8 @@ export declare class VertesiaEnvironment implements Readonly<EnvProps> {
|
|
|
68
70
|
sts: string;
|
|
69
71
|
git?: string;
|
|
70
72
|
mcp?: string;
|
|
73
|
+
/** Appgen app-gateway endpoint (serves live development previews and app bundles). */
|
|
74
|
+
gateway?: string;
|
|
71
75
|
};
|
|
72
76
|
get firebase(): {
|
|
73
77
|
apiKey: string;
|
package/lib/env/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IACpE,SAAS,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IACpE,SAAS,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,sFAAsF;QACtF,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAChD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAChD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACjD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;KACpD,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,qBAAa,mBAAoB,YAAW,QAAQ,CAAC,QAAQ,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC;gBAAP,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS;IAEjD,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ;IAKrB,OAAO,CAAC,IAAI;IAOZ,IAAI,OAAO,WAEV;IAED,IAAI,eAAe,uBAElB;IAED,IAAI,UAAU,uBAEb;IAED,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,YAET;IAED,IAAI,KAAK,YAER;IAED,IAAI,UAAU,YAEb;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,SAAS;cA9FH,MAAM;gBACJ,MAAM;aACT,MAAM;cACL,MAAM;cACN,MAAM;QACZ,sFAAsF;kBAC5E,MAAM;MA0FnB;IAED,IAAI,QAAQ;gBAzFA,MAAM;oBACF,MAAM;mBACP,MAAM;gBACT,MAAM;uBACC,MAAM;kBAuFxB;IAED,IAAI,MAAM,uBAET;IAED;;;OAGG;IACH,IAAI,OAAO,YAEV;IAED,IAAI,UAAU,YAEb;IAED,IAAI,WAAW,YAEd;IAED,IAAI,YAAY,uBAEf;IAED,IAAI,iBAAiB,WA9FK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,cAgGpD;IAED,IAAI,MAAM;cAhGA,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI;cACzC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI;eACxC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI;eACzC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI;MA+FnD;IAED;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,gBAAgB;IAI/B;;OAEG;IACH,QAAQ;CAGX;AAED,QAAA,MAAM,GAAG,qBAA4B,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
package/lib/env/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,8DAA8D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,8DAA8D;AAwD9D,MAAM,OAAO,mBAAmB;IACR;IAApB,YAAoB,MAA6B;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAErD,IAAI,CAAC,KAAgB;QACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,IAAI,CAA2B,IAAO;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;IACnC,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACjE,CAAC;IAED,IAAI,KAAK;QACL,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;IAC5C,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,KAAK,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;IACrC,CAAC;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAuB;QAC3B,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -4,7 +4,7 @@ export interface AgentRequestInputOverlayProps {
|
|
|
4
4
|
message?: RequestInputMessageWithUx;
|
|
5
5
|
onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
|
|
6
6
|
/** Called after the user connects the MCP server requested by request_mcp_connection. */
|
|
7
|
-
onMcpConnected?: (cfg: McpConnectUxConfig) => void;
|
|
7
|
+
onMcpConnected?: (cfg: McpConnectUxConfig, metadata?: Record<string, unknown>) => void;
|
|
8
8
|
isLoading?: boolean;
|
|
9
9
|
disabled?: boolean;
|
|
10
10
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentRequestInputOverlay.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/chat/AgentRequestInputOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO3D,OAAO,
|
|
1
|
+
{"version":3,"file":"AgentRequestInputOverlay.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/chat/AgentRequestInputOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO3D,OAAO,EAIH,KAAK,yBAAyB,EAEjC,MAAM,0CAA0C,CAAC;AAElD,MAAM,WAAW,6BAA6B;IAC1C,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9E,yFAAyF;IACzF,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AA0CD,wBAAgB,wBAAwB,CAAC,EACrC,OAAO,EACP,aAAa,EACb,cAAc,EACd,SAAiB,EACjB,QAAgB,EAChB,SAAS,GACZ,EAAE,6BAA6B,sCA8D/B"}
|
|
@@ -5,7 +5,7 @@ import { useUserSession } from '@vertesia/ui/session';
|
|
|
5
5
|
import { XIcon } from 'lucide-react';
|
|
6
6
|
import { RemoteMcpConnectionButton } from '../../oauth/RemoteMcpConnectionButton.js';
|
|
7
7
|
import { AskUserWidget } from './AskUserWidget';
|
|
8
|
-
import { getRequestInputDisplayText, getToolApprovalResponseMetadata, } from './ModernAgentOutput/requestInputMessages';
|
|
8
|
+
import { getRequestInputDisplayText, getRequestInputResponseMetadata, getToolApprovalResponseMetadata, sendRequestInputResponse, } from './ModernAgentOutput/requestInputMessages';
|
|
9
9
|
function McpRequestInputControls({ mcpConnect, onMcpConnected, onDecline, disabled }) {
|
|
10
10
|
const { client } = useUserSession();
|
|
11
11
|
const { t } = useUITranslation();
|
|
@@ -36,16 +36,11 @@ export function AgentRequestInputOverlay({ message, onSendMessage, onMcpConnecte
|
|
|
36
36
|
const send = (value, metadata) => {
|
|
37
37
|
if (isDisabled)
|
|
38
38
|
return;
|
|
39
|
-
|
|
40
|
-
onSendMessage?.(value, metadata);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
onSendMessage?.(value);
|
|
44
|
-
}
|
|
39
|
+
sendRequestInputResponse(onSendMessage, message, value, metadata);
|
|
45
40
|
};
|
|
46
41
|
const wrapperClassName = cn('flex-shrink-0 border-t border-border/70 bg-background/95 backdrop-blur', 'fixed bottom-0 end-0 start-0 z-20 lg:sticky lg:start-auto lg:end-auto', 'pb-safe-area', className);
|
|
47
42
|
if (mcpConnect) {
|
|
48
|
-
return (_jsx("div", { className: wrapperClassName, "data-agent-request-input-overlay": true, children: _jsxs("div", { className: "mx-auto flex w-full max-w-3xl flex-col gap-3 px-3 py-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("div", { className: "min-w-0 text-sm leading-6 text-foreground/85", children: displayText }), _jsx(McpRequestInputControls, { mcpConnect: mcpConnect, onMcpConnected: onMcpConnected, onDecline: () => send(t('agent.mcpDeclinedMessage', { name: mcpConnect.name })), disabled: isDisabled })] }) }));
|
|
43
|
+
return (_jsx("div", { className: wrapperClassName, "data-agent-request-input-overlay": true, children: _jsxs("div", { className: "mx-auto flex w-full max-w-3xl flex-col gap-3 px-3 py-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("div", { className: "min-w-0 text-sm leading-6 text-foreground/85", children: displayText }), _jsx(McpRequestInputControls, { mcpConnect: mcpConnect, onMcpConnected: (cfg) => onMcpConnected?.(cfg, getRequestInputResponseMetadata(message)), onDecline: () => send(t('agent.mcpDeclinedMessage', { name: mcpConnect.name })), disabled: isDisabled })] }) }));
|
|
49
44
|
}
|
|
50
45
|
return (_jsx("div", { className: wrapperClassName, "data-agent-request-input-overlay": true, children: _jsx("div", { className: "mx-auto w-full max-w-3xl px-3 py-3", children: _jsx(AskUserWidget, { question: displayText, options: options, variant: uxConfig.variant, multiSelect: uxConfig.multiSelect, allowFreeResponse: options.length === 0 || !!freeResponse, placeholder: freeResponse?.placeholder, submitLabel: freeResponse?.submit_label, onSelect: (optionId) => send(optionId, getToolApprovalResponseMetadata(message, optionId)), onMultiSelect: (optionIds) => send(optionIds.join(', ')), onSubmit: (value) => send(value, freeResponse?.metadata), hideBorder: true, compact: true, isLoading: isDisabled, className: "my-0", cardClassName: "bg-background/80 shadow-lg shadow-black/5 dark:shadow-none" }) }) }));
|
|
51
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentRequestInputOverlay.js","sourceRoot":"","sources":["../../../../src/features/agent/chat/AgentRequestInputOverlay.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACH,0BAA0B,EAC1B,+BAA+B,
|
|
1
|
+
{"version":3,"file":"AgentRequestInputOverlay.js","sourceRoot":"","sources":["../../../../src/features/agent/chat/AgentRequestInputOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ import type { ToolCallGroupClassNames } from './ModernAgentOutput/ToolCallGroup'
|
|
|
10
10
|
export interface StartWorkflowOptions {
|
|
11
11
|
tool_approval_mode?: AgentToolApprovalMode;
|
|
12
12
|
}
|
|
13
|
+
/** Controls whether a persisted message is included in the rendered conversation transcript. */
|
|
14
|
+
export type AgentMessageFilter = (message: AgentMessage) => boolean;
|
|
13
15
|
export type StartWorkflowFn = (initialMessage?: string, options?: StartWorkflowOptions) => Promise<{
|
|
14
16
|
agent_run_id: string;
|
|
15
17
|
} | undefined>;
|
|
@@ -117,6 +119,11 @@ export interface ModernAgentConversationProps {
|
|
|
117
119
|
hideDocumentPanel?: boolean;
|
|
118
120
|
/** Message types to exclude from the conversation view */
|
|
119
121
|
hiddenMessageTypes?: AgentMessageType[];
|
|
122
|
+
/**
|
|
123
|
+
* Optional presentation-only predicate for transcript messages. Returning false hides the message without
|
|
124
|
+
* changing the underlying conversation stream, workflow state, plans, or pending input.
|
|
125
|
+
*/
|
|
126
|
+
messageFilter?: AgentMessageFilter;
|
|
120
127
|
getAttachedDocs?: () => SelectedDocument[];
|
|
121
128
|
onAttachmentsSent?: () => void;
|
|
122
129
|
isUploading?: boolean;
|
|
@@ -188,7 +195,7 @@ export interface ModernAgentConversationProps {
|
|
|
188
195
|
initialToolApprovalMode?: AgentToolApprovalMode;
|
|
189
196
|
/** Force display playback controls on or off. When omitted, local playback can be toggled from the header. */
|
|
190
197
|
enablePlayback?: boolean;
|
|
191
|
-
/** Show
|
|
198
|
+
/** Show the Debug button for local playback controls. Defaults to true; set to false to hide it. */
|
|
192
199
|
showPlaybackToggle?: boolean;
|
|
193
200
|
}
|
|
194
201
|
export declare function ModernAgentConversation(props: ModernAgentConversationProps): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModernAgentConversation.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/chat/ModernAgentConversation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAE1B,KAAK,gBAAgB,EAKrB,KAAK,IAAI,EAGZ,MAAM,kBAAkB,CAAC;AAiB1B,OAAO,EACH,KAAK,qBAAqB,EAG7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,KAAK,EACR,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EACrC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAE3F,OAAqB,EAEjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"ModernAgentConversation.d.ts","sourceRoot":"","sources":["../../../../src/features/agent/chat/ModernAgentConversation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { Button, cn, insertNewlineAtCursor, MessageBox, Modal, ModalBody, ModalF
|
|
|
5
5
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
6
6
|
import { useUserSession } from '@vertesia/ui/session';
|
|
7
7
|
import { AgentResourceResolverProvider, isArtifactRefreshEvent, } from '@vertesia/ui/widgets';
|
|
8
|
-
import { ArrowUpIcon, Bot, CheckCircle, Cpu, FileTextIcon, UploadIcon, XIcon } from 'lucide-react';
|
|
8
|
+
import { ArrowUpIcon, Bot, CheckCircle, ChevronDown, Cpu, FileTextIcon, UploadIcon, XIcon } from 'lucide-react';
|
|
9
9
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
10
|
import { McpConnectionsActionMenu } from '../../oauth/McpConnectionsButton.js';
|
|
11
11
|
import { AgentApprovalModeSelector } from './AgentApprovalModeSelector';
|
|
@@ -23,7 +23,7 @@ import { ActiveWorkstreamsSummary } from './ModernAgentOutput/ActiveWorkstreamsS
|
|
|
23
23
|
import AllMessagesMixed from './ModernAgentOutput/AllMessagesMixed';
|
|
24
24
|
import Header from './ModernAgentOutput/Header';
|
|
25
25
|
import MessageInput from './ModernAgentOutput/MessageInput';
|
|
26
|
-
import { getPendingRequestInputMessage } from './ModernAgentOutput/requestInputMessages';
|
|
26
|
+
import { clearRequestInputIdAnsweredForSession, getPendingRequestInputMessage, getRequestInputResolutionKey, getRequestInputResponseIdFromMetadata, isRequestInputAnsweredForSession, markRequestInputIdAnsweredForSession, } from './ModernAgentOutput/requestInputMessages';
|
|
27
27
|
import { debugAgentChat, filterMessagesForActiveWorkstream, getConversationUrl, getWorkstreamId, isInProgress, isPassiveArtifactUpdate, } from './ModernAgentOutput/utils';
|
|
28
28
|
import { createPlaybackState, getPlaybackCursorIndex, isAgentChatPlaybackAvailable, isAgentChatPlaybackEnabled, } from './playback';
|
|
29
29
|
import { SkillWidgetProvider } from './SkillWidgetProvider';
|
|
@@ -32,6 +32,7 @@ import { VegaLiteChart } from './VegaLiteChart';
|
|
|
32
32
|
import { ThinkingMessages } from './WaitingMessages';
|
|
33
33
|
import { getWorkstreamDisplayName, getWorkstreamLaunchDetails, getWorkstreamLifecycleStatus, isWorkstreamInternalResultMessage, } from './workstreams.js';
|
|
34
34
|
const EMPTY_STREAMING_MESSAGES = new Map();
|
|
35
|
+
const COLLAPSED_STAGED_FILE_COUNT = 3;
|
|
35
36
|
function getTimestampMs(timestamp) {
|
|
36
37
|
if (typeof timestamp === 'number')
|
|
37
38
|
return timestamp;
|
|
@@ -55,7 +56,12 @@ function toContextWindowUsage(messages) {
|
|
|
55
56
|
if (!details)
|
|
56
57
|
continue;
|
|
57
58
|
const tokenUsage = details.token_usage;
|
|
58
|
-
|
|
59
|
+
// Mirror the server's checkpoint trigger (getContextPressureTokens):
|
|
60
|
+
// the last call's prompt size is the actual context; `total` includes
|
|
61
|
+
// reasoning output that never re-enters context and would overstate
|
|
62
|
+
// pressure on reasoning models. Fall back to total when no breakdown.
|
|
63
|
+
const promptTokens = getNumberDetail(tokenUsage?.prompt);
|
|
64
|
+
const usedTokens = promptTokens && promptTokens > 0 ? promptTokens : getNumberDetail(tokenUsage?.total);
|
|
59
65
|
const checkpointTokens = getNumberDetail(details.checkpoint_threshold) ?? getNumberDetail(details.checkpoint_at);
|
|
60
66
|
if (typeof usedTokens !== 'number' || typeof checkpointTokens !== 'number' || checkpointTokens <= 0) {
|
|
61
67
|
continue;
|
|
@@ -397,6 +403,9 @@ acceptedFileTypes, maxFiles = 5, hideHeader = false, hideFileUpload = false, hid
|
|
|
397
403
|
const fileInputRef = useRef(null);
|
|
398
404
|
// Staged files - stored locally until workflow starts
|
|
399
405
|
const [stagedFiles, setStagedFiles] = useState([]);
|
|
406
|
+
const [areStagedFilesExpanded, setAreStagedFilesExpanded] = useState(false);
|
|
407
|
+
const visibleStagedFiles = areStagedFilesExpanded ? stagedFiles : stagedFiles.slice(0, COLLAPSED_STAGED_FILE_COUNT);
|
|
408
|
+
const hiddenStagedFileCount = stagedFiles.length - COLLAPSED_STAGED_FILE_COUNT;
|
|
400
409
|
useEffect(() => {
|
|
401
410
|
onAgentWorkingChange?.(isSending);
|
|
402
411
|
}, [isSending, onAgentWorkingChange]);
|
|
@@ -470,6 +479,11 @@ acceptedFileTypes, maxFiles = 5, hideHeader = false, hideFileUpload = false, hid
|
|
|
470
479
|
const removeStagedFile = useCallback((index) => {
|
|
471
480
|
setStagedFiles((prev) => prev.filter((_, i) => i !== index));
|
|
472
481
|
}, []);
|
|
482
|
+
useEffect(() => {
|
|
483
|
+
if (stagedFiles.length <= COLLAPSED_STAGED_FILE_COUNT) {
|
|
484
|
+
setAreStagedFilesExpanded(false);
|
|
485
|
+
}
|
|
486
|
+
}, [stagedFiles.length]);
|
|
473
487
|
useEffect(() => {
|
|
474
488
|
// Focus the input field when component mounts
|
|
475
489
|
if (inputRef.current) {
|
|
@@ -632,7 +646,7 @@ acceptedFileTypes, maxFiles = 5, hideHeader = false, hideFileUpload = false, hid
|
|
|
632
646
|
allowWorkflowControl,
|
|
633
647
|
onAgentWorkingChange, agentRunId: startedAgentRunId, title: title, pendingStartMessage: pendingStartMessage ?? undefined, pendingStartTimestamp: pendingStartTimestamp ?? undefined, initialToolApprovalMode: toolApprovalMode }));
|
|
634
648
|
}
|
|
635
|
-
return (_jsx("div", { className: cn('flex flex-col items-center bg-background', isCompactStartView && !isExpandedStartComposer ? '' : 'h-full', className), children: _jsxs("div", { className: cn('relative flex w-full flex-col overflow-hidden border-0', isCompactStartView && !isExpandedStartComposer ? '' : 'h-full', fullWidth ? '' : 'max-w-4xl'), onDragEnter: canStageFiles ? handleDragEnter : undefined, onDragOver: canStageFiles ? handleDragOver : undefined, onDragLeave: canStageFiles ? handleDragLeave : undefined, onDrop: canStageFiles ? handleDrop : undefined, children: [canStageFiles && isDragOver && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-info-background z-50 pointer-events-none rounded-lg", children: _jsxs("div", { className: "text-info font-medium flex items-center gap-2 text-lg", children: [_jsx(UploadIcon, { className: "size-6" }), "Drop files to stage for upload"] }) })), canStageFiles && (_jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: acceptedFileTypes, onChange: handleFileInputChange, className: "hidden" })), !hideHeader && (_jsxs("div", { className: "flex items-center justify-between border-b border-border/60 bg-background px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "p-1", children: _jsx(Cpu, { className: "size-3.5 text-muted" }) }), _jsx("span", { className: "text-sm font-medium text-foreground", children: resolvedTitle })] }), onClose && !isModal && (_jsx(Button, { size: "xs", variant: "ghost", onClick: onClose, title: t('agent.close'), className: "text-muted hover:text-foreground", children: _jsx(XIcon, { className: "size-4" }) }))] })), _jsx("div", { className: cn('flex flex-col items-center justify-end bg-background px-4', isCompactStartView ? 'shrink-0 pt-3' : 'flex-1 overflow-y-auto'), children: pendingStartMessage && pendingStartTimestamp ? (_jsx(PendingStartConversation, { message: pendingStartMessage, startedAt: pendingStartTimestamp })) : (_jsx("div", { className: cn('mx-auto flex w-full max-w-3xl flex-col justify-end', isCompactStartView ? '' : 'min-h-full py-8'), children: initialMessage && (_jsx("div", { className: "text-[15px] leading-relaxed text-foreground/80", children: initialMessage })) })) }), _jsx("div", { className: cn('bg-background px-4 pb-safe-area-4 pt-2', isExpandedStartComposer ? 'flex min-h-0 flex-1 flex-col' : 'shrink-0'), children: _jsxs("div", { className: cn('mx-auto flex max-w-3xl flex-col gap-3 rounded-2xl border border-border/70 bg-mixer-muted/15 p-3 shadow-lg shadow-black/5', isExpandedStartComposer && 'min-h-0 w-full flex-1', inputContainerClassName), children: [canStageFiles && stagedFiles.length > 0 && (
|
|
649
|
+
return (_jsx("div", { className: cn('flex flex-col items-center bg-background', isCompactStartView && !isExpandedStartComposer ? '' : 'h-full', className), children: _jsxs("div", { className: cn('relative flex w-full flex-col overflow-hidden border-0', isCompactStartView && !isExpandedStartComposer ? '' : 'h-full', fullWidth ? '' : 'max-w-4xl'), onDragEnter: canStageFiles ? handleDragEnter : undefined, onDragOver: canStageFiles ? handleDragOver : undefined, onDragLeave: canStageFiles ? handleDragLeave : undefined, onDrop: canStageFiles ? handleDrop : undefined, children: [canStageFiles && isDragOver && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-info-background z-50 pointer-events-none rounded-lg", children: _jsxs("div", { className: "text-info font-medium flex items-center gap-2 text-lg", children: [_jsx(UploadIcon, { className: "size-6" }), "Drop files to stage for upload"] }) })), canStageFiles && (_jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: acceptedFileTypes, onChange: handleFileInputChange, className: "hidden" })), !hideHeader && (_jsxs("div", { className: "flex items-center justify-between border-b border-border/60 bg-background px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "p-1", children: _jsx(Cpu, { className: "size-3.5 text-muted" }) }), _jsx("span", { className: "text-sm font-medium text-foreground", children: resolvedTitle })] }), onClose && !isModal && (_jsx(Button, { size: "xs", variant: "ghost", onClick: onClose, title: t('agent.close'), className: "text-muted hover:text-foreground", children: _jsx(XIcon, { className: "size-4" }) }))] })), _jsx("div", { className: cn('flex flex-col items-center justify-end bg-background px-4', isCompactStartView ? 'shrink-0 pt-3' : 'flex-1 overflow-y-auto'), children: pendingStartMessage && pendingStartTimestamp ? (_jsx(PendingStartConversation, { message: pendingStartMessage, startedAt: pendingStartTimestamp })) : (_jsx("div", { className: cn('mx-auto flex w-full max-w-3xl flex-col justify-end', isCompactStartView ? '' : 'min-h-full py-8'), children: initialMessage && (_jsx("div", { className: "text-[15px] leading-relaxed text-foreground/80", children: initialMessage })) })) }), _jsx("div", { className: cn('bg-background px-4 pb-safe-area-4 pt-2', isExpandedStartComposer ? 'flex min-h-0 flex-1 flex-col' : 'shrink-0'), children: _jsxs("div", { className: cn('mx-auto flex max-w-3xl flex-col gap-3 rounded-2xl border border-border/70 bg-mixer-muted/15 p-3 shadow-lg shadow-black/5', isExpandedStartComposer && 'min-h-0 w-full flex-1', inputContainerClassName), children: [canStageFiles && stagedFiles.length > 0 && (_jsxs("div", { className: "flex flex-wrap gap-2", children: [visibleStagedFiles.map((file, index) => (_jsxs("div", { className: "flex items-center gap-1.5 rounded-md bg-attention/10 px-2 py-1 text-sm text-attention", title: t('agent.fileStagedTooltip'), children: [_jsx(FileTextIcon, { className: "size-3.5" }), _jsx("span", { className: "max-w-[120px] truncate", children: file.name }), _jsx("span", { className: "text-xs opacity-70", children: t('agent.staged') }), _jsx(Button, { variant: "unstyled", "aria-label": `Remove staged file ${file.name}`, onClick: () => removeStagedFile(index), className: "ms-1 rounded p-0.5 hover:bg-attention/20", children: _jsx(XIcon, { className: "size-3" }) })] }, `${file.name}-${file.size}-${file.lastModified}`))), stagedFiles.length > COLLAPSED_STAGED_FILE_COUNT && (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", "aria-expanded": areStagedFilesExpanded, onClick: () => setAreStagedFilesExpanded((expanded) => !expanded), className: "h-8 shrink-0 gap-1 rounded-xl px-2.5 text-xs text-muted", children: [!areStagedFilesExpanded && _jsxs("span", { children: ["+", hiddenStagedFileCount] }), areStagedFilesExpanded ? t('agent.showLess') : t('agent.showMore'), _jsx(ChevronDown, { className: cn('size-3.5 transition-transform', areStagedFilesExpanded && 'rotate-180'), "aria-hidden": "true" })] }))] })), _jsx(Textarea, { ref: inputRef, value: inputValue, onChange: (e) => setInputValue(e.target.value), onKeyDown: handleKeyDown, onPaste: handlePaste, placeholder: resolvedPlaceholder, disabled: isSending, rows: 2, className: cn('min-h-[72px] resize-none overflow-hidden border-0 bg-transparent px-0 py-0 text-sm leading-6 shadow-none focus-visible:ring-0', isExpandedStartComposer && 'min-h-0 flex-1', inputClassName), style: isExpandedStartComposer
|
|
636
650
|
? { minHeight: '72px', maxHeight: 'none' }
|
|
637
651
|
: { minHeight: '72px', maxHeight: '200px' } }), _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [canStageFiles && (_jsx(Button, { variant: "ghost", size: "icon", onClick: () => fileInputRef.current?.click(), disabled: isSending || stagedFiles.length >= maxFiles, "aria-label": t('agent.upload'), className: "rounded-full text-muted", title: t('agent.upload'), children: _jsx(UploadIcon, { className: "size-4" }) })), interactive && (_jsx(AgentApprovalModeSelector, { mode: toolApprovalMode, onChange: setToolApprovalMode, disabled: isSending }))] }), _jsx(Button, { onClick: startWorkflowWithMessage, disabled: !inputValue.trim() || isSending, variant: "ghost", size: "icon", className: cn('size-9 rounded-full border border-border/60 bg-foreground text-background shadow-sm', 'hover:bg-foreground/90 hover:text-background', 'disabled:bg-mixer-muted/25 disabled:text-muted disabled:opacity-100'), title: resolvedStartButtonText, children: isSending ? _jsx(Spinner, { size: "sm" }) : _jsx(ArrowUpIcon, { className: "size-4" }) })] })] }) })] }) }));
|
|
638
652
|
}
|
|
@@ -673,7 +687,7 @@ streamingMessageClassNames,
|
|
|
673
687
|
// BatchProgressPanel className overrides
|
|
674
688
|
batchProgressPanelClassNames,
|
|
675
689
|
// AllMessagesMixed className overrides
|
|
676
|
-
workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionLinkComponent, prependFriendlyMessage, initialRequestData, initialRequestSchema, initialRequestTitle, initialRequestTemplate, payloadContent, conversationContent, conversationTab = false, pendingStartMessage, pendingStartTimestamp, initialToolApprovalMode, enablePlayback, showPlaybackToggle = true, }) {
|
|
690
|
+
workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionLinkComponent, prependFriendlyMessage, initialRequestData, initialRequestSchema, initialRequestTitle, initialRequestTemplate, payloadContent, conversationContent, conversationTab = false, pendingStartMessage, pendingStartTimestamp, initialToolApprovalMode, enablePlayback, showPlaybackToggle = true, messageFilter, }) {
|
|
677
691
|
const { t } = useUITranslation();
|
|
678
692
|
const { client } = useUserSession();
|
|
679
693
|
const toast = useToast();
|
|
@@ -825,16 +839,20 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
825
839
|
}, [activeWorkstreamDisplayName, placeholder, t]);
|
|
826
840
|
const canShowPlaybackToggle = showPlaybackToggle && enablePlayback === undefined && isAgentChatPlaybackAvailable();
|
|
827
841
|
const isPlaybackEnabled = enablePlayback ?? (isAgentChatPlaybackEnabled() || isPlaybackToggleEnabled);
|
|
828
|
-
const
|
|
842
|
+
const transcriptSourceMessages = useMemo(() => {
|
|
829
843
|
// Passive artifact autosaves are surfaced by the editor's own save indicator, not the chat.
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
844
|
+
return messages.filter((message) => !isPassiveArtifactUpdate(message) && !(hiddenMessageTypes?.includes(message.type) ?? false));
|
|
845
|
+
}, [hiddenMessageTypes, messages]);
|
|
846
|
+
const playbackSourceMessages = useMemo(() => filterMessagesForActiveWorkstream(transcriptSourceMessages, activeWorkstream), [activeWorkstream, transcriptSourceMessages]);
|
|
833
847
|
const playbackState = useMemo(() => createPlaybackState(playbackSourceMessages, playbackCursor, isPlaybackEnabled), [isPlaybackEnabled, playbackCursor, playbackSourceMessages]);
|
|
834
848
|
const clampedPlaybackCursor = playbackState.cursor;
|
|
835
849
|
const isPlaybackLive = playbackState.isLive;
|
|
836
850
|
const isPlaybackAtLatest = isPlaybackEnabled && !isPlaybackLive && playbackState.cursorIndex === playbackSourceMessages.length - 1;
|
|
837
851
|
const displayedMessages = playbackState.displayedMessages;
|
|
852
|
+
const renderedMessages = useMemo(() => (messageFilter ? displayedMessages.filter((message) => messageFilter(message)) : displayedMessages), [displayedMessages, messageFilter]);
|
|
853
|
+
const renderedWorkstreamSourceMessages = useMemo(() => messageFilter
|
|
854
|
+
? transcriptSourceMessages.filter((message) => messageFilter(message))
|
|
855
|
+
: transcriptSourceMessages, [messageFilter, transcriptSourceMessages]);
|
|
838
856
|
const displayedStreamingMessages = isPlaybackLive ? streamingMessages : EMPTY_STREAMING_MESSAGES;
|
|
839
857
|
const playbackDerivedWorkstreams = useMemo(() => deriveWorkstreamsFromMessages(displayedMessages), [displayedMessages]);
|
|
840
858
|
const playbackActiveWorkstreams = useMemo(() => playbackDerivedWorkstreams.filter((ws) => isActiveWorkstreamStatus(ws.status)), [playbackDerivedWorkstreams]);
|
|
@@ -844,7 +862,15 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
844
862
|
useEffect(() => {
|
|
845
863
|
onAgentWorkingChange?.(isAgentWorking);
|
|
846
864
|
}, [isAgentWorking, onAgentWorkingChange]);
|
|
847
|
-
const pendingRequestInputMessage = useMemo(() =>
|
|
865
|
+
const pendingRequestInputMessage = useMemo(() => {
|
|
866
|
+
const answeredRequestInputKeys = new Set();
|
|
867
|
+
for (const message of displayedMessages) {
|
|
868
|
+
if (isRequestInputAnsweredForSession(agentRunId, message)) {
|
|
869
|
+
answeredRequestInputKeys.add(getRequestInputResolutionKey(message));
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
return getPendingRequestInputMessage(displayedMessages, 'main', answeredRequestInputKeys);
|
|
873
|
+
}, [agentRunId, displayedMessages]);
|
|
848
874
|
// A terminal run silently drops user input unless it can be continued (see the guard in
|
|
849
875
|
// handleSendMessage), so never surface an actionable question overlay in that state —
|
|
850
876
|
// the terminal status box renders instead.
|
|
@@ -860,7 +886,7 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
860
886
|
agentRunId,
|
|
861
887
|
messageCount: messages.length,
|
|
862
888
|
playbackMessageCount: playbackSourceMessages.length,
|
|
863
|
-
displayedMessageCount:
|
|
889
|
+
displayedMessageCount: renderedMessages.length,
|
|
864
890
|
streamingCount: streamingMessages.size,
|
|
865
891
|
displayedStreamingCount: displayedStreamingMessages.size,
|
|
866
892
|
initialHistoryStatus,
|
|
@@ -884,7 +910,7 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
884
910
|
agentRunStatus,
|
|
885
911
|
clampedPlaybackCursor,
|
|
886
912
|
displayedIsCompleted,
|
|
887
|
-
|
|
913
|
+
renderedMessages.length,
|
|
888
914
|
displayedStreamingMessages.size,
|
|
889
915
|
effectiveIsCompleted,
|
|
890
916
|
effectiveWorkflowStatus,
|
|
@@ -1209,6 +1235,7 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1209
1235
|
});
|
|
1210
1236
|
return;
|
|
1211
1237
|
}
|
|
1238
|
+
const requestInputId = getRequestInputResponseIdFromMetadata(inputMetadata);
|
|
1212
1239
|
setIsSending(true);
|
|
1213
1240
|
const attachedDocs = getAttachedDocs?.() || [];
|
|
1214
1241
|
const contextMetadata = getMessageContext?.() || {};
|
|
@@ -1246,6 +1273,9 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1246
1273
|
_messageId: messageId,
|
|
1247
1274
|
_deliveryStatus: 'sending',
|
|
1248
1275
|
...(inputMetadata?.editing_action ? { editing_action: inputMetadata.editing_action } : {}),
|
|
1276
|
+
...(inputMetadata?.request_input_response
|
|
1277
|
+
? { request_input_response: inputMetadata.request_input_response }
|
|
1278
|
+
: {}),
|
|
1249
1279
|
},
|
|
1250
1280
|
};
|
|
1251
1281
|
addOptimisticMessage(optimisticMessage);
|
|
@@ -1271,6 +1301,9 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1271
1301
|
// buffers the signal until the new run is ready to receive it. We reconnect
|
|
1272
1302
|
// the stream in place (rather than remounting via onRestart) so the existing
|
|
1273
1303
|
// timeline is preserved and the new exchange appends seamlessly at the bottom.
|
|
1304
|
+
if (requestInputId) {
|
|
1305
|
+
markRequestInputIdAnsweredForSession(agentRunId, requestInputId);
|
|
1306
|
+
}
|
|
1274
1307
|
const deliver = (async () => {
|
|
1275
1308
|
await waitForPendingToolApprovalModeChange();
|
|
1276
1309
|
if (isWorkflowTerminalRef.current) {
|
|
@@ -1282,6 +1315,9 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1282
1315
|
})();
|
|
1283
1316
|
deliver
|
|
1284
1317
|
.catch((err) => {
|
|
1318
|
+
if (requestInputId) {
|
|
1319
|
+
clearRequestInputIdAnsweredForSession(agentRunId, requestInputId);
|
|
1320
|
+
}
|
|
1285
1321
|
updateOptimisticMessageStatus(messageId, 'failed');
|
|
1286
1322
|
toast({
|
|
1287
1323
|
status: 'error',
|
|
@@ -1318,7 +1354,7 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1318
1354
|
// After the user connects an MCP server requested via request_mcp_connection, flag the
|
|
1319
1355
|
// conversation for tool re-discovery and resume it with a confirmation message so the agent
|
|
1320
1356
|
// continues automatically with the newly-available tools.
|
|
1321
|
-
const handleMcpConnected = useCallback(async (cfg) => {
|
|
1357
|
+
const handleMcpConnected = useCallback(async (cfg, metadata) => {
|
|
1322
1358
|
// Await the dirty-flag signal BEFORE sending the follow-up message so Temporal records
|
|
1323
1359
|
// McpConfigChanged ahead of the UserInput. Otherwise the resume turn could run before
|
|
1324
1360
|
// the flag is set and use the stale tool catalog. An omitted disabled list preserves
|
|
@@ -1329,7 +1365,7 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1329
1365
|
catch (err) {
|
|
1330
1366
|
console.error('Failed to signal MCP config change', err);
|
|
1331
1367
|
}
|
|
1332
|
-
handleSendMessage(t('agent.mcpConnectedMessage', { name: cfg.name }));
|
|
1368
|
+
handleSendMessage(t('agent.mcpConnectedMessage', { name: cfg.name }), metadata);
|
|
1333
1369
|
}, [client, agentRunId, handleSendMessage, t]);
|
|
1334
1370
|
// Per-conversation MCP deactivation set, seeded from the run and updated live via the
|
|
1335
1371
|
// MCP action menu in the composer toolbar. Changes are pushed to the running workflow
|
|
@@ -1636,19 +1672,19 @@ workingIndicatorClassName, messageListClassName, StoreLinkComponent, CollectionL
|
|
|
1636
1672
|
}, new Map()), [getActivePlan.plan]);
|
|
1637
1673
|
const renderConversationHeader = (variant) => (_jsx(Header, { title: actualTitle, variant: variant, isCompleted: effectiveIsCompleted, isTerminal: isWorkflowTerminal, onClose: onClose, isModal: isModal, agentRunId: agentRunId, workflowRunId: workflowRunId || '', viewMode: viewMode, onViewModeChange: handleViewModeChange, showPlanPanel: isRightPanelVisible, hasPlan: showRightPanelProp && plans.length > 0, showPlanButton: showRightPanelProp && !conversationTab, onTogglePlanPanel: handleTogglePlanPanel, showPlaybackButton: canShowPlaybackToggle, isPlaybackEnabled: isPlaybackEnabled, onTogglePlayback: handleTogglePlayback, onDownload: downloadConversation, onExportFixture: exportReplayFixture, resetWorkflow: resetWorkflow, onClone: onClone, onShowDetails: onShowDetails, allowWorkflowControl: allowWorkflowControl, onExportPdf: exportConversationPdf, isReceivingChunks: debugChunkFlash }));
|
|
1638
1674
|
// Conversation area inner content — shared between main layout and conversationTab mode
|
|
1639
|
-
const conversationAreaJsx = (_jsxs("div", { ref: conversationRef, "data-agent-playback-enabled": isPlaybackEnabled || undefined, "data-agent-playback-cursor": isPlaybackEnabled ? clampedPlaybackCursor : undefined, "data-agent-live-message-count": messages.length, "data-agent-rendered-message-count":
|
|
1675
|
+
const conversationAreaJsx = (_jsxs("div", { ref: conversationRef, "data-agent-playback-enabled": isPlaybackEnabled || undefined, "data-agent-playback-cursor": isPlaybackEnabled ? clampedPlaybackCursor : undefined, "data-agent-live-message-count": messages.length, "data-agent-rendered-message-count": renderedMessages.length, className: cn('flex flex-col min-h-0 min-w-0 border-0', conversationTab
|
|
1640
1676
|
? 'flex-1 h-full'
|
|
1641
1677
|
: isRightPanelVisible
|
|
1642
1678
|
? 'w-full flex-1 min-h-[50vh]'
|
|
1643
1679
|
: fullWidth
|
|
1644
1680
|
? 'flex-1 w-full'
|
|
1645
|
-
: `flex-1 mx-auto ${!isModal ? 'max-w-4xl' : ''}`), children: [!hideHeader && headerVariant === 'compact' && (_jsx("div", { className: "flex flex-shrink-0 justify-end border-b border-border/60 px-2 py-1 lg:hidden", children: renderConversationHeader('compact') })), !hideHeader && headerVariant !== 'compact' && (_jsx("div", { className: "flex-shrink-0", children: renderConversationHeader(headerVariant) })), isPlaybackEnabled && (_jsx("div", { className: "flex flex-shrink-0 justify-end px-2 py-1.5", children: _jsx(AgentChatPlaybackControls, { cursor: clampedPlaybackCursor, messages: playbackSourceMessages, onChangeCursor: handleChangePlaybackCursor }) })), messages.length === 0 && !effectiveIsCompleted && pendingStartMessage && pendingStartTimestamp ? (_jsx(PendingStartConversation, { message: pendingStartMessage, startedAt: pendingStartTimestamp })) : (_jsx(AllMessagesMixed, { messages:
|
|
1681
|
+
: `flex-1 mx-auto ${!isModal ? 'max-w-4xl' : ''}`), children: [!hideHeader && headerVariant === 'compact' && (_jsx("div", { className: "flex flex-shrink-0 justify-end border-b border-border/60 px-2 py-1 lg:hidden", children: renderConversationHeader('compact') })), !hideHeader && headerVariant !== 'compact' && (_jsx("div", { className: "flex-shrink-0", children: renderConversationHeader(headerVariant) })), isPlaybackEnabled && (_jsx("div", { className: "flex flex-shrink-0 justify-end px-2 py-1.5", children: _jsx(AgentChatPlaybackControls, { cursor: clampedPlaybackCursor, messages: playbackSourceMessages, onChangeCursor: handleChangePlaybackCursor }) })), messages.length === 0 && !effectiveIsCompleted && pendingStartMessage && pendingStartTimestamp ? (_jsx(PendingStartConversation, { message: pendingStartMessage, startedAt: pendingStartTimestamp })) : (_jsx(AllMessagesMixed, { messages: renderedMessages, workstreamSourceMessages: renderedWorkstreamSourceMessages, bottomRef: bottomRef, isCompleted: displayedIsCompleted, plan: getActivePlan.plan, workstreamStatus: getActivePlan.workstreamStatus, showPlanPanel: showRightPanelProp && showSlidingPanel, onTogglePlanPanel: handleTogglePlanPanel, plans: plans, activePlanIndex: activePlanIndex, onChangePlan: handleChangePlan, taskLabels: taskLabels, streamingMessages: displayedStreamingMessages, onSendMessage: isPlaybackLive ? handleSendMessage : undefined, onOpenArtifact: showArtifacts ? handleOpenArtifact : undefined, messageItemClassNames: messageItemClassNames, messageStyleOverrides: messageStyleOverrides, toolCallGroupClassNames: toolCallGroupClassNames, hideToolCallsInViewMode: hideToolCallsInViewMode, streamingMessageClassNames: streamingMessageClassNames, batchProgressPanelClassNames: batchProgressPanelClassNames, artifactRunId: agentRunId, viewMode: viewMode, hideWorkstreamTabs: hideWorkstreamTabs, workingIndicatorClassName: workingIndicatorClassName, messageListClassName: messageListClassName, StoreLinkComponent: effectiveStoreLinkComponent, CollectionLinkComponent: CollectionLinkComponent, prependFriendlyMessage: prependFriendlyMessage, initialRequestData: initialRequestData, initialRequestSchema: initialRequestSchema, initialRequestTitle: initialRequestTitle, initialRequestTemplate: initialRequestTemplate, showInitialRequest: initialHistoryStatus === 'empty' && messages.length === 0, hiddenMessageTypes: hiddenMessageTypes, disableAutoScroll: !isPlaybackLive, renderRequestInputControls: !shouldShowRequestInputOverlay, activeWorkstream: activeWorkstream, onActiveWorkstreamChange: setActiveWorkstream })), shouldShowRequestInputOverlay ? (_jsx(AgentRequestInputOverlay, { message: pendingRequestInputMessage, onSendMessage: isPlaybackLive ? handleSendMessage : undefined, onMcpConnected: isPlaybackLive ? handleMcpConnected : undefined, disabled: isUploading || !isPlaybackLive, isLoading: isSending || isUploading })) : isViewingPlaybackHistory && playbackActiveWorkstreams.length > 0 ? (_jsx("div", { className: "flex-shrink-0 pb-safe-area", children: _jsx(ActiveWorkstreamsSummary, { activeWorkstreams: playbackActiveWorkstreams, onSelectWorkstream: setActiveWorkstream }) })) : (shouldRenderLiveMessageInputArea && (_jsx("div", { className: "flex-shrink-0 pb-safe-area", children: isFailed ? (
|
|
1646
1682
|
// FAILED takes priority over every other branch so the composer can
|
|
1647
1683
|
// never render for a failed run. Use the caller's action when provided,
|
|
1648
1684
|
// otherwise fall back to the default failed message box.
|
|
1649
1685
|
(failedAction ?? (_jsx(MessageBox, { status: "error", icon: null, className: "m-2", children: "This Workflow is FAILED" })))) : effectiveWorkflowStatus &&
|
|
1650
1686
|
effectiveWorkflowStatus !== 'RUNNING' &&
|
|
1651
|
-
!canContinueConversation ? (viewMode === 'sliding' && effectiveWorkflowStatus === 'COMPLETED' ? (_jsx("div", { className: "mx-auto w-full max-w-3xl px-4 py-3 text-sm text-muted", children: _jsxs("div", { className: "flex items-center gap-2 border-t border-success/25 pt-3 text-success", children: [_jsx(CheckCircle, { className: "size-4" }), _jsx("span", { className: "font-medium", children: "Workflow completed" })] }) })) : (_jsxs(MessageBox, { status: effectiveWorkflowStatus === 'COMPLETED' ? 'success' : 'done', icon: null, className: "m-2", children: ["This Workflow is ", effectiveWorkflowStatus] }))) : ((showInput || canContinueConversation) && (_jsxs(_Fragment, { children: [composerContext, _jsx(MessageInput, { onSend: handleSendMessage, onStop: allowWorkflowControl ? handleStopWorkflow : undefined, approvalModeSlot: interactive && toolApprovalMode ? (_jsx(AgentApprovalModeSelector, { mode: toolApprovalMode, onChange: handleToolApprovalModeChange, disabled: !isPlaybackLive || isWorkflowTerminal || !allowWorkflowControl })) : undefined, mcpSlot: _jsx(McpConnectionsActionMenu, { disabledCollections: mcpDisabled, onChange: handleMcpDisabledChange, onConnectionChange: handleMcpConnectionChange }), disabled: isUploading || !isPlaybackLive, isSending: isSending || isUploading, isStopping: isStopping, isStreaming: !effectiveIsCompleted, isCompleted: effectiveIsCompleted, contextWindowUsage: canCompactContext ? contextWindowUsage : undefined, onCompactContext: canCompactContext ? handleCompactContext : undefined, isCompactingContext: isCompactingContext, activeTaskCount: activeTaskCount, activeWorkstreams: composerActiveWorkstreams, placeholder: composerPlaceholder, onFilesSelected: canUploadFiles ? handleFileUpload : undefined, uploadedFiles: uploadedFiles, onRemoveFile: onRemoveFile, onRemoveProcessingFile: handleRemoveProcessingFile, acceptedFileTypes: acceptedFileTypes, maxFiles: maxFiles, processingFiles: processingFiles, artifactRunId: agentRunId, hasProcessingFiles: hasProcessingFiles, renderDocumentSearch: renderDocumentSearch, selectedDocuments: selectedDocuments, onRemoveDocument: onRemoveDocument, hideObjectLinking: hideObjectLinking, hideFileUpload: !canUploadFiles, disableDropZone: canUploadFiles, className: inputContainerClassName, inputClassName: inputClassName })] }))) })))] }));
|
|
1687
|
+
!canContinueConversation ? (viewMode === 'sliding' && effectiveWorkflowStatus === 'COMPLETED' ? (_jsx("div", { className: "mx-auto w-full max-w-3xl px-4 py-3 text-sm text-muted", children: _jsxs("div", { className: "flex items-center gap-2 border-t border-success/25 pt-3 text-success", children: [_jsx(CheckCircle, { className: "size-4" }), _jsx("span", { className: "font-medium", children: "Workflow completed" })] }) })) : (_jsxs(MessageBox, { status: effectiveWorkflowStatus === 'COMPLETED' ? 'success' : 'done', icon: null, className: "m-2", children: ["This Workflow is ", effectiveWorkflowStatus] }))) : ((showInput || canContinueConversation) && (_jsxs(_Fragment, { children: [composerContext, _jsx(MessageInput, { onSend: handleSendMessage, onStop: allowWorkflowControl ? handleStopWorkflow : undefined, approvalModeSlot: interactive && toolApprovalMode ? (_jsx(AgentApprovalModeSelector, { mode: toolApprovalMode, onChange: handleToolApprovalModeChange, disabled: !isPlaybackLive || isWorkflowTerminal || !allowWorkflowControl })) : undefined, mcpSlot: _jsx(McpConnectionsActionMenu, { disabledCollections: mcpDisabled, onChange: handleMcpDisabledChange, onConnectionChange: handleMcpConnectionChange }), disabled: isUploading || !isPlaybackLive, isSending: isSending || isUploading, isStopping: isStopping, isStreaming: !effectiveIsCompleted, isCompleted: effectiveIsCompleted, contextWindowUsage: canCompactContext ? contextWindowUsage : undefined, onCompactContext: canCompactContext ? handleCompactContext : undefined, isCompactingContext: isCompactingContext, activeTaskCount: activeTaskCount, activeWorkstreams: composerActiveWorkstreams, onSelectWorkstream: setActiveWorkstream, placeholder: composerPlaceholder, onFilesSelected: canUploadFiles ? handleFileUpload : undefined, uploadedFiles: uploadedFiles, onRemoveFile: onRemoveFile, onRemoveProcessingFile: handleRemoveProcessingFile, acceptedFileTypes: acceptedFileTypes, maxFiles: maxFiles, processingFiles: processingFiles, artifactRunId: agentRunId, hasProcessingFiles: hasProcessingFiles, renderDocumentSearch: renderDocumentSearch, selectedDocuments: selectedDocuments, onRemoveDocument: onRemoveDocument, hideObjectLinking: hideObjectLinking, hideFileUpload: !canUploadFiles, disableDropZone: canUploadFiles, className: inputContainerClassName, inputClassName: inputClassName })] }))) })))] }));
|
|
1652
1688
|
// Main content - wrapped with FusionFragmentProvider when fusionData is provided
|
|
1653
1689
|
const mainContent = (_jsx(ArtifactUrlCacheProvider, { children: _jsx(ImageLightboxProvider, { children: _jsxs("div", { ref: conversationLayoutRef, className: cn('flex flex-col lg:flex-row gap-2 w-full h-full relative overflow-hidden', canUploadFiles && isDragOver && 'ring-2 ring-blue-400 ring-inset', className), onDragEnter: canUploadFiles ? handleDragEnter : undefined, onDragOver: canUploadFiles ? handleDragOver : undefined, onDragLeave: canUploadFiles ? handleDragLeave : undefined, onDrop: canUploadFiles ? handleDrop : undefined, children: [canUploadFiles && isDragOver && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-blue-100/80 dark:bg-blue-900/40 z-50 pointer-events-none rounded-lg", children: _jsxs("div", { className: "text-blue-600 dark:text-blue-400 font-medium flex items-center gap-2 text-lg", children: [_jsx(UploadIcon, { className: "size-6" }), "Drop files to upload"] }) })), !conversationTab && conversationAreaJsx, !conversationTab && headerVariant === 'compact' && !hideHeader && (_jsx("div", { className: "hidden h-full w-12 shrink-0 items-start justify-center px-1 pt-2 lg:flex", children: renderConversationHeader('compact') })), isRightPanelVisible && (_jsxs(_Fragment, { children: [!conversationTab && (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Resize right panel", "aria-valuenow": Math.round(rightPanelWidth), "aria-valuemin": 300, "aria-valuetext": `${Math.round(rightPanelWidth)} pixels`, tabIndex: 0, className: "hidden lg:block lg:w-1 lg:shrink-0 cursor-col-resize bg-border/70 hover:bg-border transition-colors", onMouseDown: () => setIsRightPanelResizing(true), onKeyDown: (event) => {
|
|
1654
1690
|
if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')
|