@tangle-network/sandbox-ui 0.64.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/chat.d.ts CHANGED
@@ -46,6 +46,17 @@ interface ReasoningLevelPickerProps {
46
46
  avoidCollisions?: boolean;
47
47
  }
48
48
  declare const DEFAULT_REASONING_LEVEL_OPTIONS: ReadonlyArray<ReasoningLevelOption>;
49
+ /**
50
+ * Per-harness option overrides for harnesses whose real control isn't a depth scale, so the generic
51
+ * ladder's labels would mislead. A harness with no entry uses {@link DEFAULT_REASONING_LEVEL_OPTIONS};
52
+ * either way the picker still intersects the chosen options with the harness/model `available` set, so
53
+ * only supported values render.
54
+ *
55
+ * `kimi-code` is a BINARY thinking toggle, not a gradient: its `--thinking` flag is simply off or on.
56
+ * `minimal` is the only value that emits `--no-thinking` (off) and `high` maps to thinking-on, so the
57
+ * menu reads Auto / No thinking / Thinking rather than a misleading five-step scale.
58
+ */
59
+ declare const HARNESS_REASONING_OPTIONS: Partial<Record<HarnessType, ReadonlyArray<ReasoningLevelOption>>>;
49
60
  declare function ReasoningLevelPicker({ value, onChange, disabled, className, triggerClassName, options, available, side, avoidCollisions, }: ReasoningLevelPickerProps): react_jsx_runtime.JSX.Element;
50
61
 
51
62
  /**
@@ -448,4 +459,4 @@ declare function createFetchTransport(opts: {
448
459
  fetchImpl?: typeof fetch;
449
460
  }): ArtifactAgentDockTransport;
450
461
 
451
- export { AgentComposer, type AgentComposerProps, type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, AgentSessionControls, type AgentSessionControlsProps, type AgentSessionHarnessControl, type AgentSessionModelControl, type AgentSessionProfileControl, type AgentSessionReasoningControl, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, type ArtifactScope, type ComposerFile, DEFAULT_REASONING_LEVEL_OPTIONS, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, createFetchTransport, isModelCompatibleWithHarness, snapModelToHarness };
462
+ export { AgentComposer, type AgentComposerProps, type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, AgentSessionControls, type AgentSessionControlsProps, type AgentSessionHarnessControl, type AgentSessionModelControl, type AgentSessionProfileControl, type AgentSessionReasoningControl, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, type ArtifactScope, type ComposerFile, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, createFetchTransport, isModelCompatibleWithHarness, snapModelToHarness };
package/dist/chat.js CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  ChatInput,
9
9
  ChatMessage,
10
10
  DEFAULT_REASONING_LEVEL_OPTIONS,
11
+ HARNESS_REASONING_OPTIONS,
11
12
  MessageList,
12
13
  ReasoningLevelPicker,
13
14
  ThinkingIndicator,
@@ -17,7 +18,7 @@ import {
17
18
  modelProvider,
18
19
  snapHarnessToModel,
19
20
  snapModelToHarness
20
- } from "./chunk-2E3FJM56.js";
21
+ } from "./chunk-ZR3UHRGW.js";
21
22
  import "./chunk-HU4B2M4K.js";
22
23
  import "./chunk-SF6LPMMN.js";
23
24
  import "./chunk-EI44GEQ5.js";
@@ -32,6 +33,7 @@ export {
32
33
  ChatInput,
33
34
  ChatMessage,
34
35
  DEFAULT_REASONING_LEVEL_OPTIONS,
36
+ HARNESS_REASONING_OPTIONS,
35
37
  MessageList,
36
38
  ReasoningLevelPicker,
37
39
  ThinkingIndicator,
@@ -597,11 +597,16 @@ function RailExpandable({
597
597
  active ? "h-7 bg-[var(--accent-surface-strong)] font-medium text-[var(--accent-text)]" : item.emphasis ? "py-2 font-medium text-[var(--accent-text)] hover:underline" : "h-7 text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground"
598
598
  ),
599
599
  children: [
600
+ item.unread && !item.isLoading && !active && /* @__PURE__ */ jsx3("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-primary", "aria-hidden": true }),
600
601
  FIcon ? /* @__PURE__ */ jsx3(FIcon, { className: "h-4 w-4 shrink-0" }) : null,
601
602
  /* @__PURE__ */ jsx3(
602
603
  "span",
603
604
  {
604
- className: cn("min-w-0 flex-1 truncate", item.isLoading && "shimmer-text"),
605
+ className: cn(
606
+ "min-w-0 flex-1 truncate",
607
+ item.isLoading && "shimmer-text",
608
+ item.unread && !active && "font-medium text-foreground"
609
+ ),
605
610
  ...item.isLoading ? { role: "status", "aria-label": "Agent responding" } : {},
606
611
  children: item.label
607
612
  }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-3J6FG3FJ.js";
4
4
  import {
5
5
  PortsList
6
- } from "./chunk-QSCCNGXZ.js";
6
+ } from "./chunk-H237JF3H.js";
7
7
  import {
8
8
  TerminalView
9
9
  } from "./chunk-VIREDUBF.js";
