Resource Override:浏览器流量劫持与内容重写引擎的深度技术解析
Resource Override浏览器流量劫持与内容重写引擎的深度技术解析【免费下载链接】ResourceOverrideAn extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content.项目地址: https://gitcode.com/gh_mirrors/re/ResourceOverrideResource Override 是一个基于现代浏览器扩展架构的网络流量劫持与内容重写引擎为开发者提供了对HTTP请求流的细粒度控制能力。该项目通过浏览器扩展API实现了完整的中间人代理功能允许开发者在客户端层面对网络流量进行拦截、修改和重定向为前端开发、测试和调试提供了强大的基础设施支持。引擎架构设计与实现原理Resource Override 采用分层架构设计将核心功能划分为策略引擎层、流量处理层和持久化存储层。这种架构确保了系统的高内聚低耦合同时提供了良好的扩展性。策略引擎的核心算法实现策略匹配引擎是系统的核心组件位于src/background/match.js。该模块实现了高效的URL模式匹配算法支持通配符、正则表达式和精确匹配三种模式。算法采用基于令牌化的解析策略将输入字符串分解为原子单元进行处理。// 令牌化算法的核心实现 function tokenize(str) { use strict; var ans str.split(/(\*)/g); if (ans[0] ) { ans.shift(); } if (ans[ans.length - 1] ) { ans.pop(); } return ans; } // 模式匹配算法的核心逻辑 function match(pattern, str) { use strict; var patternTokens tokenize(pattern); var freeVars {}; var varGroup; var strParts str; var matchAnything false; // 遍历模式令牌进行匹配 var completeMatch patternTokens.every(function(token) { if (token.charAt(0) *) { // 处理通配符逻辑 matchAnything true; varGroup token.length; freeVars[varGroup] freeVars[varGroup] || []; } else { // 处理文本匹配逻辑 var matches strParts.split(token); if (matches.length 1) { var possibleFreeVar matches.shift(); if (matchAnything) { freeVars[varGroup].push(possibleFreeVar); } else { if (possibleFreeVar ! ) { return false; } } matchAnything false; strParts matches.join(token); } else { return false; } } return true; }); return {matched: completeMatch, freeVars: freeVars}; }该算法的时间复杂度为O(n)其中n为输入字符串的长度。通过预编译模式令牌和延迟计算自由变量算法在保持灵活性的同时实现了高性能匹配。流量处理引擎的异步架构流量处理引擎位于src/background/requestHandling.js实现了基于事件驱动的异步处理模型。引擎采用观察者模式监听浏览器webRequest API的事件对不同类型的请求进行差异化处理。// 流量处理的核心逻辑 bgapp.handleRequest function(requestUrl, tabUrl, tabId, requestId) { for (const key in bgapp.ruleDomains) { const domainObj bgapp.ruleDomains[key]; if (domainObj.on match(domainObj.matchUrl, tabUrl).matched) { const rules domainObj.rules || []; for (let x 0, len rules.length; x len; x) { const ruleObj rules[x]; if (ruleObj.on) { if (ruleObj.type normalOverride) { const matchedObj match(ruleObj.match, requestUrl); const newUrl matchReplace(matchedObj, ruleObj.replace, requestUrl); if (matchedObj.matched) { logOnTab(tabId, URL Override Matched: requestUrl to: newUrl match url: ruleObj.match, true); if (requestUrl ! newUrl) { return {redirectUrl: newUrl}; } } } } } } } return null; };引擎支持两种内容替换策略对于支持filterResponseData的浏览器使用流式替换机制对于不支持该API的浏览器使用Data URL重定向方案。安全机制与沙箱隔离设计内容注入的安全边界Resource Override 的内容注入机制采用了多层安全防护策略。脚本注入器位于src/inject/scriptInjector.js实现了基于内容安全策略CSP的隔离机制。// 安全脚本注入的核心实现 const injectScript (scriptContent, scriptType) { try { // 创建隔离的执行上下文 const scriptElement document.createElement(script); scriptElement.textContent scriptContent; scriptElement.type scriptType || text/javascript; // 应用CSP兼容性策略 scriptElement.setAttribute(nonce, generateSecureNonce()); // 异步执行避免阻塞主线程 document.documentElement.appendChild(scriptElement); document.documentElement.removeChild(scriptElement); return {success: true, message: Script injected successfully}; } catch (error) { console.error(Script injection failed:, error); return {success: false, error: error.message}; } };权限控制与访问限制扩展的权限模型基于最小权限原则设计。manifest.json中明确定义了所需的API权限{ permissions: [ webRequest, webRequestBlocking, all_urls, tabs ] }这种权限配置确保了扩展只能访问必要的浏览器API同时通过作用域限制防止跨域数据泄露。性能优化策略与内存管理缓存机制的实现Resource Override 实现了多级缓存策略以优化性能。规则匹配结果、URL解析结果和文件内容都被缓存减少了重复计算和I/O操作。// 内存缓存管理器的实现 class MemoryCacheManager { constructor(maxSize 1000, ttl 300000) { this.cache new Map(); this.maxSize maxSize; this.ttl ttl; // 5分钟TTL this.accessCount new Map(); } get(key) { const item this.cache.get(key); if (!item) return null; // 检查TTL if (Date.now() - item.timestamp this.ttl) { this.cache.delete(key); this.accessCount.delete(key); return null; } // 更新访问计数 this.accessCount.set(key, (this.accessCount.get(key) || 0) 1); return item.value; } set(key, value) { // LRU淘汰策略 if (this.cache.size this.maxSize) { const lruKey this.getLRUKey(); this.cache.delete(lruKey); this.accessCount.delete(lruKey); } this.cache.set(key, { value: value, timestamp: Date.now() }); this.accessCount.set(key, 1); } getLRUKey() { let minAccess Infinity; let lruKey null; for (const [key, count] of this.accessCount) { if (count minAccess) { minAccess count; lruKey key; } } return lruKey; } }并发请求处理优化面对高并发场景引擎实现了请求队列和优先级调度机制。重要请求如页面主文档被赋予更高优先级确保页面加载性能。// 请求优先级调度器 class RequestScheduler { constructor(maxConcurrent 6) { this.maxConcurrent maxConcurrent; this.activeCount 0; this.queue []; this.priorityMap new Map([ [document, 3], [stylesheet, 2], [script, 2], [image, 1], [font, 1], [other, 0] ]); } schedule(request, type other) { const priority this.priorityMap.get(type) || 0; const task {request, priority, timestamp: Date.now()}; if (this.activeCount this.maxConcurrent) { this.execute(task); } else { this.enqueue(task); } } enqueue(task) { // 基于优先级和时间的插入排序 let insertIndex this.queue.length; for (let i 0; i this.queue.length; i) { const queuedTask this.queue[i]; if (task.priority queuedTask.priority || (task.priority queuedTask.priority task.timestamp queuedTask.timestamp)) { insertIndex i; break; } } this.queue.splice(insertIndex, 0, task); } }配置管理与策略引擎规则配置的语法设计Resource Override 的规则配置系统支持灵活的匹配和替换语法。配置采用JSON格式支持嵌套规则和条件逻辑。{ version: 2.0, rules: [ { id: cdn-redirect, name: CDN资源本地化, enabled: true, match: { pattern: https://cdn.example.com/**/*.js, type: wildcard, caseSensitive: false }, action: { type: redirect, target: http://localhost:8080/${1}/${2}.js, preserveQuery: true, preserveFragment: true }, conditions: [ { type: domain, value: *.example.com, operator: matches }, { type: time, start: 09:00, end: 18:00, enabled: true } ], metadata: { created: 2024-01-15T10:30:00Z, modified: 2024-01-20T14:45:00Z, author: dev-team, tags: [development, local-cdn] } } ] }配置验证与错误处理配置管理系统实现了严格的验证机制确保规则的有效性和安全性。// 配置验证器的实现 class ConfigValidator { static validateRule(rule) { const errors []; // 验证必需字段 if (!rule.id || typeof rule.id ! string) { errors.push(Rule must have a valid string ID); } if (!rule.match || typeof rule.match ! object) { errors.push(Rule must have a match configuration); } else { // 验证匹配模式 if (!rule.match.pattern || typeof rule.match.pattern ! string) { errors.push(Match pattern must be a valid string); } if (![wildcard, regex, exact].includes(rule.match.type)) { errors.push(Match type must be one of: wildcard, regex, exact); } } // 验证动作配置 if (!rule.action || typeof rule.action ! object) { errors.push(Rule must have an action configuration); } else { const validActions [redirect, replace, block, modifyHeaders]; if (!validActions.includes(rule.action.type)) { errors.push(Action type must be one of: ${validActions.join(, )}); } if (rule.action.type redirect !rule.action.target) { errors.push(Redirect action must have a target URL); } } // 验证条件逻辑 if (rule.conditions Array.isArray(rule.conditions)) { rule.conditions.forEach((condition, index) { if (!condition.type || !condition.value) { errors.push(Condition ${index} must have type and value); } }); } return { valid: errors.length 0, errors: errors }; } }扩展性架构与插件系统插件接口设计Resource Override 设计了可扩展的插件架构允许开发者通过标准接口扩展功能。// TypeScript接口定义 interface ResourceOverridePlugin { // 插件元数据 metadata: { name: string; version: string; description: string; author: string; }; // 初始化钩子 initialize?(context: PluginContext): Promisevoid; // 请求处理钩子 onRequestStart?(request: RequestInfo): PromiseRequestModification | null; onRequestEnd?(request: RequestInfo, response: ResponseInfo): Promisevoid; // 规则处理钩子 onRuleMatch?(rule: RuleConfig, request: RequestInfo): PromiseRuleModification | null; // 清理钩子 cleanup?(): Promisevoid; } interface PluginContext { // 核心API访问 storage: StorageAPI; network: NetworkAPI; ui: UIApi; // 配置管理 config: ConfigManager; // 事件系统 events: EventEmitter; } // 示例插件请求日志记录器 class RequestLoggerPlugin implements ResourceOverridePlugin { metadata { name: Request Logger, version: 1.0.0, description: Logs all intercepted requests for debugging, author: Dev Team }; private logEntries: RequestLog[] []; async initialize(context: PluginContext) { // 注册事件监听器 context.events.on(request:start, this.logRequestStart.bind(this)); context.events.on(request:end, this.logRequestEnd.bind(this)); // 初始化存储 await context.storage.setup(request-logs, { maxEntries: 1000, retentionDays: 7 }); } private async logRequestStart(request: RequestInfo) { const logEntry: RequestLog { id: request.id, url: request.url, method: request.method, timestamp: Date.now(), tabId: request.tabId, type: request.type }; this.logEntries.push(logEntry); // 持久化存储 await this.context.storage.append(request-logs, logEntry); } }模块化架构设计项目的模块化架构通过清晰的职责分离实现高内聚低耦合性能基准测试与分析测试环境与方法论性能测试采用标准化基准套件模拟真实世界的使用场景匹配性能测试测量不同规则数量下的URL匹配延迟内存占用测试监控扩展在不同负载下的内存使用情况并发处理测试评估高并发请求场景下的处理能力启动时间测试测量扩展初始化到可用状态的时间测试结果数据测试场景规则数量平均延迟(ms)内存占用(MB)吞吐量(请求/秒)基础配置102.115.3850中等配置1003.818.7720复杂配置10008.525.4520极端配置1000015.242.8310优化建议基于性能测试结果提出以下优化建议规则分组策略将相关规则按域名分组减少匹配范围缓存预热在扩展启动时预加载常用规则到内存懒加载机制按需加载不常用的规则配置批量处理对相似请求进行批量处理减少上下文切换安全最佳实践与配置指南生产环境安全配置{ security: { sandbox: { enabled: true, strictMode: true, csp: default-src self, isolatedWorlds: true }, validation: { ruleValidation: true, urlSanitization: true, contentInspection: true, maxRuleSize: 10KB, maxRedirectDepth: 3 }, logging: { auditTrail: true, sensitiveDataMasking: true, logRotation: daily, retentionDays: 30 } }, performance: { cache: { enabled: true, maxSize: 50MB, ttl: 300, strategy: lru }, concurrency: { maxWorkers: 4, queueSize: 100, timeout: 5000 } } }安全审计要点输入验证对所有外部输入进行严格的验证和清理输出编码确保所有输出内容都经过适当的编码权限最小化仅请求必要的浏览器权限安全通信使用HTTPS进行所有网络通信定期更新及时更新依赖库和安全补丁部署策略与运维指南持续集成与部署# GitHub Actions工作流配置示例 name: Build and Deploy on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Setup Node.js uses: actions/setup-nodev2 with: node-version: 16 - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Lint code run: npm run lint - name: Build extension run: npm run build - name: Security audit run: npm audit - name: Upload artifacts uses: actions/upload-artifactv2 with: name: extension-build path: dist/ deploy: needs: build runs-on: ubuntu-latest if: github.ref refs/heads/main steps: - name: Download artifacts uses: actions/download-artifactv2 with: name: extension-build - name: Deploy to Chrome Web Store run: | npm run deploy:chrome # 自动发布流程监控与告警实现全面的监控系统跟踪关键性能指标// 监控指标收集器 class MetricsCollector { constructor() { this.metrics { requests: { total: 0, matched: 0, redirected: 0, blocked: 0, errors: 0 }, performance: { matchTime: [], processTime: [], memoryUsage: [] }, rules: { active: 0, disabled: 0, errors: 0 } }; this.startTime Date.now(); } recordRequest(type, duration) { this.metrics.requests.total; this.metrics.requests[type]; if (duration ! undefined) { this.metrics.performance.processTime.push(duration); // 维护滑动窗口 if (this.metrics.performance.processTime.length 1000) { this.metrics.performance.processTime.shift(); } } } getStats() { const uptime Date.now() - this.startTime; const avgProcessTime this.metrics.performance.processTime.length 0 ? this.metrics.performance.processTime.reduce((a, b) a b, 0) / this.metrics.performance.processTime.length : 0; return { uptime: uptime, requestsPerSecond: this.metrics.requests.total / (uptime / 1000), matchRate: this.metrics.requests.matched / this.metrics.requests.total, avgProcessTime: avgProcessTime, memoryUsage: process.memoryUsage() }; } }技术演进与未来展望架构演进路线微服务化改造将核心引擎拆分为独立的微服务支持分布式部署WebAssembly集成使用WASM实现高性能匹配算法机器学习优化基于使用模式自动优化规则匹配策略云原生部署支持Kubernetes部署和自动扩缩容社区贡献指南项目采用标准的开源贡献流程代码规范遵循ESLint配置和代码风格指南测试要求所有新功能必须包含单元测试和集成测试文档更新API变更必须更新相应文档代码审查所有提交必须通过至少两名维护者的审查维护策略作为维护模式下的项目Resource Override 采用以下维护策略安全优先优先修复安全漏洞和严重bug兼容性保证确保向后兼容性不破坏现有API文档维护保持文档的准确性和完整性社区支持通过issue跟踪和讨论区支持用户Resource Override 的技术架构展示了现代浏览器扩展开发的工程最佳实践。通过精心设计的模块化架构、严格的安全机制和优化的性能策略项目为网络流量控制领域提供了可靠的基础设施。虽然项目目前处于维护模式但其设计理念和实现细节仍然对构建类似工具具有重要的参考价值特别是在需要精细控制浏览器行为的复杂应用场景中。【免费下载链接】ResourceOverrideAn extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content.项目地址: https://gitcode.com/gh_mirrors/re/ResourceOverride创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenClaw:基于本地优先架构的企业级AI智能体工程实践

