@agi-cli/web-sdk 0.1.109 → 0.1.111

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 (58) hide show
  1. package/dist/components/chat/ChatInput.d.ts +7 -0
  2. package/dist/components/chat/ChatInput.d.ts.map +1 -1
  3. package/dist/components/chat/ChatInput.js +16 -10
  4. package/dist/components/chat/ChatInput.js.map +1 -1
  5. package/dist/components/chat/ChatInputContainer.d.ts.map +1 -1
  6. package/dist/components/chat/ChatInputContainer.js +14 -1
  7. package/dist/components/chat/ChatInputContainer.js.map +1 -1
  8. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -1
  9. package/dist/components/messages/UserMessageGroup.js +36 -19
  10. package/dist/components/messages/UserMessageGroup.js.map +1 -1
  11. package/dist/components/messages/renderers/BashRenderer.d.ts.map +1 -1
  12. package/dist/components/messages/renderers/BashRenderer.js +29 -26
  13. package/dist/components/messages/renderers/BashRenderer.js.map +1 -1
  14. package/dist/components/messages/renderers/GitStatusRenderer.d.ts.map +1 -1
  15. package/dist/components/messages/renderers/GitStatusRenderer.js +7 -3
  16. package/dist/components/messages/renderers/GitStatusRenderer.js.map +1 -1
  17. package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -1
  18. package/dist/components/messages/renderers/ListRenderer.js +9 -4
  19. package/dist/components/messages/renderers/ListRenderer.js.map +1 -1
  20. package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -1
  21. package/dist/components/messages/renderers/SearchRenderer.js +10 -26
  22. package/dist/components/messages/renderers/SearchRenderer.js.map +1 -1
  23. package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -1
  24. package/dist/components/messages/renderers/TreeRenderer.js +7 -3
  25. package/dist/components/messages/renderers/TreeRenderer.js.map +1 -1
  26. package/dist/components/messages/renderers/shared/CopyButton.d.ts +7 -0
  27. package/dist/components/messages/renderers/shared/CopyButton.d.ts.map +1 -0
  28. package/dist/components/messages/renderers/shared/CopyButton.js +17 -0
  29. package/dist/components/messages/renderers/shared/CopyButton.js.map +1 -0
  30. package/dist/components/messages/renderers/shared/ToolContentBox.d.ts +13 -0
  31. package/dist/components/messages/renderers/shared/ToolContentBox.d.ts.map +1 -0
  32. package/dist/components/messages/renderers/shared/ToolContentBox.js +9 -0
  33. package/dist/components/messages/renderers/shared/ToolContentBox.js.map +1 -0
  34. package/dist/components/messages/renderers/shared/ToolHeader.d.ts +29 -0
  35. package/dist/components/messages/renderers/shared/ToolHeader.d.ts.map +1 -0
  36. package/dist/components/messages/renderers/shared/ToolHeader.js +69 -0
  37. package/dist/components/messages/renderers/shared/ToolHeader.js.map +1 -0
  38. package/dist/components/messages/renderers/shared/index.d.ts +4 -0
  39. package/dist/components/messages/renderers/shared/index.d.ts.map +1 -0
  40. package/dist/components/messages/renderers/shared/index.js +4 -0
  41. package/dist/components/messages/renderers/shared/index.js.map +1 -0
  42. package/dist/components/messages/renderers/types.d.ts +26 -1
  43. package/dist/components/messages/renderers/types.d.ts.map +1 -1
  44. package/dist/components/messages/renderers/utils.d.ts +15 -0
  45. package/dist/components/messages/renderers/utils.d.ts.map +1 -1
  46. package/dist/components/messages/renderers/utils.js +42 -0
  47. package/dist/components/messages/renderers/utils.js.map +1 -1
  48. package/dist/hooks/index.d.ts +1 -0
  49. package/dist/hooks/index.d.ts.map +1 -1
  50. package/dist/hooks/index.js +1 -0
  51. package/dist/hooks/index.js.map +1 -1
  52. package/dist/hooks/useImageUpload.d.ts +28 -0
  53. package/dist/hooks/useImageUpload.d.ts.map +1 -0
  54. package/dist/hooks/useImageUpload.js +197 -0
  55. package/dist/hooks/useImageUpload.js.map +1 -0
  56. package/dist/types/api.d.ts +5 -0
  57. package/dist/types/api.d.ts.map +1 -1
  58. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"SearchRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/SearchRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,wBAAgB,cAAc,CAAC,EAC9B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACR,EAAE,aAAa,2CA8Hf"}
1
+ {"version":3,"file":"SearchRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/SearchRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAU7C,wBAAgB,cAAc,CAAC,EAC9B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACR,EAAE,aAAa,2CAuGf"}
@@ -1,32 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ChevronDown, ChevronRight, AlertCircle } from 'lucide-react';
3
- import { formatDuration } from './utils';
2
+ import { formatDuration, isToolError, getErrorMessage } from './utils';
4
3
  import { ToolErrorDisplay } from './ToolErrorDisplay';
4
+ import { ToolHeader, ToolHeaderSeparator, ToolHeaderDetail, ToolHeaderMeta, } from './shared';
5
5
  export function SearchRenderer({ contentJson, toolDurationMs, isExpanded, onToggle, }) {
6
6
  const result = contentJson.result || {};
7
7
  const matches = result.matches || [];
8
8
  const files = result.files || [];
9
9
  const timeStr = formatDuration(toolDurationMs);
10
- // Check for errors
11
- const hasError = contentJson.error ||
12
- (result &&
13
- typeof result === 'object' &&
14
- 'ok' in result &&
15
- result.ok === false) ||
16
- (result && 'error' in result);
17
- const errorMessage = typeof contentJson.error === 'string'
18
- ? contentJson.error
19
- : result &&
20
- typeof result === 'object' &&
21
- 'error' in result &&
22
- typeof result.error === 'string'
23
- ? result.error
24
- : null;
25
- const errorStack = result &&
26
- typeof result === 'object' &&
27
- 'stack' in result &&
28
- typeof result.stack === 'string'
29
- ? result.stack
10
+ const hasError = isToolError(result) || !!contentJson.error;
11
+ const errorMessage = getErrorMessage(result) ||
12
+ (typeof contentJson.error === 'string' ? contentJson.error : null);
13
+ const errorStack = result && typeof result === 'object' && 'stack' in result
14
+ ? String(result.stack)
30
15
  : undefined;
31
16
  // Determine what to show - matches for grep/ripgrep, files for glob
32
17
  const itemCount = matches.length > 0 ? matches.length : files.length;
@@ -50,11 +35,10 @@ export function SearchRenderer({ contentJson, toolDurationMs, isExpanded, onTogg
50
35
  }
51
36
  return '';
52
37
  })();
53
- return (_jsxs("div", { className: "text-xs", children: [_jsxs("button", { type: "button", onClick: onToggle, className: `flex items-center gap-2 transition-colors ${hasError
54
- ? 'text-red-700 dark:text-red-300 hover:text-red-600 dark:hover:text-red-200'
55
- : 'text-amber-700 dark:text-amber-300 hover:text-amber-600 dark:hover:text-amber-200'}`, children: [isExpanded ? (_jsx(ChevronDown, { className: "h-3 w-3" })) : (_jsx(ChevronRight, { className: "h-3 w-3" })), hasError && (_jsx(AlertCircle, { className: "h-3 w-3 flex-shrink-0 text-red-600 dark:text-red-400" })), _jsxs("span", { className: "font-medium", children: ["search", hasError ? ' error' : ''] }), searchTerm && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground/70", children: "\u00B7" }), _jsxs("span", { className: "font-mono text-foreground/90 text-[11px]", children: ["\"", searchTerm.length > 30
38
+ const canExpand = itemCount > 0 || hasError;
39
+ return (_jsxs("div", { className: "text-xs", children: [_jsxs(ToolHeader, { toolName: "search", isExpanded: isExpanded, onToggle: onToggle, isError: hasError, colorVariant: "amber", canExpand: canExpand, children: [searchTerm && (_jsxs(_Fragment, { children: [_jsx(ToolHeaderSeparator, {}), _jsxs("span", { className: "font-mono text-foreground/90 text-[11px]", children: ["\"", searchTerm.length > 30
56
40
  ? `${searchTerm.slice(0, 30)}…`
57
- : searchTerm, "\""] })] })), _jsx("span", { className: "text-muted-foreground/70", children: "\u00B7" }), _jsxs("span", { className: "text-foreground/70", children: [itemCount, " ", itemLabel] }), _jsxs("span", { className: "text-muted-foreground/80", children: ["\u00B7 ", timeStr] })] }), isExpanded && hasError && errorMessage && (_jsx(ToolErrorDisplay, { error: errorMessage, stack: errorStack, showStack: true })), isExpanded && !hasError && matches.length > 0 && (_jsx("div", { className: "mt-2 ml-5 space-y-1 max-h-96 overflow-y-auto", children: matches.map((match, i) => {
41
+ : searchTerm, "\""] })] })), _jsx(ToolHeaderSeparator, {}), _jsxs(ToolHeaderDetail, { children: [itemCount, " ", itemLabel] }), _jsx(ToolHeaderSeparator, {}), _jsx(ToolHeaderMeta, { children: timeStr })] }), isExpanded && hasError && errorMessage && (_jsx(ToolErrorDisplay, { error: errorMessage, stack: errorStack, showStack: true })), isExpanded && !hasError && matches.length > 0 && (_jsx("div", { className: "mt-2 ml-5 space-y-1 max-h-96 overflow-y-auto", children: matches.map((match, i) => {
58
42
  const m = match;
59
43
  return (_jsxs("div", { className: "text-xs font-mono bg-card/60 border border-border rounded px-2 py-1", children: [_jsxs("div", { className: "text-blue-600 dark:text-blue-400 truncate", children: [m.file, ":", m.line] }), _jsx("div", { className: "text-foreground/80 truncate", children: m.text })] }, `${m.file}-${m.line}-${i}`));
60
44
  }) })), isExpanded && !hasError && files.length > 0 && matches.length === 0 && (_jsx("div", { className: "mt-2 ml-5 space-y-0.5 max-h-96 overflow-y-auto", children: files.map((file) => (_jsx("div", { className: "text-xs font-mono text-foreground/70 truncate", children: String(file) }, String(file)))) }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"SearchRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/SearchRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/SearchRenderer.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/TreeRenderer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7C,wBAAgB,YAAY,CAAC,EAC5B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACR,EAAE,aAAa,2CAoDf"}
1
+ {"version":3,"file":"TreeRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/TreeRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAU7C,wBAAgB,YAAY,CAAC,EAC5B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACR,EAAE,aAAa,2CAwDf"}
@@ -1,17 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ChevronDown, ChevronRight } from 'lucide-react';
3
2
  import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
4
3
  import { prism, vscDarkPlus, } from 'react-syntax-highlighter/dist/esm/styles/prism';
5
- import { formatDuration } from './utils';
4
+ import { formatDuration, isToolError, getErrorMessage } from './utils';
5
+ import { ToolHeader, ToolHeaderSeparator, ToolHeaderDetail, ToolHeaderMeta, } from './shared';
6
+ import { ToolErrorDisplay } from './ToolErrorDisplay';
6
7
  export function TreeRenderer({ contentJson, toolDurationMs, isExpanded, onToggle, }) {
7
8
  const result = contentJson.result || {};
9
+ const hasError = isToolError(result);
10
+ const errorMessage = getErrorMessage(result);
8
11
  const tree = String(result.tree || '');
9
12
  const lines = tree.split('\n').length;
10
13
  const timeStr = formatDuration(toolDurationMs);
11
14
  const syntaxTheme = document?.documentElement.classList.contains('dark')
12
15
  ? vscDarkPlus
13
16
  : prism;
14
- return (_jsxs("div", { className: "text-xs", children: [_jsxs("button", { type: "button", onClick: onToggle, className: "flex items-center gap-2 text-cyan-700 dark:text-cyan-300 transition-colors hover:text-cyan-600 dark:hover:text-cyan-200", children: [isExpanded ? (_jsx(ChevronDown, { className: "h-3 w-3" })) : (_jsx(ChevronRight, { className: "h-3 w-3" })), _jsx("span", { className: "font-medium", children: "tree" }), _jsx("span", { className: "text-muted-foreground/70", children: "\u00B7" }), _jsxs("span", { className: "text-foreground/70", children: [lines, " ", lines === 1 ? 'line' : 'lines'] }), _jsxs("span", { className: "text-muted-foreground/80", children: ["\u00B7 ", timeStr] })] }), isExpanded && tree && (_jsx("div", { className: "mt-2 ml-5 bg-card/60 border border-border rounded-lg overflow-hidden max-h-96 overflow-y-auto max-w-full", children: _jsx("div", { className: "overflow-x-auto max-w-full", children: _jsx(SyntaxHighlighter, { language: "bash", style: syntaxTheme, customStyle: {
17
+ const canExpand = tree.length > 0 || hasError;
18
+ return (_jsxs("div", { className: "text-xs", children: [_jsxs(ToolHeader, { toolName: "tree", isExpanded: isExpanded, onToggle: onToggle, isError: hasError, colorVariant: "cyan", canExpand: canExpand, children: [_jsx(ToolHeaderSeparator, {}), _jsxs(ToolHeaderDetail, { children: [lines, " ", lines === 1 ? 'line' : 'lines'] }), _jsx(ToolHeaderSeparator, {}), _jsx(ToolHeaderMeta, { children: timeStr })] }), isExpanded && hasError && errorMessage && (_jsx(ToolErrorDisplay, { error: errorMessage })), isExpanded && !hasError && tree && (_jsx("div", { className: "mt-2 ml-5 bg-card/60 border border-border rounded-lg overflow-hidden max-h-96 overflow-y-auto max-w-full", children: _jsx("div", { className: "overflow-x-auto max-w-full", children: _jsx(SyntaxHighlighter, { language: "bash", style: syntaxTheme, customStyle: {
15
19
  margin: 0,
16
20
  padding: '0.75rem',
17
21
  fontSize: '0.75rem',
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/TreeRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACN,KAAK,EACL,WAAW,GACX,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,EAC5B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACO;IACf,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvE,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,KAAK,CAAC;IAET,OAAO,CACN,eAAK,SAAS,EAAC,SAAS,aACvB,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,yHAAyH,aAElI,UAAU,CAAC,CAAC,CAAC,CACb,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,CACnC,CAAC,CAAC,CAAC,CACH,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,CACpC,EACD,eAAM,SAAS,EAAC,aAAa,qBAAY,EACzC,eAAM,SAAS,EAAC,0BAA0B,uBAAS,EACnD,gBAAM,SAAS,EAAC,oBAAoB,aAClC,KAAK,OAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IACjC,EACP,gBAAM,SAAS,EAAC,0BAA0B,wBAAI,OAAO,IAAQ,IACrD,EACR,UAAU,IAAI,IAAI,IAAI,CACtB,cAAK,SAAS,EAAC,0GAA0G,YACxH,cAAK,SAAS,EAAC,4BAA4B,YAC1C,KAAC,iBAAiB,IACjB,QAAQ,EAAC,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE;4BACZ,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,SAAS;4BACnB,UAAU,EAAE,KAAK;4BACjB,UAAU,EAAE,aAAa;4BACzB,QAAQ,EAAE,MAAM;yBAChB,EACD,SAAS,QACT,aAAa,kBAEZ,IAAI,GACc,GACf,GACD,CACN,IACI,CACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"TreeRenderer.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/TreeRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACN,KAAK,EACL,WAAW,GACX,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,EAC5B,WAAW,EACX,cAAc,EACd,UAAU,EACV,QAAQ,GACO;IACf,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvE,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,KAAK,CAAC;IACT,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC;IAE9C,OAAO,CACN,eAAK,SAAS,EAAC,SAAS,aACvB,MAAC,UAAU,IACV,QAAQ,EAAC,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,EACjB,YAAY,EAAC,MAAM,EACnB,SAAS,EAAE,SAAS,aAEpB,KAAC,mBAAmB,KAAG,EACvB,MAAC,gBAAgB,eACf,KAAK,OAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IACrB,EACnB,KAAC,mBAAmB,KAAG,EACvB,KAAC,cAAc,cAAE,OAAO,GAAkB,IAC9B,EACZ,UAAU,IAAI,QAAQ,IAAI,YAAY,IAAI,CAC1C,KAAC,gBAAgB,IAAC,KAAK,EAAE,YAAY,GAAI,CACzC,EACA,UAAU,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,CACnC,cAAK,SAAS,EAAC,0GAA0G,YACxH,cAAK,SAAS,EAAC,4BAA4B,YAC1C,KAAC,iBAAiB,IACjB,QAAQ,EAAC,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE;4BACZ,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,SAAS;4BACnB,UAAU,EAAE,KAAK;4BACjB,UAAU,EAAE,aAAa;4BACzB,QAAQ,EAAE,MAAM;yBAChB,EACD,SAAS,QACT,aAAa,kBAEZ,IAAI,GACc,GACf,GACD,CACN,IACI,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface CopyButtonProps {
2
+ text: string;
3
+ className?: string;
4
+ }
5
+ export declare function CopyButton({ text, className }: CopyButtonProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=CopyButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/CopyButton.tsx"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,SAAc,EAAE,EAAE,eAAe,2CA0BnE"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Copy, Check } from 'lucide-react';
4
+ export function CopyButton({ text, className = '' }) {
5
+ const [copied, setCopied] = useState(false);
6
+ const handleCopy = async (e) => {
7
+ e.stopPropagation();
8
+ try {
9
+ await navigator.clipboard.writeText(text);
10
+ setCopied(true);
11
+ setTimeout(() => setCopied(false), 2000);
12
+ }
13
+ catch { }
14
+ };
15
+ return (_jsx("button", { type: "button", onClick: handleCopy, className: `p-1 rounded hover:bg-muted/50 text-muted-foreground hover:text-foreground transition-colors ${className}`, title: "Copy", children: copied ? (_jsx(Check, { className: "h-3 w-3 text-emerald-500" })) : (_jsx(Copy, { className: "h-3 w-3" })) }));
16
+ }
17
+ //# sourceMappingURL=CopyButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyButton.js","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/CopyButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAmB;IACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,KAAK,EAAE,CAAmB,EAAE,EAAE;QAChD,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC,CAAC;IAEF,OAAO,CACN,iBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,+FAA+F,SAAS,EAAE,EACrH,KAAK,EAAC,MAAM,YAEX,MAAM,CAAC,CAAC,CAAC,CACT,KAAC,KAAK,IAAC,SAAS,EAAC,0BAA0B,GAAG,CAC9C,CAAC,CAAC,CAAC,CACH,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,CAC5B,GACO,CACT,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ interface ToolContentBoxProps {
3
+ title: string;
4
+ icon?: ReactNode;
5
+ subtitle?: string;
6
+ copyText?: string;
7
+ variant?: 'default' | 'error';
8
+ maxHeight?: string;
9
+ children: ReactNode;
10
+ }
11
+ export declare function ToolContentBox({ title, icon, subtitle, copyText, variant, maxHeight, children, }: ToolContentBoxProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=ToolContentBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolContentBox.d.ts","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/ToolContentBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,mBAAmB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAmB,EACnB,SAAsB,EACtB,QAAQ,GACR,EAAE,mBAAmB,2CA4BrB"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CopyButton } from './CopyButton';
3
+ export function ToolContentBox({ title, icon, subtitle, copyText, variant = 'default', maxHeight = 'max-h-80', children, }) {
4
+ const isError = variant === 'error';
5
+ return (_jsxs("div", { className: `bg-card/60 border rounded-lg overflow-hidden flex flex-col ${maxHeight} ${isError ? 'border-red-500/50' : 'border-border'}`, children: [_jsxs("div", { className: `flex items-center justify-between gap-2 text-xs px-3 py-1.5 border-b border-border sticky top-0 ${isError
6
+ ? 'text-red-600 dark:text-red-400 bg-red-500/10'
7
+ : 'text-muted-foreground bg-muted/30'}`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [icon, _jsx("span", { children: title }), subtitle && (_jsx("span", { className: "text-muted-foreground/60", children: subtitle }))] }), copyText && _jsx(CopyButton, { text: copyText })] }), _jsx("div", { className: "overflow-auto flex-1", children: children })] }));
8
+ }
9
+ //# sourceMappingURL=ToolContentBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolContentBox.js","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/ToolContentBox.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,MAAM,UAAU,cAAc,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,SAAS,GAAG,UAAU,EACtB,QAAQ,GACa;IACrB,MAAM,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC;IAEpC,OAAO,CACN,eACC,SAAS,EAAE,8DAA8D,SAAS,IACjF,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eACjC,EAAE,aAEF,eACC,SAAS,EAAE,mGACV,OAAO;oBACN,CAAC,CAAC,8CAA8C;oBAChD,CAAC,CAAC,mCACJ,EAAE,aAEF,eAAK,SAAS,EAAC,yBAAyB,aACtC,IAAI,EACL,yBAAO,KAAK,GAAQ,EACnB,QAAQ,IAAI,CACZ,eAAM,SAAS,EAAC,0BAA0B,YAAE,QAAQ,GAAQ,CAC5D,IACI,EACL,QAAQ,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,QAAQ,GAAI,IACtC,EACN,cAAK,SAAS,EAAC,sBAAsB,YAAE,QAAQ,GAAO,IACjD,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from 'react';
2
+ type ColorVariant = 'default' | 'blue' | 'emerald' | 'purple' | 'cyan' | 'amber' | 'red';
3
+ interface ToolHeaderProps {
4
+ toolName: string;
5
+ isExpanded: boolean;
6
+ onToggle: () => void;
7
+ isError?: boolean;
8
+ colorVariant?: ColorVariant;
9
+ canExpand?: boolean;
10
+ children?: ReactNode;
11
+ }
12
+ export declare function ToolHeader({ toolName, isExpanded, onToggle, isError, colorVariant, canExpand, children, }: ToolHeaderProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function ToolHeaderSeparator(): import("react/jsx-runtime").JSX.Element;
14
+ export declare function ToolHeaderDetail({ children, className, }: {
15
+ children: ReactNode;
16
+ className?: string;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ export declare function ToolHeaderMeta({ children, className, }: {
19
+ children: ReactNode;
20
+ className?: string;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function ToolHeaderSuccess({ children }: {
23
+ children: ReactNode;
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ export declare function ToolHeaderError({ children }: {
26
+ children: ReactNode;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=ToolHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolHeader.d.ts","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/ToolHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,KAAK,YAAY,GACd,SAAS,GACT,MAAM,GACN,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,GACP,KAAK,CAAC;AAkDT,UAAU,eAAe;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EAC1B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAe,EACf,YAAwB,EACxB,SAAgB,EAChB,QAAQ,GACR,EAAE,eAAe,2CA+BjB;AAED,wBAAgB,mBAAmB,4CAElC;AAED,wBAAgB,gBAAgB,CAAC,EAChC,QAAQ,EACR,SAAc,GACd,EAAE;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,2CAEA;AAED,wBAAgB,cAAc,CAAC,EAC9B,QAAQ,EACR,SAAc,GACd,EAAE;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,2CAQA;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMtE;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMpE"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronDown, ChevronRight, AlertCircle } from 'lucide-react';
3
+ const colorClasses = {
4
+ default: {
5
+ normal: 'text-muted-foreground',
6
+ hover: 'hover:text-foreground',
7
+ error: 'text-red-700 dark:text-red-300',
8
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
9
+ },
10
+ blue: {
11
+ normal: 'text-blue-700 dark:text-blue-300',
12
+ hover: 'hover:text-blue-600 dark:hover:text-blue-200',
13
+ error: 'text-red-700 dark:text-red-300',
14
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
15
+ },
16
+ emerald: {
17
+ normal: 'text-emerald-700 dark:text-emerald-300',
18
+ hover: 'hover:text-emerald-600 dark:hover:text-emerald-200',
19
+ error: 'text-red-700 dark:text-red-300',
20
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
21
+ },
22
+ purple: {
23
+ normal: 'text-purple-700 dark:text-purple-300',
24
+ hover: 'hover:text-purple-600 dark:hover:text-purple-200',
25
+ error: 'text-red-700 dark:text-red-300',
26
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
27
+ },
28
+ cyan: {
29
+ normal: 'text-cyan-700 dark:text-cyan-300',
30
+ hover: 'hover:text-cyan-600 dark:hover:text-cyan-200',
31
+ error: 'text-red-700 dark:text-red-300',
32
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
33
+ },
34
+ amber: {
35
+ normal: 'text-amber-700 dark:text-amber-300',
36
+ hover: 'hover:text-amber-600 dark:hover:text-amber-200',
37
+ error: 'text-red-700 dark:text-red-300',
38
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
39
+ },
40
+ red: {
41
+ normal: 'text-red-700 dark:text-red-300',
42
+ hover: 'hover:text-red-600 dark:hover:text-red-200',
43
+ error: 'text-red-700 dark:text-red-300',
44
+ errorHover: 'hover:text-red-600 dark:hover:text-red-200',
45
+ },
46
+ };
47
+ export function ToolHeader({ toolName, isExpanded, onToggle, isError = false, colorVariant = 'default', canExpand = true, children, }) {
48
+ const colors = colorClasses[colorVariant];
49
+ const colorClass = isError
50
+ ? `${colors.error} ${colors.errorHover}`
51
+ : `${colors.normal} ${colors.hover}`;
52
+ return (_jsxs("button", { type: "button", onClick: () => canExpand && onToggle(), className: `flex items-center gap-2 transition-colors w-full min-w-0 ${colorClass}`, children: [canExpand ? (isExpanded ? (_jsx(ChevronDown, { className: "h-3 w-3 flex-shrink-0" })) : (_jsx(ChevronRight, { className: "h-3 w-3 flex-shrink-0" }))) : (_jsx("div", { className: "w-3 flex-shrink-0" })), isError && (_jsx(AlertCircle, { className: "h-3 w-3 flex-shrink-0 text-red-600 dark:text-red-400" })), _jsxs("span", { className: "font-medium flex-shrink-0", children: [toolName, isError ? ' error' : ''] }), children] }));
53
+ }
54
+ export function ToolHeaderSeparator() {
55
+ return _jsx("span", { className: "text-muted-foreground/70 flex-shrink-0", children: "\u00B7" });
56
+ }
57
+ export function ToolHeaderDetail({ children, className = '', }) {
58
+ return _jsx("span", { className: `text-foreground/70 ${className}`, children: children });
59
+ }
60
+ export function ToolHeaderMeta({ children, className = '', }) {
61
+ return (_jsx("span", { className: `text-muted-foreground/80 flex-shrink-0 whitespace-nowrap ${className}`, children: children }));
62
+ }
63
+ export function ToolHeaderSuccess({ children }) {
64
+ return (_jsx("span", { className: "text-emerald-600 dark:text-emerald-400 flex-shrink-0", children: children }));
65
+ }
66
+ export function ToolHeaderError({ children }) {
67
+ return (_jsx("span", { className: "text-red-600 dark:text-red-400 flex-shrink-0", children: children }));
68
+ }
69
+ //# sourceMappingURL=ToolHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolHeader.js","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/ToolHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { CopyButton } from './CopyButton';
2
+ export { ToolContentBox } from './ToolContentBox';
3
+ export { ToolHeader, ToolHeaderSeparator, ToolHeaderDetail, ToolHeaderMeta, ToolHeaderSuccess, ToolHeaderError, } from './ToolHeader';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,GACf,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { CopyButton } from './CopyButton';
2
+ export { ToolContentBox } from './ToolContentBox';
3
+ export { ToolHeader, ToolHeaderSeparator, ToolHeaderDetail, ToolHeaderMeta, ToolHeaderSuccess, ToolHeaderError, } from './ToolHeader';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/messages/renderers/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,GACf,MAAM,cAAc,CAAC"}
@@ -1,3 +1,22 @@
1
+ export type ToolErrorType = 'validation' | 'not_found' | 'permission' | 'execution' | 'timeout' | 'unsupported';
2
+ export interface ToolErrorResponse {
3
+ ok: false;
4
+ error: string;
5
+ errorType?: ToolErrorType;
6
+ details?: {
7
+ parameter?: string;
8
+ value?: unknown;
9
+ constraint?: string;
10
+ suggestion?: string;
11
+ [key: string]: unknown;
12
+ };
13
+ stack?: string;
14
+ }
15
+ export interface ToolSuccessResponse {
16
+ ok: true;
17
+ [key: string]: unknown;
18
+ }
19
+ export type ToolResponse = ToolSuccessResponse | ToolErrorResponse;
1
20
  export interface ToolCallArgs {
2
21
  text?: string;
3
22
  message?: string;
@@ -14,9 +33,10 @@ export interface ToolCallArgs {
14
33
  }
15
34
  export interface ToolResultData {
16
35
  done?: boolean;
36
+ ok?: boolean;
37
+ error?: string;
17
38
  text?: string;
18
39
  result?: string | Record<string, unknown>;
19
- ok?: boolean;
20
40
  message?: string;
21
41
  pct?: number;
22
42
  stage?: string;
@@ -41,6 +61,11 @@ export interface ToolResultData {
41
61
  files?: unknown[];
42
62
  cwd?: string;
43
63
  output?: string;
64
+ errorType?: ToolErrorType;
65
+ details?: {
66
+ suggestion?: string;
67
+ [key: string]: unknown;
68
+ };
44
69
  diff?: string;
45
70
  summary?: string;
46
71
  changes?: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/types.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,19 @@
8
8
  * formatDuration(5678) // "5.7s"
9
9
  */
10
10
  export declare function formatDuration(ms: number | undefined): string;
11
+ /**
12
+ * Check if a tool result is an error response.
13
+ * Handles both the new ok: false pattern and legacy error patterns.
14
+ */
15
+ export declare function isToolError(result: unknown): boolean;
16
+ /**
17
+ * Extract the error message from a tool result.
18
+ * Checks multiple common fields: error, stderr, message, detail, details, reason.
19
+ */
20
+ export declare function getErrorMessage(result: unknown): string | null;
21
+ /**
22
+ * Extract error details from a tool result.
23
+ * Returns the details object if present and valid.
24
+ */
25
+ export declare function getErrorDetails(result: unknown): Record<string, unknown> | null;
11
26
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAIpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAa9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAOhC"}
@@ -15,4 +15,46 @@ export function formatDuration(ms) {
15
15
  }
16
16
  return `${ms}ms`;
17
17
  }
18
+ /**
19
+ * Check if a tool result is an error response.
20
+ * Handles both the new ok: false pattern and legacy error patterns.
21
+ */
22
+ export function isToolError(result) {
23
+ if (!result || typeof result !== 'object')
24
+ return false;
25
+ const obj = result;
26
+ return obj.ok === false || 'error' in obj || obj.success === false;
27
+ }
28
+ /**
29
+ * Extract the error message from a tool result.
30
+ * Checks multiple common fields: error, stderr, message, detail, details, reason.
31
+ */
32
+ export function getErrorMessage(result) {
33
+ if (!result || typeof result !== 'object')
34
+ return null;
35
+ const obj = result;
36
+ const keys = ['error', 'stderr', 'message', 'detail', 'details', 'reason'];
37
+ for (const key of keys) {
38
+ const value = obj[key];
39
+ if (typeof value === 'string') {
40
+ const trimmed = value.trim();
41
+ if (trimmed.length)
42
+ return trimmed;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ /**
48
+ * Extract error details from a tool result.
49
+ * Returns the details object if present and valid.
50
+ */
51
+ export function getErrorDetails(result) {
52
+ if (!result || typeof result !== 'object')
53
+ return null;
54
+ const obj = result;
55
+ if (obj.details && typeof obj.details === 'object') {
56
+ return obj.details;
57
+ }
58
+ return null;
59
+ }
18
60
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,EAAsB;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,EAAE,IAAI,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/messages/renderers/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,EAAsB;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,EAAE,IAAI,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAe;IAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,OAAO,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,OAAO,CAAC;QACpC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,MAAe;IAEf,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,GAAG,CAAC,OAAkC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -8,4 +8,5 @@ export * from './useSessionStream';
8
8
  export * from './useTheme';
9
9
  export * from './useWorkingDirectory';
10
10
  export * from './useKeyboardShortcuts';
11
+ export * from './useImageUpload';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
@@ -9,4 +9,5 @@ export * from './useSessionStream';
9
9
  export * from './useTheme';
10
10
  export * from './useWorkingDirectory';
11
11
  export * from './useKeyboardShortcuts';
12
+ export * from './useImageUpload';
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type DragEvent, type ClipboardEvent } from 'react';
2
+ export interface ImageAttachment {
3
+ id: string;
4
+ file: File;
5
+ preview: string;
6
+ data: string;
7
+ mediaType: string;
8
+ }
9
+ interface UseImageUploadOptions {
10
+ maxImages?: number;
11
+ maxSizeMB?: number;
12
+ pageWide?: boolean;
13
+ }
14
+ export declare function useImageUpload(options?: UseImageUploadOptions): {
15
+ images: ImageAttachment[];
16
+ isDragging: boolean;
17
+ error: string;
18
+ addImages: (files: FileList | File[]) => Promise<void>;
19
+ removeImage: (id: string) => void;
20
+ clearImages: () => void;
21
+ handleDragEnter: (e: DragEvent) => void;
22
+ handleDragLeave: (e: DragEvent) => void;
23
+ handleDragOver: (e: DragEvent) => void;
24
+ handleDrop: (e: DragEvent) => void;
25
+ handlePaste: (e: ClipboardEvent) => void;
26
+ };
27
+ export {};
28
+ //# sourceMappingURL=useImageUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useImageUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useImageUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AA8BD,UAAU,qBAAqB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B;;;;uBAuBlD,QAAQ,GAAG,IAAI,EAAE;sBA6CK,MAAM;;yBAUH,SAAS;yBAQT,SAAS;wBAWV,SAAS;oBAM3C,SAAS;qBAmBT,cAAc;EA2FnB"}