Skip to content

💥 脚本猫 AI Agent#1286

Open
CodFrm wants to merge 91 commits intorelease/v1.5from
develop/agent
Open

💥 脚本猫 AI Agent#1286
CodFrm wants to merge 91 commits intorelease/v1.5from
develop/agent

Conversation

@CodFrm
Copy link
Member

@CodFrm CodFrm commented Mar 15, 2026

概述

为 ScriptCat 新增完整的 AI Agent 平台,用户可以通过自然语言对话控制浏览器,自动完成网页操作、定时任务、工具调用等复杂工作流。

构建产物可以从 https://github.com/scriptscat/scriptcat/actions/workflows/build.yaml feature/agent 获取

Youtube 演示

https://www.youtube.com/watch?v=6OT7qeY3Uuk

如果你对此感兴趣,可以加入 Discord 进行交流

核心功能

🤖 AI 对话与多模型支持

  • 内置聊天界面,支持流式输出、Markdown 渲染、思考过程展示
  • 适配 OpenAI 和 Anthropic (Claude) 两大主流 LLM Provider
  • 支持 SSE 流式解析,实时展示 Agent 推理过程

🌐 浏览器 DOM 操作

  • Agent 可通过自然语言指令操作网页:点击、填写表单、滚动、等待元素、截图等
  • 双引擎实现:基于内容脚本的 DOM 操作 + 基于 CDP(Chrome DevTools Protocol)的底层控制
  • 网页截图能力,Agent 可"看到"页面内容辅助决策

🧩 Skill 技能系统

  • 模块化能力扩展机制:一个 Skill = 行为提示词 + 可选工具脚本 + 可选参考文档
  • 支持一键安装 / 管理 / 卸载
  • Agent 根据对话内容自动匹配并加载对应 Skill

🔧 CATTool 自定义工具

  • 用户可编写自定义工具脚本(CATTool),Agent 在对话中自动发现和调用
  • 标准化元数据格式,支持参数类型声明和 GM API 权限申请
  • 工具注册中心统一管理,命名空间隔离避免冲突

🔌 MCP 协议支持

  • 实现 MCP(Model Context Protocol)客户端
  • 可连接外部 MCP 服务器,扩展 Agent 的工具调用能力
  • MCP 服务器管理界面,支持增删和状态监控

⏰ 定时任务调度

  • 通过自然语言创建 Cron 定时任务
  • 支持任务的创建、查询、更新、删除
  • 任务到期自动触发 Agent 执行

📂 OPFS 文件系统

  • 基于浏览器 OPFS(Origin Private File System)的文件管理
  • Agent 可读写文件,支持跨会话数据持久化
  • 内置文件浏览器 UI

💬 GM API 扩展(脚本侧 Agent API)

  • 新增 CAT.agent.* 系列 API,用户脚本可与 Agent 深度交互:
    • CAT.agent.dom — 脚本内调用 DOM 操作
    • CAT.agent.conversation — 管理对话上下文
    • CAT.agent.tools — 动态注册/调用工具
    • CAT.agent.task — 任务生命周期管理

UI 页面

页面 功能
AgentChat 聊天主界面(消息列表、输入框、工具调用展示、思考过程折叠)
AgentProvider 模型配置(API Key、模型选择、参数调节)
AgentSkills Skill 安装与管理
AgentCATool CATTool 管理
AgentMcp MCP 服务器管理
AgentTasks 定时任务管理
AgentOPFS 文件浏览器

技术亮点

  • 架构清晰:Agent 编排器 → Provider 适配 → Tool 注册 → 执行器,各层职责明确
  • 测试完善:单元测试覆盖核心模块(工具注册、CATTool 执行、MCP 客户端、SSE 解析等),新增 E2E 测试覆盖对话流程、工具调用、Skill 安装、错误处理
  • 类型安全:完整的 TypeScript 类型定义(scriptcat.d.ts +1193 行),同步维护中文版类型注释
  • 国际化:8 种语言的翻译同步更新

数据规模

  • 212 个文件变更,+30,880 行,-2,158 行
  • 80+ 个 commit

cyfung1031 and others added 30 commits March 11, 2026 19:02
* 优化 ScriptEditor

