{"id":"1d77bbc9-0797-44d3-84e3-8566ea7ea129","entityType":"agent","slug":"clawhub-kadbbz-aios-transfer-file","name":"AIOS File Transfer","canonicalUrl":"https://www.xpersona.co/agent/clawhub-kadbbz-aios-transfer-file","canonicalPath":"/agent/clawhub-kadbbz-aios-transfer-file","generatedAt":"2026-10-11T07:41:37.984Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":null},"description":"通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要按当前 `senderId` 把输入文件下载到工作区，或需要把当前 `senderId` 目录内的本地文件上传后以 `file_output:/...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-transfer-file","sourceUrl":"https://clawhub.ai/kadbbz/aios-transfer-file","homepage":"https://clawhub.ai/kadbbz/skills/aios-transfer-file","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/kadbbz/aios-transfer-file","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/kadbbz/skills/aios-transfer-file","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AIOS File Transfer technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":null},"stars":null,"forks":null,"downloads":1153,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:58:33.952Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T04:58:34.021Z","lastCrawledAt":"2026-10-11T04:58:33.952Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T04:58:33.952Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-07-06T08:43:03.647Z","changelog":"**Enforces per-senderId file isolation and workspace directory structure.** - All file operations are now strictly isolated by the current channel's senderId; topic_id can no longer be used as a substitute. - Local workspace subdirectories standardized to `<senderId>/upload`, `<senderId>/download`, and `<senderId>/generated`. - All script invocations (download and upload) must require explicit `--sender-id <senderId>`; transfer will not proceed if senderId is missing or ambiguous. - File input/output handling, local file placement, and directory creation updated to follow new senderId-based structure. - Strengthened documentation on forbidden usage, directory access, and failure cases. - Removed legacy references and renamed usage of `file_input`/`file_output` directories.","fileCount":8,"zipByteSize":20467},{"version":"1.0.0","createdAt":"2026-06-26T03:42:44.821Z","changelog":"- Removed the skill-card.md file. - Clarified the file sending workflow in SKILL.md: files must first be renamed and moved to file_output before upload and then removed from file_output after uploading to avoid workspace bloat. - Minor changes to workflow details in sending files, emphasizing file cleanup post-upload and refining step order. - No functional or breaking changes to APIs or commands—documentation and best practices update only.","fileCount":8,"zipByteSize":19239},{"version":"0.1.3","createdAt":"2026-06-18T10:29:36.654Z","changelog":"- Improved the internal script (scripts/transfer_s3.mjs) to enhance file transfer handling. - No changes to user-facing skill usage or configuration. - Updated implementation for better reliability and maintainability in S3 file uploads/downloads.","fileCount":8,"zipByteSize":19161},{"version":"0.1.2","createdAt":"2026-06-18T03:28:54.506Z","changelog":"aios-transfer-file 0.1.2 - Removed the skill-card.md file to streamline documentation. - Updated dependencies and scripts for better compatibility (package.json, package-lock.json). - Improved or refactored the main file transfer script (scripts/transfer_s3.mjs). - No functional changes to S3 file transfer logic; behavior and usage remain the same.","fileCount":8,"zipByteSize":19127},{"version":"0.1.1","createdAt":"2026-06-17T10:42:27.647Z","changelog":"- Removed unused skill-card.md file. - Updated documentation in README.md and SKILL.md for clarity and consistency. - Refined dependency handling and instructions for local package usage in scripts. - Minor adjustments and clean-up in scripts/transfer_s3.mjs. - Updated package.json and package-lock.json to reflect dependency and script improvements.","fileCount":8,"zipByteSize":19287},{"version":"0.1.0","createdAt":"2026-06-10T14:04:16.552Z","changelog":"Initial public release of aios-transfer-file. - Added complete documentation for file transfer operations using AWS S3-compatible SDKs with OpenClaw and AIOS agent. - Strict rules established: only TypeScript/JavaScript and @aws-sdk/client-s3 are permitted; no Python or external S3 clients. - Clear requirements for runtime environment variables, workspace layout, and file naming conventions. - Provided detailed instructions for handling dependencies and using built-in transfer scripts. - Outlined robust error handling and mandatory separation of output messages. - Removed outdated skill-card.md file from the package.","fileCount":8,"zipByteSize":16602},{"version":"0.0.1","createdAt":"2026-05-15T07:35:56.945Z","changelog":"Initial release of aios-transfer-file skill for AIOS file transfer - Provides file upload/download between agents and users via AWS S3-compatible SDK only (no CLI tools or external S3 clients). - Enforces use of JavaScript/TypeScript with AWS SDK v3 (`@aws-sdk/client-s3`). - Handles `file_input://...` and `file_output://...` URIs according to strict naming and directory rules. - Supplies built-in script (`scripts/transfer_s3.mjs`) for all transfers, including dependency checks/local install. - Ensures robust error reporting, workspace safety, and precise file operation workflows.","fileCount":8,"zipByteSize":16046}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-transfer-file","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17c9yyt2sff7jk8nmf7ptf3r183g8kf:aios-transfer-file` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/kadbbz/aios-transfer-file before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T07:41:37.980Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kadbbz-aios-transfer-file/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":null},"readme":"Skill: AIOS File Transfer\n\nOwner: kadbbz\n\nSummary: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要按当前 `senderId` 把输入文件下载到工作区，或需要把当前 `senderId` 目录内的本地文件上传后以 `file_output:/...\n\nTags: latest:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-07-06T08:43:03.647Z | auto\n\n**Enforces per-senderId file isolation and workspace directory structure.**\n\n- All file operations are now strictly isolated by the current channel's senderId; topic_id can no longer be used as a substitute.\n- Local workspace subdirectories standardized to `<senderId>/upload`, `<senderId>/download`, and `<senderId>/generated`.\n- All script invocations (download and upload) must require explicit `--sender-id <senderId>`; transfer will not proceed if senderId is missing or ambiguous.\n- File input/output handling, local file placement, and directory creation updated to follow new senderId-based structure.\n- Strengthened documentation on forbidden usage, directory access, and failure cases.\n- Removed legacy references and renamed usage of `file_input`/`file_output` directories.\n\nv1.0.0 | 2026-06-26T03:42:44.821Z | auto\n\n- Removed the skill-card.md file.\n- Clarified the file sending workflow in SKILL.md: files must first be renamed and moved to file_output before upload and then removed from file_output after uploading to avoid workspace bloat.\n- Minor changes to workflow details in sending files, emphasizing file cleanup post-upload and refining step order.\n- No functional or breaking changes to APIs or commands—documentation and best practices update only.\n\nv0.1.3 | 2026-06-18T10:29:36.654Z | auto\n\n- Improved the internal script (scripts/transfer_s3.mjs) to enhance file transfer handling.\n- No changes to user-facing skill usage or configuration.\n- Updated implementation for better reliability and maintainability in S3 file uploads/downloads.\n\nv0.1.2 | 2026-06-18T03:28:54.506Z | auto\n\naios-transfer-file 0.1.2\n\n- Removed the skill-card.md file to streamline documentation.\n- Updated dependencies and scripts for better compatibility (package.json, package-lock.json).\n- Improved or refactored the main file transfer script (scripts/transfer_s3.mjs).\n- No functional changes to S3 file transfer logic; behavior and usage remain the same.\n\nv0.1.1 | 2026-06-17T10:42:27.647Z | auto\n\n- Removed unused skill-card.md file.\n- Updated documentation in README.md and SKILL.md for clarity and consistency.\n- Refined dependency handling and instructions for local package usage in scripts.\n- Minor adjustments and clean-up in scripts/transfer_s3.mjs.\n- Updated package.json and package-lock.json to reflect dependency and script improvements.\n\nv0.1.0 | 2026-06-10T14:04:16.552Z | auto\n\nInitial public release of aios-transfer-file.\n\n- Added complete documentation for file transfer operations using AWS S3-compatible SDKs with OpenClaw and AIOS agent.\n- Strict rules established: only TypeScript/JavaScript and @aws-sdk/client-s3 are permitted; no Python or external S3 clients.\n- Clear requirements for runtime environment variables, workspace layout, and file naming conventions.\n- Provided detailed instructions for handling dependencies and using built-in transfer scripts.\n- Outlined robust error handling and mandatory separation of output messages.\n- Removed outdated skill-card.md file from the package.\n\nv0.0.1 | 2026-05-15T07:35:56.945Z | auto\n\nInitial release of aios-transfer-file skill for AIOS file transfer\n\n- Provides file upload/download between agents and users via AWS S3-compatible SDK only (no CLI tools or external S3 clients).\n- Enforces use of JavaScript/TypeScript with AWS SDK v3 (`@aws-sdk/client-s3`).\n- Handles `file_input://...` and `file_output://...` URIs according to strict naming and directory rules.\n- Supplies built-in script (`scripts/transfer_s3.mjs`) for all transfers, including dependency checks/local install.\n- Ensures robust error reporting, workspace safety, and precise file operation workflows.\n\nArchive index:\n\nArchive v1.0.1: 8 files, 20467 bytes\n\nFiles: agents/openai.yaml (359b), package-lock.json (39620b), package.json (185b), README.md (2418b), scripts/transfer_s3.mjs (13542b), skill-card.md (2078b), SKILL.md (10165b), _meta.json (137b)\n\nFile v1.0.1:SKILL.md\n\n---\r\nname: aios-transfer-file\ndescription: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要按当前 `senderId` 把输入文件下载到工作区，或需要把当前 `senderId` 目录内的本地文件上传后以 `file_output://...` URI 返回给用户时，必须使用这个 skill。不要使用 `aws` CLI 或任何外部 S3 客户端程序完成这些传输。\n---\r\n\r\n# AIOS 文件传输\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\n在 OpenClaw 中，所有文件和图片传输，包括接受用户发来的文件，和给用户发送文件，都必须使用兼容 AWS S3 的 SDK。这适用于附件、`file_input://` 消息，以及任何需要把文件返回给用户的场景。\n\n所有本地文件必须按当前通道提供的 `senderId` 隔离。`senderId` 是 workspace 文件目录的唯一隔离标识；`topic_id` 只用于业务系统 SessionId，不得替代 `senderId` 作为文件目录。\n\n当前工作区内的目录结构固定为：\n\n- `<senderId>/upload`：S3 或通道传入的文件，例如 `file_input://...` 下载结果。\n- `<senderId>/download`：OpenClaw 通过互联网、第三方系统、业务应用等方式下载得到的文件。\n- `<senderId>/generated`：AI 自己生成、转换、分析、渲染或准备返回给用户的文件。\n\r\n## 不可违反的规则\r\n\r\n- 始终使用 S3 SDK。不要调用 `aws`、`s3cmd`、`mc` 或任何其他外部客户端程序。\r\n- 本项目统一使用 TypeScript 和 JavaScript。不要为这个 skill 添加 Python 脚本或基于 Python 的传输流程。\n- 在处理任何 `file_input://...` URI 之前，或在发送任何本地文件给用户之前，先触发这个 skill。\n- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`，不要在对话中临时写新的传输脚本。\n- 每次运行脚本都必须显式传入当前通道的 `--sender-id <senderId>`；如果无法确认 `senderId`，停止文件传输，不得用 `topic_id`、用户名或推测值替代。\n- 如果工作区中还没有 `<senderId>/upload`、`<senderId>/download`、`<senderId>/generated` 目录，使用前先创建当前需要的目录。\n- 下载和上传的本地文件都必须限制在当前工作区的 `<senderId>` 目录内进行。\n- 禁止读取、查询、写入、上传或暴露其他 `senderId` 目录中的文件。\n- 在 SDK 上传成功之前，不要声称文件已经发送完成。\n- 当你需要返回一个可下载文件时，最终回复必须是单独一条 `file_output://...` 消息，不能附带其他文字。\n\r\n## 运行时配置\r\n\r\n使用 AIOS 环境变量构建 S3 客户端：\r\n\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n\r\n使用以下 bucket 变量：\r\n\r\n- 收件箱 bucket：`AIOS_S3_AGENT_INBOX_BUCKET`\r\n- 发件箱 bucket：`AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n发件箱变量统一使用 `AIOS_S3_AGENT_OUTBOX_BUCKET`，不要引入其他别名。\r\n\r\n构造 SDK 客户端时：\r\n\r\n- 从 `AIOS_S3_ENDPOINT` 设置自定义 endpoint。\r\n- 从 `AIOS_S3_REGION` 设置 region。\r\n- 显式传入 `AIOS_S3_ACCESS_KEY_ID` 和 `AIOS_S3_SECRET_ACCESS_KEY` 作为访问凭证。\r\n- 当 `AIOS_S3_FORCE_PATH_STYLE` 为真值时启用 path-style，例如 `1`、`true` 或 `TRUE`。\r\n\r\n与 `aios-agent-management-console` 保持一致，使用 TypeScript 或 JavaScript，并采用 AWS SDK for JavaScript v3，具体为 `@aws-sdk/client-s3`。\r\n\r\n## 内置脚本\r\n\r\n优先使用内置 JavaScript 工具：\r\n\r\n```bash\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\n```\n\r\n内置脚本的行为：\r\n\r\n- 使用 `@aws-sdk/client-s3` 和上面的 AIOS S3 环境变量。\n- 与 `aios-agent-management-console` 保持同样风格：ESM、动态导入本地安装的包、显式构造 `S3Client`、显式传入凭证，并且 `AIOS_S3_FORCE_PATH_STYLE` 默认取 `true`。\n- 自动创建当前 `senderId` 下需要的 `upload` 或 `generated` 目录。\n- 把 `file_input://...` URI 下载到 `<senderId>/upload`。\n- 把待发送文件复制到 `<senderId>/generated`，重命名为要求的时间戳前缀格式，并上传到发件箱 bucket 根目录。\n- 输出描述传输结果的 JSON。\n- 支持 `--uri-only`，用于最终上传回复步骤。\n\r\n依赖位置：\r\n\r\n- 这个 skill 在 `package.json` 中声明了 `@aws-sdk/client-s3`。\r\n- 在一个全新的工作区首次传输前，先检查这个 skill 的本地依赖是否已经安装。\r\n- 必须在这个 skill 目录中完成依赖检查，例如确认 `node_modules/@aws-sdk/client-s3` 是否存在，或运行 `npm ls @aws-sdk/client-s3 --depth=0`。\r\n- 如果依赖缺失，在运行内置脚本前，先在这个 skill 目录执行 `npm install` 本地安装依赖。\r\n- 只允许从本地安装位置动态加载该包；不要依赖其他项目中的兜底导入，也不要依赖任意文件路径。\r\n- 如果本地包缺失，要明确报告依赖错误。除非用户明确要求修改内置脚本，否则不要在对话里写一个替代传输脚本。\r\n\r\n依赖处理流程：\r\n\r\n1. 在检查依赖或执行安装命令前，先切换到这个 skill 目录。\r\n2. 确认 `node` 和 `npm` 可用。\r\n3. 检查 `@aws-sdk/client-s3` 是否已经本地安装。\r\n4. 只有在本地依赖检查确认缺失时，才运行 `npm install`。\r\n5. 安装完成后，仍然要从这个 skill 目录运行内置脚本，确保它能正确解析本地依赖。\r\n\r\n## 接收文件\r\n\r\n当消息以 `file_input://` 开头时：\r\n\r\n1. 解析 URI，并忽略第一个空格之后的所有内容。\r\n2. 从 URI 中提取 `bucket` 和完整的 `key`。\r\n   示例：`file_input://bname/path/to/fname.bin extra text`\r\n   - bucket: `bname`\r\n   - key: `path/to/fname.bin`\r\n3. 在下载目标元数据中保留完整 key。识别远端对象时，不要把它压缩成只有 basename。\r\n4. 把对象下载到工作区当前 `<senderId>/upload` 目录。\n5. 本地文件名使用原始 basename，但前面加上时间戳前缀，例如 `123456_fname.bin`。\n6. 如果 basename 本身已经带有时间戳前缀，则替换原有前缀，不要再叠加一个。\n7. 下载完成后，把本地绝对路径加入工作上下文，再继续处理用户请求。\n\r\n实现要求：\r\n\r\n- 下载请求必须以解析得到的 URI bucket 和 key 为准。\n- 你可以把 URI bucket 与 `AIOS_S3_AGENT_INBOX_BUCKET` 做诊断比较，但下载时不要改写 URI bucket。\n- 使用 SDK 流式下载对象，不要通过 shell 调用客户端可执行程序。\n- 下载本地目标必须位于当前 `<senderId>/upload`，不得写入其他 `senderId` 或工作区根目录。\n- 优先调用 `scripts/transfer_s3.mjs download-uri ...`，不要写一次性的 SDK 代码。\n\r\n## 发送文件\r\n\r\n当你需要把本地文件发回给用户时：\r\n\r\n1. 先用普通 assistant 消息说明文件内容以及用户该如何使用。\n2. 从 `AIOS_S3_AGENT_OUTBOX_BUCKET` 解析发件箱 bucket。\n3. 确认源文件位于当前 `<senderId>` 目录内；不得上传其他 `senderId` 或工作区根目录下的文件。\n4. 把文件重命名为带时间戳前缀的格式，例如 `123456_fname.bin`（如果原始 basename 已经有时间戳前缀，则替换原前缀，不要叠加），然后将最终文件名中的所有空格替换为 `_`，最后将该文件复制到工作区当前 `<senderId>/generated` 目录。\n5. 远端目标必须使用发件箱 bucket 根目录，不要额外添加子目录。\n6. 如果发件箱 bucket 不存在，通过 SDK 先创建，再上传。\n7. 使用 SDK 上传复制后的文件。\n8. 上传成功后，再发送第二条回复，内容只能是 `file_output://<bucket>/<new_name>`。不要在同一条消息里同时输出说明性文字和 `file_output://...` URI。\n9. 从工作区当前 `<senderId>/generated` 目录中删除上传暂存文件，避免占用空间。\n\r\n实现要求：\r\n\r\n- 远端 key 必须始终精确等于 bucket 根目录下的时间戳文件名。\n- 说明性消息和 `file_output://...` 回复不能合并在同一条 assistant 消息里。\n- 在上传成功之前，不要输出 `file_output://...`。\n- 本地源文件和暂存文件必须始终位于当前 `<senderId>` 目录内。\n- 优先调用 `scripts/transfer_s3.mjs upload-file ...`，不要写一次性的 SDK 代码。\n\r\n## 文件名规则\r\n\r\n下载和上传都使用以下规则：\r\n\r\n- 时间戳前缀格式：`<timestamp>_filename.ext`\r\n- 如果文件名已经以 `<digits>_` 开头，则把这个前导数字前缀替换成新的时间戳。\r\n- 除了上传时必须把空格替换为 `_` 之外，文件名其余部分保持原样。\r\n\r\n## SDK 行为\r\n\r\n使用 SDK 的标准对象操作，不要拉起外部客户端：\r\n\r\n- 下载：`GetObject` 或等价接口\r\n- 上传：`PutObject` 或托管上传助手\r\n- 检查 bucket 是否存在：`HeadBucket` 或等价接口\r\n- bucket 缺失时创建：`CreateBucket` 或等价接口\r\n\r\n对于大文件，优先使用流式 API；当 SDK 支持流式处理时，避免把整个文件一次性读入内存。\r\n\r\n## 失败处理\r\n\r\n- 如果缺少必需的 S3 配置，停止执行，并准确指出缺失的是哪个环境变量。\n- 如果缺少当前通道的 `senderId`，停止执行，并说明无法确认 workspace 文件隔离目录。\n- 如果 URI 格式错误，无法同时提取 bucket 和 key，停止执行，并报告输入格式有问题。\n- 如果下载或上传失败，报告真实失败原因，不要假装传输已经完成。\r\n- 如果上传失败，不要发送 `file_output://...` URI。\n\nFile v1.0.1:README.md\n\n# aios-transfer-file\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\nOpenClaw/AIOS 文件传输 skill。使用 `scripts/transfer_s3.mjs` 动态加载当前目录本地安装的 `@aws-sdk/client-s3`，按当前通道的 `senderId` 把 `file_input://...` 对象下载到工作区 `<senderId>/upload`，或把当前 `<senderId>` 目录内的本地文件上传到发件箱 bucket。\n\nworkspace 中的会话文件必须按 `senderId` 隔离：\n\n- `<senderId>/upload`：S3 或通道传入的文件。\n- `<senderId>/download`：OpenClaw 通过互联网、第三方系统、业务应用等方式下载得到的文件。\n- `<senderId>/generated`：AI 自己生成、转换、分析、渲染或准备返回给用户的文件。\n\r\n## 依赖要求\r\n\r\n- Node.js\r\n- `@aws-sdk/client-s3`\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n- `AIOS_S3_AGENT_INBOX_BUCKET`\r\n- `AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n## 用法\r\n\r\n```bash\nnpm install\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\n```\n\r\n## Docker\r\n\r\n推荐做法：在 Docker 镜像内预装依赖，但仍然把它作为这个 skill 的本地依赖，而不是使用 `npm install -g`。\r\n\r\nDockerfile 示例模式：\r\n\r\n```dockerfile\r\n# 把 skill 复制进镜像\r\nCOPY skills/aios-transfer-file /opt/aios/skills/aios-transfer-file\r\n\r\n# 在镜像构建阶段安装这个 skill 的本地依赖\r\nWORKDIR /opt/aios/skills/aios-transfer-file\r\nRUN npm ci\r\n```\r\n\r\n运行时要求：\r\n\r\n- `package.json`、`package-lock.json` 和 `node_modules/` 必须保留在同一个 skill 目录下。\r\n- 从这个 skill 目录运行脚本，或者确保启动脚本的进程模块解析路径能够看到这个本地 `node_modules`。\r\n- 不要依赖 `npm install -g @aws-sdk/client-s3`；这个脚本的设计就是动态导入本地安装的包。\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-transfer-file\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783327383647\n}\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nAIOS File Transfer handles OpenClaw and AIOS agent file transfers through an S3-compatible SDK, downloading file_input:// objects into the current senderId workspace or uploading files from that workspace as file_output:// URIs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[kadbbz](https://clawhub.ai/user/kadbbz)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and AIOS/OpenClaw operators use this skill when an agent must receive a user-provided file or return a generated file while preserving per-sender workspace isolation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Sender workspace isolation can be bypassed in the current implementation.\n\nMitigation: Reject or canonicalize symlinked sender, upload, and generated paths before transfer operations, and deploy only with trusted per-sender workspaces until that containment is fixed.\n\nRisk: S3 credentials can be used against caller-named buckets.\n\nMitigation: Scope credentials tightly, restrict downloads to approved inbox buckets or prefixes, and avoid runtime bucket creation unless it is explicitly required and separately authorized.\n\n## Reference(s):\n\n- [README](README.md)\n- [ClawHub skill page](https://clawhub.ai/kadbbz/skills/aios-transfer-file)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands; transfer script returns JSON or a file_output:// URI]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a current senderId, AIOS S3 environment variables, local Node.js dependencies, and S3 credentials scoped for the intended inbox and outbox buckets.]\n\n## Skill Version(s):\n\n1.0.1 (source: ClawHub server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.1:package-lock.json\n\n{\n  \"name\": \"aios-transfer-file\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"aios-transfer-file\",\n      \"dependencies\": {\n        \"@aws-sdk/client-s3\": \"^3.1045.0\",\n        \"dayjs\": \"^1.11.21\",\n        \"pino\": \"^10.3.1\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz\",\n      \"integrity\": \"sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32c\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz\",\n      \"integrity\": \"sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha1-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-js\": \"^5.2.0\",\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-js\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz\",\n      \"integrity\": \"sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/supports-web-crypto\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz\",\n      \"integrity\": \"sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/util\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz\",\n      \"integrity\": \"sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/client-s3\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1046.0.tgz\",\n      \"integrity\": \"sha512-Cwl2SPm0CLczqNLEW2AZR9G/W+Jap85K7uUVOTRHzG3pErVeYRKOnbzsbAqGHnSYBdaxZ9a58YVaWj67P8tF4w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha1-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-node\": \"^3.972.40\",\n        \"@aws-sdk/middleware-bucket-endpoint\": \"^3.972.11\",\n        \"@aws-sdk/middleware-expect-continue\": \"^3.972.11\",\n        \"@aws-sdk/middleware-flexible-checksums\": \"^3.974.17\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-location-constraint\": \"^3.972.10\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-sdk-s3\": \"^3.972.38\",\n        \"@aws-sdk/middleware-ssec\": \"^3.972.10\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/core\": {\n      \"version\": \"3.974.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.9.tgz\",\n      \"integrity\": \"sha512-bXxosFunr+v/kqNb99r1NRkrVBha7CG036fRSpWGbC1A/e363XFQN6wcZMx7MYTdRr1tYwNnkrWX2xc1rT3BCQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/xml-builder\": \"^3.972.23\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/crc64-nvme\": {\n      \"version\": \"3.972.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.8.tgz\",\n      \"integrity\": \"sha512-fVfUCL/Xh2zINYMPZvj+iBn6XWouQf0DAnjaWCI9MkmqXzL2Iy5FoQB8O7syFe6gN6AH1ecDDU58T51Ou0kFkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-env\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.35.tgz\",\n      \"integrity\": \"sha512-WkFQ8BedszVomhh/Zzs8WwnE/XBmTqZjoQVB8u/4zH6kZCjouXZpPpb93gD8m0EZmzAl7dxHE/y+yDpuKzNCMw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-http\": {\n      \"version\": \"3.972.37\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.37.tgz\",\n      \"integrity\": \"sha512-ylx0ZJTU+2eNcvXQ69VNR3TVSYa/ibpvdK717/NxqR9aXRMn2QRWZaiI8aa5yY/fOWZ5mknSmxGaVxxtdwv3EA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-ini\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.39.tgz\",\n      \"integrity\": \"sha512-QhRSrdkk+Gq0AFIylpiI0N6lcJqFYV9Jtr4Luz5FpYOYbjJSfyTG6iLhnK/UPIgN1Jnon8WAmSC//16XYGvwkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-login\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-login\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.39.tgz\",\n      \"integrity\": \"sha512-1hU0NtC04QbFIuoBuF4aQ2A97GsSE5/A0ZJpDijwexsBREIQ4KPRYl3v/FfKCPBYsaTeGjkOFx5nLhWHY24LOw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-node\": {\n      \"version\": \"3.972.40\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.40.tgz\",\n      \"integrity\": \"sha512-ZgrQaGkpyTlVSCCsffzijVg+KgftTAWYvI5Otc36J/4jNiHb+7MmBiJIR0a5AHLvifC92PiYHt5pijP0dswd1w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-ini\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-process\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.35.tgz\",\n      \"integrity\": \"sha512-hNj1rAwZWT1vfz54BwH8FUWxZuqStrM25Q5LEIwn2erHPMRVAjLlpZqEbCEEqS99eEEOhdeetnS0WeNa3iYeEQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-sso\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.39.tgz\",\n      \"integrity\": \"sha512-mwIPNPldyCZkvHozb6E0X/vuQLN1UCjcA6MwUf1gaO7EwghCmuNZXatq0L3zptKFvPC4Nds7+WFUkifI1XmbSw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/token-providers\": \"3.1046.0\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-web-identity\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.39.tgz\",\n      \"integrity\": \"sha512-b9HT8CnpyPVn1hU14Q7ihjwSPlRzToYmRYJxRd5jNHEZ43lrIhoLaTT8JmfQQt5j5M8rTX1iN1X8mvu0SM1dXA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-bucket-endpoint\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.11.tgz\",\n      \"integrity\": \"sha512-AhVDn+qObNacklqmBABnFa3YfVk08CzksuuecL/x+lo95dZxXuAkqJZLUsAEKQ3EiDd5E9wTUBjh0cSogmKMYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-expect-continue\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.11.tgz\",\n      \"integrity\": \"sha512-xpobcctR1AHSrvkiArgTyLffn78Lt9unPMpa/yic9RKn+bOf/5M55UIM6RaPL5xKzI06/GSsTDywTWvzEAbyyw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-flexible-checksums\": {\n      \"version\": \"3.974.17\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.17.tgz\",\n      \"integrity\": \"sha512-Js24a6sdH9SU5DI5++nlQJayCuOweiiTjnCcAsY75/JtaXF+xysDQ6nRBYx6pUPNY22viRYmdDTFZDaA9AF46g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@aws-crypto/crc32c\": \"5.2.0\",\n        \"@aws-crypto/util\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/crc64-nvme\": \"^3.972.8\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-host-header\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.11.tgz\",\n      \"integrity\": \"sha512-CBC6+tVYaOJo7QXgN1zJ4Ba2f3/Cpy4eRViYFimXW/O5Mn8hBmgXXzHu4vy4ubT80YWnp8aCFygr7dTOa14yQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-location-constraint\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.10.tgz\",\n      \"integrity\": \"sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-logger\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz\",\n      \"integrity\": \"sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-recursion-detection\": {\n      \"version\": \"3.972.12\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.12.tgz\",\n      \"integrity\": \"sha512-5eltYxKB4MfdQv7/VhWxRbAVQKow5dz9votRFigTYrWJHMQXwLMltlbk7KFWSZh5NDBySfmjT7Jv/DWfYCmDng==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws/lambda-invoke-store\": \"^0.2.2\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-sdk-s3\": {\n      \"version\": \"3.972.38\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.38.tgz\",\n      \"integrity\": \"sha512-Yuv3urkJtd1/b3kIURzHwihc1SV6n1t+uiXffOD2OpylZ7+4/QnO2W73yhLZzK1Z762BaqwQ3IVRqAHWzNbQ4A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-ssec\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.10.tgz\",\n      \"integrity\": \"sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-user-agent\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.39.tgz\",\n      \"integrity\": \"sha512-MlNSvNsSVlMKKWaCzA0GP1nS4Cuq3WCXUN1vmMvd+Ctztib5kmRcpmTtKx9kikN8szAc+gcdp7uqJJervV2nQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/nested-clients\": {\n      \"version\": \"3.997.7\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.7.tgz\",\n      \"integrity\": \"sha512-jT2AXOODobQfTYGC2SChMSnZ/voIcRV/LHlY1suyhY1bdgP/voKkhEg8Ci1jiGQ4lBiaso5BEAV3ZWWpPTfmYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/region-config-resolver\": {\n      \"version\": \"3.972.14\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.14.tgz\",\n      \"integrity\": \"sha512-VuLXVmm7+lKVxqFcOItPkXhjbJ02iUfxkxheRu41SfWf6/xrZup2A2SwHZos/LeQGu3SBHeqTQht80Uo3ienPA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/signature-v4-multi-region\": {\n      \"version\": \"3.996.26\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.26.tgz\",\n      \"integrity\": \"sha512-2N62veqdMZBCwQUHsbhtnaovOFjOa5Dn3dAD1nRqFTUXR4QmirT3HZnfus/L1DS08Vm5CkoKmL0iMVt6YbqEag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/token-providers\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1046.0.tgz\",\n      \"integrity\": \"sha512-9je8nZt+ntB8IjhpGNayU/AkBgvq/f4aFO2bH1LSNC5JX6K8zY4LUnr/ymqunePrwq+B5OVBpL7ILjYzMFSZAw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/types\": {\n      \"version\": \"3.973.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz\",\n      \"integrity\": \"sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-endpoints\": {\n      \"version\": \"3.996.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.9.tgz\",\n      \"integrity\": \"sha512-ibx8Vd73rCTHekNGeXX8cpGWoBKbNAlwKHL3yjSxxttu5QnNDaSAM7/0MFYDjU31/F4lyrPoQcGirT0ew61xcg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-locate-window\": {\n      \"version\": \"3.965.5\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz\",\n      \"integrity\": \"sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-browser\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.11.tgz\",\n      \"integrity\": \"sha512-kq3RS6XQtHMrLFShbkem6h+8fxazB3jEIsbMC6aaSInOciRGE+eGAqTgJ+obO7Euo/pjM8thVqLiLISEH9X9DA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"bowser\": \"^2.11.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-node\": {\n      \"version\": \"3.973.25\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.25.tgz\",\n      \"integrity\": \"sha512-066hKH/0nvV7x4ofV/iK9kz8r/qNfcR6rzuEOFqI2vQL/fcTTsDAbTw0jmXkyMzANK8ltQdALj19ns3zuOJiUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"aws-crt\": \">=1.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"aws-crt\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@aws-sdk/xml-builder\": {\n      \"version\": \"3.972.23\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.23.tgz\",\n      \"integrity\": \"sha512-A0YmgYFv+hTI9c17Ntvd2hSehm9bmJfkb+ggADBwVKA8H/3+Jx94SzR2qOB9bAA9WFeDqnfz9PKKQ+D+YAKomA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"2.1.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"fast-xml-parser\": \"5.7.2\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws/lambda-invoke-store\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz\",\n      \"integrity\": \"sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==\",\n      \"license\": \"Apache-2.0\",\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@nodable/entities\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz\",\n      \"integrity\": \"sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/nodable\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@pinojs/redact\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz\",\n      \"integrity\": \"sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@smithy/core\": {\n      \"version\": \"3.24.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/core/-/core-3.24.2.tgz\",\n      \"integrity\": \"sha512-IKS7qX59fAGCYBmt5JChcDswQDupZqT2Yn2ZBA3UgTlsjRNNkQzZobbn95xoAAdtTyJmBiJB3Y02qR3rgy3Zog==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/credential-provider-imds\": {\n      \"version\": \"4.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.3.2.tgz\",\n      \"integrity\": \"sha512-iYr9ekBjmZ+FwkiHEopqGscBbl78X62cq3p5Dd0eC+gNd7fybNZFQQdDuOQjTVmFymleuA8YRWZnuXWZ8B3kKA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/fetch-http-handler\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.2.tgz\",\n      \"integrity\": \"sha512-3wF40g8OOCA5BnwQUvwtzZqYBbWWftDjpAlWIUo6Yld3ZzJaMAKqg7MWQBPjE8oLaqvZQUE7tVGlZPsae6A4bQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/is-array-buffer\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz\",\n      \"integrity\": \"sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/node-http-handler\": {\n      \"version\": \"4.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.2.tgz\",\n      \"integrity\": \"sha512-EdksTZ8UXYxGUgQ4mpIKrHoaj9WVGsp66TpZuixLAz1Jex8YDLnS4RH9ktGED5aOpN0OJlEtrsC9IGt76go1eA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/signature-v4\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.2.tgz\",\n      \"integrity\": \"sha512-1km1OjdLRFuITWpCPofjFqzZ+tbeWuB72ZhcYjbjkCxZ21tTPfIs4GUxRrelMyKMLxLghGD58RENnXorU/O8cw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/types\": {\n      \"version\": \"4.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz\",\n      \"integrity\": \"sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-buffer-from\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz\",\n      \"integrity\": \"sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/is-array-buffer\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-utf8\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz\",\n      \"integrity\": \"sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/util-buffer-from\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/atomic-sleep\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz\",\n      \"integrity\": \"sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8.0.0\"\n      }\n    },\n    \"node_modules/bowser\": {\n      \"version\": \"2.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz\",\n      \"integrity\": \"sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/dayjs\": {\n      \"version\": \"1.11.21\",\n      \"resolved\": \"https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz\",\n      \"integrity\": \"sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/fast-xml-builder\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz\",\n      \"integrity\": \"sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"path-expression-matcher\": \"^1.5.0\",\n        \"xml-naming\": \"^0.1.0\"\n      }\n    },\n    \"node_modules/fast-xml-parser\": {\n      \"version\": \"5.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz\",\n      \"integrity\": \"sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"^2.1.0\",\n        \"fast-xml-builder\": \"^1.1.5\",\n        \"path-expression-matcher\": \"^1.5.0\",\n        \"strnum\": \"^2.2.3\"\n      },\n      \"bin\": {\n        \"fxparser\": \"src/cli/cli.js\"\n      }\n    },\n    \"node_modules/on-exit-leak-free\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz\",\n      \"integrity\": \"sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/path-expression-matcher\": {\n      \"version\": \"1.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz\",\n      \"integrity\": \"sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/pino\": {\n      \"version\": \"10.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/pino/-/pino-10.3.1.tgz\",\n      \"integrity\": \"sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@pinojs/redact\": \"^0.4.0\",\n        \"atomic-sleep\": \"^1.0.0\",\n        \"on-exit-leak-free\": \"^2.1.0\",\n        \"pino-abstract-transport\": \"^3.0.0\",\n        \"pino-std-serializers\": \"^7.0.0\",\n        \"process-warning\": \"^5.0.0\",\n        \"quick-format-unescaped\": \"^4.0.3\",\n        \"real-require\": \"^0.2.0\",\n        \"safe-stable-stringify\": \"^2.3.1\",\n        \"sonic-boom\": \"^4.0.1\",\n        \"thread-stream\": \"^4.0.0\"\n      },\n      \"bin\": {\n        \"pino\": \"bin.js\"\n      }\n    },\n    \"node_modules/pino-abstract-transport\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz\",\n      \"integrity\": \"sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"split2\": \"^4.0.0\"\n      }\n    },\n    \"node_modules/pino-std-serializers\": {\n      \"version\": \"7.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz\",\n      \"integrity\": \"sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/process-warning\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz\",\n      \"integrity\": \"sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/fastify\"\n        },\n        {\n          \"type\": \"opencollective\",\n          \"url\": \"https://opencollective.com/fastify\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/quick-format-unescaped\": {\n      \"version\": \"4.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz\",\n      \"integrity\": \"sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/real-require\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz\",\n      \"integrity\": \"sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 12.13.0\"\n      }\n    },\n    \"node_modules/safe-stable-stringify\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz\",\n      \"integrity\": \"sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      }\n    },\n    \"node_modules/sonic-boom\": {\n      \"version\": \"4.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz\",\n      \"integrity\": \"sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"atomic-sleep\": \"^1.0.0\"\n      }\n    },\n    \"node_modules/split2\": {\n      \"version\": \"4.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/split2/-/split2-4.2.0.tgz\",\n      \"integrity\": \"sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==\",\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \">= 10.x\"\n      }\n    },\n    \"node_modules/strnum\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz\",\n      \"integrity\": \"sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/thread-stream\": {\n      \"version\": \"4.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz\",\n      \"integrity\": \"sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"real-require\": \"^1.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20\"\n      }\n    },\n    \"node_modules/thread-stream/node_modules/real-require\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz\",\n      \"integrity\": \"sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/tslib\": {\n      \"version\": \"2.8.1\",\n      \"resolved\": \"https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz\",\n      \"integrity\": \"sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==\",\n      \"license\": \"0BSD\"\n    },\n    \"node_modules/xml-naming\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz\",\n      \"integrity\": \"sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    }\n  }\n}\n\nFile v1.0.1:package.json\n\n{\n  \"name\": \"aios-transfer-file\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"@aws-sdk/client-s3\": \"^3.1045.0\",\n    \"dayjs\": \"^1.11.21\",\n    \"pino\": \"^10.3.1\"\n  }\n}\n\nFile v1.0.1:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS File Transfer\"\n  short_description: \"Transfer OpenClaw files through an S3 SDK\"\n  default_prompt: \"Use $aios-transfer-file to receive `file_input://...` URIs into the current senderId workspace folder or upload a current senderId file back to the user through an S3-compatible SDK.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.0.0: 8 files, 19239 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (39620b), package.json (185b), README.md (1953b), scripts/transfer_s3.mjs (11237b), skill-card.md (2533b), SKILL.md (8617b), _meta.json (137b)\n\nFile v1.0.0:SKILL.md\n\n---\r\nname: aios-transfer-file\r\ndescription: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要把输入文件下载到工作区，或需要把本地文件上传后以 `file_output://...` URI 返回给用户时，必须使用这个 skill。不要使用 `aws` CLI 或任何外部 S3 客户端程序完成这些传输。\r\n---\r\n\r\n# AIOS 文件传输\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\n在 OpenClaw 中，所有文件和图片传输，包括接受用户发来的文件，和给用户发送文件，都必须使用兼容 AWS S3 的 SDK。这适用于附件、`file_input://` 消息，以及任何需要把文件返回给用户的场景。\r\n\r\n## 不可违反的规则\r\n\r\n- 始终使用 S3 SDK。不要调用 `aws`、`s3cmd`、`mc` 或任何其他外部客户端程序。\r\n- 本项目统一使用 TypeScript 和 JavaScript。不要为这个 skill 添加 Python 脚本或基于 Python 的传输流程。\r\n- 在处理任何 `file_input://...` URI 之前，或在发送任何本地文件给用户之前，先触发这个 skill。\r\n- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`，不要在对话中临时写新的传输脚本。\r\n- 如果工作区中还没有 `file_input` 和 `file_output` 目录，使用前先创建。\r\n- 下载和上传都必须限制在工作区内进行。\r\n- 在 SDK 上传成功之前，不要声称文件已经发送完成。\r\n- 当你需要返回一个可下载文件时，最终回复必须是单独一条 `file_output://...` 消息，不能附带其他文字。\r\n\r\n## 运行时配置\r\n\r\n使用 AIOS 环境变量构建 S3 客户端：\r\n\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n\r\n使用以下 bucket 变量：\r\n\r\n- 收件箱 bucket：`AIOS_S3_AGENT_INBOX_BUCKET`\r\n- 发件箱 bucket：`AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n发件箱变量统一使用 `AIOS_S3_AGENT_OUTBOX_BUCKET`，不要引入其他别名。\r\n\r\n构造 SDK 客户端时：\r\n\r\n- 从 `AIOS_S3_ENDPOINT` 设置自定义 endpoint。\r\n- 从 `AIOS_S3_REGION` 设置 region。\r\n- 显式传入 `AIOS_S3_ACCESS_KEY_ID` 和 `AIOS_S3_SECRET_ACCESS_KEY` 作为访问凭证。\r\n- 当 `AIOS_S3_FORCE_PATH_STYLE` 为真值时启用 path-style，例如 `1`、`true` 或 `TRUE`。\r\n\r\n与 `aios-agent-management-console` 保持一致，使用 TypeScript 或 JavaScript，并采用 AWS SDK for JavaScript v3，具体为 `@aws-sdk/client-s3`。\r\n\r\n## 内置脚本\r\n\r\n优先使用内置 JavaScript 工具：\r\n\r\n```bash\r\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace .\r\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace .\r\n```\r\n\r\n内置脚本的行为：\r\n\r\n- 使用 `@aws-sdk/client-s3` 和上面的 AIOS S3 环境变量。\r\n- 与 `aios-agent-management-console` 保持同样风格：ESM、动态导入本地安装的包、显式构造 `S3Client`、显式传入凭证，并且 `AIOS_S3_FORCE_PATH_STYLE` 默认取 `true`。\r\n- 自动创建 `file_input` 和 `file_output` 目录。\r\n- 把 `file_input://...` URI 下载到 `file_input`。\r\n- 把待发送文件复制到 `file_output`，重命名为要求的时间戳前缀格式，并上传到发件箱 bucket 根目录。\r\n- 输出描述传输结果的 JSON。\r\n- 支持 `--uri-only`，用于最终上传回复步骤。\r\n\r\n依赖位置：\r\n\r\n- 这个 skill 在 `package.json` 中声明了 `@aws-sdk/client-s3`。\r\n- 在一个全新的工作区首次传输前，先检查这个 skill 的本地依赖是否已经安装。\r\n- 必须在这个 skill 目录中完成依赖检查，例如确认 `node_modules/@aws-sdk/client-s3` 是否存在，或运行 `npm ls @aws-sdk/client-s3 --depth=0`。\r\n- 如果依赖缺失，在运行内置脚本前，先在这个 skill 目录执行 `npm install` 本地安装依赖。\r\n- 只允许从本地安装位置动态加载该包；不要依赖其他项目中的兜底导入，也不要依赖任意文件路径。\r\n- 如果本地包缺失，要明确报告依赖错误。除非用户明确要求修改内置脚本，否则不要在对话里写一个替代传输脚本。\r\n\r\n依赖处理流程：\r\n\r\n1. 在检查依赖或执行安装命令前，先切换到这个 skill 目录。\r\n2. 确认 `node` 和 `npm` 可用。\r\n3. 检查 `@aws-sdk/client-s3` 是否已经本地安装。\r\n4. 只有在本地依赖检查确认缺失时，才运行 `npm install`。\r\n5. 安装完成后，仍然要从这个 skill 目录运行内置脚本，确保它能正确解析本地依赖。\r\n\r\n## 接收文件\r\n\r\n当消息以 `file_input://` 开头时：\r\n\r\n1. 解析 URI，并忽略第一个空格之后的所有内容。\r\n2. 从 URI 中提取 `bucket` 和完整的 `key`。\r\n   示例：`file_input://bname/path/to/fname.bin extra text`\r\n   - bucket: `bname`\r\n   - key: `path/to/fname.bin`\r\n3. 在下载目标元数据中保留完整 key。识别远端对象时，不要把它压缩成只有 basename。\r\n4. 把对象下载到工作区的 `file_input` 目录。\r\n5. 本地文件名使用原始 basename，但前面加上时间戳前缀，例如 `123456_fname.bin`。\r\n6. 如果 basename 本身已经带有时间戳前缀，则替换原有前缀，不要再叠加一个。\r\n7. 下载完成后，把本地绝对路径加入工作上下文，再继续处理用户请求。\r\n\r\n实现要求：\r\n\r\n- 下载请求必须以解析得到的 URI bucket 和 key 为准。\r\n- 你可以把 URI bucket 与 `AIOS_S3_AGENT_INBOX_BUCKET` 做诊断比较，但下载时不要改写 URI bucket。\r\n- 使用 SDK 流式下载对象，不要通过 shell 调用客户端可执行程序。\r\n- 优先调用 `scripts/transfer_s3.mjs download-uri ...`，不要写一次性的 SDK 代码。\r\n\r\n## 发送文件\r\n\r\n当你需要把本地文件发回给用户时：\r\n\r\n1. 先用普通 assistant 消息说明文件内容以及用户该如何使用。\r\n2. 从 `AIOS_S3_AGENT_OUTBOX_BUCKET` 解析发件箱 bucket。\r\n3. 把文件重命名为带时间戳前缀的格式，例如 `123456_fname.bin`（如果原始 basename 已经有时间戳前缀，则替换原前缀，不要叠加），然后将最终文件名中的所有空格替换为 `_`，最后将该文件移动到工作区的 `file_output` 目录。\r\n4. 远端目标必须使用发件箱 bucket 根目录，不要额外添加子目录。\r\n5. 如果发件箱 bucket 不存在，通过 SDK 先创建，再上传。\r\n6. 使用 SDK 上传复制后的文件。\r\n7. 上传成功后，再发送第二条回复，内容只能是 `file_output://<bucket>/<new_name>`。不要在同一条消息里同时输出说明性文字和 `file_output://...` URI。\r\n8. 从工作区的 `file_output` 目录中删除该文件，避免占用空间。\r\n\r\n实现要求：\r\n\r\n- 远端 key 必须始终精确等于 bucket 根目录下的时间戳文件名。\r\n- 说明性消息和 `file_output://...` 回复不能合并在同一条 assistant 消息里。\r\n- 在上传成功之前，不要输出 `file_output://...`。\r\n- 优先调用 `scripts/transfer_s3.mjs upload-file ...`，不要写一次性的 SDK 代码。\r\n\r\n## 文件名规则\r\n\r\n下载和上传都使用以下规则：\r\n\r\n- 时间戳前缀格式：`<timestamp>_filename.ext`\r\n- 如果文件名已经以 `<digits>_` 开头，则把这个前导数字前缀替换成新的时间戳。\r\n- 除了上传时必须把空格替换为 `_` 之外，文件名其余部分保持原样。\r\n\r\n## SDK 行为\r\n\r\n使用 SDK 的标准对象操作，不要拉起外部客户端：\r\n\r\n- 下载：`GetObject` 或等价接口\r\n- 上传：`PutObject` 或托管上传助手\r\n- 检查 bucket 是否存在：`HeadBucket` 或等价接口\r\n- bucket 缺失时创建：`CreateBucket` 或等价接口\r\n\r\n对于大文件，优先使用流式 API；当 SDK 支持流式处理时，避免把整个文件一次性读入内存。\r\n\r\n## 失败处理\r\n\r\n- 如果缺少必需的 S3 配置，停止执行，并准确指出缺失的是哪个环境变量。\r\n- 如果 URI 格式错误，无法同时提取 bucket 和 key，停止执行，并报告输入格式有问题。\r\n- 如果下载或上传失败，报告真实失败原因，不要假装传输已经完成。\r\n- 如果上传失败，不要发送 `file_output://...` URI。\n\nFile v1.0.0:README.md\n\n# aios-transfer-file\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\nOpenClaw/AIOS 文件传输 skill。使用 `scripts/transfer_s3.mjs` 动态加载当前目录本地安装的 `@aws-sdk/client-s3`，把 `file_input://...` 对象下载到工作区，或把本地文件上传到发件箱 bucket。\r\n\r\n## 依赖要求\r\n\r\n- Node.js\r\n- `@aws-sdk/client-s3`\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n- `AIOS_S3_AGENT_INBOX_BUCKET`\r\n- `AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n## 用法\r\n\r\n```bash\r\nnpm install\r\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace .\r\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace .\r\n```\r\n\r\n## Docker\r\n\r\n推荐做法：在 Docker 镜像内预装依赖，但仍然把它作为这个 skill 的本地依赖，而不是使用 `npm install -g`。\r\n\r\nDockerfile 示例模式：\r\n\r\n```dockerfile\r\n# 把 skill 复制进镜像\r\nCOPY skills/aios-transfer-file /opt/aios/skills/aios-transfer-file\r\n\r\n# 在镜像构建阶段安装这个 skill 的本地依赖\r\nWORKDIR /opt/aios/skills/aios-transfer-file\r\nRUN npm ci\r\n```\r\n\r\n运行时要求：\r\n\r\n- `package.json`、`package-lock.json` 和 `node_modules/` 必须保留在同一个 skill 目录下。\r\n- 从这个 skill 目录运行脚本，或者确保启动脚本的进程模块解析路径能够看到这个本地 `node_modules`。\r\n- 不要依赖 `npm install -g @aws-sdk/client-s3`；这个脚本的设计就是动态导入本地安装的包。\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-transfer-file\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1782445364821\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nTransfers OpenClaw and AIOS agent files through an S3-compatible SDK, downloading file_input URIs into the workspace and uploading local files as file_output URIs. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and AIOS/OpenClaw operators use this skill to receive user-provided file_input objects and return generated or processed files through file_output links. It is intended for controlled environments where agents need repeatable S3-backed file transfer behavior. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can upload files and create S3 buckets, and the security scan notes that this power is not tightly enforced at runtime. <br>\nMitigation: Install it only in a controlled AIOS/OpenClaw environment and scope S3 credentials to the intended inbox and outbox buckets. <br>\nRisk: Uploads may expose unintended workspace files if an agent stages the wrong local path. <br>\nMitigation: Use the skill only for files the user asked to receive, verify the staged file before upload, and clean up file_output staging files after successful uploads. <br>\nRisk: Dependency installation can change the runtime package set if it ignores the bundled lockfile. <br>\nMitigation: Prefer npm ci from the included lockfile and run the transfer script from the skill directory so it resolves the local AWS SDK dependency. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/skills/aios-transfer-file) <br>\n- [Artifact README](artifact/README.md) <br>\n- [Skill instructions](artifact/SKILL.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with bash commands; the transfer script outputs JSON or a file_output URI.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Downloads are staged under file_input, uploads are staged under file_output, and successful uploads return a file_output URI.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.0:package-lock.json\n\n{\n  \"name\": \"aios-transfer-file\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"aios-transfer-file\",\n      \"dependencies\": {\n        \"@aws-sdk/client-s3\": \"^3.1045.0\",\n        \"dayjs\": \"^1.11.21\",\n        \"pino\": \"^10.3.1\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz\",\n      \"integrity\": \"sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32c\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz\",\n      \"integrity\": \"sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha1-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-js\": \"^5.2.0\",\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-js\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz\",\n      \"integrity\": \"sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/supports-web-crypto\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz\",\n      \"integrity\": \"sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/util\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz\",\n      \"integrity\": \"sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/client-s3\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1046.0.tgz\",\n      \"integrity\": \"sha512-Cwl2SPm0CLczqNLEW2AZR9G/W+Jap85K7uUVOTRHzG3pErVeYRKOnbzsbAqGHnSYBdaxZ9a58YVaWj67P8tF4w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha1-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-node\": \"^3.972.40\",\n        \"@aws-sdk/middleware-bucket-endpoint\": \"^3.972.11\",\n        \"@aws-sdk/middleware-expect-continue\": \"^3.972.11\",\n        \"@aws-sdk/middleware-flexible-checksums\": \"^3.974.17\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-location-constraint\": \"^3.972.10\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-sdk-s3\": \"^3.972.38\",\n        \"@aws-sdk/middleware-ssec\": \"^3.972.10\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/core\": {\n      \"version\": \"3.974.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.9.tgz\",\n      \"integrity\": \"sha512-bXxosFunr+v/kqNb99r1NRkrVBha7CG036fRSpWGbC1A/e363XFQN6wcZMx7MYTdRr1tYwNnkrWX2xc1rT3BCQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/xml-builder\": \"^3.972.23\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/crc64-nvme\": {\n      \"version\": \"3.972.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.8.tgz\",\n      \"integrity\": \"sha512-fVfUCL/Xh2zINYMPZvj+iBn6XWouQf0DAnjaWCI9MkmqXzL2Iy5FoQB8O7syFe6gN6AH1ecDDU58T51Ou0kFkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-env\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.35.tgz\",\n      \"integrity\": \"sha512-WkFQ8BedszVomhh/Zzs8WwnE/XBmTqZjoQVB8u/4zH6kZCjouXZpPpb93gD8m0EZmzAl7dxHE/y+yDpuKzNCMw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-http\": {\n      \"version\": \"3.972.37\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.37.tgz\",\n      \"integrity\": \"sha512-ylx0ZJTU+2eNcvXQ69VNR3TVSYa/ibpvdK717/NxqR9aXRMn2QRWZaiI8aa5yY/fOWZ5mknSmxGaVxxtdwv3EA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-ini\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.39.tgz\",\n      \"integrity\": \"sha512-QhRSrdkk+Gq0AFIylpiI0N6lcJqFYV9Jtr4Luz5FpYOYbjJSfyTG6iLhnK/UPIgN1Jnon8WAmSC//16XYGvwkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-login\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-login\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.39.tgz\",\n      \"integrity\": \"sha512-1hU0NtC04QbFIuoBuF4aQ2A97GsSE5/A0ZJpDijwexsBREIQ4KPRYl3v/FfKCPBYsaTeGjkOFx5nLhWHY24LOw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-node\": {\n      \"version\": \"3.972.40\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.40.tgz\",\n      \"integrity\": \"sha512-ZgrQaGkpyTlVSCCsffzijVg+KgftTAWYvI5Otc36J/4jNiHb+7MmBiJIR0a5AHLvifC92PiYHt5pijP0dswd1w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-ini\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-process\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.35.tgz\",\n      \"integrity\": \"sha512-hNj1rAwZWT1vfz54BwH8FUWxZuqStrM25Q5LEIwn2erHPMRVAjLlpZqEbCEEqS99eEEOhdeetnS0WeNa3iYeEQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-sso\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.39.tgz\",\n      \"integrity\": \"sha512-mwIPNPldyCZkvHozb6E0X/vuQLN1UCjcA6MwUf1gaO7EwghCmuNZXatq0L3zptKFvPC4Nds7+WFUkifI1XmbSw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/token-providers\": \"3.1046.0\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-web-identity\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.39.tgz\",\n      \"integrity\": \"sha512-b9HT8CnpyPVn1hU14Q7ihjwSPlRzToYmRYJxRd5jNHEZ43lrIhoLaTT8JmfQQt5j5M8rTX1iN1X8mvu0SM1dXA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-bucket-endpoint\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.11.tgz\",\n      \"integrity\": \"sha512-AhVDn+qObNacklqmBABnFa3YfVk08CzksuuecL/x+lo95dZxXuAkqJZLUsAEKQ3EiDd5E9wTUBjh0cSogmKMYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-expect-continue\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.11.tgz\",\n      \"integrity\": \"sha512-xpobcctR1AHSrvkiArgTyLffn78Lt9unPMpa/yic9RKn+bOf/5M55UIM6RaPL5xKzI06/GSsTDywTWvzEAbyyw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-flexible-checksums\": {\n      \"version\": \"3.974.17\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.17.tgz\",\n      \"integrity\": \"sha512-Js24a6sdH9SU5DI5++nlQJayCuOweiiTjnCcAsY75/JtaXF+xysDQ6nRBYx6pUPNY22viRYmdDTFZDaA9AF46g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@aws-crypto/crc32c\": \"5.2.0\",\n        \"@aws-crypto/util\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/crc64-nvme\": \"^3.972.8\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-host-header\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.11.tgz\",\n      \"integrity\": \"sha512-CBC6+tVYaOJo7QXgN1zJ4Ba2f3/Cpy4eRViYFimXW/O5Mn8hBmgXXzHu4vy4ubT80YWnp8aCFygr7dTOa14yQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-location-constraint\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.10.tgz\",\n      \"integrity\": \"sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-logger\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz\",\n      \"integrity\": \"sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-recursion-detection\": {\n      \"version\": \"3.972.12\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.12.tgz\",\n      \"integrity\": \"sha512-5eltYxKB4MfdQv7/VhWxRbAVQKow5dz9votRFigTYrWJHMQXwLMltlbk7KFWSZh5NDBySfmjT7Jv/DWfYCmDng==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws/lambda-invoke-store\": \"^0.2.2\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-sdk-s3\": {\n      \"version\": \"3.972.38\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.38.tgz\",\n      \"integrity\": \"sha512-Yuv3urkJtd1/b3kIURzHwihc1SV6n1t+uiXffOD2OpylZ7+4/QnO2W73yhLZzK1Z762BaqwQ3IVRqAHWzNbQ4A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-ssec\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.10.tgz\",\n      \"integrity\": \"sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-user-agent\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.39.tgz\",\n      \"integrity\": \"sha512-MlNSvNsSVlMKKWaCzA0GP1nS4Cuq3WCXUN1vmMvd+Ctztib5kmRcpmTtKx9kikN8szAc+gcdp7uqJJervV2nQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/nested-clients\": {\n      \"version\": \"3.997.7\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.7.tgz\",\n      \"integrity\": \"sha512-jT2AXOODobQfTYGC2SChMSnZ/voIcRV/LHlY1suyhY1bdgP/voKkhEg8Ci1jiGQ4lBiaso5BEAV3ZWWpPTfmYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/region-config-resolver\": {\n      \"version\": \"3.972.14\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.14.tgz\",\n      \"integrity\": \"sha512-VuLXVmm7+lKVxqFcOItPkXhjbJ02iUfxkxheRu41SfWf6/xrZup2A2SwHZos/LeQGu3SBHeqTQht80Uo3ienPA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/signature-v4-multi-region\": {\n      \"version\": \"3.996.26\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.26.tgz\",\n      \"integrity\": \"sha512-2N62veqdMZBCwQUHsbhtnaovOFjOa5Dn3dAD1nRqFTUXR4QmirT3HZnfus/L1DS08Vm5CkoKmL0iMVt6YbqEag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/token-providers\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1046.0.tgz\",\n      \"integrity\": \"sha512-9je8nZt+ntB8IjhpGNayU/AkBgvq/f4aFO2bH1LSNC5JX6K8zY4LUnr/ymqunePrwq+B5OVBpL7ILjYzMFSZAw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/types\": {\n      \"version\": \"3.973.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz\",\n      \"integrity\": \"sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-endpoints\": {\n      \"version\": \"3.996.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.9.tgz\",\n      \"integrity\": \"sha512-ibx8Vd73rCTHekNGeXX8cpGWoBKbNAlwKHL3yjSxxttu5QnNDaSAM7/0MFYDjU31/F4lyrPoQcGirT0ew61xcg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-locate-window\": {\n      \"version\": \"3.965.5\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz\",\n      \"integrity\": \"sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-browser\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.11.tgz\",\n      \"integrity\": \"sha512-kq3RS6XQtHMrLFShbkem6h+8fxazB3jEIsbMC6aaSInOciRGE+eGAqTgJ+obO7Euo/pjM8thVqLiLISEH9X9DA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"bowser\": \"^2.11.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-node\": {\n      \"version\": \"3.973.25\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.25.tgz\",\n      \"integrity\": \"sha512-066hKH/0nvV7x4ofV/iK9kz8r/qNfcR6rzuEOFqI2vQL/fcTTsDAbTw0jmXkyMzANK8ltQdALj19ns3zuOJiUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"aws-crt\": \">=1.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"aws-crt\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@aws-sdk/xml-builder\": {\n      \"version\": \"3.972.23\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.23.tgz\",\n      \"integrity\": \"sha512-A0YmgYFv+hTI9c17Ntvd2hSehm9bmJfkb+ggADBwVKA8H/3+Jx94SzR2qOB9bAA9WFeDqnfz9PKKQ+D+YAKomA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"2.1.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"fast-xml-parser\": \"5.7.2\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws/lambda-invoke-store\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz\",\n      \"integrity\": \"sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==\",\n      \"license\": \"Apache-2.0\",\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@nodable/entities\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz\",\n      \"integrity\": \"sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/nodable\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@pinojs/redact\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz\",\n      \"integrity\": \"sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@smithy/core\": {\n      \"version\": \"3.24.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/core/-/core-3.24.2.tgz\",\n      \"integrity\": \"sha512-IKS7qX59fAGCYBmt5JChcDswQDupZqT2Yn2ZBA3UgTlsjRNNkQzZobbn95xoAAdtTyJmBiJB3Y02qR3rgy3Zog==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/credential-provider-imds\": {\n      \"version\": \"4.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.3.2.tgz\",\n      \"integrity\": \"sha512-iYr9ekBjmZ+FwkiHEopqGscBbl78X62cq3p5Dd0eC+gNd7fybNZFQQdDuOQjTVmFymleuA8YRWZnuXWZ8B3kKA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/fetch-http-handler\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.2.tgz\",\n      \"integrity\": \"sha512-3wF40g8OOCA5BnwQUvwtzZqYBbWWftDjpAlWIUo6Yld3ZzJaMAKqg7MWQBPjE8oLaqvZQUE7tVGlZPsae6A4bQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/is-array-buffer\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz\",\n      \"integrity\": \"sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/node-http-handler\": {\n      \"version\": \"4.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.2.tgz\",\n      \"integrity\": \"sha512-EdksTZ8UXYxGUgQ4mpIKrHoaj9WVGsp66TpZuixLAz1Jex8YDLnS4RH9ktGED5aOpN0OJlEtrsC9IGt76go1eA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/signature-v4\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.2.tgz\",\n      \"integrity\": \"sha512-1km1OjdLRFuITWpCPofjFqzZ+tbeWuB72ZhcYjbjkCxZ21tTPfIs4GUxRrelMyKMLxLghGD58RENnXorU/O8cw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/types\": {\n      \"version\": \"4.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz\",\n      \"integrity\": \"sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-buffer-from\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz\",\n      \"integrity\": \"sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/is-array-buffer\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-utf8\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz\",\n      \"integrity\": \"sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/util-buffer-from\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/atomic-sleep\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz\",\n      \"integrity\": \"sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8.0.0\"\n      }\n    },\n    \"node_modules/bowser\": {\n      \"version\": \"2.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz\",\n      \"integrity\": \"sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/dayjs\": {\n      \"version\": \"1.11.21\",\n      \"resolved\": \"https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz\",\n      \"integrity\": \"sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/fast-xml-builder\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz\",\n      \"integrity\": \"sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"path-expression-matcher\": \"^1.5.0\",\n        \"xml-naming\": \"^0.1.0\"\n      }\n    },\n    \"node_modules/fast-xml-parser\": {\n      \"version\": \"5.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz\",\n      \"integrity\": \"sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"^2.1.0\",\n        \"fast-xml-builder\": \"^1.1.5\",\n        \"path-expression-matcher\": \"^1.5.0\",\n        \"strnum\": \"^2.2.3\"\n      },\n      \"bin\": {\n        \"fxparser\": \"src/cli/cli.js\"\n      }\n    },\n    \"node_modules/on-exit-leak-free\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz\",\n      \"integrity\": \"sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/path-expression-matcher\": {\n      \"version\": \"1.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz\",\n      \"integrity\": \"sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/pino\": {\n      \"version\": \"10.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/pino/-/pino-10.3.1.tgz\",\n      \"integrity\": \"sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@pinojs/redact\": \"^0.4.0\",\n        \"atomic-sleep\": \"^1.0.0\",\n        \"on-exit-leak-free\": \"^2.1.0\",\n        \"pino-abstract-transport\": \"^3.0.0\",\n        \"pino-std-serializers\": \"^7.0.0\",\n        \"process-warning\": \"^5.0.0\",\n        \"quick-format-unescaped\": \"^4.0.3\",\n        \"real-require\": \"^0.2.0\",\n        \"safe-stable-stringify\": \"^2.3.1\",\n        \"sonic-boom\": \"^4.0.1\",\n        \"thread-stream\": \"^4.0.0\"\n      },\n      \"bin\": {\n        \"pino\": \"bin.js\"\n      }\n    },\n    \"node_modules/pino-abstract-transport\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz\",\n      \"integrity\": \"sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"split2\": \"^4.0.0\"\n      }\n    },\n    \"node_modules/pino-std-serializers\": {\n      \"version\": \"7.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz\",\n      \"integrity\": \"sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/process-warning\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz\",\n      \"integrity\": \"sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/fastify\"\n        },\n        {\n          \"type\": \"opencollective\",\n          \"url\": \"https://opencollective.com/fastify\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/quick-format-unescaped\": {\n      \"version\": \"4.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz\",\n      \"integrity\": \"sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/real-require\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz\",\n      \"integrity\": \"sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 12.13.0\"\n      }\n    },\n    \"node_modules/safe-stable-stringify\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz\",\n      \"integrity\": \"sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      }\n    },\n    \"node_modules/sonic-boom\": {\n      \"version\": \"4.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz\",\n      \"integrity\": \"sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"atomic-sleep\": \"^1.0.0\"\n      }\n    },\n    \"node_modules/split2\": {\n      \"version\": \"4.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/split2/-/split2-4.2.0.tgz\",\n      \"integrity\": \"sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==\",\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \">= 10.x\"\n      }\n    },\n    \"node_modules/strnum\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz\",\n      \"integrity\": \"sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/thread-stream\": {\n      \"version\": \"4.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz\",\n      \"integrity\": \"sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"real-require\": \"^1.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20\"\n      }\n    },\n    \"node_modules/thread-stream/node_modules/real-require\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz\",\n      \"integrity\": \"sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/tslib\": {\n      \"version\": \"2.8.1\",\n      \"resolved\": \"https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz\",\n      \"integrity\": \"sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==\",\n      \"license\": \"0BSD\"\n    },\n    \"node_modules/xml-naming\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz\",\n      \"integrity\": \"sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    }\n  }\n}\n\nFile v1.0.0:package.json\n\n{\n  \"name\": \"aios-transfer-file\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"@aws-sdk/client-s3\": \"^3.1045.0\",\n    \"dayjs\": \"^1.11.21\",\n    \"pino\": \"^10.3.1\"\n  }\n}\n\nFile v1.0.0:agents/openai.yaml\n\ninterface:\n  display_name: \"AIOS File Transfer\"\n  short_description: \"Transfer OpenClaw files through an S3 SDK\"\n  default_prompt: \"Use $aios-transfer-file to receive `file_input://...` URIs or upload a local file back to the user through an S3-compatible SDK.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v0.1.3: 8 files, 19161 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (39620b), package.json (185b), README.md (1953b), scripts/transfer_s3.mjs (11237b), skill-card.md (2501b), SKILL.md (8460b), _meta.json (137b)\n\nFile v0.1.3:SKILL.md\n\n---\r\nname: aios-transfer-file\r\ndescription: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要把输入文件下载到工作区，或需要把本地文件上传后以 `file_output://...` URI 返回给用户时，必须使用这个 skill。不要使用 `aws` CLI 或任何外部 S3 客户端程序完成这些传输。\r\n---\r\n\r\n# AIOS 文件传输\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\n在 OpenClaw 中，所有文件和图片传输，包括接受用户发来的文件，和给用户发送文件，都必须使用兼容 AWS S3 的 SDK。这适用于附件、`file_input://` 消息，以及任何需要把文件返回给用户的场景。\r\n\r\n## 不可违反的规则\r\n\r\n- 始终使用 S3 SDK。不要调用 `aws`、`s3cmd`、`mc` 或任何其他外部客户端程序。\r\n- 本项目统一使用 TypeScript 和 JavaScript。不要为这个 skill 添加 Python 脚本或基于 Python 的传输流程。\r\n- 在处理任何 `file_input://...` URI 之前，或在发送任何本地文件给用户之前，先触发这个 skill。\r\n- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`，不要在对话中临时写新的传输脚本。\r\n- 如果工作区中还没有 `file_input` 和 `file_output` 目录，使用前先创建。\r\n- 下载和上传都必须限制在工作区内进行。\r\n- 在 SDK 上传成功之前，不要声称文件已经发送完成。\r\n- 当你需要返回一个可下载文件时，最终回复必须是单独一条 `file_output://...` 消息，不能附带其他文字。\r\n\r\n## 运行时配置\r\n\r\n使用 AIOS 环境变量构建 S3 客户端：\r\n\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n\r\n使用以下 bucket 变量：\r\n\r\n- 收件箱 bucket：`AIOS_S3_AGENT_INBOX_BUCKET`\r\n- 发件箱 bucket：`AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n发件箱变量统一使用 `AIOS_S3_AGENT_OUTBOX_BUCKET`，不要引入其他别名。\r\n\r\n构造 SDK 客户端时：\r\n\r\n- 从 `AIOS_S3_ENDPOINT` 设置自定义 endpoint。\r\n- 从 `AIOS_S3_REGION` 设置 region。\r\n- 显式传入 `AIOS_S3_ACCESS_KEY_ID` 和 `AIOS_S3_SECRET_ACCESS_KEY` 作为访问凭证。\r\n- 当 `AIOS_S3_FORCE_PATH_STYLE` 为真值时启用 path-style，例如 `1`、`true` 或 `TRUE`。\r\n\r\n与 `aios-agent-management-console` 保持一致，使用 TypeScript 或 JavaScript，并采用 AWS SDK for JavaScript v3，具体为 `@aws-sdk/client-s3`。\r\n\r\n## 内置脚本\r\n\r\n优先使用内置 JavaScript 工具：\r\n\r\n```bash\r\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace .\r\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace .\r\n```\r\n\r\n内置脚本的行为：\r\n\r\n- 使用 `@aws-sdk/client-s3` 和上面的 AIOS S3 环境变量。\r\n- 与 `aios-agent-management-console` 保持同样风格：ESM、动态导入本地安装的包、显式构造 `S3Client`、显式传入凭证，并且 `AIOS_S3_FORCE_PATH_STYLE` 默认取 `true`。\r\n- 自动创建 `file_input` 和 `file_output` 目录。\r\n- 把 `file_input://...` URI 下载到 `file_input`。\r\n- 把待发送文件复制到 `file_output`，重命名为要求的时间戳前缀格式，并上传到发件箱 bucket 根目录。\r\n- 输出描述传输结果的 JSON。\r\n- 支持 `--uri-only`，用于最终上传回复步骤。\r\n\r\n依赖位置：\r\n\r\n- 这个 skill 在 `package.json` 中声明了 `@aws-sdk/client-s3`。\r\n- 在一个全新的工作区首次传输前，先检查这个 skill 的本地依赖是否已经安装。\r\n- 必须在这个 skill 目录中完成依赖检查，例如确认 `node_modules/@aws-sdk/client-s3` 是否存在，或运行 `npm ls @aws-sdk/client-s3 --depth=0`。\r\n- 如果依赖缺失，在运行内置脚本前，先在这个 skill 目录执行 `npm install` 本地安装依赖。\r\n- 只允许从本地安装位置动态加载该包；不要依赖其他项目中的兜底导入，也不要依赖任意文件路径。\r\n- 如果本地包缺失，要明确报告依赖错误。除非用户明确要求修改内置脚本，否则不要在对话里写一个替代传输脚本。\r\n\r\n依赖处理流程：\r\n\r\n1. 在检查依赖或执行安装命令前，先切换到这个 skill 目录。\r\n2. 确认 `node` 和 `npm` 可用。\r\n3. 检查 `@aws-sdk/client-s3` 是否已经本地安装。\r\n4. 只有在本地依赖检查确认缺失时，才运行 `npm install`。\r\n5. 安装完成后，仍然要从这个 skill 目录运行内置脚本，确保它能正确解析本地依赖。\r\n\r\n## 接收文件\r\n\r\n当消息以 `file_input://` 开头时：\r\n\r\n1. 解析 URI，并忽略第一个空格之后的所有内容。\r\n2. 从 URI 中提取 `bucket` 和完整的 `key`。\r\n   示例：`file_input://bname/path/to/fname.bin extra text`\r\n   - bucket: `bname`\r\n   - key: `path/to/fname.bin`\r\n3. 在下载目标元数据中保留完整 key。识别远端对象时，不要把它压缩成只有 basename。\r\n4. 把对象下载到工作区的 `file_input` 目录。\r\n5. 本地文件名使用原始 basename，但前面加上时间戳前缀，例如 `123456_fname.bin`。\r\n6. 如果 basename 本身已经带有时间戳前缀，则替换原有前缀，不要再叠加一个。\r\n7. 下载完成后，把本地绝对路径加入工作上下文，再继续处理用户请求。\r\n\r\n实现要求：\r\n\r\n- 下载请求必须以解析得到的 URI bucket 和 key 为准。\r\n- 你可以把 URI bucket 与 `AIOS_S3_AGENT_INBOX_BUCKET` 做诊断比较，但下载时不要改写 URI bucket。\r\n- 使用 SDK 流式下载对象，不要通过 shell 调用客户端可执行程序。\r\n- 优先调用 `scripts/transfer_s3.mjs download-uri ...`，不要写一次性的 SDK 代码。\r\n\r\n## 发送文件\r\n\r\n当你需要把本地文件发回给用户时：\r\n\r\n1. 先用普通 assistant 消息说明文件内容以及用户该如何使用。\r\n2. 从 `AIOS_S3_AGENT_OUTBOX_BUCKET` 解析发件箱 bucket。\r\n3. 把文件复制到工作区的 `file_output` 目录。\r\n4. 将复制后的文件重命名为带时间戳前缀的格式，例如 `123456_fname.bin`。\r\n5. 如果原始 basename 已经有时间戳前缀，则替换原前缀，不要叠加。\r\n6. 将最终文件名中的所有空格替换为 `_`。\r\n7. 远端目标必须使用发件箱 bucket 根目录，不要额外添加子目录。\r\n8. 如果发件箱 bucket 不存在，通过 SDK 先创建，再上传。\r\n9. 使用 SDK 上传复制后的文件。\r\n10. 上传成功后，再发送第二条回复，内容只能是 `file_output://<bucket>/<new_name>`。\r\n\r\n实现要求：\r\n\r\n- 远端 key 必须始终精确等于 bucket 根目录下的时间戳文件名。\r\n- 说明性消息和 `file_output://...` 回复不能合并在同一条 assistant 消息里。\r\n- 在上传成功之前，不要输出 `file_output://...`。\r\n- 优先调用 `scripts/transfer_s3.mjs upload-file ...`，不要写一次性的 SDK 代码。\r\n\r\n## 文件名规则\r\n\r\n下载和上传都使用以下规则：\r\n\r\n- 时间戳前缀格式：`<timestamp>_filename.ext`\r\n- 如果文件名已经以 `<digits>_` 开头，则把这个前导数字前缀替换成新的时间戳。\r\n- 除了上传时必须把空格替换为 `_` 之外，文件名其余部分保持原样。\r\n\r\n## SDK 行为\r\n\r\n使用 SDK 的标准对象操作，不要拉起外部客户端：\r\n\r\n- 下载：`GetObject` 或等价接口\r\n- 上传：`PutObject` 或托管上传助手\r\n- 检查 bucket 是否存在：`HeadBucket` 或等价接口\r\n- bucket 缺失时创建：`CreateBucket` 或等价接口\r\n\r\n对于大文件，优先使用流式 API；当 SDK 支持流式处理时，避免把整个文件一次性读入内存。\r\n\r\n## 失败处理\r\n\r\n- 如果缺少必需的 S3 配置，停止执行，并准确指出缺失的是哪个环境变量。\r\n- 如果 URI 格式错误，无法同时提取 bucket 和 key，停止执行，并报告输入格式有问题。\r\n- 如果下载或上传失败，报告真实失败原因，不要假装传输已经完成。\r\n- 如果上传失败，不要发送 `file_output://...` URI。\n\nFile v0.1.3:README.md\n\n# aios-transfer-file\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\nOpenClaw/AIOS 文件传输 skill。使用 `scripts/transfer_s3.mjs` 动态加载当前目录本地安装的 `@aws-sdk/client-s3`，把 `file_input://...` 对象下载到工作区，或把本地文件上传到发件箱 bucket。\r\n\r\n## 依赖要求\r\n\r\n- Node.js\r\n- `@aws-sdk/client-s3`\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n- `AIOS_S3_AGENT_INBOX_BUCKET`\r\n- `AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n## 用法\r\n\r\n```bash\r\nnpm install\r\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace .\r\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace .\r\n```\r\n\r\n## Docker\r\n\r\n推荐做法：在 Docker 镜像内预装依赖，但仍然把它作为这个 skill 的本地依赖，而不是使用 `npm install -g`。\r\n\r\nDockerfile 示例模式：\r\n\r\n```dockerfile\r\n# 把 skill 复制进镜像\r\nCOPY skills/aios-transfer-file /opt/aios/skills/aios-transfer-file\r\n\r\n# 在镜像构建阶段安装这个 skill 的本地依赖\r\nWORKDIR /opt/aios/skills/aios-transfer-file\r\nRUN npm ci\r\n```\r\n\r\n运行时要求：\r\n\r\n- `package.json`、`package-lock.json` 和 `node_modules/` 必须保留在同一个 skill 目录下。\r\n- 从这个 skill 目录运行脚本，或者确保启动脚本的进程模块解析路径能够看到这个本地 `node_modules`。\r\n- 不要依赖 `npm install -g @aws-sdk/client-s3`；这个脚本的设计就是动态导入本地安装的包。\n\nFile v0.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-transfer-file\",\n  \"version\": \"0.1.3\",\n  \"publishedAt\": 1781778576654\n}\n\nFile v0.1.3:skill-card.md\n\n## Description: <br>\nAios Transfer File helps OpenClaw and AIOS agents move file_input:// objects and local workspace files through an S3-compatible SDK. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[kadbbz](https://clawhub.ai/user/kadbbz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and AIOS/OpenClaw operators use this skill when an agent needs to download a file_input:// object into the workspace or upload a local file and return a file_output:// URI to the user. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can move files through S3-compatible object storage and generate file_output:// URIs that represent data leaving the local workspace. <br>\nMitigation: Use it only with trusted S3 endpoints and buckets in a controlled AIOS/OpenClaw environment, and review uploads before sending sensitive files. <br>\nRisk: The security summary notes weak user confirmation and no enforced source-path containment for file movement. <br>\nMitigation: Require explicit operator confirmation for outbound transfers, keep file operations inside the intended workspace, and use least-privilege S3 credentials. <br>\nRisk: Runtime dependency installation can add supply-chain exposure if performed ad hoc. <br>\nMitigation: Preinstall dependencies from the bundled lockfile in the deployment image or controlled skill directory before use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/kadbbz/aios-transfer-file) <br>\n- [Artifact README](artifact/README.md) <br>\n- [Artifact SKILL.md](artifact/SKILL.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands; the bundled transfer script emits JSON or file_output:// URI strings.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires a controlled AIOS/OpenClaw environment, trusted S3 endpoint and buckets, configured AIOS_S3_* environment variables, Node.js, and local npm dependencies.] <br>\n\n## Skill Version(s): <br>\n0.1.3 (source: evidence.release.version) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.1.3:package-lock.json\n\n{\n  \"name\": \"aios-transfer-file\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"aios-transfer-file\",\n      \"dependencies\": {\n        \"@aws-sdk/client-s3\": \"^3.1045.0\",\n        \"dayjs\": \"^1.11.21\",\n        \"pino\": \"^10.3.1\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz\",\n      \"integrity\": \"sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32c\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz\",\n      \"integrity\": \"sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha1-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-js\": \"^5.2.0\",\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-js\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz\",\n      \"integrity\": \"sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/supports-web-crypto\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz\",\n      \"integrity\": \"sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/util\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz\",\n      \"integrity\": \"sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/client-s3\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1046.0.tgz\",\n      \"integrity\": \"sha512-Cwl2SPm0CLczqNLEW2AZR9G/W+Jap85K7uUVOTRHzG3pErVeYRKOnbzsbAqGHnSYBdaxZ9a58YVaWj67P8tF4w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha1-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-node\": \"^3.972.40\",\n        \"@aws-sdk/middleware-bucket-endpoint\": \"^3.972.11\",\n        \"@aws-sdk/middleware-expect-continue\": \"^3.972.11\",\n        \"@aws-sdk/middleware-flexible-checksums\": \"^3.974.17\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-location-constraint\": \"^3.972.10\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-sdk-s3\": \"^3.972.38\",\n        \"@aws-sdk/middleware-ssec\": \"^3.972.10\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/core\": {\n      \"version\": \"3.974.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.9.tgz\",\n      \"integrity\": \"sha512-bXxosFunr+v/kqNb99r1NRkrVBha7CG036fRSpWGbC1A/e363XFQN6wcZMx7MYTdRr1tYwNnkrWX2xc1rT3BCQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/xml-builder\": \"^3.972.23\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/crc64-nvme\": {\n      \"version\": \"3.972.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.8.tgz\",\n      \"integrity\": \"sha512-fVfUCL/Xh2zINYMPZvj+iBn6XWouQf0DAnjaWCI9MkmqXzL2Iy5FoQB8O7syFe6gN6AH1ecDDU58T51Ou0kFkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-env\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.35.tgz\",\n      \"integrity\": \"sha512-WkFQ8BedszVomhh/Zzs8WwnE/XBmTqZjoQVB8u/4zH6kZCjouXZpPpb93gD8m0EZmzAl7dxHE/y+yDpuKzNCMw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-http\": {\n      \"version\": \"3.972.37\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.37.tgz\",\n      \"integrity\": \"sha512-ylx0ZJTU+2eNcvXQ69VNR3TVSYa/ibpvdK717/NxqR9aXRMn2QRWZaiI8aa5yY/fOWZ5mknSmxGaVxxtdwv3EA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-ini\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.39.tgz\",\n      \"integrity\": \"sha512-QhRSrdkk+Gq0AFIylpiI0N6lcJqFYV9Jtr4Luz5FpYOYbjJSfyTG6iLhnK/UPIgN1Jnon8WAmSC//16XYGvwkA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-login\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-login\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.39.tgz\",\n      \"integrity\": \"sha512-1hU0NtC04QbFIuoBuF4aQ2A97GsSE5/A0ZJpDijwexsBREIQ4KPRYl3v/FfKCPBYsaTeGjkOFx5nLhWHY24LOw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-node\": {\n      \"version\": \"3.972.40\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.40.tgz\",\n      \"integrity\": \"sha512-ZgrQaGkpyTlVSCCsffzijVg+KgftTAWYvI5Otc36J/4jNiHb+7MmBiJIR0a5AHLvifC92PiYHt5pijP0dswd1w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/credential-provider-env\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-http\": \"^3.972.37\",\n        \"@aws-sdk/credential-provider-ini\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-process\": \"^3.972.35\",\n        \"@aws-sdk/credential-provider-sso\": \"^3.972.39\",\n        \"@aws-sdk/credential-provider-web-identity\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/credential-provider-imds\": \"^4.3.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-process\": {\n      \"version\": \"3.972.35\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.35.tgz\",\n      \"integrity\": \"sha512-hNj1rAwZWT1vfz54BwH8FUWxZuqStrM25Q5LEIwn2erHPMRVAjLlpZqEbCEEqS99eEEOhdeetnS0WeNa3iYeEQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-sso\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.39.tgz\",\n      \"integrity\": \"sha512-mwIPNPldyCZkvHozb6E0X/vuQLN1UCjcA6MwUf1gaO7EwghCmuNZXatq0L3zptKFvPC4Nds7+WFUkifI1XmbSw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/token-providers\": \"3.1046.0\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/credential-provider-web-identity\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.39.tgz\",\n      \"integrity\": \"sha512-b9HT8CnpyPVn1hU14Q7ihjwSPlRzToYmRYJxRd5jNHEZ43lrIhoLaTT8JmfQQt5j5M8rTX1iN1X8mvu0SM1dXA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-bucket-endpoint\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.11.tgz\",\n      \"integrity\": \"sha512-AhVDn+qObNacklqmBABnFa3YfVk08CzksuuecL/x+lo95dZxXuAkqJZLUsAEKQ3EiDd5E9wTUBjh0cSogmKMYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-expect-continue\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.11.tgz\",\n      \"integrity\": \"sha512-xpobcctR1AHSrvkiArgTyLffn78Lt9unPMpa/yic9RKn+bOf/5M55UIM6RaPL5xKzI06/GSsTDywTWvzEAbyyw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-flexible-checksums\": {\n      \"version\": \"3.974.17\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.17.tgz\",\n      \"integrity\": \"sha512-Js24a6sdH9SU5DI5++nlQJayCuOweiiTjnCcAsY75/JtaXF+xysDQ6nRBYx6pUPNY22viRYmdDTFZDaA9AF46g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@aws-crypto/crc32c\": \"5.2.0\",\n        \"@aws-crypto/util\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/crc64-nvme\": \"^3.972.8\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-host-header\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.11.tgz\",\n      \"integrity\": \"sha512-CBC6+tVYaOJo7QXgN1zJ4Ba2f3/Cpy4eRViYFimXW/O5Mn8hBmgXXzHu4vy4ubT80YWnp8aCFygr7dTOa14yQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-location-constraint\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.10.tgz\",\n      \"integrity\": \"sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-logger\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz\",\n      \"integrity\": \"sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-recursion-detection\": {\n      \"version\": \"3.972.12\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.12.tgz\",\n      \"integrity\": \"sha512-5eltYxKB4MfdQv7/VhWxRbAVQKow5dz9votRFigTYrWJHMQXwLMltlbk7KFWSZh5NDBySfmjT7Jv/DWfYCmDng==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws/lambda-invoke-store\": \"^0.2.2\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-sdk-s3\": {\n      \"version\": \"3.972.38\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.38.tgz\",\n      \"integrity\": \"sha512-Yuv3urkJtd1/b3kIURzHwihc1SV6n1t+uiXffOD2OpylZ7+4/QnO2W73yhLZzK1Z762BaqwQ3IVRqAHWzNbQ4A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-ssec\": {\n      \"version\": \"3.972.10\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.10.tgz\",\n      \"integrity\": \"sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/middleware-user-agent\": {\n      \"version\": \"3.972.39\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.39.tgz\",\n      \"integrity\": \"sha512-MlNSvNsSVlMKKWaCzA0GP1nS4Cuq3WCXUN1vmMvd+Ctztib5kmRcpmTtKx9kikN8szAc+gcdp7uqJJervV2nQg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/nested-clients\": {\n      \"version\": \"3.997.7\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.7.tgz\",\n      \"integrity\": \"sha512-jT2AXOODobQfTYGC2SChMSnZ/voIcRV/LHlY1suyhY1bdgP/voKkhEg8Ci1jiGQ4lBiaso5BEAV3ZWWpPTfmYA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-browser\": \"5.2.0\",\n        \"@aws-crypto/sha256-js\": \"5.2.0\",\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/middleware-host-header\": \"^3.972.11\",\n        \"@aws-sdk/middleware-logger\": \"^3.972.10\",\n        \"@aws-sdk/middleware-recursion-detection\": \"^3.972.12\",\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/region-config-resolver\": \"^3.972.14\",\n        \"@aws-sdk/signature-v4-multi-region\": \"^3.996.26\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@aws-sdk/util-endpoints\": \"^3.996.9\",\n        \"@aws-sdk/util-user-agent-browser\": \"^3.972.11\",\n        \"@aws-sdk/util-user-agent-node\": \"^3.973.25\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/fetch-http-handler\": \"^5.4.1\",\n        \"@smithy/node-http-handler\": \"^4.7.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/region-config-resolver\": {\n      \"version\": \"3.972.14\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.14.tgz\",\n      \"integrity\": \"sha512-VuLXVmm7+lKVxqFcOItPkXhjbJ02iUfxkxheRu41SfWf6/xrZup2A2SwHZos/LeQGu3SBHeqTQht80Uo3ienPA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/signature-v4-multi-region\": {\n      \"version\": \"3.996.26\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.26.tgz\",\n      \"integrity\": \"sha512-2N62veqdMZBCwQUHsbhtnaovOFjOa5Dn3dAD1nRqFTUXR4QmirT3HZnfus/L1DS08Vm5CkoKmL0iMVt6YbqEag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/signature-v4\": \"^5.4.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/token-providers\": {\n      \"version\": \"3.1046.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1046.0.tgz\",\n      \"integrity\": \"sha512-9je8nZt+ntB8IjhpGNayU/AkBgvq/f4aFO2bH1LSNC5JX6K8zY4LUnr/ymqunePrwq+B5OVBpL7ILjYzMFSZAw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/core\": \"^3.974.9\",\n        \"@aws-sdk/nested-clients\": \"^3.997.7\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/types\": {\n      \"version\": \"3.973.8\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz\",\n      \"integrity\": \"sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-endpoints\": {\n      \"version\": \"3.996.9\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.9.tgz\",\n      \"integrity\": \"sha512-ibx8Vd73rCTHekNGeXX8cpGWoBKbNAlwKHL3yjSxxttu5QnNDaSAM7/0MFYDjU31/F4lyrPoQcGirT0ew61xcg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-locate-window\": {\n      \"version\": \"3.965.5\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz\",\n      \"integrity\": \"sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-browser\": {\n      \"version\": \"3.972.11\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.11.tgz\",\n      \"integrity\": \"sha512-kq3RS6XQtHMrLFShbkem6h+8fxazB3jEIsbMC6aaSInOciRGE+eGAqTgJ+obO7Euo/pjM8thVqLiLISEH9X9DA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"bowser\": \"^2.11.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-sdk/util-user-agent-node\": {\n      \"version\": \"3.973.25\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.25.tgz\",\n      \"integrity\": \"sha512-066hKH/0nvV7x4ofV/iK9kz8r/qNfcR6rzuEOFqI2vQL/fcTTsDAbTw0jmXkyMzANK8ltQdALj19ns3zuOJiUw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-sdk/middleware-user-agent\": \"^3.972.39\",\n        \"@aws-sdk/types\": \"^3.973.8\",\n        \"@smithy/core\": \"^3.24.1\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"aws-crt\": \">=1.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"aws-crt\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@aws-sdk/xml-builder\": {\n      \"version\": \"3.972.23\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.23.tgz\",\n      \"integrity\": \"sha512-A0YmgYFv+hTI9c17Ntvd2hSehm9bmJfkb+ggADBwVKA8H/3+Jx94SzR2qOB9bAA9WFeDqnfz9PKKQ+D+YAKomA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"2.1.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"fast-xml-parser\": \"5.7.2\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@aws/lambda-invoke-store\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz\",\n      \"integrity\": \"sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==\",\n      \"license\": \"Apache-2.0\",\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@nodable/entities\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz\",\n      \"integrity\": \"sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/nodable\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@pinojs/redact\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz\",\n      \"integrity\": \"sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@smithy/core\": {\n      \"version\": \"3.24.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/core/-/core-3.24.2.tgz\",\n      \"integrity\": \"sha512-IKS7qX59fAGCYBmt5JChcDswQDupZqT2Yn2ZBA3UgTlsjRNNkQzZobbn95xoAAdtTyJmBiJB3Y02qR3rgy3Zog==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/crc32\": \"5.2.0\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/credential-provider-imds\": {\n      \"version\": \"4.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.3.2.tgz\",\n      \"integrity\": \"sha512-iYr9ekBjmZ+FwkiHEopqGscBbl78X62cq3p5Dd0eC+gNd7fybNZFQQdDuOQjTVmFymleuA8YRWZnuXWZ8B3kKA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/fetch-http-handler\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.4.2.tgz\",\n      \"integrity\": \"sha512-3wF40g8OOCA5BnwQUvwtzZqYBbWWftDjpAlWIUo6Yld3ZzJaMAKqg7MWQBPjE8oLaqvZQUE7tVGlZPsae6A4bQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/is-array-buffer\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz\",\n      \"integrity\": \"sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/node-http-handler\": {\n      \"version\": \"4.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.2.tgz\",\n      \"integrity\": \"sha512-EdksTZ8UXYxGUgQ4mpIKrHoaj9WVGsp66TpZuixLAz1Jex8YDLnS4RH9ktGED5aOpN0OJlEtrsC9IGt76go1eA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/signature-v4\": {\n      \"version\": \"5.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.4.2.tgz\",\n      \"integrity\": \"sha512-1km1OjdLRFuITWpCPofjFqzZ+tbeWuB72ZhcYjbjkCxZ21tTPfIs4GUxRrelMyKMLxLghGD58RENnXorU/O8cw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/core\": \"^3.24.2\",\n        \"@smithy/types\": \"^4.14.1\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/types\": {\n      \"version\": \"4.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz\",\n      \"integrity\": \"sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-buffer-from\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz\",\n      \"integrity\": \"sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/is-array-buffer\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/@smithy/util-utf8\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz\",\n      \"integrity\": \"sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@smithy/util-buffer-from\": \"^2.2.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=14.0.0\"\n      }\n    },\n    \"node_modules/atomic-sleep\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz\",\n      \"integrity\": \"sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8.0.0\"\n      }\n    },\n    \"node_modules/bowser\": {\n      \"version\": \"2.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz\",\n      \"integrity\": \"sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/dayjs\": {\n      \"version\": \"1.11.21\",\n      \"resolved\": \"https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz\",\n      \"integrity\": \"sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/fast-xml-builder\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz\",\n      \"integrity\": \"sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"path-expression-matcher\": \"^1.5.0\",\n        \"xml-naming\": \"^0.1.0\"\n      }\n    },\n    \"node_modules/fast-xml-parser\": {\n      \"version\": \"5.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz\",\n      \"integrity\": \"sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==\",\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/NaturalIntelligence\"\n        }\n      ],\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@nodable/entities\": \"^2.1.0\",\n        \"fast-xml-builder\": \"^1.1.5\",\n        \"path-expression-ma\n\nArchive v0.1.2: 8 files, 19127 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (39620b), package.json (185b), README.md (1953b), scripts/transfer_s3.mjs (11048b), skill-card.md (2503b), SKILL.md (8460b), _meta.json (137b)\n\nArchive v0.1.1: 8 files, 19287 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (40153b), package.json (223b), README.md (1953b), scripts/transfer_s3.mjs (11434b), skill-card.md (2076b), SKILL.md (8460b), _meta.json (137b)\n\nArchive v0.1.0: 8 files, 16602 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (33778b), package.json (137b), README.md (1907b), scripts/transfer_s3.mjs (9051b), skill-card.md (2335b), SKILL.md (8307b), _meta.json (137b)\n\nArchive v0.0.1: 8 files, 16046 bytes\n\nFiles: agents/openai.yaml (305b), package-lock.json (33778b), package.json (137b), README.md (1491b), scripts/transfer_s3.mjs (9051b), skill-card.md (2350b), SKILL.md (7816b), _meta.json (137b)","readmeExcerpt":"Skill: AIOS File Transfer Owner: kadbbz Summary: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 file_input://... URI、需要按当前 senderId 把输入文件下载到工作区，或需要把当前 senderId 目录内的本地文件上传后以 file_output:/... Tags: latest:1.0.1 Version history: v1.0.1 | 2026-07-06T08:43:03.647Z | auto **Enforces per-senderId file isolation and workspace directory structure.** - All file operations are now strictly isolated by the current c","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"node scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\""},{"language":"bash","snippet":"npm install\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: aios-transfer-file\ndescription: 通过兼容 AWS S3 的 SDK 为 OpenClaw 和 AIOS agent 处理文件传输。当 agent 收到 `file_input://...` URI、需要按当前 `senderId` 把输入文件下载到工作区，或需要把当前 `senderId` 目录内的本地文件上传后以 `file_output://...` URI 返回给用户时，必须使用这个 skill。不要使用 `aws` CLI 或任何外部 S3 客户端程序完成这些传输。\n---\r\n\r\n# AIOS 文件传输\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\n在 OpenClaw 中，所有文件和图片传输，包括接受用户发来的文件，和给用户发送文件，都必须使用兼容 AWS S3 的 SDK。这适用于附件、`file_input://` 消息，以及任何需要把文件返回给用户的场景。\n\n所有本地文件必须按当前通道提供的 `senderId` 隔离。`senderId` 是 workspace 文件目录的唯一隔离标识；`topic_id` 只用于业务系统 SessionId，不得替代 `senderId` 作为文件目录。\n\n当前工作区内的目录结构固定为：\n\n- `<senderId>/upload`：S3 或通道传入的文件，例如 `file_input://...` 下载结果。\n- `<senderId>/download`：OpenClaw 通过互联网、第三方系统、业务应用等方式下载得到的文件。\n- `<senderId>/generated`：AI 自己生成、转换、分析、渲染或准备返回给用户的文件。\n\r\n## 不可违反的规则\r\n\r\n- 始终使用 S3 SDK。不要调用 `aws`、`s3cmd`、`mc` 或任何其他外部客户端程序。\r\n- 本项目统一使用 TypeScript 和 JavaScript。不要为这个 skill 添加 Python 脚本或基于 Python 的传输流程。\n- 在处理任何 `file_input://...` URI 之前，或在发送任何本地文件给用户之前，先触发这个 skill。\n- 传输操作优先使用内置脚本 `scripts/transfer_s3.mjs`，不要在对话中临时写新的传输脚本。\n- 每次运行脚本都必须显式传入当前通道的 `--sender-id <senderId>`；如果无法确认 `senderId`，停止文件传输，不得用 `topic_id`、用户名或推测值替代。\n- 如果工作区中还没有 `<senderId>/upload`、`<senderId>/download`、`<senderId>/generated` 目录，使用前先创建当前需要的目录。\n- 下载和上传的本地文件都必须限制在当前工作区的 `<senderId>` 目录内进行。\n- 禁止读取、查询、写入、上传或暴露其他 `senderId` 目录中的文件。\n- 在 SDK 上传成功之前，不要声称文件已经发送完成。\n- 当你需要返回一个可下载文件时，最终回复必须是单独一条 `file_output://...` 消息，不能附带其他文字。\n\r\n## 运行时配置\r\n\r\n使用 AIOS 环境变量构建 S3 客户端：\r\n\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n\r\n使用以下 bucket 变量：\r\n\r\n- 收件箱 bucket：`AIOS_S3_AGENT_INBOX_BUCKET`\r\n- 发件箱 bucket：`AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n发件箱变量统一使用 `AIOS_S3_AGENT_OUTBOX_BUCKET`，不要引入其他别名。\r\n\r\n构造 SDK 客户端时：\r\n\r\n- 从 `AIOS_S3_ENDPOINT` 设置自定义 endpoint。\r\n- 从 `AIOS_S3_REGION` 设置 region。\r\n- 显式传入 `AIOS_S3_ACCESS_KEY_ID` 和 `AIOS_S3_SECRET_ACCESS_KEY` 作为访问凭证。\r\n- 当 `AIOS_S3_FORCE_PATH_STYLE` 为真值时启用 path-style，例如 `1`、`true` 或 `TRUE`。\r\n\r\n与 `aios-agent-management-console` 保持一致，使用 TypeScript 或 JavaScript，并采用 AWS SDK for JavaScript v3，具体为 `@aws-sdk/client-s3`。\r\n\r\n## 内置脚本\r\n\r\n优先使用内置 JavaScript 工具：\r\n\r\n```bash\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\n```\n\r\n内置脚本的行为：\r\n\r\n- 使用 `@aws-sdk/client-s3` 和上面的 AIOS S3 环境变量。\n- 与 `aios-agent-management-console` 保持同样风格：ESM、动态导入本地安装的包、显式构造 `S3Client`、显式传入凭证，并且 `AIOS_S3_FORCE_PATH_STYLE` 默认取 `true`。\n- 自动创建当前 `senderId` 下需要的 `upload` 或 `generated` 目录。\n- 把 `file_input://...` URI 下载到 `<senderId>/upload`。\n- 把待发送文件复制到 `<senderId>/generated`，重命名为要求的时间戳前缀格式，并上传到发件箱 bucket 根目录。\n- 输出描述传输结果的 JSON。\n- 支持 `--uri-only`，用于最终上传回复步骤。\n\r\n依赖位置：\r\n\r\n- 这个 skill 在 `package.json` 中声明了 `@aws-sdk/client-s3`。\r\n- 在一个全新的工作区首次传输前，先检查这个 skill 的本地依赖是否已经安装。\r\n- "},{"path":"README.md","content":"# aios-transfer-file\r\n\r\n> 本技能只适用于受控 AIOS 部署。它可能访问真实业务系统，必须按最小权限配置。只读操作可以自动执行；任何会改变状态的操作，包括创建、更新、提交、审批、驳回、删除或触发，都必须先预览目标应用、命令和请求体，并获得明确人工确认。CLI 必须固定到经过评审的版本，Ontology 来源必须可信且可审计。\r\n\r\nOpenClaw/AIOS 文件传输 skill。使用 `scripts/transfer_s3.mjs` 动态加载当前目录本地安装的 `@aws-sdk/client-s3`，按当前通道的 `senderId` 把 `file_input://...` 对象下载到工作区 `<senderId>/upload`，或把当前 `<senderId>` 目录内的本地文件上传到发件箱 bucket。\n\nworkspace 中的会话文件必须按 `senderId` 隔离：\n\n- `<senderId>/upload`：S3 或通道传入的文件。\n- `<senderId>/download`：OpenClaw 通过互联网、第三方系统、业务应用等方式下载得到的文件。\n- `<senderId>/generated`：AI 自己生成、转换、分析、渲染或准备返回给用户的文件。\n\r\n## 依赖要求\r\n\r\n- Node.js\r\n- `@aws-sdk/client-s3`\r\n- `AIOS_S3_ENDPOINT`\r\n- `AIOS_S3_REGION`\r\n- `AIOS_S3_ACCESS_KEY_ID`\r\n- `AIOS_S3_SECRET_ACCESS_KEY`\r\n- `AIOS_S3_FORCE_PATH_STYLE`\r\n- `AIOS_S3_AGENT_INBOX_BUCKET`\r\n- `AIOS_S3_AGENT_OUTBOX_BUCKET`\r\n\r\n## 用法\r\n\r\n```bash\nnpm install\nnode scripts/transfer_s3.mjs download-uri --uri \"file_input://bucket/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\nnode scripts/transfer_s3.mjs upload-file --source \"/abs/path/to/file.bin\" --workspace . --sender-id \"<senderId>\"\n```\n\r\n## Docker\r\n\r\n推荐做法：在 Docker 镜像内预装依赖，但仍然把它作为这个 skill 的本地依赖，而不是使用 `npm install -g`。\r\n\r\nDockerfile 示例模式：\r\n\r\n```dockerfile\r\n# 把 skill 复制进镜像\r\nCOPY skills/aios-transfer-file /opt/aios/skills/aios-transfer-file\r\n\r\n# 在镜像构建阶段安装这个 skill 的本地依赖\r\nWORKDIR /opt/aios/skills/aios-transfer-file\r\nRUN npm ci\r\n```\r\n\r\n运行时要求：\r\n\r\n- `package.json`、`package-lock.json` 和 `node_modules/` 必须保留在同一个 skill 目录下。\r\n- 从这个 skill 目录运行脚本，或者确保启动脚本的进程模块解析路径能够看到这个本地 `node_modules`。\r\n- 不要依赖 `npm install -g @aws-sdk/client-s3`；这个脚本的设计就是动态导入本地安装的包。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74st1pqb0wkrbhpw4yh0kb2982c201\",\n  \"slug\": \"aios-transfer-file\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783327383647\n}"},{"path":"skill-card.md","content":"## Description:\n\nAIOS File Transfer handles OpenClaw and AIOS agent file transfers through an S3-compatible SDK, downloading file_input:// objects into the current senderId workspace or uploading files from that workspace as file_output:// URIs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[kadbbz](https://clawhub.ai/user/kadbbz)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and AIOS/OpenClaw operators use this skill when an agent must receive a user-provided file or return a generated file while preserving per-sender workspace isolation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Sender workspace isolation can be bypassed in the current implementation.\n\nMitigation: Reject or canonicalize symlinked sender, upload, and generated paths before transfer operations, and deploy only with trusted per-sender workspaces until that containment is fixed.\n\nRisk: S3 credentials can be used against caller-named buckets.\n\nMitigation: Scope credentials tightly, restrict downloads to approved inbox buckets or prefixes, and avoid runtime bucket creation unless it is explicitly required and separately authorized.\n\n## Reference(s):\n\n- [README](README.md)\n- [ClawHub skill page](https://clawhub.ai/kadbbz/skills/aios-transfer-file)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands; transfer script returns JSON or a file_output:// URI]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a current senderId, AIOS S3 environment variables, local Node.js dependencies, and S3 credentials scoped for the intended inbox and outbox buckets.]\n\n## Skill Version(s):\n\n1.0.1 (source: ClawHub server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"package-lock.json","content":"{\n  \"name\": \"aios-transfer-file\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"aios-transfer-file\",\n      \"dependencies\": {\n        \"@aws-sdk/client-s3\": \"^3.1045.0\",\n        \"dayjs\": \"^1.11.21\",\n        \"pino\": \"^10.3.1\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz\",\n      \"integrity\": \"sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-crypto/crc32c\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz\",\n      \"integrity\": \"sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha1-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-browser\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz\",\n      \"integrity\": \"sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/sha256-js\": \"^5.2.0\",\n        \"@aws-crypto/supports-web-crypto\": \"^5.2.0\",\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"@aws-sdk/util-locate-window\": \"^3.0.0\",\n        \"@smithy/util-utf8\": \"^2.0.0\",\n        \"tslib\": \"^2.6.2\"\n      }\n    },\n    \"node_modules/@aws-crypto/sha256-js\": {\n      \"version\": \"5.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz\",\n      \"integrity\": \"sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@aws-crypto/util\": \"^5.2.0\",\n        \"@aws-sdk/types\": \"^3.222.0\",\n        \"tslib\": \"^2.6.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16.0.0\"\n      }\n    },\n    \"node_modules/@aws-cr"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1678,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T04:58:34.021Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:41:37.984Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}