首页/新闻资讯/正文详情

IronClaw Google Drive 扩展能力解析:`list_shared_drives` 共享云端硬盘列举工具

发布时间:2026/9/23 23:40:21 来源:云帆数科 栏目:资讯中心
IronClaw Google Drive 扩展能力解析:`list_shared_drives` 共享云端硬盘列举工具
人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载本文围绕 IronClaw 开源仓库中google-drive扩展包crates/extensions/packages/google-drive的list_shared_drives列举共享云端硬盘工具展开从其模型提示文档prompt doc、输入 JSON Schema、WASM 沙箱实现到扩展清单manifest逐层剖析。读者读完可以掌握该工具如何被宿主运行时选中并触发、page_size参数的行为与默认值、底层调用的 Google Drive v3 API 路径与返回结构以及它和list_files的corporadrive/drive_id参数如何协同从而让 Agent 在共享盘与个人盘之间自由检索文件。文中所有结论均可对照仓库源码与配置文件验证。一、关联文档定位一份面向模型的工具使用说明list_shared_drives的核心文档位于 prompts/google-drive/list_shared_drives.md全文很短但信息密度明确List shared drives.The host selects this operation from the capability id. Provide only the parameters described by the input schema; do not include an action field.这段文字不是给人读的普通说明而是注入给 LLM 的工具契约它传达了三条关键约定操作由宿主根据 capability id 选择Agent 无需也不能自行声明要执行哪个操作宿主host runtime会依据能力标识符如google-drive.list_shared_drives把请求路由到对应的 WASM 函数只按输入 schema 提供参数list_shared_drives的全部入参只有一个可选字段page_sizeAgent 只需按 schema 给出合法参数禁止携带action字段这与实现细节有关——见下文宿主注入 action一节。该 prompt 文档通过 manifest 中的prompt_doc_ref字段与工具绑定见 manifest.toml 中google-drive.list_shared_drives的prompt_doc_ref prompts/google-drive/list_shared_drives.md。二、输入参数JSON Schema 与page_size默认值与 prompt 文档配套的输入模式定义在 schemas/google-drive/list_shared_drives.input.v1.json{ $schema: http://json-schema.org/draft-07/schema#, title: Google Drive list_shared_drives, description: List shared drives., type: object, required: [], properties: { page_size: { type: integer, description: Maximum number of results. Defaults to 25. } }, additionalProperties: false }要点required为空数组说明该操作可以零参数调用直接返回用户有权限访问的共享盘列表唯一可选参数page_size为整数用于限制单次返回条数默认 25additionalProperties: false意味着传入 schema 之外的字段会被拒绝——这与 prompt 文档只提供 schema 描述的参数的要求互为印证。page_size的默认值在 Rust 侧也有对应实现。见 wasm-src/src/types.rs 中ListSharedDrives变体/// List shared drives the user has access to. ListSharedDrives { /// Maximum results (default: 25). #[serde(default default_page_size)] page_size: u32, },其中default_page_size()返回25同文件第 161-163 行。即Agent 不传page_size时serde 反序列化会自动填入 25再传给底层 API。三、底层实现GET https://www.googleapis.com/drive/v3/driveslist_shared_drives的 WASM 实现位于 wasm-src/src/api.rs/// List shared drives. pub fn list_shared_drives(page_size: u32) - ResultListSharedDrivesResult, GuestFailure { let path format!(drives?pageSize{}, page_size); let response api_call(GET, path, None)?; let parsed: serde_json::Value serde_json::from_str(response).map_err(|e| serialization_failure(e))?; let drives parsed[drives] .as_array() .map(|arr| { arr.iter() .map(|d| SharedDrive { id: d[id].as_str().unwrap_or().to_string(), name: d[name].as_str().unwrap_or().to_string(), }) .collect() }) .unwrap_or_default(); Ok(ListSharedDrivesResult { drives }) }结合同文件开头的常量定义可以还原完整调用链const DRIVE_API_BASE: str https://www.googleapis.com/drive/v3;即实际请求为GET https://www.googleapis.com/drive/v3/drives?pageSizeN走的是 Google Drive API v3 的drives.list端点。整个调用统一经由api_call见 api.rs拼接 URL、设置请求头无 body 时传{}通过宿主提供的host::http_request发起请求——WASM 工具自身不发网络请求全部委托给宿主的 HTTP capability对非 2xx 状态码统一映射为api_status_error401 映射为ErrorKind::AuthRequired且固定错误码google_api_error_status_401其余映射为ErrorKind::Client并携带api_status_{status}码响应体按 UTF-8 解码解码失败返回invalid_utf8_response。返回结构与结果类型成功响应中的drives数组会被解析为SharedDrive结构见 types.rs/// A shared drive. #[derive(Debug, Serialize)] pub struct SharedDrive { pub id: String, pub name: String, }每个共享盘只暴露两个字段id共享盘 ID后续可传给list_files的drive_id参数和name显示名称。最终结果包装为/// Result from list_shared_drives. #[derive(Debug, Serialize)] pub struct ListSharedDrivesResult { pub drives: VecSharedDrive, }四、宿主如何选中并执行该操作capability id 与 action 注入prompt 文档强调host selects this operation from the capability id其机制在 wasm-src/src/lib.rs 的action_from_context中体现fn action_from_context(context: Optionstr) - Resultstatic str, GuestFailure { let context context.ok_or_else(|| input_failure(missing_invocation_context))?; let context: ToolContext serde_json::from_str(context).map_err(|_| input_failure(invalid_invocation_context))?; match context.capability_id.as_str() { // ... google-drive.list_shared_drives Ok(list_shared_drives), _ Err(input_failure(unsupported_google_drive_capability)), } }执行流程对应execute_inner见 lib.rs宿主把capability_id如google-drive.list_shared_drives放在请求的context中传给 WASM 工具WASM 侧据此解析出内部 action 名list_shared_drivesparams_with_action再把action字段注入到参数 JSON 中若 Agent 已自行携带action字段则直接报invalid_parameters——这正是 prompt 文档要求do not include an action field的代码级原因见 lib.rsserde 按#[serde(tag action, rename_all snake_case)]标签将 JSON 反序列化为GoogleDriveAction::ListSharedDrives { page_size }分发到api::list_shared_drives(page_size)结果 JSON 序列化后经Response::Success返回。Schema 自描述schemars 保证契约不漂移GoogleDriveAction枚举派生自schemars::JsonSchema见 types.rs工具通过schema()方法把生成的 JSON Schema 暴露给模型见 lib.rs使每个 action 变体成为oneOf分支并携带各自的required数组。仓库中的单元测试验证了该契约get_file分支必须要求file_id而list_files分支只要求判别字段action见 types.rs 测试模块。同理ListSharedDrives分支对page_size不设required模型据此知道该参数可省略。五、扩展清单中的注册信息权限、凭据与运行约束manifest.toml 中google-drive.list_shared_drives的完整注册项如下[[tools]] origin_gate_matrix { loop_run gated_unless_granted, product forbidden, automation forbidden } id google-drive.list_shared_drives description List shared drives. effects [network, use_secret] default_permission ask visibility model input_schema_ref schemas/google-drive/list_shared_drives.input.v1.json prompt_doc_ref prompts/google-drive/list_shared_drives.md [[tools.credentials]] handle google_runtime_token vendor google scopes [https://www.googleapis.com/auth/drive.readonly] audience { scheme https, host www.googleapis.com } injection { type header, name authorization, prefix Bearer }解读origin_gate_matrix该工具在loop_runAgent 主循环下默认未授予则需门禁审批gated_unless_granted在product/automation场景下被禁止——属于只读工具但仍受权限门禁约束effects声明network网络访问与use_secret使用凭据两类副作用供宿主做资源记账与策略判定default_permission ask默认情况下调用前需要用户确认授权凭据注入使用 Google 产品级凭据google_runtime_tokenscope 为drive.readonly只读与工具的只读语义匹配由宿主在 HTTP 出口以Authorization: Bearer token请求头注入——WASM 工具永远接触不到 OAuth token 明文auth.google扩展包同时声明了 OAuth2 授权端点https://accounts.google.com/o/oauth2/v2/auth与 token 端点启用 PKCEs256access_typeoffline以获取 refresh tokenauth.google.refresh中keepalive_idle_seconds 6048007 天用于对抗 Google 对 testing 发布状态下 refresh token 的 7 天不活动过期策略。六、与list_files协同从列举共享盘到检索共享盘内文件list_shared_drives的实战价值在于为list_files提供drive_id。在 wasm-src/src/api.rs 的list_files实现中请求固定携带supportsAllDrivestrue.to_string(), includeItemsFromAllDrivestrue.to_string(),并在指定drive_id时追加driveId{id}参数、把corpora设为drive。结合 types.rs 对corpora的注释典型的两段式调用模式为先调用list_shared_drives可省略page_size拿到共享盘id与name再以{action: list_files, corpora: drive, drive_id: 上一步拿到的 id, query: trashed false}在该共享盘内检索文件。此外list_shared_drives是包内 12 个工具之一google-drive.list_files到google-drive.list_shared_drives该包为data-only 包不包含 Rust crate工具本体以 WASM guest 形式交付提交产物在wasm/google_drive_tool.wasm源码在wasm-src/见 README.md。整个扩展由ironclaw_extension_support::packages::gsuite嵌入与 gmail 等google-*扩展共享 vendorgoogle作为凭据权威。七、安全模型与验证方式list_shared_drives运行在 WASM 沙箱中其安全边界由 tool.wit 定义能力最小化guest 只能通过host接口的http-request等少数入口与外界交互默认无任何访问权限凭据不出沙箱WIT 注释明确Secrets are NEVER exposed to WASM; credentials are injected at host boundarytoken 只在宿主出口注入错误分类闭环guest 通过guest-failure返回封闭的error-kind如auth-required、client宿主侧再映射为RuntimeDispatchErrorKind401 会映射为DispatchError::AuthRequired从而触发重新授权流程消息有界bounded_message将自由文本错误限制在 512 字符内见 api.rs防止无界字符串泄漏。仓库为api_status_error的行为提供了单元测试见 api.rs401 映射为AuthRequired且错误码为google_api_error_status_401429 等非 401 状态映射为Client并携带api_status_429码与原始响应摘要。扩展包的 manifest 投影由cargo test -p ironclaw_extension_registry校验WASM 产物新鲜度由python3 scripts/ci/check-wasm-artifact-freshness.py校验。八、使用要点小结维度结论关联文档prompts/google-drive/list_shared_drives.md宿主按 capability id 选操作只传 schema 参数禁止带action入参仅可选page_sizeinteger默认 25additionalProperties: false底层 APIGET https://www.googleapis.com/drive/v3/drives?pageSizeN返回结构ListSharedDrivesResult { drives: VecSharedDrive{id, name} }凭据 scopehttps://www.googleapis.com/auth/drive.readonly只读宿主注入Authorization: Bearer权限策略loop_run下gated_unless_granteddefault_permission ask典型用法先list_shared_drives拿drive_id再list_files配合corporadrivedrive_id检索共享盘文件安全边界WASM 沙箱 宿主 HTTP capability 出口凭据注入guest 不可见 token对 Agent 而言这条工具是进入组织共享盘世界的钥匙先列举出当前账号可访问的共享盘集合再借助list_files的共享盘检索能力深入其中查找、读取文档是文档检索类任务的标准起手式。赞分享人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载相关推荐IronClaw Google Drive 扩展download_file 文件内容读取能力全解析IronClaw Google Drive 扩展download_file 文件内容读取能力全解析 导读 google drive.download_file人工智能AI 应用交互助手AI AgentIronClaw Google Drive 扩展分享文件能力解析share_file 工具的输入契约、权限模型与 WASM 实现IronClaw Google Drive 扩展分享文件能力解析share_file 工具的输入契约、权限模型与 WASM 实现 本篇技术指南聚焦 IronC人工智能AI 应用交互助手AI AgentIronClaw google-drive 扩展12 个 Google Drive 工具包的清单、认证与 WASM 实现解析IronClaw google drive 扩展12 个 Google Drive 工具包的清单、认证与 WASM 实现解析 本指南围绕 IronClaw 的人工智能AI 应用交互助手AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

GPT-4V多模态原理与工业落地避坑指南
GPT-4V多模态原理与工业落地避坑指南

1. GPT-4V不是“升级版ChatGPT”,而是多模态能力的结构性跃迁很多人看到标题里“ChatGPT升级版本GPT-4V(ision)”第一反应是:哦,就是ChatGPT又打了个补丁,加了个看图功能?这种理解偏差非常普遍,也恰恰是踩坑… · 2026/9/23 23:40:20

all-in-rag 实战解析:从“太阳蛋“食谱看 RAG 知识库的构建与智能问答全流程
all-in-rag 实战解析:从“太阳蛋“食谱看 RAG 知识库的构建与智能问答全流程

all-in-rag 实战解析:从"太阳蛋"食谱看 RAG 知识库的构建与智能问答全流程 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-r… · 2026/9/23 23:40:14

全局规划与局部避障:Astar与DWA算法原理及源码实战
全局规划与局部避障:Astar与DWA算法原理及源码实战

简介:基于Python实现的轮式机器人路径规划工程,融合A星全局路径规划与DWA动态窗口法,适用于机器人导航、自动驾驶等教学科研与个人学习场景。压缩包共50个文件,以13个Python脚本为核心,分别实现A星、DWA与主程序流程&a… · 2026/9/23 23:40:08

YOLOv5红外车辆检测实战:数据校准、模型改造与部署优化
YOLOv5红外车辆检测实战:数据校准、模型改造与部署优化

简介:本资源是一套基于YOLOv5实现的红外车辆检测与识别完整方案,面向计算机视觉初学者、智能交通系统开发者及红外图像处理研究者,解决夜间或低光照环境下车辆实时检测难题。压缩包共128个文件,含24个Python训练/推理脚本&#xf… · 2026/9/24 1:00:22

基于SSM框架的农产品电商系统开发实践
基于SSM框架的农产品电商系统开发实践

1. 项目概述:基于SSM的助农特色农产品销售系统作为一名深耕Java领域多年的开发者,我最近完成了一个具有社会价值的毕业设计项目——基于SSM框架的助农特色农产品销售系统。这个系统专为解决农产品销售渠道单一、信息不对称等问题而设计,通过数… · 2026/9/24 1:00:22

程序员兼职2025平台清单:从接单到交付全流程避坑指南
程序员兼职2025平台清单:从接单到交付全流程避坑指南

写这篇东西之前,我先交代一下背景:我从2020年开始在各类程序员兼职平台接单,做过企业官网、小程序迭代、后台管理系统,也接过连需求文档都写不清楚的“一句话单子”。这几年下来,赚到过钱,也被项目拖到怀疑… · 2026/9/24 1:00:16

Python+pytest接口自动化测试实战与封装技巧
Python+pytest接口自动化测试实战与封装技巧

1. 接口自动化测试的必要性与技术选型在当今快速迭代的软件开发环境中,接口自动化测试已经成为保障产品质量的重要防线。传统的手工测试在面对频繁的接口变更和庞大的测试用例集时显得力不从心,而Pythonpytest的组合为我们提供了一套轻量级但功能强大的解… · 2026/9/24 1:00:10

SpringBoot+Vue校园足球社团管理平台开发实践
SpringBoot+Vue校园足球社团管理平台开发实践

1. 项目概述校园足球社团管理平台是一个基于SpringBootVue.js技术栈开发的Web应用系统,旨在解决高校足球社团日常运营中的信息化管理需求。作为一名长期从事校园信息化系统开发的工程师,我深知传统社团管理模式存在的痛点:场地预约靠手写登记… · 2026/9/24 1:00:10

Spring Task定时任务:原理、优化与分布式实践
Spring Task定时任务:原理、优化与分布式实践

1. Spring Task 项目概述Spring Task 是 Spring 框架中用于实现定时任务调度的核心模块。作为 Java 开发者最常用的定时任务解决方案之一,它通过简单的注解配置就能实现复杂的任务调度逻辑。我在多个电商系统和数据报表项目中深度使用过 Spring Task,其轻… · 2026/9/24 1:00:10

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码