* Update ScriptEditor.tsx

* Update ScriptEditor.tsx

* ✨ 调整隐藏编辑框侧边栏位置 #1185 (#1254)

* ✨ 调整隐藏编辑框侧边栏位置 #1185

* 图标展示反了

* 调整 `confirm_leave_page` / `script_modified_leave_confirm` 提示避免按「新增脚本」时弹出提示

* Update ScriptEditor.tsx

* css 布局修正

* 统一 .focus 为 delayedEditorFocus

* 🐛 修复 ScriptEditor review 问题

- 将模块级 cid 变量改为 useRef,避免多实例共享 timer
- hotKeys.current.length = 0 改为 hotKeys.current = [],避免原地修改影响旧引用
- handleDeleteEditor 在 setEditors 回调内重新计算 index,修复竞态问题
- 移除冗余的 scriptList.find 查找
- 修复「袑始化」笔误为「初始化」
- 移除重复的 position: absolute 声明

---------

Co-authored-by: wangyizhi <yz@ggnb.top>
rspack build 阶段未转换 manifest.json 中的版本号,导致
"1.4.0-beta" 等非法版本使扩展无法加载,E2E 测试全部失败。
复用 pack.js 中的转换逻辑,在 CopyRspackPlugin transform
中将版本号转为纯数字格式(如 1.4.0.1100)。
将 rspack.config.ts 和 scripts/pack.js 中重复的版本转换逻辑
提取到 scripts/version.js 中复用。
- gm-api.spec.ts: Phase 2 重启 context 后等待 service worker 注册完成
  再交给 fixtures,避免 extensionId fixture 用 10s 全局超时等待失败
- gm-api.spec.ts: 用事件驱动 Promise 替换 500ms 轮询循环,
  console 结果一出现立即继续
