ForcePilot/web/src/components/ToolCallingResult/tools/ReadFileTool.vue
2026-02-03 14:03:57 +08:00

63 lines
1.4 KiB
Vue

<template>
<BaseToolCall :tool-call="toolCall">
<template #header>
<div class="sep-header">
<span class="note">read_file</span>
<span class="separator" v-if="filePath">|</span>
<span class="description">
{{ filePath }}
<span class="tag" v-if="lineRange">{{ lineRange }}</span>
</span>
</div>
</template>
</BaseToolCall>
</template>
<script setup>
import { computed } from 'vue'
import BaseToolCall from '../BaseToolCall.vue'
const props = defineProps({
toolCall: {
type: Object,
required: true
}
})
const parsedArgs = computed(() => {
const args = props.toolCall.args || props.toolCall.function?.arguments
if (!args) return {}
if (typeof args === 'object') return args
try {
return JSON.parse(args)
} catch (e) {
return {}
}
})
const filePath = computed(() => {
const path = parsedArgs.value.file_path || ''
return path.startsWith('/') ? path.slice(1) : path
})
const lineRange = computed(() => {
const offset = parsedArgs.value.offset
const limit = parsedArgs.value.limit
if (offset !== undefined && limit !== undefined) {
return `Lines ${offset}-${Number(offset) + Number(limit)}`
} else if (limit !== undefined) {
return `First ${limit} lines`
}
return ''
})
</script>
<style lang="less" scoped>
.sep-header {
.tag {
color: var(--color-primary-600);
background-color: var(--color-primary-50);
}
}
</style>