ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

IronClaw Google Slides 扩展深度解析:delete_text 工具从形状中删除文本的实现与实战

IronClaw Google Slides 扩展深度解析:delete_text 工具从形状中删除文本的实现与实战 IronClaw Google Slides 扩展深度解析delete_text 工具从形状中删除文本的实现与实战【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw在 IronClaw 的 Google Slides 扩展中google-slides.delete_text是 14 个工具能力capability之一负责从演示文稿的某个形状shape / 文本框内按字符区间删除文本。本篇文章以该能力对应的 prompt 文档 为核心结合其 输入 JSON Schema、manifest 清单、WASM 客端源码与 E2E 测试用例完整讲解该操作的参数契约、底层实现原理、权限模型与实战调用方式读完即可在 Agent 对话或自动化流程中精确驱动删除形状内指定范围文本这一能力。一、能力定位delete_text 在 google-slides 扩展中的角色根据 包 READMEgoogle-slides是一个data-only 包没有独立的 Rust crate工具本体以 WASM guest 形式随包分发wasm/google_slides_tool.wasm其 guest 源码位于 wasm-src/。扩展 ID 为google-slides对外暴露 14 个工具google-slides.create_presentation…google-slides.batch_update并附带[auth.google]凭证配置。delete_text属于文本编辑类操作与insert_text向形状插入文本、replace_all_text全局查找替换、format_text字符格式化、format_paragraph段落对齐共同构成完整的文本处理工具链。其 prompt 文档原文只有三句话却定义了一个关键的调用约定Delete text from a shape. The host selects this operation from the capability id. Provide only the parameters described by the input schema; do not include an action field.这段话点明了 IronClaw 扩展体系的两个核心机制操作由 host 从 capability id 选择模型/调用方无需也不允许自行指定action字段动作由 host 依据能力 ID如google-slides.delete_text解析并注入入参必须严格遵循 input schema只提供 schema 声明的参数多余字段尤其action会被拒绝。这一点在 guest 源码中有直接佐证lib.rs 的params_with_action会显式检查参数对象中是否包含action键一旦出现立即返回invalid_parameters错误action_from_context则从调用上下文invocation context中的capability_id映射出内部动作名其中google-slides.delete_text delete_text。二、输入参数契约delete_text 的 JSON Schema 详解该能力的输入契约定义在 delete_text.input.v1.jsonJSON Schema draft-07。完整字段如下参数类型必填说明默认值presentation_idstring✅ 是目标演示文稿 ID与 Google Drive 文件 ID 相同—object_idstring✅ 是要删除文本的形状shape对象 ID—start_indexinteger否删除起始索引含字符偏移从 0 开始0end_indexinteger / null否删除结束索引不含exclusive省略时删除到文本末尾同时additionalProperties: false即 schema 之外的任何字段都会被判定为非法入参。两个必填字段保证操作总是能唯一定位哪份演示文稿的哪个形状两个可选字段则定义了删多少的边界语义只传start_index从该索引一直删到形状文本的末尾同时传start_index与end_index删除[start_index, end_index)这个左闭右开区间两者都省略start_index回落到默认值0即删除整个形状的全部文本。三、底层实现guest 端 deleteText 请求的两种 textRange 映射删除文本的落地实现位于 api.rs 的delete_text函数。它并不直接调用某个独立 REST 端点而是构造一次 Google Slides API 的batchUpdate请求请求体包含一个deleteText指令pub fn delete_text( presentation_id: str, object_id: str, start_index: i64, end_index: Optioni64, ) - ResultUpdateResult, GuestFailure { let text_range if let Some(end) end_index { serde_json::json!({ type: FIXED_RANGE, startIndex: start_index, endIndex: end, }) } else { serde_json::json!({ type: FROM_START_INDEX, startIndex: start_index, }) }; let request serde_json::json!({ deleteText: { objectId: object_id, textRange: text_range, } }); let parsed batch_update_raw(presentation_id, vec![request])?; // ... }关键实现细节textRange 二选一当end_index存在时使用type: FIXED_RANGE含startIndex与endIndex后者为排他边界否则使用type: FROM_START_INDEX仅含startIndex语义为从该索引删到末尾。这与 types.rs 中DeleteText变体的 serde 契约 一一对应start_index带#[serde(default)]回落为0end_index为Optioni64可省略。统一走 batchUpdate 通道请求经由batch_update_raw封装为POST https://slides.googleapis.com/v1/presentations/{presentation_id}:batchUpdate与insert_text、create_slide、format_text等操作共用同一调用链从而可以原子化合并执行。坐标系一致start_index/end_index是字符级偏移character index而非字节偏移对含多字节字符的文本删除时应基于字符位置计算这一点与insert_text的insertion_index语义一致。成功返回函数返回UpdateResult其中presentation_id为操作后的演示文稿 IDcreated_object_id为空删除文本不产生新对象。此外delete_text的函数签名start_index: i64直接接收默认值 0从源码结构看省略start_index时的行为等价于清空该形状内的全部文本。四、权限与安全模型谁可以调用、凭什么调用每个工具在 manifest.toml 中声明了完整的权限与凭据配置delete_text的条目第 123–138 行定义了[[tools]] origin_gate_matrix { loop_run gated_unless_granted, product forbidden, automation forbidden } id google-slides.delete_text description Delete text from a shape. effects [network, use_secret, external_write] default_permission ask visibility model input_schema_ref schemas/google-slides/delete_text.input.v1.json prompt_doc_ref prompts/google-slides/delete_text.md [[tools.credentials]] handle google_runtime_token vendor google scopes [https://www.googleapis.com/auth/presentations] audience { scheme https, host slides.googleapis.com } injection { type header, name authorization, prefix Bearer }逐项解读origin_gate_matrixloop_run gated_unless_granted表示在 Agent 循环中默认需要授权门禁除非已被授予product与automation均为forbidden即产品化界面与自动化流程中不可直接调用——这是对改写用户演示文稿这类高影响操作的保守默认。effectsnetwork发起外部请求、use_secret使用 OAuth 令牌、external_write写入外部服务三类副作用全部声明供宿主做资源审计与提示。default_permission ask默认每次调用都向用户请求确认符合隐私优先的 Agent OS 定位。visibility model该工具对模型可见可被模型自主选择调用。credentials使用 vendorgoogle的google_runtime_tokenscope 为https://www.googleapis.com/auth/presentations读写级请求 audience 限定为slides.googleapis.com令牌以Authorization: Bearer token头注入。注意WASM guest 永远看不到真实令牌——api.rs 模块注释 明确说明所有 API 调用都经由 host 的 HTTP capability 完成凭据注入与限流。OAuth 流程本身配置在[auth.google]authorization code PKCE S256access_typeoffline含 7 天空闲保活刷新由 gmail 等所有google-*扩展共享同一 vendor 凭据体系。五、实战用法如何正确驱动 delete_text1. 安装与激活扩展按 官方 Slides 文档 的步骤ironclaw extension install google-slides ironclaw extension activate google-slides激活涉及凭据的扩展会启动设置流程Google OAuth 授权页令牌加密存储并自动刷新。每个 Google 扩展需分别授权。2. 获取目标 object_iddelete_text要求object_id而形状的 object ID 必须通过google-slides.get_presentation发现——这是 lib.rs 文档 明确建议的工作流先调用get_presentation拿到 slides 及每个 page element 的objectId再对目标形状执行文本操作。同时需要注意presentation_id与 Google Drive 文件 ID 相同可用 google-drive 扩展的list_files搜索现有演示文稿对于模板化工作流先建带占位文本的形状再替换/删除delete_text与create_shape、insert_text、replace_all_text组合使用效果最佳。3. 请求示例按照 prompt 文档约定调用时不要携带action字段host 会依据 capability id 自动选择操作。合法入参示例JSON{ presentation_id: 1A2b3C4d5E6f7G8h9I0j, object_id: p1s2t3x4y5z6, start_index: 0, end_index: 7 }含义删除形状p1s2t3x4y5z6中字符索引[0, 7)的文本。若省略end_index则从索引 0 删除到末尾清空形状若省略start_index回落为 0且省略end_index同样等价于清空全部文本。4. E2E 测试中的权威示例仓库的 E2E 用例 provider_operation_google_slides_cases.py 给出了该操作的权威调用与断言ProviderOperationCase( case_idgoogle_slides_delete_text, provider_servicegoogle, capability_idgoogle-slides.delete_text, arguments{ presentation_id: PRESENTATION_ID, object_id: BODY_ID, start_index: 0, end_index: 7, }, assert_baseline_baseline, assert_outcome_delete_text_outcome, ),对应的结果断言_delete_text_outcome同文件第 129–133 行验证删除后形状文本等于种子文本SEEDED_TEXT去掉前 7 个字符SEEDED_TEXT[7:]且演示文稿revisionId变为2。该用例通过reborn_emulate_harness在模拟 Slides API 上运行证明删除操作的请求构造、范围语义与结果返回在真实调用链路上完全正确。六、错误处理与边界情况guest 端对调用失败做了分级处理相关逻辑在 api.rs401 未授权映射为ErrorKind::AuthRequired错误码google_api_error_status_401提示 host 触发令牌刷新/重新授权4xx/5xx 状态码映射为ErrorKind::Client错误码形如api_status_429限流、api_status_400非法参数等并携带服务端响应摘要入参非法本地校验失败返回ErrorKind::Input与invalid_parameters/invalid_invocation_context等稳定错误码越界索引由 Google Slides API 侧校验如 end_index 超出文本长度会返回 400因为 guest 端不缓存文本内容无法本地预判。七、小结google-slides.delete_text是一个设计克制、契约严谨的文本编辑能力宿主通过 capability id 选择动作、schema 约束入参、credentials 统一注入 OAuth 凭据、effects 声明副作用guest 端则把[start, end)或FROM_START_INDEX语义精确映射为一次原子化的batchUpdate请求。理解其参数边界字符索引、排他 end_index、调用约定禁止action字段与权限模型默认 ask 门禁矩阵你就能在 IronClaw 的 Agent 循环中安全地自动化清空占位符、删除冗余文本、批量修整演示文稿内容等真实场景。延伸阅读输入契约crates/extensions/packages/google-slides/schemas/google-slides/delete_text.input.v1.json操作清单与凭据crates/extensions/packages/google-slides/manifest.toml核心实现crates/extensions/packages/google-slides/wasm-src/src/api.rs#L330-L363类型契约crates/extensions/packages/google-slides/wasm-src/src/types.rs#L74-L86包总览crates/extensions/packages/google-slides/README.md官方使用文档docs/extensions/google/slides.mdE2E 测试用例tests/e2e/provider_operation_google_slides_cases.py#L325-L337【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表