- utils.ts: installScriptByCode 用 DOM 事件等待替代固定延迟:
  click 后等光标出现,粘贴后等 .view-lines 内容变化

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
新增 AI Agent 聊天模块,包括聊天界面、服务层、数据存储和多语言支持
将 Agent API 请求路由到 runtime/gmApi 通道,通过 @PermissionVerify.API
装饰器实现权限验证,脚本首次调用时弹窗确认,防止未授权消耗 API Token。
- 新增 OPFS 文件浏览器页面,支持目录浏览、文件预览和删除操作
- 默认进入 agents/ 目录,支持面包屑导航到根目录
- 支持在 conversation.create 时注册工具,简化多轮对话的工具传递
- 添加 8 种语言的 i18n 翻译
- 修复 callLLM 提前转发 done 事件导致客户端过早 resolve 的问题
- 修复 WindowMessage.connect 未使用 "*" targetOrigin 导致沙箱消息被丢弃
- 修复 tool calling 循环中 assistant 消息缺少 tool_calls 字段
- 支持 OpenAI 和 Anthropic 格式的 tool_calls 消息构建
- UI 合并 tool 结果到 assistant 的 ToolCallBlock 展示,过滤 tool/system 消息
- 提取 buildInstance 函数解决装饰器 this 绑定问题,使用 uuidv4 生成 ID
- ChatMessage 类型新增 usage/durationMs/firstTokenMs 字段
- Service Worker 测量 LLM 调用总耗时并通过 done 事件返回
- UI 层捕获首 token 延迟和 token 用量,持久化到消息中
- 新增 MessageToolbar 组件:左侧操作按钮(复制/重新回答/删除),右侧元数据信息(token用量/耗时/TTFT/工具调用数)
- 流式期间显示实时计时动画,完成后切换为最终数据
- 删除操作支持二次确认
- 新增 deleteMessages 批量删除辅助函数
- 添加 i18n 多语言支持(8个locale)
- 新增 CATTool 元数据解析、存储、注册和执行完整链路
- 新增 CAT.agent.tools GM API(install/remove/list/call)
- 修复 CATTool 沙箱执行时 args 未定义的问题:使用 compileScriptCodeByResource 包裹代码以启用 with 上下文绑定
- 优化 Agent Chat UI 组件样式
将 App.tsx (~1130行) 按职责拆分为:
- utils.ts: 纯工具函数和常量
- hooks.tsx: useInstallData() 自定义 hook
- components/CATToolInstallView.tsx: CATTool 安装视图
- components/ScriptInstallView.tsx: UserScript/Subscribe 安装视图
- App.tsx: 精简为路由分发 (~57行)
新增 example/agents/tools/ 目录:
- hello_world.js: 最简 CATTool 示例
- text_processor.js: 多参数和 enum 类型
- json_formatter.js: JSON 处理和错误处理
- weather_query.js: GM_xmlhttpRequest 网络请求
- use_cattool.js: 通过脚本 API 安装和调用 CATTool
- README.md: 格式说明和测试方法
- 修复历史消息未携带 toolCalls 字段导致多轮 tool calling 上下文丢失
- 添加 OpenAI 流式 API 错误响应处理
- 添加 /new 命令和 clearMessages 接口用于清空对话上下文
- UI 发送消息时正确传递 toolCallId 和 toolCalls
- 删除独立的 handleChat,UI 和 Sandbox 统一走 conversationChat 通道
- 持久化责任从 UI 移交到 SW,简化前端逻辑
- 字段命名统一:createdAt/updatedAt → createtime/updatetime
- 支持 UI 动态切换 modelId
- 大幅补充 Agent 相关测试(流式解析、tool calling 循环、CATTool 边界等)
- 对话实例支持 / 命令拦截机制,内置 /new 命令清空对话
- 脚本可通过 commands 选项注册自定义命令并覆盖内置命令
- 修复会话列表删除确认弹框因鼠标移开导致隐藏的问题
- 会话 ID 同步到 URL 参数,刷新页面保持当前会话选中
- 新增命令机制 8 个单元测试
- CATTool 安装改为打开安装页面确认,支持脚本来源追踪和更新提示
- CATToolRepo 索引/数据分离(tools.json 索引 + data/<id>.json 完整记录)
- CATTool UUID 由 SW 统一生成,通过全局映射支持 GM API 权限验证
- AgentModelConfig 从 SystemConfig 迁移到独立的 AgentModelRepo
- AgentModelRepo.getDefaultModelId 使用 chrome.storage.local 直接存取
- cancelCATToolInstall 统一为 try/finally 模式
- openCATToolInstallPage 增加 tab.id 空值检查
实现 Agent 框架的 DOM 操作 API,支持两种模式:
- 默认模式:通过 chrome.scripting.executeScript 操作
- trusted 模式:通过 chrome.debugger CDP 实现真实用户输入

新增 8 个 Agent 工具:dom_list_tabs, dom_navigate, dom_read_page,
dom_screenshot, dom_click, dom_fill, dom_scroll, dom_wait_for

readPage 支持 summary/detail 分层读取,控制上下文大小;
操作后自动返回 ActionResult(跳转/新 tab/dialog 检测);
debugger 权限放在 optional_permissions 动态申请。
- 新增 Skill 类型定义(SkillSummary, SkillRecord, SkillApiRequest 等)
- SKILL.md 解析器(YAML frontmatter + markdown body)
- SkillRepo OPFS 存储(registry + scripts + references)
- AgentService 集成:loadSkills, installSkill, resolveSkills
- 2 个 meta-tool:execute_skill_tool, read_reference
- GM API: CAT.agent.skills(list/get/install/remove)
- UI: ChatInput 增加 Skills 选择器
- agent-fixtures.ts: Mock LLM 基础设施(context.route 拦截 + OpenAI SSE 响应)
- agent-conversation.spec.ts: 基础对话、Tool Calling、多轮上下文保持
- agent-cattool.spec.ts: CATTool 安装/调用/删除、CATTool + 对话联动
resolveSkills 不再将完整 SKILL.md 正文和 CATTool schema 一次性注入 system message,
改为三层渐进加载:1) 摘要列表 2) load_skill 按需获取 prompt 3) execute_skill_tool/read_reference 按需执行。
execute_skill_tool 新增 skill_name 参数确定工具作用域,CATTool 脚本改为执行时按需加载。
新增 14 个 Skill 系统单元测试。
ephemeral 模式下会话不持久化到 OPFS、不加载内置工具和 Skills,
工具完全由脚本提供,消息历史由脚本端内存管理。
SW 端无状态处理,仅解析 model 配置调用 LLM。
…rompts

