feat: v5.0 全面进化 — 浏览器控制 + 训练数据导出 + Cron 定时任务
新增功能: 1. 🌐 浏览器控制(8 个工具) - 主进程 browser.ts: 基于隐藏 BrowserWindow 的浏览器引擎 - browser_open: 加载 URL,返回标题和最终 URL - browser_screenshot: 页面截图(base64 PNG) - browser_evaluate: 执行任意 JS,支持 DOM 操作 - browser_extract: 提取页面文本 + 链接(最多 50 条) - browser_click: CSS 选择器点击 - browser_type: 输入框文本输入 - browser_scroll: 上下滚动/顶部/底部 - browser_close: 关闭浏览器释放资源 - 应用退出时自动清理 (before-quit) - 工具总数:34 个 2. 📚 训练数据导出 - training-export.ts: 从 traces + messages 提取 SFT 格式训练数据 - 输出 JSONL 格式(instruction/input/output/tools/observations/metadata) - 设置面板一键导出,Electron 原生文件对话框选择保存位置 3. ⏰ Cron 定时任务 - cron-manager.ts: one-shot(指定时间)+ recurring(周期性) - 任务配置持久化到 settings - 设置面板添加/删除/启用/禁用 - 任务触发时自动填入聊天输入框 + toast 通知 - 应用启动时自动恢复所有已启用任务 新增文件:browser.ts, cron-manager.ts, training-export.ts 修改文件:ipc.ts, main.ts, settings-modal.ts, index.html, main.ts(渲染), tool-registry.ts
This commit is contained in:
@@ -23,6 +23,7 @@ import { initMemoryModal } from './components/memory-modal.js';
|
||||
import { initToolsModal, closeToolsModal } from './components/tools-modal.js';
|
||||
import { initMemoryManager } from './services/memory-manager.js';
|
||||
import { restoreHeartbeat } from './components/settings-modal.js';
|
||||
import { restoreCronTasks } from './services/cron-manager.js';
|
||||
import { setToolEnabled, setRunCommandMode } from './services/tool-registry.js';
|
||||
import { initToolConfirmModal } from './components/tool-confirm-modal.js';
|
||||
import { initWorkspacePanel } from './components/workspace-panel.js';
|
||||
@@ -392,6 +393,8 @@ async function init(): Promise<void> {
|
||||
|
||||
// Heartbeat 在 UI 就绪后启动
|
||||
restoreHeartbeat();
|
||||
// Cron 定时任务恢复
|
||||
restoreCronTasks();
|
||||
} catch (err) {
|
||||
logError('初始化失败', (err as Error).message);
|
||||
if (!api!) {
|
||||
@@ -454,6 +457,21 @@ function bindGlobalEvents(): void {
|
||||
const msg = e.reason?.message || String(e.reason);
|
||||
showToast(`操作失败: ${msg}`, 'error', 5000);
|
||||
});
|
||||
|
||||
// v5.0 Cron 定时任务事件
|
||||
window.addEventListener('metona:cron-task', ((e: CustomEvent) => {
|
||||
const task = e.detail;
|
||||
if (task?.message) {
|
||||
showToast(`⏰ 定时任务: ${task.name}`, 'info', 5000);
|
||||
logInfo(`定时任务触发: ${task.name}`, task.message.slice(0, 60));
|
||||
// 将任务描述填入输入框
|
||||
const chatInput = document.querySelector('#chatInput') as HTMLTextAreaElement;
|
||||
if (chatInput) {
|
||||
chatInput.value = task.message;
|
||||
chatInput.focus();
|
||||
}
|
||||
}
|
||||
}) as EventListener);
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
Reference in New Issue
Block a user