AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载本指南围绕 Hermes StudioEkko Studio中「Agent 请求移动端一次性定位」这一能力展开直连会话direct chat中的 Agent 在获得用户明确的一次性确认后可通过受管 MCP 操作hermes_studio_use_mobile_location获取所连接 App 当前的 WGS84 坐标。文章完整梳理了从运行指令注入、/chat-run事件协议、App Relay 放行到服务端严格校验的整条链路并给出数据结构、错误码、超时与场景限制的源码级依据帮助你理解如何在多设备、多 Agent 场景下安全地实现仅一次、仅前台、仅直连会话的定位请求。功能定位与设计原则该能力由变更文档 docs/chat-chain-changes/2026-08-31-agent-mobile-location.md 定义核心定位是直连聊天中的 Agent 可以请求所连接 App 的当前 WGS84 坐标但必须经过用户显式的一次性确认。整个功能围绕以下四条设计原则展开会话作用域session scoped当前直连会话的 session id 被注入运行指令MCP 请求始终绑定到具体会话避免跨会话串扰一次性且仅前台one-time foreground-only请求会超时、只能在前台发生不进行后台持续跟踪最小数据least privilege响应仅被规约reduce为坐标、精度、可选海拔/速度、坐标系与时间戳地址数据永不接受、永不持久化严格校验strict validation坐标系必须显式声明为wgs84经纬度必须是合法范围内的有限数值非法输入一律解析为location_invalid_result绝不静默重标或转换坐标系。整条调用链路总览从 Agent 决策到 App 回传坐标链路如下Agent直连会话 │ 1. 运行指令中携带 session id 使用约束 ▼ 受管 MCP 操作 hermes_studio_use_mobile_location携带 session_id ▼ /chat-run 服务端 requestMobileLocation() │ 2. 校验会话归属与来源仅 direct chat ▼ 发出 location.requested 事件含 location_request_id / purpose / accuracy / timeout_ms ▼ 所连接 App 弹出一次性确认 → 返回位置 │ 3. 通过 location.respond 回传App Relay 允许列表放行 ▼ normalizeMobileLocationResponse() 严格校验/规约 ▼ 发出 location.resolved 事件并 resolve 给 Agent1. 运行指令注入Agent 如何知道该用哪个会话在 packages/server/src/modules/studio/sockets/chat-run.ts 中mobileLocationRunInstruction函数为每次运行注入如下指令The current Ekko Studio chat session id is sessionId. Only when the user explicitly asks to use their current mobile-device location, use ekko_studio_use_toolset to describe and call ekko_studio_use_mobile_location with this exact session_id. The App will show a one-time confirmation before sharing WGS84 coordinates. Never request location proactively, in a delegated subtask, in a workflow node, or for background tracking.值得注意的实现细节当source workflow || source group_chat时该函数直接返回空字符串即工作流节点与群聊会话根本不会获得这条指令从源头杜绝了越权调用。指令文本也明确禁止主动请求、委派子任务、工作流节点、后台跟踪四类场景。2. 服务端入口requestMobileLocation控制器层入口位于 packages/server/src/modules/studio/controllers/chat-run.ts接收session_id、purpose、accuracy、timeout_ms等参数并转发给 ChatRunSocket。核心校验逻辑在 chat-run.ts 的 requestMobileLocation会话必须存在且session.profile与当前 profile 一致否则抛Session is not available for this profile会话来源为group_chat或workflow时直接拒绝Mobile location is available only in direct chats同一会话已有 pending 定位请求时拒绝重复请求A mobile location request is already pending每次请求生成独立的location_request_idrandomUUID并用boundedMobileLocationTimeout计算超时。3. 请求事件location.requested请求建立后向session:sessionId房间广播location.requested事件emitMobileLocationEvent同时写入会话事件状态并推送 pending-interactions。事件字段如下字段类型说明eventstring固定location.requestedlocation_request_idstring本次请求唯一 IDUUIDpurposestring请求用途最长 240 字符MOBILE_LOCATION_PURPOSE_MAX_LENGTHaccuracystringcoarse默认或precisetimeout_msnumber取min(请求超时, 30000)即设备端超时上限MOBILE_LOCATION_DEVICE_TIMEOUT_MSmax_age_msnumber恒为 0表示必须返回当前定位不允许缓存旧位置4. 响应事件location.respond 与 location.resolvedApp 端在用户确认后通过location.respond回传chat-run.ts 处理器。服务端依次执行requireSocketSessionAccess校验 socket 对目标会话的访问权失败则立即回发location.resolvedresolved: false检查location_request_id是否仍在pendingMobileLocations中若不存在已超时/已解决则回发resolved: false, stale: true调用normalizeMobileLocationResponse校验数据finishMobileLocationRequest清理 pending 状态、清除会话中的事件记录并向会话房间与 pending-interactions 广播location.resolved最后resolve给等待中的 AgentfinishMobileLocationRequest。location.resolved载荷包含location_request_id、statussuccess/denied/error、resolved: true出错时附带error.code。5. App Relay 放行机制location.respond之所以能在 LAN 与云端连接下生效依赖 App Relay 的客户端事件允许列表服务端 packages/server/src/modules/studio/services/app-relay/server.ts 的ALLOWED_CHAT_RUN_CLIENT_EVENTS包含location.respond客户端 packages/server/src/modules/studio/services/app-relay/client.ts 同样放行location.respond。也就是说该事件同时出现在 LAN 与云端两条中继路径的允许列表中App 侧只需按同一协议回复即可无需关心连接方式差异。而/chat-run对外暴露的事件白名单CHAT_RUN_EVENTScontrollers/chat-run.ts则包含location.requested与location.resolved供 HTTP 轮询模式的调用方感知定位交互。响应数据契约与严格校验标准化后的位置结构MobileLocationValue校验通过后的响应被规约为如下结构类型定义type MobileLocationValue { latitude: number // 纬度有限数值范围 [-90, 90] longitude: number // 经度有限数值范围 [-180, 180] accuracyMeters: number // 精度米非负 altitudeMeters?: number // 可选海拔米 speedMetersPerSecond?: number // 可选速度米/秒 0 coordinateSystem: wgs84 // 必须显式为 wgs84 timestamp: number // 毫秒时间戳 }顶层响应类型为MobileLocationResponsetype MobileLocationResponse | { status: success; location: MobileLocationValue } | { status: denied } | { status: error; error: { code: string } }校验规则逐条说明normalizeMobileLocationResponsechat-run.ts是唯一的数据入口其规则可以归纳为顶层要求status必须为success/denied/error之一denied直接透传error的 code 必须属于错误码集合否则归一化为location_failed坐标系强约束success状态下location必须是对象拒绝数组且coordinateSystem必须严格等于wgs84。源码注释明确写道The App must supply WGS84 coordinates; relabeling another system does not convert it.——将 GCJ-02、BD-09 等其他坐标系重标为 wgs84 不会被当作转换直接判无效数值强约束经纬度必须是typeof number且Number.isFinite的有限数值并落在各自合法范围内。字符串31.2304、布尔、数组、对象、null、NaN、Infinity全部拒绝可选字段不臆造accuracyMeters取max(0, value)兜底为 0timestamp非法时兜底为当前时间Date.now()altitudeMeters/speedMetersPerSecond仅在传入有限数值时才写入speed 还需 0缺失或非法时不补造默认值零值合法latitude: 0, longitude: 0以及边界-90/-180、90/180都是合法坐标不会被误判为空地址永不保留测试明确验证即便 App 回传address字段也会被规约过程丢弃不会写入会话状态见下文测试节。错误码全集服务端定义的五种错误码MOBILE_LOCATION_ERROR_CODES错误码触发场景location_permission_deniedApp 系统权限被拒绝location_timeout请求超时服务端定时器触发location_service_unavailable定位服务不可用location_invalid_result数据不符合校验规则坐标系错误、数值非法等location_failed其他失败或错误码不在集合内时的兜底超时、前台与场景限制超时机制超时参数经由boundedMobileLocationTimeoutchat-run.ts约束未传或非法时默认35000ms下限3000ms、上限60000msMOBILE_LOCATION_MIN_TIMEOUT_MS/MOBILE_LOCATION_MAX_TIMEOUT_MS广播给 App 的timeout_ms再被截断到30000ms设备端超时MOBILE_LOCATION_DEVICE_TIMEOUT_MS定时器使用timer.unref?.()不会阻止进程退出超时后以error: { code: location_timeout }结束请求并清理 pending 状态。不可用场景依据运行指令注入逻辑与requestMobileLocation的校验以下场景一律不可用群聊group chatsource group_chat直接抛错且不注入运行指令工作流节点workflowsource workflow直接抛错且不注入运行指令委派子任务delegated subtasks指令文本明确禁止后台跟踪background trackingmax_age_ms: 0强制实时性且指令明确禁止后台使用。测试验证边界即契约测试文件 tests/server/run-chat-mobile-location.test.ts 将上述契约固化为可执行断言主要覆盖成功路径purpose: Find nearby restaurants、accuracy: precise的请求广播出正确的location.requested载荷合法 WGS84 响应被规约后原样返回address字段被丢弃会话 events 数组不含位置数据非法字段矩阵it.each逐项验证null、空字符串、undefined、布尔、数组、对象、字符串化数字、NaN、Infinity、越界经纬度-91/91/-181/181、非 wgs84 坐标系gcj02、bd09、缺失、null、空串——全部解析为error: { code: location_invalid_result }且 pending 队列清空、事件状态被清除边界与零值(0, 0)、(-90, -180)、(90, 180)均保留且不会因可选字段传null/而臆造值拒绝语义denied直接透传且会话状态 JSON 中不出现latitude证明位置数据未落库越权防护跨 profile 请求抛Session is not available for this profile群聊/工作流来源抛available only in direct chats。与同类移动端能力的关系该文档所定义的定位能力并非孤立功能。在 chat-run.ts 中它与移动端日历/提醒mobileCalendarRunInstruction、健康数据mobileHealthRunInstruction仅 iOS HealthKit共享同一套注入指令 事件协议 一次性确认 严格规约的架构模式CHAT_RUN_EVENTS中并列注册了location.*、calendar.*、reminder.*、health.*事件对App Relay 的允许列表也一并放行calendar.respond、reminder.respond、health.respond。理解定位请求的实现即理解了 Hermes Studio 全部移动端敏感数据一次性访问类能力的通用骨架。小结hermes_studio_use_mobile_location是一个把能力开放与隐私约束同时落实到协议层的典型案例通过运行指令把会话 id 带给 Agent、通过location.requested/location.respond/location.resolved三个事件完成一次有状态交互、通过 App Relay 允许列表贯通 LAN 与云端、通过normalizeMobileLocationResponse把不可信响应严格规约为最小化数据。对于希望在 Hermes Studio 之上扩展移动端能力的开发者这套会话作用域 一次性确认 严格校验 事件白名单的模式可直接复用对于使用者而言则意味着定位只在直连会话、只有用户显式同意、只取 WGS84 坐标、不留地址、不后台跟踪。参考实现文件chat-run.ts 服务端实现、chat-run.ts HTTP 控制器、App Relay 服务端放行、App Relay 客户端放行、定位功能测试、变更文档。赞分享AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载相关推荐Hermes StudioEkko Studio移动端日历与提醒MCP 一次性授权访问机制深度解析Hermes StudioEkko Studio移动端日历与提醒MCP 一次性授权访问机制深度解析 本文围绕 Hermes StudioEkko StuAI 应用人工智能AI Agent本地部署前端后端工作流自动化Hermes Studio 一次性启动任务Startup Tasks机制详解注册、持久化执行记录与安全升级实践Hermes Studio 一次性启动任务Startup Tasks机制详解注册、持久化执行记录与安全升级实践 导读 Hermes StudioEkkoAI 应用人工智能AI Agent本地部署前端后端工作流自动化Cherry Studio 集成 Hermes Agent基于 Code Mate Skill 的一次性本地任务委派实践Cherry Studio 集成 Hermes Agent基于 Code Mate Skill 的一次性本地任务委派实践 导读 本文围绕 Cherry Stu人工智能大模型AI 应用交互助手本地部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
SAP NetWeaver BPM流程配置实战:从架构部署到故障排查 简介:SAP NetWeaver BPM流程配置手册是一份面向SAP实施顾问、流程架构师及BPM开发人员的解决方案型学习资料,系统讲解在SAP NetWeaver平台上配置业务流程管理的方法,帮助解决从流程建模、部署、执行到监控全生命周期中的实际问题。手册重点梳… · 2026/9/23 19:22:58
Ackermann函数深度解析:递归、非递归与栈模拟实现 开头先交代一下背景:Ackerman函数(习惯上也写成Ackermann,两个拼法都有人用)是我当年在算法课和大三实习面试里都吃过亏的函数。课本上的递归定义只有三行,看起来人畜无害,前几个值也能手算,但一… · 2026/9/23 19:22:52
TensorRT8+ROS2部署YOLOX:机器人视觉推理加速实战 简介:本资源面向计算机、人工智能、自动化等专业的高校学生与科研开发者,提供一套将 mmdetection 与 TensorRT 集成到 ROS2 的 YOLOX 目标检测部署方案,可直接用于毕业设计、课程设计或项目立项演示。项目基于 Ubuntu 22.04 与 ROS2 Humble 环… · 2026/9/23 19:50:10
3个技巧搞定接口数据暴跌,面试必问的稳定性实战 3个技巧搞定接口数据暴跌,面试必问的稳定性实战 刚学会写 CRUD 接口,一到真实项目就抓瞎?别慌,这不是你一个人的问题。 很多开发者都卡在同一个瓶颈:语法滚瓜烂熟,LeetCode 也能过,但面对生产环境里突然 暴跌 的 QPS… · 2026/9/23 19:50:10
AI搜索可见度仅16.1%?Round Lab高意图内容优化实战 1. 从16.1%的可见度说起:一个被忽视的内容机会第一次看到“Visibility 16.1%”这个数字的时候,我的直觉是:这个品牌在AI搜索或者生成式引擎的答案里,存在感太弱了。16.1%意味着什么?意味着当用户在主流AI问答平台或者搜… · 2026/9/23 19:50:10
网易邮箱邮箱源码拆解:从入门到精通的避坑指南 网易邮箱邮箱源码拆解:从入门到精通的避坑指南 版本升级后 API 全变了,这种痛苦只有真正维护过老旧项目的老手才懂。很多初学者卡在【网易邮箱邮箱】的接口变动上,以为换个版本就能一劳永逸,结果发现连认证方式都改了。要想从【入门到精通】,光看表… · 2026/9/23 19:50:10
图线可视化技术原理与工程实践指南 我无法基于当前输入生成符合要求的博文内容。原因如下:输入中仅提供了项目标题“MDAIOD 图线”,但未提供任何实质性的项目正文、关键词、摘要描述或可识别的领域线索;所谓“相关热搜词”和“最新网络热词”部分为空,无实际文本&am… · 2026/9/23 19:50:04
华为Atlas 300V 24G部署YOLO实战:AI推理加速卡性能与踩坑指南 我从去年开始接触华为Atlas系列,先后在Atlas 200 DK、Atlas 300I Pro和Atlas 300V 24G几款设备上做过推理业务。如果你正打算用Atlas 300V 24G部署YOLO,或者还在犹豫这块卡到底是不是“运算加速卡”、值不值得买,那这篇文章应该能帮你省掉不少… · 2026/9/23 19:50:04
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29