@lobehub/lobehub 2.0.0-next.51 → 2.0.0-next.52

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 (84) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/apps/desktop/src/main/controllers/LocalFileCtr.ts +25 -5
  3. package/apps/desktop/src/main/controllers/__tests__/LocalFileCtr.test.ts +4 -1
  4. package/apps/desktop/src/main/modules/fileSearch/__tests__/macOS.integration.test.ts +357 -0
  5. package/apps/desktop/src/main/modules/fileSearch/impl/macOS.ts +30 -22
  6. package/changelog/v1.json +9 -0
  7. package/locales/ar/models.json +119 -126
  8. package/locales/ar/plugin.json +1 -1
  9. package/locales/bg-BG/models.json +104 -132
  10. package/locales/bg-BG/plugin.json +1 -1
  11. package/locales/de-DE/models.json +119 -126
  12. package/locales/de-DE/plugin.json +1 -1
  13. package/locales/en-US/models.json +167 -126
  14. package/locales/en-US/plugin.json +1 -1
  15. package/locales/es-ES/models.json +119 -126
  16. package/locales/es-ES/plugin.json +1 -1
  17. package/locales/fa-IR/models.json +119 -126
  18. package/locales/fa-IR/plugin.json +1 -1
  19. package/locales/fr-FR/models.json +119 -126
  20. package/locales/fr-FR/plugin.json +1 -1
  21. package/locales/it-IT/models.json +119 -126
  22. package/locales/it-IT/plugin.json +1 -1
  23. package/locales/ja-JP/models.json +119 -126
  24. package/locales/ja-JP/plugin.json +1 -1
  25. package/locales/ko-KR/models.json +119 -126
  26. package/locales/ko-KR/plugin.json +1 -1
  27. package/locales/nl-NL/models.json +119 -126
  28. package/locales/nl-NL/plugin.json +1 -1
  29. package/locales/pl-PL/models.json +119 -126
  30. package/locales/pl-PL/plugin.json +1 -1
  31. package/locales/pt-BR/models.json +119 -126
  32. package/locales/pt-BR/plugin.json +1 -1
  33. package/locales/ru-RU/models.json +119 -126
  34. package/locales/ru-RU/plugin.json +1 -1
  35. package/locales/tr-TR/models.json +119 -126
  36. package/locales/tr-TR/plugin.json +1 -1
  37. package/locales/vi-VN/models.json +119 -126
  38. package/locales/vi-VN/plugin.json +1 -1
  39. package/locales/zh-CN/models.json +173 -80
  40. package/locales/zh-CN/plugin.json +1 -1
  41. package/locales/zh-TW/models.json +119 -126
  42. package/locales/zh-TW/plugin.json +1 -1
  43. package/package.json +1 -1
  44. package/packages/electron-client-ipc/src/types/localSystem.ts +26 -2
  45. package/packages/model-runtime/src/core/contextBuilders/openai.test.ts +58 -0
  46. package/packages/model-runtime/src/core/contextBuilders/openai.ts +24 -10
  47. package/packages/model-runtime/src/core/openaiCompatibleFactory/index.ts +3 -2
  48. package/packages/model-runtime/src/providers/openai/index.test.ts +44 -0
  49. package/packages/types/src/tool/builtin.ts +6 -4
  50. package/src/features/Conversation/Messages/Assistant/Tool/Render/LoadingPlaceholder/index.tsx +3 -3
  51. package/src/features/Conversation/Messages/Group/Tool/Render/Intervention/index.tsx +2 -2
  52. package/src/features/Conversation/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +3 -3
  53. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +10 -4
  54. package/src/features/PluginsUI/Render/BuiltinType/index.tsx +2 -2
  55. package/src/locales/default/plugin.ts +1 -1
  56. package/src/services/chat/chat.test.ts +1 -0
  57. package/src/store/aiInfra/slices/aiProvider/__tests__/selectors.test.ts +62 -0
  58. package/src/store/aiInfra/slices/aiProvider/selectors.ts +1 -1
  59. package/src/tools/code-interpreter/Render/index.tsx +1 -1
  60. package/src/tools/interventions.ts +28 -4
  61. package/src/tools/local-system/Placeholder/ListFiles.tsx +3 -5
  62. package/src/tools/local-system/Placeholder/SearchFiles.tsx +2 -5
  63. package/src/tools/local-system/Render/ListFiles/index.tsx +16 -21
  64. package/src/tools/local-system/Render/RenameLocalFile/index.tsx +15 -20
  65. package/src/tools/local-system/Render/RunCommand/index.tsx +67 -70
  66. package/src/tools/local-system/Render/SearchFiles/SearchQuery/index.tsx +0 -1
  67. package/src/tools/local-system/Render/SearchFiles/index.tsx +15 -20
  68. package/src/tools/local-system/Render/WriteFile/index.tsx +2 -8
  69. package/src/tools/local-system/index.ts +4 -4
  70. package/src/tools/local-system/systemRole.ts +1 -1
  71. package/src/tools/placeholders.ts +39 -8
  72. package/src/tools/renders.ts +56 -9
  73. package/src/tools/web-browsing/Placeholder/{PageContent.tsx → CrawlMultiPages.tsx} +4 -1
  74. package/src/tools/web-browsing/Placeholder/CrawlSinglePage.tsx +12 -0
  75. package/src/tools/web-browsing/Placeholder/Search.tsx +4 -4
  76. package/src/tools/web-browsing/Render/CrawlMultiPages.tsx +15 -0
  77. package/src/tools/web-browsing/Render/CrawlSinglePage.tsx +15 -0
  78. package/src/tools/web-browsing/Render/Search/index.tsx +39 -44
  79. package/packages/database/migrations/0044_add_tool_intervention.sql +0 -1
  80. package/src/tools/local-system/Intervention/index.tsx +0 -17
  81. package/src/tools/local-system/Placeholder/index.tsx +0 -25
  82. package/src/tools/local-system/Render/index.tsx +0 -42
  83. package/src/tools/web-browsing/Placeholder/index.tsx +0 -40
  84. package/src/tools/web-browsing/Render/index.tsx +0 -57
