@inf-monkeys-tech/monkeys-design 1.0.66 → 1.0.68

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 (62) hide show
  1. package/dist/components/agent-workbench/index.d.mts +7 -41
  2. package/dist/components/agent-workbench/index.d.ts +7 -41
  3. package/dist/components/agent-workbench/index.js +24 -20
  4. package/dist/components/agent-workbench/index.js.map +1 -1
  5. package/dist/components/agent-workbench/index.mjs +25 -21
  6. package/dist/components/agent-workbench/index.mjs.map +1 -1
  7. package/dist/components/base/index.js +2 -0
  8. package/dist/components/base/index.js.map +1 -1
  9. package/dist/components/base/index.mjs +2 -0
  10. package/dist/components/base/index.mjs.map +1 -1
  11. package/dist/components/data-explorer/index.js +2 -0
  12. package/dist/components/data-explorer/index.js.map +1 -1
  13. package/dist/components/data-explorer/index.mjs +2 -0
  14. package/dist/components/data-explorer/index.mjs.map +1 -1
  15. package/dist/components/layout/index.js +2 -0
  16. package/dist/components/layout/index.js.map +1 -1
  17. package/dist/components/layout/index.mjs +2 -0
  18. package/dist/components/layout/index.mjs.map +1 -1
  19. package/dist/components/navigation-sidebar/index.js +2 -0
  20. package/dist/components/navigation-sidebar/index.js.map +1 -1
  21. package/dist/components/navigation-sidebar/index.mjs +2 -0
  22. package/dist/components/navigation-sidebar/index.mjs.map +1 -1
  23. package/dist/components/runtime/index.js +2 -0
  24. package/dist/components/runtime/index.js.map +1 -1
  25. package/dist/components/runtime/index.mjs +2 -0
  26. package/dist/components/runtime/index.mjs.map +1 -1
  27. package/dist/components/toast/index.d.mts +1 -1
  28. package/dist/components/toast/index.d.ts +1 -1
  29. package/dist/components/toast/index.js +2 -0
  30. package/dist/components/toast/index.js.map +1 -1
  31. package/dist/components/toast/index.mjs +2 -0
  32. package/dist/components/toast/index.mjs.map +1 -1
  33. package/dist/components/toolbar/index.js +2 -0
  34. package/dist/components/toolbar/index.js.map +1 -1
  35. package/dist/components/toolbar/index.mjs +2 -0
  36. package/dist/components/toolbar/index.mjs.map +1 -1
  37. package/dist/components/workbench/index.js +2 -0
  38. package/dist/components/workbench/index.js.map +1 -1
  39. package/dist/components/workbench/index.mjs +2 -0
  40. package/dist/components/workbench/index.mjs.map +1 -1
  41. package/dist/index.d.mts +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +4 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/index.mjs +4 -0
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/locale/index.d.mts +6 -2
  48. package/dist/locale/index.d.ts +6 -2
  49. package/dist/locale/index.js +4 -0
  50. package/dist/locale/index.js.map +1 -1
  51. package/dist/locale/index.mjs +4 -0
  52. package/dist/locale/index.mjs.map +1 -1
  53. package/dist/provider/index.d.mts +2 -2
  54. package/dist/provider/index.d.ts +2 -2
  55. package/dist/provider/index.js +4 -0
  56. package/dist/provider/index.js.map +1 -1
  57. package/dist/provider/index.mjs +4 -0
  58. package/dist/provider/index.mjs.map +1 -1
  59. package/dist/styles.css +1 -1
  60. package/dist/{types-15efbcf88674.d.mts → types-340390798922.d.mts} +2 -0
  61. package/dist/{types-15efbcf88674.d.ts → types-340390798922.d.ts} +2 -0
  62. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
2
+ import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentWorkbenchQuickStartViewModel, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
3
+ export { AgentWorkbenchQuickStartCategory, AgentWorkbenchQuickStartIcon, AgentWorkbenchQuickStartSection, AgentWorkbenchQuickStartTemplate, AgentWorkbenchQuickStartViewModel } from '@inf-monkeys-tech/monkeys';
3
4
  import { d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent } from '../../details-model-db4bd679f88e.mjs';
4
5
  export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, f as AgentWorkbenchDetailsIntent, g as AgentWorkbenchDetailsModel, h as AgentWorkbenchDetailsState, i as AgentWorkbenchDetailsTab, j as AgentWorkbenchEventOf, E as AgentWorkbenchExploreCardMedia, F as AgentWorkbenchExploreCardMediaProps, k as AgentWorkbenchExploreGroup, l as AgentWorkbenchExploreItem, G as AgentWorkbenchExploreMediaTreatment, H as AgentWorkbenchExploreMediaVariant, m as AgentWorkbenchExploreSidebar, n as AgentWorkbenchExploreSidebarIntent, o as AgentWorkbenchExploreSidebarLabels, p as AgentWorkbenchExploreSidebarProps, q as AgentWorkbenchSidebar, r as AgentWorkbenchSidebarClassNames, s as AgentWorkbenchSidebarIntent, t as AgentWorkbenchSidebarProps, u as AgentWorkbenchTaskDetails, v as AgentWorkbenchTaskDetailsClassNames, w as AgentWorkbenchTaskDetailsProps, x as AgentWorkbenchTerminalModel, y as AgentWorkbenchTool, z as AgentWorkbenchToolClassNames, B as AgentWorkbenchToolProps, C as createAgentWorkbenchActivityModel, D as createAgentWorkbenchDetailsModel } from '../../details-model-db4bd679f88e.mjs';
5
6
  import { ReactNode, ComponentType } from 'react';
@@ -34,6 +35,9 @@ type AgentWorkbenchComposerIntent = {
34
35
  files: File[];
35
36
  } | {
36
37
  type: 'request-voice-input';
38
+ } | {
39
+ type: 'retry-attachment';
40
+ attachmentId: string;
37
41
  } | {
38
42
  type: 'select-input-action';
39
43
  actionId: string;
@@ -57,52 +61,14 @@ interface AgentWorkbenchComposerClassNames {
57
61
  toolbar?: string;
58
62
  }
59
63
  interface AgentWorkbenchComposerProps {
60
- viewModel: AgentWorkbenchComposerViewModel & {
61
- inputActions?: readonly ComposerInputAction[];
62
- selectedInputActionId?: string;
63
- };
64
+ viewModel: AgentWorkbenchComposerViewModel;
64
65
  modeSelectionEnabled?: boolean;
65
66
  modeFilteringEnabled?: boolean;
66
67
  className?: string;
67
68
  classNames?: AgentWorkbenchComposerClassNames;
68
69
  onIntent?: (intent: AgentWorkbenchComposerIntent) => void;
69
70
  }
70
- type ComposerInputAction = {
71
- id: string;
72
- label: string;
73
- icon?: 'file-text' | 'image';
74
- };
75
71
  declare function AgentWorkbenchComposer({ viewModel, modeSelectionEnabled, modeFilteringEnabled, className, classNames, onIntent, }: AgentWorkbenchComposerProps): react_jsx_runtime.JSX.Element;
76
- type AgentWorkbenchQuickStartIcon = 'code' | 'file-text' | 'palette' | 'search' | 'shopping-bag' | 'sparkles';
77
- interface AgentWorkbenchQuickStartTemplate {
78
- id: string;
79
- title: string;
80
- description?: string;
81
- prompt: string;
82
- action?: 'prompt' | 'upload';
83
- icon?: AgentWorkbenchQuickStartIcon;
84
- coverImageUrl?: string;
85
- accept?: string;
86
- multiple?: boolean;
87
- modes?: Array<'chat' | 'work'>;
88
- }
89
- interface AgentWorkbenchQuickStartSection {
90
- id: string;
91
- label: string;
92
- templates: AgentWorkbenchQuickStartTemplate[];
93
- }
94
- interface AgentWorkbenchQuickStartCategory {
95
- id: string;
96
- label: string;
97
- icon?: AgentWorkbenchQuickStartIcon;
98
- sections: AgentWorkbenchQuickStartSection[];
99
- }
100
- interface AgentWorkbenchQuickStartViewModel {
101
- contract: 'AgentWorkbenchQuickStartViewModel';
102
- mode: 'chat' | 'work';
103
- categories: AgentWorkbenchQuickStartCategory[];
104
- disabled?: boolean;
105
- }
106
72
  type AgentWorkbenchQuickStartIntent = {
107
73
  type: 'change-category';
108
74
  categoryId?: string;
@@ -246,4 +212,4 @@ interface AgentWorkbenchArtifactWorkspaceProps {
246
212
  onIntent?: (intent: AgentWorkbenchArtifactWorkspaceIntent) => void;
247
213
  }
248
214
  declare function AgentWorkbenchArtifactWorkspace({ artifacts, activeArtifactId, className, renderArtifact, onIntent, }: AgentWorkbenchArtifactWorkspaceProps): null | react_jsx_runtime.JSX.Element;
249
- export { AgentWorkbenchAction, type AgentWorkbenchActionKind, type AgentWorkbenchActionProps, type AgentWorkbenchActionStatus, AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, type AgentWorkbenchArtifactItem, type AgentWorkbenchArtifactKind, type AgentWorkbenchArtifactOrigin, type AgentWorkbenchArtifactStatus, AgentWorkbenchArtifactSummary, type AgentWorkbenchArtifactSummaryProps, AgentWorkbenchArtifactWorkspace, type AgentWorkbenchArtifactWorkspaceIntent, type AgentWorkbenchArtifactWorkspaceProps, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchProcess, type AgentWorkbenchProcessProps, type AgentWorkbenchProcessStatus, AgentWorkbenchQuickStart, type AgentWorkbenchQuickStartCategory, type AgentWorkbenchQuickStartIcon, type AgentWorkbenchQuickStartIntent, type AgentWorkbenchQuickStartProps, type AgentWorkbenchQuickStartSection, type AgentWorkbenchQuickStartTemplate, type AgentWorkbenchQuickStartViewModel, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
215
+ export { AgentWorkbenchAction, type AgentWorkbenchActionKind, type AgentWorkbenchActionProps, type AgentWorkbenchActionStatus, AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, type AgentWorkbenchArtifactItem, type AgentWorkbenchArtifactKind, type AgentWorkbenchArtifactOrigin, type AgentWorkbenchArtifactStatus, AgentWorkbenchArtifactSummary, type AgentWorkbenchArtifactSummaryProps, AgentWorkbenchArtifactWorkspace, type AgentWorkbenchArtifactWorkspaceIntent, type AgentWorkbenchArtifactWorkspaceProps, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchProcess, type AgentWorkbenchProcessProps, type AgentWorkbenchProcessStatus, AgentWorkbenchQuickStart, type AgentWorkbenchQuickStartIntent, type AgentWorkbenchQuickStartProps, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
2
+ import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentWorkbenchQuickStartViewModel, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
3
+ export { AgentWorkbenchQuickStartCategory, AgentWorkbenchQuickStartIcon, AgentWorkbenchQuickStartSection, AgentWorkbenchQuickStartTemplate, AgentWorkbenchQuickStartViewModel } from '@inf-monkeys-tech/monkeys';
3
4
  import { d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent } from '../../details-model-db4bd679f88e.js';
4
5
  export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, f as AgentWorkbenchDetailsIntent, g as AgentWorkbenchDetailsModel, h as AgentWorkbenchDetailsState, i as AgentWorkbenchDetailsTab, j as AgentWorkbenchEventOf, E as AgentWorkbenchExploreCardMedia, F as AgentWorkbenchExploreCardMediaProps, k as AgentWorkbenchExploreGroup, l as AgentWorkbenchExploreItem, G as AgentWorkbenchExploreMediaTreatment, H as AgentWorkbenchExploreMediaVariant, m as AgentWorkbenchExploreSidebar, n as AgentWorkbenchExploreSidebarIntent, o as AgentWorkbenchExploreSidebarLabels, p as AgentWorkbenchExploreSidebarProps, q as AgentWorkbenchSidebar, r as AgentWorkbenchSidebarClassNames, s as AgentWorkbenchSidebarIntent, t as AgentWorkbenchSidebarProps, u as AgentWorkbenchTaskDetails, v as AgentWorkbenchTaskDetailsClassNames, w as AgentWorkbenchTaskDetailsProps, x as AgentWorkbenchTerminalModel, y as AgentWorkbenchTool, z as AgentWorkbenchToolClassNames, B as AgentWorkbenchToolProps, C as createAgentWorkbenchActivityModel, D as createAgentWorkbenchDetailsModel } from '../../details-model-db4bd679f88e.js';
5
6
  import { ReactNode, ComponentType } from 'react';
@@ -34,6 +35,9 @@ type AgentWorkbenchComposerIntent = {
34
35
  files: File[];
35
36
  } | {
36
37
  type: 'request-voice-input';
38
+ } | {
39
+ type: 'retry-attachment';
40
+ attachmentId: string;
37
41
  } | {
38
42
  type: 'select-input-action';
39
43
  actionId: string;
@@ -57,52 +61,14 @@ interface AgentWorkbenchComposerClassNames {
57
61
  toolbar?: string;
58
62
  }
59
63
  interface AgentWorkbenchComposerProps {
60
- viewModel: AgentWorkbenchComposerViewModel & {
61
- inputActions?: readonly ComposerInputAction[];
62
- selectedInputActionId?: string;
63
- };
64
+ viewModel: AgentWorkbenchComposerViewModel;
64
65
  modeSelectionEnabled?: boolean;
65
66
  modeFilteringEnabled?: boolean;
66
67
  className?: string;
67
68
  classNames?: AgentWorkbenchComposerClassNames;
68
69
  onIntent?: (intent: AgentWorkbenchComposerIntent) => void;
69
70
  }
70
- type ComposerInputAction = {
71
- id: string;
72
- label: string;
73
- icon?: 'file-text' | 'image';
74
- };
75
71
  declare function AgentWorkbenchComposer({ viewModel, modeSelectionEnabled, modeFilteringEnabled, className, classNames, onIntent, }: AgentWorkbenchComposerProps): react_jsx_runtime.JSX.Element;
76
- type AgentWorkbenchQuickStartIcon = 'code' | 'file-text' | 'palette' | 'search' | 'shopping-bag' | 'sparkles';
77
- interface AgentWorkbenchQuickStartTemplate {
78
- id: string;
79
- title: string;
80
- description?: string;
81
- prompt: string;
82
- action?: 'prompt' | 'upload';
83
- icon?: AgentWorkbenchQuickStartIcon;
84
- coverImageUrl?: string;
85
- accept?: string;
86
- multiple?: boolean;
87
- modes?: Array<'chat' | 'work'>;
88
- }
89
- interface AgentWorkbenchQuickStartSection {
90
- id: string;
91
- label: string;
92
- templates: AgentWorkbenchQuickStartTemplate[];
93
- }
94
- interface AgentWorkbenchQuickStartCategory {
95
- id: string;
96
- label: string;
97
- icon?: AgentWorkbenchQuickStartIcon;
98
- sections: AgentWorkbenchQuickStartSection[];
99
- }
100
- interface AgentWorkbenchQuickStartViewModel {
101
- contract: 'AgentWorkbenchQuickStartViewModel';
102
- mode: 'chat' | 'work';
103
- categories: AgentWorkbenchQuickStartCategory[];
104
- disabled?: boolean;
105
- }
106
72
  type AgentWorkbenchQuickStartIntent = {
107
73
  type: 'change-category';
108
74
  categoryId?: string;
@@ -246,4 +212,4 @@ interface AgentWorkbenchArtifactWorkspaceProps {
246
212
  onIntent?: (intent: AgentWorkbenchArtifactWorkspaceIntent) => void;
247
213
  }
248
214
  declare function AgentWorkbenchArtifactWorkspace({ artifacts, activeArtifactId, className, renderArtifact, onIntent, }: AgentWorkbenchArtifactWorkspaceProps): null | react_jsx_runtime.JSX.Element;
249
- export { AgentWorkbenchAction, type AgentWorkbenchActionKind, type AgentWorkbenchActionProps, type AgentWorkbenchActionStatus, AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, type AgentWorkbenchArtifactItem, type AgentWorkbenchArtifactKind, type AgentWorkbenchArtifactOrigin, type AgentWorkbenchArtifactStatus, AgentWorkbenchArtifactSummary, type AgentWorkbenchArtifactSummaryProps, AgentWorkbenchArtifactWorkspace, type AgentWorkbenchArtifactWorkspaceIntent, type AgentWorkbenchArtifactWorkspaceProps, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchProcess, type AgentWorkbenchProcessProps, type AgentWorkbenchProcessStatus, AgentWorkbenchQuickStart, type AgentWorkbenchQuickStartCategory, type AgentWorkbenchQuickStartIcon, type AgentWorkbenchQuickStartIntent, type AgentWorkbenchQuickStartProps, type AgentWorkbenchQuickStartSection, type AgentWorkbenchQuickStartTemplate, type AgentWorkbenchQuickStartViewModel, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
215
+ export { AgentWorkbenchAction, type AgentWorkbenchActionKind, type AgentWorkbenchActionProps, type AgentWorkbenchActionStatus, AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, type AgentWorkbenchArtifactItem, type AgentWorkbenchArtifactKind, type AgentWorkbenchArtifactOrigin, type AgentWorkbenchArtifactStatus, AgentWorkbenchArtifactSummary, type AgentWorkbenchArtifactSummaryProps, AgentWorkbenchArtifactWorkspace, type AgentWorkbenchArtifactWorkspaceIntent, type AgentWorkbenchArtifactWorkspaceProps, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchProcess, type AgentWorkbenchProcessProps, type AgentWorkbenchProcessStatus, AgentWorkbenchQuickStart, type AgentWorkbenchQuickStartIntent, type AgentWorkbenchQuickStartProps, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
@@ -184,6 +184,8 @@ var enUS = {
184
184
  moveDown: "Move message down",
185
185
  queued: "Queued messages",
186
186
  uploading: "Uploading",
187
+ uploadFailed: "Upload failed",
188
+ retryAttachment: "Retry attachment upload",
187
189
  noModels: "No models available",
188
190
  message: "Message",
189
191
  attachmentOnly: "Attachment",
@@ -1097,23 +1099,25 @@ function AgentWorkbenchComposer({
1097
1099
  }
1098
1100
  ) : null,
1099
1101
  /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: surfaceRef, className: "agent-workbench-composer__surface min-w-0 max-w-full rounded-lg border border-input bg-background p-3 shadow-sm focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/30", children: [
1100
- viewModel.attachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2("mb-2 flex max-w-full gap-2 overflow-x-auto", classNames?.attachments), children: viewModel.attachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex size-16 shrink-0 items-center justify-center overflow-hidden rounded-md border border-border bg-muted", children: [
1101
- attachment.previewUrl && attachment.mediaType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: attachment.previewUrl, alt: "", className: "size-full object-cover" }) : attachment.mediaType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Image, { className: "size-5 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.File, { className: "size-5 text-muted-foreground" }),
1102
- attachment.status === "uploading" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-0 flex items-center justify-center bg-background/80 text-[10px] font-medium", children: messages.composer.uploading }) : null,
1103
- /* @__PURE__ */ jsxRuntime.jsx(
1104
- Button,
1105
- {
1106
- type: "button",
1107
- variant: "secondary",
1108
- size: "icon",
1109
- className: "absolute right-1 top-1 !size-5 min-w-5 rounded-full bg-background/90 p-0 text-foreground shadow [&_svg]:!size-3",
1110
- "aria-label": messages.composer.removeAttachment,
1111
- onClick: () => onIntent?.({ type: "remove-attachment", attachmentId: attachment.id }),
1112
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3" })
1113
- }
1114
- ),
1115
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-x-0 bottom-0 truncate bg-background/85 px-1 py-0.5 text-[9px]", children: attachment.name })
1116
- ] }, attachment.id)) }) : null,
1102
+ viewModel.attachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { "data-agent-workbench-composer-attachments": true, className: cn2("mb-2 flex max-w-full gap-2 overflow-x-auto overscroll-x-contain pb-1", classNames?.attachments), children: viewModel.attachments.map((attachment) => {
1103
+ const isAttachmentError = attachment.status === "error";
1104
+ const isAttachmentUploading = attachment.status === "uploading";
1105
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { role: isAttachmentError ? "alert" : void 0, className: cn2("flex h-14 min-w-48 max-w-64 shrink-0 items-center gap-2 rounded-md border bg-muted/45 p-1.5", isAttachmentError ? "border-destructive/50 bg-destructive/5" : "border-border"), children: [
1106
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded bg-muted", children: attachment.previewUrl && attachment.mediaType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: attachment.previewUrl, alt: "", className: "size-full object-cover" }) : attachment.mediaType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Image, { className: "size-5 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.File, { className: "size-5 text-muted-foreground" }) }),
1107
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
1108
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-xs font-medium text-foreground", title: attachment.name, children: attachment.name }),
1109
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn2("mt-0.5 flex items-center gap-1 text-[11px]", isAttachmentError ? "text-destructive-text" : "text-muted-foreground"), children: [
1110
+ isAttachmentUploading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LoaderCircle, { className: "size-3 animate-spin", "aria-hidden": "true" }) : null,
1111
+ isAttachmentError ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleAlert, { className: "size-3", "aria-hidden": "true" }) : null,
1112
+ isAttachmentUploading ? messages.composer.uploading : isAttachmentError ? messages.composer.uploadFailed : attachment.mediaType || messages.composer.attachmentOnly
1113
+ ] })
1114
+ ] }),
1115
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex shrink-0 items-center gap-0.5", children: [
1116
+ isAttachmentError ? /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "!size-7 min-w-7 shrink-0 p-0 text-destructive-text hover:text-destructive-text", "aria-label": `${messages.composer.retryAttachment}: ${attachment.name}`, onClick: () => onIntent?.({ type: "retry-attachment", attachmentId: attachment.id }), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "size-3.5" }) }) : null,
1117
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "!size-7 min-w-7 shrink-0 p-0 text-muted-foreground hover:text-foreground", "aria-label": `${messages.composer.removeAttachment}: ${attachment.name}`, onClick: () => onIntent?.({ type: "remove-attachment", attachmentId: attachment.id }), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3.5" }) })
1118
+ ] })
1119
+ ] }, attachment.id);
1120
+ }) }) : null,
1117
1121
  /* @__PURE__ */ jsxRuntime.jsx(
1118
1122
  AutosizeTextarea,
1119
1123
  {
@@ -1122,7 +1126,7 @@ function AgentWorkbenchComposer({
1122
1126
  maxHeight: 256,
1123
1127
  "aria-label": messages.composer.message,
1124
1128
  placeholder: viewModel.placeholder,
1125
- className: cn2("min-w-0 w-full resize-none rounded-none border-0 bg-transparent px-0 py-0 text-sm leading-relaxed text-foreground shadow-none focus-visible:ring-0 focus-visible:ring-offset-0", classNames?.textarea),
1129
+ className: cn2("min-w-0 w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent px-0 py-0 text-sm leading-relaxed text-foreground shadow-none focus-visible:ring-0 focus-visible:ring-offset-0", classNames?.textarea),
1126
1130
  onChange: (event) => onIntent?.({ type: "change-value", value: event.target.value }),
1127
1131
  onKeyDown: (event) => {
1128
1132
  if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
@@ -1133,7 +1137,7 @@ function AgentWorkbenchComposer({
1133
1137
  }
1134
1138
  ),
1135
1139
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("agent-workbench-composer__toolbar mt-2 flex min-h-8 min-w-0 max-w-full items-center gap-2", isNarrow ? "flex-wrap" : "flex-nowrap", classNames?.toolbar), children: [
1136
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("agent-workbench-composer__controls flex min-w-0 max-w-full flex-1 items-center gap-1.5", isNarrow ? "w-full flex-wrap" : "flex-nowrap"), children: [
1140
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-agent-workbench-composer-controls": true, className: cn2("agent-workbench-composer__controls flex min-w-0 max-w-full flex-1 items-center gap-1.5", isNarrow ? "w-full flex-wrap" : "flex-nowrap overflow-x-auto overscroll-x-contain pb-1"), children: [
1137
1141
  viewModel.capabilities.attachments ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1138
1142
  /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "icon", className: iconButtonClass, "aria-label": messages.composer.attach, onClick: () => fileInputRef.current?.click(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Paperclip, { className: "size-4" }) }),
1139
1143
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1166,7 +1170,7 @@ function AgentWorkbenchComposer({
1166
1170
  className: "h-7 min-w-0 gap-1.5 px-2.5 text-xs text-foreground/75 shadow-none hover:text-foreground data-[state=active]:bg-primary/10 data-[state=active]:text-primary data-[state=active]:shadow-none",
1167
1171
  children: [
1168
1172
  action.icon ? /* @__PURE__ */ jsxRuntime.jsx(ActionIcon, { className: "size-3.5" }) : null,
1169
- action.label
1173
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-32 truncate", children: action.label })
1170
1174
  ]
1171
1175
  },
1172
1176
  action.id