@lobehub/lobehub 2.0.0-next.183 → 2.0.0-next.185
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.
- package/CHANGELOG.md +50 -0
- package/changelog/v1.json +18 -0
- package/locales/ar/auth.json +1 -0
- package/locales/ar/models.json +40 -0
- package/locales/ar/setting.json +1 -0
- package/locales/ar/subscription.json +13 -0
- package/locales/bg-BG/auth.json +1 -0
- package/locales/bg-BG/models.json +22 -0
- package/locales/bg-BG/setting.json +1 -0
- package/locales/bg-BG/subscription.json +13 -0
- package/locales/de-DE/auth.json +1 -0
- package/locales/de-DE/models.json +37 -0
- package/locales/de-DE/setting.json +1 -0
- package/locales/de-DE/subscription.json +13 -0
- package/locales/en-US/auth.json +1 -0
- package/locales/en-US/setting.json +1 -1
- package/locales/es-ES/auth.json +1 -0
- package/locales/es-ES/models.json +30 -0
- package/locales/es-ES/setting.json +1 -0
- package/locales/es-ES/subscription.json +13 -0
- package/locales/fa-IR/auth.json +1 -0
- package/locales/fa-IR/models.json +31 -0
- package/locales/fa-IR/setting.json +1 -0
- package/locales/fa-IR/subscription.json +13 -0
- package/locales/fr-FR/auth.json +1 -0
- package/locales/fr-FR/models.json +17 -0
- package/locales/fr-FR/setting.json +1 -0
- package/locales/fr-FR/subscription.json +13 -0
- package/locales/it-IT/auth.json +1 -0
- package/locales/it-IT/models.json +31 -0
- package/locales/it-IT/setting.json +1 -0
- package/locales/it-IT/subscription.json +13 -0
- package/locales/ja-JP/auth.json +1 -0
- package/locales/ja-JP/models.json +1 -0
- package/locales/ja-JP/setting.json +1 -0
- package/locales/ja-JP/subscription.json +13 -0
- package/locales/ko-KR/auth.json +1 -0
- package/locales/ko-KR/models.json +39 -0
- package/locales/ko-KR/setting.json +1 -0
- package/locales/ko-KR/subscription.json +13 -0
- package/locales/nl-NL/auth.json +1 -0
- package/locales/nl-NL/models.json +35 -0
- package/locales/nl-NL/setting.json +1 -0
- package/locales/nl-NL/subscription.json +13 -0
- package/locales/pl-PL/auth.json +1 -0
- package/locales/pl-PL/models.json +12 -0
- package/locales/pl-PL/setting.json +1 -0
- package/locales/pl-PL/subscription.json +13 -0
- package/locales/pt-BR/auth.json +1 -0
- package/locales/pt-BR/models.json +1 -0
- package/locales/pt-BR/setting.json +1 -0
- package/locales/pt-BR/subscription.json +13 -0
- package/locales/ru-RU/auth.json +1 -0
- package/locales/ru-RU/models.json +32 -0
- package/locales/ru-RU/setting.json +1 -0
- package/locales/ru-RU/subscription.json +13 -0
- package/locales/tr-TR/auth.json +1 -0
- package/locales/tr-TR/models.json +20 -0
- package/locales/tr-TR/setting.json +1 -0
- package/locales/tr-TR/subscription.json +13 -0
- package/locales/vi-VN/auth.json +1 -0
- package/locales/vi-VN/models.json +39 -0
- package/locales/vi-VN/setting.json +1 -0
- package/locales/vi-VN/subscription.json +13 -0
- package/locales/zh-CN/auth.json +1 -0
- package/locales/zh-CN/models.json +49 -0
- package/locales/zh-CN/setting.json +1 -1
- package/locales/zh-TW/auth.json +1 -0
- package/locales/zh-TW/models.json +23 -0
- package/locales/zh-TW/setting.json +1 -0
- package/locales/zh-TW/subscription.json +13 -0
- package/package.json +1 -1
- package/packages/builtin-tool-local-system/package.json +10 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/EditLocalFile/index.tsx +81 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/GlobLocalFiles/index.tsx +73 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/GrepContent/index.tsx +73 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/ReadLocalFile/index.tsx +81 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/RunCommand/index.tsx +80 -0
- package/packages/builtin-tool-local-system/src/client/Inspector/SearchLocalFiles/index.tsx +71 -0
- package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Inspector/index.ts +1 -2
- package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/index.ts +1 -2
- package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/ListFiles/Result.tsx +2 -1
- package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/index.ts +1 -2
- package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Streaming/index.ts +1 -2
- package/packages/builtin-tool-local-system/src/client/index.ts +20 -0
- package/src/app/[variants]/(main)/chat/_layout/Sidebar/Topic/index.tsx +3 -3
- package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/index.tsx +3 -3
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/index.tsx +3 -3
- package/src/app/[variants]/(main)/home/features/RecentPage/index.tsx +3 -2
- package/src/app/[variants]/(main)/home/features/RecentResource/index.tsx +3 -2
- package/src/app/[variants]/(main)/home/features/RecentTopic/index.tsx +3 -3
- package/src/components/NeuralNetworkLoading/index.tsx +181 -0
- package/src/libs/swr/index.ts +1 -8
- package/src/store/image/utils/size.test.ts +245 -0
- package/src/tools/inspectors.ts +6 -5
- package/src/tools/interventions.ts +5 -4
- package/src/tools/placeholders.ts +9 -7
- package/src/tools/renders.ts +5 -3
- package/src/tools/streamings.ts +6 -5
- package/src/tools/local-system/Inspector/EditLocalFile/index.tsx +0 -55
- package/src/tools/local-system/Inspector/GlobLocalFiles/index.tsx +0 -59
- package/src/tools/local-system/Inspector/GrepContent/index.tsx +0 -59
- package/src/tools/local-system/Inspector/ReadLocalFile/index.tsx +0 -55
- package/src/tools/local-system/Inspector/RunCommand/index.tsx +0 -66
- package/src/tools/local-system/Inspector/SearchLocalFiles/index.tsx +0 -59
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/EditLocalFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/MoveLocalFiles/MoveFileItem.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/MoveLocalFiles/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/RunCommand/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Intervention/WriteFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Placeholder/ListFiles.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Placeholder/SearchFiles.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/EditLocalFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/ListFiles/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/MoveLocalFiles/MoveFileItem.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/MoveLocalFiles/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/ReadLocalFile/ReadFileSkeleton.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/ReadLocalFile/ReadFileView.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/ReadLocalFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/RenameLocalFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/RunCommand/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/SearchFiles/Result.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/SearchFiles/SearchQuery/SearchView.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/SearchFiles/SearchQuery/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/SearchFiles/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Render/WriteFile/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Streaming/RunCommand/index.tsx +0 -0
- /package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/components/FileItem.tsx +0 -0
package/locales/zh-TW/auth.json
CHANGED
|
@@ -147,6 +147,7 @@
|
|
|
147
147
|
"loginGuide.f4": "探索強大的外掛功能",
|
|
148
148
|
"loginGuide.title": "登入後,您可以:",
|
|
149
149
|
"loginOrSignup": "登入 / 註冊",
|
|
150
|
+
"profile.account": "帳戶",
|
|
150
151
|
"profile.authorizations.actions.revoke": "取消授權",
|
|
151
152
|
"profile.authorizations.revoke.description": "取消授權後,該工具將無法存取您的資料。如需再次使用,需重新授權。",
|
|
152
153
|
"profile.authorizations.revoke.title": "確認取消授權 {{name}}?",
|
|
@@ -223,7 +223,30 @@
|
|
|
223
223
|
"alibaba/qwen-3-235b.description": "Qwen3 是 Qwen 系列的最新一代,提供完整的密集與 MoE 模型組合。透過大規模訓練,在推理、指令遵循、代理能力與多語言支援方面實現突破。",
|
|
224
224
|
"alibaba/qwen-3-30b.description": "Qwen3 是 Qwen 系列的最新一代,提供完整的密集與 MoE 模型組合。透過大規模訓練,在推理、指令遵循、代理能力與多語言支援方面實現突破。",
|
|
225
225
|
"alibaba/qwen-3-32b.description": "Qwen3 是 Qwen 系列的最新一代,提供完整的密集與 MoE 模型組合。透過大規模訓練,在推理、指令遵循、代理能力與多語言支援方面實現突破。",
|
|
226
|
+
"alibaba/qwen3-coder.description": "Qwen3-Coder-480B-A35B-Instruct 是 Qwen 最具代理能力的程式模型,在代理式編碼、瀏覽器操作及其他核心編碼任務上表現優異,達到與 Claude Sonnet 同級的成果。",
|
|
227
|
+
"amazon/nova-lite.description": "一款極低成本的多模態模型,能以極快速度處理圖像、影片與文字輸入。",
|
|
228
|
+
"amazon/nova-micro.description": "一款僅支援文字的模型,提供超低延遲與極低成本的運算效能。",
|
|
229
|
+
"amazon/nova-pro.description": "一款功能強大的多模態模型,在準確性、速度與成本之間達到最佳平衡,適用於各類任務。",
|
|
226
230
|
"amazon/titan-embed-text-v2.description": "Amazon Titan Text Embeddings V2 是一個輕量級、高效的多語言嵌入模型,支援 1024、512 和 256 維度。",
|
|
231
|
+
"anthropic.claude-3-5-sonnet-20240620-v1:0.description": "Claude 3.5 Sonnet 提升了業界標準,在多項評估中超越競爭對手與 Claude 3 Opus,同時維持中階速度與成本。",
|
|
232
|
+
"anthropic.claude-3-5-sonnet-20241022-v2:0.description": "Claude 3.5 Sonnet 提升了業界標準,在多項評估中超越競爭對手與 Claude 3 Opus,同時維持中階速度與成本。",
|
|
233
|
+
"anthropic.claude-3-haiku-20240307-v1:0.description": "Claude 3 Haiku 是 Anthropic 速度最快、體積最小的模型,能即時回應簡單查詢,提供流暢自然的 AI 體驗,並支援圖像輸入與 200K 的上下文視窗。",
|
|
234
|
+
"anthropic.claude-3-opus-20240229-v1:0.description": "Claude 3 Opus 是 Anthropic 最強大的 AI 模型,在處理高度複雜任務時展現最先進的效能,具備開放式提示與新穎情境的流暢應對能力,並支援圖像輸入與 200K 的上下文視窗。",
|
|
235
|
+
"anthropic.claude-3-sonnet-20240229-v1:0.description": "Claude 3 Sonnet 在智慧與速度之間取得平衡,適用於企業級工作負載,提供高性價比與可靠的大規模部署能力,並支援圖像輸入與 200K 的上下文視窗。",
|
|
236
|
+
"anthropic.claude-instant-v1.description": "一款快速、經濟且功能強大的模型,適用於日常對話、文字分析、摘要與文件問答。",
|
|
237
|
+
"anthropic.claude-v2.description": "一款功能全面的模型,涵蓋複雜對話、創意生成與精確指令執行等任務。",
|
|
238
|
+
"anthropic.claude-v2:1.description": "Claude 2 的升級版,具備雙倍上下文視窗,並在長文件與檢索增強生成(RAG)任務中提升可靠性、降低幻覺率與提升基於證據的準確性。",
|
|
239
|
+
"anthropic/claude-3-haiku.description": "Claude 3 Haiku 是 Anthropic 速度最快的模型,專為處理長提示的企業級工作負載設計,能快速分析大型文件如季報、合約或法律案件,成本僅為同類模型的一半。",
|
|
240
|
+
"anthropic/claude-3-opus.description": "Claude 3 Opus 是 Anthropic 最智慧的模型,在處理高度複雜任務時展現市場領先的效能,能流暢應對開放式提示與新穎情境,具備類人理解能力。",
|
|
241
|
+
"anthropic/claude-3.5-haiku.description": "Claude 3.5 Haiku 提升了速度、程式碼準確性與工具使用能力,適用於對速度與工具互動有高要求的場景。",
|
|
242
|
+
"anthropic/claude-3.5-sonnet.description": "Claude 3.5 Sonnet 是 Sonnet 系列中快速且高效的模型,具備更佳的程式與推理能力,部分版本已逐步由 Sonnet 3.7 或更新版本取代。",
|
|
243
|
+
"anthropic/claude-3.7-sonnet.description": "Claude 3.7 Sonnet 是升級版的 Sonnet 模型,具備更強的推理與程式能力,適用於企業級複雜任務。",
|
|
244
|
+
"anthropic/claude-haiku-4.5.description": "Claude Haiku 4.5 是 Anthropic 的高效能快速模型,在保持高準確度的同時提供極低延遲。",
|
|
245
|
+
"anthropic/claude-opus-4.1.description": "Opus 4.1 是 Anthropic 的高階模型,針對程式設計、複雜推理與長時間任務進行最佳化。",
|
|
246
|
+
"anthropic/claude-opus-4.5.description": "Claude Opus 4.5 是 Anthropic 的旗艦模型,結合頂尖智慧與可擴展效能,適用於複雜且高品質的推理任務。",
|
|
247
|
+
"anthropic/claude-opus-4.description": "Opus 4 是 Anthropic 為複雜任務與企業應用設計的旗艦模型。",
|
|
248
|
+
"anthropic/claude-sonnet-4.5.description": "Claude Sonnet 4.5 是 Anthropic 最新的混合推理模型,針對複雜推理與程式設計進行最佳化。",
|
|
249
|
+
"anthropic/claude-sonnet-4.description": "Claude Sonnet 4 是 Anthropic 的混合推理模型,具備思考與非思考能力的結合。",
|
|
227
250
|
"gemini-flash-latest.description": "Gemini Flash 最新版本",
|
|
228
251
|
"gemini-flash-lite-latest.description": "Gemini Flash-Lite 最新版本",
|
|
229
252
|
"gemini-pro-latest.description": "Gemini Pro 最新版本",
|
|
@@ -215,6 +215,7 @@
|
|
|
215
215
|
"settingAgent.name.placeholder": "請輸入助手名稱",
|
|
216
216
|
"settingAgent.name.title": "名稱",
|
|
217
217
|
"settingAgent.prompt.placeholder": "輸入助手設定,按 / 開啟指令選單",
|
|
218
|
+
"settingAgent.prompt.templatePlaceholder": "#### 目標\n描述此代理的主要目的與目標。\n\n#### 技能\n- 列出主要能力\n- 以及專業知識領域\n\n#### 工作流程\n1. 步驟式流程\n2. 代理執行任務的方式\n3. 與使用者的預期互動方式\n\n#### 限制\n- 必須遵守的重要限制\n- 行為準則",
|
|
218
219
|
"settingAgent.prompt.title": "助手設定",
|
|
219
220
|
"settingAgent.submit": "更新助手資訊",
|
|
220
221
|
"settingAgent.tag.desc": "助手標籤將會在助手社群中顯示",
|
|
@@ -271,15 +271,28 @@
|
|
|
271
271
|
"referral.edit.hint": "支援 2-8 位英文字母、數字或底線",
|
|
272
272
|
"referral.edit.placeholder": "輸入推薦碼",
|
|
273
273
|
"referral.edit.save": "儲存",
|
|
274
|
+
"referral.errors.alreadyBound": "您已綁定邀請碼",
|
|
275
|
+
"referral.errors.backfillExpired": "補填期限已過。註冊後超過 3 天無法補填",
|
|
274
276
|
"referral.errors.codeExists": "此推薦碼已被使用,請選擇其他碼",
|
|
277
|
+
"referral.errors.invalidCode": "邀請碼不存在,請確認後再試一次",
|
|
275
278
|
"referral.errors.invalidFormat": "推薦碼格式錯誤,請輸入 2-8 位英文字母、數字或底線",
|
|
279
|
+
"referral.errors.selfReferral": "您不能使用自己的邀請碼",
|
|
276
280
|
"referral.errors.updateFailed": "更新失敗,請稍後再試",
|
|
277
281
|
"referral.inviteCode.description": "分享您的專屬推薦碼,邀請朋友註冊",
|
|
278
282
|
"referral.inviteCode.title": "我的推薦碼",
|
|
279
283
|
"referral.inviteLink.description": "複製連結並分享給朋友,完成註冊即可獲得獎勵",
|
|
280
284
|
"referral.inviteLink.title": "推薦連結",
|
|
285
|
+
"referral.rules.backfill.alreadyBound": "您已綁定邀請碼",
|
|
286
|
+
"referral.rules.backfill.description": "忘記輸入邀請碼?您可以在註冊後 3 天內補填",
|
|
287
|
+
"referral.rules.backfill.expiredTip": "補填期限已過。註冊後超過 3 天無法補填",
|
|
288
|
+
"referral.rules.backfill.link": "補填邀請碼",
|
|
289
|
+
"referral.rules.backfill.placeholder": "請輸入邀請碼",
|
|
290
|
+
"referral.rules.backfill.submit": "確認綁定",
|
|
291
|
+
"referral.rules.backfill.success": "邀請碼綁定成功",
|
|
292
|
+
"referral.rules.backfill.title": "補填邀請碼",
|
|
281
293
|
"referral.rules.description": "了解推薦獎勵計畫規則",
|
|
282
294
|
"referral.rules.expiry": "點數有效期:用戶 100 天未活躍後,推薦點數將被清除",
|
|
295
|
+
"referral.rules.missedCode": "錯過邀請碼:您可以在註冊後 3 天內<0>補填</0>",
|
|
283
296
|
"referral.rules.priority": "點數使用優先順序:免費點數 → 訂閱點數 → 推薦點數 → 儲值點數",
|
|
284
297
|
"referral.rules.registration": "註冊方式:受邀者透過推薦連結註冊或在註冊頁輸入推薦碼",
|
|
285
298
|
"referral.rules.reward": "獎勵:推薦人與受邀人各獲得 {{reward}}M 點數",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/lobehub",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.185",
|
|
4
4
|
"description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./src/index.ts",
|
|
7
|
+
"./client": "./src/client/index.ts",
|
|
7
8
|
"./executionRuntime": "./src/ExecutionRuntime/index.ts"
|
|
8
9
|
},
|
|
9
10
|
"main": "./src/index.ts",
|
|
@@ -12,5 +13,14 @@
|
|
|
12
13
|
},
|
|
13
14
|
"devDependencies": {
|
|
14
15
|
"@lobechat/types": "workspace:*"
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"@lobehub/ui": "^4",
|
|
19
|
+
"antd": "^6",
|
|
20
|
+
"antd-style": "*",
|
|
21
|
+
"lucide-react": "*",
|
|
22
|
+
"path-browserify-esm": "*",
|
|
23
|
+
"react": "*",
|
|
24
|
+
"react-i18next": "*"
|
|
15
25
|
}
|
|
16
26
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type EditLocalFileParams } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check, X } from 'lucide-react';
|
|
7
|
+
import path from 'path-browserify-esm';
|
|
8
|
+
import { memo } from 'react';
|
|
9
|
+
import { useTranslation } from 'react-i18next';
|
|
10
|
+
|
|
11
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
12
|
+
|
|
13
|
+
import { type EditLocalFileState } from '../../../types';
|
|
14
|
+
|
|
15
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
16
|
+
root: css`
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
display: -webkit-box;
|
|
19
|
+
-webkit-box-orient: vertical;
|
|
20
|
+
-webkit-line-clamp: 1;
|
|
21
|
+
|
|
22
|
+
color: ${cssVar.colorTextSecondary};
|
|
23
|
+
`,
|
|
24
|
+
statusIcon: css`
|
|
25
|
+
margin-block-end: -2px;
|
|
26
|
+
margin-inline-start: 4px;
|
|
27
|
+
`,
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
export const EditLocalFileInspector = memo<
|
|
31
|
+
BuiltinInspectorProps<EditLocalFileParams, EditLocalFileState>
|
|
32
|
+
>(({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
33
|
+
const { t } = useTranslation('plugin');
|
|
34
|
+
|
|
35
|
+
// Show filename with parent directory for context
|
|
36
|
+
const filePath = args?.file_path || partialArgs?.file_path || '';
|
|
37
|
+
let displayPath = '';
|
|
38
|
+
if (filePath) {
|
|
39
|
+
const { base, dir } = path.parse(filePath);
|
|
40
|
+
const parentDir = path.basename(dir);
|
|
41
|
+
displayPath = parentDir ? `${parentDir}/${base}` : base;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// During argument streaming
|
|
45
|
+
if (isArgumentsStreaming) {
|
|
46
|
+
if (!displayPath)
|
|
47
|
+
return (
|
|
48
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
49
|
+
<span>{t('builtins.lobe-local-system.apiName.editLocalFile')}</span>
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
55
|
+
<span>{t('builtins.lobe-local-system.apiName.editLocalFile')}: </span>
|
|
56
|
+
<span className={highlightTextStyles.primary}>{displayPath}</span>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Check if edit was successful (has replacements count)
|
|
62
|
+
const isSuccess = pluginState?.replacements !== undefined && pluginState.replacements >= 0;
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
66
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
67
|
+
<span>{t('builtins.lobe-local-system.apiName.editLocalFile')}: </span>
|
|
68
|
+
{displayPath && <span className={highlightTextStyles.primary}>{displayPath}</span>}
|
|
69
|
+
{isLoading ? null : pluginState ? (
|
|
70
|
+
isSuccess ? (
|
|
71
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
72
|
+
) : (
|
|
73
|
+
<X className={styles.statusIcon} color={cssVar.colorError} size={14} />
|
|
74
|
+
)
|
|
75
|
+
) : null}
|
|
76
|
+
</span>
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
EditLocalFileInspector.displayName = 'EditLocalFileInspector';
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type GlobFilesParams } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check, X } from 'lucide-react';
|
|
7
|
+
import { memo } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
|
|
10
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
11
|
+
|
|
12
|
+
import { type GlobFilesState } from '../../..';
|
|
13
|
+
|
|
14
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
15
|
+
root: css`
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
display: -webkit-box;
|
|
18
|
+
-webkit-box-orient: vertical;
|
|
19
|
+
-webkit-line-clamp: 1;
|
|
20
|
+
|
|
21
|
+
color: ${cssVar.colorTextSecondary};
|
|
22
|
+
`,
|
|
23
|
+
statusIcon: css`
|
|
24
|
+
margin-block-end: -2px;
|
|
25
|
+
margin-inline-start: 4px;
|
|
26
|
+
`,
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
export const GlobLocalFilesInspector = memo<BuiltinInspectorProps<GlobFilesParams, GlobFilesState>>(
|
|
30
|
+
({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
31
|
+
const { t } = useTranslation('plugin');
|
|
32
|
+
|
|
33
|
+
const pattern = args?.pattern || partialArgs?.pattern || '';
|
|
34
|
+
|
|
35
|
+
// During argument streaming
|
|
36
|
+
if (isArgumentsStreaming) {
|
|
37
|
+
if (!pattern)
|
|
38
|
+
return (
|
|
39
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
40
|
+
<span>{t('builtins.lobe-local-system.apiName.globLocalFiles')}</span>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
46
|
+
<span>{t('builtins.lobe-local-system.apiName.globLocalFiles')}: </span>
|
|
47
|
+
<span className={highlightTextStyles.primary}>{pattern}</span>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check if glob was successful
|
|
53
|
+
const isSuccess = pluginState?.result?.success;
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
57
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
58
|
+
<span>{t('builtins.lobe-local-system.apiName.globLocalFiles')}: </span>
|
|
59
|
+
{pattern && <span className={highlightTextStyles.primary}>{pattern}</span>}
|
|
60
|
+
{isLoading ? null : pluginState?.result ? (
|
|
61
|
+
isSuccess ? (
|
|
62
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
63
|
+
) : (
|
|
64
|
+
<X className={styles.statusIcon} color={cssVar.colorError} size={14} />
|
|
65
|
+
)
|
|
66
|
+
) : null}
|
|
67
|
+
</span>
|
|
68
|
+
</div>
|
|
69
|
+
);
|
|
70
|
+
},
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
GlobLocalFilesInspector.displayName = 'GlobLocalFilesInspector';
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type GrepContentParams } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check, X } from 'lucide-react';
|
|
7
|
+
import { memo } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
|
|
10
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
11
|
+
|
|
12
|
+
import { type GrepContentState } from '../../..';
|
|
13
|
+
|
|
14
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
15
|
+
root: css`
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
display: -webkit-box;
|
|
18
|
+
-webkit-box-orient: vertical;
|
|
19
|
+
-webkit-line-clamp: 1;
|
|
20
|
+
|
|
21
|
+
color: ${cssVar.colorTextSecondary};
|
|
22
|
+
`,
|
|
23
|
+
statusIcon: css`
|
|
24
|
+
margin-block-end: -2px;
|
|
25
|
+
margin-inline-start: 4px;
|
|
26
|
+
`,
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
export const GrepContentInspector = memo<
|
|
30
|
+
BuiltinInspectorProps<GrepContentParams, GrepContentState>
|
|
31
|
+
>(({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
32
|
+
const { t } = useTranslation('plugin');
|
|
33
|
+
|
|
34
|
+
const pattern = args?.pattern || partialArgs?.pattern || '';
|
|
35
|
+
|
|
36
|
+
// During argument streaming
|
|
37
|
+
if (isArgumentsStreaming) {
|
|
38
|
+
if (!pattern)
|
|
39
|
+
return (
|
|
40
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
41
|
+
<span>{t('builtins.lobe-local-system.apiName.grepContent')}</span>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
47
|
+
<span>{t('builtins.lobe-local-system.apiName.grepContent')}: </span>
|
|
48
|
+
<span className={highlightTextStyles.primary}>{pattern}</span>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Check if grep was successful
|
|
54
|
+
const isSuccess = pluginState?.result?.success;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
58
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
59
|
+
<span>{t('builtins.lobe-local-system.apiName.grepContent')}: </span>
|
|
60
|
+
{pattern && <span className={highlightTextStyles.primary}>{pattern}</span>}
|
|
61
|
+
{isLoading ? null : pluginState?.result ? (
|
|
62
|
+
isSuccess ? (
|
|
63
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
64
|
+
) : (
|
|
65
|
+
<X className={styles.statusIcon} color={cssVar.colorError} size={14} />
|
|
66
|
+
)
|
|
67
|
+
) : null}
|
|
68
|
+
</span>
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
GrepContentInspector.displayName = 'GrepContentInspector';
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type LocalReadFileParams } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check, X } from 'lucide-react';
|
|
7
|
+
import path from 'path-browserify-esm';
|
|
8
|
+
import { memo } from 'react';
|
|
9
|
+
import { useTranslation } from 'react-i18next';
|
|
10
|
+
|
|
11
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
12
|
+
|
|
13
|
+
import { type LocalReadFileState } from '../../..';
|
|
14
|
+
|
|
15
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
16
|
+
root: css`
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
display: -webkit-box;
|
|
19
|
+
-webkit-box-orient: vertical;
|
|
20
|
+
-webkit-line-clamp: 1;
|
|
21
|
+
|
|
22
|
+
color: ${cssVar.colorTextSecondary};
|
|
23
|
+
`,
|
|
24
|
+
statusIcon: css`
|
|
25
|
+
margin-block-end: -2px;
|
|
26
|
+
margin-inline-start: 4px;
|
|
27
|
+
`,
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
export const ReadLocalFileInspector = memo<
|
|
31
|
+
BuiltinInspectorProps<LocalReadFileParams, LocalReadFileState>
|
|
32
|
+
>(({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
33
|
+
const { t } = useTranslation('plugin');
|
|
34
|
+
|
|
35
|
+
// Show filename with parent directory for context
|
|
36
|
+
const filePath = args?.path || partialArgs?.path || '';
|
|
37
|
+
let displayPath = '';
|
|
38
|
+
if (filePath) {
|
|
39
|
+
const { base, dir } = path.parse(filePath);
|
|
40
|
+
const parentDir = path.basename(dir);
|
|
41
|
+
displayPath = parentDir ? `${parentDir}/${base}` : base;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// During argument streaming
|
|
45
|
+
if (isArgumentsStreaming) {
|
|
46
|
+
if (!displayPath)
|
|
47
|
+
return (
|
|
48
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
49
|
+
<span>{t('builtins.lobe-local-system.apiName.readLocalFile')}</span>
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
55
|
+
<span>{t('builtins.lobe-local-system.apiName.readLocalFile')}: </span>
|
|
56
|
+
<span className={highlightTextStyles.primary}>{displayPath}</span>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Check if file was read successfully (has content)
|
|
62
|
+
const hasContent = !!pluginState?.fileContent;
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
66
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
67
|
+
<span>{t('builtins.lobe-local-system.apiName.readLocalFile')}: </span>
|
|
68
|
+
{displayPath && <span className={highlightTextStyles.primary}>{displayPath}</span>}
|
|
69
|
+
{isLoading ? null : pluginState ? (
|
|
70
|
+
hasContent ? (
|
|
71
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
72
|
+
) : (
|
|
73
|
+
<X className={styles.statusIcon} color={cssVar.colorError} size={14} />
|
|
74
|
+
)
|
|
75
|
+
) : null}
|
|
76
|
+
</span>
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
ReadLocalFileInspector.displayName = 'ReadLocalFileInspector';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type RunCommandParams, type RunCommandResult } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check, X } from 'lucide-react';
|
|
7
|
+
import { memo } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
|
|
10
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
11
|
+
|
|
12
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
13
|
+
root: css`
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
display: -webkit-box;
|
|
16
|
+
-webkit-box-orient: vertical;
|
|
17
|
+
-webkit-line-clamp: 1;
|
|
18
|
+
|
|
19
|
+
color: ${cssVar.colorTextSecondary};
|
|
20
|
+
`,
|
|
21
|
+
statusIcon: css`
|
|
22
|
+
margin-block-end: -2px;
|
|
23
|
+
margin-inline-start: 4px;
|
|
24
|
+
`,
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
interface RunCommandState {
|
|
28
|
+
message: string;
|
|
29
|
+
result: RunCommandResult;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const RunCommandInspector = memo<BuiltinInspectorProps<RunCommandParams, RunCommandState>>(
|
|
33
|
+
({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
34
|
+
const { t } = useTranslation('plugin');
|
|
35
|
+
|
|
36
|
+
// Show description if available, otherwise show command
|
|
37
|
+
const description = args?.description || partialArgs?.description || args?.command || '';
|
|
38
|
+
|
|
39
|
+
// During argument streaming
|
|
40
|
+
if (isArgumentsStreaming) {
|
|
41
|
+
if (!description)
|
|
42
|
+
return (
|
|
43
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
44
|
+
<span>{t('builtins.lobe-local-system.apiName.runCommand')}</span>
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
50
|
+
<span>{t('builtins.lobe-local-system.apiName.runCommand')}: </span>
|
|
51
|
+
<span className={highlightTextStyles.primary}>{description}</span>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Get execution result from pluginState
|
|
57
|
+
const result = pluginState?.result;
|
|
58
|
+
const isSuccess = result?.success && result?.exit_code === 0;
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
62
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
63
|
+
<span>{t('builtins.lobe-local-system.apiName.runCommand')}: </span>
|
|
64
|
+
{description && <span className={highlightTextStyles.primary}>{description}</span>}
|
|
65
|
+
{isLoading ? null : result?.success !== undefined ? (
|
|
66
|
+
isSuccess ? (
|
|
67
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
68
|
+
) : (
|
|
69
|
+
<X className={styles.statusIcon} color={cssVar.colorError} size={14} />
|
|
70
|
+
)
|
|
71
|
+
) : null}
|
|
72
|
+
</span>
|
|
73
|
+
</div>
|
|
74
|
+
);
|
|
75
|
+
},
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
RunCommandInspector.displayName = 'RunCommandInspector';
|
|
79
|
+
|
|
80
|
+
export default RunCommandInspector;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type LocalSearchFilesParams } from '@lobechat/electron-client-ipc';
|
|
4
|
+
import { type BuiltinInspectorProps } from '@lobechat/types';
|
|
5
|
+
import { createStaticStyles, cssVar, cx } from 'antd-style';
|
|
6
|
+
import { Check } from 'lucide-react';
|
|
7
|
+
import { memo } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
|
|
10
|
+
import { highlightTextStyles, shinyTextStyles } from '@/styles';
|
|
11
|
+
|
|
12
|
+
import { type LocalFileSearchState } from '../../..';
|
|
13
|
+
|
|
14
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
15
|
+
root: css`
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
display: -webkit-box;
|
|
18
|
+
-webkit-box-orient: vertical;
|
|
19
|
+
-webkit-line-clamp: 1;
|
|
20
|
+
|
|
21
|
+
color: ${cssVar.colorTextSecondary};
|
|
22
|
+
`,
|
|
23
|
+
statusIcon: css`
|
|
24
|
+
margin-block-end: -2px;
|
|
25
|
+
margin-inline-start: 4px;
|
|
26
|
+
`,
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
export const SearchLocalFilesInspector = memo<
|
|
30
|
+
BuiltinInspectorProps<LocalSearchFilesParams, LocalFileSearchState>
|
|
31
|
+
>(({ args, partialArgs, isArgumentsStreaming, pluginState, isLoading }) => {
|
|
32
|
+
const { t } = useTranslation('plugin');
|
|
33
|
+
|
|
34
|
+
const keywords = args?.keywords || partialArgs?.keywords || '';
|
|
35
|
+
|
|
36
|
+
// During argument streaming
|
|
37
|
+
if (isArgumentsStreaming) {
|
|
38
|
+
if (!keywords)
|
|
39
|
+
return (
|
|
40
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
41
|
+
<span>{t('builtins.lobe-local-system.apiName.searchLocalFiles')}</span>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div className={cx(styles.root, shinyTextStyles.shinyText)}>
|
|
47
|
+
<span>{t('builtins.lobe-local-system.apiName.searchLocalFiles')}: </span>
|
|
48
|
+
<span className={highlightTextStyles.primary}>{keywords}</span>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Check if search returned results
|
|
54
|
+
const hasResults = pluginState?.searchResults && pluginState.searchResults.length >= 0;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<div className={cx(styles.root, isLoading && shinyTextStyles.shinyText)}>
|
|
58
|
+
<span style={{ marginInlineStart: 2 }}>
|
|
59
|
+
<span>{t('builtins.lobe-local-system.apiName.searchLocalFiles')}: </span>
|
|
60
|
+
{keywords && <span className={highlightTextStyles.primary}>{keywords}</span>}
|
|
61
|
+
{isLoading ? null : pluginState?.searchResults ? (
|
|
62
|
+
hasResults ? (
|
|
63
|
+
<Check className={styles.statusIcon} color={cssVar.colorSuccess} size={14} />
|
|
64
|
+
) : null
|
|
65
|
+
) : null}
|
|
66
|
+
</span>
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
SearchLocalFilesInspector.displayName = 'SearchLocalFilesInspector';
|
package/{src/tools/local-system → packages/builtin-tool-local-system/src/client}/Inspector/index.ts
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { LocalSystemApiName } from '
|
|
2
|
-
|
|
1
|
+
import { LocalSystemApiName } from '../..';
|
|
3
2
|
import { EditLocalFileInspector } from './EditLocalFile';
|
|
4
3
|
import { GlobLocalFilesInspector } from './GlobLocalFiles';
|
|
5
4
|
import { GrepContentInspector } from './GrepContent';
|
|
@@ -5,7 +5,8 @@ import { memo } from 'react';
|
|
|
5
5
|
|
|
6
6
|
import { useChatStore } from '@/store/chat';
|
|
7
7
|
import { chatToolSelectors } from '@/store/chat/selectors';
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
import FileItem from '../../components/FileItem';
|
|
9
10
|
|
|
10
11
|
interface SearchFilesProps {
|
|
11
12
|
listResults?: LocalFileItem[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Inspector components (customized tool call headers)
|
|
2
|
+
export { LocalSystemInspectors } from './Inspector';
|
|
3
|
+
|
|
4
|
+
// Render components (read-only snapshots)
|
|
5
|
+
export { LocalSystemRenders } from './Render';
|
|
6
|
+
|
|
7
|
+
// Intervention components (approval dialogs)
|
|
8
|
+
export { LocalSystemInterventions } from './Intervention';
|
|
9
|
+
|
|
10
|
+
// Streaming components
|
|
11
|
+
export { LocalSystemStreamings } from './Streaming';
|
|
12
|
+
|
|
13
|
+
// Placeholder components
|
|
14
|
+
export { ListFiles as LocalSystemListFilesPlaceholder } from './Placeholder/ListFiles';
|
|
15
|
+
export { default as LocalSystemSearchFilesPlaceholder } from './Placeholder/SearchFiles';
|
|
16
|
+
|
|
17
|
+
// Re-export types and manifest for convenience
|
|
18
|
+
export { LocalSystemManifest } from '../manifest';
|
|
19
|
+
export { LocalSystemIdentifier } from '../types';
|
|
20
|
+
export * from '../types';
|