@@ -1,5 +1,5 @@
1
1
  import { LocalSearchFilesParams } from '@lobechat/electron-client-ipc';
2
- import { ChatMessagePluginError } from '@lobechat/types';
2
+ import { BuiltinRenderProps } from '@lobechat/types';
3
3
  import { memo } from 'react';
4
4
  import { Flexbox } from 'react-layout-kit';
5
5
 
@@ -8,25 +8,20 @@ import { LocalFileSearchState } from '@/tools/local-system/type';
8
8
  import SearchResult from './Result';
9
9
  import SearchQuery from './SearchQuery';
10
10
 
11
- interface SearchFilesProps {
12
- args: LocalSearchFilesParams;
13
- messageId: string;
14
- pluginError: ChatMessagePluginError;
15
- pluginState?: LocalFileSearchState;
16
- }
17
-
18
- const SearchFiles = memo<SearchFilesProps>(({ messageId, pluginError, args, pluginState }) => {
19
- return (
20
- <Flexbox gap={4}>
21
- <SearchQuery args={args} messageId={messageId} pluginState={pluginState} />
22
- <SearchResult
23
- messageId={messageId}
24
- pluginError={pluginError}
25
- searchResults={pluginState?.searchResults}
26
- />
27
- </Flexbox>
28
- );
29
- });
11
+ const SearchFiles = memo<BuiltinRenderProps<LocalSearchFilesParams, LocalFileSearchState>>(
12
+ ({ messageId, pluginError, args, pluginState }) => {
13
+ return (
14
+ <Flexbox gap={4}>
15
+ <SearchQuery args={args} messageId={messageId} pluginState={pluginState} />
16
+ <SearchResult
17
+ messageId={messageId}
18
+ pluginError={pluginError}
19
+ searchResults={pluginState?.searchResults}
20
+ />
21
+ </Flexbox>
22
+ );
23
+ },
24
+ );
30
25
 
