@agent-platform/ui 0.0.13 → 0.0.15

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/index.js CHANGED
@@ -2,7 +2,7 @@ import { createContext, useRef, useEffect, useState, useMemo, useCallback, useCo
2
2
  import { clsx } from 'clsx';
3
3
  import { twMerge } from 'tailwind-merge';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
5
- import { CaretDown, Gear, Paperclip, PaperPlaneTilt } from '@phosphor-icons/react/dist/ssr';
5
+ import { ChevronDown, PlusCircle, Send, Wrench } from 'lucide-react';
6
6
  import { cva } from 'class-variance-authority';
7
7
  import { Slot } from 'radix-ui';
8
8
  import ReactMarkdown from 'react-markdown';
@@ -103,10 +103,8 @@ function Button({
103
103
  function AgentHeader({
104
104
  historyLabel = "\u5C65\u6B74",
105
105
  onHistoryClick,
106
- onSettingsClick,
107
106
  onNewChatClick,
108
107
  newChatLabel = "\u65B0\u898F\u30C1\u30E3\u30C3\u30C8",
109
- settingsAriaLabel = "\u8A2D\u5B9A",
110
108
  isHistoryOpen = false,
111
109
  className
112
110
  }) {
@@ -127,7 +125,7 @@ function AgentHeader({
127
125
  children: [
128
126
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: historyLabel }),
129
127
  /* @__PURE__ */ jsx(
130
- CaretDown,
128
+ ChevronDown,
131
129
  {
132
130
  className: cn("size-4 transition-transform duration-200", isHistoryOpen && "rotate-180")
133
131
  }
@@ -135,27 +133,9 @@ function AgentHeader({
135
133
  ]
136
134
  }
137
135
  ),
138
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
139
- /* @__PURE__ */ jsx(
140
- Button,
141
- {
142
- variant: "ghost",
143
- size: "icon-sm",
144
- onClick: onSettingsClick,
145
- "aria-label": settingsAriaLabel,
146
- className: "text-foreground",
147
- children: /* @__PURE__ */ jsx(Gear, { className: "size-5" })
148
- }
149
- ),
150
- /* @__PURE__ */ jsx(
151
- Button,
152
- {
153
- size: "sm",
154
- onClick: onNewChatClick,
155
- className: "bg-foreground text-background text-xs font-medium hover:bg-foreground/90",
156
- children: newChatLabel
157
- }
158
- )
136
+ /* @__PURE__ */ jsxs(Button, { variant: "secondary", size: "xs", onClick: onNewChatClick, children: [
137
+ /* @__PURE__ */ jsx(PlusCircle, { className: "size-4", color: "gray" }),
138
+ newChatLabel
159
139
  ] })
160
140
  ]
161
141
  }
@@ -328,7 +308,6 @@ function AgentInput({
328
308
  value: controlledValue,
329
309
  onChange,
330
310
  onSend,
331
- onAttach,
332
311
  placeholder = "AI\u306B\u76F8\u8AC7\u3057\u3066\u307F\u307E\u3057\u3087\u3046",
333
312
  disabled = false,
334
313
  isLoading = false,
@@ -386,19 +365,6 @@ function AgentInput({
386
365
  "data-slot": "agent-input",
387
366
  className: cn("w-full border-t border-border bg-muted px-3 pb-3 pt-2", className),
388
367
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-end gap-1 p-2 rounded-lg border border-border bg-background transition-colors", children: [
389
- /* @__PURE__ */ jsx(
390
- Button,
391
- {
392
- type: "button",
393
- variant: "ghost",
394
- size: "icon-sm",
395
- onClick: onAttach,
396
- disabled,
397
- "aria-label": "\u30D5\u30A1\u30A4\u30EB\u3092\u6DFB\u4ED8",
398
- className: "mb-0.5 text-muted-foreground hover:text-foreground",
399
- children: /* @__PURE__ */ jsx(Paperclip, { className: "size-4", weight: "bold" })
400
- }
401
- ),
402
368
  /* @__PURE__ */ jsx(
403
369
  Textarea,
404
370
  {
@@ -420,7 +386,7 @@ function AgentInput({
420
386
  onClick: handleSend,
421
387
  disabled: !canSend,
422
388
  "aria-label": "\u9001\u4FE1 (\u2318+Enter)",
423
- children: /* @__PURE__ */ jsx(PaperPlaneTilt, { className: "size-5", weight: "fill" })
389
+ children: /* @__PURE__ */ jsx(Send, { className: "size-5" })
424
390
  }
425
391
  )
426
392
  ] })
@@ -491,44 +457,13 @@ function Markdown({ content, className }) {
491
457
  const normalizedContent = normalizeAgentMarkdown(content);
492
458
  return /* @__PURE__ */ jsx("div", { className: cn("text-sm leading-relaxed", className), children: /* @__PURE__ */ jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components, children: normalizedContent }) });
493
459
  }
494
- var defaultStatusLabels = {
495
- pending: "\u5F85\u6A5F\u4E2D",
496
- "awaiting-approval": "\u627F\u8A8D\u5F85\u3061",
497
- executing: "\u5B9F\u884C\u4E2D",
498
- completed: "\u5B8C\u4E86",
499
- error: "\u30A8\u30E9\u30FC"
500
- };
501
- var statusColors = {
502
- pending: "bg-muted text-muted-foreground",
503
- "awaiting-approval": "bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-300",
504
- executing: "bg-primary/10 text-primary",
505
- completed: "bg-green-50 text-green-600 dark:bg-green-950 dark:text-green-400",
506
- error: "bg-destructive/10 text-destructive"
507
- };
508
- function ToolCallCard({
509
- toolCallState,
510
- statusLabels,
511
- parametersLabel = "\u30D1\u30E9\u30E1\u30FC\u30BF",
512
- resultLabel = "\u7D50\u679C\u3092\u8868\u793A"
513
- }) {
514
- const { toolCall, status, result, error } = toolCallState;
515
- const toolLabel = toolCall.toolName;
516
- const mergedStatusLabels = statusLabels ? { ...defaultStatusLabels, ...statusLabels } : defaultStatusLabels;
517
- const statusLabel = mergedStatusLabels[status];
518
- return /* @__PURE__ */ jsxs("div", { className: "rounded-md p-1 mt-3 bg-card", children: [
519
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
520
- /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground", children: toolLabel }),
521
- status === "executing" ? /* @__PURE__ */ jsx("div", { className: "h-3 w-3 animate-spin rounded-full border border-primary border-t-transparent" }) : /* @__PURE__ */ jsx("span", { className: cn("rounded-full px-2 py-0.5 text-[11px]", statusColors[status]), children: statusLabel })
522
- ] }),
523
- /* @__PURE__ */ jsxs("details", { className: "mt-2", children: [
524
- /* @__PURE__ */ jsx("summary", { className: "cursor-pointer text-xs text-muted-foreground", children: parametersLabel }),
525
- /* @__PURE__ */ jsx("pre", { className: "mt-1 ml-4 overflow-x-auto rounded bg-muted p-2 text-xs text-muted-foreground", children: JSON.stringify(toolCall.input, null, 2) })
526
- ] }),
527
- status === "completed" && result !== void 0 && /* @__PURE__ */ jsxs("details", { className: "mt-2", children: [
528
- /* @__PURE__ */ jsx("summary", { className: "cursor-pointer text-xs text-muted-foreground", children: resultLabel }),
529
- /* @__PURE__ */ jsx("pre", { className: "mt-1 ml-4 max-h-40 overflow-auto rounded bg-muted p-2 text-xs text-muted-foreground", children: typeof result === "string" ? result : JSON.stringify(result, null, 2) })
530
- ] }),
531
- status === "error" && error && /* @__PURE__ */ jsx("div", { className: "mt-2 rounded bg-destructive/10 p-2 text-xs text-destructive", children: error })
460
+ function ToolCallGroup({ toolCallStates }) {
461
+ if (toolCallStates.length === 0) return null;
462
+ const isExecuting = toolCallStates.some((s) => s.status === "executing");
463
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
464
+ /* @__PURE__ */ jsx(Wrench, { size: 14, strokeWidth: 1.5, className: "text-muted-foreground/60 shrink-0" }),
465
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground/60", children: toolCallStates.map((s) => s.toolCall.toolName).join(", ") }),
466
+ isExecuting && /* @__PURE__ */ jsx("div", { className: "h-2.5 w-2.5 animate-spin rounded-full border border-muted-foreground/40 border-t-transparent shrink-0" })
532
467
  ] });
533
468
  }
534
469
 
@@ -539,6 +474,20 @@ function extractTextContent(content) {
539
474
  function extractToolCalls(content) {
540
475
  return content.filter((part) => part.type === "tool-call").map((part) => part.toolCall);
541
476
  }
477
+ function extractToolResults(content) {
478
+ return content.filter((part) => part.type === "tool-result").map((part) => part.toolResult);
479
+ }
480
+ function resolveToolCallState(toolCall, pendingToolCalls, toolResults) {
481
+ const pending = pendingToolCalls.find((p) => p.toolCall.toolCallId === toolCall.toolCallId);
482
+ if (pending) return pending;
483
+ const matchingResult = toolResults.find((r) => r.toolCallId === toolCall.toolCallId);
484
+ return {
485
+ toolCall,
486
+ status: matchingResult?.isError ? "error" : "completed",
487
+ result: matchingResult?.result,
488
+ error: matchingResult?.isError ? String(matchingResult.result) : void 0
489
+ };
490
+ }
542
491
  function shouldShowLoadingIndicator({
543
492
  messages,
544
493
  isLoading
@@ -553,60 +502,40 @@ function shouldShowLoadingIndicator({
553
502
  function MessageItem({ message, pendingToolCalls }) {
554
503
  const isUser = message.role === "user";
555
504
  const textContent = extractTextContent(message.content);
505
+ if (isUser) {
506
+ return /* @__PURE__ */ jsx("div", { className: "flex justify-end my-2", children: /* @__PURE__ */ jsx("div", { className: "max-w-3/4", children: /* @__PURE__ */ jsx("div", { className: "rounded-lg bg-muted text-foreground px-3 py-2.5", children: /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap text-sm leading-relaxed", children: textContent }) }) }) });
507
+ }
556
508
  const toolCalls = extractToolCalls(message.content);
557
- if (!isUser && message.isStreaming && !textContent && toolCalls.length === 0) {
509
+ if (message.isStreaming && !textContent && toolCalls.length === 0) {
510
+ return null;
511
+ }
512
+ if (toolCalls.length === 0 && textContent.length === 0) {
558
513
  return null;
559
514
  }
560
- return /* @__PURE__ */ jsx("div", { className: cn("flex", isUser ? "justify-end" : "justify-start"), children: /* @__PURE__ */ jsxs("div", { className: "max-w-3/4 space-y-1.5", children: [
561
- textContent && /* @__PURE__ */ jsx(
562
- "div",
515
+ const toolResults = toolCalls.length > 0 ? extractToolResults(message.content) : [];
516
+ return /* @__PURE__ */ jsx("div", { className: "flex justify-start", children: /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
517
+ textContent.length > 0 && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Markdown, { content: textContent }) }),
518
+ toolCalls.length > 0 && /* @__PURE__ */ jsx(
519
+ ToolCallGroup,
563
520
  {
564
- className: cn(
565
- "rounded-lg px-3 py-2",
566
- isUser ? "bg-muted text-foreground" : "border border-border bg-card text-card-foreground"
567
- ),
568
- children: isUser ? /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap text-sm leading-relaxed", children: textContent }) : /* @__PURE__ */ jsx(Markdown, { content: textContent })
569
- }
570
- ),
571
- !isUser && toolCalls.length > 0 && /* @__PURE__ */ jsx("div", { className: "ml-2 space-y-1.5 border-l-2 border-border pl-2", children: toolCalls.map((tc) => {
572
- const toolCallState = pendingToolCalls.find(
573
- (p) => p.toolCall.toolCallId === tc.toolCallId
574
- );
575
- if (toolCallState) {
576
- return /* @__PURE__ */ jsx(
577
- ToolCallCard,
578
- {
579
- toolCallState
580
- },
581
- tc.toolCallId
582
- );
521
+ toolCallStates: toolCalls.map(
522
+ (tc) => resolveToolCallState(tc, pendingToolCalls, toolResults)
523
+ )
583
524
  }
584
- return null;
585
- }) })
525
+ )
586
526
  ] }) });
587
527
  }
588
- function LoadingDots() {
589
- return /* @__PURE__ */ jsxs("span", { className: "flex gap-0.5", "aria-hidden": "true", children: [
590
- /* @__PURE__ */ jsx("span", { className: "h-0.5 w-0.5 animate-dot-fade rounded-full bg-muted-foreground/50 [animation-delay:0ms]" }),
591
- /* @__PURE__ */ jsx("span", { className: "h-0.5 w-0.5 animate-dot-fade rounded-full bg-muted-foreground/50 [animation-delay:150ms]" }),
592
- /* @__PURE__ */ jsx("span", { className: "h-0.5 w-0.5 animate-dot-fade rounded-full bg-muted-foreground/50 [animation-delay:300ms]" })
593
- ] });
594
- }
595
528
  function MessageLoading({ className }) {
596
- return /* @__PURE__ */ jsx("output", { className: cn("flex justify-start", className), "aria-label": "AI\u5FDC\u7B54\u3092\u5F85\u6A5F\u4E2D", children: /* @__PURE__ */ jsx("div", { className: "max-w-xl", children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-card px-3 py-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
597
- /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "\u8003\u3048\u4E2D" }),
598
- /* @__PURE__ */ jsx(LoadingDots, {})
599
- ] }) }) }) });
529
+ return /* @__PURE__ */ jsxs("output", { className: cn("flex items-center gap-1.5 my-1", className), "aria-label": "AI\u5FDC\u7B54\u3092\u5F85\u6A5F\u4E2D", children: [
530
+ /* @__PURE__ */ jsx("div", { className: "h-3 w-3 animate-spin rounded-full border border-primary border-t-transparent" }),
531
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground leading-1", children: "\u8003\u3048\u4E2D" })
532
+ ] });
600
533
  }
601
- function MessageList({
602
- messages,
603
- pendingToolCalls,
604
- isLoading = false
605
- }) {
534
+ function MessageList({ messages, pendingToolCalls, isLoading = false }) {
606
535
  const bottomRef = useRef(null);
607
536
  useEffect(() => {
608
537
  bottomRef.current?.scrollIntoView({ behavior: "smooth" });
609
- }, [messages, isLoading]);
538
+ }, []);
610
539
  if (messages.length === 0 && !isLoading) {
611
540
  return null;
612
541
  }
@@ -614,15 +543,8 @@ function MessageList({
614
543
  messages,
615
544
  isLoading
616
545
  });
617
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 p-3", children: [
618
- messages.map((message) => /* @__PURE__ */ jsx(
619
- MessageItem,
620
- {
621
- message,
622
- pendingToolCalls
623
- },
624
- message.id
625
- )),
546
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 py-5 px-4", children: [
547
+ messages.map((message) => /* @__PURE__ */ jsx(MessageItem, { message, pendingToolCalls }, message.id)),
626
548
  showLoadingIndicator && /* @__PURE__ */ jsx(MessageLoading, {}),
627
549
  /* @__PURE__ */ jsx("div", { ref: bottomRef })
628
550
  ] });
@@ -739,7 +661,7 @@ function AgentContainerView({
739
661
  "div",
740
662
  {
741
663
  "data-slot": "agent-container",
742
- className: cn("flex h-full w-full flex-col mx-auto max-w-[1120px]", className),
664
+ className: cn("flex h-full w-full flex-col mx-auto max-w-180", className),
743
665
  children: [
744
666
  /* @__PURE__ */ jsxs("div", { ref: historyAreaRef, className: "relative", children: [
745
667
  /* @__PURE__ */ jsx(
@@ -772,24 +694,18 @@ function AgentContainerView({
772
694
  ),
773
695
  error && /* @__PURE__ */ jsx("div", { className: "mx-4 mb-4 rounded-lg bg-red-50 p-3 text-sm text-red-600", children: error })
774
696
  ] }) : /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center justify-center gap-6 bg-background px-4 py-4", children: /* @__PURE__ */ jsx(AgentGreeting, {}) }),
775
- /* @__PURE__ */ jsxs(
776
- "div",
777
- {
778
- className: "fixed bottom-0 left-0 right-0 mx-auto w-full max-w-[1120px] bg-background",
779
- children: [
780
- layoutState.shouldShowInput && /* @__PURE__ */ jsx(AgentInput, { ...inputProps }),
781
- layoutState.shouldShowToolApprovalPanel && /* @__PURE__ */ jsx(
782
- ToolApprovalPanel,
783
- {
784
- activeApprovalRequest,
785
- approveToolCall,
786
- rejectToolCall,
787
- toolApprovalLabels
788
- }
789
- )
790
- ]
791
- }
792
- )
697
+ /* @__PURE__ */ jsxs("div", { className: "fixed bottom-0 left-0 right-0 mx-auto w-full max-w-180 bg-background", children: [
698
+ layoutState.shouldShowInput && /* @__PURE__ */ jsx(AgentInput, { ...inputProps }),
699
+ layoutState.shouldShowToolApprovalPanel && /* @__PURE__ */ jsx(
700
+ ToolApprovalPanel,
701
+ {
702
+ activeApprovalRequest,
703
+ approveToolCall,
704
+ rejectToolCall,
705
+ toolApprovalLabels
706
+ }
707
+ )
708
+ ] })
793
709
  ]
794
710
  }
795
711
  );
@@ -870,12 +786,41 @@ function AgentContainer({ className }) {
870
786
  }
871
787
  );
872
788
  }
789
+ var STORAGE_KEY = "agent_auth_token_v1";
790
+ function saveToken(token) {
791
+ if (typeof window === "undefined") return;
792
+ try {
793
+ window.localStorage.setItem(STORAGE_KEY, token);
794
+ } catch {
795
+ }
796
+ }
797
+ function loadToken() {
798
+ if (typeof window === "undefined") return null;
799
+ try {
800
+ return window.localStorage.getItem(STORAGE_KEY);
801
+ } catch {
802
+ return null;
803
+ }
804
+ }
805
+ function clearToken() {
806
+ if (typeof window === "undefined") return;
807
+ try {
808
+ window.localStorage.removeItem(STORAGE_KEY);
809
+ } catch {
810
+ }
811
+ }
873
812
  function createAgentAuthClient(agentServerUrl) {
874
813
  const baseURL = agentServerUrl.replace(/\/api\/agent\/?$/, "");
875
814
  return createAuthClient({
876
815
  baseURL,
877
816
  basePath: "/api/auth",
878
- plugins: [anonymousClient()]
817
+ plugins: [anonymousClient()],
818
+ fetchOptions: {
819
+ auth: {
820
+ type: "Bearer",
821
+ token: () => loadToken() ?? void 0
822
+ }
823
+ }
879
824
  });
880
825
  }
881
826
 
@@ -891,15 +836,31 @@ function useAgentAuth(agentServerUrl) {
891
836
  let timeoutId;
892
837
  async function init() {
893
838
  try {
894
- const sessionResult = await client.getSession();
839
+ let sessionResult;
840
+ try {
841
+ sessionResult = await client.getSession();
842
+ } catch {
843
+ const cachedToken = loadToken();
844
+ if (cachedToken) {
845
+ tokenRef.current = cachedToken;
846
+ setError(null);
847
+ setIsReady(true);
848
+ return;
849
+ }
850
+ sessionResult = { data: null, error: null };
851
+ }
895
852
  if (cancelled) return;
896
853
  if (sessionResult.data?.session) {
897
- tokenRef.current = sessionResult.data.session.token;
854
+ const token = sessionResult.data.session.token;
855
+ tokenRef.current = token;
856
+ saveToken(token);
898
857
  setUserId(sessionResult.data.user.id);
899
858
  setError(null);
900
859
  setIsReady(true);
901
860
  return;
902
861
  }
862
+ clearToken();
863
+ if (cancelled) return;
903
864
  const signInResult = await client.signIn.anonymous();
904
865
  if (cancelled) return;
905
866
  if (signInResult.error) {
@@ -908,7 +869,9 @@ function useAgentAuth(agentServerUrl) {
908
869
  return;
909
870
  }
910
871
  if (signInResult.data) {
911
- tokenRef.current = signInResult.data.token ?? "";
872
+ const token = signInResult.data.token ?? "";
873
+ tokenRef.current = token;
874
+ if (token) saveToken(token);
912
875
  setUserId(signInResult.data.user?.id ?? null);
913
876
  }
914
877
  setError(null);
@@ -942,6 +905,7 @@ function useAgentAuth(agentServerUrl) {
942
905
  const sessionResult = await client.getSession();
943
906
  if (sessionResult.data?.session?.token) {
944
907
  tokenRef.current = sessionResult.data.session.token;
908
+ saveToken(sessionResult.data.session.token);
945
909
  }
946
910
  } catch {
947
911
  }
@@ -4,18 +4,9 @@
4
4
  :root, :host {
5
5
  --color-red-50: oklch(97.1% 0.013 17.38);
6
6
  --color-red-600: oklch(57.7% 0.245 27.325);
7
- --color-amber-50: oklch(98.7% 0.022 95.277);
8
- --color-amber-300: oklch(87.9% 0.169 91.605);
9
- --color-amber-700: oklch(55.5% 0.163 48.998);
10
- --color-amber-950: oklch(27.9% 0.077 45.635);
11
- --color-green-50: oklch(98.2% 0.018 155.826);
12
- --color-green-400: oklch(79.2% 0.209 151.711);
13
- --color-green-600: oklch(62.7% 0.194 149.214);
14
- --color-green-950: oklch(26.6% 0.065 152.934);
15
7
  --color-white: #fff;
16
8
  --spacing: 0.25rem;
17
9
  --container-sm: 24rem;
18
- --container-xl: 36rem;
19
10
  --text-xs: 0.75rem;
20
11
  --text-xs--line-height: calc(1 / 0.75);
21
12
  --text-sm: 0.875rem;
@@ -87,6 +78,9 @@
87
78
  .my-1\.5 {
88
79
  margin-block: calc(var(--spacing) * 1.5);
89
80
  }
81
+ .my-2 {
82
+ margin-block: calc(var(--spacing) * 2);
83
+ }
90
84
  .my-3 {
91
85
  margin-block: calc(var(--spacing) * 3);
92
86
  }
@@ -105,21 +99,12 @@
105
99
  .mt-3 {
106
100
  margin-top: calc(var(--spacing) * 3);
107
101
  }
108
- .mb-0\.5 {
109
- margin-bottom: calc(var(--spacing) * 0.5);
110
- }
111
102
  .mb-1 {
112
103
  margin-bottom: calc(var(--spacing) * 1);
113
104
  }
114
105
  .mb-4 {
115
106
  margin-bottom: calc(var(--spacing) * 4);
116
107
  }
117
- .ml-2 {
118
- margin-left: calc(var(--spacing) * 2);
119
- }
120
- .ml-4 {
121
- margin-left: calc(var(--spacing) * 4);
122
- }
123
108
  .flex {
124
109
  display: flex;
125
110
  }
@@ -152,8 +137,8 @@
152
137
  width: calc(var(--spacing) * 10);
153
138
  height: calc(var(--spacing) * 10);
154
139
  }
155
- .h-0\.5 {
156
- height: calc(var(--spacing) * 0.5);
140
+ .h-2\.5 {
141
+ height: calc(var(--spacing) * 2.5);
157
142
  }
158
143
  .h-3 {
159
144
  height: calc(var(--spacing) * 3);
@@ -173,9 +158,6 @@
173
158
  .h-full {
174
159
  height: 100%;
175
160
  }
176
- .max-h-40 {
177
- max-height: calc(var(--spacing) * 40);
178
- }
179
161
  .max-h-\[60vh\] {
180
162
  max-height: 60vh;
181
163
  }
@@ -185,8 +167,8 @@
185
167
  .min-h-16 {
186
168
  min-height: calc(var(--spacing) * 16);
187
169
  }
188
- .w-0\.5 {
189
- width: calc(var(--spacing) * 0.5);
170
+ .w-2\.5 {
171
+ width: calc(var(--spacing) * 2.5);
190
172
  }
191
173
  .w-3 {
192
174
  width: calc(var(--spacing) * 3);
@@ -197,15 +179,12 @@
197
179
  .max-w-3\/4 {
198
180
  max-width: calc(3 / 4 * 100%);
199
181
  }
200
- .max-w-\[1120px\] {
201
- max-width: 1120px;
182
+ .max-w-180 {
183
+ max-width: calc(var(--spacing) * 180);
202
184
  }
203
185
  .max-w-sm {
204
186
  max-width: var(--container-sm);
205
187
  }
206
- .max-w-xl {
207
- max-width: var(--container-xl);
208
- }
209
188
  .min-w-full {
210
189
  min-width: 100%;
211
190
  }
@@ -224,9 +203,6 @@
224
203
  .animate-spin {
225
204
  animation: var(--animate-spin);
226
205
  }
227
- .cursor-pointer {
228
- cursor: pointer;
229
- }
230
206
  .resize-none {
231
207
  resize: none;
232
208
  }
@@ -260,9 +236,6 @@
260
236
  .justify-start {
261
237
  justify-content: flex-start;
262
238
  }
263
- .gap-0\.5 {
264
- gap: calc(var(--spacing) * 0.5);
265
- }
266
239
  .gap-1 {
267
240
  gap: calc(var(--spacing) * 1);
268
241
  }
@@ -290,9 +263,6 @@
290
263
  text-overflow: ellipsis;
291
264
  white-space: nowrap;
292
265
  }
293
- .overflow-auto {
294
- overflow: auto;
295
- }
296
266
  .overflow-x-auto {
297
267
  overflow-x: auto;
298
268
  }
@@ -343,6 +313,12 @@
343
313
  .border-input {
344
314
  border-color: var(--input);
345
315
  }
316
+ .border-muted-foreground\/40 {
317
+ border-color: var(--muted-foreground);
318
+ @supports (color: color-mix(in lab, red, red)) {
319
+ border-color: color-mix(in oklab, var(--muted-foreground) 40%, transparent);
320
+ }
321
+ }
346
322
  .border-primary {
347
323
  border-color: var(--primary);
348
324
  }
@@ -352,9 +328,6 @@
352
328
  .border-l-primary {
353
329
  border-left-color: var(--primary);
354
330
  }
355
- .bg-amber-50 {
356
- background-color: var(--color-amber-50);
357
- }
358
331
  .bg-background {
359
332
  background-color: var(--background);
360
333
  }
@@ -376,27 +349,9 @@
376
349
  .bg-destructive {
377
350
  background-color: var(--destructive);
378
351
  }
379
- .bg-destructive\/10 {
380
- background-color: var(--destructive);
381
- @supports (color: color-mix(in lab, red, red)) {
382
- background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
383
- }
384
- }
385
- .bg-foreground {
386
- background-color: var(--foreground);
387
- }
388
- .bg-green-50 {
389
- background-color: var(--color-green-50);
390
- }
391
352
  .bg-muted {
392
353
  background-color: var(--muted);
393
354
  }
394
- .bg-muted-foreground\/50 {
395
- background-color: var(--muted-foreground);
396
- @supports (color: color-mix(in lab, red, red)) {
397
- background-color: color-mix(in oklab, var(--muted-foreground) 50%, transparent);
398
- }
399
- }
400
355
  .bg-muted\/50 {
401
356
  background-color: var(--muted);
402
357
  @supports (color: color-mix(in lab, red, red)) {
@@ -415,12 +370,6 @@
415
370
  background-color: color-mix(in oklab, var(--primary) 5%, transparent);
416
371
  }
417
372
  }
418
- .bg-primary\/10 {
419
- background-color: var(--primary);
420
- @supports (color: color-mix(in lab, red, red)) {
421
- background-color: color-mix(in oklab, var(--primary) 10%, transparent);
422
- }
423
- }
424
373
  .bg-red-50 {
425
374
  background-color: var(--color-red-50);
426
375
  }
@@ -475,6 +424,9 @@
475
424
  .py-4 {
476
425
  padding-block: calc(var(--spacing) * 4);
477
426
  }
427
+ .py-5 {
428
+ padding-block: calc(var(--spacing) * 5);
429
+ }
478
430
  .pt-1 {
479
431
  padding-top: calc(var(--spacing) * 1);
480
432
  }
@@ -487,9 +439,6 @@
487
439
  .pb-\[97px\] {
488
440
  padding-bottom: 97px;
489
441
  }
490
- .pl-2 {
491
- padding-left: calc(var(--spacing) * 2);
492
- }
493
442
  .pl-3 {
494
443
  padding-left: calc(var(--spacing) * 3);
495
444
  }
@@ -515,8 +464,9 @@
515
464
  font-size: var(--text-xs);
516
465
  line-height: var(--tw-leading, var(--text-xs--line-height));
517
466
  }
518
- .text-\[11px\] {
519
- font-size: 11px;
467
+ .leading-1 {
468
+ --tw-leading: calc(var(--spacing) * 1);
469
+ line-height: calc(var(--spacing) * 1);
520
470
  }
521
471
  .leading-relaxed {
522
472
  --tw-leading: var(--leading-relaxed);
@@ -547,27 +497,21 @@
547
497
  .whitespace-pre-wrap {
548
498
  white-space: pre-wrap;
549
499
  }
550
- .text-amber-700 {
551
- color: var(--color-amber-700);
552
- }
553
- .text-background {
554
- color: var(--background);
555
- }
556
500
  .text-card-foreground {
557
501
  color: var(--card-foreground);
558
502
  }
559
- .text-destructive {
560
- color: var(--destructive);
561
- }
562
503
  .text-foreground {
563
504
  color: var(--foreground);
564
505
  }
565
- .text-green-600 {
566
- color: var(--color-green-600);
567
- }
568
506
  .text-muted-foreground {
569
507
  color: var(--muted-foreground);
570
508
  }
509
+ .text-muted-foreground\/60 {
510
+ color: var(--muted-foreground);
511
+ @supports (color: color-mix(in lab, red, red)) {
512
+ color: color-mix(in oklab, var(--muted-foreground) 60%, transparent);
513
+ }
514
+ }
571
515
  .text-primary {
572
516
  color: var(--primary);
573
517
  }
@@ -635,15 +579,6 @@
635
579
  --tw-outline-style: none;
636
580
  outline-style: none;
637
581
  }
638
- .\[animation-delay\:0ms\] {
639
- animation-delay: 0ms;
640
- }
641
- .\[animation-delay\:150ms\] {
642
- animation-delay: 150ms;
643
- }
644
- .\[animation-delay\:300ms\] {
645
- animation-delay: 300ms;
646
- }
647
582
  .\[publish\:check-auth\] {
648
583
  publish: check-auth;
649
584
  }
@@ -679,16 +614,6 @@
679
614
  }
680
615
  }
681
616
  }
682
- .hover\:bg-foreground\/90 {
683
- &:hover {
684
- @media (hover: hover) {
685
- background-color: var(--foreground);
686
- @supports (color: color-mix(in lab, red, red)) {
687
- background-color: color-mix(in oklab, var(--foreground) 90%, transparent);
688
- }
689
- }
690
- }
691
- }
692
617
  .hover\:bg-muted {
693
618
  &:hover {
694
619
  @media (hover: hover) {
@@ -733,13 +658,6 @@
733
658
  }
734
659
  }
735
660
  }
736
- .hover\:text-foreground {
737
- &:hover {
738
- @media (hover: hover) {
739
- color: var(--foreground);
740
- }
741
- }
742
- }
743
661
  .hover\:text-primary\/80 {
744
662
  &:hover {
745
663
  @media (hover: hover) {
@@ -855,11 +773,6 @@
855
773
  border-color: var(--input);
856
774
  }
857
775
  }
858
- .dark\:bg-amber-950 {
859
- @media (prefers-color-scheme: dark) {
860
- background-color: var(--color-amber-950);
861
- }
862
- }
863
776
  .dark\:bg-destructive\/60 {
864
777
  @media (prefers-color-scheme: dark) {
865
778
  background-color: var(--destructive);
@@ -868,11 +781,6 @@
868
781
  }
869
782
  }
870
783
  }
871
- .dark\:bg-green-950 {
872
- @media (prefers-color-scheme: dark) {
873
- background-color: var(--color-green-950);
874
- }
875
- }
876
784
  .dark\:bg-input\/30 {
877
785
  @media (prefers-color-scheme: dark) {
878
786
  background-color: var(--input);
@@ -881,16 +789,6 @@
881
789
  }
882
790
  }
883
791
  }
884
- .dark\:text-amber-300 {
885
- @media (prefers-color-scheme: dark) {
886
- color: var(--color-amber-300);
887
- }
888
- }
889
- .dark\:text-green-400 {
890
- @media (prefers-color-scheme: dark) {
891
- color: var(--color-green-400);
892
- }
893
- }
894
792
  .dark\:hover\:bg-accent\/50 {
895
793
  @media (prefers-color-scheme: dark) {
896
794
  &:hover {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-platform/ui",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -25,7 +25,6 @@
25
25
  "access": "public"
26
26
  },
27
27
  "peerDependencies": {
28
- "@phosphor-icons/react": "^2.1.0",
29
28
  "react": "^19.0.0",
30
29
  "react-dom": "^19.0.0"
31
30
  },
@@ -33,13 +32,13 @@
33
32
  "better-auth": "^1.4.20",
34
33
  "class-variance-authority": "^0.7.1",
35
34
  "clsx": "^2.1.1",
35
+ "lucide-react": "^0.574.0",
36
36
  "radix-ui": "^1.4.3",
37
37
  "react-markdown": "^10.1.0",
38
38
  "remark-gfm": "^4.0.1",
39
39
  "tailwind-merge": "^3.4.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@phosphor-icons/react": "^2.1.10",
43
42
  "@tailwindcss/cli": "^4",
44
43
  "@types/react": "^19",
45
44
  "@types/react-dom": "^19",