@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
@@ -2,177 +2,177 @@
2
2
 
3
3
  import { CheckIcon, CopyIcon } from "lucide-react";
4
4
  import {
5
- type ComponentProps,
6
- createContext,
7
- type HTMLAttributes,
8
- useContext,
9
- useEffect,
10
- useRef,
11
- useState,
5
+ type ComponentProps,
6
+ createContext,
7
+ type HTMLAttributes,
8
+ useContext,
9
+ useEffect,
10
+ useRef,
11
+ useState,
12
12
  } from "react";
13
13
  import { type BundledLanguage, codeToHtml, type ShikiTransformer } from "shiki";
14
14
  import { Button } from "@/components/ui/button";
15
15
  import { cn } from "@/lib/utils";
16
16
 
17
17
  type CodeBlockProps = HTMLAttributes<HTMLDivElement> & {
18
- code: string;
19
- language: BundledLanguage;
20
- showLineNumbers?: boolean;
18
+ code: string;
19
+ language: BundledLanguage;
20
+ showLineNumbers?: boolean;
21
21
  };
22
22
 
23
23
  type CodeBlockContextType = {
24
- code: string;
24
+ code: string;
25
25
  };
26
26
 
27
27
  const CodeBlockContext = createContext<CodeBlockContextType>({
28
- code: "",
28
+ code: "",
29
29
  });
30
30
 
31
31
  const lineNumberTransformer: ShikiTransformer = {
32
- name: "line-numbers",
33
- line(node, line) {
34
- node.children.unshift({
35
- type: "element",
36
- tagName: "span",
37
- properties: {
38
- className: [
39
- "inline-block",
40
- "min-w-10",
41
- "mr-4",
42
- "text-right",
43
- "select-none",
44
- "text-muted-foreground",
45
- ],
46
- },
47
- children: [{ type: "text", value: String(line) }],
48
- });
49
- },
32
+ name: "line-numbers",
33
+ line(node, line) {
34
+ node.children.unshift({
35
+ type: "element",
36
+ tagName: "span",
37
+ properties: {
38
+ className: [
39
+ "inline-block",
40
+ "min-w-10",
41
+ "mr-4",
42
+ "text-right",
43
+ "select-none",
44
+ "text-muted-foreground",
45
+ ],
46
+ },
47
+ children: [{ type: "text", value: String(line) }],
48
+ });
49
+ },
50
50
  };
51
51
 
52
52
  export async function highlightCode(
53
- code: string,
54
- language: BundledLanguage,
55
- showLineNumbers = false
53
+ code: string,
54
+ language: BundledLanguage,
55
+ showLineNumbers = false,
56
56
  ) {
57
- const transformers: ShikiTransformer[] = showLineNumbers
58
- ? [lineNumberTransformer]
59
- : [];
60
-
61
- return await Promise.all([
62
- codeToHtml(code, {
63
- lang: language,
64
- theme: "one-light",
65
- transformers,
66
- }),
67
- codeToHtml(code, {
68
- lang: language,
69
- theme: "one-dark-pro",
70
- transformers,
71
- }),
72
- ]);
57
+ const transformers: ShikiTransformer[] = showLineNumbers
58
+ ? [lineNumberTransformer]
59
+ : [];
60
+
61
+ return await Promise.all([
62
+ codeToHtml(code, {
63
+ lang: language,
64
+ theme: "one-light",
65
+ transformers,
66
+ }),
67
+ codeToHtml(code, {
68
+ lang: language,
69
+ theme: "one-dark-pro",
70
+ transformers,
71
+ }),
72
+ ]);
73
73
  }
74
74
 
