@tangle-network/sandbox-ui 0.104.0 → 0.105.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/chat.d.ts CHANGED
@@ -60,10 +60,9 @@ declare function ReasoningLevelPicker({ value, onChange, disabled, className, tr
60
60
  /**
61
61
  * Limits applied when staging files onto a composer.
62
62
  *
63
- * @deprecated Composer-only helper of the legacy AgentComposer. Use
64
- * ChatComposer from `@tangle-network/agent-app/web-react` — the canonical
65
- * composer. AgentComposer is frozen and will be removed at sandbox-ui's next
66
- * breaking release.
63
+ * Serves {@link AgentComposer}'s attachment lifecycle. `ChatComposer` in
64
+ * `@tangle-network/agent-app/web-react` stages files without a validation or
65
+ * retry step, so it has no equivalent.
67
66
  */
68
67
  interface ComposerFileValidationConfig {
69
68
  /** Reject any single file larger than this. */
@@ -81,10 +80,9 @@ interface ComposerFileValidationConfig {
81
80
  }
82
81
  /** A file that failed validation, paired with a human-readable reason.
83
82
  *
84
- * @deprecated Composer-only helper of the legacy AgentComposer. Use
85
- * ChatComposer from `@tangle-network/agent-app/web-react` — the canonical
86
- * composer. AgentComposer is frozen and will be removed at sandbox-ui's next
87
- * breaking release. */
83
+ * Serves {@link AgentComposer}'s attachment lifecycle. `ChatComposer` in
84
+ * `@tangle-network/agent-app/web-react` stages files without a validation or
85
+ * retry step, so it has no equivalent. */
88
86
  interface ComposerFileRejection {
89
87
  file: File;
90
88
  reason: string;
@@ -94,10 +92,9 @@ interface ComposerFileRejection {
94
92
  * grammar as the native `<input accept>` attribute. An undefined or empty
95
93
  * `accept` accepts everything.
96
94
  *
97
- * @deprecated Composer-only helper of the legacy AgentComposer. Use
98
- * ChatComposer from `@tangle-network/agent-app/web-react` — the canonical
99
- * composer. AgentComposer is frozen and will be removed at sandbox-ui's next
100
- * breaking release.
95
+ * Serves {@link AgentComposer}'s attachment lifecycle. `ChatComposer` in
96
+ * `@tangle-network/agent-app/web-react` stages files without a validation or
97
+ * retry step, so it has no equivalent.
101
98
  */
102
99
  declare function isAcceptedType(file: File, accept?: string): boolean;
103
100
  /**
@@ -107,10 +104,9 @@ declare function isAcceptedType(file: File, accept?: string): boolean;
107
104
  * file and the limit it broke. Pure data in, pure data out — no throwing,
108
105
  * no console noise, so callers decide how to surface rejections.
109
106
  *
110
- * @deprecated Composer-only helper of the legacy AgentComposer. Use
111
- * ChatComposer from `@tangle-network/agent-app/web-react` — the canonical
112
- * composer. AgentComposer is frozen and will be removed at sandbox-ui's next
113
- * breaking release.
107
+ * Serves {@link AgentComposer}'s attachment lifecycle. `ChatComposer` in
108
+ * `@tangle-network/agent-app/web-react` stages files without a validation or
109
+ * retry step, so it has no equivalent.
114
110
  */
115
111
  declare function validateComposerFiles(files: File[] | FileList, config: ComposerFileValidationConfig): {
116
112
  accepted: File[];
@@ -120,9 +116,9 @@ declare function validateComposerFiles(files: File[] | FileList, config: Compose
120
116
  /** A selectable item in the `@`-mention popover. Generic — file semantics live
121
117
  * in the consuming app, not here.
122
118
  *
123
- * @deprecated Part of the legacy AgentComposer API. Use ChatComposer from
124
- * `@tangle-network/agent-app/web-react` — the canonical composer. AgentComposer
125
- * is frozen and will be removed at sandbox-ui's next breaking release. */
119
+ * Part of the {@link AgentComposer} API. `ChatComposer` in
120
+ * `@tangle-network/agent-app/web-react` has no equivalent — see
121
+ * {@link AgentComposer} for which composer fits a surface. */
126
122
  interface MentionItem {
127
123
  id: string;
128
124
  label: string;
@@ -134,9 +130,9 @@ interface MentionItem {
134
130
  * TipTap rich input that renders mentions as atomic pills; absent ⇒ exactly
135
131
  * today's plain-textarea behavior. Data-agnostic: the app supplies items.
136
132
  *
137
- * @deprecated Part of the legacy AgentComposer API. Use ChatComposer from
138
- * `@tangle-network/agent-app/web-react` — the canonical composer. AgentComposer
139
- * is frozen and will be removed at sandbox-ui's next breaking release.
133
+ * Part of the {@link AgentComposer} API. `ChatComposer` in
134
+ * `@tangle-network/agent-app/web-react` has no equivalent — see
135
+ * {@link AgentComposer} for which composer fits a surface.
140
136
  */
141
137
  interface AgentComposerMention {
142
138
  /** The character that opens the popover. Default "@". */
@@ -159,9 +155,9 @@ interface AgentComposerMention {
159
155
  }
160
156
  /** A staged attachment shown as a chip above the input.
161
157
  *
162
- * @deprecated Part of the legacy AgentComposer API. Use ChatComposer from
163
- * `@tangle-network/agent-app/web-react` — the canonical composer. AgentComposer
164
- * is frozen and will be removed at sandbox-ui's next breaking release. */
158
+ * Part of the {@link AgentComposer} API. `ChatComposer` in
159
+ * `@tangle-network/agent-app/web-react` has no equivalent — see
160
+ * {@link AgentComposer} for which composer fits a surface. */
165
161
  interface ComposerFile {
166
162
  id: string;
167
163
  name: string;
@@ -181,9 +177,9 @@ interface ComposerFile {
181
177
  }
182
178
  /** Context the agent will see alongside the next message.
183
179
  *
184
- * @deprecated Part of the legacy AgentComposer API. Use ChatComposer from
185
- * `@tangle-network/agent-app/web-react` — the canonical composer. AgentComposer
186
- * is frozen and will be removed at sandbox-ui's next breaking release. */
180
+ * Part of the {@link AgentComposer} API. `ChatComposer` in
181
+ * `@tangle-network/agent-app/web-react` has no equivalent — see
182
+ * {@link AgentComposer} for which composer fits a surface. */
187
183
  interface ComposerContextItem {
188
184
  id: string;
189
185
  label: string;
@@ -192,11 +188,11 @@ interface ComposerContextItem {
192
188
  onRemove?: () => void;
193
189
  }
194
190
  /**
195
- * Props of the legacy {@link AgentComposer}.
191
+ * Props of {@link AgentComposer}.
196
192
  *
197
- * @deprecated Part of the legacy AgentComposer API. Use ChatComposer from
198
- * `@tangle-network/agent-app/web-react` — the canonical composer. AgentComposer
199
- * is frozen and will be removed at sandbox-ui's next breaking release.
193
+ * Part of the {@link AgentComposer} API. `ChatComposer` in
194
+ * `@tangle-network/agent-app/web-react` has no equivalent — see
195
+ * {@link AgentComposer} for which composer fits a surface.
200
196
  */
201
197
  interface AgentComposerProps {
202
198
  /** Composer text (controlled). */
@@ -288,25 +284,35 @@ interface AgentComposerProps {
288
284
  autoFocus?: boolean;
289
285
  }
290
286
  /**
291
- * @deprecated Use `ChatComposer` from `@tangle-network/agent-app/web-react` —
292
- * the canonical composer. It adds send-failure recovery, seeds, control
293
- * placement, floating elevation, and the circular icon send via
294
- * `sendVariant="icon"`. Plan a port, not a rename: 14 of the 28 props here
295
- * have no same-named counterpart there, among them `contextItems`, `mention`,
296
- * `trailing`, `maxHeight`, `minRows`, and `autoFocus`. The control model also
297
- * differs — this component requires `value` and `onChange` and calls
298
- * `onSubmit` with no arguments, while `ChatComposer` can own its draft and
299
- * gives the message to a refusable `onSend`. This slot-shell is frozen and
300
- * will be removed at sandbox-ui's next breaking release.
287
+ * Sibling of `ChatComposer` in `@tangle-network/agent-app/web-react`, not a
288
+ * predecessor of it. The two composers cover different jobs, and neither is a
289
+ * superset of the other, so pick by the features a surface needs.
301
290
  *
302
- * The canonical agent chat input: one rounded surface holding an auto-growing
291
+ * Reach for `AgentComposer` when the surface needs `@`-mentions (`mention`,
292
+ * backed by a lazily loaded rich-text input that renders mention pills),
293
+ * `contextItems`, or the full attachment lifecycle — `attachments` plus
294
+ * `onRejectFiles` and `onRetryFile`. It also owns `autoFocus`,
295
+ * `canSubmitAttachmentsOnly`, `trailing`, `maxHeight`, and `minRows`.
296
+ *
297
+ * Reach for `ChatComposer` when the surface is a plain send box. It owns
298
+ * send-failure recovery (`onSendFailed`, `sendFailureMessage`), one-shot
299
+ * prefill (`seed`), `controlsPlacement`, `floating`, `sendVariant`,
300
+ * parts-aware sends (`onSendParts`), and an uncontrolled mode
301
+ * (`initialValue`) — none of which exist here.
302
+ *
303
+ * Moving between them is a port, not a rename: the control models differ. This
304
+ * component requires `value` and `onChange` and calls `onSubmit` with no
305
+ * arguments, while `ChatComposer` can own its draft and hands the message to a
306
+ * refusable `onSend`.
307
+ *
308
+ * The input itself: one rounded surface holding an auto-growing
303
309
  * textarea and a bottom row that runs left → right — attach buttons, the
304
310
  * control strip (supplied via the required `controls` prop), trailing slot,
305
311
  * and the send button on the far right. The strip is explicit: the canonical
306
312
  * pickers are `ModelPicker` / `EffortPicker` / `AgentSessionControls` from
307
313
  * `@tangle-network/agent-app/web-react` — this component only owns the slot.
308
314
  *
309
- * Opt-in extras make it the superset of every app's hand-rolled composer:
315
+ * Opt-in extras cover what apps otherwise hand-roll:
310
316
  * file/folder attachments with drag-and-drop + chips + clipboard paste
311
317
  * (`onAttach` also gates pasting files onto the textarea, auto-naming
312
318
  * generic clipboard image blobs `pasted-image-<n>.<ext>`), a streaming Stop
@@ -323,10 +329,9 @@ declare function AgentComposer({ value, onChange, onSubmit, placeholder, disable
323
329
  * importing it never pulls the lazily-loaded editor chunk into a consumer's
324
330
  * bundle.
325
331
  *
326
- * @deprecated Mention-pill contract of the legacy AgentComposer mention
327
- * feature. Use ChatComposer from `@tangle-network/agent-app/web-react` — the
328
- * canonical composer. AgentComposer is frozen and will be removed at
329
- * sandbox-ui's next breaking release.
332
+ * Mention-pill contract of {@link AgentComposer}'s mention feature.
333
+ * `ChatComposer` in `@tangle-network/agent-app/web-react` has no mention
334
+ * support, so it has no equivalent.
330
335
  */
331
336
  declare const MENTION_PILL_CLASS: string;
332
337
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  usePtySession
3
- } from "./chunk-KEYPUGS3.js";
3
+ } from "./chunk-7KB22BLB.js";
4
4
 
5
5
  // src/terminal/terminal-view.tsx
6
6
  import "@xterm/xterm/css/xterm.css";
@@ -41,6 +41,8 @@ function TerminalView({
41
41
  subtitle = "Connected to PTY session",
42
42
  isActive = true,
43
43
  connectionId,
44
+ incarnationId,
45
+ control,
44
46
  fontSize = 13
45
47
  }) {
46
48
  const resolvedTheme = useMemo(
@@ -71,7 +73,9 @@ function TerminalView({
71
73
  apiUrl,
72
74
  token,
73
75
  onData,
74
- connectionId
76
+ connectionId,
77
+ incarnationId,
78
+ control
75
79
  });
76
80
  useEffect(() => {
77
81
  if (!containerRef.current) return;
@@ -37,7 +37,14 @@ function createTerminalConnectionId() {
37
37
  }
38
38
  return `terminal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
39
39
  }
40
- function usePtySession({ apiUrl, token, onData, connectionId: providedConnectionId }) {
40
+ function usePtySession({
41
+ apiUrl,
42
+ token,
43
+ onData,
44
+ connectionId: providedConnectionId,
45
+ incarnationId,
46
+ control
47
+ }) {
41
48
  const [isConnected, setIsConnected] = useState(false);
42
49
  const [error, setError] = useState(null);
43
50
  const sessionIdRef = useRef(null);
@@ -48,6 +55,11 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
48
55
  const mountedRef = useRef(true);
49
56
  const onDataRef = useRef(onData);
50
57
  const tokenRef = useRef(token);
58
+ const incarnationIdRef = useRef(incarnationId);
59
+ const controlRef = useRef(control);
60
+ const exactAttachRequiredRef = useRef(
61
+ incarnationId !== void 0 || control !== void 0
62
+ );
51
63
  const connectStreamRef = useRef(null);
52
64
  const reconnectRef = useRef(null);
53
65
  const shouldDeleteSessionRef = useRef(false);
@@ -177,8 +189,17 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
177
189
  pendingWsRef.current = null;
178
190
  if (options.initOnOpen) {
179
191
  try {
192
+ const initIncarnationId = incarnationIdRef.current;
193
+ const initControl = controlRef.current;
194
+ if (exactAttachRequiredRef.current && (!initIncarnationId || !initControl)) {
195
+ throw new Error(
196
+ "Interactive terminal identity is incomplete"
197
+ );
198
+ }
180
199
  ws.send(JSON.stringify({
181
200
  type: "init",
201
+ ...initIncarnationId !== void 0 ? { incarnationId: initIncarnationId } : {},
202
+ ...initControl !== void 0 ? { control: initControl } : {},
182
203
  cols: colsRef.current,
183
204
  rows: rowsRef.current
184
205
  }));
@@ -267,6 +288,11 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
267
288
  });
268
289
  }, [apiUrl]);
269
290
  const connectStream = useCallback(async (sessionId) => {
291
+ if (exactAttachRequiredRef.current) {
292
+ throw new Error(
293
+ "Interactive terminal requires an exact WebSocket attachment"
294
+ );
295
+ }
270
296
  abortStream();
271
297
  setError(null);
272
298
  try {
@@ -354,12 +380,19 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
354
380
  }, [apiUrl, abortStream]);
355
381
  onDataRef.current = onData;
356
382
  tokenRef.current = token;
383
+ incarnationIdRef.current = incarnationId;
384
+ controlRef.current = control;
385
+ exactAttachRequiredRef.current = incarnationId !== void 0 || control !== void 0;
357
386
  connectStreamRef.current = connectStream;
358
387
  const connect = useCallback(async () => {
359
388
  cleanup();
360
389
  const myGen = ++connectGenRef.current;
361
390
  retryCountRef.current = 0;
362
391
  setError(null);
392
+ if (exactAttachRequiredRef.current && (!incarnationIdRef.current || !controlRef.current)) {
393
+ setError("Interactive terminal identity is incomplete");
394
+ return;
395
+ }
363
396
  try {
364
397
  const connectionId = providedConnectionId ?? createTerminalConnectionId();
365
398
  if (!mountedRef.current) return;
@@ -373,6 +406,11 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
373
406
  if (directWsOk) {
374
407
  return;
375
408
  }
409
+ if (exactAttachRequiredRef.current) {
410
+ throw new Error(
411
+ "Interactive terminal WebSocket attach failed; exact identity was not accepted"
412
+ );
413
+ }
376
414
  sessionIdRef.current = null;
377
415
  transportReadyRef.current = false;
378
416
  if (inputAbortRef.current) {
@@ -434,6 +472,11 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
434
472
  console.warn("Terminal resize over WS failed; falling back to HTTP", err);
435
473
  }
436
474
  }
475
+ if (exactAttachRequiredRef.current) {
476
+ throw new Error(
477
+ "Interactive terminal is not attached with its exact identity"
478
+ );
479
+ }
437
480
  try {
438
481
  const res = await fetch(`${apiUrl}/terminals/${sid}`, {
439
482
  method: "PATCH",
@@ -469,6 +512,16 @@ function usePtySession({ apiUrl, token, onData, connectionId: providedConnection
469
512
  }
470
513
  continue;
471
514
  }
515
+ if (exactAttachRequiredRef.current) {
516
+ for (const w of batch.waiters) {
517
+ w.reject(
518
+ new Error(
519
+ "Interactive terminal is not attached with its exact identity"
520
+ )
521
+ );
522
+ }
523
+ continue;
524
+ }
472
525
  try {
473
526
  const res = await fetch(`${apiUrl}/terminals/${sid}/input`, {
474
527
  method: "POST",
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-K4Q4E7D7.js";
7
7
  import {
8
8
  TerminalView
9
- } from "./chunk-WYMAC3T3.js";
9
+ } from "./chunk-4VLVVKQZ.js";
10
10
  import {
11
11
  cn
12
12
  } from "./chunk-EI44GEQ5.js";
package/dist/hooks.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  export { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, ConnectionState, 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';
2
+ import { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface';
2
3
  import * as _tanstack_react_query from '@tanstack/react-query';
3
4
  import { Session } from './types.js';
4
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
6
  import '@tangle-network/ui/types';
6
7
  import '@tangle-network/ui/stores';
7
8
  import '@tangle-network/ui/sdk-hooks';
8
- import '@tangle-network/agent-interface';
9
9
 
10
10
  interface UsePtySessionOptions {
11
11
  /** Base URL of the sidecar (e.g. "http://localhost:9100"). */
@@ -22,6 +22,13 @@ interface UsePtySessionOptions {
22
22
  * so the session does not survive a remount.
23
23
  */
24
24
  connectionId?: string;
25
+ /**
26
+ * Exact incarnation issued for an interactive agent session. When present,
27
+ * it must be sent with `control` on every WebSocket init frame.
28
+ */
29
+ incarnationId?: string;
30
+ /** Write claim for the exact interactive agent session. */
31
+ control?: AgentInteractiveSessionControlClaim;
25
32
  }
26
33
  interface UsePtySessionReturn {
27
34
  /** Whether the underlying transport is connected and receiving data. */
@@ -58,7 +65,7 @@ interface UsePtySessionReturn {
58
65
  * preserved as a fallback so the hook keeps working against
59
66
  * deployments that have not yet shipped the WS endpoint.
60
67
  */
61
- declare function usePtySession({ apiUrl, token, onData, connectionId: providedConnectionId }: UsePtySessionOptions): UsePtySessionReturn;
68
+ declare function usePtySession({ apiUrl, token, onData, connectionId: providedConnectionId, incarnationId, control, }: UsePtySessionOptions): UsePtySessionReturn;
62
69
 
63
70
  /**
64
71
  * Sandbox-level telemetry collected by the sidecar from cgroup v2
package/dist/hooks.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  } from "./chunk-3GX5BSD4.js";
27
27
  import {
28
28
  usePtySession
29
- } from "./chunk-KEYPUGS3.js";
29
+ } from "./chunk-7KB22BLB.js";
30
30
  import "./chunk-CZ7CSFO4.js";
31
31
  export {
32
32
  RealtimeSessionRegistry,
package/dist/index.js CHANGED
@@ -153,7 +153,7 @@ import {
153
153
  buildUnifiedPatch,
154
154
  computeDiffStats,
155
155
  resolveLanguage
156
- } from "./chunk-K5RMJOH6.js";
156
+ } from "./chunk-NAWEV5UJ.js";
157
157
  import {
158
158
  FileArtifactPane,
159
159
  FilePreview,
@@ -238,10 +238,10 @@ import {
238
238
  UsageChart,
239
239
  formatPrice
240
240
  } from "./chunk-OMUIPJQZ.js";
241
- import "./chunk-WYMAC3T3.js";
241
+ import "./chunk-4VLVVKQZ.js";
242
242
  import {
243
243
  usePtySession
244
- } from "./chunk-KEYPUGS3.js";
244
+ } from "./chunk-7KB22BLB.js";
245
245
  import {
246
246
  Avatar,
247
247
  AvatarFallback,
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface';
2
3
 
3
4
  interface TerminalTheme {
4
5
  background: string;
@@ -52,8 +53,12 @@ interface TerminalViewProps {
52
53
  * session per mount.
53
54
  */
54
55
  connectionId?: string;
56
+ /** Exact incarnation issued for an interactive agent session. */
57
+ incarnationId?: string;
58
+ /** Write claim for the exact interactive agent session. */
59
+ control?: AgentInteractiveSessionControlClaim;
55
60
  }
56
61
  declare const DEFAULT_TERMINAL_THEME: TerminalTheme;
57
- declare function TerminalView({ apiUrl, token, theme, title, subtitle, isActive, connectionId, fontSize, }: TerminalViewProps): React.JSX.Element;
62
+ declare function TerminalView({ apiUrl, token, theme, title, subtitle, isActive, connectionId, incarnationId, control, fontSize, }: TerminalViewProps): React.JSX.Element;
58
63
 
59
64
  export { DEFAULT_TERMINAL_THEME, type TerminalTheme, TerminalView, type TerminalViewProps };
package/dist/terminal.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  DEFAULT_TERMINAL_THEME,
3
3
  TerminalView
4
- } from "./chunk-WYMAC3T3.js";
5
- import "./chunk-KEYPUGS3.js";
4
+ } from "./chunk-4VLVVKQZ.js";
5
+ import "./chunk-7KB22BLB.js";
6
6
  import "./chunk-CZ7CSFO4.js";
7
7
  export {
8
8
  DEFAULT_TERMINAL_THEME,
package/dist/workbench.js CHANGED
@@ -12,12 +12,12 @@ import {
12
12
  buildUnifiedPatch,
13
13
  computeDiffStats,
14
14
  resolveLanguage
15
- } from "./chunk-K5RMJOH6.js";
15
+ } from "./chunk-NAWEV5UJ.js";
16
16
  import "./chunk-PZVUIUUW.js";
17
17
  import "./chunk-K4Q4E7D7.js";
18
18
  import "./chunk-OMUIPJQZ.js";
19
- import "./chunk-WYMAC3T3.js";
20
- import "./chunk-KEYPUGS3.js";
19
+ import "./chunk-4VLVVKQZ.js";
20
+ import "./chunk-7KB22BLB.js";
21
21
  import "./chunk-2XPJ2XF7.js";
22
22
  import "./chunk-RQZRXKMR.js";
23
23
  import "./chunk-BGVEHENC.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.104.0",
3
+ "version": "0.105.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",