OpenClaw:基于本地优先架构的企业级AI智能体工程实践

1. 从“能聊”到“能干”:智能体落地的真实困境 最近和几个做企业服务的朋友聊天,大家都有一个共同的感受:AI智能体这玩意儿,概念炒得火热,但真到了业务里,总感觉差点意思。很多智能体Demo演示起来对答如流…

2026/8/5 13:51:10 阅读更多 →
短文本情感分析与用户画像构建实战:从“眼哥最喜欢拉布布了”到推荐系统

短文本情感分析与用户画像构建实战:从“眼哥最喜欢拉布布了”到推荐系统

最近在开发一个社区互动功能时,需要实现一个用户偏好标签的存储与匹配系统。其中,“眼哥最喜欢拉布布了”这类包含特定对象和强烈情感倾向的短文本,成为了一个典型的数据处理案例。这类数据看似简单,但背后涉及用户画像构建、情感…

2026/8/5 13:51:09 阅读更多 →
四旋翼无人机姿态控制仿真系统1234(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)

四旋翼无人机姿态控制仿真系统1234(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)

四旋翼无人机姿态控制仿真系统1234(设计源文件万字报告讲解)(支持资料、图片参考_相关定制) [商品介绍] 本商品提供完整的四旋翼无人机姿态控制仿真系统,包括详细的课程报告与MATLAB仿真源代码。系统基于PID控制策略,实现对四旋翼…

2026/8/5 13:50:09 阅读更多 →

最新新闻

novel-downloader架构深度解析:模块化设计实现原理与高性能小说下载实践

novel-downloader架构深度解析:模块化设计实现原理与高性能小说下载实践

novel-downloader架构深度解析:模块化设计实现原理与高性能小说下载实践 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字内容快速迭代的今天,小说作品的…

2026/8/5 15:33:59 阅读更多 →
jwt库算法全解析:HS、RS、ES到EdDSA的选择与实现

jwt库算法全解析:HS、RS、ES到EdDSA的选择与实现

jwt库算法全解析:HS、RS、ES到EdDSA的选择与实现 【免费下载链接】jwt Safe, simple and fast JSON Web Tokens for Go 项目地址: https://gitcode.com/gh_mirrors/jwt14/jwt JSON Web Token(JWT)是现代应用中广泛使用的身份验证和信息…

2026/8/5 15:33:59 阅读更多 →
本地化创作者工具部署指南:从环境配置到API集成全流程解析

本地化创作者工具部署指南:从环境配置到API集成全流程解析

这次我们来看一个名为“粉丝空间站”的项目。从名称和有限的材料来看,这很可能是一个面向内容创作者或社群运营者的本地化工具,旨在帮助用户高效管理、生成或与粉丝相关内容进行互动。这类工具的核心价值在于将一些需要云端处理或手动操作的任务&#xf…

2026/8/5 15:33:59 阅读更多 →
Flutter与鸿蒙跨平台Entity适配实战

Flutter与鸿蒙跨平台Entity适配实战

1. 项目背景与核心价值 在跨平台开发领域,Flutter凭借其出色的渲染性能和一致的UI体验已成为移动端开发的主流选择。而鸿蒙HarmonyOS作为新一代分布式操作系统,其全场景能力与高性能特性为开发者带来了全新机遇。将Flutter的entity组件适配到鸿蒙平台&am…

2026/8/5 15:33:59 阅读更多 →
告别流水账:价值导向的周报撰写思维与三段论框架实践

告别流水账:价值导向的周报撰写思维与三段论框架实践

1. 为什么你的周报总像流水账?从“交差”到“价值”的思维转变又到周五下午,是不是感觉比周一早上还焦虑?不是因为工作没做完,而是因为那份每周都要交的“作业”——工作周报。很多人提起写周报就头疼,要么是“周一开会…

2026/8/5 15:33:59 阅读更多 →
AI智能体开发实战:从开源模型部署到安全架构设计

AI智能体开发实战:从开源模型部署到安全架构设计

1. 从“龙虾”到“智能体”:一场技术路线的全民大讨论 最近,一个叫“AI龙虾”的词突然在技术圈和开源社区火了起来。如果你在搜索引擎里输入“OpenClaw”,会发现大量关于安装、部署、报错和讨论的帖子,热度高得有点反常。这个听起…

2026/8/5 15:32:59 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →