@tangle-network/sandbox-ui 0.45.0 → 0.47.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/{WorkflowGraph-7YYGIBNV.js → WorkflowGraph-EOV2P5AM.js} +2 -1
- package/dist/assets.js +1 -0
- package/dist/assistant.js +2 -1
- package/dist/auth.js +1 -0
- package/dist/chat.js +4 -3
- package/dist/{chunk-6NDOA4SB.js → chunk-2ISY4R72.js} +112 -104
- package/dist/{chunk-KIRJZUX2.js → chunk-BR2LMUAE.js} +61 -34
- package/dist/{chunk-H7GMPMPB.js → chunk-GTJ5PSK5.js} +90 -3
- package/dist/{chunk-CUUUFJF5.js → chunk-KOUYJ6QP.js} +23 -23
- package/dist/{chunk-3RNYDTQ3.js → chunk-LQHTCM56.js} +21 -27
- package/dist/chunk-NXUSLH7H.js +7528 -0
- package/dist/{chunk-2XNT74ZX.js → chunk-OMUIPJQZ.js} +28 -20
- package/dist/{chunk-KCWIC3SJ.js → chunk-PZ62T5PM.js} +281 -214
- package/dist/chunk-U67V476Y.js +35 -0
- package/dist/chunk-VIREDUBF.js +215 -0
- package/dist/dashboard.d.ts +82 -66
- package/dist/dashboard.js +5 -4
- package/dist/editor.js +2 -0
- package/dist/files.d.ts +5 -0
- package/dist/files.js +1 -0
- package/dist/globals.css +1170 -47
- package/dist/hooks.js +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +95 -65
- package/dist/integrations.d.ts +5 -6
- package/dist/integrations.js +158 -63
- package/dist/markdown.js +2 -0
- package/dist/openui.d.ts +0 -5
- package/dist/openui.js +1 -0
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +89 -88
- package/dist/ports-list-DfG0VfPt.d.ts +17 -0
- package/dist/primitives.js +1 -0
- package/dist/run.js +1 -0
- package/dist/sdk-hooks.js +1 -0
- package/dist/stores.js +1 -0
- package/dist/styles.css +1170 -47
- package/dist/terminal.js +5 -209
- package/dist/utils.js +1 -0
- package/dist/workbench.d.ts +227 -0
- package/dist/workbench.js +40 -0
- package/dist/workflows.js +2 -1
- package/dist/workspace.d.ts +6 -2
- package/dist/workspace.js +2 -1
- package/package.json +13 -7
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
|
+
};
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
__commonJS,
|
|
33
|
+
__export,
|
|
34
|
+
__toESM
|
|
35
|
+
};
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import {
|
|
2
|
+
usePtySession
|
|
3
|
+
} from "./chunk-77WVVJA4.js";
|
|
4
|
+
|
|
5
|
+
// src/terminal/terminal-view.tsx
|
|
6
|
+
import "@xterm/xterm/css/xterm.css";
|
|
7
|
+
import { useEffect, useRef, useCallback, useMemo } from "react";
|
|
8
|
+
import { Terminal } from "@xterm/xterm";
|
|
9
|
+
import { FitAddon } from "@xterm/addon-fit";
|
|
10
|
+
import { WebLinksAddon } from "@xterm/addon-web-links";
|
|
11
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
var DEFAULT_TERMINAL_THEME = {
|
|
13
|
+
background: "#0c0c0e",
|
|
14
|
+
foreground: "#d4d4d8",
|
|
15
|
+
cursor: "#34d399",
|
|
16
|
+
cursorAccent: "#0c0c0e",
|
|
17
|
+
selectionBackground: "#7c3aed33",
|
|
18
|
+
selectionForeground: "#d4d4d8",
|
|
19
|
+
black: "#18181b",
|
|
20
|
+
red: "#ef4444",
|
|
21
|
+
green: "#34d399",
|
|
22
|
+
yellow: "#fbbf24",
|
|
23
|
+
blue: "#60a5fa",
|
|
24
|
+
magenta: "#a78bfa",
|
|
25
|
+
cyan: "#22d3ee",
|
|
26
|
+
white: "#d4d4d8",
|
|
27
|
+
brightBlack: "#52525b",
|
|
28
|
+
brightRed: "#f87171",
|
|
29
|
+
brightGreen: "#6ee7b7",
|
|
30
|
+
brightYellow: "#fde68a",
|
|
31
|
+
brightBlue: "#93c5fd",
|
|
32
|
+
brightMagenta: "#c4b5fd",
|
|
33
|
+
brightCyan: "#67e8f9",
|
|
34
|
+
brightWhite: "#fafafa"
|
|
35
|
+
};
|
|
36
|
+
function TerminalView({
|
|
37
|
+
apiUrl,
|
|
38
|
+
token,
|
|
39
|
+
theme,
|
|
40
|
+
title = "Terminal",
|
|
41
|
+
subtitle = "Connected to PTY session",
|
|
42
|
+
isActive = true,
|
|
43
|
+
connectionId,
|
|
44
|
+
fontSize = 13
|
|
45
|
+
}) {
|
|
46
|
+
const resolvedTheme = useMemo(
|
|
47
|
+
() => ({ ...DEFAULT_TERMINAL_THEME, ...theme }),
|
|
48
|
+
[theme]
|
|
49
|
+
);
|
|
50
|
+
const resolvedFontSize = Number.isFinite(fontSize) && fontSize > 0 ? fontSize : 13;
|
|
51
|
+
const fontSizeRef = useRef(resolvedFontSize);
|
|
52
|
+
fontSizeRef.current = resolvedFontSize;
|
|
53
|
+
const containerRef = useRef(null);
|
|
54
|
+
const termRef = useRef(null);
|
|
55
|
+
const fitAddonRef = useRef(null);
|
|
56
|
+
const pendingWritesRef = useRef([]);
|
|
57
|
+
const writeRafRef = useRef(null);
|
|
58
|
+
const onData = useCallback((data) => {
|
|
59
|
+
if (!data) return;
|
|
60
|
+
pendingWritesRef.current.push(data);
|
|
61
|
+
if (writeRafRef.current !== null) return;
|
|
62
|
+
writeRafRef.current = requestAnimationFrame(() => {
|
|
63
|
+
writeRafRef.current = null;
|
|
64
|
+
const chunks = pendingWritesRef.current;
|
|
65
|
+
if (chunks.length === 0) return;
|
|
66
|
+
pendingWritesRef.current = [];
|
|
67
|
+
termRef.current?.write(chunks.length === 1 ? chunks[0] : chunks.join(""));
|
|
68
|
+
});
|
|
69
|
+
}, []);
|
|
70
|
+
const { isConnected, error, sendCommand, resizeTerminal, reconnect } = usePtySession({
|
|
71
|
+
apiUrl,
|
|
72
|
+
token,
|
|
73
|
+
onData,
|
|
74
|
+
connectionId
|
|
75
|
+
});
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!containerRef.current) return;
|
|
78
|
+
const term = new Terminal({
|
|
79
|
+
theme: resolvedTheme,
|
|
80
|
+
fontFamily: '"JetBrains Mono", "Fira Code", "Cascadia Code", Menlo, monospace',
|
|
81
|
+
fontSize: fontSizeRef.current,
|
|
82
|
+
lineHeight: 1.4,
|
|
83
|
+
cursorBlink: true,
|
|
84
|
+
cursorStyle: "bar",
|
|
85
|
+
scrollback: 5e3,
|
|
86
|
+
convertEol: true,
|
|
87
|
+
allowProposedApi: true
|
|
88
|
+
});
|
|
89
|
+
const fitAddon = new FitAddon();
|
|
90
|
+
const webLinksAddon = new WebLinksAddon();
|
|
91
|
+
term.loadAddon(fitAddon);
|
|
92
|
+
term.loadAddon(webLinksAddon);
|
|
93
|
+
term.open(containerRef.current);
|
|
94
|
+
let webglAddon = null;
|
|
95
|
+
let webglCancelled = false;
|
|
96
|
+
void (async () => {
|
|
97
|
+
try {
|
|
98
|
+
const mod = await import("@xterm/addon-webgl");
|
|
99
|
+
if (webglCancelled) return;
|
|
100
|
+
try {
|
|
101
|
+
const addon = new mod.WebglAddon();
|
|
102
|
+
addon.onContextLoss(() => {
|
|
103
|
+
webglAddon?.dispose();
|
|
104
|
+
webglAddon = null;
|
|
105
|
+
});
|
|
106
|
+
webglAddon = addon;
|
|
107
|
+
term.loadAddon(addon);
|
|
108
|
+
} catch {
|
|
109
|
+
}
|
|
110
|
+
} catch {
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
113
|
+
requestAnimationFrame(() => {
|
|
114
|
+
fitAddon.fit();
|
|
115
|
+
});
|
|
116
|
+
termRef.current = term;
|
|
117
|
+
fitAddonRef.current = fitAddon;
|
|
118
|
+
term.onData((data) => {
|
|
119
|
+
if (data === "\f") {
|
|
120
|
+
termRef.current?.clear();
|
|
121
|
+
sendCommand("\r").catch(console.error);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
sendCommand(data).catch((err) => {
|
|
125
|
+
termRef.current?.writeln(
|
|
126
|
+
`\r
|
|
127
|
+
\x1B[31m${err instanceof Error ? err.message : "Send failed"}\x1B[0m`
|
|
128
|
+
);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
term.onResize(({ cols, rows }) => {
|
|
132
|
+
resizeTerminal(cols, rows).catch(console.error);
|
|
133
|
+
});
|
|
134
|
+
const ro = new ResizeObserver(() => {
|
|
135
|
+
requestAnimationFrame(() => {
|
|
136
|
+
fitAddon.fit();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
ro.observe(containerRef.current);
|
|
140
|
+
return () => {
|
|
141
|
+
webglCancelled = true;
|
|
142
|
+
ro.disconnect();
|
|
143
|
+
if (writeRafRef.current !== null) {
|
|
144
|
+
cancelAnimationFrame(writeRafRef.current);
|
|
145
|
+
writeRafRef.current = null;
|
|
146
|
+
}
|
|
147
|
+
pendingWritesRef.current = [];
|
|
148
|
+
webglAddon?.dispose();
|
|
149
|
+
term.dispose();
|
|
150
|
+
termRef.current = null;
|
|
151
|
+
fitAddonRef.current = null;
|
|
152
|
+
};
|
|
153
|
+
}, [sendCommand, resizeTerminal, title, subtitle]);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
if (termRef.current) {
|
|
156
|
+
termRef.current.options.theme = resolvedTheme;
|
|
157
|
+
}
|
|
158
|
+
}, [resolvedTheme]);
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
const term = termRef.current;
|
|
161
|
+
if (!term || term.options.fontSize === resolvedFontSize) return;
|
|
162
|
+
term.options.fontSize = resolvedFontSize;
|
|
163
|
+
const rafId = requestAnimationFrame(() => fitAddonRef.current?.fit());
|
|
164
|
+
return () => cancelAnimationFrame(rafId);
|
|
165
|
+
}, [resolvedFontSize]);
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
if (isConnected && termRef.current) {
|
|
168
|
+
resizeTerminal(termRef.current.cols, termRef.current.rows).catch(console.error);
|
|
169
|
+
if (isActive) {
|
|
170
|
+
termRef.current.focus();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}, [isConnected, resizeTerminal, isActive]);
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
if (isActive && termRef.current && fitAddonRef.current) {
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
fitAddonRef.current?.fit();
|
|
178
|
+
termRef.current?.focus();
|
|
179
|
+
}, 50);
|
|
180
|
+
}
|
|
181
|
+
}, [isActive]);
|
|
182
|
+
return /* @__PURE__ */ jsxs(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
className: "relative h-full w-full group cursor-text",
|
|
186
|
+
onClick: () => termRef.current?.focus(),
|
|
187
|
+
children: [
|
|
188
|
+
/* @__PURE__ */ jsx(
|
|
189
|
+
"div",
|
|
190
|
+
{
|
|
191
|
+
ref: containerRef,
|
|
192
|
+
className: "h-full w-full overflow-hidden relative z-0",
|
|
193
|
+
style: { backgroundColor: resolvedTheme.background }
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
(!isConnected || error) && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-surface-container-lowest", children: /* @__PURE__ */ jsx("div", { className: "text-center", children: error ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
197
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--surface-danger-text)] mb-3", children: error }),
|
|
198
|
+
/* @__PURE__ */ jsx(
|
|
199
|
+
"button",
|
|
200
|
+
{
|
|
201
|
+
onClick: reconnect,
|
|
202
|
+
className: "text-sm text-[var(--surface-success-text)] hover:opacity-80 underline cursor-pointer",
|
|
203
|
+
children: "Retry connection"
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
] }) : /* @__PURE__ */ jsx("p", { className: "text-[13px] text-muted-foreground", children: "Connecting to terminal..." }) }) })
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export {
|
|
213
|
+
DEFAULT_TERMINAL_THEME,
|
|
214
|
+
TerminalView
|
|
215
|
+
};
|
package/dist/dashboard.d.ts
CHANGED
|
@@ -5,57 +5,7 @@ import { HarnessType } from '@tangle-network/agent-interface';
|
|
|
5
5
|
export { HarnessType } from '@tangle-network/agent-interface';
|
|
6
6
|
export { D as DEFAULT_FEATURED_MODEL_IDS, M as ModelInfo, a as ModelPicker, b as ModelPickerProps, c as ModelPickerVariant, d as canonicalModelId, e as dedupeModels, f as formatContext, g as formatPricing, m as modelDedupKey } from './model-picker-NOWFpRY4.js';
|
|
7
7
|
export { B as BillingBalance, a as BillingDashboard, b as BillingDashboardProps, c as BillingSubscription, d as BillingUsage, P as PricingPage, e as PricingPageProps, f as PricingTier, T as TemplateCard, g as TemplateCardData, h as TemplateCardProps, U as UsageChart, i as UsageChartProps, j as UsageDataPoint, k as formatPrice } from './template-card-UhV3pmRC.js';
|
|
8
|
-
|
|
9
|
-
interface Backend {
|
|
10
|
-
type: string;
|
|
11
|
-
label: string;
|
|
12
|
-
description?: string;
|
|
13
|
-
/** Optional leading brand glyph (e.g. a HarnessLogo) shown in the trigger and rows. */
|
|
14
|
-
icon?: ReactNode;
|
|
15
|
-
}
|
|
16
|
-
interface BackendSelectorProps {
|
|
17
|
-
backends: Backend[];
|
|
18
|
-
selected: string;
|
|
19
|
-
onChange: (selected: string) => void;
|
|
20
|
-
label?: string;
|
|
21
|
-
placeholder?: string;
|
|
22
|
-
className?: string;
|
|
23
|
-
}
|
|
24
|
-
declare function BackendSelector({ backends, selected, onChange, label, placeholder, className, }: BackendSelectorProps): react_jsx_runtime.JSX.Element;
|
|
25
|
-
|
|
26
|
-
interface HarnessOption extends Backend {
|
|
27
|
-
type: HarnessType;
|
|
28
|
-
/**
|
|
29
|
-
* Whether this harness can drive an interactive chat session. `false` for
|
|
30
|
-
* shell-only backends (`cli-base`) that have no conversational agent — the
|
|
31
|
-
* chat composer filters these out (see {@link chatCapableHarnesses}) while
|
|
32
|
-
* scheduled/non-chat surfaces keep them.
|
|
33
|
-
*/
|
|
34
|
-
chatCapable: boolean;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Default option list with human-readable copy. Order is curated so the
|
|
38
|
-
* recommended choice (`opencode`) appears first; `cli-base` (no agent) last.
|
|
39
|
-
*/
|
|
40
|
-
declare const HARNESS_OPTIONS: readonly HarnessOption[];
|
|
41
|
-
/** Harness types that can drive an interactive chat session. */
|
|
42
|
-
declare const chatCapableHarnesses: ReadonlyArray<HarnessType>;
|
|
43
|
-
interface HarnessPickerProps extends Omit<BackendSelectorProps, "backends" | "selected" | "onChange"> {
|
|
44
|
-
value: HarnessType;
|
|
45
|
-
onChange: (next: HarnessType) => void;
|
|
46
|
-
/** Filter the available harnesses (e.g. by plan tier). Defaults to all. */
|
|
47
|
-
available?: ReadonlyArray<HarnessType>;
|
|
48
|
-
/** Override or extend the option metadata. Keys are HarnessType. */
|
|
49
|
-
optionsOverride?: Partial<Record<HarnessType, Partial<Omit<HarnessOption, "type">>>>;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Type-safe harness/backend selector for sandbox-backed agent products.
|
|
53
|
-
*
|
|
54
|
-
* Wraps the generic {@link BackendSelector} with the canonical harness list
|
|
55
|
-
* baked in, so consumers don't have to re-declare it (or risk drifting from
|
|
56
|
-
* the SDK enum).
|
|
57
|
-
*/
|
|
58
|
-
declare function HarnessPicker({ value, onChange, available, optionsOverride, label, ...rest }: HarnessPickerProps): react_jsx_runtime.JSX.Element;
|
|
8
|
+
export { E as ExposedPort, P as PortsList, a as PortsListProps } from './ports-list-DfG0VfPt.js';
|
|
59
9
|
|
|
60
10
|
interface SidebarUser {
|
|
61
11
|
email: string;
|
|
@@ -462,11 +412,30 @@ interface SandboxCardData {
|
|
|
462
412
|
name: string;
|
|
463
413
|
nodeId?: string;
|
|
464
414
|
status: SandboxStatus;
|
|
415
|
+
/**
|
|
416
|
+
* A user-customized container image (e.g. `ghcr.io/acme/api:sha-1a2b`).
|
|
417
|
+
* Surfaced only when set — sandboxes run a managed agent runtime image by
|
|
418
|
+
* default, which is not operator-relevant and is intentionally not shown.
|
|
419
|
+
*/
|
|
420
|
+
customImage?: string;
|
|
421
|
+
/** @deprecated The product has no user-selectable environment. Use `customImage`. */
|
|
465
422
|
image?: string;
|
|
423
|
+
/** @deprecated No longer rendered; the card derives its glyph from status. */
|
|
466
424
|
imageIcon?: React.ReactNode;
|
|
425
|
+
/** Allocated vCPU count. */
|
|
426
|
+
vcpu?: number;
|
|
427
|
+
/** Live CPU utilization, 0–100. */
|
|
467
428
|
cpuPercent?: number;
|
|
429
|
+
/** Live RAM in use (GB). */
|
|
468
430
|
ramUsed?: number;
|
|
431
|
+
/** Allocated RAM (GB). */
|
|
469
432
|
ramTotal?: number;
|
|
433
|
+
/** Disk in use (GB). */
|
|
434
|
+
diskUsed?: number;
|
|
435
|
+
/** Allocated disk (GB). */
|
|
436
|
+
diskTotal?: number;
|
|
437
|
+
/** Human-readable uptime since last start, e.g. "3d 4h" or "12m". */
|
|
438
|
+
uptime?: string;
|
|
470
439
|
provisioningMessage?: string;
|
|
471
440
|
provisioningPercent?: number;
|
|
472
441
|
archivedAt?: string;
|
|
@@ -584,6 +553,67 @@ interface PlanCardsProps {
|
|
|
584
553
|
}
|
|
585
554
|
declare function PlanCards({ plans, className }: PlanCardsProps): react_jsx_runtime.JSX.Element;
|
|
586
555
|
|
|
556
|
+
interface Backend {
|
|
557
|
+
type: string;
|
|
558
|
+
label: string;
|
|
559
|
+
description?: string;
|
|
560
|
+
/** Optional leading brand glyph (e.g. a HarnessLogo) shown in the trigger and rows. */
|
|
561
|
+
icon?: ReactNode;
|
|
562
|
+
}
|
|
563
|
+
type BackendSelectorVariant = "field" | "pill";
|
|
564
|
+
interface BackendSelectorProps {
|
|
565
|
+
backends: Backend[];
|
|
566
|
+
selected: string;
|
|
567
|
+
onChange: (selected: string) => void;
|
|
568
|
+
/**
|
|
569
|
+
* Trigger appearance. "pill" (default) = compact inline pill matching the
|
|
570
|
+
* ModelPicker pill — logo + short label only. "field" = full-width form
|
|
571
|
+
* field with a label above. Either way the long descriptor lives only as
|
|
572
|
+
* subtext inside the open dropdown, never on the closed trigger.
|
|
573
|
+
*/
|
|
574
|
+
variant?: BackendSelectorVariant;
|
|
575
|
+
label?: string;
|
|
576
|
+
placeholder?: string;
|
|
577
|
+
className?: string;
|
|
578
|
+
/** Extra classes merged onto the trigger itself (after the built-in defaults). */
|
|
579
|
+
triggerClassName?: string;
|
|
580
|
+
}
|
|
581
|
+
declare function BackendSelector({ backends, selected, onChange, variant, label, placeholder, className, triggerClassName, }: BackendSelectorProps): react_jsx_runtime.JSX.Element;
|
|
582
|
+
|
|
583
|
+
interface HarnessOption extends Backend {
|
|
584
|
+
type: HarnessType;
|
|
585
|
+
/**
|
|
586
|
+
* Whether this harness can drive an interactive chat session. `false` for
|
|
587
|
+
* shell-only backends (`cli-base`) that have no conversational agent — the
|
|
588
|
+
* chat composer filters these out (see {@link chatCapableHarnesses}) while
|
|
589
|
+
* scheduled/non-chat surfaces keep them.
|
|
590
|
+
*/
|
|
591
|
+
chatCapable: boolean;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Default option list with human-readable copy. Order is curated so the
|
|
595
|
+
* recommended choice (`opencode`) appears first; `cli-base` (no agent) last.
|
|
596
|
+
*/
|
|
597
|
+
declare const HARNESS_OPTIONS: readonly HarnessOption[];
|
|
598
|
+
/** Harness types that can drive an interactive chat session. */
|
|
599
|
+
declare const chatCapableHarnesses: ReadonlyArray<HarnessType>;
|
|
600
|
+
interface HarnessPickerProps extends Omit<BackendSelectorProps, "backends" | "selected" | "onChange"> {
|
|
601
|
+
value: HarnessType;
|
|
602
|
+
onChange: (next: HarnessType) => void;
|
|
603
|
+
/** Filter the available harnesses (e.g. by plan tier). Defaults to all. */
|
|
604
|
+
available?: ReadonlyArray<HarnessType>;
|
|
605
|
+
/** Override or extend the option metadata. Keys are HarnessType. */
|
|
606
|
+
optionsOverride?: Partial<Record<HarnessType, Partial<Omit<HarnessOption, "type">>>>;
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Type-safe harness/backend selector for sandbox-backed agent products.
|
|
610
|
+
*
|
|
611
|
+
* Wraps the generic {@link BackendSelector} with the canonical harness list
|
|
612
|
+
* baked in, so consumers don't have to re-declare it (or risk drifting from
|
|
613
|
+
* the SDK enum).
|
|
614
|
+
*/
|
|
615
|
+
declare function HarnessPicker({ value, onChange, available, optionsOverride, label, ...rest }: HarnessPickerProps): react_jsx_runtime.JSX.Element;
|
|
616
|
+
|
|
587
617
|
/**
|
|
588
618
|
* Per-harness brand glyph. `logoUrl` is a bundled lobehub data-url rendered
|
|
589
619
|
* as a CSS mask filled with the foreground token (single-color brand mark,
|
|
@@ -962,20 +992,6 @@ interface GitPanelProps {
|
|
|
962
992
|
}
|
|
963
993
|
declare function GitPanel({ status, log, loading, onRefresh, className }: GitPanelProps): react_jsx_runtime.JSX.Element;
|
|
964
994
|
|
|
965
|
-
interface ExposedPort {
|
|
966
|
-
port: number;
|
|
967
|
-
url: string;
|
|
968
|
-
status: "active" | "pending";
|
|
969
|
-
}
|
|
970
|
-
interface PortsListProps {
|
|
971
|
-
ports: ExposedPort[];
|
|
972
|
-
onExposePort: (port: number) => void;
|
|
973
|
-
onRemovePort?: (port: number) => void;
|
|
974
|
-
isExposing?: boolean;
|
|
975
|
-
className?: string;
|
|
976
|
-
}
|
|
977
|
-
declare function PortsList({ ports, onExposePort, onRemovePort, isExposing, className }: PortsListProps): react_jsx_runtime.JSX.Element;
|
|
978
|
-
|
|
979
995
|
interface ProcessInfo {
|
|
980
996
|
pid: number;
|
|
981
997
|
command: string;
|
|
@@ -1068,4 +1084,4 @@ interface InfoPanelProps {
|
|
|
1068
1084
|
}
|
|
1069
1085
|
declare function InfoPanel({ label, title, description, className }: InfoPanelProps): react_jsx_runtime.JSX.Element;
|
|
1070
1086
|
|
|
1071
|
-
export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type Backend, BackendConfig, type BackendConfigProps, BackendSelector, type BackendSelectorProps, type BackendStatusData, ClusterStatusBar, type ClusterStatusBarProps, type ClusterStatusItem, CreditBalance, type CreditBalanceProps, DashboardLayout, type DashboardLayoutProps, type Profile as DashboardProfile, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type
|
|
1087
|
+
export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type Backend, BackendConfig, type BackendConfigProps, BackendSelector, type BackendSelectorProps, type BackendStatusData, ClusterStatusBar, type ClusterStatusBarProps, type ClusterStatusItem, CreditBalance, type CreditBalanceProps, DashboardLayout, type DashboardLayoutProps, type Profile as DashboardProfile, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type GitCommitData, GitPanel, type GitPanelProps, type GitStatusData, HARNESS_BRAND, HARNESS_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, INSUFFICIENT_BALANCE_CODE, InfoPanel, type InfoPanelProps, type InsufficientBalance, type Invoice, InvoiceTable, type InvoiceTableProps, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type NavItem, NetworkConfig, type NetworkConfigData, type NetworkConfigProps, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, type PlanCardData, PlanCards, type PlanCardsProps, type PlanFeature, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, ProfileComparison, type ProfileComparisonProps, ProfileSelector, type ProfileSelectorProps, PromoBanner, type PromoBannerProps, RailButton, type RailButtonProps, RailCollapseToggle, type RailCollapseToggleProps, RailFlyout, type RailFlyoutProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailThemeToggle, RailTooltip, type RailTooltipProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, type SandboxStatus, SandboxTable, type SandboxTableProps, 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, SidebarRailHeader, type SidebarRailHeaderProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, UsageSummary, type UsageSummaryData, type UsageSummaryProps, type Variant, VariantList, type VariantListProps, type VariantOutcome, type VariantStatus, canAdminSandbox, chatCapableHarnesses, parseInsufficientBalance, useSidebar };
|
package/dist/dashboard.js
CHANGED
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
canAdminSandbox,
|
|
53
53
|
parseInsufficientBalance,
|
|
54
54
|
useSidebar
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-PZ62T5PM.js";
|
|
56
56
|
import {
|
|
57
57
|
BillingDashboard,
|
|
58
58
|
InfoPanel,
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
TemplateCard,
|
|
61
61
|
UsageChart,
|
|
62
62
|
formatPrice
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-OMUIPJQZ.js";
|
|
64
64
|
import "./chunk-4ZZUMXPX.js";
|
|
65
65
|
import {
|
|
66
66
|
BackendSelector,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
HarnessLogo,
|
|
70
70
|
HarnessPicker,
|
|
71
71
|
chatCapableHarnesses
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-BR2LMUAE.js";
|
|
73
73
|
import {
|
|
74
74
|
DEFAULT_FEATURED_MODEL_IDS,
|
|
75
75
|
ModelPicker,
|
|
@@ -78,8 +78,9 @@ import {
|
|
|
78
78
|
formatContext,
|
|
79
79
|
formatPricing,
|
|
80
80
|
modelDedupKey
|
|
81
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-LQHTCM56.js";
|
|
82
82
|
import "./chunk-EI44GEQ5.js";
|
|
83
|
+
import "./chunk-U67V476Y.js";
|
|
83
84
|
export {
|
|
84
85
|
ActivityFeed,
|
|
85
86
|
BackendConfig,
|
package/dist/editor.js
CHANGED
package/dist/files.d.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
1
|
export { FileArtifactPane, FileArtifactPaneProps, FileNode, FilePreview, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, filterFileTree } from '@tangle-network/ui/files';
|
|
2
|
+
import '@tangle-network/ui/openui';
|
|
3
|
+
import '@tangle-network/ui/run';
|
|
4
|
+
import '@tangle-network/ui/utils';
|
|
5
|
+
import '@tangle-network/ui/editor';
|
|
6
|
+
import '@tangle-network/ui/markdown';
|