@tangle-network/agent-app 0.36.0 → 0.38.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/{chunk-EHPK7GKR.js → chunk-7W5XSTUF.js} +11 -2
- package/dist/chunk-7W5XSTUF.js.map +1 -0
- package/dist/{chunk-GZGF3JWQ.js → chunk-MJ3RUHD4.js} +374 -171
- package/dist/chunk-MJ3RUHD4.js.map +1 -0
- package/dist/{chunk-MH6AVXQ7.js → chunk-VT5DI6GL.js} +40 -34
- package/dist/chunk-VT5DI6GL.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +22 -4
- package/dist/knowledge-loop/index.d.ts +1 -1
- package/dist/{model-CKzniMMr.d.ts → model-dF2h4xT9.d.ts} +17 -1
- package/dist/platform/index.d.ts +33 -1
- package/dist/platform/index.js +22 -2
- package/dist/platform/index.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +7 -3
- package/dist/sandbox/index.d.ts +92 -27
- package/dist/sandbox/index.js +17 -2
- package/dist/studio-react/index.js +2 -1
- package/dist/studio-react/index.js.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/web-react/index.js +31 -13
- package/dist/web-react/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-EHPK7GKR.js.map +0 -1
- package/dist/chunk-GZGF3JWQ.js.map +0 -1
- package/dist/chunk-MH6AVXQ7.js.map +0 -1
package/dist/sandbox/index.d.ts
CHANGED
|
@@ -3,6 +3,26 @@ export { StorageConfig } from '@tangle-network/sandbox';
|
|
|
3
3
|
import { a as AppToolName, c as ToolHeaderNames } from '../auth-BlS9GWfL.js';
|
|
4
4
|
import { b as AppToolContext } from '../types-2rOJo8Hc.js';
|
|
5
5
|
import { Harness } from '../harness/index.js';
|
|
6
|
+
import { f as TangleExecutionEnvironment } from '../model-dF2h4xT9.js';
|
|
7
|
+
|
|
8
|
+
type Outcome<T> = {
|
|
9
|
+
succeeded: true;
|
|
10
|
+
value: T;
|
|
11
|
+
} | {
|
|
12
|
+
succeeded: false;
|
|
13
|
+
error: Error;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
interface TerminalProxyIdentity {
|
|
17
|
+
userId: string;
|
|
18
|
+
workspaceId: string;
|
|
19
|
+
sandboxId: string;
|
|
20
|
+
}
|
|
21
|
+
declare function mintTerminalProxyToken(secret: string, identity: TerminalProxyIdentity, ttlMs?: number, now?: () => number): Promise<Outcome<{
|
|
22
|
+
token: string;
|
|
23
|
+
expiresAt: Date;
|
|
24
|
+
}>>;
|
|
25
|
+
declare function verifyTerminalProxyToken(secret: string, token: string, expected: TerminalProxyIdentity, now?: () => number): Promise<boolean>;
|
|
6
26
|
|
|
7
27
|
interface WorkspaceSandboxInstanceLike {
|
|
8
28
|
id: string;
|
|
@@ -42,15 +62,10 @@ interface WorkspaceSandboxManager<TBox extends WorkspaceSandboxInstanceLike, TEn
|
|
|
42
62
|
declare function createWorkspaceSandboxManager<TClient, TBox extends WorkspaceSandboxInstanceLike, TEnsureOptions = void>(opts: WorkspaceSandboxManagerOptions<TClient, TBox, TEnsureOptions>): WorkspaceSandboxManager<TBox, TEnsureOptions>;
|
|
43
63
|
interface SandboxTerminalTokenOptions {
|
|
44
64
|
secret?: string;
|
|
45
|
-
prefix?: string;
|
|
46
65
|
expiresInMs?: number;
|
|
47
66
|
now?: () => number;
|
|
48
67
|
}
|
|
49
|
-
|
|
50
|
-
userId: string;
|
|
51
|
-
workspaceId: string;
|
|
52
|
-
sandboxId: string;
|
|
53
|
-
}
|
|
68
|
+
type SandboxTerminalTokenSubject = TerminalProxyIdentity;
|
|
54
69
|
interface SandboxTerminalTokenResult {
|
|
55
70
|
token: string;
|
|
56
71
|
expiresAt: Date;
|
|
@@ -70,7 +85,6 @@ interface WorkspaceSandboxConnectionHandlerOptions<TBox extends WorkspaceSandbox
|
|
|
70
85
|
ensureWorkspaceSandbox: (workspaceId: string, userId: string) => Promise<TBox>;
|
|
71
86
|
tokenSecret: string | (() => string | undefined);
|
|
72
87
|
tokenExpiresInMs?: number;
|
|
73
|
-
tokenPrefix?: string;
|
|
74
88
|
proxyRuntimeUrl?: (args: {
|
|
75
89
|
request: Request;
|
|
76
90
|
workspaceId: string;
|
|
@@ -92,6 +106,7 @@ interface SandboxApiCredentials {
|
|
|
92
106
|
}
|
|
93
107
|
interface SandboxRuntimeConnection {
|
|
94
108
|
runtimeUrl: string;
|
|
109
|
+
/** Server-side sidecar bearer. Must authorize terminal routes; never expose it to browser code. */
|
|
95
110
|
authToken?: string;
|
|
96
111
|
}
|
|
97
112
|
interface WorkspaceSandboxRuntimeProxyHandlerOptions {
|
|
@@ -115,7 +130,6 @@ interface WorkspaceSandboxRuntimeProxyHandlerOptions {
|
|
|
115
130
|
sandboxId: string;
|
|
116
131
|
}) => Promise<SandboxRuntimeConnection | null | undefined>;
|
|
117
132
|
tokenSecret: string | (() => string | undefined);
|
|
118
|
-
tokenPrefix?: string;
|
|
119
133
|
fetch?: typeof fetch;
|
|
120
134
|
forwardHeaders?: string[];
|
|
121
135
|
}
|
|
@@ -165,7 +179,6 @@ interface WorkspaceSandboxTerminalUpgradeHandlerOptions {
|
|
|
165
179
|
sandboxId: string;
|
|
166
180
|
}) => Promise<SandboxRuntimeConnection | null | undefined>;
|
|
167
181
|
tokenSecret: string | (() => string | undefined);
|
|
168
|
-
tokenPrefix?: string;
|
|
169
182
|
fetch?: typeof fetch;
|
|
170
183
|
}
|
|
171
184
|
/**
|
|
@@ -186,17 +199,57 @@ declare function bearerToken(value: string | null): string | null;
|
|
|
186
199
|
declare function bearerSubprotocolToken(value: string | null): string | null;
|
|
187
200
|
declare function terminalTokenFromRequest(headers: Headers): string | null;
|
|
188
201
|
|
|
189
|
-
type Outcome<T> = {
|
|
190
|
-
succeeded: true;
|
|
191
|
-
value: T;
|
|
192
|
-
} | {
|
|
193
|
-
succeeded: false;
|
|
194
|
-
error: Error;
|
|
195
|
-
};
|
|
196
202
|
interface SandboxClientCredentials {
|
|
197
203
|
apiKey: string;
|
|
198
204
|
baseUrl: string;
|
|
199
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Sandbox credential policy reuses the canonical execution-environment union
|
|
208
|
+
* (development/test/staging/production) so env classification stays in one place
|
|
209
|
+
* (see resolveTangleExecutionEnvironment in runtime/model).
|
|
210
|
+
*/
|
|
211
|
+
type SandboxCredentialEnvironment = TangleExecutionEnvironment;
|
|
212
|
+
interface ResolveSandboxClientCredentialsOptions {
|
|
213
|
+
/**
|
|
214
|
+
* Environment object to read from. Defaults to process.env when available.
|
|
215
|
+
*/
|
|
216
|
+
env?: Record<string, string | undefined>;
|
|
217
|
+
/**
|
|
218
|
+
* Explicit environment classification. Defaults to APP_ENV/NODE_ENV derived
|
|
219
|
+
* behavior: local/development/test use direct env credentials; staging/prod
|
|
220
|
+
* require the provision callback unless allowDirectEnvCredentials opts in.
|
|
221
|
+
*/
|
|
222
|
+
environment?: SandboxCredentialEnvironment;
|
|
223
|
+
/**
|
|
224
|
+
* Env names that may carry a sandbox-compatible bearer. The first non-empty
|
|
225
|
+
* value wins when direct env credentials are allowed.
|
|
226
|
+
*/
|
|
227
|
+
directKeyNames?: readonly string[];
|
|
228
|
+
/**
|
|
229
|
+
* Env names that may carry the sandbox gateway URL. The first non-empty value
|
|
230
|
+
* wins, then defaultBaseUrl.
|
|
231
|
+
*/
|
|
232
|
+
baseUrlNames?: readonly string[];
|
|
233
|
+
/**
|
|
234
|
+
* Base URL used when none of baseUrlNames are present.
|
|
235
|
+
*/
|
|
236
|
+
defaultBaseUrl?: string;
|
|
237
|
+
/**
|
|
238
|
+
* Whether direct env credentials are allowed for this environment. Defaults
|
|
239
|
+
* to true in development/test and false in staging/production.
|
|
240
|
+
*/
|
|
241
|
+
allowDirectEnvCredentials?: boolean | ((environment: SandboxCredentialEnvironment) => boolean);
|
|
242
|
+
/**
|
|
243
|
+
* Product-owned provision path, usually minting a per-user sandbox key from a
|
|
244
|
+
* linked platform account. Called before direct env credentials in
|
|
245
|
+
* staging/production and after direct env credentials in development/test.
|
|
246
|
+
*/
|
|
247
|
+
provision?: (context: {
|
|
248
|
+
environment: SandboxCredentialEnvironment;
|
|
249
|
+
env: Record<string, string | undefined>;
|
|
250
|
+
}) => SandboxClientCredentials | null | undefined | Promise<SandboxClientCredentials | null | undefined>;
|
|
251
|
+
}
|
|
252
|
+
declare function resolveSandboxClientCredentials(options?: ResolveSandboxClientCredentialsOptions): Promise<SandboxClientCredentials>;
|
|
200
253
|
interface SandboxResourceConfig {
|
|
201
254
|
image: string;
|
|
202
255
|
cpuCores: number;
|
|
@@ -256,6 +309,7 @@ interface SandboxRuntimeConfig {
|
|
|
256
309
|
childKeyMint?: (scope: SandboxScope) => Promise<Outcome<string>>;
|
|
257
310
|
bootstrap?: (box: SandboxInstance, scope: SandboxScope) => Promise<Outcome<void>>;
|
|
258
311
|
livenessProbe?: LivenessProbeConfig;
|
|
312
|
+
webTerminalEnabled?: boolean;
|
|
259
313
|
resumeStopped?: boolean;
|
|
260
314
|
backendModelAtCreate?: boolean;
|
|
261
315
|
deferProfileFiles?: boolean;
|
|
@@ -282,6 +336,27 @@ interface EnsureWorkspaceSandboxOptions {
|
|
|
282
336
|
harness: Harness;
|
|
283
337
|
forceNew?: boolean;
|
|
284
338
|
}
|
|
339
|
+
interface SandboxToolSpec {
|
|
340
|
+
name: string;
|
|
341
|
+
content: string;
|
|
342
|
+
executable?: boolean;
|
|
343
|
+
}
|
|
344
|
+
interface SandboxToolPathOptions {
|
|
345
|
+
appName: string;
|
|
346
|
+
baseDir?: string;
|
|
347
|
+
binDir?: string;
|
|
348
|
+
}
|
|
349
|
+
interface BuildSandboxToolFileMountsOptions extends SandboxToolPathOptions {
|
|
350
|
+
tools: readonly SandboxToolSpec[];
|
|
351
|
+
}
|
|
352
|
+
declare function sandboxToolRootDir(options: SandboxToolPathOptions): string;
|
|
353
|
+
declare function sandboxToolBinDir(options: SandboxToolPathOptions): string;
|
|
354
|
+
declare function sandboxToolPath(options: SandboxToolPathOptions & {
|
|
355
|
+
toolName: string;
|
|
356
|
+
}): string;
|
|
357
|
+
declare function buildSandboxToolFileMounts(options: BuildSandboxToolFileMountsOptions): AgentProfileFileMount[];
|
|
358
|
+
declare function buildSandboxToolPathSetupScript(options: SandboxToolPathOptions): string;
|
|
359
|
+
declare function runSandboxToolPathSetup(box: SandboxInstance, options: SandboxToolPathOptions): Promise<Outcome<void>>;
|
|
285
360
|
declare function splitDeferredProfileFiles(profile: AgentProfile): {
|
|
286
361
|
leanProfile: AgentProfile;
|
|
287
362
|
deferredFiles: AgentProfileFileMount[];
|
|
@@ -361,16 +436,6 @@ declare function mintSandboxScopedToken(box: SandboxInstance, options: {
|
|
|
361
436
|
declare function driveSandboxTurn(shell: SandboxRuntimeConfig, box: SandboxInstance, message: string, options: StreamSandboxPromptOptions & {
|
|
362
437
|
sessionId: string;
|
|
363
438
|
}): Promise<Outcome<PromptResult>>;
|
|
364
|
-
interface TerminalProxyIdentity {
|
|
365
|
-
userId: string;
|
|
366
|
-
workspaceId: string;
|
|
367
|
-
sandboxId: string;
|
|
368
|
-
}
|
|
369
|
-
declare function mintTerminalProxyToken(secret: string, identity: TerminalProxyIdentity, ttlMs?: number): Promise<Outcome<{
|
|
370
|
-
token: string;
|
|
371
|
-
expiresAt: Date;
|
|
372
|
-
}>>;
|
|
373
|
-
declare function verifyTerminalProxyToken(secret: string, token: string, expected: TerminalProxyIdentity): Promise<boolean>;
|
|
374
439
|
type SandboxStepTransition = {
|
|
375
440
|
kind: 'step-start';
|
|
376
441
|
} | {
|
|
@@ -382,4 +447,4 @@ declare function classifySeveredStream(event: unknown): SandboxStepTransition |
|
|
|
382
447
|
declare function isTerminalPromptEvent(event: unknown): boolean;
|
|
383
448
|
declare function detectInteractiveQuestion(event: unknown): string | null;
|
|
384
449
|
|
|
385
|
-
export { type AppToolDescriptor, type AuthenticatedSandboxUser, type BuildAppToolMcpServersOptions, DEFAULT_SANDBOX_RESOURCES, type EnsureWorkspaceSandboxOptions, type LivenessProbeConfig, type MemberSyncSeam, type Outcome, type ProfileComposeOptions, type ProviderResolutionConfig, type ResolvedModel, type SandboxApiCredentials, type SandboxBuildContext, type SandboxClientCredentials, type SandboxPermissionLevel, type SandboxResourceConfig, type SandboxRestoreSpec, type SandboxRuntimeConfig, type SandboxRuntimeConnection, type SandboxScope, type SandboxStepTransition, type SandboxTerminalTokenOptions, type SandboxTerminalTokenResult, type SandboxTerminalTokenSubject, type SandboxTerminalWsMatch, type ScopedTokenResult, type SecretStore, type StreamSandboxPromptOptions, type TerminalProxyIdentity, type WorkspaceSandboxConnectionArgs, type WorkspaceSandboxConnectionHandlerOptions, type WorkspaceSandboxEnsureContext, type WorkspaceSandboxInstanceLike, type WorkspaceSandboxManager, type WorkspaceSandboxManagerOptions, type WorkspaceSandboxRuntimeProxyArgs, type WorkspaceSandboxRuntimeProxyHandlerOptions, type WorkspaceSandboxTerminalUpgradeHandlerOptions, attachReasoningEffort, bearerSubprotocolToken, bearerToken, buildAppToolMcpServers, buildSandboxRuntimeProxyHeaders, classifySeveredStream, createSandboxTerminalToken, createWorkspaceSandboxConnectionHandler, createWorkspaceSandboxManager, createWorkspaceSandboxRuntimeProxyHandler, createWorkspaceSandboxTerminalUpgradeHandler, deleteSecret, detectInteractiveQuestion, driveSandboxTurn, encodeSandboxRuntimePath, ensureWorkspaceSandbox, flattenHistory, getClient, isSandboxTerminalWsUpgrade, isTerminalPromptEvent, matchSandboxTerminalWsPath, mergeExtraMcp, mintSandboxScopedToken, mintTerminalProxyToken, readSecret, resetClientCache, resolveModel, runSandboxPrompt, secretStoreFromClient, splitDeferredProfileFiles, storeSecret, streamSandboxPrompt, syncSandboxMemberAdd, syncSandboxMemberRemove, syncSandboxMemberRole, terminalTokenFromRequest, verifySandboxTerminalToken, verifyTerminalProxyToken, writeProfileFilesToBox };
|
|
450
|
+
export { type AppToolDescriptor, type AuthenticatedSandboxUser, type BuildAppToolMcpServersOptions, type BuildSandboxToolFileMountsOptions, DEFAULT_SANDBOX_RESOURCES, type EnsureWorkspaceSandboxOptions, type LivenessProbeConfig, type MemberSyncSeam, type Outcome, type ProfileComposeOptions, type ProviderResolutionConfig, type ResolveSandboxClientCredentialsOptions, type ResolvedModel, type SandboxApiCredentials, type SandboxBuildContext, type SandboxClientCredentials, type SandboxCredentialEnvironment, type SandboxPermissionLevel, type SandboxResourceConfig, type SandboxRestoreSpec, type SandboxRuntimeConfig, type SandboxRuntimeConnection, type SandboxScope, type SandboxStepTransition, type SandboxTerminalTokenOptions, type SandboxTerminalTokenResult, type SandboxTerminalTokenSubject, type SandboxTerminalWsMatch, type SandboxToolPathOptions, type SandboxToolSpec, type ScopedTokenResult, type SecretStore, type StreamSandboxPromptOptions, type TerminalProxyIdentity, type WorkspaceSandboxConnectionArgs, type WorkspaceSandboxConnectionHandlerOptions, type WorkspaceSandboxEnsureContext, type WorkspaceSandboxInstanceLike, type WorkspaceSandboxManager, type WorkspaceSandboxManagerOptions, type WorkspaceSandboxRuntimeProxyArgs, type WorkspaceSandboxRuntimeProxyHandlerOptions, type WorkspaceSandboxTerminalUpgradeHandlerOptions, attachReasoningEffort, bearerSubprotocolToken, bearerToken, buildAppToolMcpServers, buildSandboxRuntimeProxyHeaders, buildSandboxToolFileMounts, buildSandboxToolPathSetupScript, classifySeveredStream, createSandboxTerminalToken, createWorkspaceSandboxConnectionHandler, createWorkspaceSandboxManager, createWorkspaceSandboxRuntimeProxyHandler, createWorkspaceSandboxTerminalUpgradeHandler, deleteSecret, detectInteractiveQuestion, driveSandboxTurn, encodeSandboxRuntimePath, ensureWorkspaceSandbox, flattenHistory, getClient, isSandboxTerminalWsUpgrade, isTerminalPromptEvent, matchSandboxTerminalWsPath, mergeExtraMcp, mintSandboxScopedToken, mintTerminalProxyToken, readSecret, resetClientCache, resolveModel, resolveSandboxClientCredentials, runSandboxPrompt, runSandboxToolPathSetup, sandboxToolBinDir, sandboxToolPath, sandboxToolRootDir, secretStoreFromClient, splitDeferredProfileFiles, storeSecret, streamSandboxPrompt, syncSandboxMemberAdd, syncSandboxMemberRemove, syncSandboxMemberRole, terminalTokenFromRequest, verifySandboxTerminalToken, verifyTerminalProxyToken, writeProfileFilesToBox };
|
package/dist/sandbox/index.js
CHANGED
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
bearerToken,
|
|
6
6
|
buildAppToolMcpServers,
|
|
7
7
|
buildSandboxRuntimeProxyHeaders,
|
|
8
|
+
buildSandboxToolFileMounts,
|
|
9
|
+
buildSandboxToolPathSetupScript,
|
|
8
10
|
classifySeveredStream,
|
|
9
11
|
createSandboxTerminalToken,
|
|
10
12
|
createWorkspaceSandboxConnectionHandler,
|
|
@@ -27,7 +29,12 @@ import {
|
|
|
27
29
|
readSecret,
|
|
28
30
|
resetClientCache,
|
|
29
31
|
resolveModel,
|
|
32
|
+
resolveSandboxClientCredentials,
|
|
30
33
|
runSandboxPrompt,
|
|
34
|
+
runSandboxToolPathSetup,
|
|
35
|
+
sandboxToolBinDir,
|
|
36
|
+
sandboxToolPath,
|
|
37
|
+
sandboxToolRootDir,
|
|
31
38
|
secretStoreFromClient,
|
|
32
39
|
splitDeferredProfileFiles,
|
|
33
40
|
storeSecret,
|
|
@@ -39,10 +46,11 @@ import {
|
|
|
39
46
|
verifySandboxTerminalToken,
|
|
40
47
|
verifyTerminalProxyToken,
|
|
41
48
|
writeProfileFilesToBox
|
|
42
|
-
} from "../chunk-
|
|
49
|
+
} from "../chunk-MJ3RUHD4.js";
|
|
43
50
|
import "../chunk-5VXPDXZJ.js";
|
|
44
|
-
import "../chunk-
|
|
51
|
+
import "../chunk-VT5DI6GL.js";
|
|
45
52
|
import "../chunk-A76ZHWNF.js";
|
|
53
|
+
import "../chunk-7W5XSTUF.js";
|
|
46
54
|
import "../chunk-JZZ6AWF4.js";
|
|
47
55
|
export {
|
|
48
56
|
DEFAULT_SANDBOX_RESOURCES,
|
|
@@ -51,6 +59,8 @@ export {
|
|
|
51
59
|
bearerToken,
|
|
52
60
|
buildAppToolMcpServers,
|
|
53
61
|
buildSandboxRuntimeProxyHeaders,
|
|
62
|
+
buildSandboxToolFileMounts,
|
|
63
|
+
buildSandboxToolPathSetupScript,
|
|
54
64
|
classifySeveredStream,
|
|
55
65
|
createSandboxTerminalToken,
|
|
56
66
|
createWorkspaceSandboxConnectionHandler,
|
|
@@ -73,7 +83,12 @@ export {
|
|
|
73
83
|
readSecret,
|
|
74
84
|
resetClientCache,
|
|
75
85
|
resolveModel,
|
|
86
|
+
resolveSandboxClientCredentials,
|
|
76
87
|
runSandboxPrompt,
|
|
88
|
+
runSandboxToolPathSetup,
|
|
89
|
+
sandboxToolBinDir,
|
|
90
|
+
sandboxToolPath,
|
|
91
|
+
sandboxToolRootDir,
|
|
77
92
|
secretStoreFromClient,
|
|
78
93
|
splitDeferredProfileFiles,
|
|
79
94
|
storeSecret,
|
|
@@ -963,7 +963,8 @@ function GenerationDetail({
|
|
|
963
963
|
}) {
|
|
964
964
|
const cfg = typeConfigFor(generation.type);
|
|
965
965
|
const Icon = cfg.icon;
|
|
966
|
-
const
|
|
966
|
+
const vaultPath = generationVaultPath(generation);
|
|
967
|
+
const href = vaultHref && vaultPath ? vaultHref(vaultPath) : null;
|
|
967
968
|
return /* @__PURE__ */ jsxs12("div", { className: "space-y-4", children: [
|
|
968
969
|
/* @__PURE__ */ jsx13("div", { className: "overflow-hidden rounded-lg bg-muted/50", children: generation.type === "image" && generation.result ? /* @__PURE__ */ jsx13("img", { src: generation.result, alt: generation.prompt, className: "max-h-[420px] w-full object-contain" }) : (generation.type === "video" || generation.type === "avatar") && generation.result ? /* @__PURE__ */ jsx13("video", { src: generation.result, controls: true, className: "max-h-[420px] w-full" }) : generation.type === "speech" && generation.result ? /* @__PURE__ */ jsx13("div", { className: "p-6", children: /* @__PURE__ */ jsx13("audio", { src: generation.result, controls: true, className: "w-full" }) }) : /* @__PURE__ */ jsx13("div", { className: "flex h-32 items-center justify-center", children: /* @__PURE__ */ jsx13(Icon, { className: "h-8 w-8 text-muted-foreground/20" }) }) }),
|
|
969
970
|
/* @__PURE__ */ jsxs12("div", { className: "flex flex-wrap items-center gap-2", children: [
|