@agent-native/toolkit 0.198.3 → 0.198.4

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.
Files changed (144) hide show
  1. package/dist/app/agentkit/react/components.d.ts +4 -1
  2. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  3. package/dist/app/agentkit/react/components.js +12 -4
  4. package/dist/app/agentkit/react/components.js.map +1 -1
  5. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  6. package/dist/app/chat/AgentKitAssistantChat.js +43 -21
  7. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  8. package/dist/app/chat/AgentSidebar.d.ts.map +1 -1
  9. package/dist/app/chat/AgentSidebar.js +2 -0
  10. package/dist/app/chat/AgentSidebar.js.map +1 -1
  11. package/dist/app/chat/FileStorageSetupPopover.js +2 -2
  12. package/dist/app/chat/FileStorageSetupPopover.js.map +1 -1
  13. package/dist/app/chat/MultiTabAssistantChat.js +1 -1
  14. package/dist/app/chat/agentkit-chat/connections.d.ts +1 -4
  15. package/dist/app/chat/agentkit-chat/connections.d.ts.map +1 -1
  16. package/dist/app/chat/agentkit-chat/connections.js +1 -26
  17. package/dist/app/chat/agentkit-chat/connections.js.map +1 -1
  18. package/dist/app/chat/agentkit-chat/history.d.ts +4 -1
  19. package/dist/app/chat/agentkit-chat/history.d.ts.map +1 -1
  20. package/dist/app/chat/agentkit-chat/history.js +17 -5
  21. package/dist/app/chat/agentkit-chat/history.js.map +1 -1
  22. package/dist/app/chat/chat/history-types.d.ts +1 -1
  23. package/dist/app/chat/chat/history-types.d.ts.map +1 -1
  24. package/dist/app/chat/chat-first/copy.d.ts +1 -2
  25. package/dist/app/chat/chat-first/copy.d.ts.map +1 -1
  26. package/dist/app/chat/chat-first/copy.js +1 -121
  27. package/dist/app/chat/chat-first/copy.js.map +1 -1
  28. package/dist/app/chat/chat-first-copy.d.ts +3 -0
  29. package/dist/app/chat/chat-first-copy.d.ts.map +1 -0
  30. package/dist/app/chat/chat-first-copy.js +122 -0
  31. package/dist/app/chat/chat-first-copy.js.map +1 -0
  32. package/dist/app/feature-flags/FeatureFlagsPanel.d.ts.map +1 -1
  33. package/dist/app/feature-flags/FeatureFlagsPanel.js +1 -0
  34. package/dist/app/feature-flags/FeatureFlagsPanel.js.map +1 -1
  35. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  36. package/dist/app/i18n/catalogs/ar-SA.js +2 -1
  37. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  38. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  39. package/dist/app/i18n/catalogs/de-DE.js +2 -1
  40. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  41. package/dist/app/i18n/catalogs/en-US.d.ts +2 -1
  42. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  43. package/dist/app/i18n/catalogs/en-US.js +2 -1
  44. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  45. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  46. package/dist/app/i18n/catalogs/es-ES.js +2 -1
  47. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  48. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  49. package/dist/app/i18n/catalogs/fr-FR.js +2 -1
  50. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  51. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  52. package/dist/app/i18n/catalogs/hi-IN.js +2 -1
  53. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  54. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  55. package/dist/app/i18n/catalogs/ja-JP.js +2 -1
  56. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  57. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  58. package/dist/app/i18n/catalogs/ko-KR.js +2 -1
  59. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  60. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  61. package/dist/app/i18n/catalogs/pt-BR.js +2 -1
  62. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  63. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  64. package/dist/app/i18n/catalogs/zh-CN.js +2 -1
  65. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  66. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  67. package/dist/app/i18n/catalogs/zh-TW.js +2 -1
  68. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  69. package/dist/app/labs/LabsSettings.d.ts.map +1 -1
  70. package/dist/app/labs/LabsSettings.js +7 -3
  71. package/dist/app/labs/LabsSettings.js.map +1 -1
  72. package/dist/app/org/OrgGeneralSection.d.ts.map +1 -1
  73. package/dist/app/org/OrgGeneralSection.js +21 -18
  74. package/dist/app/org/OrgGeneralSection.js.map +1 -1
  75. package/dist/app/org/OrgSwitcher.d.ts.map +1 -1
  76. package/dist/app/org/OrgSwitcher.js +3 -2
  77. package/dist/app/org/OrgSwitcher.js.map +1 -1
  78. package/dist/app/org/workspace-app-links.d.ts +1 -0
  79. package/dist/app/org/workspace-app-links.d.ts.map +1 -1
  80. package/dist/app/org/workspace-app-links.js +3 -0
  81. package/dist/app/org/workspace-app-links.js.map +1 -1
  82. package/dist/app/resources/McpAgentKitConnectionRequest.d.ts +7 -2
  83. package/dist/app/resources/McpAgentKitConnectionRequest.d.ts.map +1 -1
  84. package/dist/app/resources/McpAgentKitConnectionRequest.js +132 -13
  85. package/dist/app/resources/McpAgentKitConnectionRequest.js.map +1 -1
  86. package/dist/icons/ResourceIconPicker.d.ts +6 -1
  87. package/dist/icons/ResourceIconPicker.d.ts.map +1 -1
  88. package/dist/icons/ResourceIconPicker.js +45 -6
  89. package/dist/icons/ResourceIconPicker.js.map +1 -1
  90. package/package.json +6 -4
  91. package/src/app/agentkit/react/components.spec.tsx +3 -3
  92. package/src/app/agentkit/react/components.tsx +22 -4
  93. package/src/app/agentkit/react/lifecycle.spec.tsx +42 -0
  94. package/src/app/chat/AgentKitAssistantChat.spec.tsx +114 -11
  95. package/src/app/chat/AgentKitAssistantChat.tsx +78 -17
  96. package/src/app/chat/AgentPanel.header.spec.ts +59 -22
  97. package/src/app/chat/AgentSidebar.tsx +2 -0
  98. package/src/app/chat/FileStorageSetupPopover.tsx +2 -2
  99. package/src/app/chat/MultiTabAssistantChat.messageCount.spec.tsx +3 -1
  100. package/src/app/chat/MultiTabAssistantChat.spec.tsx +8 -4
  101. package/src/app/chat/MultiTabAssistantChat.tsx +1 -1
  102. package/src/app/chat/agentkit-chat/action-widget.spec.tsx +5 -17
  103. package/src/app/chat/agentkit-chat/connections.spec.tsx +137 -0
  104. package/src/app/chat/agentkit-chat/connections.ts +2 -37
  105. package/src/app/chat/agentkit-chat/history.tsx +23 -8
  106. package/src/app/chat/chat/history-types.ts +1 -1
  107. package/src/app/chat/chat/tool-call-display.spec.tsx +2 -2
  108. package/src/app/chat/chat/widgets/record-change-widget.spec.tsx +20 -29
  109. package/src/app/chat/chat-first/copy.ts +1 -133
  110. package/src/app/chat/chat-first-copy.ts +133 -0
  111. package/src/app/chat/composer/use-agentkit-capabilities.hardening.spec.tsx +3 -2
  112. package/src/app/feature-flags/FeatureFlagsPanel.tsx +1 -0
  113. package/src/app/i18n/catalogs/ar-SA.ts +2 -1
  114. package/src/app/i18n/catalogs/de-DE.ts +3 -1
  115. package/src/app/i18n/catalogs/en-US.ts +2 -1
  116. package/src/app/i18n/catalogs/es-ES.ts +2 -1
  117. package/src/app/i18n/catalogs/fr-FR.ts +3 -1
  118. package/src/app/i18n/catalogs/hi-IN.ts +2 -1
  119. package/src/app/i18n/catalogs/ja-JP.ts +2 -1
  120. package/src/app/i18n/catalogs/ko-KR.ts +2 -1
  121. package/src/app/i18n/catalogs/pt-BR.ts +3 -1
  122. package/src/app/i18n/catalogs/zh-CN.ts +2 -1
  123. package/src/app/i18n/catalogs/zh-TW.ts +2 -1
  124. package/src/app/integrations/IntegrationDetailPage.spec.tsx +1 -1
  125. package/src/app/labs/LabsSettings.tsx +46 -10
  126. package/src/app/observability/ThumbsFeedback.spec.tsx +15 -0
  127. package/src/app/onboarding/FirstRunOnboarding.spec.tsx +4 -0
  128. package/src/app/org/OrgGeneralSection.tsx +32 -22
  129. package/src/app/org/OrgSwitcher.tsx +3 -2
  130. package/src/app/org/workspace-app-links.spec.ts +4 -0
  131. package/src/app/org/workspace-app-links.ts +8 -1
  132. package/src/app/resources/McpAgentKitConnectionRequest.spec.tsx +371 -2
  133. package/src/app/resources/McpAgentKitConnectionRequest.tsx +171 -11
  134. package/src/app/settings/SettingsTabsPage.spec.tsx +4 -2
  135. package/src/app/settings/shell/SettingsShell.spec.tsx +14 -8
  136. package/src/app/settings/shell/pages/app-group-pages.spec.tsx +35 -5
  137. package/src/app/settings/shell/pages/resource-pages.spec.tsx +3 -0
  138. package/src/app/settings/usage/UsagePage.spec.tsx +3 -3
  139. package/src/app/shared/lazy-chunk-error-boundary.spec.tsx +2 -0
  140. package/src/app-shell/sidebar-overflow.spec.tsx +4 -1
  141. package/src/design-tweaks/visual-style-controls.spec.tsx +38 -0
  142. package/src/editor/useCollabReconcile.concurrent.spec.ts +2 -1
  143. package/src/icons/ResourceIconPicker.spec.tsx +270 -0
  144. package/src/icons/ResourceIconPicker.tsx +72 -4
