@shuffleio/shuffle-mcps 0.0.8 → 0.0.9

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/dist/index.d.cts CHANGED
@@ -276,8 +276,26 @@ interface AppSearchDrawerProps {
276
276
  highlightAppName?: string;
277
277
  /** Delay before the highlight kicks in (default 5000ms) */
278
278
  highlightDelayMs?: number;
279
+ /** Enable multi-select: clicking apps toggles them in/out of the selection,
280
+ * drawer stays open, and the picker shows checkboxes + a primary-bordered
281
+ * highlight on already-chosen rows. */
282
+ multiSelect?: boolean;
283
+ /** Currently chosen apps (used to highlight rows in multi-select mode).
284
+ * Match is by objectID first, then by normalized name. */
285
+ selectedApps?: Array<{
286
+ name: string;
287
+ id?: string | null;
288
+ icon?: string;
289
+ }>;
290
+ /** Fires whenever the selection changes in multi-select mode. */
291
+ onSelectionChange?: (apps: Array<{
292
+ name: string;
293
+ id: string | null;
294
+ icon: string;
295
+ categories: string[];
296
+ }>) => void;
279
297
  }
280
- declare function AppSearchDrawer({ open, onClose, initialQuery, title, subtitle, anchor, width, showPipelinesBanner, onQuickSelect, onSelectOverride, onDetailClose, onAddToCanvas, priorityCategory, connectionPathApps, pinnedApps, highlightAppName, highlightDelayMs, }: AppSearchDrawerProps): react_jsx_runtime.JSX.Element;
298
+ declare function AppSearchDrawer({ open, onClose, initialQuery, title, subtitle, anchor, width, showPipelinesBanner, onQuickSelect, onSelectOverride, onDetailClose, onAddToCanvas, priorityCategory, connectionPathApps, pinnedApps, highlightAppName, highlightDelayMs, multiSelect, selectedApps, onSelectionChange, }: AppSearchDrawerProps): react_jsx_runtime.JSX.Element;
281
299
 
282
300
  declare function ShufflePipelinesBanner(): react_jsx_runtime.JSX.Element;
283
301
 
@@ -354,20 +372,15 @@ interface TryMcpSectionProps {
354
372
  }
355
373
  declare function TryMcpSection({ appName, appIcon, appId, categories }: TryMcpSectionProps): react_jsx_runtime.JSX.Element;
356
374
 
357
- /**
358
- * SingulActionsPreview — Standalone "Try individual actions" block.
359
- *
360
- * Renders the action picker (grouped by category), curl/python toggle,
361
- * editable snippet, Play button (calls Shuffle Tools `execute_python` or
362
- * the http app `curl` action) and a response area that streams in.
363
- *
364
- * Self-contained — pass in the app name + categories. Optionally pass
365
- * `activeOrgId` so multi-org curl previews include the right Org-Id header.
366
- */
367
- declare const SingulActionsPreview: ({ appName, categories, activeOrgId, }: {
375
+ declare const SingulActionsPreview: ({ appName, appIcon, categories, activeOrgId, onAuthenticate, }: {
368
376
  appName: string;
377
+ appIcon?: string;
369
378
  categories?: string[];
370
379
  activeOrgId?: string | null;
380
+ /** Optional click handler invoked when the user presses the
381
+ * "Authenticate {App}" button surfaced after an
382
+ * `action: "app_authentication"` response. */
383
+ onAuthenticate?: (appName: string) => void;
371
384
  }) => react_jsx_runtime.JSX.Element;
372
385
 
373
386
  /**
@@ -486,6 +499,20 @@ interface AgentUIProps {
486
499
  }) => void;
487
500
  /** Called whenever the active top-level view changes (start / simple / detailed). */
488
501
  onViewChange?: (view: 'start' | 'simple' | 'detailed') => void;
502
+ /**
503
+ * Called when the user saves a recurring schedule (cron expression) for the
504
+ * current prompt. When omitted, a toast is shown indicating scheduling is
505
+ * not wired up in this embed.
506
+ */
507
+ onSchedule?: (info: {
508
+ cron: string;
509
+ input: string;
510
+ onStep?: (event: {
511
+ id: 'name' | 'workflow' | 'schedule';
512
+ state: 'active' | 'done' | 'error';
513
+ detail?: string;
514
+ }) => void;
515
+ }) => void | Promise<void>;
489
516
  /**
490
517
  * Optional Shuffle API key. When provided, all `/api/v1/*` calls made by
491
518
  * this component (agent run, polling, app autoload, icon fallback) use it
@@ -689,8 +716,79 @@ interface AgentExecutionDrawerProps {
689
716
  headerSx?: SxProps<Theme>;
690
717
  /** Style overrides for the body container that wraps the embedded AgentUI. */
691
718
  bodySx?: SxProps<Theme>;
719
+ /** Optional content rendered at the top of the body, before the embedded
720
+ * AgentUI. Use this to inject a shared "Needs attention" / failure
721
+ * diagnosis banner so the drawer mirrors the timeline status pill. */
722
+ topBanner?: React.ReactNode;
723
+ /** Handler for scheduling the loaded agent prompt from the execution view. */
724
+ onSchedule?: AgentUIProps['onSchedule'];
692
725
  }
693
- declare const AgentExecutionDrawer: ({ open, onClose, run, width, apiKey, apiBaseUrl, orgId, className, paperSx, headerSx, bodySx, }: AgentExecutionDrawerProps) => react_jsx_runtime.JSX.Element;
726
+ declare const AgentExecutionDrawer: ({ open, onClose, run, width, apiKey, apiBaseUrl, orgId, className, paperSx, headerSx, bodySx, topBanner, onSchedule, }: AgentExecutionDrawerProps) => react_jsx_runtime.JSX.Element;
727
+
728
+ /**
729
+ * Shared diagnosis utilities for an agent execution result.
730
+ *
731
+ * Lives in the Shuffle-MCPs lib so every surface that displays an agent run
732
+ * (AgentUI Simple/Detailed view, AgentExecutionDrawer, the incident-side
733
+ * AgentRunResultViewer, the activity feed status pill, ...) uses the EXACT
734
+ * same logic to decide whether the run "needs review" and what to tell the
735
+ * user about it.
736
+ *
737
+ * Pure logic — no React, no MUI, no project-side imports.
738
+ */
739
+ /** Minimal run shape the diagnoser needs. Compatible with AgentRun and
740
+ * AgentUI's internal ExecutionData. */
741
+ interface DiagnosableRun {
742
+ status?: string;
743
+ results?: Array<{
744
+ result?: string;
745
+ } | any> | null;
746
+ }
747
+ /** Try to parse the result JSON from results[0].result, unwrapping AGENT-type executions. */
748
+ declare const parseRunResult: (run: DiagnosableRun) => {
749
+ raw: string | null;
750
+ parsed: any | null;
751
+ };
752
+ /** Extract failure info from a failed/aborted run. */
753
+ declare const getFailureInfo: (run: DiagnosableRun) => {
754
+ reason: string;
755
+ } | null;
756
+ /** Detect if the output content hints at an error/failure even if the run
757
+ * status is "finished". Only returns true when `diagnoseOutputWarning`
758
+ * would produce a concrete, actionable diagnosis — never on vague keyword
759
+ * matches alone. */
760
+ declare const hasOutputWarning: (run: DiagnosableRun) => boolean;
761
+ type DiagnosisEvidence = {
762
+ /** Dotted JSON path inside the parsed run result. */
763
+ path: string;
764
+ /** Trimmed snippet of the value at that path. */
765
+ value: string;
766
+ };
767
+ type OutputDiagnosis = {
768
+ kind: 'auth' | 'permission' | 'not_found' | 'rate_limit' | 'network' | 'validation' | 'generic';
769
+ status?: number;
770
+ title: string;
771
+ explanation: string;
772
+ remediation: string;
773
+ snippet?: string;
774
+ evidence: DiagnosisEvidence[];
775
+ };
776
+ declare const diagnoseOutputWarning: (run: DiagnosableRun) => OutputDiagnosis | null;
777
+
778
+ interface Props {
779
+ run: DiagnosableRun | null | undefined;
780
+ /** Outer padding wrapper. Defaults to `{ px: 2.5, pb: 0.5 }`. */
781
+ sx?: Record<string, unknown>;
782
+ /** When provided, the banner becomes clickable and asks the host to jump
783
+ * to the underlying decision (e.g. switch to the detailed timeline,
784
+ * expand that row, scroll to it). */
785
+ onJumpToEvidence?: (decisionIndex: number) => void;
786
+ /** Stable id used to persist dismissals per-execution. Falls back to
787
+ * `run.execution_id` if present. When neither is available, dismiss
788
+ * still works for the current mount but is not persisted. */
789
+ executionId?: string;
790
+ }
791
+ declare const AgentRunDiagnosisBanner: ({ run, sx, onJumpToEvidence, executionId }: Props) => react_jsx_runtime.JSX.Element;
694
792
 
695
793
  /**
696
794
  * useAppLookup — Resolve an app's display name, image, categories,
@@ -728,6 +826,47 @@ interface AppLookupResult {
728
826
  }
729
827
  declare function useAppLookup(appName: string | null): AppLookupResult;
730
828
 
829
+ /**
830
+ * resolveApp — General-purpose app resolver.
831
+ *
832
+ * Given an app id OR name, look it up across all three known sources and
833
+ * return a unified `{ id, name, image }` triple. Used anywhere we need to
834
+ * render an app chip/icon and only have a free-form identifier (decision
835
+ * `tool`, auth-request `appName`, `app_authentication` payload, etc.).
836
+ *
837
+ * Resolution order (each pass merges in any newly-found fields, so we keep
838
+ * going until id/name/image are all known or all sources are exhausted):
839
+ * 1. /api/v1/apps/authentication — covers user-installed/active apps,
840
+ * including private ones that may not be in the public catalog.
841
+ * 2. /api/v1/apps — covers everything visible to the org (activated
842
+ * and private uploads).
843
+ * 3. Algolia `appsearch` — canonical objectID + public catalog metadata.
844
+ *
845
+ * Results are cached in-memory by normalized key so repeat lookups for the
846
+ * same name/id are free.
847
+ */
848
+ interface ResolvedApp {
849
+ /** Canonical id — Algolia objectID when known, otherwise Shuffle app id. */
850
+ id: string;
851
+ /** Display name (may be raw slug if no source had a friendly name). */
852
+ name: string;
853
+ /** Best available large image URL. Empty string if not found. */
854
+ image: string;
855
+ /** Categories from whichever source provided them. */
856
+ categories?: string[];
857
+ }
858
+ /**
859
+ * Resolve an app from id-or-name across auth + apps + Algolia.
860
+ * Returns `null` only if all three sources came back empty.
861
+ */
862
+ declare function resolveApp(idOrName: string): Promise<ResolvedApp | null>;
863
+ /** Resolve many at once — convenience wrapper. */
864
+ declare function resolveApps(idsOrNames: string[]): Promise<Record<string, ResolvedApp>>;
865
+ /** Seed the cache (e.g. from chosenApps that already carry an icon). */
866
+ declare function seedResolvedApp(idOrName: string, app: Partial<ResolvedApp>): void;
867
+ /** Clear the resolver cache (e.g. on org change). */
868
+ declare function invalidateResolvedApps(): void;
869
+
731
870
  interface IntegrationStatusProps {
732
871
  collapsed: boolean;
733
872
  /** When provided, only show integrations whose name is in this list */
@@ -830,4 +969,4 @@ type ToastApi = ((arg: ToastArg, opts?: ToastOptions) => void) & {
830
969
  };
831
970
  declare const toast: ToastApi;
832
971
 
833
- export { API_CONFIG, AgentActivityList, type AgentActivityListProps, type AgentActivityParams, type AgentActivityResponse, type AgentDecision, AgentExecutionDrawer, type AgentExecutionDrawerProps, type AgentRun, AgentRunDrawer, type AgentRunDrawerProps, type AgentRunDrawerTab, type AgentRunResult, AgentUI, type AgentUIApp, type AgentUIProps, type AlgoliaSearchApp, AppAuthSection, type AppAuthSectionProps, type AppAuthentication, AppDetailDrawer, AppDetailProvider, type AppLookupResult, AppSearchDrawer, type AppSelectedEvent, AppTitleHeader, type AppTitleHeaderProps, type CustomStyles, IntegrationStatus, ShuffleMCP, type ShuffleMCPHandle, type ShuffleMCPProps, ShufflePipelinesBanner, SingulActionsPreview, TryMcpSection, type TryMcpSectionProps, ShuffleMCP as default, getApiUrl, getAuthHeader, refreshAllIntegrationStatus, searchAgentActivity, setToastImpl, toast, useAppAuth, useAppDetail, useAppLookup };
972
+ export { API_CONFIG, AgentActivityList, type AgentActivityListProps, type AgentActivityParams, type AgentActivityResponse, type AgentDecision, AgentExecutionDrawer, type AgentExecutionDrawerProps, type AgentRun, AgentRunDiagnosisBanner, AgentRunDrawer, type AgentRunDrawerProps, type AgentRunDrawerTab, type AgentRunResult, AgentUI, type AgentUIApp, type AgentUIProps, type AlgoliaSearchApp, AppAuthSection, type AppAuthSectionProps, type AppAuthentication, AppDetailDrawer, AppDetailProvider, type AppLookupResult, AppSearchDrawer, type AppSelectedEvent, AppTitleHeader, type AppTitleHeaderProps, type CustomStyles, type DiagnosableRun, type DiagnosisEvidence, IntegrationStatus, type OutputDiagnosis, type ResolvedApp, ShuffleMCP, type ShuffleMCPHandle, type ShuffleMCPProps, ShufflePipelinesBanner, SingulActionsPreview, TryMcpSection, type TryMcpSectionProps, ShuffleMCP as default, diagnoseOutputWarning, getApiUrl, getAuthHeader, getFailureInfo, hasOutputWarning, invalidateResolvedApps, parseRunResult, refreshAllIntegrationStatus, resolveApp, resolveApps, searchAgentActivity, seedResolvedApp, setToastImpl, toast, useAppAuth, useAppDetail, useAppLookup };
package/dist/index.d.ts CHANGED
@@ -276,8 +276,26 @@ interface AppSearchDrawerProps {
276
276
  highlightAppName?: string;
277
277
  /** Delay before the highlight kicks in (default 5000ms) */
278
278
  highlightDelayMs?: number;
279
+ /** Enable multi-select: clicking apps toggles them in/out of the selection,
280
+ * drawer stays open, and the picker shows checkboxes + a primary-bordered
281
+ * highlight on already-chosen rows. */
282
+ multiSelect?: boolean;
283
+ /** Currently chosen apps (used to highlight rows in multi-select mode).
284
+ * Match is by objectID first, then by normalized name. */
285
+ selectedApps?: Array<{
286
+ name: string;
287
+ id?: string | null;
288
+ icon?: string;
289
+ }>;
290
+ /** Fires whenever the selection changes in multi-select mode. */
291
+ onSelectionChange?: (apps: Array<{
292
+ name: string;
293
+ id: string | null;
294
+ icon: string;
295
+ categories: string[];
296
+ }>) => void;
279
297
  }
280
- declare function AppSearchDrawer({ open, onClose, initialQuery, title, subtitle, anchor, width, showPipelinesBanner, onQuickSelect, onSelectOverride, onDetailClose, onAddToCanvas, priorityCategory, connectionPathApps, pinnedApps, highlightAppName, highlightDelayMs, }: AppSearchDrawerProps): react_jsx_runtime.JSX.Element;
298
+ declare function AppSearchDrawer({ open, onClose, initialQuery, title, subtitle, anchor, width, showPipelinesBanner, onQuickSelect, onSelectOverride, onDetailClose, onAddToCanvas, priorityCategory, connectionPathApps, pinnedApps, highlightAppName, highlightDelayMs, multiSelect, selectedApps, onSelectionChange, }: AppSearchDrawerProps): react_jsx_runtime.JSX.Element;
281
299
 
282
300
  declare function ShufflePipelinesBanner(): react_jsx_runtime.JSX.Element;
283
301
 
@@ -354,20 +372,15 @@ interface TryMcpSectionProps {
354
372
  }
355
373
  declare function TryMcpSection({ appName, appIcon, appId, categories }: TryMcpSectionProps): react_jsx_runtime.JSX.Element;
356
374
 
357
- /**
358
- * SingulActionsPreview — Standalone "Try individual actions" block.
359
- *
360
- * Renders the action picker (grouped by category), curl/python toggle,
361
- * editable snippet, Play button (calls Shuffle Tools `execute_python` or
362
- * the http app `curl` action) and a response area that streams in.
363
- *
364
- * Self-contained — pass in the app name + categories. Optionally pass
365
- * `activeOrgId` so multi-org curl previews include the right Org-Id header.
366
- */
367
- declare const SingulActionsPreview: ({ appName, categories, activeOrgId, }: {
375
+ declare const SingulActionsPreview: ({ appName, appIcon, categories, activeOrgId, onAuthenticate, }: {
368
376
  appName: string;
377
+ appIcon?: string;
369
378
  categories?: string[];
370
379
  activeOrgId?: string | null;
380
+ /** Optional click handler invoked when the user presses the
381
+ * "Authenticate {App}" button surfaced after an
382
+ * `action: "app_authentication"` response. */
383
+ onAuthenticate?: (appName: string) => void;
371
384
  }) => react_jsx_runtime.JSX.Element;
372
385
 
373
386
  /**
@@ -486,6 +499,20 @@ interface AgentUIProps {
486
499
  }) => void;
487
500
  /** Called whenever the active top-level view changes (start / simple / detailed). */
488
501
  onViewChange?: (view: 'start' | 'simple' | 'detailed') => void;
502
+ /**
503
+ * Called when the user saves a recurring schedule (cron expression) for the
504
+ * current prompt. When omitted, a toast is shown indicating scheduling is
505
+ * not wired up in this embed.
506
+ */
507
+ onSchedule?: (info: {
508
+ cron: string;
509
+ input: string;
510
+ onStep?: (event: {
511
+ id: 'name' | 'workflow' | 'schedule';
512
+ state: 'active' | 'done' | 'error';
513
+ detail?: string;
514
+ }) => void;
515
+ }) => void | Promise<void>;
489
516
  /**
490
517
  * Optional Shuffle API key. When provided, all `/api/v1/*` calls made by
491
518
  * this component (agent run, polling, app autoload, icon fallback) use it
@@ -689,8 +716,79 @@ interface AgentExecutionDrawerProps {
689
716
  headerSx?: SxProps<Theme>;
690
717
  /** Style overrides for the body container that wraps the embedded AgentUI. */
691
718
  bodySx?: SxProps<Theme>;
719
+ /** Optional content rendered at the top of the body, before the embedded
720
+ * AgentUI. Use this to inject a shared "Needs attention" / failure
721
+ * diagnosis banner so the drawer mirrors the timeline status pill. */
722
+ topBanner?: React.ReactNode;
723
+ /** Handler for scheduling the loaded agent prompt from the execution view. */
724
+ onSchedule?: AgentUIProps['onSchedule'];
692
725
  }
693
- declare const AgentExecutionDrawer: ({ open, onClose, run, width, apiKey, apiBaseUrl, orgId, className, paperSx, headerSx, bodySx, }: AgentExecutionDrawerProps) => react_jsx_runtime.JSX.Element;
726
+ declare const AgentExecutionDrawer: ({ open, onClose, run, width, apiKey, apiBaseUrl, orgId, className, paperSx, headerSx, bodySx, topBanner, onSchedule, }: AgentExecutionDrawerProps) => react_jsx_runtime.JSX.Element;
727
+
728
+ /**
729
+ * Shared diagnosis utilities for an agent execution result.
730
+ *
731
+ * Lives in the Shuffle-MCPs lib so every surface that displays an agent run
732
+ * (AgentUI Simple/Detailed view, AgentExecutionDrawer, the incident-side
733
+ * AgentRunResultViewer, the activity feed status pill, ...) uses the EXACT
734
+ * same logic to decide whether the run "needs review" and what to tell the
735
+ * user about it.
736
+ *
737
+ * Pure logic — no React, no MUI, no project-side imports.
738
+ */
739
+ /** Minimal run shape the diagnoser needs. Compatible with AgentRun and
740
+ * AgentUI's internal ExecutionData. */
741
+ interface DiagnosableRun {
742
+ status?: string;
743
+ results?: Array<{
744
+ result?: string;
745
+ } | any> | null;
746
+ }
747
+ /** Try to parse the result JSON from results[0].result, unwrapping AGENT-type executions. */
748
+ declare const parseRunResult: (run: DiagnosableRun) => {
749
+ raw: string | null;
750
+ parsed: any | null;
751
+ };
752
+ /** Extract failure info from a failed/aborted run. */
753
+ declare const getFailureInfo: (run: DiagnosableRun) => {
754
+ reason: string;
755
+ } | null;
756
+ /** Detect if the output content hints at an error/failure even if the run
757
+ * status is "finished". Only returns true when `diagnoseOutputWarning`
758
+ * would produce a concrete, actionable diagnosis — never on vague keyword
759
+ * matches alone. */
760
+ declare const hasOutputWarning: (run: DiagnosableRun) => boolean;
761
+ type DiagnosisEvidence = {
762
+ /** Dotted JSON path inside the parsed run result. */
763
+ path: string;
764
+ /** Trimmed snippet of the value at that path. */
765
+ value: string;
766
+ };
767
+ type OutputDiagnosis = {
768
+ kind: 'auth' | 'permission' | 'not_found' | 'rate_limit' | 'network' | 'validation' | 'generic';
769
+ status?: number;
770
+ title: string;
771
+ explanation: string;
772
+ remediation: string;
773
+ snippet?: string;
774
+ evidence: DiagnosisEvidence[];
775
+ };
776
+ declare const diagnoseOutputWarning: (run: DiagnosableRun) => OutputDiagnosis | null;
777
+
778
+ interface Props {
779
+ run: DiagnosableRun | null | undefined;
780
+ /** Outer padding wrapper. Defaults to `{ px: 2.5, pb: 0.5 }`. */
781
+ sx?: Record<string, unknown>;
782
+ /** When provided, the banner becomes clickable and asks the host to jump
783
+ * to the underlying decision (e.g. switch to the detailed timeline,
784
+ * expand that row, scroll to it). */
785
+ onJumpToEvidence?: (decisionIndex: number) => void;
786
+ /** Stable id used to persist dismissals per-execution. Falls back to
787
+ * `run.execution_id` if present. When neither is available, dismiss
788
+ * still works for the current mount but is not persisted. */
789
+ executionId?: string;
790
+ }
791
+ declare const AgentRunDiagnosisBanner: ({ run, sx, onJumpToEvidence, executionId }: Props) => react_jsx_runtime.JSX.Element;
694
792
 
695
793
  /**
696
794
  * useAppLookup — Resolve an app's display name, image, categories,
@@ -728,6 +826,47 @@ interface AppLookupResult {
728
826
  }
729
827
  declare function useAppLookup(appName: string | null): AppLookupResult;
730
828
 
829
+ /**
830
+ * resolveApp — General-purpose app resolver.
831
+ *
832
+ * Given an app id OR name, look it up across all three known sources and
833
+ * return a unified `{ id, name, image }` triple. Used anywhere we need to
834
+ * render an app chip/icon and only have a free-form identifier (decision
835
+ * `tool`, auth-request `appName`, `app_authentication` payload, etc.).
836
+ *
837
+ * Resolution order (each pass merges in any newly-found fields, so we keep
838
+ * going until id/name/image are all known or all sources are exhausted):
839
+ * 1. /api/v1/apps/authentication — covers user-installed/active apps,
840
+ * including private ones that may not be in the public catalog.
841
+ * 2. /api/v1/apps — covers everything visible to the org (activated
842
+ * and private uploads).
843
+ * 3. Algolia `appsearch` — canonical objectID + public catalog metadata.
844
+ *
845
+ * Results are cached in-memory by normalized key so repeat lookups for the
846
+ * same name/id are free.
847
+ */
848
+ interface ResolvedApp {
849
+ /** Canonical id — Algolia objectID when known, otherwise Shuffle app id. */
850
+ id: string;
851
+ /** Display name (may be raw slug if no source had a friendly name). */
852
+ name: string;
853
+ /** Best available large image URL. Empty string if not found. */
854
+ image: string;
855
+ /** Categories from whichever source provided them. */
856
+ categories?: string[];
857
+ }
858
+ /**
859
+ * Resolve an app from id-or-name across auth + apps + Algolia.
860
+ * Returns `null` only if all three sources came back empty.
861
+ */
862
+ declare function resolveApp(idOrName: string): Promise<ResolvedApp | null>;
863
+ /** Resolve many at once — convenience wrapper. */
864
+ declare function resolveApps(idsOrNames: string[]): Promise<Record<string, ResolvedApp>>;
865
+ /** Seed the cache (e.g. from chosenApps that already carry an icon). */
866
+ declare function seedResolvedApp(idOrName: string, app: Partial<ResolvedApp>): void;
867
+ /** Clear the resolver cache (e.g. on org change). */
868
+ declare function invalidateResolvedApps(): void;
869
+
731
870
  interface IntegrationStatusProps {
732
871
  collapsed: boolean;
733
872
  /** When provided, only show integrations whose name is in this list */
@@ -830,4 +969,4 @@ type ToastApi = ((arg: ToastArg, opts?: ToastOptions) => void) & {
830
969
  };
831
970
  declare const toast: ToastApi;
832
971
 
833
- export { API_CONFIG, AgentActivityList, type AgentActivityListProps, type AgentActivityParams, type AgentActivityResponse, type AgentDecision, AgentExecutionDrawer, type AgentExecutionDrawerProps, type AgentRun, AgentRunDrawer, type AgentRunDrawerProps, type AgentRunDrawerTab, type AgentRunResult, AgentUI, type AgentUIApp, type AgentUIProps, type AlgoliaSearchApp, AppAuthSection, type AppAuthSectionProps, type AppAuthentication, AppDetailDrawer, AppDetailProvider, type AppLookupResult, AppSearchDrawer, type AppSelectedEvent, AppTitleHeader, type AppTitleHeaderProps, type CustomStyles, IntegrationStatus, ShuffleMCP, type ShuffleMCPHandle, type ShuffleMCPProps, ShufflePipelinesBanner, SingulActionsPreview, TryMcpSection, type TryMcpSectionProps, ShuffleMCP as default, getApiUrl, getAuthHeader, refreshAllIntegrationStatus, searchAgentActivity, setToastImpl, toast, useAppAuth, useAppDetail, useAppLookup };
972
+ export { API_CONFIG, AgentActivityList, type AgentActivityListProps, type AgentActivityParams, type AgentActivityResponse, type AgentDecision, AgentExecutionDrawer, type AgentExecutionDrawerProps, type AgentRun, AgentRunDiagnosisBanner, AgentRunDrawer, type AgentRunDrawerProps, type AgentRunDrawerTab, type AgentRunResult, AgentUI, type AgentUIApp, type AgentUIProps, type AlgoliaSearchApp, AppAuthSection, type AppAuthSectionProps, type AppAuthentication, AppDetailDrawer, AppDetailProvider, type AppLookupResult, AppSearchDrawer, type AppSelectedEvent, AppTitleHeader, type AppTitleHeaderProps, type CustomStyles, type DiagnosableRun, type DiagnosisEvidence, IntegrationStatus, type OutputDiagnosis, type ResolvedApp, ShuffleMCP, type ShuffleMCPHandle, type ShuffleMCPProps, ShufflePipelinesBanner, SingulActionsPreview, TryMcpSection, type TryMcpSectionProps, ShuffleMCP as default, diagnoseOutputWarning, getApiUrl, getAuthHeader, getFailureInfo, hasOutputWarning, invalidateResolvedApps, parseRunResult, refreshAllIntegrationStatus, resolveApp, resolveApps, searchAgentActivity, seedResolvedApp, setToastImpl, toast, useAppAuth, useAppDetail, useAppLookup };