31
26
  SearchFiles.displayName = 'SearchFiles';
32
27
 
@@ -1,5 +1,5 @@
1
1
  import { WriteLocalFileParams } from '@lobechat/electron-client-ipc';
2
- import { ChatMessagePluginError } from '@lobechat/types';
2
+ import { BuiltinRenderProps } from '@lobechat/types';
3
3
  import { Icon } from '@lobehub/ui';
4
4
  import { Skeleton } from 'antd';
5
5
  import { ChevronRight } from 'lucide-react';
@@ -9,13 +9,7 @@ import { Flexbox } from 'react-layout-kit';
9
9
 
10
10
  import { LocalFile, LocalFolder } from '@/features/LocalFile';
11
11
 
12
- interface WriteFileProps {
13
- args: WriteLocalFileParams;
14
- messageId: string;
15
- pluginError: ChatMessagePluginError;
16
- }
17
-
18
- const WriteFile = memo<WriteFileProps>(({ args }) => {
12
+ const WriteFile = memo<BuiltinRenderProps<WriteLocalFileParams>>(({ args }) => {
19
13
  if (!args) return <Skeleton active />;
20
14
 
21
15
  const { base, dir } = path.parse(args.path);
@@ -78,6 +78,10 @@ export const LocalSystemManifest: BuiltinToolManifest = {
78
78
  format: 'date-time',
79
79
  type: 'string',
80
80
  },
81
+ directory: {
82
+ description: 'Limit the search to this specific directory path',
83
+ type: 'string',
84
+ },
81
85
  exclude: {
82
86
  description: 'Array of file or directory paths to exclude',
83
87
  items: {
@@ -114,10 +118,6 @@ export const LocalSystemManifest: BuiltinToolManifest = {
114
118
  format: 'date-time',
115
119
  type: 'string',
116
120
  },
117
- onlyIn: {
118
- description: 'Limit the search to this specific directory path',
119
- type: 'string',
120
- },
121
121
  sortBy: {
122
122
  description: 'Sort results by',
123
123
  enum: ['name', 'date', 'size'],
@@ -1,4 +1,4 @@
1
- export const systemPrompt = `You have a Local System tool with capabilities to interact with the user's local file system. You can list directories, read file contents, search for files, move, and rename files/directories.
1
+ export const systemPrompt = `You have a Local System tool with capabilities to interact with the user's local system. You can list directories, read file contents, search for files, move, and rename files/directories.
2
2
 
3
3
  <user_context>
4
4
  Here are some known locations and system details on the user's system. User is using the Operating System: {{platform}}({{arch}}). Use these paths when the user refers to these common locations by name (e.g., "my desktop", "downloads folder").
@@ -1,11 +1,42 @@
1
1
  import { BuiltinPlaceholder } from '@lobechat/types';
2
2
 
3
- import { LocalSystemManifest } from './local-system';
4
- import LocalSystem from './local-system/Placeholder';
5
- import { WebBrowsingManifest } from './web-browsing';
6
- import WebBrowsing from './web-browsing/Placeholder';
7
-
8
- export const BuiltinToolPlaceholders: Record<string, BuiltinPlaceholder> = {
9
- [WebBrowsingManifest.identifier]: WebBrowsing as BuiltinPlaceholder,
10
- [LocalSystemManifest.identifier]: LocalSystem as BuiltinPlaceholder,
3
+ import { LocalSystemApiName, LocalSystemManifest } from './local-system';
4
+ import { ListFiles as LocalSystemListFiles } from './local-system/Placeholder/ListFiles';
5
+ import LocalSystemSearchFiles from './local-system/Placeholder/SearchFiles';
6
+ import { WebBrowsingApiName, WebBrowsingManifest } from './web-browsing';
7
+ import CrawlMultiPages from './web-browsing/Placeholder/CrawlMultiPages';
8
+ import CrawlSinglePage from './web-browsing/Placeholder/CrawlSinglePage';
9
+ import { Search } from './web-browsing/Placeholder/Search';
10
+
11
+ /**
12
+ * Builtin tools placeholders registry
13
+ * Organized by toolset (identifier) -> API name
14
+ */
15
+ export const BuiltinToolPlaceholders: Record<string, Record<string, any>> = {
16
+ [LocalSystemManifest.identifier]: {
17
+ [LocalSystemApiName.searchLocalFiles]: LocalSystemSearchFiles,
18
+ [LocalSystemApiName.listLocalFiles]: LocalSystemListFiles,
19
+ },
20
+ [WebBrowsingManifest.identifier]: {
21
+ [WebBrowsingApiName.search]: Search,
22
+ [WebBrowsingApiName.crawlSinglePage]: CrawlSinglePage,
23
+ [WebBrowsingApiName.crawlMultiPages]: CrawlMultiPages,
24
+ },
25
+ };
26
+
27
+ /**
28
+ * Get builtin placeholder component for a specific API
29
+ * @param identifier - Tool identifier (e.g., 'lobe-local-system')
30
+ * @param apiName - API name (e.g., 'searchLocalFiles')
31
+ */
32
+ export const getBuiltinPlaceholder = (
33
+ identifier?: string,
34
+ apiName?: string,
35
+ ): BuiltinPlaceholder | undefined => {
36
+ if (!identifier || !apiName) return undefined;
37
+
38
+ const toolset = BuiltinToolPlaceholders[identifier];
39
+ if (!toolset) return undefined;
40
+
41
+ return toolset[apiName];
11
42
  };
@@ -2,13 +2,60 @@ import { BuiltinRender } from '@lobechat/types';
2
2
 
3
3
  import { CodeInterpreterManifest } from './code-interpreter';
4
4
  import CodeInterpreterRender from './code-interpreter/Render';
5
- import { LocalSystemManifest } from './local-system';
6
- import LocalFilesRender from './local-system/Render';
7
- import { WebBrowsingManifest } from './web-browsing';
8
- import WebBrowsing from './web-browsing/Render';
9
-
10
- export const BuiltinToolsRenders: Record<string, BuiltinRender> = {
11
- [WebBrowsingManifest.identifier]: WebBrowsing as BuiltinRender,
12
- [LocalSystemManifest.identifier]: LocalFilesRender as BuiltinRender,
13
- [CodeInterpreterManifest.identifier]: CodeInterpreterRender as BuiltinRender,
5
+ // local-system
6
+ import { LocalSystemApiName, LocalSystemManifest } from './local-system';
7
+ import ListFiles from './local-system/Render/ListFiles';
8
+ import ReadLocalFile from './local-system/Render/ReadLocalFile';
9
+ import RenameLocalFile from './local-system/Render/RenameLocalFile';
10
+ import RunCommand from './local-system/Render/RunCommand';
11
+ import SearchFiles from './local-system/Render/SearchFiles';
12
+ import WriteFile from './local-system/Render/WriteFile';
13
+ // web-browsing
14
+ import { WebBrowsingApiName, WebBrowsingManifest } from './web-browsing';
15
+ import CrawlMultiPages from './web-browsing/Render/CrawlMultiPages';
16
+ import CrawlSinglePage from './web-browsing/Render/CrawlSinglePage';
17
+ import Search from './web-browsing/Render/Search';
18
+
19
+ /**
20
+ * Builtin tools renders registry
21
+ * Organized by toolset (identifier) -> API name
22
+ */
23
+ const BuiltinToolsRenders: Record<string, Record<string, BuiltinRender>> = {
24
+ [LocalSystemManifest.identifier]: {
25
+ [LocalSystemApiName.searchLocalFiles]: SearchFiles as BuiltinRender,
26
+ [LocalSystemApiName.listLocalFiles]: ListFiles as BuiltinRender,
27
+ [LocalSystemApiName.readLocalFile]: ReadLocalFile as BuiltinRender,
28
+ [LocalSystemApiName.renameLocalFile]: RenameLocalFile as BuiltinRender,
29
+ [LocalSystemApiName.writeLocalFile]: WriteFile as BuiltinRender,
30
+ [LocalSystemApiName.runCommand]: RunCommand as BuiltinRender,
31
+ },
32
+ [WebBrowsingManifest.identifier]: {
33
+ [WebBrowsingApiName.search]: Search as BuiltinRender,
34
+ [WebBrowsingApiName.crawlSinglePage]: CrawlSinglePage as BuiltinRender,
35
+ [WebBrowsingApiName.crawlMultiPages]: CrawlMultiPages as BuiltinRender,
36
+ },
37
+ [CodeInterpreterManifest.identifier]: {
38
+ python: CodeInterpreterRender as BuiltinRender,
39
+ },
40
+ };
41
+
42
+ /**
43
+ * Get builtin render component for a specific API
44
+ * @param identifier - Tool identifier (e.g., 'lobe-local-system')
45
+ * @param apiName - API name (e.g., 'searchLocalFiles')
46
+ */
47
+ export const getBuiltinRender = (
48
+ identifier?: string,
49
+ apiName?: string,
50
+ ): BuiltinRender | undefined => {
51
+ if (!identifier) return undefined;
52
+
53
+ const toolset = BuiltinToolsRenders[identifier];
54
+ if (!toolset) return undefined;
55
+
56
+ if (apiName && toolset[apiName]) {
57
+ return toolset[apiName];
58
+ }
59
+
60
+ return undefined;
14
61
  };
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { BuiltinPlaceholderProps } from '@lobechat/types';
3
4
  import { ScrollShadow } from '@lobehub/ui';
4
5
  import { memo } from 'react';
5
6
 
@@ -7,7 +8,9 @@ import { useIsMobile } from '@/hooks/useIsMobile';
7
8
 
8
9
  import LoadingCard from '../Render/PageContent/Loading';
9
10
 
10
- const PageContent = memo<{ urls: string[] }>(({ urls }) => {
11
+ const PageContent = memo<BuiltinPlaceholderProps<{ urls: string[] }>>(({ args }) => {
12
+ const urls = args?.urls;
13
+
11
14
  const isMobile = useIsMobile();
12
15
 
13
16
  return (
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+
3
+ import { BuiltinPlaceholderProps } from '@lobechat/types';
4
+ import { memo } from 'react';
5
+
6
+ import LoadingCard from '../Render/PageContent/Loading';
7
+
8
+ const CrawlSinglePage = memo<BuiltinPlaceholderProps<{ url: string }>>(({ args }) => {
9
+ return <LoadingCard url={args?.url || ''} />;
10
+ });
11
+
12
+ export default CrawlSinglePage;
@@ -1,3 +1,4 @@
1
+ import { BuiltinPlaceholderProps, SearchQuery } from '@lobechat/types';
1
2
  import { Icon } from '@lobehub/ui';
2
3
  import { Skeleton } from 'antd';
3
4
  import { createStyles } from 'antd-style';
@@ -29,10 +30,9 @@ const useStyles = createStyles(({ css, token, cx }) => ({
29
30
  ),
30
31
  }));
31
32
 
32
- interface SearchProps {
33
- query?: string;
34
- }
35
- export const Search = memo<SearchProps>(({ query }) => {
33
+ export const Search = memo<BuiltinPlaceholderProps<SearchQuery>>(({ args }) => {
34
+ const { query } = args || {};
35
+
36
36
  const isMobile = useIsMobile();
37
37
  const { styles } = useStyles();
38
38
  return (
@@ -0,0 +1,15 @@
1
+ import { BuiltinRenderProps, CrawlMultiPagesQuery, CrawlPluginState } from '@lobechat/types';
2
+ import { memo } from 'react';
3
+
4
+ import PageContent from './PageContent';
5
+
6
+ const CrawlSinglePage = memo<BuiltinRenderProps<CrawlMultiPagesQuery, CrawlPluginState>>(
7
+ ({ messageId, pluginState = {}, args = {} }) => {
8
+ const { results } = pluginState;
9
+ const { urls } = args;
10
+
11
+ return <PageContent messageId={messageId} results={results} urls={urls} />;
12
+ },
13
+ );
14
+
15
+ export default CrawlSinglePage;
@@ -0,0 +1,15 @@
1
+ import { BuiltinRenderProps, CrawlPluginState, CrawlSinglePageQuery } from '@lobechat/types';
2
+ import { memo } from 'react';
3
+
4
+ import PageContent from './PageContent';
5
+
6
+ const MultiPages = memo<BuiltinRenderProps<CrawlSinglePageQuery, CrawlPluginState>>(
7
+ ({ messageId, pluginState, args }) => {
8
+ const { results } = pluginState || {};
9
+ const { url } = args || {};
10
+
11
+ return <PageContent messageId={messageId} results={results} urls={[url]} />;
12
+ },
13
+ );
14
+
15
+ export default MultiPages;
@@ -1,4 +1,4 @@
1
- import { ChatMessagePluginError, SearchQuery, UniformSearchResponse } from '@lobechat/types';
1
+ import { BuiltinRenderProps, SearchQuery, UniformSearchResponse } from '@lobechat/types';
2
2
  import { Alert, Highlighter } from '@lobehub/ui';
3
3
  import { memo, useState } from 'react';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -7,54 +7,49 @@ import ConfigForm from './ConfigForm';
7
7
  import SearchQueryView from './SearchQuery';
8
8
  import SearchResult from './SearchResult';
9
9
 
10
- interface SearchProps {
11
- messageId: string;
12
- pluginError: ChatMessagePluginError;
13
- searchQuery: SearchQuery;
14
- searchResponse?: UniformSearchResponse;
15
- }
10
+ const Search = memo<BuiltinRenderProps<SearchQuery, UniformSearchResponse>>(
11
+ ({ messageId, args: searchQuery, pluginState: searchResponse, pluginError }) => {
12
+ const [editing, setEditing] = useState(false);
16
13
 
17
- const Search = memo<SearchProps>(({ messageId, searchQuery, searchResponse, pluginError }) => {
18
- const [editing, setEditing] = useState(false);
14
+ if (pluginError) {
15
+ if (pluginError?.type === 'PluginSettingsInvalid') {
16
+ return <ConfigForm id={messageId} provider={pluginError.body?.provider} />;
17
+ }
19
18
 
20
- if (pluginError) {
21
- if (pluginError?.type === 'PluginSettingsInvalid') {
22
- return <ConfigForm id={messageId} provider={pluginError.body?.provider} />;
19
+ return (
20
+ <Alert
21
+ extra={
22
+ <Flexbox>
23
+ <Highlighter actionIconSize={'small'} language={'json'} variant={'borderless'}>
24
+ {JSON.stringify(pluginError.body?.data || pluginError.body, null, 2)}
25
+ </Highlighter>
26
+ </Flexbox>
27
+ }
28
+ message={pluginError?.message}
29
+ type={'error'}
30
+ />
31
+ );
23
32
  }
24
33
 
25
34
  return (
26
- <Alert
27
- extra={
28
- <Flexbox>
29
- <Highlighter actionIconSize={'small'} language={'json'} variant={'borderless'}>
30
- {JSON.stringify(pluginError.body?.data || pluginError.body, null, 2)}
31
- </Highlighter>
32
- </Flexbox>
33
- }
34
- message={pluginError?.message}
35
- type={'error'}
36
- />
35
+ <Flexbox gap={8}>
36
+ <SearchQueryView
37
+ args={searchQuery}
38
+ editing={editing}
39
+ messageId={messageId}
40
+ pluginState={searchResponse}
41
+ setEditing={setEditing}
42
+ />
43
+ <SearchResult
44
+ args={searchQuery}
45
+ editing={editing}
46
+ messageId={messageId}
47
+ pluginState={searchResponse}
48
+ setEditing={setEditing}
49
+ />
50
+ </Flexbox>
37
51
  );
38
- }
39
-
40
- return (
41
- <Flexbox gap={8}>
42
- <SearchQueryView
43
- args={searchQuery}
44
- editing={editing}
45
- messageId={messageId}
46
- pluginState={searchResponse}
47
- setEditing={setEditing}
48
- />
49
- <SearchResult
50
- args={searchQuery}
51
- editing={editing}
52
- messageId={messageId}
53
- pluginState={searchResponse}
54
- setEditing={setEditing}
55
- />
56
- </Flexbox>
57
- );
58
- });
52
+ },
53
+ );
59
54
 
60
55
  export default Search;
@@ -1 +0,0 @@
1
- ALTER TABLE "message_plugins" ADD COLUMN "intervention" jsonb;
@@ -1,17 +0,0 @@
1
- import { RunCommandParams } from '@lobechat/electron-client-ipc';
2
- import { BuiltinInterventionProps } from '@lobechat/types';
3
- import { memo } from 'react';
4
-
5
- import RunCommand from './RunCommand';
6
-
7
- const Intervention = memo<BuiltinInterventionProps<RunCommandParams>>(
8
- ({ apiName, args, messageId }) => {
9
- if (apiName === 'runCommand') {
10
- return <RunCommand {...args} messageId={messageId} />;
11
- }
12
-
13
- return null;
14
- },
15
- );
16
-
17
- export default Intervention;
@@ -1,25 +0,0 @@
1
- import { BuiltinPlaceholderProps } from '@lobechat/types';
2
- import { memo } from 'react';
3
-
4
- import { LocalSystemApiName } from '@/tools/local-system';
5
-
6
- import ReadLocalFile from '../Render/ReadLocalFile/ReadFileSkeleton';
7
- import { ListFiles } from './ListFiles';
8
- import SearchFiles from './SearchFiles';
9
-
10
- const RenderMap = {
11
- [LocalSystemApiName.searchLocalFiles]: SearchFiles,
12
- [LocalSystemApiName.listLocalFiles]: ListFiles,
13
- [LocalSystemApiName.readLocalFile]: ReadLocalFile,
14
- // [LocalSystemApiName.renameLocalFile]: RenameLocalFile,
15
- // [LocalSystemApiName.writeLocalFile]: WriteFile,
16
- };
17
- const Placeholder = memo<BuiltinPlaceholderProps>(({ apiName, args }) => {
18
- const Render = RenderMap[apiName as any];
19
-
20
- if (!Render) return;
21
-
22
- return <Render args={(args || {}) as any} />;
23
- });
24
-
25
- export default Placeholder;
@@ -1,42 +0,0 @@
1
- import { LocalFileItem } from '@lobechat/electron-client-ipc';
2
- import { BuiltinRenderProps } from '@lobechat/types';
3
- import { memo } from 'react';
4
-
5
- import { LocalSystemApiName } from '@/tools/local-system';
6
-
7
- import ListFiles from './ListFiles';
8
- import ReadLocalFile from './ReadLocalFile';
9
- import RenameLocalFile from './RenameLocalFile';
10
- import RunCommand from './RunCommand';
11
- import SearchFiles from './SearchFiles';
12
- import WriteFile from './WriteFile';
13
-
14
- const RenderMap = {
15
- [LocalSystemApiName.searchLocalFiles]: SearchFiles,
16
- [LocalSystemApiName.listLocalFiles]: ListFiles,
17
- [LocalSystemApiName.readLocalFile]: ReadLocalFile,
18
- [LocalSystemApiName.renameLocalFile]: RenameLocalFile,
19
- [LocalSystemApiName.writeLocalFile]: WriteFile,
20
- [LocalSystemApiName.runCommand]: RunCommand,
21
- };
22
-
23
- const LocalFilesRender = memo<BuiltinRenderProps<LocalFileItem[]>>(
24
- ({ pluginState, apiName, messageId, pluginError, args }) => {
25
- const Render = RenderMap[apiName as any];
26
-
27
- if (!Render) return;
28
-
29
- return (
30
- <Render
31
- args={args}
32
- messageId={messageId}
33
- pluginError={pluginError}
34
- pluginState={pluginState}
35
- />
36
- );
37
- },
38
- );
39
-
40
- LocalFilesRender.displayName = 'LocalFilesRender';
41
-
42
- export default LocalFilesRender;
@@ -1,40 +0,0 @@
1
- import {
2
- BuiltinPlaceholderProps,
3
- CrawlMultiPagesQuery,
4
- CrawlSinglePageQuery,
5
- SearchQuery,
6
- } from '@lobechat/types';
7
- import { Skeleton } from 'antd';
8
- import { memo } from 'react';
9
-
10
- import { WebBrowsingApiName } from '@/tools/web-browsing';
11
-
12
- import PageContent from './PageContent';
13
- import { Search } from './Search';
14
-
15
- const Placeholder = memo<BuiltinPlaceholderProps>(({ apiName, args }) => {
16
- switch (apiName) {
17
- case WebBrowsingApiName.search: {
18
- const { query } = args as SearchQuery;
19
- return <Search query={query} />;
20
- }
21
-
22
- case WebBrowsingApiName.crawlSinglePage: {
23
- const { url } = args as CrawlSinglePageQuery;
24
-
25
- return <PageContent urls={[url]} />;
26
- }
27
-
28
- case WebBrowsingApiName.crawlMultiPages: {
29
- const { urls } = args as CrawlMultiPagesQuery;
30
-
31
- return <PageContent urls={urls} />;
32
- }
33
-
34
- default: {
35
- return <Skeleton.Button />;
36
- }
37
- }
38
- });
39
-
40
- export default Placeholder;
@@ -1,57 +0,0 @@
1
- import {
2
- BuiltinRenderProps,
3
- CrawlMultiPagesQuery,
4
- CrawlPluginState,
5
- CrawlSinglePageQuery,
6
- SearchContent,
7
- SearchQuery,
8
- UniformSearchResponse,
9
- } from '@lobechat/types';
10
- import { memo } from 'react';
11
-
12
- import { WebBrowsingApiName } from '@/tools/web-browsing';
13
- import PageContent from '@/tools/web-browsing/Render/PageContent';
14
-
15
- import Search from './Search';
16
-
17
- const WebBrowsing = memo<BuiltinRenderProps<SearchContent[]>>(
18
- ({ messageId, args, pluginState, pluginError, apiName }) => {
19
- switch (apiName) {
20
- case WebBrowsingApiName.search:
21
- case 'searchWithSearXNG': {
22
- return (
23
- <Search
24
- messageId={messageId}
25
- pluginError={pluginError}
26
- searchQuery={(args as SearchQuery) || {}}
27
- searchResponse={pluginState as UniformSearchResponse}
28
- />
29
- );
30
- }
31
-
32
- case WebBrowsingApiName.crawlSinglePage: {
33
- return (
34
- <PageContent
35
- messageId={messageId}
36
- results={(pluginState as CrawlPluginState)?.results}
37
- urls={[(args as CrawlSinglePageQuery)?.url]}
38
- />
39
- );
40
- }
41
-
42
- case WebBrowsingApiName.crawlMultiPages: {
43
- return (
44
- <PageContent
45
- messageId={messageId}
46
- results={(pluginState as CrawlPluginState)?.results}
47
- urls={(args as CrawlMultiPagesQuery)?.urls}
48
- />
49
- );
50
- }
51
- }
52
- },
53
- );
54
-
55
- WebBrowsing.displayName = 'WebBrowsing';
56
-
57
- export default WebBrowsing;