实现完整的 MCP (Model Context Protocol) 客户端:
- MCPClient: JSON-RPC 2.0 over HTTP POST,Session ID 管理,认证头
- MCPService: 连接池管理,懒连接,MCP 工具自动注册到 ToolRegistry
- MCPServerRepo: chrome.storage 持久化服务器配置
- GM API: CAT.agent.mcp(SW + Content 双侧),权限验证
- UI: AgentMcp 页面 — 服务器 CRUD、启用/禁用、测试连接
- 单元测试覆盖 MCPClient、MCPToolExecutor、MCPService
agent_model:__default__ 存储的是默认模型 ID(字符串),被 find() 当作
AgentModelConfig 返回,导致 UI 访问 model.apiKey.length 时报 TypeError。
- 解析 SSE delta 中的 reasoning_content 字段,发出 thinking_delta 事件(兼容 deepseek/o-series)
- 将 usage 检查移到 choices 处理之后,修复最后一个 chunk 同时包含 tool_call 增量和 usage 时丢失数据的问题
- Service Worker callLLM() 收集 thinking 内容并持久化到 assistant 消息
- 修复 vitest.config.ts 中重复 exclude 导致 e2e 测试被误执行的问题
CodFrm added 13 commits March 14, 2026 17:34
支持 cron 定时触发 Agent 任务:
- internal 模式:SW 自主执行 LLM 调用,结果存入对话历史
- event 模式:通过 EmitEvent 链路通知脚本,脚本自行处理执行
- 脚本 API:CAT.agent.task.create/list/get/update/remove/runNow/addListener
- UI 管理页面:卡片列表、创建编辑、运行历史
- chrome.alarms 每分钟 tick 调度,runningTasks 防并发
点击前使用 elementFromPoint 检查目标坐标处的实际元素,
如果被 modal/header 等遮挡则抛出包含遮挡元素描述的错误。
- AgentService 添加 handleDomApi 代理方法,转发到 domService
- gm_api.ts 补充 GMAgentDomApi import 触发装饰器注册
- compat-grant.js 添加 CAT.agent.dom 和 CAT.agent.task 到 grant 白名单
- 补充 GM API 注册完整性测试和 handleDomApi 单元测试
Skills、CATTools、示例脚本已迁移到 github.com/scriptscat/skills
在 SKILL.md frontmatter 中通过 config 块声明配置字段(text/number/select/switch),
用户在 Skills 管理 UI 填写值(支持 secret 遮蔽),CATTool 执行时以 CAT_CONFIG 全局
对象注入沙箱,使脚本可安全访问 API Key 等敏感配置。

主要改动:
- 用 yaml 包重写 frontmatter 解析器,支持嵌套 config 块
- 新增 SkillConfigField 类型,扩展 SkillMetadata/Record/Summary
- CATToolExecutor → offscreen → sandbox 全链路透传 configValues
- SkillRepo 新增 config_values.json 读写
- Agent Service 注册 getSkillConfigValues/saveSkillConfig handler
- UI: SkillConfigModal 配置表单 + SkillInstallView 配置预览
- scriptcat.d.ts 声明 CAT_CONFIG 全局变量
- scriptcat.d.ts: 全量同步实际实现,所有 GM_*/CAT_*/CAT.agent API 添加英文 JSDoc
- scriptcat.zh-CN.d.ts: 新增全量中文版类型声明(含 GM_*/CAT_*/CAT.agent 所有 API)
- CAT_CONFIG 类型改为 Readonly<Record<string, unknown>> 与 Object.freeze 实现一致
- 新增 JsonValue 通用类型用于 CATTool 动态返回值
- cat_agent_tools.ts: install→CATToolRecord, remove→boolean, list→CATToolSummary[], call→JsonValue
- cat_agent_dom.ts: 所有 DOM 操作方法使用具体返回类型(TabInfo[], ActionResult 等)
- cat_agent_skills.ts: list→SkillSummary[], get→SkillRecord|null, install→SkillRecord, remove→boolean
- agent.ts: handleToolsApi/handleSkillsApi/callCATTool 返回类型同步更新
- cattool_executor.ts: execute 返回 JsonValue
- stopMonitor 返回类型 Promise<void> → Promise<MonitorResult>,新增 MonitorResult 接口
- tools.list() 返回类型 CATToolRecord[] → CATToolSummary[](不含 code)
- SkillSummary 新增 hasConfig 字段
- SkillRecord 新增 config 字段及 SkillConfigField 接口
- 同步更新中文版 scriptcat.zh-CN.d.ts
- agent-fixtures: 复用 Phase 1 的 extensionId 避免 service worker 已终止时
  waitForEvent 永久挂起,主动导航触发 service worker 启动