@@ -23,7 +23,9 @@ import {
23
23
  } from "@tangle-network/ui/chat";
24
24
 
25
25
  // src/chat/reasoning-level-picker.tsx
26
- import { reasoningLadder } from "@tangle-network/agent-interface";
26
+ import {
27
+ reasoningLadder
28
+ } from "@tangle-network/agent-interface";
27
29
  import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
28
30
  import { Brain, ChevronDown, Sparkles } from "lucide-react";
29
31
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -68,9 +70,16 @@ var DEFAULT_REASONING_LEVEL_OPTIONS = [
68
70
  { value: "low", label: "Low", description: "Fast, direct answers." },
69
71
  { value: "medium", label: "Medium", description: "Inspect context before acting." },
70
72
  { value: "high", label: "High", description: "Deeper planning and edge-case checks." },
71
- { value: "xhigh", label: "Extra High", description: "Extended reasoning for hard problems (Codex/OpenAI)." },
72
- { value: "ultracode", label: "Ultracode", description: "Maximum extended thinking (Claude Code's ultracode)." }
73
+ { value: "xhigh", label: "Extra High", description: "Extended reasoning for the hardest problems." },
74
+ { value: "ultracode", label: "Ultracode", description: "Maximum extended thinking." }
73
75
  ];
76
+ var HARNESS_REASONING_OPTIONS = {
77
+ "kimi-code": [
78
+ { value: "auto", label: "Auto", description: "Use Kimi's default." },
79
+ { value: "minimal", label: "No thinking", description: "Kimi answers directly \u2014 thinking off." },
80
+ { value: "high", label: "Thinking", description: "Kimi reasons before answering." }
81
+ ]
82
+ };
74
83
  function ReasoningLevelPicker({
75
84
  value,
76
85
  onChange,
@@ -151,6 +160,7 @@ function ReasoningLevelPicker({
151
160
 
152
161
  // src/chat/agent-session-controls.tsx
153
162
  import {
163
+ canonicalizeHarness,
154
164
  harnessHonorsEffort,
155
165
  harnessHonorsModel,
156
166
  reasoningEffortsFor
@@ -471,6 +481,7 @@ function selectorIgnoreNote(harness) {
471
481
  return null;
472
482
  }
473
483
  function InformativeLock({
484
+ type,
474
485
  label,
475
486
  lockTitle,
476
487
  lockBody,
@@ -515,13 +526,16 @@ function InformativeLock({
515
526
  "aria-haspopup": "dialog",
516
527
  "aria-expanded": open,
517
528
  className: cn(
518
- "inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5",
529
+ // Dimmed to read as locked (the harness is bound to this session),
530
+ // matching the disabled model picker — the logo stays so the chip is
531
+ // still recognizably this harness; the popover explains the lock.
532
+ "inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5 opacity-60",
519
533
  "text-xs font-medium text-foreground shadow-sm transition-colors",
520
534
  "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
521
535
  "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high"
522
536
  ),
523
537
  children: [
524
- /* @__PURE__ */ jsx3(Lock, { className: "h-3 w-3 text-muted-foreground" }),
538
+ /* @__PURE__ */ jsx3(HarnessLogo, { type, size: 16 }),
525
539
  /* @__PURE__ */ jsx3("span", { children: label })
526
540
  ]
527
541
  }
@@ -590,6 +604,7 @@ function HarnessDropdown({
590
604
  return /* @__PURE__ */ jsx3(
591
605
  InformativeLock,
592
606
  {
607
+ type: value,
593
608
  label: selected?.label ?? value,
594
609
  lockTitle,
595
610
  lockBody,
@@ -614,7 +629,7 @@ function HarnessDropdown({
614
629
  ),
615
630
  "aria-label": "Agent harness",
616
631
  children: [
617
- locked ? /* @__PURE__ */ jsx3(Lock, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ jsx3(HarnessLogo, { type: value, size: 16 }),
632
+ /* @__PURE__ */ jsx3(HarnessLogo, { type: value, size: 16 }),
618
633
  /* @__PURE__ */ jsx3("span", { children: selected?.label ?? value }),
619
634
  !locked && /* @__PURE__ */ jsx3(ChevronDown3, { className: "h-3.5 w-3.5 text-muted-foreground" })
620
635
  ]
@@ -777,12 +792,13 @@ function AgentSessionControls({
777
792
  }
778
793
  );
779
794
  const modelReasoning = modelReasoningCapability(model?.models, model?.value);
795
+ const reasoningOptions = (harness && HARNESS_REASONING_OPTIONS[canonicalizeHarness(harness.value)]) ?? reasoning?.options;
780
796
  const reasoningNode = reasoning && /* @__PURE__ */ jsx3(
781
797
  ReasoningLevelPicker,
782
798
  {
783
799
  value: reasoning.value,
784
800
  onChange: reasoning.onChange,
785
- options: reasoning.options,
801
+ options: reasoningOptions,
786
802
  disabled: reasoning.disabled || !selectorHonorsEffort,
787
803
  available: harness ? reasoningEffortsFor(harness.value, modelReasoning) : reasoning.available,
788
804
  side: layout === "gear" ? void 0 : "bottom",
@@ -1525,6 +1541,7 @@ function createFetchTransport(opts) {
1525
1541
 
1526
1542
  export {
1527
1543
  DEFAULT_REASONING_LEVEL_OPTIONS,
1544
+ HARNESS_REASONING_OPTIONS,
1528
1545
  ReasoningLevelPicker,
1529
1546
  isModelCompatibleWithHarness,
1530
1547
  snapModelToHarness,
@@ -199,6 +199,9 @@ interface RailExpandableSubItem {
199
199
  /** Render the row emphasized (bold + accent) so it stands out — e.g. a
200
200
  * trailing "view all" action below a capped list. */
201
201
  emphasis?: boolean;
202
+ /** Mark the row as unread — bold label + a leading dot. Suppressed while
203
+ * `isLoading` so a responding row shows only the working indicator. */
204
+ unread?: boolean;
202
205
  /** Hover-revealed kebab actions (e.g. rename/delete). Rendered on the
203
206
  * labeled rail only; ignored in the collapsed-rail flyout. */
204
207
  actions?: RailSubItemAction[];
package/dist/dashboard.js CHANGED
@@ -54,7 +54,7 @@ import {
54
54
  canAdminSandbox,
55
55
  parseInsufficientBalance,
56
56
  useSidebar
57
- } from "./chunk-QSCCNGXZ.js";
57
+ } from "./chunk-H237JF3H.js";
58
58
  import {
59
59
  BillingDashboard,
60
60
  InfoPanel,
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export { AgentWorkbench, ApprovalConfidenceStat, ApprovalItem, ApprovalQueue, Ap
5
5
  export { ArtifactView, BRAND_PRISM_THEME, CodeSurface, CodeSurfaceProps, CodeView, CodeViewProps, DiffStats, DiffView, DiffViewProps, FileBreadcrumb, FileBreadcrumbProps, GitStatusBadge, PanelHeader, PanelHeaderProps, PillTabItem, PillTabs, PillTabsProps, PreviewView, PreviewViewProps, SandboxArtifact, SandboxArtifactPane, SandboxArtifactPaneProps, SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage } from './workbench.js';
6
6
  export { OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode } from '@tangle-network/ui/openui';
7
7
  export { AgentTimeline, AgentTimelineArtifactItem, AgentTimelineCustomItem, AgentTimelineItem, AgentTimelineMessageItem, AgentTimelineProps, AgentTimelineStatusItem, AgentTimelineTone, AgentTimelineToolGroupItem, AgentTimelineToolItem, ChatContainer, ChatContainerProps, ChatInput, ChatInputProps, ChatMessage, ChatMessageProps, MessageList, MessageListProps, MessageRole, PendingFile, ThinkingIndicator, ThinkingIndicatorProps, UserMessage, UserMessageProps } from '@tangle-network/ui/chat';
8
- export { AgentComposer, AgentComposerProps, AgentProfileCapability, AgentProfileDraft, AgentProfileOption, AgentProfilePicker, AgentProfilePickerProps, AgentSessionControls, AgentSessionControlsProps, AgentSessionHarnessControl, AgentSessionModelControl, AgentSessionProfileControl, AgentSessionReasoningControl, ArtifactAgentDock, ArtifactAgentDockProps, ArtifactAgentDockTransport, ArtifactDockMessage, ArtifactDockStreamEvent, ArtifactKind, ArtifactScope, ComposerFile, DEFAULT_REASONING_LEVEL_OPTIONS, ReasoningLevel, ReasoningLevelOption, ReasoningLevelPicker, ReasoningLevelPickerProps, createFetchTransport, isModelCompatibleWithHarness, snapModelToHarness } from './chat.js';
8
+ export { AgentComposer, AgentComposerProps, AgentProfileCapability, AgentProfileDraft, AgentProfileOption, AgentProfilePicker, AgentProfilePickerProps, AgentSessionControls, AgentSessionControlsProps, AgentSessionHarnessControl, AgentSessionModelControl, AgentSessionProfileControl, AgentSessionReasoningControl, ArtifactAgentDock, ArtifactAgentDockProps, ArtifactAgentDockTransport, ArtifactDockMessage, ArtifactDockStreamEvent, ArtifactKind, ArtifactScope, ComposerFile, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, ReasoningLevel, ReasoningLevelOption, ReasoningLevelPicker, ReasoningLevelPickerProps, createFetchTransport, isModelCompatibleWithHarness, snapModelToHarness } from './chat.js';
9
9
  export { ExpandedToolDetail, ExpandedToolDetailProps, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps } from '@tangle-network/ui/run';
10
10
  export { CommandPreview, DiffPreview, GlobResultsPreview, GrepResultsPreview, QuestionPreview, WebSearchPreview, WriteFilePreview } from '@tangle-network/ui/tool-previews';
11
11
  export { FileArtifactPane, FileArtifactPaneProps, FileNode, FilePreview, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, filterFileTree } from '@tangle-network/ui/files';
package/dist/index.js CHANGED
@@ -93,6 +93,7 @@ import {
93
93
  ChatInput,
94
94
  ChatMessage,
95
95
  DEFAULT_REASONING_LEVEL_OPTIONS,
96
+ HARNESS_REASONING_OPTIONS,
96
97
  MessageList,
97
98
  ReasoningLevelPicker,
98
99
  ThinkingIndicator,
@@ -102,7 +103,7 @@ import {
102
103
  modelProvider,
103
104
  snapHarnessToModel,
104
105
  snapModelToHarness
105
- } from "./chunk-2E3FJM56.js";
106
+ } from "./chunk-ZR3UHRGW.js";
106
107
  import {
107
108
  ExpandedToolDetail,
108
109
  InlineThinkingItem,
@@ -146,7 +147,7 @@ import {
146
147
  buildUnifiedPatch,
147
148
  computeDiffStats,
148
149
  resolveLanguage
149
- } from "./chunk-G4YJYSFA.js";
150
+ } from "./chunk-HCOZO53G.js";
150
151
  import {
151
152
  FileArtifactPane,
152
153
  FilePreview,
@@ -211,7 +212,7 @@ import {
211
212
  canAdminSandbox,
212
213
  parseInsufficientBalance,
213
214
  useSidebar
214
- } from "./chunk-QSCCNGXZ.js";
215
+ } from "./chunk-H237JF3H.js";
215
216
  import "./chunk-VIREDUBF.js";
216
217
  import {
217
218
  usePtySession
@@ -436,6 +437,7 @@ export {
436
437
  GrepResultsPreview,
437
438
  HARNESS_BRAND,
438
439
  HARNESS_OPTIONS,
440
+ HARNESS_REASONING_OPTIONS,
439
441
  HarnessLogo,
440
442
  HarnessPicker,
441
443
  INSUFFICIENT_BALANCE_CODE,
package/dist/workbench.js CHANGED
@@ -12,9 +12,9 @@ import {
12
12
  buildUnifiedPatch,
13
13
  computeDiffStats,
14
14
  resolveLanguage
15
- } from "./chunk-G4YJYSFA.js";
15
+ } from "./chunk-HCOZO53G.js";
16
16
  import "./chunk-3J6FG3FJ.js";
17
- import "./chunk-QSCCNGXZ.js";
17
+ import "./chunk-H237JF3H.js";
18
18
  import "./chunk-VIREDUBF.js";
19
19
  import "./chunk-77WVVJA4.js";
20
20
  import "./chunk-OMUIPJQZ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.64.0",
3
+ "version": "0.66.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -122,7 +122,7 @@
122
122
  "test:bridge": "pnpm build && vitest run src/__tests__/re-export-identity.test.ts"
123
123
  },
124
124
  "peerDependencies": {
125
- "@tangle-network/agent-interface": ">=0.16.0 <1.0.0",
125
+ "@tangle-network/agent-interface": ">=0.17.0 <1.0.0",
126
126
  "@tangle-network/brand": "^0.6.0",
127
127
  "@tangle-network/ui": "^5.1.0",
128
128
  "@xyflow/react": "^12.0.0",
@@ -177,7 +177,7 @@
177
177
  "@storybook/react-vite": "^8.6.18",
178
178
  "@tailwindcss/postcss": "^4.2.2",
179
179
  "@tailwindcss/vite": "^4.2.2",
180
- "@tangle-network/agent-interface": ">=0.16.0 <1.0.0",
180
+ "@tangle-network/agent-interface": ">=0.17.0 <1.0.0",
181
181
  "@tangle-network/brand": "^0.6.0",
182
182
  "@tangle-network/ui": "^5.1.0",
183
183
  "@tanstack/react-query": "^5.91.0",