support self-check

This commit is contained in:
锦恢 2025-07-03 19:48:40 +08:00
parent 8a6d555da1
commit e478ae95f2
13 changed files with 57 additions and 17 deletions

View File

@ -2,8 +2,10 @@
## [main] 0.1.9 ## [main] 0.1.9
- 增加 mook 功能可以利用随机种子或者AI生成来自动化填充测试 tool 的表单数据 - 增加 mook 功能可以利用随机种子或者AI生成来自动化填充测试 tool 的表单数据
- 增加工具自检功能openmcp 的 tool 下可以点击「工具模块」 右侧的 「工具自检」进入自检模式,该模式下,用户可以自己定义工具执行的拓扑顺序,然后一次性进行自动检测。
- 修复 issue #44: 完成链接跳转的平台适配 - 修复 issue #44: 完成链接跳转的平台适配
- 修复 issue #36: 完成非文件夹打开下的成功启动 - 修复 issue #36: 完成非文件夹打开下的成功启动
- 修复 issue #45: 数组类型参数不支持
- 修复多行对话粘贴进入对话框样式异常的问题 - 修复多行对话粘贴进入对话框样式异常的问题
## [main] 0.1.8 ## [main] 0.1.8

View File

@ -67,7 +67,7 @@ function formatJson(obj: any) {
border-radius: 8px; border-radius: 8px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
font-size: 15px; font-size: 15px;
max-width: 300px; max-width: 1000px;
word-break: break-all; word-break: break-all;
} }
@ -127,6 +127,14 @@ function formatJson(obj: any) {
.item-json { .item-json {
border-radius: 4px; border-radius: 4px;
padding: 6px 10px; padding: 6px 10px;
font-size: 13px;
font-family: var(--code-font-family, monospace);
margin: 2px 0 8px 0;
white-space: pre-wrap;
word-break: break-all;
overflow-x: auto;
max-width: 100%;
box-sizing: border-box;
} }
.item-result { .item-result {
@ -137,8 +145,11 @@ function formatJson(obj: any) {
margin-bottom: 6px; margin-bottom: 6px;
border-radius: .5em; border-radius: .5em;
margin: 5px 0; margin: 5px 0;
overflow-x: auto;
max-width: 100%;
} }
.result-block.error { .result-block.error {
background-color: rgba(245, 108, 108, 0.5); background-color: rgba(245, 108, 108, 0.5);
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-model="showDiagram" width="800px" append-to-body class="no-padding-dialog"> <el-dialog v-model="showDialog" width="800px" class="no-padding-dialog">
<template #header> <template #header>
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<span>Tool Diagram</span> <span>Tool Diagram</span>
@ -43,7 +43,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { nextTick, provide, ref } from 'vue'; import { computed, nextTick, provide, ref } from 'vue';
import Diagram from './diagram.vue'; import Diagram from './diagram.vue';
import { makeNodeTest, topoSortParallel, type DiagramContext, type DiagramState } from './diagram'; import { makeNodeTest, topoSortParallel, type DiagramContext, type DiagramState } from './diagram';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
@ -52,18 +52,27 @@ import { useI18n } from 'vue-i18n';
import type { ToolStorage } from '../tools'; import type { ToolStorage } from '../tools';
import { tabs } from '../../panel'; import { tabs } from '../../panel';
const showDiagram = ref(true);
const { t } = useI18n(); const { t } = useI18n();
const caption = ref(''); const caption = ref('');
const showCaption = ref(false); const showCaption = ref(false);
const props = defineProps({ const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
tabId: { tabId: {
type: Number, type: Number,
required: true required: true
} }
}); });
const emit = defineEmits(['update:modelValue']);
const showDialog = computed({
get: () => props.modelValue,
set: v => emit('update:modelValue', v)
});
function setCaption(text: string) { function setCaption(text: string) {
caption.value = text; caption.value = text;

View File

@ -6,22 +6,29 @@
<h2> <h2>
<span class="iconfont icon-tool"></span> <span class="iconfont icon-tool"></span>
{{ t('tool-module') }} {{ t('tool-module') }}
<el-button
style="font-size: 12px;"
@click="showAutoDetector = true"
>
{{ t('tool-self-detect') }}
</el-button>
</h2> </h2>
<ToolList :tab-id="props.tabId"></ToolList> <ToolList :tab-id="props.tabId"></ToolList>
</div> </div>
<div class="right"> <div class="right">
<ToolExecutor :tab-id="props.tabId"></ToolExecutor> <ToolExecutor :tab-id="props.tabId"></ToolExecutor>
<ToolLogger :tab-id="props.tabId"></ToolLogger> <ToolLogger :tab-id="props.tabId"></ToolLogger>
</div> </div>
</div> </div>
<AutoDetector
v-model="showAutoDetector"
:tab-id="props.tabId"
/>
</el-scrollbar> </el-scrollbar>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { defineProps } from 'vue'; import { defineProps, ref } from 'vue';
import ToolList from './tool-list.vue'; import ToolList from './tool-list.vue';
import ToolExecutor from './tool-executor.vue'; import ToolExecutor from './tool-executor.vue';
import ToolLogger from './tool-logger.vue'; import ToolLogger from './tool-logger.vue';
@ -36,6 +43,8 @@ const props = defineProps({
required: true required: true
} }
}); });
const showAutoDetector = ref(false);
</script> </script>
<style scoped> <style scoped>

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "خطأ في تحليل JSON الذي تم إنشاؤه بواسطة الذكاء الاصطناعي", "ai-gen-error-json": "خطأ في تحليل JSON الذي تم إنشاؤه بواسطة الذكاء الاصطناعي",
"ai-invoke-unknown-tool": "استدعت الذكاء الاصطناعي أداة غير معروفة", "ai-invoke-unknown-tool": "استدعت الذكاء الاصطناعي أداة غير معروفة",
"click-edge-to-delete": "انقر على الحافة للحذف", "click-edge-to-delete": "انقر على الحافة للحذف",
"select-node-define-test-tomo": "اختر عقدة أخرى لتحديد طوبولوجيا الاختبار" "select-node-define-test-tomo": "اختر عقدة أخرى لتحديد طوبولوجيا الاختبار",
"tool-self-detect": "الفحص الذاتي للأداة"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "Fehler beim Parsen von KI-generiertem JSON", "ai-gen-error-json": "Fehler beim Parsen von KI-generiertem JSON",
"ai-invoke-unknown-tool": "KI hat ein unbekanntes Tool aufgerufen", "ai-invoke-unknown-tool": "KI hat ein unbekanntes Tool aufgerufen",
"click-edge-to-delete": "Klicken Sie auf die Kante, um sie zu löschen", "click-edge-to-delete": "Klicken Sie auf die Kante, um sie zu löschen",
"select-node-define-test-tomo": "Wählen Sie einen anderen Knoten aus, um die Testtopologie zu definieren" "select-node-define-test-tomo": "Wählen Sie einen anderen Knoten aus, um die Testtopologie zu definieren",
"tool-self-detect": "Werkzeug-Selbsttest"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "AI-generated JSON parsing error", "ai-gen-error-json": "AI-generated JSON parsing error",
"ai-invoke-unknown-tool": "AI called an unknown tool", "ai-invoke-unknown-tool": "AI called an unknown tool",
"click-edge-to-delete": "Click the edge to delete", "click-edge-to-delete": "Click the edge to delete",
"select-node-define-test-tomo": "Select another node to define the test topology" "select-node-define-test-tomo": "Select another node to define the test topology",
"tool-self-detect": "Tool Self-Check"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "Erreur d'analyse JSON générée par IA", "ai-gen-error-json": "Erreur d'analyse JSON générée par IA",
"ai-invoke-unknown-tool": "L'IA a appelé un outil inconnu", "ai-invoke-unknown-tool": "L'IA a appelé un outil inconnu",
"click-edge-to-delete": "Cliquez sur le bord pour supprimer", "click-edge-to-delete": "Cliquez sur le bord pour supprimer",
"select-node-define-test-tomo": "Sélectionnez un autre nœud pour définir la topologie de test" "select-node-define-test-tomo": "Sélectionnez un autre nœud pour définir la topologie de test",
"tool-self-detect": "Auto-vérification de l'outil"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "AI生成JSONの解析エラー", "ai-gen-error-json": "AI生成JSONの解析エラー",
"ai-invoke-unknown-tool": "AIが未知のツールを呼び出しました", "ai-invoke-unknown-tool": "AIが未知のツールを呼び出しました",
"click-edge-to-delete": "クリックして削除", "click-edge-to-delete": "クリックして削除",
"select-node-define-test-tomo": "テストトポロジを定義するために別のノードを選択してください" "select-node-define-test-tomo": "テストトポロジを定義するために別のノードを選択してください",
"tool-self-detect": "ツール自己診断"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "AI 생성 JSON 구문 분석 오류", "ai-gen-error-json": "AI 생성 JSON 구문 분석 오류",
"ai-invoke-unknown-tool": "AI가 알 수 없는 도구를 호출했습니다", "ai-invoke-unknown-tool": "AI가 알 수 없는 도구를 호출했습니다",
"click-edge-to-delete": "가장자리를 클릭하여 삭제", "click-edge-to-delete": "가장자리를 클릭하여 삭제",
"select-node-define-test-tomo": "테스트 토폴로지를 정의하려면 다른 노드를 선택하세요" "select-node-define-test-tomo": "테스트 토폴로지를 정의하려면 다른 노드를 선택하세요",
"tool-self-detect": "도구 자체 점검"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "Ошибка разбора JSON, созданного ИИ", "ai-gen-error-json": "Ошибка разбора JSON, созданного ИИ",
"ai-invoke-unknown-tool": "ИИ вызвал неизвестный инструмент", "ai-invoke-unknown-tool": "ИИ вызвал неизвестный инструмент",
"click-edge-to-delete": "Нажмите на край, чтобы удалить", "click-edge-to-delete": "Нажмите на край, чтобы удалить",
"select-node-define-test-tomo": "Выберите другой узел для определения тестовой топологии" "select-node-define-test-tomo": "Выберите другой узел для определения тестовой топологии",
"tool-self-detect": "Самопроверка инструмента"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "AI 生成的 JSON 解析错误", "ai-gen-error-json": "AI 生成的 JSON 解析错误",
"ai-invoke-unknown-tool": "AI 调用了未知的工具", "ai-invoke-unknown-tool": "AI 调用了未知的工具",
"click-edge-to-delete": "点击边以删除", "click-edge-to-delete": "点击边以删除",
"select-node-define-test-tomo": "选择另一个节点以定义测试拓扑" "select-node-define-test-tomo": "选择另一个节点以定义测试拓扑",
"tool-self-detect": "工具自检"
} }

View File

@ -194,5 +194,6 @@
"ai-gen-error-json": "AI 生成的 JSON 解析錯誤", "ai-gen-error-json": "AI 生成的 JSON 解析錯誤",
"ai-invoke-unknown-tool": "AI調用了未知的工具", "ai-invoke-unknown-tool": "AI調用了未知的工具",
"click-edge-to-delete": "點擊邊緣以刪除", "click-edge-to-delete": "點擊邊緣以刪除",
"select-node-define-test-tomo": "選擇另一個節點以定義測試拓撲" "select-node-define-test-tomo": "選擇另一個節點以定義測試拓撲",
"tool-self-detect": "工具自檢"
} }