@tangle-network/sandbox-ui 1.0.0 → 1.1.1

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.
@@ -2618,7 +2618,7 @@ function retryImport(factory, retries = 2, delayMs = 350) {
2618
2618
  });
2619
2619
  }
2620
2620
  function lazyWorkflowGraph() {
2621
- return lazy(() => retryImport(() => import("./WorkflowGraph-CbIFufIK.js").then((m) => ({ default: m.WorkflowGraph }))));
2621
+ return lazy(() => retryImport(() => import("./WorkflowGraph-CmPjsJA6.js").then((m) => ({ default: m.WorkflowGraph }))));
2622
2622
  }
2623
2623
  var GraphErrorBoundary = class extends Component {
2624
2624
  state = { hasError: false };
@@ -2678,7 +2678,7 @@ function WorkflowGraph(props) {
2678
2678
  * taking the pane down.
2679
2679
  */
2680
2680
  function lazyCanvas() {
2681
- return lazy(() => retryImport(() => import("./AgentGraphCanvas-BHihTTsl.js").then((m) => ({ default: m.AgentGraphCanvas }))));
2681
+ return lazy(() => retryImport(() => import("./AgentGraphCanvas-FT8XUEC6.js").then((m) => ({ default: m.AgentGraphCanvas }))));
2682
2682
  }
2683
2683
  /** The agents as a list, for when the canvas cannot load. */
2684
2684
  function AgentListFallback({ nodes, selectedId, onSelect, className, onRetry }) {
@@ -36,7 +36,7 @@ interface AgentGraphNode {
36
36
  turn?: string | null;
37
37
  costUsd?: number | null;
38
38
  tokens?: number | null;
39
- /** Live cards: what it is doing now, from its real state; loops the card's figure. */
39
+ /** Live cards: what it is doing now, from its real state; the card carries it as `data-activity` for hosts to style. */
40
40
  activity?: AgentGraphActivity | null;
41
41
  /** Live cards: its latest tool calls or events, oldest first; the card shows the last three. */
42
42
  events?: readonly AgentGraphEvent[] | null;
@@ -122,8 +122,8 @@ interface AgentGraphProps {
122
122
  /** Hub layout: the header title. Default "Agent graph". */
123
123
  title?: ReactNode;
124
124
  /**
125
- * Tree layout: live cards for a running run. Each card loops a small figure of the agent's `activity`, shows its
126
- * thinking line (`turn`) and last three `events` as they arrive, its model, effort, time alive and commits; a settled
125
+ * Tree layout: live cards for a running run. Each card shows a status pill that breathes while it runs, its thinking
126
+ * line (`turn`) and last three `events` streaming in with how long ago each ran (`at`), its model, effort, time alive and commits; a settled
127
127
  * agent shrinks to a chip with its `result`, and a new spawn grows in. Cards keep a fixed size, so updates never move one.
128
128
  */
129
129
  live?: boolean;
@@ -1,9 +1,9 @@
1
1
  import { t as MOTION_CONTROL } from "./motion-Bn7ESHrj.js";
2
- import { T as statusBorder, U as fmtTokenTotal, V as fmtCost, a as useColorMode, c as NodeMark, d as RESTING_BORDER, f as RESTING_SHADOW, i as motionAllowed, o as KIND_ACCENT, p as STATUS_COLOR, r as SELECTION_OUTLINE, y as edgeColor } from "./AgentGraph-Beld8p6x.js";
2
+ import { T as statusBorder, U as fmtTokenTotal, V as fmtCost, a as useColorMode, c as NodeMark, d as RESTING_BORDER, f as RESTING_SHADOW, i as motionAllowed, o as KIND_ACCENT, p as STATUS_COLOR, r as SELECTION_OUTLINE, y as edgeColor } from "./AgentGraph-CiaKH13k.js";
3
3
  import { t as loadElk } from "./elk-loader-Dl9S7jQk.js";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
- import { CircleCheck, CirclePause, CircleQuestionMark, CircleStop, CircleX, Hand, Hourglass, LoaderCircle, Users } from "lucide-react";
6
+ import { CircleCheck, CirclePause, CircleQuestionMark, CircleStop, CircleX, FileText, GitBranch, Globe, Hand, Hourglass, LoaderCircle, Pencil, Search, Sparkles, Terminal, Users } from "lucide-react";
7
7
  import { Background, BaseEdge, Controls, EdgeLabelRenderer, Handle, MarkerType, MiniMap, Position, ReactFlow, useInternalNode } from "@xyflow/react";
8
8
  import "@xyflow/react/dist/style.css";
9
9
  // src/workflows/agent-graph-layout.ts
@@ -12,9 +12,9 @@ const AGENT_CARD = {
12
12
  width: 200,
13
13
  height: 78
14
14
  };
15
- /** A live card: room for the figure, the thinking line and the last three events. Fixed for the same reason. */
15
+ /** A live card: room for the header, a two-line thinking line and the last three events. Fixed for the same reason. */
16
16
  const LIVE_AGENT_CARD = {
17
- width: 272,
17
+ width: 304,
18
18
  height: 152
19
19
  };
20
20
  const GRID_GAP = 10;
@@ -336,7 +336,10 @@ function StatusGlyph({ status, size }) {
336
336
  style: { color: s.color }
337
337
  });
338
338
  }
339
+ /** Only states that ask for a reader colour a card's border; running and done cards stay on the resting hairline and
340
+ * say their state by glyph and word, so a busy run never reads as a wall of glowing outlines. */
339
341
  function cardBorder(status) {
342
+ if (status === "running" || status === "succeeded") return { borderColor: RESTING_BORDER };
340
343
  if (status === "unknown") return {
341
344
  borderColor: "hsl(var(--muted-foreground) / 0.45)",
342
345
  borderStyle: "dashed"
@@ -598,181 +601,23 @@ const SETTLED = /* @__PURE__ */ new Set([
598
601
  "failed",
599
602
  "stopped"
600
603
  ]);
601
- const FIGURES = {
602
- thinking: [
603
- [
604
- " o ",
605
- " /|\\ ",
606
- " / \\ "
607
- ],
608
- [
609
- " o . ",
610
- " /|\\ ",
611
- " / \\ "
612
- ],
613
- [
614
- " o .. ",
615
- " /|\\ ",
616
- " / \\ "
617
- ],
618
- [
619
- " o ...",
620
- " /|\\ ",
621
- " / \\ "
622
- ]
623
- ],
624
- reading: [
625
- [
626
- " o ",
627
- " /|\\[-]",
628
- " / \\ "
629
- ],
630
- [
631
- " o ",
632
- " /|\\[=]",
633
- " / \\ "
634
- ],
635
- [
636
- " o ",
637
- " /|\\[#]",
638
- " / \\ "
639
- ],
640
- [
641
- " o ",
642
- " /|\\[=]",
643
- " / \\ "
644
- ]
645
- ],
646
- building: [
647
- [
648
- " o T ",
649
- " /|\\/ ",
650
- " / \\## "
651
- ],
652
- [
653
- " o ",
654
- " /|\\-T ",
655
- " / \\## "
656
- ],
657
- [
658
- " o T ",
659
- " /|\\/ ",
660
- " / \\###"
661
- ],
662
- [
663
- " o ",
664
- " /|\\-T ",
665
- " / \\###"
666
- ]
667
- ],
668
- proving: [
669
- [
670
- " o |- ",
671
- " /|\\ ",
672
- " / \\ "
673
- ],
674
- [
675
- " o |= ",
676
- " /|\\ ",
677
- " / \\ "
678
- ],
679
- [
680
- " o |=-",
681
- " /|\\ ",
682
- " / \\ "
683
- ],
684
- [
685
- " o QED",
686
- " /|\\ ",
687
- " / \\ "
688
- ]
689
- ],
690
- writing: [
691
- [
692
- " o ",
693
- " /|\\_/ ",
694
- " / \\. "
695
- ],
696
- [
697
- " o ",
698
- " /|\\_/ ",
699
- " / \\.. "
700
- ],
701
- [
702
- " o ",
703
- " /|\\_/ ",
704
- " / \\..."
705
- ],
706
- [
707
- " o ",
708
- " /|\\_/ ",
709
- " / \\ "
710
- ]
711
- ],
712
- waiting: [
713
- [
714
- " o z ",
715
- " /|\\ ",
716
- " / \\ "
717
- ],
718
- [
719
- " o zZ",
720
- " /|\\ ",
721
- " / \\ "
722
- ],
723
- [
724
- " o zZz",
725
- " /|\\ ",
726
- " / \\ "
727
- ],
728
- [
729
- " o ",
730
- " /|\\ ",
731
- " / \\ "
732
- ]
733
- ],
734
- restarting: [
735
- [
736
- " o | ",
737
- " /|\\ ",
738
- " / \\ "
739
- ],
740
- [
741
- " o / ",
742
- " /|\\ ",
743
- " / \\ "
744
- ],
745
- [
746
- " o - ",
747
- " /|\\ ",
748
- " / \\ "
749
- ],
750
- [
751
- " o \\ ",
752
- " /|\\ ",
753
- " / \\ "
754
- ]
755
- ]
756
- };
757
- /** The activity a status implies when the host sends none. */
758
- function activityOf(agent) {
759
- if (agent.activity && FIGURES[agent.activity]) return agent.activity;
760
- if (agent.status === "waiting" || agent.status === "needs-you" || agent.status === "idle") return "waiting";
761
- return "thinking";
762
- }
763
- /** Every frame is stacked in one block and a stepped animation slides it: no timer per card, and reduced motion keeps
764
- * the first frame. */
765
- function Figure({ activity }) {
766
- const frames = FIGURES[activity];
767
- return /* @__PURE__ */ jsx("div", {
768
- className: "ag-live-figure",
769
- "aria-hidden": true,
770
- "data-activity": activity,
771
- children: /* @__PURE__ */ jsx("pre", {
772
- style: { ["--ag-frames"]: frames.length },
773
- children: frames.map((frame) => frame.join("\n")).join("\n")
774
- })
775
- });
604
+ const EVENT_GLYPHS = [
605
+ [/^(bash|sh|run|exec|cargo|npm|pnpm|make)\b/, Terminal],
606
+ [/^(edit|write|patch|apply)\b/, Pencil],
607
+ [/^(read|cat|open|view|ls|glob)\b/, FileText],
608
+ [/^(grep|search|find|rg)\b/, Search],
609
+ [/^(web|fetch|http|browse)\b/, Globe],
610
+ [/^(spawn|steer|release|merge|commit|git)\b/, GitBranch],
611
+ [/^(wait|sleep|queue)\b/, Hourglass]
612
+ ];
613
+ const eventGlyph = (label) => EVENT_GLYPHS.find(([match]) => match.test(label.toLowerCase()))?.[1] ?? Sparkles;
614
+ function ago(at, now) {
615
+ if (at == null || !Number.isFinite(at)) return void 0;
616
+ const s = Math.max(0, Math.round((now - at) / 1e3));
617
+ if (s < 5) return "now";
618
+ if (s < 60) return `${s}s`;
619
+ const m = Math.floor(s / 60);
620
+ return m < 60 ? `${m}m` : `${Math.floor(m / 60)}h`;
776
621
  }
777
622
  function aliveFor(startedAt, now) {
778
623
  if (startedAt == null || !Number.isFinite(startedAt)) return void 0;
@@ -822,17 +667,19 @@ function LiveAgentCard({ data }) {
822
667
  ]
823
668
  })]
824
669
  });
825
- const meta = [agent.model, agent.effort].filter(Boolean).join(" · ");
670
+ const meta = [agent.model?.replace(/^[\w-]+\//, ""), agent.effort].filter(Boolean).join(" · ");
826
671
  const events = (agent.events ?? []).slice(-3);
827
672
  return /* @__PURE__ */ jsxs("div", {
828
673
  className: "ag-live-card",
829
674
  "data-status": agent.status,
675
+ "data-activity": agent.activity ?? void 0,
830
676
  "data-selected": selected || void 0,
831
677
  title: agentSummary(agent),
832
678
  style: {
833
679
  boxShadow: RESTING_SHADOW,
834
680
  ...cardBorder(agent.status),
835
- ...selected ? SELECTION_OUTLINE : {}
681
+ ...selected ? SELECTION_OUTLINE : {},
682
+ ["--ag-status"]: s.color
836
683
  },
837
684
  children: [
838
685
  /* @__PURE__ */ jsx(Handles, { direction }),
@@ -843,7 +690,7 @@ function LiveAgentCard({ data }) {
843
690
  kind: "agent.run",
844
691
  model: agent.model ?? void 0,
845
692
  accent: KIND_ACCENT["agent.run"],
846
- tile: 24
693
+ tile: 28
847
694
  }),
848
695
  /* @__PURE__ */ jsxs("div", {
849
696
  className: "ag-live-names",
@@ -857,36 +704,56 @@ function LiveAgentCard({ data }) {
857
704
  }),
858
705
  /* @__PURE__ */ jsxs("div", {
859
706
  className: "ag-live-stats",
860
- children: [alive && /* @__PURE__ */ jsx("span", {
707
+ children: [/* @__PURE__ */ jsxs("span", {
708
+ className: "ag-live-pill",
709
+ children: [/* @__PURE__ */ jsx("span", {
710
+ className: "ag-live-dot",
711
+ "aria-hidden": true
712
+ }), s.label]
713
+ }), /* @__PURE__ */ jsxs("span", { children: [alive && /* @__PURE__ */ jsx("span", {
861
714
  title: "Time alive",
862
715
  children: alive
863
716
  }), agent.commits != null && /* @__PURE__ */ jsxs("span", {
864
717
  title: "Commits shipped",
865
718
  children: [
719
+ alive ? " · " : "",
866
720
  agent.commits,
867
721
  " ",
868
722
  agent.commits === 1 ? "commit" : "commits"
869
723
  ]
870
- })]
724
+ })] })]
871
725
  })
872
726
  ]
873
727
  }),
874
- /* @__PURE__ */ jsxs("div", {
875
- className: "ag-live-body",
876
- children: [/* @__PURE__ */ jsx(Figure, { activity: activityOf(agent) }), /* @__PURE__ */ jsxs("div", {
877
- className: "ag-live-text",
878
- children: [/* @__PURE__ */ jsx("p", {
879
- className: "ag-live-thinking",
880
- children: agent.turn || /* @__PURE__ */ jsx("span", {
881
- className: "ag-live-quiet",
882
- children: s.label
728
+ /* @__PURE__ */ jsx("p", {
729
+ className: "ag-live-thinking",
730
+ children: agent.turn || /* @__PURE__ */ jsx("span", {
731
+ className: "ag-live-quiet",
732
+ children: s.label
733
+ })
734
+ }, agent.turn ?? ""),
735
+ /* @__PURE__ */ jsx("ol", {
736
+ className: "ag-live-events",
737
+ "aria-label": "Latest events",
738
+ children: events.map((event) => {
739
+ const Glyph = eventGlyph(event.label);
740
+ const when = ago(event.at, now);
741
+ return /* @__PURE__ */ jsxs("li", { children: [
742
+ /* @__PURE__ */ jsx(Glyph, {
743
+ "aria-hidden": true,
744
+ size: 12,
745
+ strokeWidth: 2
746
+ }),
747
+ /* @__PURE__ */ jsx("span", {
748
+ className: "ag-live-event-label",
749
+ children: event.label
750
+ }),
751
+ when && /* @__PURE__ */ jsx("time", {
752
+ className: "ag-live-event-at",
753
+ children: when
883
754
  })
884
- }, agent.turn ?? ""), /* @__PURE__ */ jsx("ol", {
885
- className: "ag-live-events",
886
- "aria-label": "Latest events",
887
- children: events.map((event) => /* @__PURE__ */ jsx("li", { children: event.label }, event.id))
888
- })]
889
- })]
755
+ ] }, event.id);
756
+ })
890
757
  })
891
758
  ]
892
759
  });
@@ -1141,7 +1008,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
1141
1008
  className: `agent-graph${live ? " ag-live" : ""} relative transition-opacity duration-150 ease-out motion-reduce:transition-none ${layout && shown ? "opacity-100" : "opacity-0"} ${className ?? ""}`,
1142
1009
  "data-layout": layout && shown ? "ready" : "pending",
1143
1010
  "data-columns": layout?.columns,
1144
- children: [live && /* @__PURE__ */ jsx("style", { children: "\n.ag-live { --ag-fg: hsl(var(--foreground)); --ag-muted: hsl(var(--muted-foreground)); --ag-surface: hsl(var(--card)); --ag-border: hsl(var(--border)); }\n.ag-live .ag-live-card { position: relative; display: flex; flex-direction: column; gap: 8px; width: 100%; height: 100%; padding: 12px; border: 1px solid var(--ag-border);\n border-radius: 12px; background: var(--ag-surface); color: var(--ag-fg); cursor: pointer; overflow: hidden; animation: ag-live-grow 360ms cubic-bezier(.2,.8,.2,1) both; transform-origin: 50% 0; }\n.ag-live .ag-live-head { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.ag-live .ag-live-names { display: flex; flex-direction: column; min-width: 0; flex: 1; }\n.ag-live .ag-live-name { font-size: 13px; line-height: 16px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-meta, .ag-live .ag-live-stats { font-size: 11px; line-height: 16px; color: var(--ag-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-stats { display: flex; flex-direction: column; align-items: flex-end; font-variant-numeric: tabular-nums; flex: none; }\n.ag-live .ag-live-body { display: flex; gap: 8px; min-height: 0; flex: 1; }\n.ag-live .ag-live-figure { flex: none; width: 60px; height: 48px; overflow: hidden; border-radius: 8px; background: color-mix(in oklab, var(--ag-fg) 5%, transparent); }\n.ag-live .ag-live-figure pre { margin: 0; padding: 0 4px; font: 11px/16px var(--font-mono, ui-monospace, monospace); color: var(--ag-fg); white-space: pre;\n animation: ag-live-frames calc(var(--ag-frames) * 280ms) steps(var(--ag-frames)) infinite; }\n.ag-live .ag-live-text { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }\n.ag-live .ag-live-thinking { margin: 0; font-size: 12px; line-height: 16px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; animation: ag-live-in 220ms ease-out both; }\n.ag-live .ag-live-quiet { color: var(--ag-muted); }\n.ag-live .ag-live-events { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 0; }\n.ag-live .ag-live-events li { font: 11px/16px var(--font-mono, ui-monospace, monospace); color: var(--ag-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; animation: ag-live-in 220ms ease-out both; }\n.ag-live .ag-live-events li:last-child { color: var(--ag-fg); }\n.ag-live .ag-live-slot { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }\n.ag-live .ag-live-chip { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; height: 32px; padding: 0 12px; border: 1px solid var(--ag-border); border-radius: 16px;\n background: var(--ag-surface); color: var(--ag-muted); font-size: 12px; opacity: .72; cursor: pointer; animation: ag-live-settle 320ms cubic-bezier(.2,.8,.2,1) both; }\n.ag-live .ag-live-chip-name { color: var(--ag-fg); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-chip-result { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n@keyframes ag-live-frames { to { transform: translateY(calc(var(--ag-frames) * -48px)); } }\n@keyframes ag-live-grow { from { opacity: 0; transform: scale(.7) translateY(-12px); } }\n@keyframes ag-live-in { from { opacity: 0; transform: translateY(4px); } }\n@keyframes ag-live-settle { from { opacity: 1; transform: scale(1.12); } }\n@media (prefers-reduced-motion: reduce) { .ag-live * { animation: none !important; } }\n" }), /* @__PURE__ */ jsxs(ReactFlow, {
1011
+ children: [live && /* @__PURE__ */ jsx("style", { children: "\n.ag-live { --ag-fg: hsl(var(--foreground)); --ag-muted: hsl(var(--muted-foreground)); --ag-surface: hsl(var(--card)); --ag-border: hsl(var(--border)); }\n.ag-live .ag-live-card { position: relative; display: flex; flex-direction: column; gap: 8px; width: 100%; height: 100%; padding: 12px; border: 1px solid var(--ag-border);\n border-radius: 14px; background: var(--ag-surface); color: var(--ag-fg); cursor: pointer; overflow: hidden; animation: ag-live-grow 420ms cubic-bezier(.2,.8,.2,1) both; transform-origin: 50% 0;\n transition: border-color 200ms ease, box-shadow 200ms ease, transform 200ms cubic-bezier(.2,.8,.2,1); }\n.ag-live .ag-live-card:hover { transform: translateY(-1px); }\n/* A running agent's card carries a thin travelling sheen along its top edge: work in progress without a glowing border. */\n.ag-live .ag-live-card[data-status=\"running\"]::before { content: \"\"; position: absolute; inset: 0 0 auto; height: 2px;\n background: linear-gradient(90deg, transparent, var(--ag-status), transparent); background-size: 40% 100%; background-repeat: no-repeat; animation: ag-live-sheen 2.4s ease-in-out infinite; }\n.ag-live .ag-live-head { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.ag-live .ag-live-names { display: flex; flex-direction: column; min-width: 0; flex: 1; }\n.ag-live .ag-live-name { font-size: 14px; line-height: 18px; font-weight: 600; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-meta, .ag-live .ag-live-stats { font-size: 11px; line-height: 14px; color: var(--ag-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-stats { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; font-variant-numeric: tabular-nums; flex: none; }\n.ag-live .ag-live-pill { display: inline-flex; align-items: center; gap: 4px; height: 16px; padding: 0 6px; border-radius: 8px; font-weight: 600; color: var(--ag-status);\n background: color-mix(in oklab, var(--ag-status) 14%, transparent); }\n.ag-live .ag-live-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ag-status); }\n.ag-live [data-status=\"running\"] .ag-live-dot { animation: ag-live-breathe 1.6s ease-in-out infinite; }\n.ag-live .ag-live-thinking { flex: none; margin: 0; font-size: 13px; line-height: 17px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; animation: ag-live-in 260ms ease-out both; }\n.ag-live .ag-live-quiet { color: var(--ag-muted); }\n.ag-live .ag-live-events { margin: auto 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; }\n.ag-live .ag-live-events li { display: flex; align-items: center; gap: 6px; height: 16px; font: 11px/16px var(--font-mono, ui-monospace, monospace); color: var(--ag-muted);\n animation: ag-live-in 260ms cubic-bezier(.2,.8,.2,1) both; }\n.ag-live .ag-live-events li svg { flex: none; opacity: .8; }\n/* Older lines fade back so the newest reads first, as a log tail does. */\n.ag-live .ag-live-events li:nth-last-child(3) { opacity: .55; }\n.ag-live .ag-live-events li:nth-last-child(2) { opacity: .8; }\n.ag-live .ag-live-events li:last-child { color: var(--ag-fg); animation: ag-live-in 260ms cubic-bezier(.2,.8,.2,1) both, ag-live-flash 1.2s ease-out both; }\n.ag-live .ag-live-event-label { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-event-at { flex: none; font-family: inherit; color: var(--ag-muted); font-variant-numeric: tabular-nums; }\n.ag-live .ag-live-slot { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }\n.ag-live .ag-live-chip { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; height: 32px; padding: 0 12px; border: 1px solid var(--ag-border); border-radius: 16px;\n background: var(--ag-surface); color: var(--ag-muted); font-size: 12px; opacity: .72; cursor: pointer; animation: ag-live-settle 320ms cubic-bezier(.2,.8,.2,1) both; }\n.ag-live .ag-live-chip-name { color: var(--ag-fg); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ag-live .ag-live-chip-result { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n@keyframes ag-live-sheen { from { background-position: -40% 0; } to { background-position: 140% 0; } }\n@keyframes ag-live-breathe { 50% { opacity: .35; transform: scale(.8); } }\n@keyframes ag-live-flash { from { background: color-mix(in oklab, var(--ag-status) 16%, transparent); } to { background: transparent; } }\n@keyframes ag-live-grow { from { opacity: 0; transform: scale(.92) translateY(-8px); } }\n@keyframes ag-live-in { from { opacity: 0; transform: translateY(6px); } }\n@keyframes ag-live-settle { from { opacity: 1; transform: scale(1.08); } }\n@media (prefers-reduced-motion: reduce) { .ag-live *, .ag-live *::before { animation: none !important; } .ag-live .ag-live-card:hover { transform: none; } }\n" }), /* @__PURE__ */ jsxs(ReactFlow, {
1145
1012
  nodes: flowNodes,
1146
1013
  edges: flowEdges,
1147
1014
  nodeTypes: NODE_TYPES,
@@ -1,4 +1,4 @@
1
- import { A as buildWorkflowGraph, B as clampPreview, C as problemSurface, E as COMPACT_NODE_SIZE, F as worstSeverity, H as fmtDuration, N as triggerNodeIndex, P as wfEdgeId, S as problemBorder, T as statusBorder, V as fmtCost, W as fmtTokens, _ as StatusFooter, a as useColorMode, b as emptySlotLabel, c as NodeMark, d as RESTING_BORDER, f as RESTING_SHADOW, i as motionAllowed, j as isStructuralKind, l as ProblemMarker, m as STATUS_LABEL, p as STATUS_COLOR, r as SELECTION_OUTLINE, u as ProblemMessages, v as StatusPill, w as problemTitle, x as kindAccent, y as edgeColor, z as shortModel } from "./AgentGraph-Beld8p6x.js";
1
+ import { A as buildWorkflowGraph, B as clampPreview, C as problemSurface, E as COMPACT_NODE_SIZE, F as worstSeverity, H as fmtDuration, N as triggerNodeIndex, P as wfEdgeId, S as problemBorder, T as statusBorder, V as fmtCost, W as fmtTokens, _ as StatusFooter, a as useColorMode, b as emptySlotLabel, c as NodeMark, d as RESTING_BORDER, f as RESTING_SHADOW, i as motionAllowed, j as isStructuralKind, l as ProblemMarker, m as STATUS_LABEL, p as STATUS_COLOR, r as SELECTION_OUTLINE, u as ProblemMessages, v as StatusPill, w as problemTitle, x as kindAccent, y as edgeColor, z as shortModel } from "./AgentGraph-CiaKH13k.js";
2
2
  import { n as classifyOutput, t as NodeOutputBody } from "./node-output-DlySTwxr.js";
3
3
  import { t as loadElk } from "./elk-loader-Dl9S7jQk.js";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
package/dist/globals.css CHANGED
@@ -78,6 +78,7 @@
78
78
  --radius-xl: 12px;
79
79
  --radius-2xl: 1rem;
80
80
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
81
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
81
82
  --animate-spin: spin 1s linear infinite;
82
83
  --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
83
84
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
@@ -2691,6 +2692,9 @@
2691
2692
  .bg-\[var\(--border-hover\)\] {
2692
2693
  background-color: var(--border-hover);
2693
2694
  }
2695
+ .bg-\[var\(--border-strong\)\] {
2696
+ background-color: var(--border-strong);
2697
+ }
2694
2698
  .bg-\[var\(--border-subtle\)\] {
2695
2699
  background-color: var(--border-subtle);
2696
2700
  }
@@ -4486,6 +4490,10 @@
4486
4490
  --tw-duration: var(--transition-fast);
4487
4491
  transition-duration: var(--transition-fast);
4488
4492
  }
4493
+ .ease-in-out {
4494
+ --tw-ease: var(--ease-in-out);
4495
+ transition-timing-function: var(--ease-in-out);
4496
+ }
4489
4497
  .ease-out {
4490
4498
  --tw-ease: var(--ease-out);
4491
4499
  transition-timing-function: var(--ease-out);
@@ -0,0 +1,14 @@
1
+ import "./vault-tree-CBS8qGT-.js";
2
+ import { FileNode } from "@tangle-network/ui/files";
3
+ /**
4
+ * Nests flat paths into folders. A path ending in `/` is a directory, so an
5
+ * empty folder survives; leading `./` and `/` are ignored.
6
+ */
7
+ declare function fileTreeFromPaths(paths: ReadonlyArray<string>): FileNode[];
8
+ /**
9
+ * Case-insensitive name filter: a file survives when its name matches; a
10
+ * folder survives whole when its own name matches, otherwise only with the
11
+ * descendants that survive.
12
+ */
13
+ declare function filterFileNodes(nodes: ReadonlyArray<FileNode>, query: string): FileNode[];
14
+ export { filterFileNodes as n, fileTreeFromPaths as t };
@@ -1,3 +1,4 @@
1
+ import { t as FileChange } from "./vault-tree-CBS8qGT-.js";
1
2
  import { ArtifactPane as ArtifactPane$1, ArtifactPaneProps } from "@tangle-network/ui/primitives";
2
3
  import { CSSProperties, HTMLAttributes, ReactNode, Ref } from "react";
3
4
  import { LucideIcon } from "lucide-react";
@@ -801,6 +802,8 @@ type WorkspaceFilesSource = {
801
802
  root?: never;
802
803
  };
803
804
  type WorkspaceFilesPaneProps = WorkspaceFilesSource & {
805
+ /** A change mark per listed path (`added`, `modified`, `deleted`), such as a branch's diff against main: the tree marks each. */
806
+ status?: Readonly<Record<string, FileChange>>;
804
807
  /** The open file. Its row is selected and its folders are revealed when it changes. */
805
808
  selectedPath?: string;
806
809
  /**
@@ -853,7 +856,7 @@ type WorkspaceFilesPaneProps = WorkspaceFilesSource & {
853
856
  * collapsed, expansion is remembered under `expansionKey`, and in the stacked
854
857
  * layout a preview replaces the tree until Back.
855
858
  */
856
- declare function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search, label, headerActions, surface, layout, tabs, expandable, className, style }: WorkspaceFilesPaneProps): import("react").JSX.Element;
859
+ declare function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search, label, headerActions, surface, layout, tabs, expandable, status, className, style }: WorkspaceFilesPaneProps): import("react").JSX.Element;
857
860
  interface WorkspaceArtifactViewProps {
858
861
  artifact: SandboxWorkbenchArtifact;
859
862
  /** Hide identity already supplied by the containing pane; retain actions and content. */
@@ -1,4 +1,4 @@
1
- import { d as AgentGraphNode } from "./AgentGraph-DL-QLjkw.js";
1
+ import { d as AgentGraphNode } from "./AgentGraph-DxAeQQch.js";
2
2
  import { ReactNode } from "react";
3
3
  import { ApprovalCard, ApprovalCardProps, ApprovalDiffFile, ApprovalDiffSummary, ApprovalPlanStep, ExpandedToolDetail, ExpandedToolDetailProps, FeedSegment, InlineThinkingItem as InlineThinkingItem$1, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps, RunPhase, RunPhaseList, RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot, TaskList, TaskListItem, TaskListProps, TaskStatus, ToolCallData, ToolCallData as ToolCallData$1, ToolCallFeed, ToolCallFeedProps, ToolCallStatus, ToolCallType, parseToolEvent, showsTaskPriority, taskProgress, taskStatus } from "@tangle-network/ui/run";
4
4
  import { FlowWaterfallProps } from "@tangle-network/charts/react";
package/dist/index.d.ts CHANGED
@@ -10,13 +10,14 @@ import { t as Session } from "./sidecar-CNP4zXop.js";
10
10
  import { d as useSessionStream, l as UseSessionStreamOptions, n as UseSidecarAuthOptions, o as SessionDegradation, r as useSidecarAuth, s as SessionInfo, t as SidecarAuth, u as UseSessionStreamResult } from "./use-sidecar-auth-CPevSSEj.js";
11
11
  import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SandboxMetrics, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SidecarMetricsPayload, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSandboxMetricsOptions, UseSandboxMetricsResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useLiveTime, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessions, useToolCallStream } from "./hooks.js";
12
12
  import { a as LogoProps, i as Logo, n as SectionTitle, o as TangleKnot, r as SectionTitleProps, t as HeadingProps } from "./index-BAEvGqrn.js";
13
- import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-e2GF6seB.js";
13
+ import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-D2_4ONCz.js";
14
+ import { i as VaultTreeProps, n as VAULT_TREE_CHILD_PAGE, r as VaultTree, t as FileChange } from "./vault-tree-CBS8qGT-.js";
14
15
  import { C as ChangedFile, D as SandboxArtifactTerminal, E as SandboxArtifactPaneProps, S as ArtifactView, T as SandboxArtifact, _ as PillTabItem, a as PreviewViewProps, b as ChangesPane, c as FileBreadcrumb, d as GitStatusBadge, f as PanelHeader, g as computeDiffStats, h as buildUnifiedPatch, i as PreviewView, l as FileBreadcrumbProps, m as DiffStats, n as CodeSurface, o as CodeView, p as PanelHeaderProps, r as CodeSurfaceProps, s as CodeViewProps, t as CODE_THEME, u as DiffStatsBadge, v as PillTabs, w as ChangesPaneProps, x as SandboxArtifactPane, y as PillTabsProps } from "./index-BLCi13uK.js";
15
16
  import { n as DiffViewProps, t as DiffView } from "./diff-view-DDHWtR6X.js";
16
17
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-Ta5GI4hx.js";
17
18
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISchemaIssue, OpenUISchemaValidation, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
18
- import { A as ToolCallType, B as TraceEvent, C as TaskListItem, D as ToolCallFeed, E as ToolCallData, F as AgentStreamRow, G as traceSpanMark, H as TraceWorkspaceProps, I as AgentStreamState, L as AgentTranscriptEntry, M as showsTaskPriority, N as taskProgress, O as ToolCallFeedProps, P as taskStatus, R as foldAgentRows, S as TaskList, T as TaskStatus, U as TraceWaterfall, V as TraceWorkspace, W as TraceWaterfallProps, _ as RunPhaseList, a as ApprovalPlanStep, b as RunRowStatus, c as FeedSegment, d as InlineToolItem, f as InlineToolItemProps, g as RunPhase, h as RunGroupProps, i as ApprovalDiffSummary, j as parseToolEvent, k as ToolCallStatus, l as InlineThinkingItem, m as RunGroup, n as ApprovalCardProps, o as ExpandedToolDetail, p as LiveDuration, r as ApprovalDiffFile, s as ExpandedToolDetailProps, t as ApprovalCard, u as InlineThinkingItemProps, v as RunRowShell, w as TaskListProps, x as RunRowStatusDot, y as RunRowShellProps, z as useAgentStream } from "./index-D6gtWRHq.js";
19
- import { a as VaultTreeProps, i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./index-y2OPUSoY.js";
19
+ import { A as ToolCallType, B as TraceEvent, C as TaskListItem, D as ToolCallFeed, E as ToolCallData, F as AgentStreamRow, G as traceSpanMark, H as TraceWorkspaceProps, I as AgentStreamState, L as AgentTranscriptEntry, M as showsTaskPriority, N as taskProgress, O as ToolCallFeedProps, P as taskStatus, R as foldAgentRows, S as TaskList, T as TaskStatus, U as TraceWaterfall, V as TraceWorkspace, W as TraceWaterfallProps, _ as RunPhaseList, a as ApprovalPlanStep, b as RunRowStatus, c as FeedSegment, d as InlineToolItem, f as InlineToolItemProps, g as RunPhase, h as RunGroupProps, i as ApprovalDiffSummary, j as parseToolEvent, k as ToolCallStatus, l as InlineThinkingItem, m as RunGroup, n as ApprovalCardProps, o as ExpandedToolDetail, p as LiveDuration, r as ApprovalDiffFile, s as ExpandedToolDetailProps, t as ApprovalCard, u as InlineThinkingItemProps, v as RunRowShell, w as TaskListProps, x as RunRowStatusDot, y as RunRowShellProps, z as useAgentStream } from "./index-UCV03IrH.js";
20
+ import { n as filterFileNodes, t as fileTreeFromPaths } from "./index-CrN4d8gd.js";
20
21
  import { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, ChatSession, RegisterActiveSessionOptions, SessionProjectKey, activeSessionsAtom, addMessage, addParts, bumpActiveSessionActivity, clearChat, connectSession, disconnectSession, getActiveSession, getAllActiveSessions, getAllProjectActivity, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, messagesAtom, partMapAtom, registerActiveSession, resetActiveSessions, sessionAtom, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useHasBackgroundRunningSessions, useNavbarSessions, useProjectActivity, useProjectSessions, useSessionsByActivity, useTotalRunningSessions } from "./stores.js";
21
22
  import { AgentBranding, CustomToolRenderer, DisplayVariant, FinalTextPart, GroupedMessage, MessageRun, MessageUser, ReasoningPart, Run, RunStats, SessionMessage, SessionPart, TextPart, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime } from "./types.js";
22
23
  import { TOOL_CATEGORY_ICONS, cn, copyText, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, formatBytes, formatDuration, formatUptime, getToolCategory, getToolDisplayMetadata, getToolErrorText, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, plainTextFromMarkdown, timeAgo, truncateText } from "./utils.js";
@@ -24,4 +25,4 @@ import { TerminalCursor as TerminalDisplayCursor, TerminalInput as TerminalDispl
24
25
  import { ApiSchema, ApiSchemaProps, CodeBlock as CodeBlockDisplay, CopyButtonProps, Markdown, MarkdownLinkChip, MarkdownLinkChipResolver, MarkdownProps, codeBlockGrammar, fenceInfo, getSanitizedMarkdownHeadingIdFromRawFragment, numericColumns, tableCsv } from "@tangle-network/ui/markdown";
25
26
  import { CommandPreview, CommandPreviewProps, DiffPreview, DiffPreviewProps, GlobResultsPreview, GlobResultsPreviewProps, GrepResultsPreview, GrepResultsPreviewProps, QuestionPreview, QuestionPreviewProps, WebSearchPreview, WebSearchPreviewProps, WriteFilePreview, WriteFilePreviewProps } from "@tangle-network/ui/tool-previews";
26
27
  export * from "@tangle-network/ui/primitives";
27
- export { type ActiveProjectActivity, type ActiveSessionActivityOptions, type ActiveSessionConnectionOptions, type ActiveSessionConnectionState, type ActiveSessionReconnectState, type ActiveSessionRecord, type ActiveSessionStatus, type ActiveSessionTransportMode, type ActiveSessionsState, ActivityFeed, type ActivityFeedProps, type ActivityItem, type AgentBranding, type AgentEnrollmentViewState, AgentMessagingConnection, type AgentMessagingConnectionProps, type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, type AgentStreamEvent, type AgentStreamRow, type AgentStreamState, type AgentTargetSummary, AgentTimeline, type AgentTimelineArtifactItem, type AgentTimelineCustomItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, type AgentTranscriptEntry, ApiSchema, type ApiSchemaProps, type AppearanceController, type AppendUserMessageOptions, type ApplySdkEventOptions, ApprovalCard, type ApprovalCardProps, type ApprovalConfidenceStat, type ApprovalDiffFile, ApprovalDiffSummary, type ApprovalItem, type ApprovalPlanStep, ApprovalQueue, type ApprovalQueueProps, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, ArtifactPane, type ArtifactPaneProps, type ArtifactScope, type ArtifactView, AuthHeader, type AuthHeaderProps, type AuthUser, type AutomationStreamEvent, type Backend, BackendSelector, type BackendSelectorProps, type BannerType, type BeginAssistantMessageOptions, type BillingBalance, BillingDashboard, type BillingDashboardProps, type BillingSubscription, type BillingUsage, type BotStreamEvent, CODE_THEME, CSV_PREVIEW_ROW_LIMIT, type CalendarEvent, CalendarView, type CalendarViewProps, type ChangedFile, ChangesPane, type ChangesPaneProps, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, ChatSession, CodeBlockDisplay, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, CommandPreview, type CommandPreviewProps, type CompleteAssistantMessageOptions, type ContextBadge, type CopyButtonProps, type CustomToolRenderer, DEFAULT_REASONING_LEVEL_OPTIONS, DashboardLayout, type DashboardLayoutProps, DashboardPageHeader, type DashboardPageHeaderProps, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, DiffPreview, type DiffPreviewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, DirectoryPane, type DirectoryPaneProps, type DisplayVariant, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, ExpandedToolDetail, type ExpandedToolDetailProps, type ExposedPort, type FeedSegment, FileArtifactPane, type FileArtifactPaneProps, FileBreadcrumb, type FileBreadcrumbProps, FileCard, type FileCardProps, type FileDetails, type FileFormat, FileList, type FileListItem, type FileListProps, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, type FileUploader, type FinalTextPart, type GitCommitData, GitHubLoginButton, type GitHubLoginButtonProps, GitPanel, type GitPanelProps, GitStatusBadge, type GitStatusData, GlobResultsPreview, type GlobResultsPreviewProps, GrepResultsPreview, type GrepResultsPreviewProps, type GroupedMessage, HARNESS_BRAND, HARNESS_OPTIONS, HARNESS_REASONING_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, type HarnessType, type HeadingProps, INSUFFICIENT_BALANCE_CODE, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, type InsufficientBalance, LiveDuration, LoginLayout, type LoginLayoutProps, Logo, type LogoProps, Markdown, type MarkdownLinkChip, type MarkdownLinkChipResolver, type MarkdownProps, type McpServer, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, type MessageRun, type MessageUser, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type ModelBrandIdentity, ModelBrandStack, type ModelInfo, type NavItem, NewSandboxCard, type NewSandboxCardProps, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISchemaIssue, type OpenUISchemaValidation, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode, OutOfCreditsModal, type OutOfCreditsModalProps, PanelHeader, type PanelHeaderProps, PdfViewer, type PdfViewerConfig, type PdfViewerProps, type PillTabItem, PillTabs, type PillTabsProps, PortsList, type PortsListProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, PricingPage, type PricingPageProps, type PricingTier, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, PromoBanner, type PromoBannerProps, ProviderMark, QuestionPreview, type QuestionPreviewProps, RailButton, type RailButtonProps, RailExpandable, type RailExpandableProps, type RailExpandableSubItem, RailFlyout, type RailFlyoutProps, RailHeader, type RailHeaderProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailTooltip, type RailTooltipProps, type RealtimeSessionOptions, RealtimeSessionRegistry, type RealtimeSessionRegistryProps, type RealtimeSessionState, type RealtimeSessionTarget, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, type ReasoningPart, type RegisterActiveSessionOptions, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, type Run, RunGroup, type RunGroupProps, type RunPhase, RunPhaseList, RunRowShell, type RunRowShellProps, type RunRowStatus, RunRowStatusDot, type RunStats, RuntimePane, type RuntimePaneProps, SANDBOX_STATUS, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, type SSEEvent, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxMetrics, SandboxPageShell, type SandboxPageShellProps, type SandboxStatus, SandboxStatusPill, type SandboxStatusPillProps, SandboxTable, type SandboxTableProps, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, type SdkSessionAttachment, type SdkSessionEvent, type SdkSessionSeed, SectionTitle, type SectionTitleProps, Session, type SessionCreatedDetail, type SessionDegradation, type SessionInfo, type SessionMessage, type SessionOptimisticController, type SessionPart, type SessionProjectKey, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, type SessionUser, type SharedMessagingRouteViewState, ShellHeader, type ShellHeaderProps, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, Sidebar, SidebarContent, type SidebarContentProps, SidebarLayout, type SidebarLayoutFlyoutItem, type SidebarLayoutNavItem, type SidebarLayoutProps, SidebarPanel, SidebarPanelContent, type SidebarPanelContentProps, SidebarPanelHeader, type SidebarPanelHeaderProps, type SidebarPanelProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarRail, SidebarRailFooter, type SidebarRailFooterProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, type SidecarAuth, type SidecarMetricsPayload, SnapshotList, type SnapshotListProps, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, SystemLogsViewer, type SystemLogsViewerProps, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, TangleKnot, TangleLoginButton, type TangleLoginButtonProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, TaskList, type TaskListItem, type TaskListProps, type TaskStatus, type TaskStreamEvent, type TeamRole, TemplateCard, type TemplateCardData, type TemplateCardProps, TerminalDisplayCursor, TerminalDisplayInput, TerminalDisplayLine, type TerminalLine, TerminalPanel, type TerminalProps, type TerminalStreamEvent, type TextPart, type ThemeMode, ThinkingIndicator, type ThinkingIndicatorProps, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, type ToolCategory, type ToolDisplayMetadata, type ToolPart, type ToolState, type ToolStatus, type ToolTime, type TraceEvent, TraceWaterfall, type TraceWaterfallProps, TraceWorkspace, type TraceWorkspaceProps, UsageChart, type UsageChartProps, type UsageDataPoint, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type UseAuthOptions, type UseAuthResult, type UseOptimisticSessionItemsOptions, type UsePtySessionOptions, type UsePtySessionReturn, type UseRunGroupsOptions, type UseSSEStreamOptions, type UseSSEStreamResult, type UseSandboxMetricsOptions, type UseSandboxMetricsResult, type UseSdkSessionOptions, type UseSdkSessionReturn, type UseSessionStreamOptions, type UseSessionStreamResult, type UseSidecarAuthOptions, type UseToolCallStreamReturn, UserMenu, type UserMenuProps, UserMessage, type UserMessageProps, VAULT_TREE_CHILD_PAGE, VaultTree, type VaultTreeProps, WebSearchPreview, type WebSearchPreviewProps, WorkspaceArtifactView, type WorkspaceArtifactViewProps, WorkspaceFilesPane, type WorkspaceFilesPaneProps, type WorkspaceFilesPreview, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, WorkspaceSurface, WorkspaceSurfaceFrame, type WorkspaceSurfaceFrameProps, type WorkspaceSurfaceHeadingLevel, type WorkspaceSurfaceProps, WorkspaceSurfaceTitle, type WorkspaceSurfaceTitleProps, WriteFilePreview, type WriteFilePreviewProps, activeSessionsAtom, addMessage, addParts, buildUnifiedPatch, bumpActiveSessionActivity, canAdminSandbox, canonicalModelId, chatCapableHarnesses, clearChat, cn, codeBlockGrammar, computeDiffStats, configurePdfViewer, connectSession, copyText, createAuthFetcher, createShellShouldRevalidate, detectFileFormat, disconnectSession, dispatchSessionCreated, fenceInfo, fileExtension, fileTreeFromPaths, filterFileNodes, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldAgentRows, formatBytes, formatDuration, formatPrice, formatRelativeAge, formatUptime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, messagesAtom, modelBrandFor, modelProvider, numericColumns, parseCsv, parseInsufficientBalance, parseToolEvent, partMapAtom, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, sandboxStatus, sessionAtom, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, shellShouldRevalidate, showsTaskPriority, snapHarnessToModel, tableCsv, taskProgress, taskStatus, timeAgo, traceSpanMark, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useAgentStream, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, useOptimisticSessionItems, useProjectActivity, useProjectSessions, usePtySession, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessionStream, useSessions, useSessionsByActivity, useSidebar, useSidecarAuth, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
28
+ export { type ActiveProjectActivity, type ActiveSessionActivityOptions, type ActiveSessionConnectionOptions, type ActiveSessionConnectionState, type ActiveSessionReconnectState, type ActiveSessionRecord, type ActiveSessionStatus, type ActiveSessionTransportMode, type ActiveSessionsState, ActivityFeed, type ActivityFeedProps, type ActivityItem, type AgentBranding, type AgentEnrollmentViewState, AgentMessagingConnection, type AgentMessagingConnectionProps, type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, type AgentStreamEvent, type AgentStreamRow, type AgentStreamState, type AgentTargetSummary, AgentTimeline, type AgentTimelineArtifactItem, type AgentTimelineCustomItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, type AgentTranscriptEntry, ApiSchema, type ApiSchemaProps, type AppearanceController, type AppendUserMessageOptions, type ApplySdkEventOptions, ApprovalCard, type ApprovalCardProps, type ApprovalConfidenceStat, type ApprovalDiffFile, ApprovalDiffSummary, type ApprovalItem, type ApprovalPlanStep, ApprovalQueue, type ApprovalQueueProps, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, ArtifactPane, type ArtifactPaneProps, type ArtifactScope, type ArtifactView, AuthHeader, type AuthHeaderProps, type AuthUser, type AutomationStreamEvent, type Backend, BackendSelector, type BackendSelectorProps, type BannerType, type BeginAssistantMessageOptions, type BillingBalance, BillingDashboard, type BillingDashboardProps, type BillingSubscription, type BillingUsage, type BotStreamEvent, CODE_THEME, CSV_PREVIEW_ROW_LIMIT, type CalendarEvent, CalendarView, type CalendarViewProps, type ChangedFile, ChangesPane, type ChangesPaneProps, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, ChatSession, CodeBlockDisplay, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, CommandPreview, type CommandPreviewProps, type CompleteAssistantMessageOptions, type ContextBadge, type CopyButtonProps, type CustomToolRenderer, DEFAULT_REASONING_LEVEL_OPTIONS, DashboardLayout, type DashboardLayoutProps, DashboardPageHeader, type DashboardPageHeaderProps, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, DiffPreview, type DiffPreviewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, DirectoryPane, type DirectoryPaneProps, type DisplayVariant, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, ExpandedToolDetail, type ExpandedToolDetailProps, type ExposedPort, type FeedSegment, FileArtifactPane, type FileArtifactPaneProps, FileBreadcrumb, type FileBreadcrumbProps, FileCard, type FileCardProps, type FileChange, type FileDetails, type FileFormat, FileList, type FileListItem, type FileListProps, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, type FileUploader, type FinalTextPart, type GitCommitData, GitHubLoginButton, type GitHubLoginButtonProps, GitPanel, type GitPanelProps, GitStatusBadge, type GitStatusData, GlobResultsPreview, type GlobResultsPreviewProps, GrepResultsPreview, type GrepResultsPreviewProps, type GroupedMessage, HARNESS_BRAND, HARNESS_OPTIONS, HARNESS_REASONING_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, type HarnessType, type HeadingProps, INSUFFICIENT_BALANCE_CODE, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, type InsufficientBalance, LiveDuration, LoginLayout, type LoginLayoutProps, Logo, type LogoProps, Markdown, type MarkdownLinkChip, type MarkdownLinkChipResolver, type MarkdownProps, type McpServer, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, type MessageRun, type MessageUser, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type ModelBrandIdentity, ModelBrandStack, type ModelInfo, type NavItem, NewSandboxCard, type NewSandboxCardProps, OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISchemaIssue, type OpenUISchemaValidation, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode, OutOfCreditsModal, type OutOfCreditsModalProps, PanelHeader, type PanelHeaderProps, PdfViewer, type PdfViewerConfig, type PdfViewerProps, type PillTabItem, PillTabs, type PillTabsProps, PortsList, type PortsListProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, PricingPage, type PricingPageProps, type PricingTier, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, PromoBanner, type PromoBannerProps, ProviderMark, QuestionPreview, type QuestionPreviewProps, RailButton, type RailButtonProps, RailExpandable, type RailExpandableProps, type RailExpandableSubItem, RailFlyout, type RailFlyoutProps, RailHeader, type RailHeaderProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailTooltip, type RailTooltipProps, type RealtimeSessionOptions, RealtimeSessionRegistry, type RealtimeSessionRegistryProps, type RealtimeSessionState, type RealtimeSessionTarget, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, type ReasoningPart, type RegisterActiveSessionOptions, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, type Run, RunGroup, type RunGroupProps, type RunPhase, RunPhaseList, RunRowShell, type RunRowShellProps, type RunRowStatus, RunRowStatusDot, type RunStats, RuntimePane, type RuntimePaneProps, SANDBOX_STATUS, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, type SSEEvent, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxMetrics, SandboxPageShell, type SandboxPageShellProps, type SandboxStatus, SandboxStatusPill, type SandboxStatusPillProps, SandboxTable, type SandboxTableProps, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, type SdkSessionAttachment, type SdkSessionEvent, type SdkSessionSeed, SectionTitle, type SectionTitleProps, Session, type SessionCreatedDetail, type SessionDegradation, type SessionInfo, type SessionMessage, type SessionOptimisticController, type SessionPart, type SessionProjectKey, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, type SessionUser, type SharedMessagingRouteViewState, ShellHeader, type ShellHeaderProps, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, Sidebar, SidebarContent, type SidebarContentProps, SidebarLayout, type SidebarLayoutFlyoutItem, type SidebarLayoutNavItem, type SidebarLayoutProps, SidebarPanel, SidebarPanelContent, type SidebarPanelContentProps, SidebarPanelHeader, type SidebarPanelHeaderProps, type SidebarPanelProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarRail, SidebarRailFooter, type SidebarRailFooterProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, type SidecarAuth, type SidecarMetricsPayload, SnapshotList, type SnapshotListProps, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, SystemLogsViewer, type SystemLogsViewerProps, TOOL_CATEGORY_ICONS, TRANSCRIPT_TEXT, TangleKnot, TangleLoginButton, type TangleLoginButtonProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, TaskList, type TaskListItem, type TaskListProps, type TaskStatus, type TaskStreamEvent, type TeamRole, TemplateCard, type TemplateCardData, type TemplateCardProps, TerminalDisplayCursor, TerminalDisplayInput, TerminalDisplayLine, type TerminalLine, TerminalPanel, type TerminalProps, type TerminalStreamEvent, type TextPart, type ThemeMode, ThinkingIndicator, type ThinkingIndicatorProps, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, type ToolCategory, type ToolDisplayMetadata, type ToolPart, type ToolState, type ToolStatus, type ToolTime, type TraceEvent, TraceWaterfall, type TraceWaterfallProps, TraceWorkspace, type TraceWorkspaceProps, UsageChart, type UsageChartProps, type UsageDataPoint, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type UseAuthOptions, type UseAuthResult, type UseOptimisticSessionItemsOptions, type UsePtySessionOptions, type UsePtySessionReturn, type UseRunGroupsOptions, type UseSSEStreamOptions, type UseSSEStreamResult, type UseSandboxMetricsOptions, type UseSandboxMetricsResult, type UseSdkSessionOptions, type UseSdkSessionReturn, type UseSessionStreamOptions, type UseSessionStreamResult, type UseSidecarAuthOptions, type UseToolCallStreamReturn, UserMenu, type UserMenuProps, UserMessage, type UserMessageProps, VAULT_TREE_CHILD_PAGE, VaultTree, type VaultTreeProps, WebSearchPreview, type WebSearchPreviewProps, WorkspaceArtifactView, type WorkspaceArtifactViewProps, WorkspaceFilesPane, type WorkspaceFilesPaneProps, type WorkspaceFilesPreview, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, WorkspaceSurface, WorkspaceSurfaceFrame, type WorkspaceSurfaceFrameProps, type WorkspaceSurfaceHeadingLevel, type WorkspaceSurfaceProps, WorkspaceSurfaceTitle, type WorkspaceSurfaceTitleProps, WriteFilePreview, type WriteFilePreviewProps, activeSessionsAtom, addMessage, addParts, buildUnifiedPatch, bumpActiveSessionActivity, canAdminSandbox, canonicalModelId, chatCapableHarnesses, clearChat, cn, codeBlockGrammar, computeDiffStats, configurePdfViewer, connectSession, copyText, createAuthFetcher, createShellShouldRevalidate, detectFileFormat, disconnectSession, dispatchSessionCreated, fenceInfo, fileExtension, fileTreeFromPaths, filterFileNodes, filterFileTree, findUnsupportedOpenUINode, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, foldAgentRows, formatBytes, formatDuration, formatPrice, formatRelativeAge, formatUptime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSanitizedMarkdownHeadingIdFromRawFragment, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, isViewerMessage, ixControl, ixControlAfter, ixControlSoft, ixField, ixRow, ixSelected, ixTabUnderline, messagesAtom, modelBrandFor, modelProvider, numericColumns, parseCsv, parseInsufficientBalance, parseToolEvent, partMapAtom, plainTextFromMarkdown, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, sandboxStatus, sessionAtom, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, shellShouldRevalidate, showsTaskPriority, snapHarnessToModel, tableCsv, taskProgress, taskStatus, timeAgo, traceSpanMark, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useAgentStream, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, useOptimisticSessionItems, useProjectActivity, useProjectSessions, usePtySession, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessionStream, useSessions, useSessionsByActivity, useSidebar, useSidecarAuth, useToolCallStream, useTotalRunningSessions, validateOpenUIJsonArtifact, validateOpenUIJsonNode };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { n as __reExport, t as __exportAll } from "./rolldown-runtime-782esTHO.js";
2
2
  import { i as TangleKnot, n as SectionTitle, r as Logo, t as primitives_exports } from "./primitives-CiwDp4-0.js";
3
3
  import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CwqDzC4I.js";
4
- import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-Cis6jAGl.js";
5
- import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./tree-data-D57M2idS.js";
4
+ import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-CdcRUl-H.js";
5
+ import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./tree-data-C8CNt4WE.js";
6
6
  import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-ClKA3opr.js";
7
7
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-bTcMjQtB.js";
8
8
  import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-CuOpvZys.js";
@@ -13,7 +13,7 @@ import { a as CodeSurface, i as CODE_THEME, n as buildUnifiedPatch, r as compute
13
13
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-DXsoPale.js";
14
14
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
15
15
  import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-4OZD23RA.js";
16
- import { _ as TraceWorkspace, a as InlineToolItem, b as TraceWaterfall, c as RunPhaseList, d as TaskList, f as ToolCallFeed, g as taskStatus, h as taskProgress, i as InlineThinkingItem, l as RunRowShell, m as showsTaskPriority, n as ApprovalDiffSummary, o as LiveDuration, p as parseToolEvent, r as ExpandedToolDetail, s as RunGroup, t as ApprovalCard, u as RunRowStatusDot, v as foldAgentRows, x as traceSpanMark, y as useAgentStream } from "./run-CC-DESx8.js";
16
+ import { _ as TraceWorkspace, a as InlineToolItem, b as TraceWaterfall, c as RunPhaseList, d as TaskList, f as ToolCallFeed, g as taskStatus, h as taskProgress, i as InlineThinkingItem, l as RunRowShell, m as showsTaskPriority, n as ApprovalDiffSummary, o as LiveDuration, p as parseToolEvent, r as ExpandedToolDetail, s as RunGroup, t as ApprovalCard, u as RunRowStatusDot, v as foldAgentRows, x as traceSpanMark, y as useAgentStream } from "./run-CUcmbRvq.js";
17
17
  import "./vault-tree.js";
18
18
  import { a as TangleLoginButton, i as UserMenu, n as GitHubLoginButton, r as LoginLayout, t as AuthHeader } from "./auth-BDpoZ_2f.js";
19
19
  import { t as AgentMessagingConnection } from "./connections-DymjzHe_.js";
@@ -1,7 +1,7 @@
1
1
  import { t as cn } from "./utils-BER_bdgE.js";
2
2
  import { i as modelBrandFor, t as ModelBrandStack } from "./model-brand-bTcMjQtB.js";
3
3
  import { t as ProviderIcon } from "./provider-logo-CPKRPHcS.js";
4
- import { t as AgentGraph } from "./AgentGraph-Beld8p6x.js";
4
+ import { t as AgentGraph } from "./AgentGraph-CiaKH13k.js";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
7
7
  import { X } from "lucide-react";
package/dist/run.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as ToolCallType, B as TraceEvent, C as TaskListItem, D as ToolCallFeed, E as ToolCallData, F as AgentStreamRow, G as traceSpanMark, H as TraceWorkspaceProps, I as AgentStreamState, L as AgentTranscriptEntry, M as showsTaskPriority, N as taskProgress, O as ToolCallFeedProps, P as taskStatus, R as foldAgentRows, S as TaskList, T as TaskStatus, U as TraceWaterfall, V as TraceWorkspace, W as TraceWaterfallProps, _ as RunPhaseList, a as ApprovalPlanStep, b as RunRowStatus, c as FeedSegment, d as InlineToolItem, f as InlineToolItemProps, g as RunPhase, h as RunGroupProps, i as ApprovalDiffSummary, j as parseToolEvent, k as ToolCallStatus, l as InlineThinkingItem, m as RunGroup, n as ApprovalCardProps, o as ExpandedToolDetail, p as LiveDuration, r as ApprovalDiffFile, s as ExpandedToolDetailProps, t as ApprovalCard, u as InlineThinkingItemProps, v as RunRowShell, w as TaskListProps, x as RunRowStatusDot, y as RunRowShellProps, z as useAgentStream } from "./index-D6gtWRHq.js";
1
+ import { A as ToolCallType, B as TraceEvent, C as TaskListItem, D as ToolCallFeed, E as ToolCallData, F as AgentStreamRow, G as traceSpanMark, H as TraceWorkspaceProps, I as AgentStreamState, L as AgentTranscriptEntry, M as showsTaskPriority, N as taskProgress, O as ToolCallFeedProps, P as taskStatus, R as foldAgentRows, S as TaskList, T as TaskStatus, U as TraceWaterfall, V as TraceWorkspace, W as TraceWaterfallProps, _ as RunPhaseList, a as ApprovalPlanStep, b as RunRowStatus, c as FeedSegment, d as InlineToolItem, f as InlineToolItemProps, g as RunPhase, h as RunGroupProps, i as ApprovalDiffSummary, j as parseToolEvent, k as ToolCallStatus, l as InlineThinkingItem, m as RunGroup, n as ApprovalCardProps, o as ExpandedToolDetail, p as LiveDuration, r as ApprovalDiffFile, s as ExpandedToolDetailProps, t as ApprovalCard, u as InlineThinkingItemProps, v as RunRowShell, w as TaskListProps, x as RunRowStatusDot, y as RunRowShellProps, z as useAgentStream } from "./index-UCV03IrH.js";
2
2
  export { type AgentStreamRow, type AgentStreamState, type AgentTranscriptEntry, ApprovalCard, type ApprovalCardProps, type ApprovalDiffFile, ApprovalDiffSummary, type ApprovalPlanStep, ExpandedToolDetail, type ExpandedToolDetailProps, type FeedSegment, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, LiveDuration, RunGroup, type RunGroupProps, type RunPhase, RunPhaseList, RunRowShell, type RunRowShellProps, type RunRowStatus, RunRowStatusDot, TaskList, type TaskListItem, type TaskListProps, type TaskStatus, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, type TraceEvent, TraceWaterfall, type TraceWaterfallProps, TraceWorkspace, type TraceWorkspaceProps, foldAgentRows, parseToolEvent, showsTaskPriority, taskProgress, taskStatus, traceSpanMark, useAgentStream };
package/dist/run.js CHANGED
@@ -1 +1 @@
1
- export { t as ApprovalCard, n as ApprovalDiffSummary, r as ExpandedToolDetail, i as InlineThinkingItem, a as InlineToolItem, o as LiveDuration, s as RunGroup, c as RunPhaseList, l as RunRowShell, u as RunRowStatusDot, d as TaskList, f as ToolCallFeed, b as TraceWaterfall, _ as TraceWorkspace, v as foldAgentRows, p as parseToolEvent, m as showsTaskPriority, h as taskProgress, g as taskStatus, x as traceSpanMark, y as useAgentStream } from "./run-CC-DESx8.js";
1
+ export { t as ApprovalCard, n as ApprovalDiffSummary, r as ExpandedToolDetail, i as InlineThinkingItem, a as InlineToolItem, o as LiveDuration, s as RunGroup, c as RunPhaseList, l as RunRowShell, u as RunRowStatusDot, d as TaskList, f as ToolCallFeed, b as TraceWaterfall, _ as TraceWorkspace, v as foldAgentRows, p as parseToolEvent, m as showsTaskPriority, h as taskProgress, g as taskStatus, x as traceSpanMark, y as useAgentStream } from "./run-CUcmbRvq.js";
package/dist/styles.css CHANGED
@@ -78,6 +78,7 @@
78
78
  --radius-xl: 12px;
79
79
  --radius-2xl: 1rem;
80
80
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
81
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
81
82
  --animate-spin: spin 1s linear infinite;
82
83
  --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
83
84
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
@@ -2691,6 +2692,9 @@
2691
2692
  .bg-\[var\(--border-hover\)\] {
2692
2693
  background-color: var(--border-hover);
2693
2694
  }
2695
+ .bg-\[var\(--border-strong\)\] {
2696
+ background-color: var(--border-strong);
2697
+ }
2694
2698
  .bg-\[var\(--border-subtle\)\] {
2695
2699
  background-color: var(--border-subtle);
2696
2700
  }
@@ -4486,6 +4490,10 @@
4486
4490
  --tw-duration: var(--transition-fast);
4487
4491
  transition-duration: var(--transition-fast);
4488
4492
  }
4493
+ .ease-in-out {
4494
+ --tw-ease: var(--ease-in-out);
4495
+ transition-timing-function: var(--ease-in-out);
4496
+ }
4489
4497
  .ease-out {
4490
4498
  --tw-ease: var(--ease-out);
4491
4499
  transition-timing-function: var(--ease-out);
@@ -1,7 +1,7 @@
1
1
  import { t as revealInScroller } from "./reveal-in-scroller-CzKwuqCG.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
- import { ChevronRight, File, FileCode, FileImage, FileJson, FileSpreadsheet, FileText, Folder, FolderOpen } from "lucide-react";
4
+ import { BookOpen, Braces, ChevronRight, File, FileCode, FileCog, FileImage, FileLock, FileSpreadsheet, FileTerminal, FileText, Folder, FolderOpen, GitBranch, Package, Scale } from "lucide-react";
5
5
  // src/vault-tree/vault-tree.tsx
6
6
  /**
7
7
  * The file tree shared by the vault page and workspace Files panels: folders
@@ -16,10 +16,31 @@ import { ChevronRight, File, FileCode, FileImage, FileJson, FileSpreadsheet, Fil
16
16
  * The tree follows the WAI-ARIA tree pattern with a single tab stop: arrow keys
17
17
  * move between rows, Right/Left expand, collapse or move to a child or parent,
18
18
  * Home/End jump, and Enter or Space open a file or toggle a folder.
19
+ *
20
+ * Each row reads at a glance: a file-type glyph in its type's ink (Brand tone
21
+ * icons), a 1 px guide per depth with the open file's parent guide stronger,
22
+ * and, when the host passes `status`, an added / modified / deleted letter; a
23
+ * collapsed folder holding changes carries a dot.
19
24
  */
20
25
  /** Children rendered per folder before a "Show more" row. */
21
26
  const VAULT_TREE_CHILD_PAGE = 200;
22
27
  const STORAGE_PREFIX = "tangle:vault-tree:";
28
+ const CHANGE = {
29
+ added: {
30
+ letter: "A",
31
+ ink: "text-[var(--surface-success-text)]"
32
+ },
33
+ modified: {
34
+ letter: "M",
35
+ ink: "text-[var(--surface-warning-text)]"
36
+ },
37
+ deleted: {
38
+ letter: "D",
39
+ ink: "text-[var(--surface-danger-text)]"
40
+ }
41
+ };
42
+ /** One indent step; guides sit on its centre line. */
43
+ const INDENT = 12;
23
44
  function storageFor(key) {
24
45
  if (!key || typeof window === "undefined") return null;
25
46
  try {
@@ -59,39 +80,203 @@ function sortChildren(children) {
59
80
  return collator.compare(a.name, b.name);
60
81
  });
61
82
  }
62
- const FILE_ICONS = {
63
- md: FileText,
64
- mdx: FileText,
65
- txt: FileText,
66
- pdf: FileText,
67
- doc: FileText,
68
- docx: FileText,
69
- csv: FileSpreadsheet,
70
- tsv: FileSpreadsheet,
71
- xls: FileSpreadsheet,
72
- xlsx: FileSpreadsheet,
73
- json: FileJson,
74
- png: FileImage,
75
- jpg: FileImage,
76
- jpeg: FileImage,
77
- gif: FileImage,
78
- webp: FileImage,
79
- svg: FileImage,
80
- ts: FileCode,
81
- tsx: FileCode,
82
- js: FileCode,
83
- jsx: FileCode,
84
- py: FileCode,
85
- html: FileCode,
86
- css: FileCode,
87
- yaml: FileCode,
88
- yml: FileCode
83
+ const INK = {
84
+ blue: "text-[var(--tone-blue-icon)]",
85
+ orange: "text-[var(--tone-orange-icon)]",
86
+ lime: "text-[var(--tone-lime-icon)]",
87
+ brown: "text-[var(--tone-brown-icon)]",
88
+ pink: "text-[var(--tone-pink-icon)]",
89
+ teal: "text-[var(--tone-teal-icon)]",
90
+ cyan: "text-[var(--tone-cyan-icon)]",
91
+ violet: "text-[var(--tone-violet-icon)]"
92
+ };
93
+ const ink = (tone) => INK[tone];
94
+ const BY_NAME = {
95
+ "readme.md": {
96
+ Icon: BookOpen,
97
+ ink: ink("blue")
98
+ },
99
+ "cargo.toml": {
100
+ Icon: Package,
101
+ ink: ink("orange")
102
+ },
103
+ "package.json": {
104
+ Icon: Package,
105
+ ink: ink("lime")
106
+ },
107
+ license: {
108
+ Icon: Scale,
109
+ ink: ink("brown")
110
+ },
111
+ "license.md": {
112
+ Icon: Scale,
113
+ ink: ink("brown")
114
+ },
115
+ dockerfile: {
116
+ Icon: FileCog,
117
+ ink: ink("blue")
118
+ },
119
+ makefile: {
120
+ Icon: FileTerminal,
121
+ ink: ink("brown")
122
+ }
123
+ };
124
+ const BY_EXT = {
125
+ md: {
126
+ Icon: FileText,
127
+ ink: ink("blue")
128
+ },
129
+ mdx: {
130
+ Icon: FileText,
131
+ ink: ink("blue")
132
+ },
133
+ txt: {
134
+ Icon: FileText,
135
+ ink: "text-muted-foreground"
136
+ },
137
+ pdf: {
138
+ Icon: FileText,
139
+ ink: ink("pink")
140
+ },
141
+ doc: {
142
+ Icon: FileText,
143
+ ink: ink("blue")
144
+ },
145
+ docx: {
146
+ Icon: FileText,
147
+ ink: ink("blue")
148
+ },
149
+ csv: {
150
+ Icon: FileSpreadsheet,
151
+ ink: ink("teal")
152
+ },
153
+ tsv: {
154
+ Icon: FileSpreadsheet,
155
+ ink: ink("teal")
156
+ },
157
+ xls: {
158
+ Icon: FileSpreadsheet,
159
+ ink: ink("teal")
160
+ },
161
+ xlsx: {
162
+ Icon: FileSpreadsheet,
163
+ ink: ink("teal")
164
+ },
165
+ json: {
166
+ Icon: Braces,
167
+ ink: ink("lime")
168
+ },
169
+ jsonl: {
170
+ Icon: Braces,
171
+ ink: ink("lime")
172
+ },
173
+ png: {
174
+ Icon: FileImage,
175
+ ink: ink("pink")
176
+ },
177
+ jpg: {
178
+ Icon: FileImage,
179
+ ink: ink("pink")
180
+ },
181
+ jpeg: {
182
+ Icon: FileImage,
183
+ ink: ink("pink")
184
+ },
185
+ gif: {
186
+ Icon: FileImage,
187
+ ink: ink("pink")
188
+ },
189
+ webp: {
190
+ Icon: FileImage,
191
+ ink: ink("pink")
192
+ },
193
+ svg: {
194
+ Icon: FileImage,
195
+ ink: ink("pink")
196
+ },
197
+ ts: {
198
+ Icon: FileCode,
199
+ ink: ink("blue")
200
+ },
201
+ tsx: {
202
+ Icon: FileCode,
203
+ ink: ink("blue")
204
+ },
205
+ js: {
206
+ Icon: FileCode,
207
+ ink: ink("lime")
208
+ },
209
+ jsx: {
210
+ Icon: FileCode,
211
+ ink: ink("lime")
212
+ },
213
+ mjs: {
214
+ Icon: FileCode,
215
+ ink: ink("lime")
216
+ },
217
+ cjs: {
218
+ Icon: FileCode,
219
+ ink: ink("lime")
220
+ },
221
+ rs: {
222
+ Icon: FileCode,
223
+ ink: ink("orange")
224
+ },
225
+ py: {
226
+ Icon: FileCode,
227
+ ink: ink("blue")
228
+ },
229
+ go: {
230
+ Icon: FileCode,
231
+ ink: ink("cyan")
232
+ },
233
+ sh: {
234
+ Icon: FileTerminal,
235
+ ink: ink("brown")
236
+ },
237
+ html: {
238
+ Icon: FileCode,
239
+ ink: ink("orange")
240
+ },
241
+ css: {
242
+ Icon: FileCode,
243
+ ink: ink("violet")
244
+ },
245
+ toml: {
246
+ Icon: FileCog,
247
+ ink: ink("violet")
248
+ },
249
+ yaml: {
250
+ Icon: FileCog,
251
+ ink: ink("violet")
252
+ },
253
+ yml: {
254
+ Icon: FileCog,
255
+ ink: ink("violet")
256
+ },
257
+ ini: {
258
+ Icon: FileCog,
259
+ ink: ink("violet")
260
+ },
261
+ lock: {
262
+ Icon: FileLock,
263
+ ink: "text-muted-foreground"
264
+ }
89
265
  };
90
- function fileIcon(name) {
91
- const dot = name.lastIndexOf(".");
92
- return dot > 0 && FILE_ICONS[name.slice(dot + 1).toLowerCase()] || File;
266
+ function fileKind(name) {
267
+ const lower = name.toLowerCase();
268
+ if (BY_NAME[lower]) return BY_NAME[lower];
269
+ if (lower.startsWith(".git")) return {
270
+ Icon: GitBranch,
271
+ ink: ink("orange")
272
+ };
273
+ const dot = lower.lastIndexOf(".");
274
+ return dot > 0 && BY_EXT[lower.slice(dot + 1)] || {
275
+ Icon: File,
276
+ ink: "text-muted-foreground"
277
+ };
93
278
  }
94
- function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle, onFolderSelect, storageKey, expandAll = false, label = "Files", className }) {
279
+ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle, onFolderSelect, storageKey, expandAll = false, label = "Files", status, className }) {
95
280
  const [expansion, setExpansion] = useState(() => ({
96
281
  key: storageKey,
97
282
  expanded: readExpanded(storageKey)
@@ -282,6 +467,19 @@ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle,
282
467
  index,
283
468
  activate
284
469
  ]);
470
+ const changedFolders = useMemo(() => {
471
+ const out = /* @__PURE__ */ new Map();
472
+ for (const [path, change] of Object.entries(status ?? {})) {
473
+ let cut = path.lastIndexOf("/");
474
+ while (cut > 0) {
475
+ const folder = path.slice(0, cut);
476
+ if (out.get(folder) !== "modified") out.set(folder, change === "added" ? "added" : "modified");
477
+ cut = folder.lastIndexOf("/");
478
+ }
479
+ }
480
+ return out;
481
+ }, [status]);
482
+ const openParent = selectedPath ? index.parents.get(selectedPath) ?? null : null;
285
483
  return /* @__PURE__ */ jsx("div", {
286
484
  role: "tree",
287
485
  "aria-label": label,
@@ -295,7 +493,7 @@ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle,
295
493
  next.set(row.parent, Math.max(200, current.get(row.parent) ?? 0) + 200);
296
494
  return next;
297
495
  }),
298
- style: { paddingInlineStart: `calc(${row.depth} * 1rem + 2.25rem)` },
496
+ style: { paddingInlineStart: row.depth * INDENT + 28 },
299
497
  className: "flex min-h-8 w-full items-center rounded-md pr-2 text-left text-xs font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
300
498
  children: [
301
499
  "Show ",
@@ -309,7 +507,14 @@ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle,
309
507
  const open = dir && isOpen(node.path);
310
508
  const selected = !dir && node.path === selectedPath;
311
509
  const active = dir && node.path === activeFolder;
312
- const Icon = dir ? open ? FolderOpen : Folder : fileIcon(node.name);
510
+ const kind = dir ? {
511
+ Icon: open ? FolderOpen : Folder,
512
+ ink: "text-muted-foreground"
513
+ } : fileKind(node.name);
514
+ const Icon = kind.Icon;
515
+ const change = dir ? open ? void 0 : changedFolders.get(node.path) : status?.[node.path];
516
+ const ancestors = [];
517
+ for (let at = row.parent; at; at = index.parents.get(at) ?? null) ancestors.unshift(at);
313
518
  return /* @__PURE__ */ jsxs("div", {
314
519
  ref: (element) => {
315
520
  if (element) rowRefs.current.set(node.path, element);
@@ -330,13 +535,18 @@ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle,
330
535
  onClick: () => activate(node),
331
536
  onFocus: () => setFocusedPath(node.path),
332
537
  onKeyDown: (event) => onKeyDown(event, node),
333
- style: { paddingInlineStart: `calc(${depth} * 1rem + 0.25rem)` },
538
+ style: { paddingInlineStart: depth * INDENT + 4 },
334
539
  className: [
335
- "group flex min-h-8 w-full cursor-pointer select-none items-center gap-1.5 rounded-md pr-2 text-sm transition-colors [@media(pointer:coarse)]:min-h-10",
540
+ "group relative flex min-h-8 w-full cursor-pointer select-none items-center gap-1.5 rounded-md pr-2 text-sm transition-colors [@media(pointer:coarse)]:min-h-10",
336
541
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
337
542
  selected ? "bg-[var(--ix-sel-bg)] font-medium text-[var(--accent-text)]" : active ? "bg-muted font-medium text-foreground" : "text-foreground hover:bg-[var(--ix-hover-bg)]"
338
543
  ].join(" "),
339
544
  children: [
545
+ ancestors.map((folder, level) => /* @__PURE__ */ jsx("span", {
546
+ "aria-hidden": "true",
547
+ className: `pointer-events-none absolute inset-y-0 w-px ${folder === openParent ? "bg-[var(--border-strong)]" : "bg-border"}`,
548
+ style: { left: level * INDENT + 12 }
549
+ }, folder)),
340
550
  /* @__PURE__ */ jsx("span", {
341
551
  "aria-hidden": "true",
342
552
  className: "flex size-4 shrink-0 items-center justify-center text-muted-foreground",
@@ -344,12 +554,20 @@ function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle,
344
554
  }),
345
555
  /* @__PURE__ */ jsx(Icon, {
346
556
  "aria-hidden": "true",
347
- className: `size-4 shrink-0 ${selected ? "text-[var(--accent-text)]" : "text-muted-foreground"}`
557
+ className: `size-4 shrink-0 ${kind.ink}`
348
558
  }),
349
559
  /* @__PURE__ */ jsx("span", {
350
560
  className: "min-w-0 flex-1 truncate",
351
561
  children: node.name
352
- })
562
+ }),
563
+ change && (dir ? /* @__PURE__ */ jsx("span", {
564
+ "aria-label": `holds ${change === "added" ? "added" : "changed"} files`,
565
+ className: `size-1.5 shrink-0 rounded-full ${change === "added" ? "bg-[var(--surface-success-text)]" : "bg-[var(--surface-warning-text)]"}`
566
+ }) : /* @__PURE__ */ jsx("span", {
567
+ "aria-label": change,
568
+ className: `w-3.5 shrink-0 text-center font-mono text-xs font-semibold ${CHANGE[change].ink}`,
569
+ children: CHANGE[change].letter
570
+ }))
353
571
  ]
354
572
  }, node.path);
355
573
  })
@@ -26,18 +26,10 @@ interface VaultTreeProps {
26
26
  expandAll?: boolean;
27
27
  /** Accessible name of the tree. */
28
28
  label?: string;
29
+ /** A change mark per file path, such as a branch's diff against main. */
30
+ status?: Readonly<Record<string, FileChange>>;
29
31
  className?: string;
30
32
  }
31
- declare function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle, onFolderSelect, storageKey, expandAll, label, className }: VaultTreeProps): import("react").JSX.Element;
32
- /**
33
- * Nests flat paths into folders. A path ending in `/` is a directory, so an
34
- * empty folder survives; leading `./` and `/` are ignored.
35
- */
36
- declare function fileTreeFromPaths(paths: ReadonlyArray<string>): FileNode[];
37
- /**
38
- * Case-insensitive name filter: a file survives when its name matches; a
39
- * folder survives whole when its own name matches, otherwise only with the
40
- * descendants that survive.
41
- */
42
- declare function filterFileNodes(nodes: ReadonlyArray<FileNode>, query: string): FileNode[];
43
- export { VaultTreeProps as a, VaultTree as i, filterFileNodes as n, VAULT_TREE_CHILD_PAGE as r, fileTreeFromPaths as t };
33
+ type FileChange = 'added' | 'modified' | 'deleted';
34
+ declare function VaultTree({ root, selectedPath, activeFolder, onSelect, onFolderToggle, onFolderSelect, storageKey, expandAll, label, status, className }: VaultTreeProps): import("react").JSX.Element;
35
+ export { VaultTreeProps as i, VAULT_TREE_CHILD_PAGE as n, VaultTree as r, FileChange as t };
@@ -1,2 +1,3 @@
1
- import { a as VaultTreeProps, i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./index-y2OPUSoY.js";
2
- export { VAULT_TREE_CHILD_PAGE, VaultTree, type VaultTreeProps, fileTreeFromPaths, filterFileNodes };
1
+ import { i as VaultTreeProps, n as VAULT_TREE_CHILD_PAGE, r as VaultTree, t as FileChange } from "./vault-tree-CBS8qGT-.js";
2
+ import { n as filterFileNodes, t as fileTreeFromPaths } from "./index-CrN4d8gd.js";
3
+ export { type FileChange, VAULT_TREE_CHILD_PAGE, VaultTree, type VaultTreeProps, fileTreeFromPaths, filterFileNodes };
@@ -1 +1 @@
1
- export { r as VAULT_TREE_CHILD_PAGE, i as VaultTree, t as fileTreeFromPaths, n as filterFileNodes } from "./tree-data-D57M2idS.js";
1
+ export { r as VAULT_TREE_CHILD_PAGE, i as VaultTree, t as fileTreeFromPaths, n as filterFileNodes } from "./tree-data-C8CNt4WE.js";
@@ -1,5 +1,5 @@
1
1
  import { n as ModelBrandStack, o as modelBrandFor, t as ModelBrandIdentity } from "./model-brand-ZwVS49Fq.js";
2
- import { a as AgentGraphTool, c as AgentGraphEdge, d as AgentGraphNode, f as AgentGraphStatus, i as AgentGraphCallKind, l as AgentGraphEdgeKind, n as AgentGraphProps, o as AgentGraphActivity, r as AgentGraphCall, s as AgentGraphDirection, t as AgentGraph, u as AgentGraphEvent } from "./AgentGraph-DL-QLjkw.js";
2
+ import { a as AgentGraphTool, c as AgentGraphEdge, d as AgentGraphNode, f as AgentGraphStatus, i as AgentGraphCallKind, l as AgentGraphEdgeKind, n as AgentGraphProps, o as AgentGraphActivity, r as AgentGraphCall, s as AgentGraphDirection, t as AgentGraph, u as AgentGraphEvent } from "./AgentGraph-DxAeQQch.js";
3
3
  import { StatusTone } from "@tangle-network/ui/primitives";
4
4
  import { Component, ReactElement, ReactNode } from "react";
5
5
  import { LucideIcon } from "lucide-react";
package/dist/workflows.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { i as modelBrandFor, t as ModelBrandStack } from "./model-brand-bTcMjQtB.js";
2
- import { A as buildWorkflowGraph, D as TRIGGER_NODE_ID, I as actionPathLabel, L as humanizeIdentifier, M as triggerNodeId, N as triggerNodeIndex, O as actionNodeId, R as parseActionPath, c as NodeMark, g as STATUS_TONE, h as STATUS_PILL, k as branchNodeId, m as STATUS_LABEL, n as WorkflowGraph, p as STATUS_COLOR, s as KIND_ICON, t as AgentGraph, v as StatusPill, z as shortModel } from "./AgentGraph-Beld8p6x.js";
2
+ import { A as buildWorkflowGraph, D as TRIGGER_NODE_ID, I as actionPathLabel, L as humanizeIdentifier, M as triggerNodeId, N as triggerNodeIndex, O as actionNodeId, R as parseActionPath, c as NodeMark, g as STATUS_TONE, h as STATUS_PILL, k as branchNodeId, m as STATUS_LABEL, n as WorkflowGraph, p as STATUS_COLOR, s as KIND_ICON, t as AgentGraph, v as StatusPill, z as shortModel } from "./AgentGraph-CiaKH13k.js";
3
3
  import { n as classifyOutput, r as condenseText, t as NodeOutputBody } from "./node-output-DlySTwxr.js";
4
4
  export { AgentGraph, KIND_ICON, ModelBrandStack, NodeMark, NodeOutputBody, StatusPill as NodeStatusPill, STATUS_COLOR, STATUS_LABEL, STATUS_PILL, STATUS_TONE, TRIGGER_NODE_ID, WorkflowGraph as WorkflowGraphLazy, actionNodeId, actionPathLabel, branchNodeId, buildWorkflowGraph, classifyOutput, condenseText, humanizeIdentifier, modelBrandFor, parseActionPath, shortModel, triggerNodeId, triggerNodeIndex };
@@ -1,7 +1,7 @@
1
1
  import { t as cn$1 } from "./utils-BER_bdgE.js";
2
2
  import { r as ShellHeader } from "./shell-header-CwqDzC4I.js";
3
3
  import { t as MOTION_CONTROL } from "./motion-Bn7ESHrj.js";
4
- import { i as VaultTree, n as filterFileNodes, t as fileTreeFromPaths } from "./tree-data-D57M2idS.js";
4
+ import { i as VaultTree, n as filterFileNodes, t as fileTreeFromPaths } from "./tree-data-C8CNt4WE.js";
5
5
  import { ArtifactPane, ArtifactPane as ArtifactPane$1, Button, EmptyState, Input, SegmentedControl, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@tangle-network/ui/primitives";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Markdown } from "@tangle-network/ui/markdown";
@@ -2610,7 +2610,7 @@ function activeElementWithin(element) {
2610
2610
  * collapsed, expansion is remembered under `expansionKey`, and in the stacked
2611
2611
  * layout a preview replaces the tree until Back.
2612
2612
  */
2613
- function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search = true, label = "Files", headerActions, surface = "card", layout = "split", tabs = true, expandable = true, className, style }) {
2613
+ function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBack, emptyState, expansionKey, search = true, label = "Files", headerActions, surface = "card", layout = "split", tabs = true, expandable = true, status, className, style }) {
2614
2614
  const plain = surface === "plain";
2615
2615
  const rootRef = useRef(null);
2616
2616
  const [containerWidth, setContainerWidth] = useState(0);
@@ -2747,7 +2747,8 @@ function WorkspaceFilesPane({ root, paths, selectedPath, onSelect, preview, onBa
2747
2747
  onFolderSelect: (path) => onSelect?.(`${path}/`, index.get(path)),
2748
2748
  storageKey: expansionKey,
2749
2749
  expandAll: query.trim().length > 0,
2750
- label
2750
+ label,
2751
+ status
2751
2752
  })
2752
2753
  })]
2753
2754
  })
@@ -1,2 +1,2 @@
1
- import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-e2GF6seB.js";
1
+ import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-D2_4ONCz.js";
2
2
  export { type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, ArtifactPane, type ArtifactPaneProps, type BannerType, type CalendarEvent, CalendarView, type CalendarViewProps, type ContextBadge, DirectoryPane, type DirectoryPaneProps, RuntimePane, type RuntimePaneProps, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, type SessionCreatedDetail, type SessionOptimisticController, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarGroupBy, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, type SessionSidebarVariant, ShellHeader, type ShellHeaderProps, type ShellShouldRevalidateArgs, type ShellShouldRevalidateOptions, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, type TerminalLine, TerminalPanel, type TerminalProps, type UseOptimisticSessionItemsOptions, WorkspaceArtifactView, type WorkspaceArtifactViewProps, WorkspaceFilesPane, type WorkspaceFilesPaneProps, type WorkspaceFilesPreview, WorkspaceLayout, type WorkspaceLayoutProps, WorkspacePaneHeader, type WorkspacePaneHeaderProps, WorkspaceSurface, WorkspaceSurfaceFrame, type WorkspaceSurfaceFrameProps, type WorkspaceSurfaceHeadingLevel, type WorkspaceSurfaceProps, WorkspaceSurfaceTitle, type WorkspaceSurfaceTitleProps, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
package/dist/workspace.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CwqDzC4I.js";
2
- import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-Cis6jAGl.js";
2
+ import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-CdcRUl-H.js";
3
3
  export { ApprovalQueue, ArtifactPane, CalendarView, DirectoryPane, RuntimePane, SESSION_CREATED_EVENT, SHELL_HEADER_HEIGHT, SHELL_INSET_GUTTER, SandboxWorkbench, SessionSidebar, ShellHeader, StatusBanner, StatusBar, TaskBoard, TerminalPanel, WorkspaceArtifactView, WorkspaceFilesPane, WorkspaceLayout, WorkspacePaneHeader, WorkspaceSurface, WorkspaceSurfaceFrame, WorkspaceSurfaceTitle, createShellShouldRevalidate, dispatchSessionCreated, formatRelativeAge, shellShouldRevalidate, useOptimisticSessionItems };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "license": "MIT",
5
5
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
6
6
  "repository": {