- options.spec: 用 .menu-tools 精确定位"工具"菜单项,避免匹配 CATool 子菜单
- playwright.config: 本地也启用 1 次重试,容错 Chrome headless 偶发启动问题
默认仍为 30 秒,支持在 ==CATTool== 头中声明 @timeout(秒)覆盖默认值,
适用于网络爬取、大文件处理等耗时工具场景。
- 消除 react-hooks/exhaustive-deps 警告,添加 eslint-disable 注释
- JSX 中字符串字面量用花括号包裹,修复 jsx-no-literals 规则
- E2E fixtures 优化 Phase 2 service worker 竞态处理
- 亮色模式使用 var(--color-text-1) 深色文字,暗色模式使用白色
- 用户消息改用 getTextContent 纯文本渲染
- 版本号升级至 1.5.0-alpha
ephemeral 路径不再硬编码 cache: false,改为透传调用方的 cache 参数。
ConversationCreateOptions 新增 cache 字段,CAT API 全链路支持。
@cyfung1031
Copy link
Collaborator

如果是更强的画面交互操作对话会更好
(不是文字形式)

例如
截当前画面一部份给AI分析
然后AI会说 「这是一个表格,你想做什么操作」
然后回它要怎么做

@CodFrm
Copy link
Member Author

CodFrm commented Mar 15, 2026

如果是更强的画面交互操作对话会更好

(不是文字形式)

例如

截当前画面一部份给AI分析

然后AI会说 「这是一个表格,你想做什么操作」

然后回它要怎么做

完全可以做到,只需要写一个用户脚本,让AI先分析网站,然后猜出选项,用户点击即可

我还在努力开发中,文档还在编写 不知道你有没有看YouTube视频

CodFrm and others added 9 commits March 16, 2026 14:05
* 把 fetchIconByDomain 改成 scriptcat.org

* scriptcat.org -> ext.scriptcat.org

* ✨ 支持配置化 Favicon 服务提供者 #1268

新增图标服务设置项,支持 ScriptCat / 本地获取 / Google 三种 provider,
默认使用 ScriptCat API。切换 provider 时自动清除 favicon 缓存。
同时增加了对接口返回异常状态码(>=300)的处理。

* 🐛 修复图标服务设置项布局,标题与选择框放在同一行

* 🐛 修复 local 模式下 favicon 获取逻辑,还原本地抓取实现

* 调整图标服务位置

* ✅ 为 #1268 favicon 服务增加单元测试

* 🐛 修复 favicon 服务切换相关问题

- fetchIconByService 添加 default 分支回退到 local
- 切换服务时清除内存中的 blob URL 缓存
- 使用 deletes() 批量删除替代逐条删除
- setFaviconService 添加 return
- 修复 pre-push 正则匹配 release/ 分支

* 🎨 修复 favicons 相关文件的 prettier 格式问题

---------

Co-authored-by: 王一之 <yz@ggnb.top>
* 新增批次检查脚本的 timeout, 避免一个脚本更新时间太长导致所有脚本检查失败

* 🐛 修复批量更新超时机制的 4 个问题

- fetchScriptBody 添加 AbortSignal 支持
- 繁体转简体:確保次序 → 确保顺序
- 用 setTimeout+clearTimeout 替代 sleep,超时后正确清理
- 超时时通过 AbortController 中止进行中的请求
- Map 预初始化确保返回顺序一致

---------