@@ -187,6 +187,11 @@ function isRetryableDeferredProviderSubmissionError(error) {
187
187
  }
188
188
  return error instanceof TypeError || record?.name === "AbortError";
189
189
  }
190
+ function preserveQueuedIntent(preparedOptions, originalOptions) {
191
+ return originalOptions.intent === "queued"
192
+ ? { ...preparedOptions, intent: "queued" }
193
+ : preparedOptions;
194
+ }
190
195
  function captureQueuedRunState(options, runWasActive) {
191
196
  return {
192
197
  ...options,
@@ -239,7 +244,9 @@ export const AgentKitAssistantChat = forwardRef(function AgentKitAssistantChat(p
239
244
  const handoffSnapshot = props.createTransport || props.runtime
240
245
  ? null
241
246
  : readAgentKitThreadHandoffSnapshot(createAgentKitThreadHandoffKey(props, threadId));
242
- const [threadRestore, setThreadRestore] = useState(() => props.isThreadStateLoading || !props.isNewThread
247
+ const [manualLoadThreadId, setManualLoadThreadId] = useState(() => (props.isNewThread ? threadId : null));
248
+ const hasManualLoadForCurrentThread = props.isNewThread || manualLoadThreadId === threadId;
249
+ const [threadRestore, setThreadRestore] = useState(() => props.isThreadStateLoading || !hasManualLoadForCurrentThread
243
250
  ? { status: "loading" }
244
251
  : { status: "ready" });
245
252
  const [restoreRetryLoadPhase, setRestoreRetryLoadPhase] = useState("idle");
@@ -251,12 +258,20 @@ export const AgentKitAssistantChat = forwardRef(function AgentKitAssistantChat(p
251
258
  setRestoreRetryThreadId(null);
252
259
  }, []);
253
260
  useEffect(() => {
254
- setThreadRestore(props.isThreadStateLoading || !props.isNewThread
261
+ setManualLoadThreadId((current) => props.isNewThread ? threadId : current === threadId ? current : null);
262
+ }, [props.isNewThread, threadId]);
263
+ useEffect(() => {
264
+ setThreadRestore(props.isThreadStateLoading || !hasManualLoadForCurrentThread
255
265
  ? { status: "loading" }
256
266
  : { status: "ready" });
257
267
  setRestoreRetryLoadPhase("idle");
258
268
  setRestoreRetryThreadId(null);
259
- }, [props.isNewThread, props.isThreadStateLoading, threadId]);
269
+ }, [
270
+ hasManualLoadForCurrentThread,
271
+ props.isNewThread,
272
+ props.isThreadStateLoading,
273
+ threadId,
274
+ ]);
260
275
  const onThreadRestoreLoadError = useCallback((error) => {
261
276
  const record = asRecord(error);
262
277
  const response = asRecord(record?.response);
@@ -594,7 +609,7 @@ export const AgentKitAssistantChat = forwardRef(function AgentKitAssistantChat(p
594
609
  props.createTransport ? threadId : undefined,
595
610
  ]);
596
611
  const agentKitLoad = props.isThreadStateLoading ||
597
- props.isNewThread ||
612
+ hasManualLoadForCurrentThread ||
598
613
  (restoreRetryThreadId === threadId && restoreRetryLoadPhase === "release")
599
614
  ? "manual"
600
615
  : "auto";
@@ -1490,7 +1505,7 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
1490
1505
  !props.composerSubmissionDisabled) {
1491
1506
  try {
1492
1507
  const preparedOptions = prepare ? await prepare() : composerOptions;
1493
- const submittedOptions = captureQueuedRunState(preparedOptions, runWasActiveAtSubmit);
1508
+ const submittedOptions = captureQueuedRunState(preserveQueuedIntent(preparedOptions, composerOptions), runWasActiveAtSubmit);
1494
1509
  const result = await submit(text, files, references, submittedOptions);
1495
1510
  if (result.status === "rejected") {
1496
1511
  throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
@@ -1508,7 +1523,7 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
1508
1523
  }
1509
1524
  try {
1510
1525
  const preparedOptions = prepare ? await prepare() : composerOptions;
1511
- await dispatch(text, files, references, captureQueuedRunState(preparedOptions, runWasActiveAtSubmit));
1526
+ await dispatch(text, files, references, captureQueuedRunState(preserveQueuedIntent(preparedOptions, composerOptions), runWasActiveAtSubmit));
1512
1527
  }
1513
1528
  catch (error) {
1514
1529
  dispatchSetupRequiredEvent(error, props.tabId, threadId);
@@ -1733,12 +1748,20 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
1733
1748
  ],
1734
1749
  });
1735
1750
  }, [isThreadRunning, submit]);
1736
- const resumeIntegrationPrompt = useCallback((message) => {
1737
- if (props.isActiveComposer === false)
1738
- return;
1739
- void send(message).catch((error) => {
1751
+ const resumeIntegrationPrompt = useCallback(async (message) => {
1752
+ if (props.isActiveComposer === false) {
1753
+ throw new Error("Cannot resume a request in an inactive chat.");
1754
+ }
1755
+ try {
1756
+ const result = await send(message);
1757
+ if (result.status === "rejected") {
1758
+ throw new Error(`Chat resume was rejected: ${result.reason}.`);
1759
+ }
1760
+ }
1761
+ catch (error) {
1740
1762
  dispatchSetupRequiredEvent(error, props.tabId, threadId);
1741
- });
1763
+ throw error;
1764
+ }
1742
1765
  }, [props.isActiveComposer, props.tabId, send, threadId]);
1743
1766
  const submitSuggestion = useCallback((suggestion) => {
1744
1767
  const handler = suggestionSubmitRef.current;
@@ -1899,16 +1922,15 @@ const AgentKitAssistantChatBody = forwardRef(function AgentKitAssistantChatBody(
1899
1922
  onImplementPlan: implementPlan,
1900
1923
  };
1901
1924
  return (_jsxs(AgentKitSurfaceContext.Provider, { value: surfaceContext, children: [props.isActiveComposer === false ? null : (_jsx(McpAgentKitConnectionResume, { onResume: ({ threadId: targetThreadId, runId, requestId }, request) => {
1902
- if (targetThreadId !== threadId)
1903
- return;
1925
+ if (targetThreadId !== threadId) {
1926
+ throw new Error("Cannot resume a connection request in another chat.");
1927
+ }
1904
1928
  return control.resolveConnectionRequest(runId, requestId, {
1905
1929
  status: "connected",
1906
1930
  message: request.message,
1907
1931
  });
1908
- }, onMessageResume: (request) => {
1909
- resumeIntegrationPrompt(request.message);
1910
- } })), _jsx(RunStuckBanner, { threadId: threadId, enabled: props.isActiveComposer !== false, apiUrl: props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"), autoRetry: true, autoRetryOwnerId: props.browserTabId, hasInFlightWork: () => Object.values(thread.tools).some((tool) => tool.status === "running") ||
1911
- Object.values(thread.activities).some((activity) => activity.status === "running"), isAwaitingResponse: () => isRunning, onRetry: () => void sendRecoveryMessage(RECOVERY_CONTINUE_PROMPT, "continue") }), _jsx(AgentKitChat, { className: props.className, composerProps: { attachmentsEnabled: fileStorageConfigured }, hasRenderedMessages: hasRenderedMessages, emptyComposerPlacement: props.centerComposerWhenEmpty ? "center" : "bottom", title: props.showHeader === false ? undefined : props.emptyStateText, autoScroll: true })] }));
1932
+ }, onMessageResume: (request) => resumeIntegrationPrompt(request.message) })), _jsx(RunStuckBanner, { threadId: threadId, enabled: props.isActiveComposer !== false, apiUrl: props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"), autoRetry: true, autoRetryOwnerId: props.browserTabId, hasInFlightWork: () => Object.values(thread.tools).some((tool) => tool.status === "running") ||
1933
+ Object.values(thread.activities).some((activity) => activity.status === "running"), isAwaitingResponse: () => isRunning, onRetry: () => void sendRecoveryMessage(RECOVERY_CONTINUE_PROMPT, "continue") }), history?.historyLoadFailed ? (_jsxs("div", { role: "alert", className: "mx-3 mb-2 flex items-center justify-between gap-3 rounded-md border border-border px-3 py-2 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: t("agentChat.message.historyUnavailable") }), _jsx("button", { type: "button", onClick: history.retryHistory, disabled: history.isRetryingHistory, className: "shrink-0 font-medium text-foreground hover:underline disabled:cursor-not-allowed disabled:opacity-50", children: t("agentChat.common.retry") })] })) : null, _jsx(AgentKitChat, { className: props.className, composerProps: { attachmentsEnabled: fileStorageConfigured }, hasRenderedMessages: hasRenderedMessages, emptyComposerPlacement: props.centerComposerWhenEmpty ? "center" : "bottom", title: props.showHeader === false ? undefined : props.emptyStateText, autoScroll: true })] }));
1912
1934
  });
1913
1935
  function AgentKitComposerSlot({ threadId }) {
1914
1936
  const surface = useAgentKitSurface();
@@ -2278,9 +2300,9 @@ function AgentKitComposerSurface({ threadId, props, composerContext, canChat, se
2278
2300
  props.composerSubmissionDisabled ||
2279
2301
  isSubmissionInFlight, 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, !canChat && !setupMissing && providerStatus !== "configured" ? (_jsx(GuidedQuestionProviderGate, { providerStatus: providerStatus, onRetry: 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) ||
2280
2302
  props.composerDisabled ||
2281
- isRestoring ||
2282
- isSubmissionInFlight, submissionDisabled: (!canChat && !providerSubmissionPending) ||
2283
- props.composerSubmissionDisabled === true, onDisabledClick: props.composerDisabled || !setupMissing
2303
+ isRestoring, submissionDisabled: (!canChat && !providerSubmissionPending) ||
2304
+ props.composerSubmissionDisabled === true ||
2305
+ isSubmissionInFlight, onDisabledClick: props.composerDisabled || !setupMissing
2284
2306
  ? undefined
2285
2307
  : () => {
2286
2308
  bounceSetupCard();
@@ -2460,7 +2482,7 @@ function AgentKitReasoning({ value, active, resetKey, }) {
2460
2482
  }
2461
2483
  function AgentKitConnectionRequest({ value, runId, threadId, }) {
2462
2484
  const control = useAgentKitControl();
2463
- return (_jsx(McpAgentKitConnectionRequestCard, { provider: value.provider, detail: value.detail, target: { threadId, runId, requestId: value.id }, onConnected: () => control.resolveConnectionRequest(runId, value.id, {
2485
+ return (_jsx(McpAgentKitConnectionRequestCard, { provider: value.provider, detail: value.detail, reason: value.reason, status: value.status, appId: value.appId, source: value.source, target: { threadId, runId, requestId: value.id }, onConnected: () => control.resolveConnectionRequest(runId, value.id, {
2464
2486
  status: "connected",
2465
2487
  }), onDeclined: () => control.resolveConnectionRequest(runId, value.id, {
2466
2488
  status: "declined",