75
75
  export const CodeBlock = ({
76
- code,
77
- language,
78
- showLineNumbers = false,
79
- className,
80
- children,
81
- ...props
76
+ code,
77
+ language,
78
+ showLineNumbers = false,
79
+ className,
80
+ children,
81
+ ...props
82
82
  }: CodeBlockProps) => {
83
- const [html, setHtml] = useState<string>("");
84
- const [darkHtml, setDarkHtml] = useState<string>("");
85
- const mounted = useRef(false);
86
-
87
- useEffect(() => {
88
- highlightCode(code, language, showLineNumbers).then(([light, dark]) => {
89
- if (!mounted.current) {
90
- setHtml(light);
91
- setDarkHtml(dark);
92
- mounted.current = true;
93
- }
94
- });
95
-
96
- return () => {
97
- mounted.current = false;
98
- };
99
- }, [code, language, showLineNumbers]);
100
-
101
- return (
102
- <CodeBlockContext.Provider value={{ code }}>
103
- <div
104
- className={cn(
105
- "group relative w-full overflow-hidden rounded-md border bg-background text-foreground",
106
- className
107
- )}
108
- {...props}
109
- >
110
- <div className="relative">
111
- <div
112
- className="overflow-auto dark:hidden [&>pre]:m-0 [&>pre]:bg-background! [&>pre]:p-4 [&>pre]:text-foreground! [&>pre]:text-sm [&_code]:font-mono [&_code]:text-sm"
113
- // biome-ignore lint/security/noDangerouslySetInnerHtml: "this is needed."
114
- dangerouslySetInnerHTML={{ __html: html }}
115
- />
116
- <div
117
- className="hidden overflow-auto dark:block [&>pre]:m-0 [&>pre]:bg-background! [&>pre]:p-4 [&>pre]:text-foreground! [&>pre]:text-sm [&_code]:font-mono [&_code]:text-sm"
118
- // biome-ignore lint/security/noDangerouslySetInnerHtml: "this is needed."
119
- dangerouslySetInnerHTML={{ __html: darkHtml }}
120
- />
121
- {children && (
122
- <div className="absolute top-2 right-2 flex items-center gap-2">
123
- {children}
124
- </div>
125
- )}
126
- </div>
127
- </div>
128
- </CodeBlockContext.Provider>
129
- );
83
+ const [html, setHtml] = useState<string>("");
84
+ const [darkHtml, setDarkHtml] = useState<string>("");
85
+ const mounted = useRef(false);
86
+
87
+ useEffect(() => {
88
+ highlightCode(code, language, showLineNumbers).then(([light, dark]) => {
89
+ if (!mounted.current) {
90
+ setHtml(light);
91
+ setDarkHtml(dark);
92
+ mounted.current = true;
93
+ }
94
+ });
95
+
96
+ return () => {
97
+ mounted.current = false;
98
+ };
99
+ }, [code, language, showLineNumbers]);
100
+
101
+ return (
102
+ <CodeBlockContext.Provider value={{ code }}>
103
+ <div
104
+ className={cn(
105
+ "group relative w-full overflow-hidden rounded-md border bg-background text-foreground",
106
+ className,
107
+ )}
108
+ {...props}
109
+ >
110
+ <div className="relative">
111
+ <div
112
+ className="overflow-auto dark:hidden [&>pre]:m-0 [&>pre]:bg-background! [&>pre]:p-4 [&>pre]:text-foreground! [&>pre]:text-sm [&_code]:font-mono [&_code]:text-sm"
113
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: "this is needed."
114
+ dangerouslySetInnerHTML={{ __html: html }}
115
+ />
116
+ <div
117
+ className="hidden overflow-auto dark:block [&>pre]:m-0 [&>pre]:bg-background! [&>pre]:p-4 [&>pre]:text-foreground! [&>pre]:text-sm [&_code]:font-mono [&_code]:text-sm"
118
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: "this is needed."
119
+ dangerouslySetInnerHTML={{ __html: darkHtml }}
120
+ />
121
+ {children && (
122
+ <div className="absolute top-2 right-2 flex items-center gap-2">
123
+ {children}
124
+ </div>
125
+ )}
126
+ </div>
127
+ </div>
128
+ </CodeBlockContext.Provider>
129
+ );
130
130
  };
131
131
 
132
132
  export type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {
133
- onCopy?: () => void;
134
- onError?: (error: Error) => void;
135
- timeout?: number;
133
+ onCopy?: () => void;
134
+ onError?: (error: Error) => void;
135
+ timeout?: number;
136
136
  };
137
137
 
138
138
  export const CodeBlockCopyButton = ({
139
- onCopy,
140
- onError,
141
- timeout = 2000,
142
- children,
143
- className,
144
- ...props
139
+ onCopy,
140
+ onError,
141
+ timeout = 2000,
142
+ children,
143
+ className,
144
+ ...props
145
145
  }: CodeBlockCopyButtonProps) => {
146
- const [isCopied, setIsCopied] = useState(false);
147
- const { code } = useContext(CodeBlockContext);
148
-
149
- const copyToClipboard = async () => {
150
- if (typeof window === "undefined" || !navigator?.clipboard?.writeText) {
151
- onError?.(new Error("Clipboard API not available"));
152
- return;
153
- }
154
-
155
- try {
156
- await navigator.clipboard.writeText(code);
157
- setIsCopied(true);
158
- onCopy?.();
159
- setTimeout(() => setIsCopied(false), timeout);
160
- } catch (error) {
161
- onError?.(error as Error);
162
- }
163
- };
164
-
165
- const Icon = isCopied ? CheckIcon : CopyIcon;
166
-
167
- return (
168
- <Button
169
- className={cn("shrink-0", className)}
170
- onClick={copyToClipboard}
171
- size="icon"
172
- variant="ghost"
173
- {...props}
174
- >
175
- {children ?? <Icon size={14} />}
176
- </Button>
177
- );
146
+ const [isCopied, setIsCopied] = useState(false);
147
+ const { code } = useContext(CodeBlockContext);
148
+
149
+ const copyToClipboard = async () => {
150
+ if (typeof window === "undefined" || !navigator?.clipboard?.writeText) {
151
+ onError?.(new Error("Clipboard API not available"));
152
+ return;
153
+ }
154
+
155
+ try {
156
+ await navigator.clipboard.writeText(code);
157
+ setIsCopied(true);
158
+ onCopy?.();
159
+ setTimeout(() => setIsCopied(false), timeout);
160
+ } catch (error) {
161
+ onError?.(error as Error);
162
+ }
163
+ };
164
+
165
+ const Icon = isCopied ? CheckIcon : CopyIcon;
166
+
167
+ return (
168
+ <Button
169
+ className={cn("shrink-0", className)}
170
+ onClick={copyToClipboard}
171
+ size="icon"
172
+ variant="ghost"
173
+ {...props}
174
+ >
175
+ {children ?? <Icon size={14} />}
176
+ </Button>
177
+ );
178
178
  };