Просмотр исходного кода

feat(app): show loaded agents.md files

adamelmore 3 недель назад
Родитель
Сommit
07d84fe008

+ 17 - 0
packages/ui/src/components/message-part.css

@@ -809,3 +809,20 @@
     display: none;
   }
 }
+
+[data-component="tool-loaded-file"] {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  padding: 4px 0 4px 28px;
+  font-family: var(--font-family-sans);
+  font-size: var(--font-size-small);
+  font-weight: var(--font-weight-regular);
+  line-height: var(--line-height-large);
+  color: var(--text-weak);
+
+  [data-component="icon"] {
+    flex-shrink: 0;
+    color: var(--icon-weak);
+  }
+}

+ 28 - 9
packages/ui/src/components/message-part.tsx

@@ -724,20 +724,39 @@ PART_MAPPING["reasoning"] = function ReasoningPartDisplay(props) {
 ToolRegistry.register({
   name: "read",
   render(props) {
+    const data = useData()
     const i18n = useI18n()
     const args: string[] = []
     if (props.input.offset) args.push("offset=" + props.input.offset)
     if (props.input.limit) args.push("limit=" + props.input.limit)
+    const loaded = createMemo(() => {
+      if (props.status !== "completed") return []
+      const value = props.metadata.loaded
+      if (!value || !Array.isArray(value)) return []
+      return value.filter((p): p is string => typeof p === "string")
+    })
     return (
-      <BasicTool
-        {...props}
-        icon="glasses"
-        trigger={{
-          title: i18n.t("ui.tool.read"),
-          subtitle: props.input.filePath ? getFilename(props.input.filePath) : "",
-          args,
-        }}
-      />
+      <>
+        <BasicTool
+          {...props}
+          icon="glasses"
+          trigger={{
+            title: i18n.t("ui.tool.read"),
+            subtitle: props.input.filePath ? getFilename(props.input.filePath) : "",
+            args,
+          }}
+        />
+        <For each={loaded()}>
+          {(filepath) => (
+            <div data-component="tool-loaded-file">
+              <Icon name="enter" size="small" />
+              <span>
+                {i18n.t("ui.tool.loaded")} {relativizeProjectPaths(filepath, data.directory)}
+              </span>
+            </div>
+          )}
+        </For>
+      </>
     )
   },
 })

+ 1 - 0
packages/ui/src/i18n/ar.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "معاينة الصورة",
 
   "ui.tool.read": "قراءة",
+  "ui.tool.loaded": "تم التحميل",
   "ui.tool.list": "قائمة",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/br.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Visualização de imagem",
 
   "ui.tool.read": "Ler",
+  "ui.tool.loaded": "Carregado",
   "ui.tool.list": "Listar",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/da.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Billedforhåndsvisning",
 
   "ui.tool.read": "Læs",
+  "ui.tool.loaded": "Indlæst",
   "ui.tool.list": "Liste",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/de.ts

@@ -58,6 +58,7 @@ export const dict = {
   "ui.imagePreview.alt": "Bildvorschau",
 
   "ui.tool.read": "Lesen",
+  "ui.tool.loaded": "Geladen",
   "ui.tool.list": "Auflisten",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/en.ts

@@ -55,6 +55,7 @@ export const dict = {
   "ui.imagePreview.alt": "Image preview",
 
   "ui.tool.read": "Read",
+  "ui.tool.loaded": "Loaded",
   "ui.tool.list": "List",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/es.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Vista previa de imagen",
 
   "ui.tool.read": "Leer",
+  "ui.tool.loaded": "Cargado",
   "ui.tool.list": "Listar",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/fr.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Aperçu de l'image",
 
   "ui.tool.read": "Lire",
+  "ui.tool.loaded": "Chargé",
   "ui.tool.list": "Lister",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/ja.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "画像プレビュー",
 
   "ui.tool.read": "読み込み",
+  "ui.tool.loaded": "読み込み済み",
   "ui.tool.list": "リスト",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/ko.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "이미지 미리보기",
 
   "ui.tool.read": "읽기",
+  "ui.tool.loaded": "로드됨",
   "ui.tool.list": "목록",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/no.ts

@@ -57,6 +57,7 @@ export const dict: Record<Keys, string> = {
   "ui.imagePreview.alt": "Bildeforhåndsvisning",
 
   "ui.tool.read": "Les",
+  "ui.tool.loaded": "Lastet",
   "ui.tool.list": "Liste",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/pl.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Podgląd obrazu",
 
   "ui.tool.read": "Odczyt",
+  "ui.tool.loaded": "Załadowano",
   "ui.tool.list": "Lista",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/ru.ts

@@ -54,6 +54,7 @@ export const dict = {
   "ui.imagePreview.alt": "Предпросмотр изображения",
 
   "ui.tool.read": "Чтение",
+  "ui.tool.loaded": "Загружено",
   "ui.tool.list": "Список",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/zh.ts

@@ -58,6 +58,7 @@ export const dict = {
   "ui.imagePreview.alt": "图片预览",
 
   "ui.tool.read": "读取",
+  "ui.tool.loaded": "已加载",
   "ui.tool.list": "列表",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",

+ 1 - 0
packages/ui/src/i18n/zht.ts

@@ -58,6 +58,7 @@ export const dict = {
   "ui.imagePreview.alt": "圖片預覽",
 
   "ui.tool.read": "讀取",
+  "ui.tool.loaded": "已載入",
   "ui.tool.list": "清單",
   "ui.tool.glob": "Glob",
   "ui.tool.grep": "Grep",