@tangle-network/sandbox-ui 0.106.0 → 0.108.0

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/globals.css CHANGED
@@ -99,7 +99,6 @@
99
99
  --color-foreground: hsl(var(--foreground));
100
100
  --color-card: hsl(var(--card));
101
101
  --color-card-foreground: hsl(var(--card-foreground));
102
- --color-popover: hsl(var(--popover));
103
102
  --color-popover-foreground: hsl(var(--popover-foreground));
104
103
  --color-primary: hsl(var(--primary));
105
104
  --color-primary-foreground: hsl(var(--primary-foreground));
@@ -701,22 +700,10 @@
701
700
  width: calc(var(--spacing) * 3);
702
701
  height: calc(var(--spacing) * 3);
703
702
  }
704
- .size-3\.5 {
705
- width: calc(var(--spacing) * 3.5);
706
- height: calc(var(--spacing) * 3.5);
707
- }
708
- .size-4 {
709
- width: calc(var(--spacing) * 4);
710
- height: calc(var(--spacing) * 4);
711
- }
712
703
  .size-5 {
713
704
  width: calc(var(--spacing) * 5);
714
705
  height: calc(var(--spacing) * 5);
715
706
  }
716
- .size-8 {
717
- width: calc(var(--spacing) * 8);
718
- height: calc(var(--spacing) * 8);
719
- }
720
707
  .size-9 {
721
708
  width: calc(var(--spacing) * 9);
722
709
  height: calc(var(--spacing) * 9);
@@ -725,10 +712,6 @@
725
712
  width: calc(var(--spacing) * 10);
726
713
  height: calc(var(--spacing) * 10);
727
714
  }
728
- .size-11 {
729
- width: calc(var(--spacing) * 11);
730
- height: calc(var(--spacing) * 11);
731
- }
732
715
  .\!h-2 {
733
716
  height: calc(var(--spacing) * 2) !important;
734
717
  }
@@ -975,9 +958,6 @@
975
958
  .min-h-\[300px\] {
976
959
  min-height: 300px;
977
960
  }
978
- .min-h-\[640px\] {
979
- min-height: 640px;
980
- }
981
961
  .min-h-full {
982
962
  min-height: 100%;
983
963
  }
@@ -1260,9 +1240,6 @@
1260
1240
  .max-w-\[140px\] {
1261
1241
  max-width: 140px;
1262
1242
  }
1263
- .max-w-\[150px\] {
1264
- max-width: 150px;
1265
- }
1266
1243
  .max-w-\[250px\] {
1267
1244
  max-width: 250px;
1268
1245
  }
@@ -1320,9 +1297,6 @@
1320
1297
  .min-w-\[15rem\] {
1321
1298
  min-width: 15rem;
1322
1299
  }
1323
- .min-w-\[16rem\] {
1324
- min-width: 16rem;
1325
- }
1326
1300
  .min-w-\[20px\] {
1327
1301
  min-width: 20px;
1328
1302
  }
@@ -1472,9 +1446,6 @@
1472
1446
  .resize-y {
1473
1447
  resize: vertical;
1474
1448
  }
1475
- .\[scrollbar-width\:none\] {
1476
- scrollbar-width: none;
1477
- }
1478
1449
  .\[scrollbar-gutter\:stable\] {
1479
1450
  scrollbar-gutter: stable;
1480
1451
  }
@@ -1727,9 +1698,6 @@
1727
1698
  .overflow-y-auto {
1728
1699
  overflow-y: auto;
1729
1700
  }
1730
- .overscroll-x-contain {
1731
- overscroll-behavior-x: contain;
1732
- }
1733
1701
  .\!rounded-full {
1734
1702
  border-radius: calc(infinity * 1px) !important;
1735
1703
  }
@@ -1938,12 +1906,6 @@
1938
1906
  .border-\[var\(--md3-outline-variant\)\] {
1939
1907
  border-color: var(--md3-outline-variant);
1940
1908
  }
1941
- .border-\[var\(--status-error\,\#ff4d6d\)\]\/40 {
1942
- border-color: var(--status-error,#ff4d6d);
1943
- @supports (color: color-mix(in lab, red, red)) {
1944
- border-color: color-mix(in oklab, var(--status-error,#ff4d6d) 40%, transparent);
1945
- }
1946
- }
1947
1909
  .border-\[var\(--status-running\)\]\/30 {
1948
1910
  border-color: var(--status-running);
1949
1911
  @supports (color: color-mix(in lab, red, red)) {
@@ -2064,12 +2026,6 @@
2064
2026
  border-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
2065
2027
  }
2066
2028
  }
2067
- .border-primary\/50 {
2068
- border-color: color-mix(in srgb, hsl(var(--primary)) 50%, transparent);
2069
- @supports (color: color-mix(in lab, red, red)) {
2070
- border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
2071
- }
2072
- }
2073
2029
  .border-red-500\/20 {
2074
2030
  border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);
2075
2031
  @supports (color: color-mix(in lab, red, red)) {
@@ -2244,12 +2200,6 @@
2244
2200
  .bg-\[var\(--run-mix-waiting\)\] {
2245
2201
  background-color: var(--run-mix-waiting);
2246
2202
  }
2247
- .bg-\[var\(--status-error\,\#ff4d6d\)\]\/15 {
2248
- background-color: var(--status-error,#ff4d6d);
2249
- @supports (color: color-mix(in lab, red, red)) {
2250
- background-color: color-mix(in oklab, var(--status-error,#ff4d6d) 15%, transparent);
2251
- }
2252
- }
2253
2203
  .bg-\[var\(--status-running\)\] {
2254
2204
  background-color: var(--status-running);
2255
2205
  }
@@ -2463,9 +2413,6 @@
2463
2413
  background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
2464
2414
  }
2465
2415
  }
2466
- .bg-popover {
2467
- background-color: var(--color-popover);
2468
- }
2469
2416
  .bg-primary {
2470
2417
  background-color: var(--color-primary);
2471
2418
  }
@@ -2535,12 +2482,6 @@
2535
2482
  background-color: color-mix(in oklab, var(--color-surface-container-high) 60%, transparent);
2536
2483
  }
2537
2484
  }
2538
- .bg-surface-container-high\/95 {
2539
- background-color: var(--color-surface-container-high);
2540
- @supports (color: color-mix(in lab, red, red)) {
2541
- background-color: color-mix(in oklab, var(--color-surface-container-high) 95%, transparent);
2542
- }
2543
- }
2544
2485
  .bg-surface-container-highest {
2545
2486
  background-color: var(--color-surface-container-highest);
2546
2487
  }
@@ -3260,15 +3201,6 @@
3260
3201
  .text-\[var\(--md3-primary\)\] {
3261
3202
  color: var(--md3-primary);
3262
3203
  }
3263
- .text-\[var\(--status-error\,\#ff4d6d\)\] {
3264
- color: var(--status-error,#ff4d6d);
3265
- }
3266
- .text-\[var\(--status-error\,\#ff4d6d\)\]\/80 {
3267
- color: var(--status-error,#ff4d6d);
3268
- @supports (color: color-mix(in lab, red, red)) {
3269
- color: color-mix(in oklab, var(--status-error,#ff4d6d) 80%, transparent);
3270
- }
3271
- }
3272
3204
  .text-\[var\(--surface-danger-text\)\] {
3273
3205
  color: var(--surface-danger-text);
3274
3206
  }
@@ -3499,9 +3431,6 @@
3499
3431
  .accent-primary {
3500
3432
  accent-color: var(--color-primary);
3501
3433
  }
3502
- .\[color-scheme\:dark\] {
3503
- color-scheme: dark;
3504
- }
3505
3434
  .opacity-0 {
3506
3435
  opacity: 0%;
3507
3436
  }
@@ -3770,9 +3699,6 @@
3770
3699
  -webkit-user-select: none;
3771
3700
  user-select: none;
3772
3701
  }
3773
- .\[-ms-overflow-style\:none\] {
3774
- -ms-overflow-style: none;
3775
- }
3776
3702
  .ring-inset {
3777
3703
  --tw-ring-inset: inset;
3778
3704
  }
@@ -3887,12 +3813,6 @@
3887
3813
  .focus-within\:border-border:focus-within {
3888
3814
  border-color: var(--color-border);
3889
3815
  }
3890
- .focus-within\:border-primary\/60:focus-within {
3891
- border-color: color-mix(in srgb, hsl(var(--primary)) 60%, transparent);
3892
- @supports (color: color-mix(in lab, red, red)) {
3893
- border-color: color-mix(in oklab, var(--color-primary) 60%, transparent);
3894
- }
3895
- }
3896
3816
  @media (hover: hover) {
3897
3817
  .hover\:-translate-y-0\.5:hover {
3898
3818
  --tw-translate-y: calc(var(--spacing) * -0.5);
@@ -4011,14 +3931,6 @@
4011
3931
  .hover\:bg-\[var\(--btn-primary-hover\)\]:hover {
4012
3932
  background-color: var(--btn-primary-hover);
4013
3933
  }
4014
- .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25:hover {
4015
- background-color: var(--status-error,#ff4d6d);
4016
- }
4017
- @supports (color: color-mix(in lab, red, red)) {
4018
- .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25:hover {
4019
- background-color: color-mix(in oklab, var(--status-error,#ff4d6d) 25%, transparent);
4020
- }
4021
- }
4022
3934
  .hover\:bg-\[var\(--surface-container-high\)\]\/40:hover {
4023
3935
  background-color: var(--surface-container-high);
4024
3936
  }
@@ -4868,9 +4780,6 @@
4868
4780
  .\[\&\:\:-moz-range-track\]\:bg-border::-moz-range-track {
4869
4781
  background-color: var(--color-border);
4870
4782
  }
4871
- .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
4872
- display: none;
4873
- }
4874
4783
  .\[\&\:\:-webkit-slider-runnable-track\]\:h-1\.5::-webkit-slider-runnable-track {
4875
4784
  height: calc(var(--spacing) * 1.5);
4876
4785
  }
package/dist/hooks.d.ts CHANGED
@@ -2,7 +2,7 @@ export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthU
2
2
  import { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface';
3
3
  import * as _tanstack_react_query from '@tanstack/react-query';
4
4
  import { Session } from './types.js';
5
- export { e as SESSION_STREAM_RECONNECT_DELAY_MS, f as SendMessageOptions, S as SessionInfo, g as SessionStreamError, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-Cjt_Wq7g.js';
5
+ export { f as SESSION_STREAM_RECONNECT_DELAY_MS, g as SendMessageOptions, S as SessionDegradation, a as SessionInfo, h as SessionStreamError, b as SidecarAuth, U as UseSessionStreamOptions, c as UseSessionStreamResult, d as UseSidecarAuthOptions, u as useSessionStream, e as useSidecarAuth } from './sdk-hooks-Djkjq4cp.js';
6
6
  import '@tangle-network/ui/types';
7
7
  import '@tangle-network/ui/stores';
8
8
  import '@tangle-network/ui/sdk-hooks';
package/dist/hooks.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  SessionStreamError,
24
24
  useSessionStream,
25
25
  useSidecarAuth
26
- } from "./chunk-3GX5BSD4.js";
26
+ } from "./chunk-72UF2H5H.js";
27
27
  import {
28
28
  usePtySession
29
29
  } from "./chunk-F7LNWZQR.js";
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export { AgentWorkbench, ApprovalConfidenceStat, ApprovalItem, ApprovalQueue, Ap
5
5
  export { ArtifactView, BRAND_PRISM_THEME, CodeSurface, CodeSurfaceProps, CodeView, CodeViewProps, DiffStats, DiffView, DiffViewProps, FileBreadcrumb, FileBreadcrumbProps, GitStatusBadge, PanelHeader, PanelHeaderProps, PillTabItem, PillTabs, PillTabsProps, PreviewView, PreviewViewProps, SandboxArtifact, SandboxArtifactPane, SandboxArtifactPaneProps, SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage } from './workbench.js';
6
6
  export { OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode } from '@tangle-network/ui/openui';
7
7
  export { AgentTimeline, AgentTimelineArtifactItem, AgentTimelineCustomItem, AgentTimelineItem, AgentTimelineMessageItem, AgentTimelineProps, AgentTimelineStatusItem, AgentTimelineTone, AgentTimelineToolGroupItem, AgentTimelineToolItem, ChatContainer, ChatContainerProps, ChatMessage, ChatMessageProps, MessageList, MessageListProps, MessageRole, ThinkingIndicator, ThinkingIndicatorProps, UserMessage, UserMessageProps } from '@tangle-network/ui/chat';
8
- export { AgentComposer, AgentComposerMention, AgentComposerProps, AgentProfileCapability, AgentProfileDraft, AgentProfileOption, AgentProfilePicker, AgentProfilePickerProps, ArtifactAgentDock, ArtifactAgentDockProps, ArtifactAgentDockTransport, ArtifactDockMessage, ArtifactDockStreamEvent, ArtifactKind, ArtifactScope, ComposerContextItem, ComposerFile, ComposerFileRejection, ComposerFileValidationConfig, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, MENTION_PILL_CLASS, MentionItem, ReasoningLevel, ReasoningLevelOption, ReasoningLevelPicker, ReasoningLevelPickerProps, createFetchTransport, isAcceptedType, validateComposerFiles } from './chat.js';
8
+ export { AgentProfileCapability, AgentProfileDraft, AgentProfileOption, AgentProfilePicker, AgentProfilePickerProps, ArtifactAgentDock, ArtifactAgentDockProps, ArtifactAgentDockTransport, ArtifactDockMessage, ArtifactDockStreamEvent, ArtifactKind, ArtifactScope, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, ReasoningLevel, ReasoningLevelOption, ReasoningLevelPicker, ReasoningLevelPickerProps, createFetchTransport } from './chat.js';
9
9
  export { HarnessType, modelProvider, snapHarnessToModel } from '@tangle-network/agent-interface';
10
10
  export { ExpandedToolDetail, ExpandedToolDetailProps, FeedSegment, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps, RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot, ToolCallData, ToolCallFeed, ToolCallFeedProps, ToolCallStatus, ToolCallType, parseToolEvent } from '@tangle-network/ui/run';
11
11
  export { CommandPreview, CommandPreviewProps, DiffPreview, DiffPreviewProps, GlobResultsPreview, GlobResultsPreviewProps, GrepResultsPreview, GrepResultsPreviewProps, QuestionPreview, QuestionPreviewProps, WebSearchPreview, WebSearchPreviewProps, WriteFilePreview, WriteFilePreviewProps } from '@tangle-network/ui/tool-previews';
@@ -18,7 +18,7 @@ export { AuthHeader, AuthHeaderProps, GitHubLoginButton, GitHubLoginButtonProps,
18
18
  export { TangleLoginButton, TangleLoginButtonProps } from './auth.js';
19
19
  export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useLiveTime, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream } from '@tangle-network/ui/hooks';
20
20
  export { SandboxMetrics, SidecarMetricsPayload, UsePtySessionOptions, UsePtySessionReturn, UseSandboxMetricsOptions, UseSandboxMetricsResult, useCreateSession, useDeleteSession, usePtySession, useRenameSession, useSandboxMetrics, useSessions } from './hooks.js';
21
- export { S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-Cjt_Wq7g.js';
21
+ export { S as SessionDegradation, a as SessionInfo, b as SidecarAuth, U as UseSessionStreamOptions, c as UseSessionStreamResult, d as UseSidecarAuthOptions, u as useSessionStream, e as useSidecarAuth } from './sdk-hooks-Djkjq4cp.js';
22
22
  export { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, RegisterActiveSessionOptions, SessionProjectKey, activeSessionsAtom, addMessage, addParts, bumpActiveSessionActivity, clearChat, getActiveSession, getAllActiveSessions, getAllProjectActivity, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, messagesAtom, partMapAtom, registerActiveSession, resetActiveSessions, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useHasBackgroundRunningSessions, useNavbarSessions, useProjectActivity, useProjectSessions, useSessionsByActivity, useTotalRunningSessions } from '@tangle-network/ui/stores';
23
23
  export { ChatSession, connectSession, disconnectSession, sessionAtom } from './stores.js';
24
24
  export { AgentBranding, CustomToolRenderer, DisplayVariant, FinalTextPart, GroupedMessage, MessageRun, MessageUser, ReasoningPart, Run, RunStats, SessionMessage, SessionPart, TextPart, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime } from '@tangle-network/ui/types';
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  useSessionStream,
23
23
  useSidecarAuth
24
- } from "./chunk-3GX5BSD4.js";
24
+ } from "./chunk-72UF2H5H.js";
25
25
  import {
26
26
  activeSessionsAtom,
27
27
  addMessage,
@@ -63,6 +63,19 @@ import {
63
63
  useTotalRunningSessions
64
64
  } from "./chunk-WID73FPH.js";
65
65
  import "./chunk-2BUPSB7O.js";
66
+ import {
67
+ TOOL_CATEGORY_ICONS,
68
+ cn,
69
+ copyText,
70
+ formatBytes,
71
+ formatDuration,
72
+ formatUptime,
73
+ getToolCategory,
74
+ getToolDisplayMetadata,
75
+ getToolErrorText,
76
+ timeAgo,
77
+ truncateText
78
+ } from "./chunk-TK46XFLM.js";
66
79
  import {
67
80
  AuthHeader,
68
81
  GitHubLoginButton,
@@ -71,7 +84,6 @@ import {
71
84
  UserMenu
72
85
  } from "./chunk-IOB2PW5Z.js";
73
86
  import {
74
- AgentComposer,
75
87
  AgentProfilePicker,
76
88
  AgentTimeline,
77
89
  ArtifactAgentDock,
@@ -84,27 +96,9 @@ import {
84
96
  ThinkingIndicator,
85
97
  UserMessage,
86
98
  createFetchTransport,
87
- isAcceptedType,
88
99
  modelProvider,
89
- snapHarnessToModel,
90
- validateComposerFiles
91
- } from "./chunk-XIXYQNXD.js";
92
- import {
93
- TOOL_CATEGORY_ICONS,
94
- cn,
95
- copyText,
96
- formatBytes,
97
- formatDuration,
98
- formatUptime,
99
- getToolCategory,
100
- getToolDisplayMetadata,
101
- getToolErrorText,
102
- timeAgo,
103
- truncateText
104
- } from "./chunk-TK46XFLM.js";
105
- import {
106
- MENTION_PILL_CLASS
107
- } from "./chunk-WGOOQAW3.js";
100
+ snapHarnessToModel
101
+ } from "./chunk-EKYA6AFY.js";
108
102
  import {
109
103
  ExpandedToolDetail,
110
104
  InlineThinkingItem,
@@ -138,7 +132,7 @@ import {
138
132
  dispatchSessionCreated,
139
133
  shellShouldRevalidate,
140
134
  useOptimisticSessionItems
141
- } from "./chunk-OI7HEWLZ.js";
135
+ } from "./chunk-D5VXCWUG.js";
142
136
  import {
143
137
  BRAND_PRISM_THEME,
144
138
  CodeSurface,
@@ -365,7 +359,6 @@ import {
365
359
  import { Markdown } from "@tangle-network/ui/markdown";
366
360
  export {
367
361
  ActivityFeed,
368
- AgentComposer,
369
362
  AgentProfilePicker,
370
363
  AgentTimeline,
371
364
  AgentWorkbench,
@@ -460,7 +453,6 @@ export {
460
453
  LiveDuration,
461
454
  LoginLayout,
462
455
  Logo,
463
- MENTION_PILL_CLASS,
464
456
  Markdown,
465
457
  MessageList,
466
458
  Metric,
@@ -627,7 +619,6 @@ export {
627
619
  getToolErrorText,
628
620
  getTotalRunningSessionCount,
629
621
  hasBackgroundRunningSessions,
630
- isAcceptedType,
631
622
  isStreamingAtom,
632
623
  messagesAtom,
633
624
  modelBrandFor,
@@ -682,6 +673,5 @@ export {
682
673
  useTheme,
683
674
  useToast,
684
675
  useToolCallStream,
685
- useTotalRunningSessions,
686
- validateComposerFiles
676
+ useTotalRunningSessions
687
677
  };
@@ -38,6 +38,31 @@ interface SendMessageOptions {
38
38
  * selected harness/model actually supports (a capability filter), never a hard-coded subset. */
39
39
  reasoningEffort?: ReasoningEffort;
40
40
  }
41
+ /**
42
+ * A sandbox-level condition that degrades the session without ending it.
43
+ *
44
+ * Distinct from `error`, which reports a turn that failed: the session here is
45
+ * running and will answer, it is just missing something the caller asked for.
46
+ * Reported separately so it is not cleared by the next successful turn — the
47
+ * condition outlives the turn that revealed it.
48
+ */
49
+ interface SessionDegradation {
50
+ /** Which capability is degraded. A union so this can grow without a break. */
51
+ readonly kind: 'hub-connections';
52
+ /** Machine-readable cause. */
53
+ readonly reason: string;
54
+ /** Operator/user-facing sentence, authored by the sidecar. */
55
+ readonly message: string;
56
+ /**
57
+ * What the session asked for, NOT how much it lost.
58
+ *
59
+ * There is deliberately no count of missing integrations: the sidecar reaches
60
+ * this state only for an attach-all request, and the call that would
61
+ * enumerate the tenant's connections is the one that failed authentication.
62
+ * Any number rendered here would be fabricated.
63
+ */
64
+ readonly requestShape: string;
65
+ }
41
66
  interface UseSessionStreamResult {
42
67
  /** All messages in the session (fetched + streaming). */
43
68
  messages: SessionMessage[];
@@ -55,6 +80,21 @@ interface UseSessionStreamResult {
55
80
  error: string | null;
56
81
  /** Whether the SSE connection is active. */
57
82
  connected: boolean;
83
+ /**
84
+ * The degradation currently reported for THIS session, or `null`.
85
+ *
86
+ * Today the only one is a Hub credential the sandbox could not present, which
87
+ * leaves the agent with an EMPTY toolbelt while the session otherwise runs
88
+ * normally. Without surfacing it, that state is indistinguishable to the user
89
+ * from having connected no integrations at all — so a caller that renders a
90
+ * transcript should render this too.
91
+ *
92
+ * Seeded from session status rather than derived from the live stream alone:
93
+ * the sidecar's bus never replays, so a reload — or attaching a beat after
94
+ * spawn — would otherwise show a normal-looking session with no tools and no
95
+ * explanation. Live frames update it, and a recovered credential clears it.
96
+ */
97
+ degradation: SessionDegradation | null;
58
98
  }
59
99
  declare class SessionStreamError extends Error {
60
100
  readonly code: string;
@@ -102,4 +142,4 @@ interface SidecarAuth {
102
142
  */
103
143
  declare function useSidecarAuth({ resourceId, apiUrl, signMessage }: UseSidecarAuthOptions): SidecarAuth;
104
144
 
105
- export { type SessionInfo as S, type UseSessionStreamOptions as U, type SidecarAuth as a, type UseSessionStreamResult as b, type UseSidecarAuthOptions as c, useSidecarAuth as d, SESSION_STREAM_RECONNECT_DELAY_MS as e, type SendMessageOptions as f, SessionStreamError as g, useSessionStream as u };
145
+ export { type SessionDegradation as S, type UseSessionStreamOptions as U, type SessionInfo as a, type SidecarAuth as b, type UseSessionStreamResult as c, type UseSidecarAuthOptions as d, useSidecarAuth as e, SESSION_STREAM_RECONNECT_DELAY_MS as f, type SendMessageOptions as g, SessionStreamError as h, useSessionStream as u };
@@ -1,4 +1,4 @@
1
1
  export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, TaskStreamEvent, TerminalStreamEvent, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, useAutoScroll, useDropdownMenu, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream } from '@tangle-network/ui/sdk-hooks';
2
- export { S as SessionInfo, a as SidecarAuth, U as UseSessionStreamOptions, b as UseSessionStreamResult, c as UseSidecarAuthOptions, u as useSessionStream, d as useSidecarAuth } from './sdk-hooks-Cjt_Wq7g.js';
2
+ export { a as SessionInfo, b as SidecarAuth, U as UseSessionStreamOptions, c as UseSessionStreamResult, d as UseSidecarAuthOptions, u as useSessionStream, e as useSidecarAuth } from './sdk-hooks-Djkjq4cp.js';
3
3
  import '@tangle-network/agent-interface';
4
4
  import '@tangle-network/ui/types';
package/dist/sdk-hooks.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  useSessionStream,
3
3
  useSidecarAuth
4
- } from "./chunk-3GX5BSD4.js";
4
+ } from "./chunk-72UF2H5H.js";
5
5
  import "./chunk-CZ7CSFO4.js";
6
6
 
7
7
  // src/sdk-hooks.ts
package/dist/styles.css CHANGED
@@ -99,7 +99,6 @@
99
99
  --color-foreground: hsl(var(--foreground));
100
100
  --color-card: hsl(var(--card));
101
101
  --color-card-foreground: hsl(var(--card-foreground));
102
- --color-popover: hsl(var(--popover));
103
102
  --color-popover-foreground: hsl(var(--popover-foreground));
104
103
  --color-primary: hsl(var(--primary));
105
104
  --color-primary-foreground: hsl(var(--primary-foreground));
@@ -701,22 +700,10 @@
701
700
  width: calc(var(--spacing) * 3);
702
701
  height: calc(var(--spacing) * 3);
703
702
  }
704
- .size-3\.5 {
705
- width: calc(var(--spacing) * 3.5);
706
- height: calc(var(--spacing) * 3.5);
707
- }
708
- .size-4 {
709
- width: calc(var(--spacing) * 4);
710
- height: calc(var(--spacing) * 4);
711
- }
712
703
  .size-5 {
713
704
  width: calc(var(--spacing) * 5);
714
705
  height: calc(var(--spacing) * 5);
715
706
  }
716
- .size-8 {
717
- width: calc(var(--spacing) * 8);
718
- height: calc(var(--spacing) * 8);
719
- }
720
707
  .size-9 {
721
708
  width: calc(var(--spacing) * 9);
722
709
  height: calc(var(--spacing) * 9);
@@ -725,10 +712,6 @@
725
712
  width: calc(var(--spacing) * 10);
726
713
  height: calc(var(--spacing) * 10);
727
714
  }
728
- .size-11 {
729
- width: calc(var(--spacing) * 11);
730
- height: calc(var(--spacing) * 11);
731
- }
732
715
  .\!h-2 {
733
716
  height: calc(var(--spacing) * 2) !important;
734
717
  }
@@ -975,9 +958,6 @@
975
958
  .min-h-\[300px\] {
976
959
  min-height: 300px;
977
960
  }
978
- .min-h-\[640px\] {
979
- min-height: 640px;
980
- }
981
961
  .min-h-full {
982
962
  min-height: 100%;
983
963
  }
@@ -1260,9 +1240,6 @@
1260
1240
  .max-w-\[140px\] {
1261
1241
  max-width: 140px;
1262
1242
  }
1263
- .max-w-\[150px\] {
1264
- max-width: 150px;
1265
- }
1266
1243
  .max-w-\[250px\] {
1267
1244
  max-width: 250px;
1268
1245
  }
@@ -1320,9 +1297,6 @@
1320
1297
  .min-w-\[15rem\] {
1321
1298
  min-width: 15rem;
1322
1299
  }
1323
- .min-w-\[16rem\] {
1324
- min-width: 16rem;
1325
- }
1326
1300
  .min-w-\[20px\] {
1327
1301
  min-width: 20px;
1328
1302
  }
@@ -1472,9 +1446,6 @@
1472
1446
  .resize-y {
1473
1447
  resize: vertical;
1474
1448
  }
1475
- .\[scrollbar-width\:none\] {
1476
- scrollbar-width: none;
1477
- }
1478
1449
  .\[scrollbar-gutter\:stable\] {
1479
1450
  scrollbar-gutter: stable;
1480
1451
  }
@@ -1727,9 +1698,6 @@
1727
1698
  .overflow-y-auto {
1728
1699
  overflow-y: auto;
1729
1700
  }
1730
- .overscroll-x-contain {
1731
- overscroll-behavior-x: contain;
1732
- }
1733
1701
  .\!rounded-full {
1734
1702
  border-radius: calc(infinity * 1px) !important;
1735
1703
  }
@@ -1938,12 +1906,6 @@
1938
1906
  .border-\[var\(--md3-outline-variant\)\] {
1939
1907
  border-color: var(--md3-outline-variant);
1940
1908
  }
1941
- .border-\[var\(--status-error\,\#ff4d6d\)\]\/40 {
1942
- border-color: var(--status-error,#ff4d6d);
1943
- @supports (color: color-mix(in lab, red, red)) {
1944
- border-color: color-mix(in oklab, var(--status-error,#ff4d6d) 40%, transparent);
1945
- }
1946
- }
1947
1909
  .border-\[var\(--status-running\)\]\/30 {
1948
1910
  border-color: var(--status-running);
1949
1911
  @supports (color: color-mix(in lab, red, red)) {
@@ -2064,12 +2026,6 @@
2064
2026
  border-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
2065
2027
  }
2066
2028
  }
2067
- .border-primary\/50 {
2068
- border-color: color-mix(in srgb, hsl(var(--primary)) 50%, transparent);
2069
- @supports (color: color-mix(in lab, red, red)) {
2070
- border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
2071
- }
2072
- }
2073
2029
  .border-red-500\/20 {
2074
2030
  border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);
2075
2031
  @supports (color: color-mix(in lab, red, red)) {
@@ -2244,12 +2200,6 @@
2244
2200
  .bg-\[var\(--run-mix-waiting\)\] {
2245
2201
  background-color: var(--run-mix-waiting);
2246
2202
  }
2247
- .bg-\[var\(--status-error\,\#ff4d6d\)\]\/15 {
2248
- background-color: var(--status-error,#ff4d6d);
2249
- @supports (color: color-mix(in lab, red, red)) {
2250
- background-color: color-mix(in oklab, var(--status-error,#ff4d6d) 15%, transparent);
2251
- }
2252
- }
2253
2203
  .bg-\[var\(--status-running\)\] {
2254
2204
  background-color: var(--status-running);
2255
2205
  }
@@ -2463,9 +2413,6 @@
2463
2413
  background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
2464
2414
  }
2465
2415
  }
2466
- .bg-popover {
2467
- background-color: var(--color-popover);
2468
- }
2469
2416
  .bg-primary {
2470
2417
  background-color: var(--color-primary);
2471
2418
  }
@@ -2535,12 +2482,6 @@
2535
2482
  background-color: color-mix(in oklab, var(--color-surface-container-high) 60%, transparent);
2536
2483
  }
2537
2484
  }
2538
- .bg-surface-container-high\/95 {
2539
- background-color: var(--color-surface-container-high);
2540
- @supports (color: color-mix(in lab, red, red)) {
2541
- background-color: color-mix(in oklab, var(--color-surface-container-high) 95%, transparent);
2542
- }
2543
- }
2544
2485
  .bg-surface-container-highest {
2545
2486
  background-color: var(--color-surface-container-highest);
2546
2487
  }
@@ -3260,15 +3201,6 @@
3260
3201
  .text-\[var\(--md3-primary\)\] {
3261
3202
  color: var(--md3-primary);
3262
3203
  }
3263
- .text-\[var\(--status-error\,\#ff4d6d\)\] {
3264
- color: var(--status-error,#ff4d6d);
3265
- }
3266
- .text-\[var\(--status-error\,\#ff4d6d\)\]\/80 {
3267
- color: var(--status-error,#ff4d6d);
3268
- @supports (color: color-mix(in lab, red, red)) {
3269
- color: color-mix(in oklab, var(--status-error,#ff4d6d) 80%, transparent);
3270
- }
3271
- }
3272
3204
  .text-\[var\(--surface-danger-text\)\] {
3273
3205
  color: var(--surface-danger-text);
3274
3206
  }
@@ -3499,9 +3431,6 @@
3499
3431
  .accent-primary {
3500
3432
  accent-color: var(--color-primary);
3501
3433
  }
3502
- .\[color-scheme\:dark\] {
3503
- color-scheme: dark;
3504
- }
3505
3434
  .opacity-0 {
3506
3435
  opacity: 0%;
3507
3436
  }
@@ -3770,9 +3699,6 @@
3770
3699
  -webkit-user-select: none;
3771
3700
  user-select: none;
3772
3701
  }
3773
- .\[-ms-overflow-style\:none\] {
3774
- -ms-overflow-style: none;
3775
- }
3776
3702
  .ring-inset {
3777
3703
  --tw-ring-inset: inset;
3778
3704
  }
@@ -3887,12 +3813,6 @@
3887
3813
  .focus-within\:border-border:focus-within {
3888
3814
  border-color: var(--color-border);
3889
3815
  }
3890
- .focus-within\:border-primary\/60:focus-within {
3891
- border-color: color-mix(in srgb, hsl(var(--primary)) 60%, transparent);
3892
- @supports (color: color-mix(in lab, red, red)) {
3893
- border-color: color-mix(in oklab, var(--color-primary) 60%, transparent);
3894
- }
3895
- }
3896
3816
  @media (hover: hover) {
3897
3817
  .hover\:-translate-y-0\.5:hover {
3898
3818
  --tw-translate-y: calc(var(--spacing) * -0.5);
@@ -4011,14 +3931,6 @@
4011
3931
  .hover\:bg-\[var\(--btn-primary-hover\)\]:hover {
4012
3932
  background-color: var(--btn-primary-hover);
4013
3933
  }
4014
- .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25:hover {
4015
- background-color: var(--status-error,#ff4d6d);
4016
- }
4017
- @supports (color: color-mix(in lab, red, red)) {
4018
- .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25:hover {
4019
- background-color: color-mix(in oklab, var(--status-error,#ff4d6d) 25%, transparent);
4020
- }
4021
- }
4022
3934
  .hover\:bg-\[var\(--surface-container-high\)\]\/40:hover {
4023
3935
  background-color: var(--surface-container-high);
4024
3936
  }
@@ -4868,9 +4780,6 @@
4868
4780
  .\[\&\:\:-moz-range-track\]\:bg-border::-moz-range-track {
4869
4781
  background-color: var(--color-border);
4870
4782
  }
4871
- .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
4872
- display: none;
4873
- }
4874
4783
  .\[\&\:\:-webkit-slider-runnable-track\]\:h-1\.5::-webkit-slider-runnable-track {
4875
4784
  height: calc(var(--spacing) * 1.5);
4876
4785
  }
@@ -96,7 +96,7 @@ declare function DirectoryPane({ root, selectedPath, onSelect, onRefresh, onUplo
96
96
  /**
97
97
  * StatusBanner — full-width notification banner for connection/provisioning states.
98
98
  */
99
- type BannerType = "provisioning" | "connecting" | "error" | "success" | "info";
99
+ type BannerType = "provisioning" | "connecting" | "error" | "warning" | "success" | "info";
100
100
  interface StatusBannerProps {
101
101
  type: BannerType;
102
102
  message: string;
package/dist/workspace.js CHANGED
@@ -20,7 +20,7 @@ import {
20
20
  dispatchSessionCreated,
21
21
  shellShouldRevalidate,
22
22
  useOptimisticSessionItems
23
- } from "./chunk-OI7HEWLZ.js";
23
+ } from "./chunk-D5VXCWUG.js";
24
24
  import "./chunk-BGVEHENC.js";
25
25
  import "./chunk-EI44GEQ5.js";
26
26
  import "./chunk-CZ7CSFO4.js";