Co-authored-by: 王一之 <yz@ggnb.top>
* additional test for responseType=document

* 🐛 修复 脚本设置-授权管理 控制无效的问题 (#1267)

* 🐛 修复 脚本设置-授权管理 控制无效的问题

* 将校验逻辑放到confirm

* 修复GM cookie权限判断

* 删除directDeny

* buildCacheKey

* 整理代码

* Update src/app/service/service_worker/permission_verify.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* 🔒 使用 DOMPurify 清理公告通知 HTML 内容 (#1274)

* 🔒 使用 DOMPurify 清理公告通知的 HTML 内容 #1273

使用 DOMPurify 对服务端下发的公告 HTML 进行白名单过滤,防止潜在的
UI 注入风险。只允许基础标签和安全的 CSS 属性(颜色、字体相关)。


* code update

---------

Co-authored-by: cyfung1031 <44498510+cyfung1031@users.noreply.github.com>

* 🐛 修复 include *?* 表达式处理问题 #1271 (#1272)

* 🐛 修复 include *?* 表达式处理问题 #1271

* Added error handling to avoid crash

* update globSplit

* update globSplit

* update globSplit

---------

Co-authored-by: cyfung1031 <44498510+cyfung1031@users.noreply.github.com>

* fix #1274 (#1275)

* fix #1274

* Update index.ts

* Array.includes -> Set.has

* 🐛 修复与隐身窗口检查权限冲突导致反复重启的问题

* 📄 docs: update Chrome Web Store URLs to new domain (#1279)

Google migrated the Chrome Web Store from `chrome.google.com/webstore`
to `chromewebstore.google.com`. This updates all CWS URLs across
README files to use the new domain.

The old URLs currently redirect, but will eventually stop working.

* ✅ 添加 Playwright E2E 测试及 GM API 功能测试 (#1283)

* ✅ 添加 Playwright E2E 测试

- 新增 22 个 E2E 测试覆盖 Options、Popup、Install、Editor、Settings 页面
- 配置 Playwright 使用 --headless=new 模式加载扩展
- 在 CI workflow 中添加 E2E 测试 job

* ✅ 添加 GM API E2E 测试

新增 gm-api.spec.ts 测试三类 GM API:
- GM_ 同步 API (gm_api_test.js): 29 项测试
- GM.* 异步 API (gm_api_async_test.js): 29 项测试
- Content 注入测试 (inject_content_test.js): 11 项测试

实现要点:
- 两阶段浏览器启动:Phase 1 启用 userScriptsAccess,Phase 2 重启运行测试
- 自动审批权限确认弹窗(cookie 等需要用户授权的 API)
- 通过剪贴板注入脚本代码到 Monaco 编辑器
- 替换 jsdelivr CDN 为 unpkg 提升资源加载速度
- 去除 @require/@resource 的 SRI hash 避免校验失败

更新 utils.ts 中 installScriptByCode 增加保存失败的 fallback 检测

* 🐛 修复 GM API E2E 测试 CI 兼容性

- Phase 1 添加 --headless=new 参数,修复 CI 无 X server 环境
- 添加 eslint-disable 注释消除 Playwright use() 的误报
- prettier 格式化修正

* 🐛 修复 E2E 测试 CI 兼容性问题

- vitest.config.ts: 排除 e2e/ 目录避免 Vitest 误跑 Playwright 测试
- eslint.config.mjs: 为 e2e/ 目录关闭 react-hooks/rules-of-hooks 规则
- e2e/options.spec.ts: 菜单正则加 /i 标志修复英文环境大小写匹配
- prettier 格式化修正

* 🚑 修复其他扩展注入 chrome.runtime 导致环境误判的问题 #1280 (#1281)

* 🐛 修复其他扩展注入 chrome.runtime 导致环境误判的问题 #1280

移除 isContent 运行时检测,改为通过 CustomEventMessage.envTag 在构建入口确定环境,
避免其他扩展(如大学搜题酱)向页面注入 chrome.runtime 对象导致 inject 环境被误判为 content 环境。

* Update src/app/service/content/gm_api/gm_api.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* update

* 删除不必要的isconnect

* 将 typecheck 集成到 lint/lint-fix 脚本中

* 修复引用

* 删除test-results

---------

Co-authored-by: cyfung1031 <44498510+cyfung1031@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ⚙️ 优化 CI 流水线和测试配置

- 缓存 Playwright 浏览器避免重复下载
- 测试失败时上传截图/视频/报告等调试产物
- Playwright CI 环境启用 HTML+list 双 reporter、失败截图和视频
- 各工具链配置屏蔽 .claude 目录

* ✅ 修复 e2e 测试 service worker 超时并优化等待策略

- gm-api.spec.ts: Phase 2 重启 context 后等待 service worker 注册完成
  再交给 fixtures,避免 extensionId fixture 用 10s 全局超时等待失败
- gm-api.spec.ts: 用事件驱动 Promise 替换 500ms 轮询循环,
  console 结果一出现立即继续
- utils.ts: installScriptByCode 用 DOM 事件等待替代固定延迟:
  click 后等光标出现,粘贴后等 .view-lines 内容变化

---------

Co-authored-by: wangyizhi <yz@ggnb.top>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Michael Lip <51033404+theluckystrike@users.noreply.github.com>
* 优化 MessageConnect 的记忆管理及Cleanup机制

* handler -> cleanup

* 次序可推前

* 抛出错误是合理的,不应该屏蔽错误

* Update packages/message/mock_message.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@cyfung1031
Copy link
Collaborator

如果是更强的画面交互操作对话会更好
(不是文字形式)
例如
截当前画面一部份给AI分析
然后AI会说 「这是一个表格,你想做什么操作」
然后回它要怎么做

完全可以做到,只需要写一个用户脚本,让AI先分析网站,然后猜出选项,用户点击即可

我还在努力开发中,文档还在编写 不知道你有没有看YouTube视频

YouTube视频 不是我所说的效果

应该是Agent看到画面跟代码
然后用户再截一个部份给它
它能理解这个部份
针对这个部份做UserScript

例如「加一个按钮切换颜色主题」

不然的话,其他 Cowork什么的 Antigravity 什么的,都能做到吧
要著重于脚本猫的页面互动,编写UserScript能力

@CodFrm
Copy link
Member Author

CodFrm commented Mar 16, 2026

如果是更强的画面交互操作对话会更好
(不是文字形式)
例如
截当前画面一部份给AI分析
然后AI会说 「这是一个表格,你想做什么操作」
然后回它要怎么做

完全可以做到,只需要写一个用户脚本,让AI先分析网站,然后猜出选项,用户点击即可
我还在努力开发中,文档还在编写 不知道你有没有看YouTube视频

YouTube视频 不是我所说的效果

应该是Agent看到画面跟代码 然后用户再截一个部份给它 它能理解这个部份 针对这个部份做UserScript

例如「加一个按钮切换颜色主题」

不然的话,其他 Cowork什么的 Antigravity 什么的,都能做到吧 要著重于脚本猫的页面互动,编写UserScript能力

有道理,不过这个也可以做到,现在我觉得只差想象力了

@cyfung1031
Copy link
Collaborator

cyfung1031 commented Mar 16, 2026

我觉得放AI Agent到脚本猫,最重点是,能让用户写UserScript
用户不懂代码
但他们知道他们要什么效果
Agent可以根据要求和实际页面代码,写出UserScript,包括知道调什么GM API,这才是真正有用之处
当然不可能写得出我那些YouTube优化脚本(太多底层代码)
但是基本的页面互动,应该是能写出来

@CodFrm
Copy link
Member Author

CodFrm commented Mar 16, 2026

我觉得放AI Agent到脚本猫,最重点是,能让用户写UserScript 用户不懂代码 但他们知道他们要什么效果 Agent可以根据要求和实际页面代码,写出UserScript,包括知道调什么GM API,这才是真正有用之处 当然不可能写得出我那些YouTube优化脚本(太多底层代码) 但是基本的页面互动,应该是能写出来

image image

一切皆有可能,现在只差想象力;其实这些功能他们都不是脚本猫做的,而是由skill他们去完成,脚本猫只是给AI提供了一些操作的能力。提供了能力之后,任何人都可以去做skill来完成自己的想法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants