@chat-js/cli 0.6.1 → 0.6.3

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 (154) hide show
  1. package/dist/index.js +17065 -16667
  2. package/package.json +1 -1
  3. package/templates/chat-app/app/(auth)/login/page.tsx +3 -3
  4. package/templates/chat-app/app/(chat)/api/chat/route.ts +4 -60
  5. package/templates/chat-app/app/not-found.tsx +2 -2
  6. package/templates/chat-app/chat.config.ts +3 -0
  7. package/templates/chat-app/components/ai-elements/actions.tsx +44 -44
  8. package/templates/chat-app/components/ai-elements/artifact.tsx +92 -92
  9. package/templates/chat-app/components/ai-elements/code-block.tsx +143 -143
  10. package/templates/chat-app/components/ai-elements/context.tsx +313 -313
  11. package/templates/chat-app/components/ai-elements/conversation.tsx +65 -65
  12. package/templates/chat-app/components/ai-elements/extra/conversation-content-scroll-area.tsx +29 -29
  13. package/templates/chat-app/components/ai-elements/extra/mcp-tool-header.tsx +27 -27
  14. package/templates/chat-app/components/ai-elements/message.tsx +341 -344
  15. package/templates/chat-app/components/ai-elements/parseIncompleteMarkdown.tsx +122 -122
  16. package/templates/chat-app/components/ai-elements/prompt-input.tsx +1059 -1059
  17. package/templates/chat-app/components/ai-elements/reasoning.tsx +131 -131
  18. package/templates/chat-app/components/ai-elements/response.tsx +15 -12
  19. package/templates/chat-app/components/ai-elements/sandbox.tsx +84 -84
  20. package/templates/chat-app/components/ai-elements/shimmer.tsx +47 -47
  21. package/templates/chat-app/components/ai-elements/suggestion.tsx +33 -33
  22. package/templates/chat-app/components/ai-elements/tool.tsx +118 -118
  23. package/templates/chat-app/components/app-sidebar-history-conditional.tsx +3 -3
  24. package/templates/chat-app/components/app-sidebar.tsx +3 -3
  25. package/templates/chat-app/components/connectors-dropdown.tsx +6 -3
  26. package/templates/chat-app/components/deep-research-progress.tsx +1 -1
  27. package/templates/chat-app/components/header-breadcrumb.tsx +14 -11
  28. package/templates/chat-app/components/internal-link.tsx +73 -0
  29. package/templates/chat-app/components/login-form.tsx +5 -5
  30. package/templates/chat-app/components/message-parts.tsx +1 -71
  31. package/templates/chat-app/components/model-selector.tsx +3 -3
  32. package/templates/chat-app/components/new-chat-button.tsx +4 -4
  33. package/templates/chat-app/components/part/document-common.tsx +3 -3
  34. package/templates/chat-app/components/part/document-tool.tsx +3 -3
  35. package/templates/chat-app/components/part/message-annotations.tsx +2 -2
  36. package/templates/chat-app/components/part/tool-part.tsx +92 -0
  37. package/templates/chat-app/components/project-chat-item.tsx +2 -2
  38. package/templates/chat-app/components/research-progress.tsx +2 -2
  39. package/templates/chat-app/components/research-task.tsx +1 -1
  40. package/templates/chat-app/components/research-tasks.tsx +1 -1
  41. package/templates/chat-app/components/settings/connectors-settings.tsx +4 -4
  42. package/templates/chat-app/components/settings/mcp-details-page.tsx +5 -5
  43. package/templates/chat-app/components/settings/settings-nav.tsx +3 -3
  44. package/templates/chat-app/components/sidebar-chat-item.tsx +4 -12
  45. package/templates/chat-app/components/sidebar-project-item.tsx +4 -11
  46. package/templates/chat-app/components/sidebar-top-row.tsx +7 -7
  47. package/templates/chat-app/components/sidebar-user-nav.tsx +3 -3
  48. package/templates/chat-app/components/signup-form.tsx +8 -5
  49. package/templates/chat-app/components/source-badge.tsx +3 -9
  50. package/templates/chat-app/components/sources.tsx +1 -1
  51. package/templates/chat-app/components/ui/accordion.tsx +32 -32
  52. package/templates/chat-app/components/ui/alert-dialog.tsx +103 -103
  53. package/templates/chat-app/components/ui/alert.tsx +36 -36
  54. package/templates/chat-app/components/ui/avatar.tsx +28 -28
  55. package/templates/chat-app/components/ui/badge.tsx +22 -22
  56. package/templates/chat-app/components/ui/breadcrumb.tsx +72 -72
  57. package/templates/chat-app/components/ui/button-group.tsx +58 -58
  58. package/templates/chat-app/components/ui/button.tsx +45 -45
  59. package/templates/chat-app/components/ui/card.tsx +65 -65
  60. package/templates/chat-app/components/ui/checkbox.tsx +16 -16
  61. package/templates/chat-app/components/ui/collapsible.tsx +1 -1
  62. package/templates/chat-app/components/ui/command.tsx +137 -137
  63. package/templates/chat-app/components/ui/dialog.tsx +94 -94
  64. package/templates/chat-app/components/ui/drawer.tsx +68 -68
  65. package/templates/chat-app/components/ui/dropdown-menu.tsx +184 -184
  66. package/templates/chat-app/components/ui/empty.tsx +76 -76
  67. package/templates/chat-app/components/ui/extra/action-container.tsx +3 -3
  68. package/templates/chat-app/components/ui/extra/scroll-area-viewport-ref.tsx +24 -24
  69. package/templates/chat-app/components/ui/form.tsx +112 -112
  70. package/templates/chat-app/components/ui/hover-card.tsx +25 -25
  71. package/templates/chat-app/components/ui/input-group.tsx +126 -126
  72. package/templates/chat-app/components/ui/input.tsx +13 -13
  73. package/templates/chat-app/components/ui/label.tsx +12 -12
  74. package/templates/chat-app/components/ui/popover.tsx +25 -25
  75. package/templates/chat-app/components/ui/progress.tsx +19 -19
  76. package/templates/chat-app/components/ui/resizable.tsx +27 -27
  77. package/templates/chat-app/components/ui/scroll-area.tsx +30 -30
  78. package/templates/chat-app/components/ui/select.tsx +108 -108
  79. package/templates/chat-app/components/ui/separator.tsx +16 -16
  80. package/templates/chat-app/components/ui/sheet.tsx +91 -91
  81. package/templates/chat-app/components/ui/sidebar.tsx +615 -615
  82. package/templates/chat-app/components/ui/skeleton.tsx +7 -7
  83. package/templates/chat-app/components/ui/slider.tsx +50 -50
  84. package/templates/chat-app/components/ui/spinner.tsx +8 -8
  85. package/templates/chat-app/components/ui/switch.tsx +16 -16
  86. package/templates/chat-app/components/ui/table.tsx +71 -71
  87. package/templates/chat-app/components/ui/tabs.tsx +31 -31
  88. package/templates/chat-app/components/ui/textarea.tsx +10 -10
  89. package/templates/chat-app/components/ui/toggle.tsx +31 -31
  90. package/templates/chat-app/components/ui/tooltip.tsx +48 -48
  91. package/templates/chat-app/components/upgrade-cta/limit-display.tsx +7 -7
  92. package/templates/chat-app/components/upgrade-cta/login-cta-banner.tsx +3 -3
  93. package/templates/chat-app/components/upgrade-cta/login-prompt.tsx +3 -3
  94. package/templates/chat-app/hooks/use-mobile.ts +13 -13
  95. package/templates/chat-app/lib/ai/core-chat-agent.ts +25 -14
  96. package/templates/chat-app/lib/ai/eval-agent.ts +4 -5
  97. package/templates/chat-app/lib/ai/gateway-model-defaults.ts +24 -0
  98. package/templates/chat-app/lib/ai/installed-tools.ts +12 -0
  99. package/templates/chat-app/lib/ai/mcp/mcp-client.ts +2 -2
  100. package/templates/chat-app/lib/ai/models.generated.ts +4236 -4585
  101. package/templates/chat-app/lib/ai/tool-renderer-registry.ts +31 -0
  102. package/templates/chat-app/lib/ai/types.ts +15 -20
  103. package/templates/chat-app/lib/config-requirements.ts +11 -6
  104. package/templates/chat-app/lib/config-schema.ts +24 -0
  105. package/templates/chat-app/lib/stores/hooks-message-parts.ts +1 -1
  106. package/templates/chat-app/lib/utils.ts +157 -157
  107. package/templates/chat-app/package.json +1 -1
  108. package/templates/chat-app/scripts/check-env.ts +229 -2
  109. package/templates/chat-app/tools/chatjs/_shared/lib/tool-part.ts +5 -0
  110. package/templates/chat-app/{components/part/weather.tsx → tools/chatjs/get-weather/renderer.tsx} +24 -38
  111. package/templates/chat-app/{components/part/retrieve-url.tsx → tools/chatjs/retrieve-url/renderer.tsx} +20 -15
  112. package/templates/chat-app/{lib/ai/tools/retrieve-url.ts → tools/chatjs/retrieve-url/tool.ts} +46 -7
  113. package/templates/chat-app/tools/chatjs/tools.ts +16 -0
  114. package/templates/chat-app/tools/chatjs/ui.ts +17 -0
  115. package/templates/chat-app/tools/chatjs/word-count/renderer.tsx +50 -0
  116. package/templates/chat-app/tools/chatjs/word-count/tool.ts +30 -0
  117. package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.ts +3 -5
  118. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/deep-research.ts +2 -3
  119. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/pipeline.ts +1 -1
  120. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/types.ts +1 -1
  121. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/utils.ts +7 -7
  122. package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/types.ts +1 -1
  123. package/templates/chat-app/{lib/ai/tools → tools/platform}/generate-video.ts +4 -6
  124. package/templates/chat-app/{lib/ai/tools → tools/platform}/read-document.ts +2 -2
  125. package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/multi-query-web-search.ts +1 -1
  126. package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/web-search.ts +1 -1
  127. package/templates/chat-app/{lib/ai/tools → tools/platform}/tools.ts +54 -30
  128. package/templates/chat-app/{lib/ai/tools → tools/platform}/web-search.ts +7 -5
  129. package/templates/electron/CHANGELOG.md +16 -2
  130. package/templates/electron/package.json +1 -1
  131. package/templates/chat-app/lib/ai/tools/tools-definitions.ts +0 -83
  132. /package/templates/chat-app/{lib/ai/tools/get-weather.ts → tools/chatjs/get-weather/tool.ts} +0 -0
  133. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.javascript.ts +0 -0
  134. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.python.ts +0 -0
  135. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.shared.test.ts +0 -0
  136. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.shared.ts +0 -0
  137. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.types.ts +0 -0
  138. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/configuration.ts +0 -0
  139. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/prompts.ts +0 -0
  140. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/researcher-agent.ts +0 -0
  141. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/supervisor-agent.ts +0 -0
  142. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/code-guidelines.ts +0 -0
  143. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-code-document.ts +0 -0
  144. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-sheet-document.ts +0 -0
  145. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-text-document.ts +0 -0
  146. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-code-document.ts +0 -0
  147. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-sheet-document.ts +0 -0
  148. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-text-document.ts +0 -0
  149. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/sheet-guidelines.ts +0 -0
  150. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/text-guidelines.ts +0 -0
  151. /package/templates/chat-app/{lib/ai/tools → tools/platform}/generate-image.ts +0 -0
  152. /package/templates/chat-app/{lib/ai/tools → tools/platform}/research-updates-schema.ts +0 -0
  153. /package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/search-utils.ts +0 -0
  154. /package/templates/chat-app/{lib/ai/tools → tools/platform}/types.ts +0 -0
@@ -10,91 +10,91 @@ import { cn } from "@/lib/utils";
10
10
  export type ConversationProps = ComponentProps<typeof StickToBottom>;
11
11
 
12
12
  export const Conversation = ({ className, ...props }: ConversationProps) => (
13
- <StickToBottom
14
- className={cn("relative flex-1 overflow-y-hidden", className)}
15
- initial="smooth"
16
- resize="smooth"
17
- role="log"
18
- {...props}
19
- />
13
+ <StickToBottom
14
+ className={cn("relative flex-1 overflow-y-hidden", className)}
15
+ initial="smooth"
16
+ resize="smooth"
17
+ role="log"
18
+ {...props}
19
+ />
20
20
  );
21
21
 
22
22
  export type ConversationContentProps = ComponentProps<
23
- typeof StickToBottom.Content
23
+ typeof StickToBottom.Content
24
24
  >;
25
25
 
26
26
  export const ConversationContent = ({
27
- className,
28
- ...props
27
+ className,
28
+ ...props
29
29
  }: ConversationContentProps) => (
30
- <StickToBottom.Content
31
- className={cn("flex flex-col gap-8 p-4", className)}
32
- {...props}
33
- />
30
+ <StickToBottom.Content
31
+ className={cn("flex flex-col gap-8 p-4", className)}
32
+ {...props}
33
+ />
34
34
  );
35
35
 
36
36
  export type ConversationEmptyStateProps = ComponentProps<"div"> & {
37
- title?: string;
38
- description?: string;
39
- icon?: React.ReactNode;
37
+ title?: string;
38
+ description?: string;
39
+ icon?: React.ReactNode;
40
40
  };
41
41
 
42
42
  export const ConversationEmptyState = ({
43
- className,
44
- title = "No messages yet",
45
- description = "Start a conversation to see messages here",
46
- icon,
47
- children,
48
- ...props
43
+ className,
44
+ title = "No messages yet",
45
+ description = "Start a conversation to see messages here",
46
+ icon,
47
+ children,
48
+ ...props
49
49
  }: ConversationEmptyStateProps) => (
50
- <div
51
- className={cn(
52
- "flex size-full flex-col items-center justify-center gap-3 p-8 text-center",
53
- className
54
- )}
55
- {...props}
56
- >
57
- {children ?? (
58
- <>
59
- {icon && <div className="text-muted-foreground">{icon}</div>}
60
- <div className="space-y-1">
61
- <h3 className="font-medium text-sm">{title}</h3>
62
- {description && (
63
- <p className="text-muted-foreground text-sm">{description}</p>
64
- )}
65
- </div>
66
- </>
67
- )}
68
- </div>
50
+ <div
51
+ className={cn(
52
+ "flex size-full flex-col items-center justify-center gap-3 p-8 text-center",
53
+ className,
54
+ )}
55
+ {...props}
56
+ >
57
+ {children ?? (
58
+ <>
59
+ {icon && <div className="text-muted-foreground">{icon}</div>}
60
+ <div className="space-y-1">
61
+ <h3 className="font-medium text-sm">{title}</h3>
62
+ {description && (
63
+ <p className="text-muted-foreground text-sm">{description}</p>
64
+ )}
65
+ </div>
66
+ </>
67
+ )}
68
+ </div>
69
69
  );
70
70
 
71
71
  export type ConversationScrollButtonProps = ComponentProps<typeof Button>;
72
72
 
73
73
  export const ConversationScrollButton = ({
74
- className,
75
- ...props
74
+ className,
75
+ ...props
76
76
  }: ConversationScrollButtonProps) => {
77
- const { isAtBottom, scrollToBottom } = useStickToBottomContext();
77
+ const { isAtBottom, scrollToBottom } = useStickToBottomContext();
78
78
 
79
- const handleScrollToBottom = useCallback(() => {
80
- scrollToBottom();
81
- }, [scrollToBottom]);
79
+ const handleScrollToBottom = useCallback(() => {
80
+ scrollToBottom();
81
+ }, [scrollToBottom]);
82
82
 
83
- return (
84
- !isAtBottom && (
85
- <Button
86
- className={cn(
87
- "absolute bottom-4 left-[50%] translate-x-[-50%] rounded-full",
88
- className
89
- )}
90
- onClick={handleScrollToBottom}
91
- size="icon"
92
- type="button"
93
- variant="outline"
94
- {...props}
95
- >
96
- <ArrowDownIcon className="size-4" />
97
- </Button>
98
- )
99
- );
83
+ return (
84
+ !isAtBottom && (
85
+ <Button
86
+ className={cn(
87
+ "absolute bottom-4 left-[50%] translate-x-[-50%] rounded-full",
88
+ className,
89
+ )}
90
+ onClick={handleScrollToBottom}
91
+ size="icon"
92
+ type="button"
93
+ variant="outline"
94
+ {...props}
95
+ >
96
+ <ArrowDownIcon className="size-4" />
97
+ </Button>
98
+ )
99
+ );
100
100
  };
@@ -8,8 +8,8 @@
8
8
 
9
9
  import type { ComponentProps } from "react";
10
10
  import {
11
- type StickToBottom,
12
- useStickToBottomContext,
11
+ type StickToBottom,
12
+ useStickToBottomContext,
13
13
  } from "use-stick-to-bottom";
14
14
  import { ScrollArea } from "@/components/ui/extra/scroll-area-viewport-ref";
15
15
  import { cn } from "@/lib/utils";
@@ -17,33 +17,33 @@ import { cn } from "@/lib/utils";
17
17
  type ConversationContentProps = ComponentProps<typeof StickToBottom.Content>;
18
18
 
19
19
  export const ConversationContent = ({
20
- className,
21
- children,
22
- ...props
20
+ className,
21
+ children,
22
+ ...props
23
23
  }: ConversationContentProps) => {
24
- const context = useStickToBottomContext();
24
+ const context = useStickToBottomContext();
25
25
 
26
- return (
27
- <ScrollArea
28
- className={cn(
29
- "h-full w-full",
30
- // Avoid overscroll with page down
31
- "*:data-radix-scroll-area-viewport:contain-strict",
32
- // Radix injects an inner wrapper: <Viewport><div style='min-width: 100%; display: table;'></div></Viewport>
33
- // Force it to behave like a normal block and allow shrinking to avoid horizontal overflow.
34
- "[&_[data-slot=scroll-area-viewport]>div]:block!",
35
- "[&_[data-slot=scroll-area-viewport]>div]:min-w-0!",
36
- "[&_[data-slot=scroll-area-viewport]>div]:max-w-full"
37
- )}
38
- viewportRef={context.scrollRef}
39
- >
40
- <div
41
- {...props}
42
- className={cn("flex flex-col gap-8 p-4", className)}
43
- ref={context.contentRef}
44
- >
45
- {typeof children === "function" ? children(context) : children}
46
- </div>
47
- </ScrollArea>
48
- );
26
+ return (
27
+ <ScrollArea
28
+ className={cn(
29
+ "h-full w-full",
30
+ // Avoid overscroll with page down
31
+ "*:data-radix-scroll-area-viewport:contain-strict",
32
+ // Radix injects an inner wrapper: <Viewport><div style='min-width: 100%; display: table;'></div></Viewport>
33
+ // Force it to behave like a normal block and allow shrinking to avoid horizontal overflow.
34
+ "[&_[data-slot=scroll-area-viewport]>div]:block!",
35
+ "[&_[data-slot=scroll-area-viewport]>div]:min-w-0!",
36
+ "[&_[data-slot=scroll-area-viewport]>div]:max-w-full",
37
+ )}
38
+ viewportRef={context.scrollRef}
39
+ >
40
+ <div
41
+ {...props}
42
+ className={cn("flex flex-col gap-8 p-4", className)}
43
+ ref={context.contentRef}
44
+ >
45
+ {typeof children === "function" ? children(context) : children}
46
+ </div>
47
+ </ScrollArea>
48
+ );
49
49
  };
@@ -8,35 +8,35 @@ import { cn } from "@/lib/utils";
8
8
  import { getStatusBadge } from "../tool";
9
9
 
10
10
  type McpToolHeaderProps = {
11
- title?: string;
12
- type: ToolUIPart["type"];
13
- state: ToolUIPart["state"];
14
- className?: string;
15
- icon?: ReactNode;
11
+ title?: string;
12
+ type: ToolUIPart["type"];
13
+ state: ToolUIPart["state"];
14
+ className?: string;
15
+ icon?: ReactNode;
16
16
  };
17
17
 
18
18
  export const McpToolHeader = ({
19
- className,
20
- title,
21
- type,
22
- state,
23
- icon,
24
- ...props
19
+ className,
20
+ title,
21
+ type,
22
+ state,
23
+ icon,
24
+ ...props
25
25
  }: McpToolHeaderProps) => (
26
- <CollapsibleTrigger
27
- className={cn(
28
- "flex w-full items-center justify-between gap-4 p-3",
29
- className
30
- )}
31
- {...props}
32
- >
33
- <div className="flex items-center gap-2">
34
- {icon ?? <WrenchIcon className="size-4 text-muted-foreground" />}
35
- <span className="font-medium text-sm">
36
- {title ?? type.split("-").slice(1).join("-")}
37
- </span>
38
- {getStatusBadge(state)}
39
- </div>
40
- <ChevronDownIcon className="size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" />
41
- </CollapsibleTrigger>
26
+ <CollapsibleTrigger
27
+ className={cn(
28
+ "flex w-full items-center justify-between gap-4 p-3",
29
+ className,
30
+ )}
31
+ {...props}
32
+ >
33
+ <div className="flex items-center gap-2">
34
+ {icon ?? <WrenchIcon className="size-4 text-muted-foreground" />}
35
+ <span className="font-medium text-sm">
36
+ {title ?? type.split("-").slice(1).join("-")}
37
+ </span>
38
+ {getStatusBadge(state)}
39
+ </div>
40
+ <ChevronDownIcon className="size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" />
41
+ </CollapsibleTrigger>
42
42
  );