feat: v3.0 Tool Calling — AI 本地文件操作系统
新增文件: - src/main/tool-security.ts: 路径白名单/黑名单、命令安全检查 - src/main/tool-handlers.ts: 7个工具实现(read/write/list/search/create/delete/run) - src/renderer/services/tool-registry.ts: 工具注册调度中心 - src/renderer/services/agent-engine.ts: Agent Loop 流式多轮工具调用引擎 - src/renderer/components/tool-confirm-modal.ts: 高风险操作确认对话框 修改文件: - types.d.ts: 新增 ToolCall/ToolResult/ToolCallRecord 等类型 - ollama.ts: chatStream 支持 tools 参数 - ipc.ts: 新增 tool:execute/getConfig/setAllowedDirs IPC - preload.ts: 暴露 tool API - chat-area.ts: 渲染工具调用卡片 - input-area.ts: 集成 Agent Loop 引擎 - settings-modal.ts: 工具调用开关设置 - index.html: 工具调用设置面板 + 确认对话框 HTML - style.css: 工具调用卡片、确认对话框样式 - main.ts: 初始化工具调用配置
This commit is contained in:
@@ -199,6 +199,34 @@
|
||||
<p class="text-muted">无运行中的模型</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-group">
|
||||
<label class="setting-label">
|
||||
🔧 工具调用(Tool Calling)
|
||||
<label class="toggle-label" style="margin-left:auto;display:inline-flex;">
|
||||
<input type="checkbox" id="toggleToolCalling">
|
||||
<span class="toggle-slider"></span>
|
||||
</label>
|
||||
</label>
|
||||
<p class="text-muted" style="font-size:11px;margin-bottom:8px;">启用后,AI 可以在对话中主动调用本地工具(读写文件、搜索、创建目录等)。需要模型支持 Tool Calling。</p>
|
||||
<div class="tool-settings" id="toolSettings">
|
||||
<div class="tool-list">
|
||||
<div class="tool-item"><span>📄 读取文件</span><span class="text-muted">自动</span></div>
|
||||
<div class="tool-item"><span>✏️ 写入文件</span><span class="text-muted">需确认</span></div>
|
||||
<div class="tool-item"><span>📁 列出目录</span><span class="text-muted">自动</span></div>
|
||||
<div class="tool-item"><span>🔍 搜索文件</span><span class="text-muted">自动</span></div>
|
||||
<div class="tool-item"><span>📂 创建目录</span><span class="text-muted">需确认</span></div>
|
||||
<div class="tool-item"><span>🗑️ 删除文件</span><span class="text-muted">需确认</span></div>
|
||||
<div class="tool-item">
|
||||
<span>💻 执行命令</span>
|
||||
<label class="toggle-label" style="margin:0;">
|
||||
<input type="checkbox" id="toggleRunCommand">
|
||||
<span class="toggle-slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted" style="font-size:11px;margin-top:8px;">⚠️ 高风险操作(写入/删除/命令执行)会弹出确认对话框。系统关键路径(/etc, /sys, ~/.ssh 等)已自动屏蔽。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-group">
|
||||
<label class="setting-label">显存管理</label>
|
||||
<button class="btn btn-danger" id="btnReleaseVRAM">释放显存(卸载模型)</button>
|
||||
@@ -370,6 +398,23 @@
|
||||
<img class="lightbox-img" id="lightboxImg" src="" alt="预览">
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════ 工具调用确认对话框 ═══════════════ -->
|
||||
<div class="modal-overlay" id="toolConfirmModal" style="display:none;">
|
||||
<div class="modal" style="max-width:520px;">
|
||||
<div class="modal-header">
|
||||
<h3 id="toolConfirmTitle">⚠️ 确认操作</h3>
|
||||
</div>
|
||||
<div class="modal-body" id="toolConfirmBody">
|
||||
<p>AI 请求执行一个需要确认的操作。</p>
|
||||
</div>
|
||||
<div class="preset-modal-actions" style="padding:12px 20px 16px;">
|
||||
<div style="flex:1;"></div>
|
||||
<button class="btn btn-outline" id="toolCancelBtn">❌ 取消</button>
|
||||
<button class="btn btn-primary" id="toolConfirmBtn">✅ 确认执行</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════ Toast 通知容器 ═══════════════ -->
|
||||
<div class="toast-container" id="toastContainer"></div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user