@agent-native/toolkit 0.201.1 → 0.202.0-nightly-20261006033736
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/agent-native.eject.json +39 -12
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +292 -23
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +5 -0
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +5 -0
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +78 -3
- package/dist/app/auth/AuthPage.d.ts.map +1 -1
- package/dist/app/auth/AuthPage.js +7 -14
- package/dist/app/auth/AuthPage.js.map +1 -1
- package/dist/app/auth/server.d.ts +6 -0
- package/dist/app/auth/server.d.ts.map +1 -0
- package/dist/app/auth/server.js +19 -0
- package/dist/app/auth/server.js.map +1 -0
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +164 -83
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentSidebar.d.ts +2 -1
- package/dist/app/chat/AgentSidebar.d.ts.map +1 -1
- package/dist/app/chat/AgentSidebar.js +2 -2
- package/dist/app/chat/AgentSidebar.js.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.js +13 -3
- package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +2 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +41 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +41 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +41 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +41 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +41 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +41 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +41 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +41 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +41 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +41 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +41 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +41 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/shared/StarfieldBackground.d.ts +1 -6
- package/dist/app/shared/StarfieldBackground.d.ts.map +1 -1
- package/dist/app/shared/StarfieldBackground.js +1 -368
- package/dist/app/shared/StarfieldBackground.js.map +1 -1
- package/dist/app/shared/WaveBackground.d.ts +5 -0
- package/dist/app/shared/WaveBackground.d.ts.map +1 -0
- package/dist/app/shared/WaveBackground.js +34 -0
- package/dist/app/shared/WaveBackground.js.map +1 -0
- package/dist/app/shared/WebGlWaveBackground.d.ts +9 -0
- package/dist/app/shared/WebGlWaveBackground.d.ts.map +1 -0
- package/dist/app/shared/WebGlWaveBackground.js +433 -0
- package/dist/app/shared/WebGlWaveBackground.js.map +1 -0
- package/dist/app/shared/index.d.ts +1 -0
- package/dist/app/shared/index.d.ts.map +1 -1
- package/dist/app/shared/index.js +1 -0
- package/dist/app/shared/index.js.map +1 -1
- package/dist/app/shared/ocean/bloom-blur.wgsl +43 -0
- package/dist/app/shared/ocean/bloom-blur.wgsl.js +1 -0
- package/dist/app/shared/ocean/bloom-bright.wgsl +21 -0
- package/dist/app/shared/ocean/bloom-bright.wgsl.js +1 -0
- package/dist/app/shared/ocean/bloom-composite.wgsl +40 -0
- package/dist/app/shared/ocean/bloom-composite.wgsl.js +1 -0
- package/dist/app/shared/ocean/brand-colors.d.ts +9 -0
- package/dist/app/shared/ocean/brand-colors.d.ts.map +1 -0
- package/dist/app/shared/ocean/brand-colors.js +45 -0
- package/dist/app/shared/ocean/brand-colors.js.map +1 -0
- package/dist/app/shared/ocean/camera.d.ts +5 -0
- package/dist/app/shared/ocean/camera.d.ts.map +1 -0
- package/dist/app/shared/ocean/camera.js +24 -0
- package/dist/app/shared/ocean/camera.js.map +1 -0
- package/dist/app/shared/ocean/hero-ocean-background.d.ts +8 -0
- package/dist/app/shared/ocean/hero-ocean-background.d.ts.map +1 -0
- package/dist/app/shared/ocean/hero-ocean-background.js +186 -0
- package/dist/app/shared/ocean/hero-ocean-background.js.map +1 -0
- package/dist/app/shared/ocean/ifft-stage.wgsl +36 -0
- package/dist/app/shared/ocean/ifft-stage.wgsl.js +1 -0
- package/dist/app/shared/ocean/initial-spectrum.wgsl +36 -0
- package/dist/app/shared/ocean/initial-spectrum.wgsl.js +1 -0
- package/dist/app/shared/ocean/noise.wgsl +24 -0
- package/dist/app/shared/ocean/noise.wgsl.js +1 -0
- package/dist/app/shared/ocean/normal-foam.wgsl +32 -0
- package/dist/app/shared/ocean/normal-foam.wgsl.js +1 -0
- package/dist/app/shared/ocean/ocean-colors.d.ts +6 -0
- package/dist/app/shared/ocean/ocean-colors.d.ts.map +1 -0
- package/dist/app/shared/ocean/ocean-colors.js +6 -0
- package/dist/app/shared/ocean/ocean-colors.js.map +1 -0
- package/dist/app/shared/ocean/ocean-common.wgsl +15 -0
- package/dist/app/shared/ocean/ocean-common.wgsl.js +1 -0
- package/dist/app/shared/ocean/ocean-graph.d.ts +12 -0
- package/dist/app/shared/ocean/ocean-graph.d.ts.map +1 -0
- package/dist/app/shared/ocean/ocean-graph.js +16 -0
- package/dist/app/shared/ocean/ocean-graph.js.map +1 -0
- package/dist/app/shared/ocean/particles.wgsl +139 -0
- package/dist/app/shared/ocean/particles.wgsl.js +1 -0
- package/dist/app/shared/ocean/present.wgsl +40 -0
- package/dist/app/shared/ocean/present.wgsl.js +1 -0
- package/dist/app/shared/ocean/renderer.d.ts +66 -0
- package/dist/app/shared/ocean/renderer.d.ts.map +1 -0
- package/dist/app/shared/ocean/renderer.js +535 -0
- package/dist/app/shared/ocean/renderer.js.map +1 -0
- package/dist/app/shared/ocean/spectrum.wgsl +35 -0
- package/dist/app/shared/ocean/spectrum.wgsl.js +1 -0
- package/dist/app/shared/ocean/tuning.d.ts +48 -0
- package/dist/app/shared/ocean/tuning.d.ts.map +1 -0
- package/dist/app/shared/ocean/tuning.js +74 -0
- package/dist/app/shared/ocean/tuning.js.map +1 -0
- package/dist/app/shared/ocean/webgpu-support.d.ts +3 -0
- package/dist/app/shared/ocean/webgpu-support.d.ts.map +1 -0
- package/dist/app/shared/ocean/webgpu-support.js +13 -0
- package/dist/app/shared/ocean/webgpu-support.js.map +1 -0
- package/dist/app/sharing/AccessRequestApprovalPage.d.ts +23 -0
- package/dist/app/sharing/AccessRequestApprovalPage.d.ts.map +1 -0
- package/dist/app/sharing/AccessRequestApprovalPage.js +95 -0
- package/dist/app/sharing/AccessRequestApprovalPage.js.map +1 -0
- package/dist/app/sharing/AccessRequestsSection.d.ts +5 -0
- package/dist/app/sharing/AccessRequestsSection.d.ts.map +1 -0
- package/dist/app/sharing/AccessRequestsSection.js +47 -0
- package/dist/app/sharing/AccessRequestsSection.js.map +1 -0
- package/dist/app/sharing/ResourceAccessScreen.d.ts +53 -0
- package/dist/app/sharing/ResourceAccessScreen.d.ts.map +1 -0
- package/dist/app/sharing/ResourceAccessScreen.js +132 -0
- package/dist/app/sharing/ResourceAccessScreen.js.map +1 -0
- package/dist/app/sharing/ShareButton.d.ts.map +1 -1
- package/dist/app/sharing/ShareButton.js +4 -2
- package/dist/app/sharing/ShareButton.js.map +1 -1
- package/dist/app/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/app/sharing/ShareDialog.js +7 -5
- package/dist/app/sharing/ShareDialog.js.map +1 -1
- package/dist/app/sharing/index.d.ts +2 -0
- package/dist/app/sharing/index.d.ts.map +1 -1
- package/dist/app/sharing/index.js +2 -0
- package/dist/app/sharing/index.js.map +1 -1
- package/dist/app/styles/agent-native.css +21 -1
- package/dist/app/styles/tokens/agent-kit.css +3 -1
- package/dist/composer/AgentSuggestionBar.d.ts +1 -1
- package/dist/composer/AgentSuggestionBar.d.ts.map +1 -1
- package/dist/composer/AgentSuggestionBar.js +75 -6
- package/dist/composer/AgentSuggestionBar.js.map +1 -1
- package/package.json +14 -4
- package/src/app/agentkit/react/components.tsx +492 -60
- package/src/app/agentkit/react/context.tsx +10 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +487 -1
- package/src/app/agentkit/react/styles.css +78 -3
- package/src/app/auth/AuthPage.spec.tsx +11 -7
- package/src/app/auth/AuthPage.tsx +16 -35
- package/src/app/auth/server.spec.ts +68 -0
- package/src/app/auth/server.ts +29 -0
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +287 -290
- package/src/app/chat/AgentKitAssistantChat.tsx +219 -116
- package/src/app/chat/AgentSidebar.tsx +3 -0
- package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +85 -0
- package/src/app/chat/agentkit-chat/guided-questions.tsx +12 -5
- package/src/app/chat/chat/surface-types.ts +2 -0
- package/src/app/i18n/catalogs/ar-SA.ts +44 -0
- package/src/app/i18n/catalogs/de-DE.ts +55 -0
- package/src/app/i18n/catalogs/en-US.ts +46 -0
- package/src/app/i18n/catalogs/es-ES.ts +53 -0
- package/src/app/i18n/catalogs/fr-FR.ts +53 -0
- package/src/app/i18n/catalogs/hi-IN.ts +47 -0
- package/src/app/i18n/catalogs/ja-JP.ts +54 -0
- package/src/app/i18n/catalogs/ko-KR.ts +50 -0
- package/src/app/i18n/catalogs/pt-BR.ts +52 -0
- package/src/app/i18n/catalogs/zh-CN.ts +42 -0
- package/src/app/i18n/catalogs/zh-TW.ts +43 -0
- package/src/app/shared/StarfieldBackground.tsx +4 -423
- package/src/app/shared/WaveBackground.spec.tsx +104 -0
- package/src/app/shared/WaveBackground.tsx +60 -0
- package/src/app/shared/WebGlWaveBackground.spec.tsx +106 -0
- package/src/app/shared/WebGlWaveBackground.tsx +499 -0
- package/src/app/shared/index.ts +1 -0
- package/src/app/shared/ocean/bloom-blur.wgsl +43 -0
- package/src/app/shared/ocean/bloom-bright.wgsl +21 -0
- package/src/app/shared/ocean/bloom-composite.wgsl +40 -0
- package/src/app/shared/ocean/brand-colors.ts +49 -0
- package/src/app/shared/ocean/camera.ts +28 -0
- package/src/app/shared/ocean/hero-ocean-background.spec.tsx +369 -0
- package/src/app/shared/ocean/hero-ocean-background.tsx +238 -0
- package/src/app/shared/ocean/ifft-stage.wgsl +36 -0
- package/src/app/shared/ocean/initial-spectrum.wgsl +36 -0
- package/src/app/shared/ocean/noise.wgsl +24 -0
- package/src/app/shared/ocean/normal-foam.wgsl +32 -0
- package/src/app/shared/ocean/ocean-colors.ts +11 -0
- package/src/app/shared/ocean/ocean-common.wgsl +15 -0
- package/src/app/shared/ocean/ocean-graph.ts +29 -0
- package/src/app/shared/ocean/particles.wgsl +139 -0
- package/src/app/shared/ocean/present.wgsl +40 -0
- package/src/app/shared/ocean/renderer.spec.ts +100 -0
- package/src/app/shared/ocean/renderer.ts +693 -0
- package/src/app/shared/ocean/spectrum.wgsl +35 -0
- package/src/app/shared/ocean/tuning.ts +131 -0
- package/src/app/shared/ocean/webgpu-support.ts +12 -0
- package/src/app/sharing/AccessRequestApprovalPage.spec.tsx +276 -0
- package/src/app/sharing/AccessRequestApprovalPage.tsx +307 -0
- package/src/app/sharing/AccessRequestsSection.tsx +163 -0
- package/src/app/sharing/ResourceAccessScreen.spec.tsx +235 -0
- package/src/app/sharing/ResourceAccessScreen.tsx +331 -0
- package/src/app/sharing/ShareButton.spec.tsx +171 -5
- package/src/app/sharing/ShareButton.tsx +15 -2
- package/src/app/sharing/ShareDialog.spec.tsx +71 -2
- package/src/app/sharing/ShareDialog.tsx +24 -2
- package/src/app/sharing/index.ts +2 -0
- package/src/app/styles/agent-native.css +21 -1
- package/src/app/styles/agent-native.spec.ts +16 -3
- package/src/app/styles/tokens/agent-kit.css +3 -1
- package/src/composer/AgentSuggestionBar.overflow.spec.tsx +277 -0
- package/src/composer/AgentSuggestionBar.tsx +113 -8
- package/src/wgsl-env.d.ts +6 -0
|
@@ -8,7 +8,7 @@ import { createAgentNativeChatRuntime } from "@agent-native/core/client/agent-ch
|
|
|
8
8
|
import { useAgentDynamicSuggestionsResult } from "@agent-native/core/client/agent-chat";
|
|
9
9
|
import { formatChatErrorText, localizeKnownChatErrorText, } from "@agent-native/core/client/agent-chat";
|
|
10
10
|
import { dispatchAgentChatRunning } from "@agent-native/core/client/agent-chat";
|
|
11
|
-
import { useAgentEngineConfigured, } from "@agent-native/core/client/agent-chat";
|
|
11
|
+
import { fetchAgentEngineConfiguredState, useAgentEngineConfigured, } from "@agent-native/core/client/agent-chat";
|
|
12
12
|
import { agentNativePath } from "@agent-native/core/client/api-path";
|
|
13
13
|
import { compareAndSetClientAppState, deleteClientAppState, isClientAppStateMutationPending, readClientAppState, } from "@agent-native/core/client/application-state";
|
|
14
14
|
import { signOut } from "@agent-native/core/client/hooks";
|
|
@@ -24,7 +24,7 @@ import { writeClipboardText } from "@agent-native/toolkit/clipboard";
|
|
|
24
24
|
import { AgentSuggestionBar, agentSuggestionPrompt, snapshotComposerContextItems, } from "@agent-native/toolkit/composer";
|
|
25
25
|
import { appendRealtimeVoiceTranscriptToRepository, realtimeVoiceTranscriptRegistry, } from "@agent-native/toolkit/composer/realtime-voice-transcript";
|
|
26
26
|
import { cn } from "@agent-native/toolkit/utils";
|
|
27
|
-
import { IconAlertTriangle, IconMessage, IconPlayerStopFilled, IconQuote, IconRefresh, IconX, } from "@tabler/icons-react";
|
|
27
|
+
import { IconAlertTriangle, IconLoader2, IconMessage, IconPlayerStopFilled, IconQuote, IconRefresh, IconX, } from "@tabler/icons-react";
|
|
28
28
|
import React, { createContext, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState, } from "react";
|
|
29
29
|
import { AgentKitChat, AgentKitComposer, AgentApprovalPrompt, AgentMessageView, useAgentKit, useAgentKitControl, useAgentThread, } from "../agentkit/react/index.js";
|
|
30
30
|
import { AgentKitRoot } from "../agentkit/react/root.js";
|
|
@@ -333,6 +333,11 @@ export const AgentKitAssistantChat = forwardRef(function AgentKitAssistantChat(p
|
|
|
333
333
|
},
|
|
334
334
|
agents: t("agentChat.activity.agents"),
|
|
335
335
|
tasks: t("agentChat.activity.tasks"),
|
|
336
|
+
toolInput: t("agentChat.tool.input"),
|
|
337
|
+
toolResult: t("agentChat.tool.result"),
|
|
338
|
+
activityValueIdentifierHidden: t("agentChat.tool.identifierHidden"),
|
|
339
|
+
activityValueOmitted: t("agentChat.tool.contentOmitted"),
|
|
340
|
+
activityValueCircular: t("agentChat.tool.circularReference"),
|
|
336
341
|
working: t("agentChat.status.working"),
|
|
337
342
|
workingFor: t("agentChat.status.workingFor", {
|
|
338
343
|
duration: "{{duration}}",
|
|
@@ -656,23 +661,50 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
656
661
|
tabId: props.tabId,
|
|
657
662
|
threadId,
|
|
658
663
|
});
|
|
664
|
+
const [submissionReadiness, setSubmissionReadiness] = useState(null);
|
|
665
|
+
const readinessRequestIdRef = useRef(0);
|
|
666
|
+
const providerReadinessRequestRef = useRef(null);
|
|
667
|
+
const latestResolvedReadinessRef = useRef(null);
|
|
668
|
+
const passiveReadinessRef = useRef(readiness.state);
|
|
669
|
+
const providerReadinessPassRef = useRef(null);
|
|
670
|
+
const latestSubmissionReadinessRef = useRef(readiness.state);
|
|
671
|
+
useEffect(() => {
|
|
672
|
+
if (passiveReadinessRef.current !== readiness.state) {
|
|
673
|
+
const explicitReadinessPassed = providerReadinessPassRef.current === readinessRequestIdRef.current &&
|
|
674
|
+
latestResolvedReadinessRef.current?.requestId ===
|
|
675
|
+
readinessRequestIdRef.current &&
|
|
676
|
+
latestResolvedReadinessRef.current.state === "configured";
|
|
677
|
+
if (readiness.state === "unavailable" && explicitReadinessPassed) {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
passiveReadinessRef.current = readiness.state;
|
|
681
|
+
readinessRequestIdRef.current += 1;
|
|
682
|
+
providerReadinessRequestRef.current = null;
|
|
683
|
+
providerReadinessPassRef.current = null;
|
|
684
|
+
latestSubmissionReadinessRef.current = readiness.state;
|
|
685
|
+
setSubmissionReadiness(null);
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
if (submissionReadiness === readiness.state) {
|
|
689
|
+
latestSubmissionReadinessRef.current = readiness.state;
|
|
690
|
+
setSubmissionReadiness(null);
|
|
691
|
+
}
|
|
692
|
+
}, [readiness.state, submissionReadiness]);
|
|
659
693
|
const modelCatalogPending = props.showModelSelector !== false && props.modelListLoading === true;
|
|
660
694
|
const modelListUnavailable = props.showModelSelector !== false && props.modelListError === true;
|
|
661
|
-
const
|
|
662
|
-
const
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
const
|
|
674
|
-
!setupMissing &&
|
|
675
|
-
(providerStatus === "unknown" || providerStatus === "unavailable");
|
|
695
|
+
const effectiveReadiness = submissionReadiness ?? readiness.state;
|
|
696
|
+
const canChat = !providerChecksEnabled || effectiveReadiness === "configured";
|
|
697
|
+
const setupMissing = providerChecksEnabled && effectiveReadiness === "missing";
|
|
698
|
+
const providerStatus = setupMissing
|
|
699
|
+
? "missing"
|
|
700
|
+
: modelListUnavailable
|
|
701
|
+
? "unavailable"
|
|
702
|
+
: modelCatalogPending
|
|
703
|
+
? "unknown"
|
|
704
|
+
: providerChecksEnabled
|
|
705
|
+
? effectiveReadiness
|
|
706
|
+
: "configured";
|
|
707
|
+
const composerPreflightRunActiveRef = useRef(null);
|
|
676
708
|
const retryProviderStatus = useCallback(() => {
|
|
677
709
|
window.dispatchEvent(new Event("agent-engine:configured-changed"));
|
|
678
710
|
}, []);
|
|
@@ -812,6 +844,12 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
812
844
|
if (setupMissing)
|
|
813
845
|
setSetupBouncePulse((pulse) => pulse + 1);
|
|
814
846
|
}, [setupMissing]);
|
|
847
|
+
const reportMissingProvider = useCallback(() => {
|
|
848
|
+
bounceSetupCard();
|
|
849
|
+
window.dispatchEvent(new CustomEvent("agent-chat:missing-api-key", {
|
|
850
|
+
detail: { tabId: props.tabId, threadId },
|
|
851
|
+
}));
|
|
852
|
+
}, [bounceSetupCard, props.tabId, threadId]);
|
|
815
853
|
const lastCustomRunningStateRef = useRef(null);
|
|
816
854
|
useEffect(() => {
|
|
817
855
|
const isCustomTransport = typeof props.createTransport === "function";
|
|
@@ -1197,19 +1235,70 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1197
1235
|
const interval = window.setInterval(() => saveSnapshotRef.current(), 5000);
|
|
1198
1236
|
return () => window.clearInterval(interval);
|
|
1199
1237
|
}, [isRunning]);
|
|
1200
|
-
const
|
|
1238
|
+
const refreshProviderReadiness = useCallback(async () => {
|
|
1239
|
+
if (!providerChecksEnabled)
|
|
1240
|
+
return "configured";
|
|
1241
|
+
let request = providerReadinessRequestRef.current;
|
|
1242
|
+
if (!request || request.requestId !== readinessRequestIdRef.current) {
|
|
1243
|
+
const requestId = ++readinessRequestIdRef.current;
|
|
1244
|
+
providerReadinessPassRef.current = null;
|
|
1245
|
+
request = {
|
|
1246
|
+
requestId,
|
|
1247
|
+
promise: fetchAgentEngineConfiguredState(true, { fresh: true }),
|
|
1248
|
+
};
|
|
1249
|
+
providerReadinessRequestRef.current = request;
|
|
1250
|
+
}
|
|
1251
|
+
let currentRequest = request;
|
|
1252
|
+
while (true) {
|
|
1253
|
+
const nextReadiness = await currentRequest.promise;
|
|
1254
|
+
if (currentRequest.requestId === readinessRequestIdRef.current) {
|
|
1255
|
+
if (providerReadinessRequestRef.current === currentRequest) {
|
|
1256
|
+
providerReadinessRequestRef.current = null;
|
|
1257
|
+
}
|
|
1258
|
+
latestResolvedReadinessRef.current = {
|
|
1259
|
+
requestId: currentRequest.requestId,
|
|
1260
|
+
state: nextReadiness,
|
|
1261
|
+
};
|
|
1262
|
+
latestSubmissionReadinessRef.current = nextReadiness;
|
|
1263
|
+
setSubmissionReadiness(nextReadiness);
|
|
1264
|
+
return nextReadiness;
|
|
1265
|
+
}
|
|
1266
|
+
const latestRequest = providerReadinessRequestRef.current;
|
|
1267
|
+
if (latestRequest &&
|
|
1268
|
+
latestRequest.requestId === readinessRequestIdRef.current &&
|
|
1269
|
+
latestRequest.requestId > currentRequest.requestId) {
|
|
1270
|
+
currentRequest = latestRequest;
|
|
1271
|
+
continue;
|
|
1272
|
+
}
|
|
1273
|
+
const latestResolved = latestResolvedReadinessRef.current;
|
|
1274
|
+
if (latestResolved?.requestId === readinessRequestIdRef.current) {
|
|
1275
|
+
return latestResolved.state;
|
|
1276
|
+
}
|
|
1277
|
+
return latestSubmissionReadinessRef.current;
|
|
1278
|
+
}
|
|
1279
|
+
}, [providerChecksEnabled]);
|
|
1280
|
+
const acquireSubmission = useCallback(async (useReadinessPass = false) => {
|
|
1281
|
+
const readinessPass = providerReadinessPassRef.current;
|
|
1282
|
+
const hasReadinessPass = useReadinessPass &&
|
|
1283
|
+
readinessPass !== null &&
|
|
1284
|
+
readinessPass === readinessRequestIdRef.current &&
|
|
1285
|
+
latestResolvedReadinessRef.current?.requestId === readinessPass &&
|
|
1286
|
+
latestResolvedReadinessRef.current.state === "configured";
|
|
1287
|
+
if (useReadinessPass)
|
|
1288
|
+
providerReadinessPassRef.current = null;
|
|
1201
1289
|
if (isRestoring ||
|
|
1202
1290
|
props.composerDisabled ||
|
|
1203
1291
|
props.composerSubmissionDisabled)
|
|
1204
1292
|
return null;
|
|
1205
|
-
if (
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1293
|
+
if (providerChecksEnabled) {
|
|
1294
|
+
const currentReadiness = hasReadinessPass
|
|
1295
|
+
? "configured"
|
|
1296
|
+
: await refreshProviderReadiness();
|
|
1297
|
+
if (currentReadiness !== "configured") {
|
|
1298
|
+
if (currentReadiness === "missing")
|
|
1299
|
+
reportMissingProvider();
|
|
1300
|
+
return null;
|
|
1211
1301
|
}
|
|
1212
|
-
return null;
|
|
1213
1302
|
}
|
|
1214
1303
|
if (history) {
|
|
1215
1304
|
const release = await history.beginSubmission();
|
|
@@ -1219,41 +1308,55 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1219
1308
|
}
|
|
1220
1309
|
return () => undefined;
|
|
1221
1310
|
}, [
|
|
1222
|
-
bounceSetupCard,
|
|
1223
|
-
canChat,
|
|
1224
1311
|
history,
|
|
1225
1312
|
isRestoring,
|
|
1226
1313
|
props.composerDisabled,
|
|
1227
1314
|
props.composerSubmissionDisabled,
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1315
|
+
providerChecksEnabled,
|
|
1316
|
+
refreshProviderReadiness,
|
|
1317
|
+
reportMissingProvider,
|
|
1231
1318
|
]);
|
|
1232
1319
|
const beforeSubmit = useCallback(async () => {
|
|
1320
|
+
providerReadinessPassRef.current = null;
|
|
1321
|
+
composerPreflightRunActiveRef.current = null;
|
|
1233
1322
|
if (isRestoring ||
|
|
1234
1323
|
props.composerDisabled ||
|
|
1235
1324
|
props.composerSubmissionDisabled)
|
|
1236
1325
|
return false;
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1326
|
+
const runWasActive = isThreadRunning();
|
|
1327
|
+
if (!providerChecksEnabled) {
|
|
1328
|
+
composerPreflightRunActiveRef.current = runWasActive;
|
|
1329
|
+
return true;
|
|
1330
|
+
}
|
|
1331
|
+
let currentReadiness = await refreshProviderReadiness();
|
|
1332
|
+
let resolvedReadiness = latestResolvedReadinessRef.current;
|
|
1333
|
+
while (currentReadiness === "configured" &&
|
|
1334
|
+
(!resolvedReadiness ||
|
|
1335
|
+
resolvedReadiness.requestId !== readinessRequestIdRef.current ||
|
|
1336
|
+
resolvedReadiness.state !== "configured")) {
|
|
1337
|
+
currentReadiness = await refreshProviderReadiness();
|
|
1338
|
+
resolvedReadiness = latestResolvedReadinessRef.current;
|
|
1339
|
+
}
|
|
1340
|
+
if (currentReadiness !== "configured") {
|
|
1341
|
+
if (currentReadiness === "missing")
|
|
1342
|
+
reportMissingProvider();
|
|
1343
|
+
return false;
|
|
1245
1344
|
}
|
|
1345
|
+
if (!resolvedReadiness ||
|
|
1346
|
+
resolvedReadiness.requestId !== readinessRequestIdRef.current) {
|
|
1347
|
+
return false;
|
|
1348
|
+
}
|
|
1349
|
+
composerPreflightRunActiveRef.current = runWasActive;
|
|
1350
|
+
providerReadinessPassRef.current = resolvedReadiness.requestId;
|
|
1246
1351
|
return true;
|
|
1247
1352
|
}, [
|
|
1248
|
-
bounceSetupCard,
|
|
1249
|
-
canChat,
|
|
1250
1353
|
isRestoring,
|
|
1251
1354
|
props.composerDisabled,
|
|
1252
1355
|
props.composerSubmissionDisabled,
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1356
|
+
providerChecksEnabled,
|
|
1357
|
+
isThreadRunning,
|
|
1358
|
+
refreshProviderReadiness,
|
|
1359
|
+
reportMissingProvider,
|
|
1257
1360
|
]);
|
|
1258
1361
|
const dispatch = useCallback(async (text, files, references, composerOptions, options = {}) => {
|
|
1259
1362
|
const selectionHydration = pendingSelectionHydrationRef.current;
|
|
@@ -1414,11 +1517,7 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1414
1517
|
const submittedComposerOptions = captureQueuedRunState(composerOptions, isThreadRunning());
|
|
1415
1518
|
const release = await acquireSubmission();
|
|
1416
1519
|
if (!release) {
|
|
1417
|
-
if (
|
|
1418
|
-
(isRestoring ||
|
|
1419
|
-
(providerChecksEnabled &&
|
|
1420
|
-
(readiness.state === "unknown" ||
|
|
1421
|
-
readiness.state === "unavailable")))) {
|
|
1520
|
+
if (isRestoring) {
|
|
1422
1521
|
try {
|
|
1423
1522
|
const selectionHydration = pendingSelectionHydrationRef.current;
|
|
1424
1523
|
await selectionHydration?.promise;
|
|
@@ -1494,7 +1593,7 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1494
1593
|
throw error;
|
|
1495
1594
|
}
|
|
1496
1595
|
}
|
|
1497
|
-
const reason = setupMissing
|
|
1596
|
+
const reason = setupMissing || latestSubmissionReadinessRef.current === "missing"
|
|
1498
1597
|
? "engine-not-configured"
|
|
1499
1598
|
: "submission-unavailable";
|
|
1500
1599
|
reportAgentChatSubmitResult(options.submitMessageId, false, reason);
|
|
@@ -1527,37 +1626,18 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1527
1626
|
isRestoring,
|
|
1528
1627
|
isThreadRunning,
|
|
1529
1628
|
props.tabId,
|
|
1530
|
-
providerChecksEnabled,
|
|
1531
|
-
readiness.state,
|
|
1532
1629
|
setupMissing,
|
|
1533
1630
|
t,
|
|
1534
1631
|
threadId,
|
|
1535
1632
|
]);
|
|
1536
1633
|
const submitPrepared = useCallback(async (text, files, references, composerOptions, prepare) => {
|
|
1537
|
-
const runWasActiveAtSubmit =
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
const preparedOptions = prepare ? await prepare() : composerOptions;
|
|
1545
|
-
const submittedOptions = captureQueuedRunState(preserveQueuedIntent(preparedOptions, composerOptions), runWasActiveAtSubmit);
|
|
1546
|
-
const result = await submit(text, files, references, submittedOptions);
|
|
1547
|
-
if (result.status === "rejected") {
|
|
1548
|
-
throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
|
|
1549
|
-
}
|
|
1550
|
-
}
|
|
1551
|
-
catch (error) {
|
|
1552
|
-
dispatchSetupRequiredEvent(error, props.tabId, threadId);
|
|
1553
|
-
throw error;
|
|
1554
|
-
}
|
|
1555
|
-
}
|
|
1556
|
-
else {
|
|
1557
|
-
throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
|
|
1558
|
-
}
|
|
1559
|
-
return;
|
|
1560
|
-
}
|
|
1634
|
+
const runWasActiveAtSubmit = providerReadinessPassRef.current
|
|
1635
|
+
? (composerPreflightRunActiveRef.current ?? isThreadRunning())
|
|
1636
|
+
: isThreadRunning();
|
|
1637
|
+
composerPreflightRunActiveRef.current = null;
|
|
1638
|
+
const release = await acquireSubmission(true);
|
|
1639
|
+
if (!release)
|
|
1640
|
+
throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
|
|
1561
1641
|
try {
|
|
1562
1642
|
const preparedOptions = prepare ? await prepare() : composerOptions;
|
|
1563
1643
|
await dispatch(text, files, references, captureQueuedRunState(preserveQueuedIntent(preparedOptions, composerOptions), runWasActiveAtSubmit));
|
|
@@ -1576,8 +1656,6 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
|
|
|
1576
1656
|
props.composerDisabled,
|
|
1577
1657
|
props.composerSubmissionDisabled,
|
|
1578
1658
|
props.tabId,
|
|
1579
|
-
providerSubmissionPending,
|
|
1580
|
-
submit,
|
|
1581
1659
|
t,
|
|
1582
1660
|
threadId,
|
|
1583
1661
|
]);
|
|
@@ -2045,7 +2123,8 @@ function AgentKitTranscript({ children, threadId }) {
|
|
|
2045
2123
|
? []
|
|
2046
2124
|
: getAgentKitThreadHandoffMessages(thread, surface.handoffSnapshot);
|
|
2047
2125
|
const guided = useGuidedQuestionFlow({
|
|
2048
|
-
enabled: surface.props.isActiveComposer !== false
|
|
2126
|
+
enabled: surface.props.isActiveComposer !== false &&
|
|
2127
|
+
surface.props.showGuidedQuestions !== false,
|
|
2049
2128
|
stateKey: "guided-questions",
|
|
2050
2129
|
queryKey: ["guided-questions", "agentkit"],
|
|
2051
2130
|
browserTabId: surface.props.browserTabId,
|
|
@@ -2117,7 +2196,8 @@ function AgentKitTranscript({ children, threadId }) {
|
|
|
2117
2196
|
}
|
|
2118
2197
|
return (_jsxs(_Fragment, { children: [thread.messages.length > 0 || surface.hasRenderedMessages ? (_jsx(AgentKitHistoryBeginningRevert, {})) : null, surface.threadRestore.status === "error" ? (_jsxs("div", { className: "mx-4 mt-3 flex items-center justify-between gap-3 rounded-md border border-border px-3 py-2 text-xs text-muted-foreground", role: "alert", children: [_jsx("span", { children: surface.threadRestore.notFound
|
|
2119
2198
|
? t("agentChat.message.threadNotFound")
|
|
2120
|
-
: t("agentChat.message.restoreRequestFailed") }), _jsx("button", { type: "button", onClick: surface.retryThreadRestore, className: "shrink-0 rounded px-2 py-1 hover:bg-accent hover:text-foreground", children: t("agentChat.common.retry") })] })) : null, renderThreadSlot(surface.props.threadContentSlot, threadId, surface.props.tabId), children, handoffMessages.map((message) => (_jsx(AgentMessageView, { value: message, threadId: threadId }, message.id))), pendingVoiceMessages.map((message) => (_jsx(AgentMessageView, { value: message, threadId: threadId }, message.id))), showThinking ? (_jsx("div", { className: "agentkit-activities agentkit-activities-summary-content", role: "status", "aria-live": "polite", children: _jsx("span", { className: "agentkit-activities-current", "data-running": "true", "data-agentkit-current-activity": "true", children: _jsx("span", { className: "agentkit-activities-current-label agent-running-shimmer", children: t("agentChat.status.thinking") }) }) })) : null,
|
|
2199
|
+
: t("agentChat.message.restoreRequestFailed") }), _jsx("button", { type: "button", onClick: surface.retryThreadRestore, className: "shrink-0 rounded px-2 py-1 hover:bg-accent hover:text-foreground", children: t("agentChat.common.retry") })] })) : null, renderThreadSlot(surface.props.threadContentSlot, threadId, surface.props.tabId), children, handoffMessages.map((message) => (_jsx(AgentMessageView, { value: message, threadId: threadId }, message.id))), pendingVoiceMessages.map((message) => (_jsx(AgentMessageView, { value: message, threadId: threadId }, message.id))), showThinking ? (_jsx("div", { className: "agentkit-activities agentkit-activities-summary-content", role: "status", "aria-live": "polite", children: _jsx("span", { className: "agentkit-activities-current", "data-running": "true", "data-agentkit-current-activity": "true", children: _jsx("span", { className: "agentkit-activities-current-label agent-running-shimmer", children: t("agentChat.status.thinking") }) }) })) : null, surface.props.showGuidedQuestions !== false &&
|
|
2200
|
+
guided.questions?.length ? (_jsx("div", { className: "px-3 pb-3", children: _jsx(GuidedQuestionFlow, { questions: guided.questions, onSubmit: guided.handleSubmit, onSkip: guided.handleSkip, isSubmitting: guided.isSubmitting, isSubmissionBlocked: !surface.canChat, providerStatus: surface.providerStatus, modelListUnavailable: surface.modelListUnavailable, onRetryProviderStatus: surface.modelListUnavailable
|
|
2121
2201
|
? surface.retryModelList
|
|
2122
2202
|
: surface.retryProviderStatus, ...(guided.title ? { title: guided.title } : {}), ...(guided.description ? { description: guided.description } : {}), ...(guided.skipLabel ? { skipLabel: guided.skipLabel } : {}), ...(guided.submitLabel ? { submitLabel: guided.submitLabel } : {}), className: "h-auto items-stretch justify-stretch bg-transparent" }) })) : null, suggestionBar, renderThreadSlot(surface.props.threadFooterSlot, threadId, surface.props.tabId)] }));
|
|
2123
2203
|
}
|
|
@@ -2350,8 +2430,9 @@ function AgentKitComposerSurface({ threadId, props, composerContext, canChat, se
|
|
|
2350
2430
|
props.composerDisabled ||
|
|
2351
2431
|
props.composerSubmissionDisabled ||
|
|
2352
2432
|
isSubmissionInFlight ||
|
|
2353
|
-
composerSubmissionPending, onSelect: submitSuggestion, className: "agentkit-home-suggestions" })) : null, showPlanCallout ? (_jsx(PlanModeCallout, { canImplementPlan: latestAssistantWasPlan, onImplementPlan: onImplementPlan, onSwitchToAct: () => props.onExecModeChange?.("build") })) : null, setupMissing && props.showMissingApiKeySetup !== false ? (_jsx(BuilderSetupCard, { fullWidth: true, attached: true, bouncePulse: setupBouncePulse, layout: props.missingApiKeySetupLayout ?? "default", onConnected: () => window.dispatchEvent(new Event("agent-engine:configured-changed")) })) : null,
|
|
2354
|
-
(
|
|
2433
|
+
composerSubmissionPending, onSelect: submitSuggestion, className: "agentkit-home-suggestions" })) : null, showPlanCallout ? (_jsx(PlanModeCallout, { canImplementPlan: latestAssistantWasPlan, onImplementPlan: onImplementPlan, onSwitchToAct: () => props.onExecModeChange?.("build") })) : null, setupMissing && props.showMissingApiKeySetup !== false ? (_jsx(BuilderSetupCard, { fullWidth: true, attached: true, bouncePulse: setupBouncePulse, layout: props.missingApiKeySetupLayout ?? "default", onConnected: () => window.dispatchEvent(new Event("agent-engine:configured-changed")) })) : null, !setupMissing &&
|
|
2434
|
+
(modelListUnavailable ||
|
|
2435
|
+
(!canChat && providerStatus !== "configured")) ? (_jsx(GuidedQuestionProviderGate, { providerStatus: providerStatus, modelListUnavailable: modelListUnavailable, onRetry: modelListUnavailable ? retryModelList : retryProviderStatus })) : null, integration ? (_jsx(McpConnectionSuggestion, { text: text, variant: "composer", requestedByUser: true, integrationId: integration.id })) : null, selectionLength !== null && selectionLength > 0 ? (_jsx(AgentKitSelectionPill, { length: selectionLength, onClear: onClearSelection })) : null, _jsxs("div", { className: "relative", children: [_jsx(AgentKitComposer, { threadId: threadId, disabled: (!canChat && !providerSubmissionPending) ||
|
|
2355
2436
|
props.composerDisabled ||
|
|
2356
2437
|
isRestoring, submissionDisabled: (!canChat && !providerSubmissionPending) ||
|
|
2357
2438
|
props.composerSubmissionDisabled === true ||
|
|
@@ -2375,7 +2456,7 @@ function AgentKitComposerSurface({ threadId, props, composerContext, canChat, se
|
|
|
2375
2456
|
isRunning,
|
|
2376
2457
|
thread,
|
|
2377
2458
|
t,
|
|
2378
|
-
}), onConnectProvider: props.onConnectProvider, onConnectLocalRuntime: props.onConnectLocalRuntime, imageModelMenu: props.imageModelMenu, voiceEnabled: true, toolbarSlot: _jsxs(_Fragment, { children: [props.selectedEngine === CHATGPT_SUBSCRIPTION_ENGINE_NAME ? (_jsxs("span", { className: "inline-flex items-center gap-2 text-[11px] text-muted-foreground", children: [_jsx("span", { children: t("agentChat.composer.chatgptPlanUsing") }), _jsx("a", { href: "https://chatgpt.com/settings/usage", target: "_blank", rel: "noreferrer", className: "font-medium text-foreground underline-offset-2 hover:underline", children: t("agentChat.composer.chatgptManageUsage") })] })) : null, props.composerToolbarSlot] }), extraActionButton: props.composerExtraActionButton, includeDefaultSlashCommands: true, includeDefaultSlashSkills: true, onSlashCommand: props.onSlashCommand, modelStatusChecksEnabled: props.showModelSelector !== false &&
|
|
2459
|
+
}), onConnectProvider: props.onConnectProvider, onConnectLocalRuntime: props.onConnectLocalRuntime, imageModelMenu: props.imageModelMenu, voiceEnabled: true, toolbarSlot: _jsxs(_Fragment, { children: [props.selectedEngine === CHATGPT_SUBSCRIPTION_ENGINE_NAME ? (_jsxs("span", { className: "inline-flex items-center gap-2 text-[11px] text-muted-foreground", children: [_jsx("span", { children: t("agentChat.composer.chatgptPlanUsing") }), _jsx("a", { href: "https://chatgpt.com/settings/usage", target: "_blank", rel: "noreferrer", className: "font-medium text-foreground underline-offset-2 hover:underline", children: t("agentChat.composer.chatgptManageUsage") })] })) : null, props.composerToolbarSlot] }), extraActionButton: _jsxs(_Fragment, { children: [props.composerExtraActionButton, composerSubmissionPending ? (_jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground", role: "status", "aria-live": "polite", "aria-label": t("agentChat.common.waiting"), "data-testid": "provider-preflight-pending", children: [_jsx(IconLoader2, { className: "size-3.5 animate-spin motion-reduce:animate-none" }), _jsx("span", { children: t("agentChat.common.waiting") })] })) : null] }), includeDefaultSlashCommands: true, includeDefaultSlashSkills: true, onSlashCommand: props.onSlashCommand, modelStatusChecksEnabled: props.showModelSelector !== false &&
|
|
2379
2460
|
props.availableModels === undefined, attachmentsEnabled: fileStorageConfigured, onAttachmentRequest: requestFileStorage, contextButtonTooltipDisabled: fileStoragePromptOpen, onAttachmentError: setComposerError, onSubmit: submitComposer, composerRef: composerRef, stopButton: isRunning ? (_jsx("button", { type: "button", onClick: () => {
|
|
2380
2461
|
setComposerError(null);
|
|
2381
2462
|
void (async () => {
|