@reforma/components 0.3.2 → 0.4.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.
Files changed (92) hide show
  1. package/dist/Composer/parts.d.ts +1 -1
  2. package/dist/Composer/parts.d.ts.map +1 -1
  3. package/dist/Composer/parts.js +102 -98
  4. package/dist/Composer/parts.js.map +1 -1
  5. package/dist/Composer/reforma/Composer.module.css +1 -1
  6. package/dist/Composer/reforma/Composer.module.css.js +24 -22
  7. package/dist/Composer/reforma/Composer.module.css.js.map +1 -1
  8. package/dist/Composer/types.d.ts +1 -1
  9. package/dist/Composer/types.d.ts.map +1 -1
  10. package/dist/Modal/Modal.d.ts +2 -2
  11. package/dist/Modal/Modal.d.ts.map +1 -1
  12. package/dist/Modal/Modal.js +6 -3
  13. package/dist/Modal/Modal.js.map +1 -1
  14. package/dist/SettingsLayout/SettingsLayout.d.ts +1 -0
  15. package/dist/SettingsLayout/SettingsLayout.d.ts.map +1 -1
  16. package/dist/SettingsLayout/SettingsLayout.js +332 -292
  17. package/dist/SettingsLayout/SettingsLayout.js.map +1 -1
  18. package/dist/SettingsLayout/SettingsLayout.module.css +1 -1
  19. package/dist/SettingsLayout/SettingsLayout.module.css.js +20 -18
  20. package/dist/SettingsLayout/SettingsLayout.module.css.js.map +1 -1
  21. package/dist/chat/Attachment/Attachment.d.ts.map +1 -1
  22. package/dist/chat/Attachment/Attachment.js +14 -16
  23. package/dist/chat/Attachment/Attachment.js.map +1 -1
  24. package/dist/chat/Attachment/Attachment.module.css +1 -1
  25. package/dist/chat/Message/turn/MessageAssistantBody.d.ts.map +1 -1
  26. package/dist/chat/Message/turn/MessageAssistantBody.js +53 -40
  27. package/dist/chat/Message/turn/MessageAssistantBody.js.map +1 -1
  28. package/dist/chat/Tool/Tool.d.ts.map +1 -1
  29. package/dist/chat/Tool/Tool.js +77 -75
  30. package/dist/chat/Tool/Tool.js.map +1 -1
  31. package/dist/chat/Tool/agent/AgentTool.d.ts.map +1 -1
  32. package/dist/chat/Tool/agent/AgentTool.js +18 -17
  33. package/dist/chat/Tool/agent/AgentTool.js.map +1 -1
  34. package/dist/chat/Tool/check-page/CheckPageTool.d.ts +4 -0
  35. package/dist/chat/Tool/check-page/CheckPageTool.d.ts.map +1 -0
  36. package/dist/chat/Tool/check-page/CheckPageTool.js +75 -0
  37. package/dist/chat/Tool/check-page/CheckPageTool.js.map +1 -0
  38. package/dist/chat/Tool/check-page/index.d.ts +2 -0
  39. package/dist/chat/Tool/check-page/index.d.ts.map +1 -0
  40. package/dist/chat/Tool/check-page/index.js +5 -0
  41. package/dist/chat/Tool/check-page/index.js.map +1 -0
  42. package/dist/index.js +156 -155
  43. package/dist/modals/ConfirmModal.d.ts +2 -0
  44. package/dist/modals/ConfirmModal.d.ts.map +1 -1
  45. package/dist/modals/ConfirmModal.js +88 -60
  46. package/dist/modals/ConfirmModal.js.map +1 -1
  47. package/dist/modals/index.d.ts +1 -1
  48. package/dist/modals/index.d.ts.map +1 -1
  49. package/dist/modals/index.js +2 -1
  50. package/package.json +5 -13
  51. package/dist/node_modules/clsx/dist/clsx.js +0 -18
  52. package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
  53. package/dist/node_modules/react-aria/dist/private/interactions/useFocusable.js +0 -17
  54. package/dist/node_modules/react-aria/dist/private/interactions/useFocusable.js.map +0 -1
  55. package/dist/node_modules/react-aria/dist/private/utils/useObjectRef.js +0 -34
  56. package/dist/node_modules/react-aria/dist/private/utils/useObjectRef.js.map +0 -1
  57. package/dist/node_modules/zod/v4/classic/errors.js +0 -38
  58. package/dist/node_modules/zod/v4/classic/errors.js.map +0 -1
  59. package/dist/node_modules/zod/v4/classic/parse.js +0 -21
  60. package/dist/node_modules/zod/v4/classic/parse.js.map +0 -1
  61. package/dist/node_modules/zod/v4/classic/schemas.js +0 -822
  62. package/dist/node_modules/zod/v4/classic/schemas.js.map +0 -1
  63. package/dist/node_modules/zod/v4/core/api.js +0 -561
  64. package/dist/node_modules/zod/v4/core/api.js.map +0 -1
  65. package/dist/node_modules/zod/v4/core/checks.js +0 -262
  66. package/dist/node_modules/zod/v4/core/checks.js.map +0 -1
  67. package/dist/node_modules/zod/v4/core/core.js +0 -97
  68. package/dist/node_modules/zod/v4/core/core.js.map +0 -1
  69. package/dist/node_modules/zod/v4/core/doc.js +0 -35
  70. package/dist/node_modules/zod/v4/core/doc.js.map +0 -1
  71. package/dist/node_modules/zod/v4/core/errors.js +0 -79
  72. package/dist/node_modules/zod/v4/core/errors.js.map +0 -1
  73. package/dist/node_modules/zod/v4/core/json-schema-processors.js +0 -308
  74. package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +0 -1
  75. package/dist/node_modules/zod/v4/core/memoizer.js +0 -203
  76. package/dist/node_modules/zod/v4/core/memoizer.js.map +0 -1
  77. package/dist/node_modules/zod/v4/core/parse.js +0 -113
  78. package/dist/node_modules/zod/v4/core/parse.js.map +0 -1
  79. package/dist/node_modules/zod/v4/core/regexes.js +0 -59
  80. package/dist/node_modules/zod/v4/core/regexes.js.map +0 -1
  81. package/dist/node_modules/zod/v4/core/registries.js +0 -41
  82. package/dist/node_modules/zod/v4/core/registries.js.map +0 -1
  83. package/dist/node_modules/zod/v4/core/schemas.js +0 -1104
  84. package/dist/node_modules/zod/v4/core/schemas.js.map +0 -1
  85. package/dist/node_modules/zod/v4/core/to-json-schema.js +0 -380
  86. package/dist/node_modules/zod/v4/core/to-json-schema.js.map +0 -1
  87. package/dist/node_modules/zod/v4/core/util.js +0 -465
  88. package/dist/node_modules/zod/v4/core/util.js.map +0 -1
  89. package/dist/node_modules/zod/v4/core/versions.js +0 -9
  90. package/dist/node_modules/zod/v4/core/versions.js.map +0 -1
  91. package/dist/node_modules/zod/v4/locales/en.js +0 -97
  92. package/dist/node_modules/zod/v4/locales/en.js.map +0 -1
@@ -1,16 +1,16 @@
1
1
  import { ChevronDown as A } from "@reforma/icons/8";
2
2
  import { cn as C } from "@reforma/lib";
3
- import { observer as P } from "mobx-react-lite";
4
- import { Button as T } from "../../../Button/Button.js";
5
- import { Collapsible as F, CollapsibleContent as y, useCollapsible as L, CollapsibleTrigger as M } from "../../../Collapsible/Collapsible.js";
6
- import { For as N } from "../../../For/For.js";
7
- import { Show as x } from "../../../Show/Show.js";
3
+ import { observer as T } from "mobx-react-lite";
4
+ import { Button as F } from "../../../Button/Button.js";
5
+ import { Collapsible as y, useCollapsible as P, CollapsibleTrigger as L, CollapsibleContent as M } from "../../../Collapsible/Collapsible.js";
6
+ import { For as W } from "../../../For/For.js";
7
+ import { Show as w } from "../../../Show/Show.js";
8
8
  import { ConversationPendingLoader as S } from "../../Conversation/ConversationPendingLoader.js";
9
- import { streamingPhaseActiveIndex as W, partsFromSegmentGroups as j } from "../normalize/normalizeMessageParts.js";
9
+ import { streamingPhaseActiveIndex as N, partsFromSegmentGroups as j } from "../normalize/normalizeMessageParts.js";
10
10
  import { MessagePhaseSection as B } from "../segments/MessagePhaseSection.js";
11
11
  import v from "./Message.module.css.js";
12
- import { useMessageTurn as $ } from "./messageTurnContext.js";
13
- import { splitFinishedWork as D, workedForLabel as E } from "./workedCollapse.js";
12
+ import { useMessageTurn as E } from "./messageTurnContext.js";
13
+ import { splitFinishedWork as $, workedForLabel as D } from "./workedCollapse.js";
14
14
  import { jsx as r, jsxs as d, Fragment as b } from "react/jsx-runtime";
15
15
  function G(t) {
16
16
  const e = [];
@@ -32,27 +32,27 @@ function k({
32
32
  phaseActiveIndex: u,
33
33
  getPhaseStats: o,
34
34
  lastPart: p,
35
- loaderParts: g,
35
+ loaderParts: f,
36
36
  markTail: a
37
37
  }) {
38
- return /* @__PURE__ */ r(N, {
38
+ return /* @__PURE__ */ r(W, {
39
39
  each: t,
40
- children: (i, m, {
41
- isLast: f
40
+ children: (i, c, {
41
+ isLast: g
42
42
  }) => {
43
- const c = a && f;
43
+ const m = a && g;
44
44
  return /* @__PURE__ */ r(B, {
45
45
  segment: i,
46
46
  messageId: e,
47
47
  isStreaming: s,
48
48
  isLiveMessage: n,
49
- isLastSegment: c,
50
- streamActive: l && (c || m === u),
49
+ isLastSegment: m,
50
+ streamActive: l && (m || c === u),
51
51
  fileStats: i.layout === "grouped" ? o?.(j(i.groups)) : void 0,
52
- children: c && s ? /* @__PURE__ */ r(S, {
52
+ children: m && s ? /* @__PURE__ */ r(S, {
53
53
  lastPart: p,
54
54
  messageId: e,
55
- parts: g
55
+ parts: f
56
56
  }) : null
57
57
  }, `${e}-${i.index}`);
58
58
  }
@@ -63,10 +63,10 @@ function I({
63
63
  }) {
64
64
  const {
65
65
  state: e
66
- } = L();
67
- return /* @__PURE__ */ r(M, {
66
+ } = P();
67
+ return /* @__PURE__ */ r(L, {
68
68
  asChild: !0,
69
- children: /* @__PURE__ */ d(T, {
69
+ children: /* @__PURE__ */ d(F, {
70
70
  type: "button",
71
71
  variant: "inline",
72
72
  color: "secondary",
@@ -80,24 +80,37 @@ function I({
80
80
  });
81
81
  }
82
82
  function O({
83
+ children: t
84
+ }) {
85
+ const {
86
+ state: e
87
+ } = P();
88
+ return /* @__PURE__ */ r(w, {
89
+ when: e.isExpanded,
90
+ children: /* @__PURE__ */ r(M, {
91
+ className: v.workedPanel,
92
+ children: t
93
+ })
94
+ });
95
+ }
96
+ function R({
83
97
  label: t,
84
98
  children: e
85
99
  }) {
86
- return /* @__PURE__ */ d(F, {
100
+ return /* @__PURE__ */ d(y, {
87
101
  className: v.worked,
88
102
  defaultOpen: !1,
89
103
  children: [/* @__PURE__ */ r(I, {
90
104
  label: t
91
- }), /* @__PURE__ */ r(y, {
92
- className: v.workedPanel,
105
+ }), /* @__PURE__ */ r(O, {
93
106
  children: e
94
107
  })]
95
108
  });
96
109
  }
97
- const re = P(({
110
+ const te = T(({
98
111
  hideSources: t = !1
99
112
  } = {}) => {
100
- const e = $();
113
+ const e = E();
101
114
  if (e?.role !== "assistant" || e.message.role !== "assistant")
102
115
  return null;
103
116
  const {
@@ -107,31 +120,31 @@ const re = P(({
107
120
  turnActive: u,
108
121
  isStreaming: o,
109
122
  isLastMessage: p,
110
- getPhaseStats: g
111
- } = e, a = t ? G(n) : n, i = e.message.parts, m = e.message.metadata;
123
+ getPhaseStats: f
124
+ } = e, a = t ? G(n) : n, i = e.message.parts, c = e.message.metadata;
112
125
  if (a.length === 0 && !o)
113
126
  return null;
114
- const f = W(a, o), c = D(a, {
127
+ const g = N(a, o), m = $(a, {
115
128
  streaming: o,
116
- cancelled: m?.stopReason === "cancelled"
129
+ cancelled: c?.stopReason === "cancelled"
117
130
  }), h = {
118
131
  messageId: s,
119
132
  isStreaming: o,
120
133
  isLiveMessage: p,
121
134
  turnActive: u,
122
- phaseActiveIndex: f,
123
- getPhaseStats: g,
135
+ phaseActiveIndex: g,
136
+ getPhaseStats: f,
124
137
  lastPart: l,
125
138
  loaderParts: i
126
139
  };
127
- return /* @__PURE__ */ r(x, {
128
- when: c,
140
+ return /* @__PURE__ */ r(w, {
141
+ when: m,
129
142
  fallback: /* @__PURE__ */ d(b, {
130
143
  children: [/* @__PURE__ */ r(k, {
131
144
  ...h,
132
145
  segments: a,
133
146
  markTail: !0
134
- }), /* @__PURE__ */ r(x, {
147
+ }), /* @__PURE__ */ r(w, {
135
148
  when: o && a.length === 0,
136
149
  children: /* @__PURE__ */ r(S, {
137
150
  lastPart: l,
@@ -140,23 +153,23 @@ const re = P(({
140
153
  })
141
154
  })]
142
155
  }),
143
- children: (w) => /* @__PURE__ */ d(b, {
144
- children: [/* @__PURE__ */ r(O, {
145
- label: E(m?.startedAt, m?.endedAt),
156
+ children: (x) => /* @__PURE__ */ d(b, {
157
+ children: [/* @__PURE__ */ r(R, {
158
+ label: D(c?.startedAt, c?.endedAt),
146
159
  children: /* @__PURE__ */ r(k, {
147
160
  ...h,
148
- segments: w.work,
161
+ segments: x.work,
149
162
  markTail: !1
150
163
  })
151
164
  }), /* @__PURE__ */ r(k, {
152
165
  ...h,
153
- segments: [w.answer],
166
+ segments: [x.answer],
154
167
  markTail: !0
155
168
  })]
156
169
  })
157
170
  });
158
171
  });
159
172
  export {
160
- re as MessageAssistantBody
173
+ te as MessageAssistantBody
161
174
  };
162
175
  //# sourceMappingURL=MessageAssistantBody.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageAssistantBody.js","sources":["../../../../src/chat/Message/turn/MessageAssistantBody.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDown } from '@reforma/icons/8';\nimport { cn } from '@reforma/lib';\nimport { observer } from 'mobx-react-lite';\n\nimport { Button } from '../../../Button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n useCollapsible,\n} from '../../../Collapsible';\nimport { For } from '../../../For';\nimport { Show } from '../../../Show';\nimport { ConversationPendingLoader } from '../../Conversation/ConversationPendingLoader';\nimport { partsFromSegmentGroups, streamingPhaseActiveIndex } from '../normalize/normalizeMessageParts';\nimport { MessagePhaseSection } from '../segments';\nimport styles from './Message.module.css';\nimport { useMessageTurn } from './messageTurnContext';\nimport { splitFinishedWork, workedForLabel } from './workedCollapse';\n\nimport type { ReactNode } from 'react';\nimport type { MessageSegment } from '../normalize/normalizeMessageParts';\nimport type { ReformaUIMessagePart } from '../types';\nimport type { GetPhaseStats } from './messageTurnContext';\n\nfunction segmentsWithoutSources(segments: readonly MessageSegment[]): MessageSegment[] {\n const next: MessageSegment[] = [];\n\n for (const segment of segments) {\n const groups = segment.groups.filter(group => group.kind !== 'sources');\n\n if (groups.length > 0) {\n next.push({ ...segment, groups });\n }\n }\n\n return next;\n}\n\ntype SegmentListProps = {\n segments: readonly MessageSegment[];\n messageId: string;\n isStreaming: boolean;\n isLiveMessage: boolean;\n turnActive: boolean;\n phaseActiveIndex: number;\n getPhaseStats: GetPhaseStats | undefined;\n lastPart: ReformaUIMessagePart | undefined;\n loaderParts: readonly ReformaUIMessagePart[];\n /** Work under the spoiler is not the message tail, so its phases stay closed. */\n markTail: boolean;\n};\n\nfunction AssistantSegments({\n segments,\n messageId,\n isStreaming,\n isLiveMessage,\n turnActive,\n phaseActiveIndex,\n getPhaseStats,\n lastPart,\n loaderParts,\n markTail,\n}: SegmentListProps) {\n return (\n <For each={ segments }>\n { (segment, segIndex, { isLast }) => {\n const isLastSegment = markTail && isLast;\n\n return (\n <MessagePhaseSection\n key={ `${ messageId }-${ segment.index }` }\n segment={ segment }\n messageId={ messageId }\n isStreaming={ isStreaming }\n isLiveMessage={ isLiveMessage }\n isLastSegment={ isLastSegment }\n streamActive={ turnActive && (isLastSegment || segIndex === phaseActiveIndex) }\n fileStats={\n segment.layout === 'grouped'\n ? getPhaseStats?.(partsFromSegmentGroups(segment.groups))\n : undefined\n }\n >\n { isLastSegment && isStreaming\n ? (\n <ConversationPendingLoader\n lastPart={ lastPart }\n messageId={ messageId }\n parts={ loaderParts }\n />\n )\n : null }\n </MessagePhaseSection>\n );\n } }\n </For>\n );\n}\n\nfunction WorkedTrigger({ label }: { label: string }) {\n const { state } = useCollapsible();\n\n return (\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"inline\"\n color=\"secondary\"\n className={ styles.workedTrigger }\n >\n { label }\n <ChevronDown\n className={ cn('chevron', 'next') }\n aria-expanded={ state.isExpanded }\n aria-hidden\n />\n </Button>\n </CollapsibleTrigger>\n );\n}\n\nfunction WorkedFor({ label, children }: { label: string; children: ReactNode }) {\n return (\n <Collapsible className={ styles.worked } defaultOpen={ false }>\n <WorkedTrigger label={ label } />\n <CollapsibleContent className={ styles.workedPanel }>\n { children }\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n/**\n * Assistant turn segments and streaming pending loader.\n * A finished text answer folds the work into one \"Worked for …\" disclosure.\n * Cancelled turns and turns that do not end on text keep the phase rows open.\n */\nexport const MessageAssistantBody = observer(({\n hideSources = false,\n}: {\n /** Editor footer owns citations — drop in-body Sources groups. */\n hideSources?: boolean;\n} = {}) => {\n const turn = useMessageTurn();\n\n if (turn?.role !== 'assistant' || turn.message.role !== 'assistant') {\n return null;\n }\n\n const {\n messageId,\n segments: rawSegments,\n lastPart,\n turnActive,\n isStreaming,\n isLastMessage,\n getPhaseStats,\n } = turn;\n const segments = hideSources ? segmentsWithoutSources(rawSegments) : rawSegments;\n const loaderParts = turn.message.parts;\n const metadata = turn.message.metadata;\n\n if (segments.length === 0 && !isStreaming) {\n return null;\n }\n\n const phaseActiveIndex = streamingPhaseActiveIndex(segments, isStreaming);\n const finished = splitFinishedWork(segments, {\n streaming: isStreaming,\n cancelled: metadata?.stopReason === 'cancelled',\n });\n const listProps = {\n messageId,\n isStreaming,\n isLiveMessage: isLastMessage,\n turnActive,\n phaseActiveIndex,\n getPhaseStats,\n lastPart,\n loaderParts,\n };\n\n return (\n <Show\n when={ finished }\n fallback={ (\n <>\n <AssistantSegments\n { ...listProps }\n segments={ segments }\n markTail\n />\n <Show when={ isStreaming && segments.length === 0 }>\n <ConversationPendingLoader\n lastPart={ lastPart }\n messageId={ messageId }\n parts={ loaderParts }\n />\n </Show>\n </>\n ) }\n >\n { split => (\n <>\n <WorkedFor label={ workedForLabel(metadata?.startedAt, metadata?.endedAt) }>\n <AssistantSegments\n { ...listProps }\n segments={ split.work }\n markTail={ false }\n />\n </WorkedFor>\n <AssistantSegments\n { ...listProps }\n segments={ [split.answer] }\n markTail\n />\n </>\n ) }\n </Show>\n );\n});\n"],"names":["segmentsWithoutSources","segments","next","segment","groups","group","AssistantSegments","messageId","isStreaming","isLiveMessage","turnActive","phaseActiveIndex","getPhaseStats","lastPart","loaderParts","markTail","For","segIndex","isLast","isLastSegment","MessagePhaseSection","partsFromSegmentGroups","_jsx","ConversationPendingLoader","WorkedTrigger","label","state","useCollapsible","CollapsibleTrigger","Button","styles","ChevronDown","cn","WorkedFor","children","Collapsible","CollapsibleContent","MessageAssistantBody","observer","hideSources","turn","useMessageTurn","rawSegments","isLastMessage","metadata","streamingPhaseActiveIndex","finished","splitFinishedWork","listProps","Show","_Fragment","split","_jsxs","workedForLabel"],"mappings":"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"}
1
+ {"version":3,"file":"MessageAssistantBody.js","sources":["../../../../src/chat/Message/turn/MessageAssistantBody.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDown } from '@reforma/icons/8';\nimport { cn } from '@reforma/lib';\nimport { observer } from 'mobx-react-lite';\n\nimport { Button } from '../../../Button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n useCollapsible,\n} from '../../../Collapsible';\nimport { For } from '../../../For';\nimport { Show } from '../../../Show';\nimport { ConversationPendingLoader } from '../../Conversation/ConversationPendingLoader';\nimport { partsFromSegmentGroups, streamingPhaseActiveIndex } from '../normalize/normalizeMessageParts';\nimport { MessagePhaseSection } from '../segments';\nimport styles from './Message.module.css';\nimport { useMessageTurn } from './messageTurnContext';\nimport { splitFinishedWork, workedForLabel } from './workedCollapse';\n\nimport type { ReactNode } from 'react';\nimport type { MessageSegment } from '../normalize/normalizeMessageParts';\nimport type { ReformaUIMessagePart } from '../types';\nimport type { GetPhaseStats } from './messageTurnContext';\n\nfunction segmentsWithoutSources(segments: readonly MessageSegment[]): MessageSegment[] {\n const next: MessageSegment[] = [];\n\n for (const segment of segments) {\n const groups = segment.groups.filter(group => group.kind !== 'sources');\n\n if (groups.length > 0) {\n next.push({ ...segment, groups });\n }\n }\n\n return next;\n}\n\ntype SegmentListProps = {\n segments: readonly MessageSegment[];\n messageId: string;\n isStreaming: boolean;\n isLiveMessage: boolean;\n turnActive: boolean;\n phaseActiveIndex: number;\n getPhaseStats: GetPhaseStats | undefined;\n lastPart: ReformaUIMessagePart | undefined;\n loaderParts: readonly ReformaUIMessagePart[];\n /** Work under the spoiler is not the message tail, so its phases stay closed. */\n markTail: boolean;\n};\n\nfunction AssistantSegments({\n segments,\n messageId,\n isStreaming,\n isLiveMessage,\n turnActive,\n phaseActiveIndex,\n getPhaseStats,\n lastPart,\n loaderParts,\n markTail,\n}: SegmentListProps) {\n return (\n <For each={ segments }>\n { (segment, segIndex, { isLast }) => {\n const isLastSegment = markTail && isLast;\n\n return (\n <MessagePhaseSection\n key={ `${ messageId }-${ segment.index }` }\n segment={ segment }\n messageId={ messageId }\n isStreaming={ isStreaming }\n isLiveMessage={ isLiveMessage }\n isLastSegment={ isLastSegment }\n streamActive={ turnActive && (isLastSegment || segIndex === phaseActiveIndex) }\n fileStats={\n segment.layout === 'grouped'\n ? getPhaseStats?.(partsFromSegmentGroups(segment.groups))\n : undefined\n }\n >\n { isLastSegment && isStreaming\n ? (\n <ConversationPendingLoader\n lastPart={ lastPart }\n messageId={ messageId }\n parts={ loaderParts }\n />\n )\n : null }\n </MessagePhaseSection>\n );\n } }\n </For>\n );\n}\n\nfunction WorkedTrigger({ label }: { label: string }) {\n const { state } = useCollapsible();\n\n return (\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"inline\"\n color=\"secondary\"\n className={ styles.workedTrigger }\n >\n { label }\n <ChevronDown\n className={ cn('chevron', 'next') }\n aria-expanded={ state.isExpanded }\n aria-hidden\n />\n </Button>\n </CollapsibleTrigger>\n );\n}\n\n/** Closed panel stays out of the DOM. `hidden=until-found` is still a flex item and keeps `.worked`'s gap. */\nfunction WorkedPanel({ children }: { children: ReactNode }) {\n const { state } = useCollapsible();\n\n return (\n <Show when={ state.isExpanded }>\n <CollapsibleContent className={ styles.workedPanel }>\n { children }\n </CollapsibleContent>\n </Show>\n );\n}\n\nfunction WorkedFor({ label, children }: { label: string; children: ReactNode }) {\n return (\n <Collapsible className={ styles.worked } defaultOpen={ false }>\n <WorkedTrigger label={ label } />\n <WorkedPanel>{ children }</WorkedPanel>\n </Collapsible>\n );\n}\n\n/**\n * Assistant turn segments and streaming pending loader.\n * A finished text answer folds the work into one \"Worked for …\" disclosure.\n * Cancelled turns and turns that do not end on text keep the phase rows open.\n */\nexport const MessageAssistantBody = observer(({\n hideSources = false,\n}: {\n /** Editor footer owns citations — drop in-body Sources groups. */\n hideSources?: boolean;\n} = {}) => {\n const turn = useMessageTurn();\n\n if (turn?.role !== 'assistant' || turn.message.role !== 'assistant') {\n return null;\n }\n\n const {\n messageId,\n segments: rawSegments,\n lastPart,\n turnActive,\n isStreaming,\n isLastMessage,\n getPhaseStats,\n } = turn;\n const segments = hideSources ? segmentsWithoutSources(rawSegments) : rawSegments;\n const loaderParts = turn.message.parts;\n const metadata = turn.message.metadata;\n\n if (segments.length === 0 && !isStreaming) {\n return null;\n }\n\n const phaseActiveIndex = streamingPhaseActiveIndex(segments, isStreaming);\n const finished = splitFinishedWork(segments, {\n streaming: isStreaming,\n cancelled: metadata?.stopReason === 'cancelled',\n });\n const listProps = {\n messageId,\n isStreaming,\n isLiveMessage: isLastMessage,\n turnActive,\n phaseActiveIndex,\n getPhaseStats,\n lastPart,\n loaderParts,\n };\n\n return (\n <Show\n when={ finished }\n fallback={ (\n <>\n <AssistantSegments\n { ...listProps }\n segments={ segments }\n markTail\n />\n <Show when={ isStreaming && segments.length === 0 }>\n <ConversationPendingLoader\n lastPart={ lastPart }\n messageId={ messageId }\n parts={ loaderParts }\n />\n </Show>\n </>\n ) }\n >\n { split => (\n <>\n <WorkedFor label={ workedForLabel(metadata?.startedAt, metadata?.endedAt) }>\n <AssistantSegments\n { ...listProps }\n segments={ split.work }\n markTail={ false }\n />\n </WorkedFor>\n <AssistantSegments\n { ...listProps }\n segments={ [split.answer] }\n markTail\n />\n </>\n ) }\n </Show>\n );\n});\n"],"names":["segmentsWithoutSources","segments","next","segment","groups","group","AssistantSegments","messageId","isStreaming","isLiveMessage","turnActive","phaseActiveIndex","getPhaseStats","lastPart","loaderParts","markTail","For","segIndex","isLast","isLastSegment","MessagePhaseSection","partsFromSegmentGroups","_jsx","ConversationPendingLoader","WorkedTrigger","label","state","useCollapsible","CollapsibleTrigger","Button","styles","ChevronDown","cn","WorkedPanel","children","Show","CollapsibleContent","WorkedFor","Collapsible","MessageAssistantBody","observer","hideSources","turn","useMessageTurn","rawSegments","isLastMessage","metadata","streamingPhaseActiveIndex","finished","splitFinishedWork","listProps","_Fragment","split","_jsxs","workedForLabel"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../../src/chat/Tool/Tool.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAoDjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,CAexE;AAgBD,qGAAqG;AACrG,wBAAgB,IAAI,CAAC,EACjB,IAAI,EACJ,sBAAsB,EACtB,YAAY,EACZ,UAAU,GACb,EAAE,iBAAiB,sCAoBnB"}
1
+ {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../../src/chat/Tool/Tool.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAqDjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,CAexE;AAgBD,qGAAqG;AACrG,wBAAgB,IAAI,CAAC,EACjB,IAAI,EACJ,sBAAsB,EACtB,YAAY,EACZ,UAAU,GACb,EAAE,iBAAiB,sCAoBnB"}
@@ -1,128 +1,130 @@
1
- import { isToolUIPart as g, getToolName as a } from "ai";
2
- import { useChatHandlers as S } from "../ChatContext.js";
3
- import { AgentTool as h } from "./agent/AgentTool.js";
4
- import { AskUserQuestionTool as v } from "./ask-user-question/AskUserQuestionTool.js";
5
- import { BashTool as G } from "./bash/BashTool.js";
6
- import { ChooseDesignDirectionTool as P } from "./choose-design-direction/ChooseDesignDirectionTool.js";
1
+ import { isToolUIPart as g, getToolName as s } from "ai";
2
+ import { useChatHandlers as h } from "../ChatContext.js";
3
+ import { AgentTool as S } from "./agent/AgentTool.js";
4
+ import { AskUserQuestionTool as P } from "./ask-user-question/AskUserQuestionTool.js";
5
+ import { BashTool as v } from "./bash/BashTool.js";
6
+ import { CheckPageTool as G } from "./check-page/CheckPageTool.js";
7
+ import { ChooseDesignDirectionTool as C } from "./choose-design-direction/ChooseDesignDirectionTool.js";
7
8
  import { CreateDirectoryTool as E } from "./create-directory/CreateDirectoryTool.js";
8
9
  import { DefaultTool as y } from "./default/Default.js";
9
- import { DevServerRestartTool as C } from "./dev-server/DevServerRestartTool.js";
10
- import { DevServerStatusTool as I } from "./dev-server/DevServerStatusTool.js";
10
+ import { DevServerRestartTool as I } from "./dev-server/DevServerRestartTool.js";
11
+ import { DevServerStatusTool as F } from "./dev-server/DevServerStatusTool.js";
11
12
  import { EditTool as i } from "./edit/EditTool.js";
12
- import { FetchTool as F } from "./fetch/FetchTool.js";
13
- import { GetBackgroundResultTool as b } from "./get-background-result/GetBackgroundResultTool.js";
13
+ import { FetchTool as b } from "./fetch/FetchTool.js";
14
+ import { GetBackgroundResultTool as k } from "./get-background-result/GetBackgroundResultTool.js";
14
15
  import { isGetErrorsToolName as A, GetErrorsTool as u, GET_ERRORS_TOOL_NAME as M } from "./get-errors/GetErrorsTool.js";
15
16
  import { GlobTool as N } from "./glob/GlobTool.js";
16
- import { GrepTool as k } from "./grep/GrepTool.js";
17
+ import { GrepTool as B } from "./grep/GrepTool.js";
17
18
  import { ImageAssetTool as l } from "./image-asset/ImageAssetTool.js";
18
- import { InstallDepsTool as B } from "./install-dependencies/InstallDependenciesTool.js";
19
- import { InstallPlugin as L } from "./install-plugin/InstallPlugin.js";
20
- import { ListDirectoryTool as _ } from "./list-directory/ListDirectoryTool.js";
19
+ import { InstallDepsTool as L } from "./install-dependencies/InstallDependenciesTool.js";
20
+ import { InstallPlugin as _ } from "./install-plugin/InstallPlugin.js";
21
+ import { ListDirectoryTool as j } from "./list-directory/ListDirectoryTool.js";
21
22
  import { CallDynamicTool as p } from "./mcp-tools/CallDynamicTool.js";
22
- import { GetDynamicToolsTool as j } from "./mcp-tools/GetDynamicToolsTool.js";
23
- import { GetMcpResourcesTool as O } from "./mcp-tools/GetMcpResourcesTool.js";
24
- import { McpAuth as W } from "./mcp-tools/McpAuth.js";
25
- import { parsePrefixedMcpToolName as x, parseCallDynamicToolInput as d } from "./mcp-tools/parseCallDynamicToolInput.js";
26
- import { MemoryTool as T } from "./memory/MemoryTool.js";
27
- import { MoveFileTool as U } from "./move-file/MoveFileTool.js";
28
- import { CreatePlanTool as c } from "./plan/CreatePlanTool.js";
29
- import { PreambleTool as Q } from "./preamble/PreambleTool.js";
30
- import { BuildTool as w } from "./project-build/BuildTool.js";
31
- import { ProjectEnvTool as H } from "./project-env/ProjectEnvTool.js";
32
- import { ReadFilesTool as $ } from "./read/ReadFilesTool.js";
33
- import { ReadLintsTool as q } from "./read-lints/ReadLintsTool.js";
34
- import { RemoveFileTool as z } from "./remove-file/RemoveFileTool.js";
35
- import { ScaffoldProjectTool as J } from "./scaffold-project/ScaffoldProjectTool.js";
36
- import { CaptureScreenshotTool as K } from "./screenshot/CaptureScreenshotTool.js";
37
- import { SkillTool as V } from "./skill/SkillTool.js";
38
- import { WaitingTool as X } from "./waiting/WaitingTool.js";
23
+ import { GetDynamicToolsTool as O } from "./mcp-tools/GetDynamicToolsTool.js";
24
+ import { GetMcpResourcesTool as W } from "./mcp-tools/GetMcpResourcesTool.js";
25
+ import { McpAuth as x } from "./mcp-tools/McpAuth.js";
26
+ import { parsePrefixedMcpToolName as U, parseCallDynamicToolInput as d } from "./mcp-tools/parseCallDynamicToolInput.js";
27
+ import { MemoryTool as c } from "./memory/MemoryTool.js";
28
+ import { MoveFileTool as Q } from "./move-file/MoveFileTool.js";
29
+ import { CreatePlanTool as T } from "./plan/CreatePlanTool.js";
30
+ import { PreambleTool as w } from "./preamble/PreambleTool.js";
31
+ import { BuildTool as H } from "./project-build/BuildTool.js";
32
+ import { ProjectEnvTool as $ } from "./project-env/ProjectEnvTool.js";
33
+ import { ReadFilesTool as q } from "./read/ReadFilesTool.js";
34
+ import { ReadLintsTool as z } from "./read-lints/ReadLintsTool.js";
35
+ import { RemoveFileTool as J } from "./remove-file/RemoveFileTool.js";
36
+ import { ScaffoldProjectTool as K } from "./scaffold-project/ScaffoldProjectTool.js";
37
+ import { CaptureScreenshotTool as V } from "./screenshot/CaptureScreenshotTool.js";
38
+ import { SkillTool as X } from "./skill/SkillTool.js";
39
+ import { WaitingTool as Y } from "./waiting/WaitingTool.js";
39
40
  import { WebSearchTool as n } from "./web-search/WebSearchTool.js";
40
- import { jsx as Y } from "react/jsx-runtime";
41
- const s = {
41
+ import { jsx as Z } from "react/jsx-runtime";
42
+ const a = {
42
43
  default: y,
43
- Agent: h,
44
- CreatePlan: c,
44
+ Agent: S,
45
+ CreatePlan: T,
45
46
  EditPlan: i,
46
- ReadPlan: c,
47
+ ReadPlan: T,
47
48
  WebSearch: n,
48
49
  // Vendor stream / legacy names (canonical local name is `WebSearch`).
49
50
  web_search: n,
50
51
  google_search: n,
51
- PageScreenshot: K,
52
+ PageScreenshot: V,
53
+ CheckPage: G,
52
54
  ImageGen: l,
53
55
  SearchImage: l,
54
56
  ImportAsset: l,
55
- Fetch: F,
56
- Read: $,
57
- ReadLints: q,
58
- RemoveFile: z,
59
- DevServerRestart: C,
60
- DevServerStatus: I,
61
- ScaffoldProject: J,
57
+ Fetch: b,
58
+ Read: q,
59
+ ReadLints: z,
60
+ RemoveFile: J,
61
+ DevServerRestart: I,
62
+ DevServerStatus: F,
63
+ ScaffoldProject: K,
62
64
  CreateDirectory: E,
63
- MoveFile: U,
64
- Preamble: Q,
65
- ProjectEnv: H,
66
- GetDynamicTools: j,
67
- GetMcpResources: O,
65
+ MoveFile: Q,
66
+ Preamble: w,
67
+ ProjectEnv: $,
68
+ GetDynamicTools: O,
69
+ GetMcpResources: W,
68
70
  CallDynamicTool: p,
69
- McpAuth: W,
70
- InstallPlugin: L,
71
+ McpAuth: x,
72
+ InstallPlugin: _,
71
73
  Glob: N,
72
- Grep: k,
73
- InstallDeps: B,
74
- Skill: V,
75
- Remember: T,
76
- Forget: T,
77
- Waiting: X,
78
- ListDirectory: _,
74
+ Grep: B,
75
+ InstallDeps: L,
76
+ Skill: X,
77
+ Remember: c,
78
+ Forget: c,
79
+ Waiting: Y,
80
+ ListDirectory: j,
79
81
  Write: i,
80
82
  Edit: i,
81
- Bash: G,
82
- Build: w,
83
- GetBackgroundResult: b,
84
- AskUserQuestion: v,
85
- ChooseDesignDirection: P,
83
+ Bash: v,
84
+ Build: H,
85
+ GetBackgroundResult: k,
86
+ AskUserQuestion: P,
87
+ ChooseDesignDirection: C,
86
88
  [M]: u
87
89
  };
88
- function Z(o) {
89
- const r = a(o);
90
+ function oo(o) {
91
+ const r = s(o);
90
92
  if (r !== "CallDynamicTool")
91
93
  return r;
92
94
  const {
93
95
  toolName: e
94
- } = d(o.input), t = s[e];
96
+ } = d(o.input), t = a[e];
95
97
  return !t || t === p ? r : e;
96
98
  }
97
- function oo(o) {
98
- const r = Z(o);
99
- return r === a(o) ? o : {
99
+ function ro(o) {
100
+ const r = oo(o);
101
+ return r === s(o) ? o : {
100
102
  ...o,
101
103
  type: `tool-${r}`,
102
104
  input: d(o.input).mcpInput
103
105
  };
104
106
  }
105
- function Qo({
107
+ function Ho({
106
108
  part: o,
107
109
  onToolApprovalResponse: r,
108
110
  onToolOutput: e,
109
111
  onOpenPath: t
110
112
  }) {
111
- const R = S({
113
+ const R = h({
112
114
  onToolApprovalResponse: r,
113
115
  onToolOutput: e,
114
116
  onOpenPath: t
115
117
  });
116
118
  if (!g(o))
117
119
  return null;
118
- const f = oo(o), m = a(f), D = A(m) ? u : s[m] ?? (x(m) ? p : s.default);
119
- return /* @__PURE__ */ Y(D, {
120
+ const f = ro(o), m = s(f), D = A(m) ? u : a[m] ?? (U(m) ? p : a.default);
121
+ return /* @__PURE__ */ Z(D, {
120
122
  part: f,
121
123
  ...R
122
124
  });
123
125
  }
124
126
  export {
125
- Qo as Tool,
126
- Z as renderedToolName
127
+ Ho as Tool,
128
+ oo as renderedToolName
127
129
  };
128
130
  //# sourceMappingURL=Tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tool.js","sources":["../../../src/chat/Tool/Tool.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from 'ai';\n\nimport { useChatHandlers } from '../ChatContext';\nimport { AgentTool } from './agent';\nimport { AskUserQuestionTool } from './ask-user-question';\nimport { BashTool } from './bash';\nimport { ChooseDesignDirectionTool } from './choose-design-direction';\nimport { CreateDirectoryTool } from './create-directory';\nimport { DefaultTool } from './default/Default';\nimport { DevServerRestartTool, DevServerStatusTool } from './dev-server';\nimport { EditTool } from './edit';\nimport { FetchTool } from './fetch';\nimport { GetBackgroundResultTool } from './get-background-result';\nimport { GET_ERRORS_TOOL_NAME, GetErrorsTool, isGetErrorsToolName } from './get-errors';\nimport { GlobTool } from './glob';\nimport { GrepTool } from './grep';\nimport { ImageAssetTool } from './image-asset';\nimport { InstallDepsTool } from './install-dependencies';\nimport { InstallPlugin } from './install-plugin/InstallPlugin';\nimport { ListDirectoryTool } from './list-directory';\nimport { CallDynamicTool, GetDynamicToolsTool, GetMcpResourcesTool, McpAuth, parseCallDynamicToolInput, parsePrefixedMcpToolName } from './mcp-tools';\nimport { MemoryTool } from './memory';\nimport { MoveFileTool } from './move-file';\nimport { CreatePlanTool } from './plan/CreatePlanTool';\nimport { PreambleTool } from './preamble';\nimport { BuildTool } from './project-build';\nimport { ProjectEnvTool } from './project-env';\nimport { ReadFilesTool } from './read';\nimport { ReadLintsTool } from './read-lints';\nimport { RemoveFileTool } from './remove-file';\nimport { ScaffoldProjectTool } from './scaffold-project/ScaffoldProjectTool';\nimport { CaptureScreenshotTool } from './screenshot';\nimport { SkillTool } from './skill';\nimport { WaitingTool } from './waiting/WaitingTool';\nimport { WebSearchTool } from './web-search';\n\nimport type { ToolRendererProps } from './types';\n\ntype ToolRenderer = (props: ToolRendererProps) => ReturnType<typeof DefaultTool>;\n\nconst TOOL_RENDERERS: Record<string, ToolRenderer> = {\n default: DefaultTool,\n Agent: AgentTool,\n CreatePlan: CreatePlanTool,\n EditPlan: EditTool,\n ReadPlan: CreatePlanTool,\n WebSearch: WebSearchTool,\n // Vendor stream / legacy names (canonical local name is `WebSearch`).\n web_search: WebSearchTool,\n google_search: WebSearchTool,\n PageScreenshot: CaptureScreenshotTool,\n ImageGen: ImageAssetTool,\n SearchImage: ImageAssetTool,\n ImportAsset: ImageAssetTool,\n Fetch: FetchTool,\n Read: ReadFilesTool,\n ReadLints: ReadLintsTool,\n RemoveFile: RemoveFileTool,\n DevServerRestart: DevServerRestartTool,\n DevServerStatus: DevServerStatusTool,\n ScaffoldProject: ScaffoldProjectTool,\n CreateDirectory: CreateDirectoryTool,\n MoveFile: MoveFileTool,\n Preamble: PreambleTool,\n ProjectEnv: ProjectEnvTool,\n GetDynamicTools: GetDynamicToolsTool,\n GetMcpResources: GetMcpResourcesTool,\n CallDynamicTool,\n McpAuth,\n InstallPlugin,\n Glob: GlobTool,\n Grep: GrepTool,\n InstallDeps: InstallDepsTool,\n Skill: SkillTool,\n Remember: MemoryTool,\n Forget: MemoryTool,\n Waiting: WaitingTool,\n ListDirectory: ListDirectoryTool,\n Write: EditTool,\n Edit: EditTool,\n Bash: BashTool,\n Build: BuildTool,\n GetBackgroundResult: GetBackgroundResultTool,\n AskUserQuestion: AskUserQuestionTool,\n ChooseDesignDirection: ChooseDesignDirectionTool,\n [GET_ERRORS_TOOL_NAME]: GetErrorsTool,\n};\n\n/**\n * Deferred builtins arrive as `CallDynamicTool`. Use that tool's own card when one exists.\n * @internal\n */\nexport function renderedToolName(part: ToolRendererProps['part']): string {\n const name = getToolName(part);\n\n if (name !== 'CallDynamicTool') {\n return name;\n }\n\n const { toolName } = parseCallDynamicToolInput(part.input);\n const renderer = TOOL_RENDERERS[toolName];\n\n if (!renderer || renderer === CallDynamicTool) {\n return name;\n }\n\n return toolName;\n}\n\nfunction partForRenderer(part: ToolRendererProps['part']): ToolRendererProps['part'] {\n const name = renderedToolName(part);\n\n if (name === getToolName(part)) {\n return part;\n }\n\n return {\n ...part,\n type: `tool-${ name }`,\n input: parseCallDynamicToolInput(part.input).mcpInput,\n } as ToolRendererProps['part'];\n}\n\n/** Renders one AI SDK tool UI part: routes to a compact tool UI or the default collapsible shell. */\nexport function Tool({\n part,\n onToolApprovalResponse,\n onToolOutput,\n onOpenPath,\n}: ToolRendererProps) {\n const handlers = useChatHandlers({ onToolApprovalResponse, onToolOutput, onOpenPath });\n\n if (!isToolUIPart(part)) {\n return null;\n }\n\n const presented = partForRenderer(part);\n const name = getToolName(presented);\n const ToolRenderer = isGetErrorsToolName(name)\n ? GetErrorsTool\n : TOOL_RENDERERS[name]\n ?? (parsePrefixedMcpToolName(name) ? CallDynamicTool : TOOL_RENDERERS.default);\n\n return (\n <ToolRenderer\n part={ presented }\n { ...handlers }\n />\n );\n}\n"],"names":["TOOL_RENDERERS","DefaultTool","AgentTool","CreatePlanTool","EditTool","WebSearchTool","CaptureScreenshotTool","ImageAssetTool","FetchTool","ReadFilesTool","ReadLintsTool","RemoveFileTool","DevServerRestartTool","DevServerStatusTool","ScaffoldProjectTool","CreateDirectoryTool","MoveFileTool","PreambleTool","ProjectEnvTool","GetDynamicToolsTool","GetMcpResourcesTool","CallDynamicTool","McpAuth","InstallPlugin","GlobTool","GrepTool","InstallDepsTool","SkillTool","MemoryTool","WaitingTool","ListDirectoryTool","BashTool","BuildTool","GetBackgroundResultTool","AskUserQuestionTool","ChooseDesignDirectionTool","GET_ERRORS_TOOL_NAME","GetErrorsTool","renderedToolName","part","name","getToolName","toolName","parseCallDynamicToolInput","renderer","partForRenderer","Tool","onToolApprovalResponse","onToolOutput","onOpenPath","handlers","useChatHandlers","isToolUIPart","presented","ToolRenderer","isGetErrorsToolName","parsePrefixedMcpToolName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAMA,IAAiB;AAAA,EACrB,SAASC;AAAA,EACT,OAAOC;AAAA,EACP,YAAYC;AAAA,EACZ,UAAUC;AAAA,EACV,UAAUD;AAAA,EACV,WAAWE;AAAA;AAAA,EAEX,YAAYA;AAAA,EACZ,eAAeA;AAAA,EACf,gBAAgBC;AAAA,EAChB,UAAUC;AAAA,EACV,aAAaA;AAAA,EACb,aAAaA;AAAA,EACb,OAAOC;AAAA,EACP,MAAMC;AAAA,EACN,WAAWC;AAAA,EACX,YAAYC;AAAA,EACZ,kBAAkBC;AAAA,EAClB,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,UAAUC;AAAA,EACV,UAAUC;AAAA,EACV,YAAYC;AAAA,EACZ,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,iBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,MAAMC;AAAA,EACN,MAAMC;AAAA,EACN,aAAaC;AAAA,EACb,OAAOC;AAAA,EACP,UAAUC;AAAA,EACV,QAAQA;AAAA,EACR,SAASC;AAAA,EACT,eAAeC;AAAA,EACf,OAAO1B;AAAA,EACP,MAAMA;AAAA,EACN,MAAM2B;AAAA,EACN,OAAOC;AAAA,EACP,qBAAqBC;AAAA,EACrB,iBAAiBC;AAAA,EACjB,uBAAuBC;AAAA,EACvB,CAACC,CAAoB,GAAGC;AAC1B;AAMO,SAASC,EAAiBC,GAAM;AACrC,QAAMC,IAAOC,EAAYF,CAAI;AAC7B,MAAIC,MAAS;AACX,WAAOA;AAET,QAAM;AAAA,IACJ,UAAAE;AAAA,EAAA,IACEC,EAA0BJ,EAAK,KAAK,GAClCK,IAAW5C,EAAe0C,CAAQ;AACxC,SAAI,CAACE,KAAYA,MAAavB,IACrBmB,IAEFE;AACT;AACA,SAASG,GAAgBN,GAAM;AAC7B,QAAMC,IAAOF,EAAiBC,CAAI;AAClC,SAAIC,MAASC,EAAYF,CAAI,IACpBA,IAEF;AAAA,IACL,GAAGA;AAAA,IACH,MAAM,QAAQC,CAAI;AAAA,IAClB,OAAOG,EAA0BJ,EAAK,KAAK,EAAE;AAAA,EAAA;AAEjD;AAGO,SAASO,GAAK;AAAA,EACnB,MAAAP;AAAA,EACA,wBAAAQ;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AACF,GAAG;AACD,QAAMC,IAAWC,EAAgB;AAAA,IAC/B,wBAAAJ;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,CACD;AACD,MAAI,CAACG,EAAab,CAAI;AACpB,WAAO;AAET,QAAMc,IAAYR,GAAgBN,CAAI,GAChCC,IAAOC,EAAYY,CAAS,GAC5BC,IAAeC,EAAoBf,CAAI,IAAIH,IAAgBrC,EAAewC,CAAI,MAAMgB,EAAyBhB,CAAI,IAAInB,IAAkBrB,EAAe;AAC5J,2BAAyBsD,GAAc;AAAA,IACrC,MAAMD;AAAA,IACN,GAAGH;AAAA,EAAA,CACJ;AACH;"}
1
+ {"version":3,"file":"Tool.js","sources":["../../../src/chat/Tool/Tool.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from 'ai';\n\nimport { useChatHandlers } from '../ChatContext';\nimport { AgentTool } from './agent';\nimport { AskUserQuestionTool } from './ask-user-question';\nimport { BashTool } from './bash';\nimport { CheckPageTool } from './check-page';\nimport { ChooseDesignDirectionTool } from './choose-design-direction';\nimport { CreateDirectoryTool } from './create-directory';\nimport { DefaultTool } from './default/Default';\nimport { DevServerRestartTool, DevServerStatusTool } from './dev-server';\nimport { EditTool } from './edit';\nimport { FetchTool } from './fetch';\nimport { GetBackgroundResultTool } from './get-background-result';\nimport { GET_ERRORS_TOOL_NAME, GetErrorsTool, isGetErrorsToolName } from './get-errors';\nimport { GlobTool } from './glob';\nimport { GrepTool } from './grep';\nimport { ImageAssetTool } from './image-asset';\nimport { InstallDepsTool } from './install-dependencies';\nimport { InstallPlugin } from './install-plugin/InstallPlugin';\nimport { ListDirectoryTool } from './list-directory';\nimport { CallDynamicTool, GetDynamicToolsTool, GetMcpResourcesTool, McpAuth, parseCallDynamicToolInput, parsePrefixedMcpToolName } from './mcp-tools';\nimport { MemoryTool } from './memory';\nimport { MoveFileTool } from './move-file';\nimport { CreatePlanTool } from './plan/CreatePlanTool';\nimport { PreambleTool } from './preamble';\nimport { BuildTool } from './project-build';\nimport { ProjectEnvTool } from './project-env';\nimport { ReadFilesTool } from './read';\nimport { ReadLintsTool } from './read-lints';\nimport { RemoveFileTool } from './remove-file';\nimport { ScaffoldProjectTool } from './scaffold-project/ScaffoldProjectTool';\nimport { CaptureScreenshotTool } from './screenshot';\nimport { SkillTool } from './skill';\nimport { WaitingTool } from './waiting/WaitingTool';\nimport { WebSearchTool } from './web-search';\n\nimport type { ToolRendererProps } from './types';\n\ntype ToolRenderer = (props: ToolRendererProps) => ReturnType<typeof DefaultTool>;\n\nconst TOOL_RENDERERS: Record<string, ToolRenderer> = {\n default: DefaultTool,\n Agent: AgentTool,\n CreatePlan: CreatePlanTool,\n EditPlan: EditTool,\n ReadPlan: CreatePlanTool,\n WebSearch: WebSearchTool,\n // Vendor stream / legacy names (canonical local name is `WebSearch`).\n web_search: WebSearchTool,\n google_search: WebSearchTool,\n PageScreenshot: CaptureScreenshotTool,\n CheckPage: CheckPageTool,\n ImageGen: ImageAssetTool,\n SearchImage: ImageAssetTool,\n ImportAsset: ImageAssetTool,\n Fetch: FetchTool,\n Read: ReadFilesTool,\n ReadLints: ReadLintsTool,\n RemoveFile: RemoveFileTool,\n DevServerRestart: DevServerRestartTool,\n DevServerStatus: DevServerStatusTool,\n ScaffoldProject: ScaffoldProjectTool,\n CreateDirectory: CreateDirectoryTool,\n MoveFile: MoveFileTool,\n Preamble: PreambleTool,\n ProjectEnv: ProjectEnvTool,\n GetDynamicTools: GetDynamicToolsTool,\n GetMcpResources: GetMcpResourcesTool,\n CallDynamicTool,\n McpAuth,\n InstallPlugin,\n Glob: GlobTool,\n Grep: GrepTool,\n InstallDeps: InstallDepsTool,\n Skill: SkillTool,\n Remember: MemoryTool,\n Forget: MemoryTool,\n Waiting: WaitingTool,\n ListDirectory: ListDirectoryTool,\n Write: EditTool,\n Edit: EditTool,\n Bash: BashTool,\n Build: BuildTool,\n GetBackgroundResult: GetBackgroundResultTool,\n AskUserQuestion: AskUserQuestionTool,\n ChooseDesignDirection: ChooseDesignDirectionTool,\n [GET_ERRORS_TOOL_NAME]: GetErrorsTool,\n};\n\n/**\n * Deferred builtins arrive as `CallDynamicTool`. Use that tool's own card when one exists.\n * @internal\n */\nexport function renderedToolName(part: ToolRendererProps['part']): string {\n const name = getToolName(part);\n\n if (name !== 'CallDynamicTool') {\n return name;\n }\n\n const { toolName } = parseCallDynamicToolInput(part.input);\n const renderer = TOOL_RENDERERS[toolName];\n\n if (!renderer || renderer === CallDynamicTool) {\n return name;\n }\n\n return toolName;\n}\n\nfunction partForRenderer(part: ToolRendererProps['part']): ToolRendererProps['part'] {\n const name = renderedToolName(part);\n\n if (name === getToolName(part)) {\n return part;\n }\n\n return {\n ...part,\n type: `tool-${ name }`,\n input: parseCallDynamicToolInput(part.input).mcpInput,\n } as ToolRendererProps['part'];\n}\n\n/** Renders one AI SDK tool UI part: routes to a compact tool UI or the default collapsible shell. */\nexport function Tool({\n part,\n onToolApprovalResponse,\n onToolOutput,\n onOpenPath,\n}: ToolRendererProps) {\n const handlers = useChatHandlers({ onToolApprovalResponse, onToolOutput, onOpenPath });\n\n if (!isToolUIPart(part)) {\n return null;\n }\n\n const presented = partForRenderer(part);\n const name = getToolName(presented);\n const ToolRenderer = isGetErrorsToolName(name)\n ? GetErrorsTool\n : TOOL_RENDERERS[name]\n ?? (parsePrefixedMcpToolName(name) ? CallDynamicTool : TOOL_RENDERERS.default);\n\n return (\n <ToolRenderer\n part={ presented }\n { ...handlers }\n />\n );\n}\n"],"names":["TOOL_RENDERERS","DefaultTool","AgentTool","CreatePlanTool","EditTool","WebSearchTool","CaptureScreenshotTool","CheckPageTool","ImageAssetTool","FetchTool","ReadFilesTool","ReadLintsTool","RemoveFileTool","DevServerRestartTool","DevServerStatusTool","ScaffoldProjectTool","CreateDirectoryTool","MoveFileTool","PreambleTool","ProjectEnvTool","GetDynamicToolsTool","GetMcpResourcesTool","CallDynamicTool","McpAuth","InstallPlugin","GlobTool","GrepTool","InstallDepsTool","SkillTool","MemoryTool","WaitingTool","ListDirectoryTool","BashTool","BuildTool","GetBackgroundResultTool","AskUserQuestionTool","ChooseDesignDirectionTool","GET_ERRORS_TOOL_NAME","GetErrorsTool","renderedToolName","part","name","getToolName","toolName","parseCallDynamicToolInput","renderer","partForRenderer","Tool","onToolApprovalResponse","onToolOutput","onOpenPath","handlers","useChatHandlers","isToolUIPart","presented","ToolRenderer","isGetErrorsToolName","parsePrefixedMcpToolName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAMA,IAAiB;AAAA,EACrB,SAASC;AAAA,EACT,OAAOC;AAAA,EACP,YAAYC;AAAA,EACZ,UAAUC;AAAA,EACV,UAAUD;AAAA,EACV,WAAWE;AAAA;AAAA,EAEX,YAAYA;AAAA,EACZ,eAAeA;AAAA,EACf,gBAAgBC;AAAA,EAChB,WAAWC;AAAA,EACX,UAAUC;AAAA,EACV,aAAaA;AAAA,EACb,aAAaA;AAAA,EACb,OAAOC;AAAA,EACP,MAAMC;AAAA,EACN,WAAWC;AAAA,EACX,YAAYC;AAAA,EACZ,kBAAkBC;AAAA,EAClB,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,UAAUC;AAAA,EACV,UAAUC;AAAA,EACV,YAAYC;AAAA,EACZ,iBAAiBC;AAAA,EACjB,iBAAiBC;AAAA,EACjB,iBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,MAAMC;AAAA,EACN,MAAMC;AAAA,EACN,aAAaC;AAAA,EACb,OAAOC;AAAA,EACP,UAAUC;AAAA,EACV,QAAQA;AAAA,EACR,SAASC;AAAA,EACT,eAAeC;AAAA,EACf,OAAO3B;AAAA,EACP,MAAMA;AAAA,EACN,MAAM4B;AAAA,EACN,OAAOC;AAAA,EACP,qBAAqBC;AAAA,EACrB,iBAAiBC;AAAA,EACjB,uBAAuBC;AAAA,EACvB,CAACC,CAAoB,GAAGC;AAC1B;AAMO,SAASC,GAAiBC,GAAM;AACrC,QAAMC,IAAOC,EAAYF,CAAI;AAC7B,MAAIC,MAAS;AACX,WAAOA;AAET,QAAM;AAAA,IACJ,UAAAE;AAAA,EAAA,IACEC,EAA0BJ,EAAK,KAAK,GAClCK,IAAW7C,EAAe2C,CAAQ;AACxC,SAAI,CAACE,KAAYA,MAAavB,IACrBmB,IAEFE;AACT;AACA,SAASG,GAAgBN,GAAM;AAC7B,QAAMC,IAAOF,GAAiBC,CAAI;AAClC,SAAIC,MAASC,EAAYF,CAAI,IACpBA,IAEF;AAAA,IACL,GAAGA;AAAA,IACH,MAAM,QAAQC,CAAI;AAAA,IAClB,OAAOG,EAA0BJ,EAAK,KAAK,EAAE;AAAA,EAAA;AAEjD;AAGO,SAASO,GAAK;AAAA,EACnB,MAAAP;AAAA,EACA,wBAAAQ;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AACF,GAAG;AACD,QAAMC,IAAWC,EAAgB;AAAA,IAC/B,wBAAAJ;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,CACD;AACD,MAAI,CAACG,EAAab,CAAI;AACpB,WAAO;AAET,QAAMc,IAAYR,GAAgBN,CAAI,GAChCC,IAAOC,EAAYY,CAAS,GAC5BC,IAAeC,EAAoBf,CAAI,IAAIH,IAAgBtC,EAAeyC,CAAI,MAAMgB,EAAyBhB,CAAI,IAAInB,IAAkBtB,EAAe;AAC5J,2BAAyBuD,GAAc;AAAA,IACrC,MAAMD;AAAA,IACN,GAAGH;AAAA,EAAA,CACJ;AACH;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/agent/AgentTool.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AA6IlD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAChC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAW3E;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CA0BpG;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,GAAG,SAAS,CAcrB;AAiFD,mDAAmD;AACnD,eAAO,MAAM,SAAS,cAAuB,iBAAiB;8BAAjB,iBAAiB;CA6C5D,CAAC"}
1
+ {"version":3,"file":"AgentTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/agent/AgentTool.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AA8IlD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAChC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAW3E;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CA0BpG;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,GAAG,SAAS,CAcrB;AAiFD,mDAAmD;AACnD,eAAO,MAAM,SAAS,cAAuB,iBAAiB;8BAAjB,iBAAiB;CA6C5D,CAAC"}
@@ -3,10 +3,10 @@ import { ProgressLoader as I } from "@reforma/icons/assets";
3
3
  import { humanizeString as k, basename as T, plural as w } from "@reforma/lib";
4
4
  import { isToolUIPart as N, getToolName as F } from "ai";
5
5
  import { observer as U } from "mobx-react-lite";
6
- import { Box as S } from "../../../Box/Box.js";
6
+ import { Box as C } from "../../../Box/Box.js";
7
7
  import { Pressable as B } from "react-aria-components";
8
8
  import { Shimmer as G } from "../../../Shimmer/Shimmer.js";
9
- import { Show as f } from "../../../Show/Show.js";
9
+ import { Show as g } from "../../../Show/Show.js";
10
10
  import { Text as m } from "../../../Text/Text.js";
11
11
  import { useChat as M } from "../../ChatContext.js";
12
12
  import { useMessageTurn as O } from "../../Message/turn/messageTurnContext.js";
@@ -15,7 +15,7 @@ import { ToolShellCard as _ } from "../shell/ToolShellCard.js";
15
15
  import { useToolProgress as D } from "../shell/toolProgress.js";
16
16
  import V from "../shell/ToolShellCard.module.css.js";
17
17
  import h from "./AgentTool.module.css.js";
18
- import { jsx as o, jsxs as C } from "react/jsx-runtime";
18
+ import { jsx as o, jsxs as S } from "react/jsx-runtime";
19
19
  const z = {
20
20
  research: "Explore",
21
21
  shell: "Shell",
@@ -98,6 +98,7 @@ const K = {
98
98
  Preamble: (e) => i(e.content),
99
99
  ReadLints: () => "Checking lints",
100
100
  PageScreenshot: () => "Capturing screenshot",
101
+ CheckPage: () => "Checking pages",
101
102
  DevServerStatus: () => "Checking project",
102
103
  ImportAsset: () => "Importing asset",
103
104
  CreatePlan: () => "Creating plan",
@@ -142,13 +143,13 @@ function Z({
142
143
  stalled: a,
143
144
  onOpen: c
144
145
  }) {
145
- const l = a ? W : e, u = /* @__PURE__ */ C(S, {
146
+ const l = a ? W : e, u = /* @__PURE__ */ S(C, {
146
147
  align: "center",
147
148
  direction: "row",
148
149
  fullWidth: !0,
149
150
  gap: "md",
150
151
  padding: "md",
151
- children: [/* @__PURE__ */ o(f, {
152
+ children: [/* @__PURE__ */ o(g, {
152
153
  when: n,
153
154
  fallback: /* @__PURE__ */ o(x, {
154
155
  "aria-hidden": !0
@@ -157,10 +158,10 @@ function Z({
157
158
  "aria-hidden": !0,
158
159
  size: 14
159
160
  })
160
- }), /* @__PURE__ */ C(S, {
161
+ }), /* @__PURE__ */ S(C, {
161
162
  gap: "xxs",
162
163
  grow: !0,
163
- children: [/* @__PURE__ */ o(f, {
164
+ children: [/* @__PURE__ */ o(g, {
164
165
  when: n,
165
166
  fallback: /* @__PURE__ */ o(m, {
166
167
  className: h.title,
@@ -173,7 +174,7 @@ function Z({
173
174
  duration: 1,
174
175
  children: l
175
176
  })
176
- }), /* @__PURE__ */ o(f, {
177
+ }), /* @__PURE__ */ o(g, {
177
178
  when: n ? t : void 0,
178
179
  children: (s) => /* @__PURE__ */ o(m, {
179
180
  color: "secondary",
@@ -181,7 +182,7 @@ function Z({
181
182
  variant: "sm",
182
183
  children: s
183
184
  })
184
- }), /* @__PURE__ */ o(f, {
185
+ }), /* @__PURE__ */ o(g, {
185
186
  when: r,
186
187
  children: (s) => /* @__PURE__ */ o(m, {
187
188
  color: "danger",
@@ -196,7 +197,7 @@ function Z({
196
197
  className: V.tool,
197
198
  collapsible: !1,
198
199
  "data-slot": "agent-tool",
199
- children: /* @__PURE__ */ o(f, {
200
+ children: /* @__PURE__ */ o(g, {
200
201
  when: c,
201
202
  fallback: u,
202
203
  children: (s) => /* @__PURE__ */ o(B, {
@@ -219,20 +220,20 @@ const Te = U(({
219
220
  } = D(e.state, a);
220
221
  if (!N(e) || F(e) !== "Agent")
221
222
  return null;
222
- const u = j(e), s = e.state === "output-available" ? q(e.output) : void 0, g = u.useFailureLabel || !!s, v = R(e), A = p(v), y = H(v), L = Q(n), E = X({
223
+ const u = j(e), s = e.state === "output-available" ? q(e.output) : void 0, f = u.useFailureLabel || !!s, v = R(e), A = p(v), y = H(v), L = Q(n), P = X({
223
224
  live: c,
224
- failed: g,
225
+ failed: f,
225
226
  stalled: l,
226
227
  needsUser: a,
227
228
  activity: L
228
- }), b = i(e.output?.childThreadId) ?? i(n?.childThreadId), P = !!(b && r && !g), $ = s ?? u.problemText ?? u.tooltip;
229
+ }), b = i(e.output?.childThreadId) ?? i(n?.childThreadId), E = !!(b && r && !f), $ = s ?? u.problemText ?? u.tooltip;
229
230
  return /* @__PURE__ */ o(Z, {
230
- activity: E,
231
+ activity: P,
231
232
  errorText: $,
232
- onOpen: P ? () => r?.(b, A) : void 0,
233
- running: c && !g && !l,
233
+ onOpen: E ? () => r?.(b, A) : void 0,
234
+ running: c && !f && !l,
234
235
  stalled: l,
235
- title: c && !g && !l ? y.live : y.done
236
+ title: c && !f && !l ? y.live : y.done
236
237
  });
237
238
  });
238
239
  export {