{"id":"d6c8d8b0-172a-4ef3-bdb9-ea58b603356e","entityType":"agent","slug":"clawhub-pagoda111king-data-pipeline","name":"Data Pipeline","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pagoda111king-data-pipeline","canonicalPath":"/agent/clawhub-pagoda111king-data-pipeline","generatedAt":"2026-10-11T17:43:40.088Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T15:14:30.747Z","emptyReason":null},"description":"Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate. Skill: Data Pipeline Owner: pagoda111king Summary: Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-04-27T02:02:50.217Z | user v1.1.0: Pipeline stability improvements. All 58 tests pass. Fixed Jest hang with --detectOpenHandles. v1.0.0 | 2026-04-25T07:18:12.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1746mhemcg917609xsdwamt1183gyw3:data-pipeline","sourceUrl":"https://clawhub.ai/pagoda111king/data-pipeline","homepage":"https://clawhub.ai/pagoda111king/skills/data-pipeline","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pagoda111king/data-pipeline","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pagoda111king/skills/data-pipeline","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:14:30.747Z","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-11T15:14:30.747Z","emptyReason":null},"stars":null,"forks":null,"downloads":1042,"packageName":null,"latestVersion":"1.1.0","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:14:30.732Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T15:14:30.747Z","lastCrawledAt":"2026-10-11T15:14:30.732Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T15:14:30.732Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.0","createdAt":"2026-04-27T02:02:50.217Z","changelog":"v1.1.0: Pipeline stability improvements. All 58 tests pass. Fixed Jest hang with --detectOpenHandles.","fileCount":8,"zipByteSize":25504},{"version":"1.0.0","createdAt":"2026-04-25T07:18:12.068Z","changelog":"Initial release: ETL pipeline orchestrator with lifecycle hooks, bundle execution, retry/timeout, built-in transformers. 26 tests.","fileCount":8,"zipByteSize":48980}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1746mhemcg917609xsdwamt1183gyw3:data-pipeline","setupComplexity":"low","setupSteps":["Node.js workspace detected. Install dependencies securely: run `npm ci --ignore-scripts` to prevent post-install lifecycle triggers from running arbitrary code, then selectively audit the dependency tree.","Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-pagoda111king-data-pipeline/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/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-11T17:43:40.085Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pagoda111king-data-pipeline/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":"high","updatedAt":"2026-10-11T15:14:30.747Z","emptyReason":null},"readme":"Skill: Data Pipeline\n\nOwner: pagoda111king\n\nSummary: Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate.\n\nTags: latest:1.1.0\n\nVersion history:\n\nv1.1.0 | 2026-04-27T02:02:50.217Z | user\n\nv1.1.0: Pipeline stability improvements. All 58 tests pass. Fixed Jest hang with --detectOpenHandles.\n\nv1.0.0 | 2026-04-25T07:18:12.068Z | user\n\nInitial release: ETL pipeline orchestrator with lifecycle hooks, bundle execution, retry/timeout, built-in transformers. 26 tests.\n\nArchive index:\n\nArchive v1.1.0: 8 files, 25504 bytes\n\nFiles: examples/basic-usage.js (5550b), package-lock.json (41535b), package.json (384b), skill-card.md (2281b), SKILL.md (4011b), src/pipeline.js (19879b), tests/pipeline.test.js (23699b), _meta.json (132b)\n\nFile v1.1.0:SKILL.md\n\n# data-pipeline · 数据处理管线引擎\n\n> 可组合的数据转换、验证和分析管线。像搭积木一样处理数据。\n\n---\n\n## 何时使用\n\n当用户提到：数据清洗、数据转换、ETL、数据验证、数据分组、数据聚合、管道处理、批量数据处理、数组处理\n\n## 快速开始\n\n```javascript\nconst { Pipeline, Transformers, Validators, PipelineFactory } = require('data-pipeline/src/pipeline');\n\n// 创建一个清洗管线\nconst pipeline = new Pipeline();\npipeline\n  .addStage('filter', Transformers.filter(x => x.age >= 18))\n  .addStage('pick', Transformers.pick(['name', 'email']))\n  .addStage('sort', Transformers.sort('name', 'asc'));\n\nconst result = await pipeline.run(users);\n```\n\n## 核心 API\n\n### Pipeline\n\n```javascript\nconst pipeline = new Pipeline({ strict: true, context: { key: 'value' } });\n\n// 添加阶段\npipeline.addStage(name, asyncFn, { retryCount: 0, retryDelay: 100, timeout: 30000 });\npipeline.addStages([{ name, fn, options }]);\n\n// 阶段管理\npipeline.insertBefore(target, name, fn, options);\npipeline.insertAfter(target, name, fn, options);\npipeline.removeStage(name);\npipeline.toggleStage(name, enabled);\n\n// 执行\nconst result = await pipeline.execute(data);  // 返回 { data, metadata }\nconst data = await pipeline.run(data);         // 只返回数据\n\n// 指标\nconst metrics = pipeline.getMetrics();\npipeline.resetMetrics();\n```\n\n### 内置转换器\n\n| 转换器 | 说明 | 示例 |\n|--------|------|------|\n| `filter(fn)` | 过滤 | `Transformers.filter(x => x.active)` |\n| `map(fn)` | 映射 | `Transformers.map(x => x.name)` |\n| `reduce(fn, init)` | 归约 | `Transformers.reduce((a,b) => a+b, 0)` |\n| `groupBy(key)` | 分组 | `Transformers.groupBy('dept')` |\n| `sort(key, order)` | 排序 | `Transformers.sort('age', 'desc')` |\n| `dedup(key)` | 去重 | `Transformers.dedup('id')` |\n| `flatten(depth)` | 扁平化 | `Transformers.flatten(2)` |\n| `paginate(page, size)` | 分页 | `Transformers.paginate(1, 10)` |\n| `limit(n)` | 限制 | `Transformers.limit(5)` |\n| `pick(fields)` | 选择字段 | `Transformers.pick(['name', 'age'])` |\n| `rename(map)` | 重命名 | `Transformers.rename({old: 'new'})` |\n| `merge(key, ...sources)` | 合并 | `Transformers.merge('id', extras)` |\n\n### 验证器\n\n```javascript\nconst schema = {\n  name: { required: true, type: 'string', minLength: 1 },\n  age: { type: 'number', min: 0, max: 150 },\n  email: { pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/ },\n  role: { enum: ['admin', 'user'] },\n  password: { validate: (v) => v.length >= 8 ? true : 'Too short' }\n};\n\nconst validator = Validators.schema(schema);\nconst result = validator(data);\n// { valid: boolean, errors: [...], totalItems, validItems }\n```\n\n### 工厂函数\n\n```javascript\n// ETL 管线\nconst etl = PipelineFactory.createETL(extract, transforms, load);\n\n// 数据清洗管线\nconst cleaner = PipelineFactory.createCleaner(schema, { defaultField: 'value' });\n\n// 数据分析管线\nconst analyzer = PipelineFactory.createAnalyzer('groupKey', {\n  avgVal: vals => vals.reduce((a,b) => a+b, 0) / vals.length,\n  maxVal: vals => Math.max(...vals)\n});\n```\n\n## 使用场景\n\n1. **数据清洗**：验证 → 去重 → 填充默认值 → 修剪字符串\n2. **ETL 流程**：提取 → 转换（map/filter/reduce）→ 加载\n3. **数据分析**：分组 → 聚合 → 排序 → 分页\n4. **数据验证**：批量验证对象数组，返回详细错误报告\n5. **API 数据处理**：合并多个数据源 → 重命名字段 → 选择输出字段\n\n## 错误处理\n\n```javascript\ntry {\n  const result = await pipeline.execute(data);\n} catch (err) {\n  if (err instanceof PipelineError) {\n    console.log('Failed at:', err.failedStage);\n    console.log('Partial data:', err.lastData);\n    console.log('Stage results:', err.stageResults);\n  }\n}\n```\n\n## 性能指标\n\n```javascript\nconst metrics = pipeline.getMetrics();\n// {\n//   pipeline: { totalRuns, totalErrors, avgTime },\n//   stages: [{ name, calls, errors, avgTime }, ...]\n// }\n```\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn72qvyy5440kj9awhzgtqhye583038h\",\n  \"slug\": \"data-pipeline\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1777255370217\n}\n\nFile v1.1.0:skill-card.md\n\n## Description:\n\nData Pipeline helps agents produce JavaScript guidance and code for composable ETL, data cleaning, validation, analysis, retry, timeout, and metrics workflows over array and object data.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pagoda111king](https://clawhub.ai/user/pagoda111king)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to design and explain JavaScript data-processing pipelines for cleaning, transforming, validating, merging, aggregating, and analyzing structured records.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Attacker-controlled field names, rename maps, join keys, or defaults could exercise unsafe special-key behavior in transforms.\n\nMitigation: Use trusted schemas, maps, join keys, and defaults, or validate them before execution; audit special-key handling before accepting untrusted configuration.\n\nRisk: The JavaScript dev dependency tree may need review before deployment.\n\nMitigation: Install from the lockfile and audit or update development dependencies as part of release qualification.\n\nRisk: Chinese-language source comments and documentation may slow or weaken review for teams without Chinese fluency.\n\nMitigation: Assign a reviewer who can read the source language or translate the comments and examples before production use.\n\n## Reference(s):\n\n- [ClawHub Data Pipeline release page](https://clawhub.ai/pagoda111king/skills/data-pipeline)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JavaScript code snippets and optional shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include pipeline stage definitions, transformer and validator usage, error-handling patterns, metrics guidance, and test commands.]\n\n## Skill Version(s):\n\n1.1.0 (source: server release metadata; artifact package.json reports 0.1.0)\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.1.0:package-lock.json\n\n{\n  \"name\": \"data-pipeline\",\n  \"version\": \"0.1.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"data-pipeline\",\n      \"version\": \"0.1.0\",\n      \"devDependencies\": {\n        \"mocha\": \"^11.7.5\"\n      }\n    },\n    \"node_modules/@isaacs/cliui\": {\n      \"version\": \"8.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz\",\n      \"integrity\": \"sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"string-width\": \"^5.1.2\",\n        \"string-width-cjs\": \"npm:string-width@^4.2.0\",\n        \"strip-ansi\": \"^7.0.1\",\n        \"strip-ansi-cjs\": \"npm:strip-ansi@^6.0.1\",\n        \"wrap-ansi\": \"^8.1.0\",\n        \"wrap-ansi-cjs\": \"npm:wrap-ansi@^7.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/@pkgjs/parseargs\": {\n      \"version\": \"0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz\",\n      \"integrity\": \"sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"engines\": {\n        \"node\": \">=14\"\n      }\n    },\n    \"node_modules/ansi-regex\": {\n      \"version\": \"6.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz\",\n      \"integrity\": \"sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-regex?sponsor=1\"\n      }\n    },\n    \"node_modules/ansi-styles\": {\n      \"version\": \"4.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz\",\n      \"integrity\": \"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"color-convert\": \"^2.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-styles?sponsor=1\"\n      }\n    },\n    \"node_modules/argparse\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz\",\n      \"integrity\": \"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\",\n      \"dev\": true,\n      \"license\": \"Python-2.0\"\n    },\n    \"node_modules/balanced-match\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz\",\n      \"integrity\": \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/brace-expansion\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz\",\n      \"integrity\": \"sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"balanced-match\": \"^1.0.0\"\n      }\n    },\n    \"node_modules/browser-stdout\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz\",\n      \"integrity\": \"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/camelcase\": {\n      \"version\": \"6.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz\",\n      \"integrity\": \"sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/chalk\": {\n      \"version\": \"4.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz\",\n      \"integrity\": \"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-styles\": \"^4.1.0\",\n        \"supports-color\": \"^7.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/chalk?sponsor=1\"\n      }\n    },\n    \"node_modules/chalk/node_modules/supports-color\": {\n      \"version\": \"7.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz\",\n      \"integrity\": \"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"has-flag\": \"^4.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/chokidar\": {\n      \"version\": \"4.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz\",\n      \"integrity\": \"sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"readdirp\": \"^4.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">= 14.16.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://paulmillr.com/funding/\"\n      }\n    },\n    \"node_modules/cliui\": {\n      \"version\": \"8.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz\",\n      \"integrity\": \"sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"string-width\": \"^4.2.0\",\n        \"strip-ansi\": \"^6.0.1\",\n        \"wrap-ansi\": \"^7.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/cliui/node_modules/ansi-regex\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n      \"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/cliui/node_modules/emoji-regex\": {\n      \"version\": \"8.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n      \"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/cliui/node_modules/string-width\": {\n      \"version\": \"4.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n      \"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"emoji-regex\": \"^8.0.0\",\n        \"is-fullwidth-code-point\": \"^3.0.0\",\n        \"strip-ansi\": \"^6.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/cliui/node_modules/strip-ansi\": {\n      \"version\": \"6.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n      \"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/cliui/node_modules/wrap-ansi\": {\n      \"version\": \"7.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz\",\n      \"integrity\": \"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-styles\": \"^4.0.0\",\n        \"string-width\": \"^4.1.0\",\n        \"strip-ansi\": \"^6.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/wrap-ansi?sponsor=1\"\n      }\n    },\n    \"node_modules/color-convert\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz\",\n      \"integrity\": \"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"color-name\": \"~1.1.4\"\n      },\n      \"engines\": {\n        \"node\": \">=7.0.0\"\n      }\n    },\n    \"node_modules/color-name\": {\n      \"version\": \"1.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz\",\n      \"integrity\": \"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/cross-spawn\": {\n      \"version\": \"7.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz\",\n      \"integrity\": \"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"path-key\": \"^3.1.0\",\n        \"shebang-command\": \"^2.0.0\",\n        \"which\": \"^2.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">= 8\"\n      }\n    },\n    \"node_modules/debug\": {\n      \"version\": \"4.4.3\",\n      \"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz\",\n      \"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ms\": \"^2.1.3\"\n      },\n      \"engines\": {\n        \"node\": \">=6.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"supports-color\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/decamelize\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz\",\n      \"integrity\": \"sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/diff\": {\n      \"version\": \"7.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/diff/-/diff-7.0.0.tgz\",\n      \"integrity\": \"sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"engines\": {\n        \"node\": \">=0.3.1\"\n      }\n    },\n    \"node_modules/eastasianwidth\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz\",\n      \"integrity\": \"sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/emoji-regex\": {\n      \"version\": \"9.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz\",\n      \"integrity\": \"sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/escalade\": {\n      \"version\": \"3.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz\",\n      \"integrity\": \"sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6\"\n      }\n    },\n    \"node_modules/escape-string-regexp\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz\",\n      \"integrity\": \"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/find-up\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz\",\n      \"integrity\": \"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"locate-path\": \"^6.0.0\",\n        \"path-exists\": \"^4.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/flat\": {\n      \"version\": \"5.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/flat/-/flat-5.0.2.tgz\",\n      \"integrity\": \"sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"bin\": {\n        \"flat\": \"cli.js\"\n      }\n    },\n    \"node_modules/foreground-child\": {\n      \"version\": \"3.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz\",\n      \"integrity\": \"sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"cross-spawn\": \"^7.0.6\",\n        \"signal-exit\": \"^4.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=14\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/get-caller-file\": {\n      \"version\": \"2.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz\",\n      \"integrity\": \"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \"6.* || 8.* || >= 10.*\"\n      }\n    },\n    \"node_modules/glob\": {\n      \"version\": \"10.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-10.5.0.tgz\",\n      \"integrity\": \"sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==\",\n      \"deprecated\": \"Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"foreground-child\": \"^3.1.0\",\n        \"jackspeak\": \"^3.1.2\",\n        \"minimatch\": \"^9.0.4\",\n        \"minipass\": \"^7.1.2\",\n        \"package-json-from-dist\": \"^1.0.0\",\n        \"path-scurry\": \"^1.11.1\"\n      },\n      \"bin\": {\n        \"glob\": \"dist/esm/bin.mjs\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/has-flag\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz\",\n      \"integrity\": \"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/he\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/he/-/he-1.2.0.tgz\",\n      \"integrity\": \"sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"bin\": {\n        \"he\": \"bin/he\"\n      }\n    },\n    \"node_modules/is-fullwidth-code-point\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz\",\n      \"integrity\": \"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/is-path-inside\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz\",\n      \"integrity\": \"sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/is-plain-obj\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz\",\n      \"integrity\": \"sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/is-unicode-supported\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz\",\n      \"integrity\": \"sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/isexe\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz\",\n      \"integrity\": \"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/jackspeak\": {\n      \"version\": \"3.4.3\",\n      \"resolved\": \"https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz\",\n      \"integrity\": \"sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==\",\n      \"dev\": true,\n      \"license\": \"BlueOak-1.0.0\",\n      \"dependencies\": {\n        \"@isaacs/cliui\": \"^8.0.2\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      },\n      \"optionalDependencies\": {\n        \"@pkgjs/parseargs\": \"^0.11.0\"\n      }\n    },\n    \"node_modules/js-yaml\": {\n      \"version\": \"4.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz\",\n      \"integrity\": \"sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"argparse\": \"^2.0.1\"\n      },\n      \"bin\": {\n        \"js-yaml\": \"bin/js-yaml.js\"\n      }\n    },\n    \"node_modules/locate-path\": {\n      \"version\": \"6.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz\",\n      \"integrity\": \"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"p-locate\": \"^5.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/log-symbols\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz\",\n      \"integrity\": \"sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"chalk\": \"^4.1.0\",\n        \"is-unicode-supported\": \"^0.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/lru-cache\": {\n      \"version\": \"10.4.3\",\n      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz\",\n      \"integrity\": \"sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/minimatch\": {\n      \"version\": \"9.0.9\",\n      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz\",\n      \"integrity\": \"sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"brace-expansion\": \"^2.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=16 || 14 >=14.17\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/minipass\": {\n      \"version\": \"7.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz\",\n      \"integrity\": \"sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==\",\n      \"dev\": true,\n      \"license\": \"BlueOak-1.0.0\",\n      \"engines\": {\n        \"node\": \">=16 || 14 >=14.17\"\n      }\n    },\n    \"node_modules/mocha\": {\n      \"version\": \"11.7.5\",\n      \"resolved\": \"https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz\",\n      \"integrity\": \"sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"browser-stdout\": \"^1.3.1\",\n        \"chokidar\": \"^4.0.1\",\n        \"debug\": \"^4.3.5\",\n        \"diff\": \"^7.0.0\",\n        \"escape-string-regexp\": \"^4.0.0\",\n        \"find-up\": \"^5.0.0\",\n        \"glob\": \"^10.4.5\",\n        \"he\": \"^1.2.0\",\n        \"is-path-inside\": \"^3.0.3\",\n        \"js-yaml\": \"^4.1.0\",\n        \"log-symbols\": \"^4.1.0\",\n        \"minimatch\": \"^9.0.5\",\n        \"ms\": \"^2.1.3\",\n        \"picocolors\": \"^1.1.1\",\n        \"serialize-javascript\": \"^6.0.2\",\n        \"strip-json-comments\": \"^3.1.1\",\n        \"supports-color\": \"^8.1.1\",\n        \"workerpool\": \"^9.2.0\",\n        \"yargs\": \"^17.7.2\",\n        \"yargs-parser\": \"^21.1.1\",\n        \"yargs-unparser\": \"^2.0.0\"\n      },\n      \"bin\": {\n        \"_mocha\": \"bin/_mocha\",\n        \"mocha\": \"bin/mocha.js\"\n      },\n      \"engines\": {\n        \"node\": \"^18.18.0 || ^20.9.0 || >=21.1.0\"\n      }\n    },\n    \"node_modules/ms\": {\n      \"version\": \"2.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n      \"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/p-limit\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz\",\n      \"integrity\": \"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"yocto-queue\": \"^0.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/p-locate\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz\",\n      \"integrity\": \"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"p-limit\": \"^3.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/package-json-from-dist\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz\",\n      \"integrity\": \"sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==\",\n      \"dev\": true,\n      \"license\": \"BlueOak-1.0.0\"\n    },\n    \"node_modules/path-exists\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz\",\n      \"integrity\": \"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/path-key\": {\n      \"version\": \"3.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz\",\n      \"integrity\": \"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/path-scurry\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz\",\n      \"integrity\": \"sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==\",\n      \"dev\": true,\n      \"license\": \"BlueOak-1.0.0\",\n      \"dependencies\": {\n        \"lru-cache\": \"^10.2.0\",\n        \"minipass\": \"^5.0.0 || ^6.0.2 || ^7.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=16 || 14 >=14.18\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/picocolors\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz\",\n      \"integrity\": \"sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/randombytes\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz\",\n      \"integrity\": \"sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"safe-buffer\": \"^5.1.0\"\n      }\n    },\n    \"node_modules/readdirp\": {\n      \"version\": \"4.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz\",\n      \"integrity\": \"sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 14.18.0\"\n      },\n      \"funding\": {\n        \"type\": \"individual\",\n        \"url\": \"https://paulmillr.com/funding/\"\n      }\n    },\n    \"node_modules/require-directory\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz\",\n      \"integrity\": \"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/safe-buffer\": {\n      \"version\": \"5.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n      \"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n      \"dev\": true,\n      \"funding\": [\n        {\n          \"type\": \"github\",\n          \"url\": \"https://github.com/sponsors/feross\"\n        },\n        {\n          \"type\": \"patreon\",\n          \"url\": \"https://www.patreon.com/feross\"\n        },\n        {\n          \"type\": \"consulting\",\n          \"url\": \"https://feross.org/support\"\n        }\n      ],\n      \"license\": \"MIT\"\n    },\n    \"node_modules/serialize-javascript\": {\n      \"version\": \"6.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz\",\n      \"integrity\": \"sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"dependencies\": {\n        \"randombytes\": \"^2.1.0\"\n      }\n    },\n    \"node_modules/shebang-command\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz\",\n      \"integrity\": \"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"shebang-regex\": \"^3.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/shebang-regex\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz\",\n      \"integrity\": \"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/signal-exit\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz\",\n      \"integrity\": \"sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \">=14\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/string-width\": {\n      \"version\": \"5.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz\",\n      \"integrity\": \"sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"eastasianwidth\": \"^0.2.0\",\n        \"emoji-regex\": \"^9.2.2\",\n        \"strip-ansi\": \"^7.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/string-width-cjs\": {\n      \"name\": \"string-width\",\n      \"version\": \"4.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n      \"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"emoji-regex\": \"^8.0.0\",\n        \"is-fullwidth-code-point\": \"^3.0.0\",\n        \"strip-ansi\": \"^6.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/string-width-cjs/node_modules/ansi-regex\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n      \"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/string-width-cjs/node_modules/emoji-regex\": {\n      \"version\": \"8.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n      \"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/string-width-cjs/node_modules/strip-ansi\": {\n      \"version\": \"6.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n      \"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/strip-ansi\": {\n      \"version\": \"7.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz\",\n      \"integrity\": \"sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^6.2.2\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/strip-ansi?sponsor=1\"\n      }\n    },\n    \"node_modules/strip-ansi-cjs\": {\n      \"name\": \"strip-ansi\",\n      \"version\": \"6.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n      \"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/strip-ansi-cjs/node_modules/ansi-regex\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n      \"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/strip-json-comments\": {\n      \"version\": \"3.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz\",\n      \"integrity\": \"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    },\n    \"node_modules/supports-color\": {\n      \"version\": \"8.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz\",\n      \"integrity\": \"sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"has-flag\": \"^4.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/supports-color?sponsor=1\"\n      }\n    },\n    \"node_modules/which\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/which/-/which-2.0.2.tgz\",\n      \"integrity\": \"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"isexe\": \"^2.0.0\"\n      },\n      \"bin\": {\n        \"node-which\": \"bin/node-which\"\n      },\n      \"engines\": {\n        \"node\": \">= 8\"\n      }\n    },\n    \"node_modules/workerpool\": {\n      \"version\": \"9.3.4\",\n      \"resolved\": \"https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz\",\n      \"integrity\": \"sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==\",\n      \"dev\": true,\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/wrap-ansi\": {\n      \"version\": \"8.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz\",\n      \"integrity\": \"sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-styles\": \"^6.1.0\",\n        \"string-width\": \"^5.0.1\",\n        \"strip-ansi\": \"^7.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/wrap-ansi?sponsor=1\"\n      }\n    },\n    \"node_modules/wrap-ansi-cjs\": {\n      \"name\": \"wrap-ansi\",\n      \"version\": \"7.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz\",\n      \"integrity\": \"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-styles\": \"^4.0.0\",\n        \"string-width\": \"^4.1.0\",\n        \"strip-ansi\": \"^6.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/wrap-ansi?sponsor=1\"\n      }\n    },\n    \"node_modules/wrap-ansi-cjs/node_modules/ansi-regex\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n      \"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/wrap-ansi-cjs/node_modules/emoji-regex\": {\n      \"version\": \"8.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n      \"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/wrap-ansi-cjs/node_modules/string-width\": {\n      \"version\": \"4.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n      \"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"emoji-regex\": \"^8.0.0\",\n        \"is-fullwidth-code-point\": \"^3.0.0\",\n        \"strip-ansi\": \"^6.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/wrap-ansi-cjs/node_modules/strip-ansi\": {\n      \"version\": \"6.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n      \"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/wrap-ansi/node_modules/ansi-styles\": {\n      \"version\": \"6.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz\",\n      \"integrity\": \"sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-styles?sponsor=1\"\n      }\n    },\n    \"node_modules/y18n\": {\n      \"version\": \"5.0.8\",\n      \"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz\",\n      \"integrity\": \"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \">=10\"\n      }\n    },\n    \"node_modules/yargs\": {\n      \"version\": \"17.7.2\",\n      \"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz\",\n      \"integrity\": \"sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"cliui\": \"^8.0.1\",\n        \"escalade\": \"^3.1.1\",\n        \"get-caller-file\": \"^2.0.5\",\n        \"require-directory\": \"^2.1.1\",\n        \"string-width\": \"^4.2.3\",\n        \"y18n\": \"^5.0.5\",\n        \"yargs-parser\": \"^21.1.1\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/yargs-parser\": {\n      \"version\": \"21.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz\",\n      \"integrity\": \"sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/yargs-unparser\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz\",\n      \"integrity\": \"sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"camelcase\": \"^6.0.0\",\n        \"decamelize\": \"^4.0.0\",\n        \"flat\": \"^5.0.2\",\n        \"is-plain-obj\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=10\"\n      }\n    },\n    \"node_modules/yargs/node_modules/ansi-regex\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz\",\n      \"integrity\": \"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/yargs/node_modules/emoji-regex\": {\n      \"version\": \"8.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz\",\n      \"integrity\": \"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/yargs/node_modules/string-width\": {\n      \"version\": \"4.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz\",\n      \"integrity\": \"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"emoji-regex\": \"^8.0.0\",\n        \"is-fullwidth-code-point\": \"^3.0.0\",\n        \"strip-ansi\": \"^6.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/yargs/node_modules/strip-ansi\": {\n      \"version\": \"6.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz\",\n      \"integrity\": \"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ansi-regex\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/yocto-queue\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz\",\n      \"integrity\": \"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=10\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/sindresorhus\"\n      }\n    }\n  }\n}\n\nFile v1.1.0:package.json\n\n{\n  \"name\": \"data-pipeline\",\n  \"version\": \"0.1.0\",\n  \"description\": \"数据处理管线引擎 — 可组合的数据转换、验证和分析管线\",\n  \"main\": \"src/pipeline.js\",\n  \"scripts\": {\n    \"test\": \"node tests/pipeline.test.js\"\n  },\n  \"keywords\": [\n    \"pipeline\",\n    \"data\",\n    \"transform\",\n    \"validate\",\n    \"etl\"\n  ],\n  \"devDependencies\": {\n    \"mocha\": \"^11.7.5\"\n  }\n}\n\nArchive v1.0.0: 8 files, 48980 bytes\n\nFiles: CLAWHUB-UPLOAD.md (3538b), metadata.json (2277b), package-lock.json (157952b), package.json (596b), SKILL.md (7172b), src/index.js (8222b), tests/index.test.js (8922b), _meta.json (132b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: data-pipeline\ndescription: Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate.\nversion: 1.0.0\ntags:\n  - etl\n  - pipeline\n  - data-processing\n  - workflow\n  - data\ntools:\n  - Read\n  - Write\n  - Bash\n  - Exec\nmodel: sonnet\n---\n\n# Data Pipeline - 数据管道\n\n**版本**：v1.0.0  \n**定位**：L5 工具层 - 轻量级 ETL 管道编排引擎  \n**状态**：✅ 生产就绪（26 个测试用例，100% 通过）\n\n---\n\n## 📖 技能说明\n\nData Pipeline 是一款轻量级 ETL（Extract-Transform-Load）管道编排引擎，支持多阶段管道执行、生命周期钩子、批量 Bundle 执行、阶段重试和超时控制。内置常用数据转换器（JSON 解析、字段映射、空值过滤、数组聚合）。\n\n**核心价值**：\n- 链式 API 定义管道，代码简洁易读\n- 生命周期钩子（beforeStage/afterStage/onError/onComplete）实现精细控制\n- Bundle 批量执行多个独立管道\n- 阶段级重试和超时，健壮性强\n- 内置转换器开箱即用\n\n---\n\n## 🎯 使用场景\n\n### 场景 1：ETL 数据清洗\n\n```javascript\nconst { PipelineFactory, Transformers } = require('data-pipeline');\n\nconst pipeline = PipelineFactory.createETL('clean-user-data', {\n  extract: async (data) => {\n    // 从 CSV/数据库/API 提取\n    return data;\n  },\n  transform: async (data) => {\n    // 清洗：过滤空值 + 字段映射\n    let result = await Transformers.filterEmpty(['email', 'phone'])(data);\n    result = await Transformers.map({ userName: 'name' })(result);\n    return result;\n  },\n  load: async (data) => {\n    // 写入目标存储\n    return { ...data, loaded: true };\n  },\n});\n\nconst ctx = await pipeline.run({\n  userName: 'Alice',\n  email: '',       // 将被过滤\n  phone: null,     // 将被过滤\n  age: 30\n});\n```\n\n### 场景 2：多管道批量执行（Bundle）\n\n```javascript\nconst { PipelineFactory } = require('data-pipeline');\n\n// 创建多个独立管道\nconst reportPipeline = PipelineFactory.create('daily-report')\n  .use('fetch-data', fetchSalesData)\n  .use('generate-chart', createChart)\n  .use('send-email', sendReport);\n\nconst backupPipeline = PipelineFactory.create('backup')\n  .use('dump-db', dumpDatabase)\n  .use('compress', compressBackup)\n  .use('upload', uploadToS3);\n\n// Bundle 并行执行\nconst bundle = PipelineFactory.createBundle('nightly-jobs', [\n  reportPipeline,\n  backupPipeline,\n]);\n\nconst result = await bundle.run({ date: '2026-04-25' });\n// result: { results: {...}, errors: [...], totalPipelines: 2 }\n```\n\n### 场景 3：带重试和超时的管道\n\n```javascript\nconst { Pipeline } = require('data-pipeline');\n\nconst p = new Pipeline('api-sync');\n\np.use('fetch-api', async () => {\n  const res = await fetch('https://api.example.com/data');\n  if (!res.ok) throw new Error('API error');\n  return await res.json();\n}, { retry: 3, timeout: 10000 });\n\np.use('validate', (data) => {\n  if (!data.id) throw new Error('Missing ID');\n  return data;\n});\n\np.on('onError', (error, ctx) => {\n  console.log(`Stage \"${error.stage}\" failed (attempt ${error.attempt}): ${error.message}`);\n});\n\np.on('onComplete', (ctx) => {\n  console.log(`Pipeline completed in ${ctx.metadata.duration}ms`);\n});\n\nconst ctx = await p.run({});\n```\n\n---\n\n## 🏗️ 技术架构\n\n### 核心组件\n\n```\n┌─────────────────────────────────────────┐\n│           PipelineFactory               │\n│  (工厂: create / createETL / createBundle)│\n└─────────────────┬───────────────────────┘\n                  │\n┌─────────────────▼───────────────────────┐\n│           Pipeline                      │\n│  (管道: use() / on() / run() / getInfo()) │\n└─────────────────┬───────────────────────┘\n                  │\n┌─────────────────▼───────────────────────┐\n│        PipelineStage                    │\n│  (阶段: retry + timeout + enabled)       │\n└─────────────────┬───────────────────────┘\n                  │\n┌─────────────────▼───────────────────────┐\n│        PipelineContext                  │\n│  (上下文: data + metadata + hooks)       │\n└─────────────────────────────────────────┘\n```\n\n### 生命周期钩子\n\n| 钩子 | 触发时机 | 参数 |\n|------|----------|------|\n| `beforeStage` | 阶段执行前 | `(stageName, context)` |\n| `afterStage` | 阶段成功后 | `(stageName, context)` |\n| `onError` | 阶段失败时 | `(error, context)` |\n| `onComplete` | 管道全部完成 | `(context)` |\n\n### 内置转换器\n\n| 转换器 | 功能 |\n|--------|------|\n| `Transformers.parseJSON(key)` | 解析 JSON 字符串字段 |\n| `Transformers.map(mapping)` | 字段名映射 |\n| `Transformers.filterEmpty(keys)` | 过滤空值字段 |\n| `Transformers.aggregate(key, fn)` | 数组聚合 |\n\n---\n\n## 📊 API 参考\n\n### Pipeline\n\n```javascript\nconst { Pipeline } = require('data-pipeline');\n\nconst p = new Pipeline('my-pipeline');\n\n// 添加阶段\np.use(name, executor, options);\n\n// 注册钩子\np.on(event, handler);\n\n// 执行\nconst ctx = await p.run(initialData, metadata);\n\n// 获取信息\nconst info = p.getInfo();\n```\n\n### PipelineFactory\n\n```javascript\nconst { PipelineFactory } = require('data-pipeline');\n\n// 基础管道\nconst p = PipelineFactory.create('id', { defaultTimeout: 30000 });\n\n// ETL 管道\nconst p = PipelineFactory.createETL('id', { extract, transform, load, options });\n\n// Bundle 批量\nconst bundle = PipelineFactory.createBundle('id', [pipeline1, pipeline2]);\nconst result = await bundle.run(data);\n```\n\n### PipelineContext 输出\n\n```javascript\n{\n  data: { ... },              // 最终数据\n  metadata: {\n    pipelineId: '...',\n    totalStages: 3,\n    stageIndex: 3,\n    duration: 150,            // 耗时 (ms)\n    startTime: 1234567890,\n    endTime: 1234568040,\n  },\n  results: {\n    'stage-name': { status: 'success', attempt: 1 },\n  },\n  errors: [],                 // 错误列表\n}\n```\n\n---\n\n## 📁 文件结构\n\n```\ndata-pipeline/\n├── SKILL.md              # 技能定义（本文件）\n├── package.json          # 依赖配置\n├── src/\n│   └── index.js          # 主入口（Pipeline, PipelineFactory, Transformers）\n└── tests/\n    └── index.test.js     # 26 个测试用例\n```\n\n---\n\n## 🚀 安装\n\n```bash\nclawhub install data-pipeline\n```\n\n---\n\n## 📜 许可证\n\nMIT License\n\n---\n\n**文件版本**：v1.0.0  \n**创建时间**：2026-04-25  \n**测试状态**：✅ 26 个测试用例，100% 通过\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn72qvyy5440kj9awhzgtqhye583038h\",\n  \"slug\": \"data-pipeline\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777101492068\n}\n\nFile v1.0.0:CLAWHUB-UPLOAD.md\n\n# data-pipeline | ClawHub 上架材料 (v1.0.0)\n\n---\n\n## 📝 技能描述（200 字）\n\n**data-pipeline（数据管道）** 是一款轻量级 ETL 管道编排引擎，支持多阶段管道执行、生命周期钩子、批量 Bundle 执行、阶段重试和超时控制。内置 JSON 解析、字段映射、空值过滤、数组聚合等常用转换器。链式 API 定义管道，代码简洁易读。核心价值：让数据清洗、转换、加载流程可编排、可监控、可重试，适合自动化数据处理、报表生成、数据同步等场景。26 个测试用例，100% 通过率。\n\n---\n\n## 🎯 使用场景\n\n| 场景 | 描述 |\n|------|------|\n| **ETL 数据清洗** | 提取→清洗→转换→加载，内置转换器开箱即用 |\n| **多管道批量执行** | Bundle 并行执行多个独立管道（如日报生成 + 数据备份） |\n| **API 数据同步** | 阶段级重试 + 超时控制，处理不稳定的外部 API |\n| **数据报表生成** | 多步骤数据处理管道，生命周期钩子监控进度 |\n| **数据迁移** | Extract-Transform-Load 标准模式，支持事务性操作 |\n\n---\n\n## 🏗️ 核心组件\n\n```\nPipelineFactory (工厂)\n  ├── create()        → 基础管道\n  ├── createETL()     → ETL 标准管道\n  └── createBundle()  → 批量管道\n        │\nPipeline (管道)\n  ├── use()           → 添加阶段\n  ├── on()            → 注册钩子\n  ├── run()           → 执行\n  └── getInfo()       → 管道信息\n        │\nPipelineStage (阶段)\n  ├── retry           → 重试次数\n  ├── timeout         → 超时控制\n  └── enabled         → 启用/禁用\n```\n\n---\n\n## 💻 快速开始\n\n```javascript\nconst { PipelineFactory, Transformers } = require('data-pipeline');\n\n// 创建 ETL 管道\nconst pipeline = PipelineFactory.createETL('clean-data', {\n  extract: async (data) => data,\n  transform: async (data) => {\n    let r = await Transformers.filterEmpty(['email', 'phone'])(data);\n    return await Transformers.map({ userName: 'name' })(r);\n  },\n  load: async (data) => ({ ...data, loaded: true }),\n});\n\nconst ctx = await pipeline.run({ userName: 'Alice', email: '' });\n// ctx.data = { name: 'Alice', loaded: true }\n```\n\n---\n\n## 📊 六维评分\n\n| 维度 | 评分 | 说明 |\n|------|------|------|\n| T 技术深度 | 0.70 | 管道引擎、生命周期钩子、重试/超时、Bundle 执行 |\n| C 认知增强 | 0.60 | 数据流转可视化、阶段执行状态追踪 |\n| O 编排能力 | 0.75 | 链式 API、多管道 Bundle、内置转换器 |\n| E 进化能力 | 0.55 | 可扩展阶段、可自定义钩子、转换器可组合 |\n| M 市场验证 | 0.65 | 首次上架，ETL 为通用需求，测试覆盖完整 |\n| U 用户体验 | 0.70 | 链式 API 简洁、文档完整、示例丰富 |\n| **平均** | **0.66** | |\n\n---\n\n## 📁 文件结构\n\n```\ndata-pipeline/\n├── SKILL.md              # 技能定义\n├── CLAWHUB-UPLOAD.md     # 上架材料（本文件）\n├── package.json          # 依赖配置\n├── src/\n│   └── index.js          # 核心引擎（7.5KB）\n└── tests/\n    └── index.test.js     # 26 个测试用例\n```\n\n---\n\n## 📞 技术支持\n\n- 📧 邮箱：support@pagoda111king.com\n- 🐛 反馈：https://clawhub.ai/skills/data-pipeline/issues\n\n---\n\n## 📜 许可证\n\nMIT License\n\n---\n\n**创建时间**：2026-04-25  \n**版本**：v1.0.0  \n**测试状态**：✅ 26 个测试用例，100% 通过  \n**维护者**：pagoda111king\n\nFile v1.0.0:metadata.json\n\n{\n  \"id\": \"data-pipeline\",\n  \"name\": \"数据管道\",\n  \"version\": \"v1.0.0\",\n  \"status\": \"ready-for-publish\",\n  \"category\": \"data-processing\",\n  \"funnel_layer\": \"layer5_tool\",\n  \"description\": \"轻量级 ETL 管道编排引擎 - 多阶段管道 + 生命周期钩子 + Bundle 批量执行\",\n  \"target_users\": [\n    {\n      \"user_type\": \"数据工程师\",\n      \"pain_point\": \"数据处理流程复杂，缺乏编排工具\",\n      \"value_proposition\": \"链式 API 定义 ETL 管道，阶段重试和超时保证稳定性\"\n    },\n    {\n      \"user_type\": \"开发者\",\n      \"pain_point\": \"需要批量执行多个独立数据处理任务\",\n      \"value_proposition\": \"Bundle 并行执行，自动收集结果和错误\"\n    }\n  ],\n  \"inputs\": [\n    {\n      \"name\": \"初始数据\",\n      \"type\": \"object\",\n      \"description\": \"管道处理的初始数据\",\n      \"required\": true\n    },\n    {\n      \"name\": \"阶段配置\",\n      \"type\": \"array\",\n      \"description\": \"管道阶段列表（名称 + 执行函数 + 选项）\",\n      \"required\": true\n    }\n  ],\n  \"outputs\": [\n    {\n      \"name\": \"PipelineContext\",\n      \"type\": \"object\",\n      \"description\": \"包含最终数据、元信息、执行结果和错误\",\n      \"format\": \"{ data, metadata, results, errors }\"\n    }\n  ],\n  \"triggers\": [\n    \"ETL 数据清洗流程\",\n    \"多管道批量执行\",\n    \"API 数据同步\",\n    \"数据报表生成\",\n    \"数据迁移\"\n  ],\n  \"scoring\": {\n    \"T\": 0.70,\n    \"C\": 0.60,\n    \"O\": 0.75,\n    \"E\": 0.55,\n    \"M\": 0.65,\n    \"U\": 0.70,\n    \"average\": 0.66\n  },\n  \"examples\": [\n    {\n      \"name\": \"ETL 数据清洗\",\n      \"input\": \"{ userName: 'Alice', email: '', phone: null, age: 30 }\",\n      \"output\": \"{ name: 'Alice', age: 30, loaded: true }\",\n      \"description\": \"过滤空值 + 字段映射 + 加载标记\"\n    },\n    {\n      \"name\": \"Bundle 批量执行\",\n      \"input\": \"多个独立管道 + 初始数据\",\n      \"output\": \"{ results: { pipelineId: { status, data } }, errors: [...] }\",\n      \"description\": \"并行执行多个管道，收集所有结果\"\n    }\n  ],\n  \"dependencies\": [],\n  \"pricing_hint\": {\n    \"model\": \"free\",\n    \"price_hint\": \"MIT 免费\"\n  },\n  \"published_at\": null,\n  \"updated_at\": \"2026-04-25T15:00:00Z\",\n  \"changelog\": \"Initial release v1.0.0\"\n}\n\nFile v1.0.0:package-lock.json\n\n{\n  \"name\": \"data-pipeline\",\n  \"version\": \"1.0.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"data-pipeline\",\n      \"version\": \"1.0.0\",\n      \"license\": \"MIT\",\n      \"devDependencies\": {\n        \"jest\": \"^30.3.0\"\n      }\n    },\n    \"node_modules/@babel/code-frame\": {\n      \"version\": \"7.29.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz\",\n      \"integrity\": \"sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-validator-identifier\": \"^7.28.5\",\n        \"js-tokens\": \"^4.0.0\",\n        \"picocolors\": \"^1.1.1\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/compat-data\": {\n      \"version\": \"7.29.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz\",\n      \"integrity\": \"sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/core\": {\n      \"version\": \"7.29.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz\",\n      \"integrity\": \"sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/code-frame\": \"^7.29.0\",\n        \"@babel/generator\": \"^7.29.0\",\n        \"@babel/helper-compilation-targets\": \"^7.28.6\",\n        \"@babel/helper-module-transforms\": \"^7.28.6\",\n        \"@babel/helpers\": \"^7.28.6\",\n        \"@babel/parser\": \"^7.29.0\",\n        \"@babel/template\": \"^7.28.6\",\n        \"@babel/traverse\": \"^7.29.0\",\n        \"@babel/types\": \"^7.29.0\",\n        \"@jridgewell/remapping\": \"^2.3.5\",\n        \"convert-source-map\": \"^2.0.0\",\n        \"debug\": \"^4.1.0\",\n        \"gensync\": \"^1.0.0-beta.2\",\n        \"json5\": \"^2.2.3\",\n        \"semver\": \"^6.3.1\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"funding\": {\n        \"type\": \"opencollective\",\n        \"url\": \"https://opencollective.com/babel\"\n      }\n    },\n    \"node_modules/@babel/generator\": {\n      \"version\": \"7.29.1\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz\",\n      \"integrity\": \"sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/parser\": \"^7.29.0\",\n        \"@babel/types\": \"^7.29.0\",\n        \"@jridgewell/gen-mapping\": \"^0.3.12\",\n        \"@jridgewell/trace-mapping\": \"^0.3.28\",\n        \"jsesc\": \"^3.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-compilation-targets\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz\",\n      \"integrity\": \"sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/compat-data\": \"^7.28.6\",\n        \"@babel/helper-validator-option\": \"^7.27.1\",\n        \"browserslist\": \"^4.24.0\",\n        \"lru-cache\": \"^5.1.1\",\n        \"semver\": \"^6.3.1\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-globals\": {\n      \"version\": \"7.28.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz\",\n      \"integrity\": \"sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-module-imports\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz\",\n      \"integrity\": \"sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/traverse\": \"^7.28.6\",\n        \"@babel/types\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-module-transforms\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz\",\n      \"integrity\": \"sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-module-imports\": \"^7.28.6\",\n        \"@babel/helper-validator-identifier\": \"^7.28.5\",\n        \"@babel/traverse\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0\"\n      }\n    },\n    \"node_modules/@babel/helper-plugin-utils\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz\",\n      \"integrity\": \"sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-string-parser\": {\n      \"version\": \"7.27.1\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz\",\n      \"integrity\": \"sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-validator-identifier\": {\n      \"version\": \"7.28.5\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz\",\n      \"integrity\": \"sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helper-validator-option\": {\n      \"version\": \"7.27.1\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz\",\n      \"integrity\": \"sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/helpers\": {\n      \"version\": \"7.29.2\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz\",\n      \"integrity\": \"sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/template\": \"^7.28.6\",\n        \"@babel/types\": \"^7.29.0\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/parser\": {\n      \"version\": \"7.29.2\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz\",\n      \"integrity\": \"sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/types\": \"^7.29.0\"\n      },\n      \"bin\": {\n        \"parser\": \"bin/babel-parser.js\"\n      },\n      \"engines\": {\n        \"node\": \">=6.0.0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-async-generators\": {\n      \"version\": \"7.8.4\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz\",\n      \"integrity\": \"sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-bigint\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz\",\n      \"integrity\": \"sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-class-properties\": {\n      \"version\": \"7.12.13\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz\",\n      \"integrity\": \"sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.12.13\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-class-static-block\": {\n      \"version\": \"7.14.5\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz\",\n      \"integrity\": \"sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.14.5\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-import-attributes\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz\",\n      \"integrity\": \"sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-import-meta\": {\n      \"version\": \"7.10.4\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz\",\n      \"integrity\": \"sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.10.4\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-json-strings\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz\",\n      \"integrity\": \"sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-jsx\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz\",\n      \"integrity\": \"sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-logical-assignment-operators\": {\n      \"version\": \"7.10.4\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz\",\n      \"integrity\": \"sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.10.4\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-nullish-coalescing-operator\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz\",\n      \"integrity\": \"sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-numeric-separator\": {\n      \"version\": \"7.10.4\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz\",\n      \"integrity\": \"sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.10.4\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-object-rest-spread\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz\",\n      \"integrity\": \"sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-optional-catch-binding\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz\",\n      \"integrity\": \"sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-optional-chaining\": {\n      \"version\": \"7.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz\",\n      \"integrity\": \"sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.8.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-private-property-in-object\": {\n      \"version\": \"7.14.5\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz\",\n      \"integrity\": \"sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.14.5\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-top-level-await\": {\n      \"version\": \"7.14.5\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz\",\n      \"integrity\": \"sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.14.5\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/plugin-syntax-typescript\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz\",\n      \"integrity\": \"sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-plugin-utils\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      },\n      \"peerDependencies\": {\n        \"@babel/core\": \"^7.0.0-0\"\n      }\n    },\n    \"node_modules/@babel/template\": {\n      \"version\": \"7.28.6\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz\",\n      \"integrity\": \"sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/code-frame\": \"^7.28.6\",\n        \"@babel/parser\": \"^7.28.6\",\n        \"@babel/types\": \"^7.28.6\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/traverse\": {\n      \"version\": \"7.29.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz\",\n      \"integrity\": \"sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/code-frame\": \"^7.29.0\",\n        \"@babel/generator\": \"^7.29.0\",\n        \"@babel/helper-globals\": \"^7.28.0\",\n        \"@babel/parser\": \"^7.29.0\",\n        \"@babel/template\": \"^7.28.6\",\n        \"@babel/types\": \"^7.29.0\",\n        \"debug\": \"^4.3.1\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@babel/types\": {\n      \"version\": \"7.29.0\",\n      \"resolved\": \"https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz\",\n      \"integrity\": \"sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/helper-string-parser\": \"^7.27.1\",\n        \"@babel/helper-validator-identifier\": \"^7.28.5\"\n      },\n      \"engines\": {\n        \"node\": \">=6.9.0\"\n      }\n    },\n    \"node_modules/@bcoe/v8-coverage\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz\",\n      \"integrity\": \"sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@emnapi/core\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz\",\n      \"integrity\": \"sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/wasi-threads\": \"1.2.1\",\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/runtime\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz\",\n      \"integrity\": \"sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@emnapi/wasi-threads\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz\",\n      \"integrity\": \"sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@isaacs/cliui\": {\n      \"version\": \"8.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz\",\n      \"integrity\": \"sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"string-width\": \"^5.1.2\",\n        \"string-width-cjs\": \"npm:string-width@^4.2.0\",\n        \"strip-ansi\": \"^7.0.1\",\n        \"strip-ansi-cjs\": \"npm:strip-ansi@^6.0.1\",\n        \"wrap-ansi\": \"^8.1.0\",\n        \"wrap-ansi-cjs\": \"npm:wrap-ansi@^7.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/@istanbuljs/load-nyc-config\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz\",\n      \"integrity\": \"sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"camelcase\": \"^5.3.1\",\n        \"find-up\": \"^4.1.0\",\n        \"get-package-type\": \"^0.1.0\",\n        \"js-yaml\": \"^3.13.1\",\n        \"resolve-from\": \"^5.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/@istanbuljs/schema\": {\n      \"version\": \"0.1.6\",\n      \"resolved\": \"https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz\",\n      \"integrity\": \"sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=8\"\n      }\n    },\n    \"node_modules/@jest/console\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz\",\n      \"integrity\": \"sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/types\": \"30.3.0\",\n        \"@types/node\": \"*\",\n        \"chalk\": \"^4.1.2\",\n        \"jest-message-util\": \"30.3.0\",\n        \"jest-util\": \"30.3.0\",\n        \"slash\": \"^3.0.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/core\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz\",\n      \"integrity\": \"sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/console\": \"30.3.0\",\n        \"@jest/pattern\": \"30.0.1\",\n        \"@jest/reporters\": \"30.3.0\",\n        \"@jest/test-result\": \"30.3.0\",\n        \"@jest/transform\": \"30.3.0\",\n        \"@jest/types\": \"30.3.0\",\n        \"@types/node\": \"*\",\n        \"ansi-escapes\": \"^4.3.2\",\n        \"chalk\": \"^4.1.2\",\n        \"ci-info\": \"^4.2.0\",\n        \"exit-x\": \"^0.2.2\",\n        \"graceful-fs\": \"^4.2.11\",\n        \"jest-changed-files\": \"30.3.0\",\n        \"jest-config\": \"30.3.0\",\n        \"jest-haste-map\": \"30.3.0\",\n        \"jest-message-util\": \"30.3.0\",\n        \"jest-regex-util\": \"30.0.1\",\n        \"jest-resolve\": \"30.3.0\",\n        \"jest-resolve-dependencies\": \"30.3.0\",\n        \"jest-runner\": \"30.3.0\",\n        \"jest-runtime\": \"30.3.0\",\n        \"jest-snapshot\": \"30.3.0\",\n        \"jest-util\": \"30.3.0\",\n        \"jest-validate\": \"30.3.0\",\n        \"jest-watcher\": \"30.3.0\",\n        \"pretty-format\": \"30.3.0\",\n        \"slash\": \"^3.0.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      },\n      \"peerDependencies\": {\n        \"node-notifier\": \"^8.0.1 || ^9.0.0 || ^10.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"node-notifier\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@jest/diff-sequences\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz\",\n      \"integrity\": \"sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/environment\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz\",\n      \"integrity\": \"sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/fake-timers\": \"30.3.0\",\n        \"@jest/types\": \"30.3.0\",\n        \"@types/node\": \"*\",\n        \"jest-mock\": \"30.3.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/expect\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz\",\n      \"integrity\": \"sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"expect\": \"30.3.0\",\n        \"jest-snapshot\": \"30.3.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/expect-utils\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz\",\n      \"integrity\": \"sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/get-type\": \"30.1.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/fake-timers\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz\",\n      \"integrity\": \"sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/types\": \"30.3.0\",\n        \"@sinonjs/fake-timers\": \"^15.0.0\",\n        \"@types/node\": \"*\",\n        \"jest-message-util\": \"30.3.0\",\n        \"jest-mock\": \"30.3.0\",\n        \"jest-util\": \"30.3.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/get-type\": {\n      \"version\": \"30.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz\",\n      \"integrity\": \"sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/globals\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz\",\n      \"integrity\": \"sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/environment\": \"30.3.0\",\n        \"@jest/expect\": \"30.3.0\",\n        \"@jest/types\": \"30.3.0\",\n        \"jest-mock\": \"30.3.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/pattern\": {\n      \"version\": \"30.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz\",\n      \"integrity\": \"sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/node\": \"*\",\n        \"jest-regex-util\": \"30.0.1\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/reporters\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz\",\n      \"integrity\": \"sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@bcoe/v8-coverage\": \"^0.2.3\",\n        \"@jest/console\": \"30.3.0\",\n        \"@jest/test-result\": \"30.3.0\",\n        \"@jest/transform\": \"30.3.0\",\n        \"@jest/types\": \"30.3.0\",\n        \"@jridgewell/trace-mapping\": \"^0.3.25\",\n        \"@types/node\": \"*\",\n        \"chalk\": \"^4.1.2\",\n        \"collect-v8-coverage\": \"^1.0.2\",\n        \"exit-x\": \"^0.2.2\",\n        \"glob\": \"^10.5.0\",\n        \"graceful-fs\": \"^4.2.11\",\n        \"istanbul-lib-coverage\": \"^3.0.0\",\n        \"istanbul-lib-instrument\": \"^6.0.0\",\n        \"istanbul-lib-report\": \"^3.0.0\",\n        \"istanbul-lib-source-maps\": \"^5.0.0\",\n        \"istanbul-reports\": \"^3.1.3\",\n        \"jest-message-util\": \"30.3.0\",\n        \"jest-util\": \"30.3.0\",\n        \"jest-worker\": \"30.3.0\",\n        \"slash\": \"^3.0.0\",\n        \"string-length\": \"^4.0.2\",\n        \"v8-to-istanbul\": \"^9.0.1\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      },\n      \"peerDependencies\": {\n        \"node-notifier\": \"^8.0.1 || ^9.0.0 || ^10.0.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"node-notifier\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@jest/schemas\": {\n      \"version\": \"30.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz\",\n      \"integrity\": \"sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@sinclair/typebox\": \"^0.34.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/snapshot-utils\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz\",\n      \"integrity\": \"sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/types\": \"30.3.0\",\n        \"chalk\": \"^4.1.2\",\n        \"graceful-fs\": \"^4.2.11\",\n        \"natural-compare\": \"^1.4.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/source-map\": {\n      \"version\": \"30.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz\",\n      \"integrity\": \"sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jridgewell/trace-mapping\": \"^0.3.25\",\n        \"callsites\": \"^3.1.0\",\n        \"graceful-fs\": \"^4.2.11\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/test-result\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz\",\n      \"integrity\": \"sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/console\": \"30.3.0\",\n        \"@jest/types\": \"30.3.0\",\n        \"@types/istanbul-lib-coverage\": \"^2.0.6\",\n        \"collect-v8-coverage\": \"^1.0.2\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/test-sequencer\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz\",\n      \"integrity\": \"sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/test-result\": \"30.3.0\",\n        \"graceful-fs\": \"^4.2.11\",\n        \"jest-haste-map\": \"30.3.0\",\n        \"slash\": \"^3.0.0\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/transform\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz\",\n      \"integrity\": \"sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/core\": \"^7.27.4\",\n        \"@jest/types\": \"30.3.0\",\n        \"@jridgewell/trace-mapping\": \"^0.3.25\",\n        \"babel-plugin-istanbul\": \"^7.0.1\",\n        \"chalk\": \"^4.1.2\",\n        \"convert-source-map\": \"^2.0.0\",\n        \"fast-json-stable-stringify\": \"^2.1.0\",\n        \"graceful-fs\": \"^4.2.11\",\n        \"jest-haste-map\": \"30.3.0\",\n        \"jest-regex-util\": \"30.0.1\",\n        \"jest-util\": \"30.3.0\",\n        \"pirates\": \"^4.0.7\",\n        \"slash\": \"^3.0.0\",\n        \"write-file-atomic\": \"^5.0.1\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jest/types\": {\n      \"version\": \"30.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz\",\n      \"integrity\": \"sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jest/pattern\": \"30.0.1\",\n        \"@jest/schemas\": \"30.0.5\",\n        \"@types/istanbul-lib-coverage\": \"^2.0.6\",\n        \"@types/istanbul-reports\": \"^3.0.4\",\n        \"@types/node\": \"*\",\n        \"@types/yargs\": \"^17.0.33\",\n        \"chalk\": \"^4.1.2\"\n      },\n      \"engines\": {\n        \"node\": \"^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0\"\n      }\n    },\n    \"node_modules/@jridgewell/gen-mapping\": {\n      \"version\": \"0.3.13\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz\",\n      \"integrity\": \"sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jridgewell/sourcemap-codec\": \"^1.5.0\",\n        \"@jridgewell/trace-mapping\": \"^0.3.24\"\n      }\n    },\n    \"node_modules/@jridgewell/remapping\": {\n      \"version\": \"2.3.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz\",\n      \"integrity\": \"sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jridgewell/gen-mapping\": \"^0.3.5\",\n        \"@jridgewell/trace-mapping\": \"^0.3.24\"\n      }\n    },\n    \"node_modules/@jridgewell/resolve-uri\": {\n      \"version\": \"3.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz\",\n      \"integrity\": \"sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=6.0.0\"\n      }\n    },\n    \"node_modules/@jridgewell/sourcemap-codec\": {\n      \"version\": \"1.5.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\",\n      \"integrity\": \"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@jridgewell/trace-mapping\": {\n      \"version\": \"0.3.31\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz\",\n      \"integrity\": \"sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@jridgewell/resolve-uri\": \"^3.1.0\",\n        \"@jridgewell/sourcemap-codec\": \"^1.4.14\"\n      }\n    },\n    \"node_modules/@napi-rs/wasm-runtime\": {\n      \"version\": \"0.2.12\",\n      \"resolved\": \"https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz\",\n      \"integrity\": \"sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"@emnapi/core\": \"^1.4.3\",\n        \"@emnapi/runtime\": \"^1.4.3\",\n        \"@tybys/wasm-util\": \"^0.10.0\"\n      }\n    },\n    \"node_modules/@pkgjs/parseargs\": {\n      \"version\": \"0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz\",\n      \"integrity\": \"sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"engines\": {\n        \"node\": \">=14\"\n      }\n    },\n    \"node_modules/@pkgr/core\": {\n      \"version\": \"0.2.9\",\n      \"resolved\": \"https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz\",\n      \"integrity\": \"sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \"^12.20.0 || ^14.18.0 || >=16.0.0\"\n      },\n      \"funding\": {\n        \"url\": \"https://opencollective.com/pkgr\"\n      }\n    },\n    \"node_modules/@sinclair/typebox\": {\n      \"version\": \"0.34.49\",\n      \"resolved\": \"https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz\",\n      \"integrity\": \"sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@sinonjs/commons\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz\",\n      \"integrity\": \"sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"dependencies\": {\n        \"type-detect\": \"4.0.8\"\n      }\n    },\n    \"node_modules/@sinonjs/fake-timers\": {\n      \"version\": \"15.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.2.tgz\",\n      \"integrity\": \"sha512-mrn35Jl2pCpns+mE3HaZa1yPN5EYCRgiMI+135COjr2hr8Cls9DXqIZ57vZe2cz7y2XVSq92tcs6kGQcT1J8Rw==\",\n      \"dev\": true,\n      \"license\": \"BSD-3-Clause\",\n      \"dependencies\": {\n        \"@sinonjs/commons\": \"^3.0.1\"\n      }\n    },\n    \"node_modules/@tybys/wasm-util\": {\n      \"version\": \"0.10.1\",\n      \"resolved\": \"https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz\",\n      \"integrity\": \"sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.4.0\"\n      }\n    },\n    \"node_modules/@types/babel__core\": {\n      \"version\": \"7.20.5\",\n      \"resolved\": \"https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz\",\n      \"integrity\": \"sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/parser\": \"^7.20.7\",\n        \"@babel/types\": \"^7.20.7\",\n        \"@types/babel__generator\": \"*\",\n        \"@types/babel__template\": \"*\",\n        \"@types/babel__traverse\": \"*\"\n      }\n    },\n    \"node_modules/@types/babel__generator\": {\n      \"version\": \"7.27.0\",\n      \"resolved\": \"https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz\",\n      \"integrity\": \"sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/types\": \"^7.0.0\"\n      }\n    },\n    \"node_modules/@types/babel__template\": {\n      \"version\": \"7.4.4\",\n      \"resolved\": \"https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz\",\n      \"integrity\": \"sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/parser\": \"^7.1.0\",\n        \"@babel/types\": \"^7.0.0\"\n      }\n    },\n    \"node_modules/@types/babel__traverse\": {\n      \"version\": \"7.28.0\",\n      \"resolved\": \"https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz\",\n      \"integrity\": \"sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@babel/types\": \"^7.28.2\"\n      }\n    },\n    \"node_modules/@types/istanbul-lib-coverage\": {\n      \"version\": \"2.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz\",\n      \"integrity\": \"sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@types/istanbul-lib-report\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz\",\n      \"integrity\": \"sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/istanbul-lib-coverage\": \"*\"\n      }\n    },\n    \"node_modules/@types/istanbul-reports\": {\n      \"version\": \"3.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz\",\n      \"integrity\": \"sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/istanbul-lib-report\": \"*\"\n      }\n    },\n    \"node_modules/@types/node\": {\n      \"version\": \"25.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz\",\n      \"integrity\": \"sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"undici-types\": \"~7.19.0\"\n      }\n    },\n    \"node_modules/@types/stack-utils\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz\",\n      \"integrity\": \"sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@types/yargs\": {\n      \"version\": \"17.0.35\",\n      \"resolved\": \"https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz\",\n      \"integrity\": \"sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/yargs-parser\": \"*\"\n      }\n    },\n    \"node_modules/@types/yargs-parser\": {\n      \"version\": \"21.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz\",\n      \"integrity\": \"sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@ungap/structured-clone\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz\",\n      \"integrity\": \"sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==\",\n      \"dev\": true,\n      \"license\": \"ISC\"\n    },\n    \"node_modules/@unrs/resolver-binding-android-arm-eabi\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz\",\n      \"integrity\": \"sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-android-arm64\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz\",\n      \"integrity\": \"sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-darwin-arm64\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz\",\n      \"integrity\": \"sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-darwin-x64\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz\",\n      \"integrity\": \"sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-freebsd-x64\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz\",\n      \"integrity\": \"sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz\",\n      \"integrity\": \"sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-arm-musleabihf\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz\",\n      \"integrity\": \"sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-arm64-gnu\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz\",\n      \"integrity\": \"sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-arm64-musl\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz\",\n      \"integrity\": \"sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-ppc64-gnu\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz\",\n      \"integrity\": \"sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-riscv64-gnu\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz\",\n      \"integrity\": \"sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-riscv64-musl\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz\",\n      \"integrity\": \"sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@unrs/resolver-binding-linux-s390x-gnu\": {\n      \"version\": \"1.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-g\n\nFile v1.0.0:package.json\n\n{\n  \"name\": \"data-pipeline\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Lightweight data pipeline orchestrator for ETL workflows with lifecycle hooks and bundle execution\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"start\": \"node src/index.js\"\n  },\n  \"keywords\": [\n    \"etl\",\n    \"pipeline\",\n    \"data-processing\",\n    \"workflow\"\n  ],\n  \"author\": \"pagoda111king\",\n  \"license\": \"MIT\",\n  \"clawhub\": {\n    \"slug\": \"data-pipeline\",\n    \"name\": \"Data Pipeline\",\n    \"tags\": [\"etl\", \"pipeline\", \"data-processing\", \"workflow\"]\n  },\n  \"devDependencies\": {\n    \"jest\": \"^30.3.0\"\n  }\n}","readmeExcerpt":"Skill: Data Pipeline Owner: pagoda111king Summary: Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-04-27T02:02:50.217Z | user v1.1.0: Pipeline stability improvements. All 58 tests pass. Fixed Jest hang with --detectOpenHandles. v1.0.0 | 2026-04-25T07:18:12.","codeSnippets":[],"executableExamples":[{"language":"javascript","snippet":"const { Pipeline, Transformers, Validators, PipelineFactory } = require('data-pipeline/src/pipeline');\n\n// 创建一个清洗管线\nconst pipeline = new Pipeline();\npipeline\n  .addStage('filter', Transformers.filter(x => x.age >= 18))\n  .addStage('pick', Transformers.pick(['name', 'email']))\n  .addStage('sort', Transformers.sort('name', 'asc'));\n\nconst result = await pipeline.run(users);"},{"language":"javascript","snippet":"const pipeline = new Pipeline({ strict: true, context: { key: 'value' } });\n\n// 添加阶段\npipeline.addStage(name, asyncFn, { retryCount: 0, retryDelay: 100, timeout: 30000 });\npipeline.addStages([{ name, fn, options }]);\n\n// 阶段管理\npipeline.insertBefore(target, name, fn, options);\npipeline.insertAfter(target, name, fn, options);\npipeline.removeStage(name);\npipeline.toggleStage(name, enabled);\n\n// 执行\nconst result = await pipeline.execute(data);  // 返回 { data, metadata }\nconst data = await pipeline.run(data);         // 只返回数据\n\n// 指标\nconst metrics = pipeline.getMetrics();\npipeline.resetMetrics();"},{"language":"javascript","snippet":"const schema = {\n  name: { required: true, type: 'string', minLength: 1 },\n  age: { type: 'number', min: 0, max: 150 },\n  email: { pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/ },\n  role: { enum: ['admin', 'user'] },\n  password: { validate: (v) => v.length >= 8 ? true : 'Too short' }\n};\n\nconst validator = Validators.schema(schema);\nconst result = validator(data);\n// { valid: boolean, errors: [...], totalItems, validItems }"},{"language":"javascript","snippet":"// ETL 管线\nconst etl = PipelineFactory.createETL(extract, transforms, load);\n\n// 数据清洗管线\nconst cleaner = PipelineFactory.createCleaner(schema, { defaultField: 'value' });\n\n// 数据分析管线\nconst analyzer = PipelineFactory.createAnalyzer('groupKey', {\n  avgVal: vals => vals.reduce((a,b) => a+b, 0) / vals.length,\n  maxVal: vals => Math.max(...vals)\n});"},{"language":"javascript","snippet":"try {\n  const result = await pipeline.execute(data);\n} catch (err) {\n  if (err instanceof PipelineError) {\n    console.log('Failed at:', err.failedStage);\n    console.log('Partial data:', err.lastData);\n    console.log('Stage results:', err.stageResults);\n  }\n}"},{"language":"javascript","snippet":"const metrics = pipeline.getMetrics();\n// {\n//   pipeline: { totalRuns, totalErrors, avgTime },\n//   stages: [{ name, calls, errors, avgTime }, ...]\n// }"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"# data-pipeline · 数据处理管线引擎\n\n> 可组合的数据转换、验证和分析管线。像搭积木一样处理数据。\n\n---\n\n## 何时使用\n\n当用户提到：数据清洗、数据转换、ETL、数据验证、数据分组、数据聚合、管道处理、批量数据处理、数组处理\n\n## 快速开始\n\n```javascript\nconst { Pipeline, Transformers, Validators, PipelineFactory } = require('data-pipeline/src/pipeline');\n\n// 创建一个清洗管线\nconst pipeline = new Pipeline();\npipeline\n  .addStage('filter', Transformers.filter(x => x.age >= 18))\n  .addStage('pick', Transformers.pick(['name', 'email']))\n  .addStage('sort', Transformers.sort('name', 'asc'));\n\nconst result = await pipeline.run(users);\n```\n\n## 核心 API\n\n### Pipeline\n\n```javascript\nconst pipeline = new Pipeline({ strict: true, context: { key: 'value' } });\n\n// 添加阶段\npipeline.addStage(name, asyncFn, { retryCount: 0, retryDelay: 100, timeout: 30000 });\npipeline.addStages([{ name, fn, options }]);\n\n// 阶段管理\npipeline.insertBefore(target, name, fn, options);\npipeline.insertAfter(target, name, fn, options);\npipeline.removeStage(name);\npipeline.toggleStage(name, enabled);\n\n// 执行\nconst result = await pipeline.execute(data);  // 返回 { data, metadata }\nconst data = await pipeline.run(data);         // 只返回数据\n\n// 指标\nconst metrics = pipeline.getMetrics();\npipeline.resetMetrics();\n```\n\n### 内置转换器\n\n| 转换器 | 说明 | 示例 |\n|--------|------|------|\n| `filter(fn)` | 过滤 | `Transformers.filter(x => x.active)` |\n| `map(fn)` | 映射 | `Transformers.map(x => x.name)` |\n| `reduce(fn, init)` | 归约 | `Transformers.reduce((a,b) => a+b, 0)` |\n| `groupBy(key)` | 分组 | `Transformers.groupBy('dept')` |\n| `sort(key, order)` | 排序 | `Transformers.sort('age', 'desc')` |\n| `dedup(key)` | 去重 | `Transformers.dedup('id')` |\n| `flatten(depth)` | 扁平化 | `Transformers.flatten(2)` |\n| `paginate(page, size)` | 分页 | `Transformers.paginate(1, 10)` |\n| `limit(n)` | 限制 | `Transformers.limit(5)` |\n| `pick(fields)` | 选择字段 | `Transformers.pick(['name', 'age'])` |\n| `rename(map)` | 重命名 | `Transformers.rename({old: 'new'})` |\n| `merge(key, ...sources)` | 合并 | `Transformers.merge('id', extras)` |\n\n### 验证器\n\n```javascript\nconst schema = {\n  name: { required: true, type: 'string', minLength: 1 },\n  age: { type: 'number', min: 0, max: 150 },\n  email: { pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/ },\n  role: { enum: ['admin', 'user'] },\n  password: { validate: (v) => v.length >= 8 ? true : 'Too short' }\n};\n\nconst validator = Validators.schema(schema);\nconst result = validator(data);\n// { valid: boolean, errors: [...], totalItems, validItems }\n```\n\n### 工厂函数\n\n```javascript\n// ETL 管线\nconst etl = PipelineFactory.createETL(extract, transforms, load);\n\n// 数据清洗管线\nconst cleaner = PipelineFactory.createCleaner(schema, { defaultField: 'value' });\n\n// 数据分析管线\nconst analyzer = PipelineFactory.createAnalyzer('groupKey', {\n  avgVal: vals => vals.reduce((a,b) => a+b, 0) / vals.length,\n  maxVal: vals => Math.max(...vals)\n});\n```\n\n## 使用场景\n\n1. **数据清洗**：验证 → 去重 → 填充默认值 → 修剪字符串\n2. **ETL 流程**：提取 → 转换（map/filter/reduce）→ 加载\n3. **数据分析**：分组 → 聚合 → 排序 → 分页\n4. **数据验证**：批量验证对象数组，返回详细错误报告\n5. **API 数据处理**：合并多个数据源 → 重命名字段 → 选择输出字段\n\n## 错误处理\n\n```javascript\ntry {\n  const result ="},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn72qvyy5440kj9awhzgtqhye583038h\",\n  \"slug\": \"data-pipeline\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1777255370217\n}"},{"path":"skill-card.md","content":"## Description:\n\nData Pipeline helps agents produce JavaScript guidance and code for composable ETL, data cleaning, validation, analysis, retry, timeout, and metrics workflows over array and object data.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pagoda111king](https://clawhub.ai/user/pagoda111king)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to design and explain JavaScript data-processing pipelines for cleaning, transforming, validating, merging, aggregating, and analyzing structured records.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Attacker-controlled field names, rename maps, join keys, or defaults could exercise unsafe special-key behavior in transforms.\n\nMitigation: Use trusted schemas, maps, join keys, and defaults, or validate them before execution; audit special-key handling before accepting untrusted configuration.\n\nRisk: The JavaScript dev dependency tree may need review before deployment.\n\nMitigation: Install from the lockfile and audit or update development dependencies as part of release qualification.\n\nRisk: Chinese-language source comments and documentation may slow or weaken review for teams without Chinese fluency.\n\nMitigation: Assign a reviewer who can read the source language or translate the comments and examples before production use.\n\n## Reference(s):\n\n- [ClawHub Data Pipeline release page](https://clawhub.ai/pagoda111king/skills/data-pipeline)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JavaScript code snippets and optional shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include pipeline stage definitions, transformer and validator usage, error-handling patterns, metrics guidance, and test commands.]\n\n## Skill Version(s):\n\n1.1.0 (source: server release metadata; artifact package.json reports 0.1.0)\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\": \"data-pipeline\",\n  \"version\": \"0.1.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"data-pipeline\",\n      \"version\": \"0.1.0\",\n      \"devDependencies\": {\n        \"mocha\": \"^11.7.5\"\n      }\n    },\n    \"node_modules/@isaacs/cliui\": {\n      \"version\": \"8.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz\",\n      \"integrity\": \"sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==\",\n      \"dev\": true,\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"string-width\": \"^5.1.2\",\n        \"string-width-cjs\": \"npm:string-width@^4.2.0\",\n        \"strip-ansi\": \"^7.0.1\",\n        \"strip-ansi-cjs\": \"npm:strip-ansi@^6.0.1\",\n        \"wrap-ansi\": \"^8.1.0\",\n        \"wrap-ansi-cjs\": \"npm:wrap-ansi@^7.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/@pkgjs/parseargs\": {\n      \"version\": \"0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz\",\n      \"integrity\": \"sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"engines\": {\n        \"node\": \">=14\"\n      }\n    },\n    \"node_modules/ansi-regex\": {\n      \"version\": \"6.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz\",\n      \"integrity\": \"sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-regex?sponsor=1\"\n      }\n    },\n    \"node_modules/ansi-styles\": {\n      \"version\": \"4.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz\",\n      \"integrity\": \"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\",\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"color-convert\": \"^2.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/chalk/ansi-styles?sponsor=1\"\n      }\n    },\n    \"node_modules/argparse\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz\",\n      \"integrity\": \"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\",\n      \"dev\": true,\n      \"license\": \"Python-2.0\"\n    },\n    \"node_modules/balanced-match\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz\",\n      \"integrity\": \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/brace-expansion\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/brac"},{"path":"package.json","content":"{\n  \"name\": \"data-pipeline\",\n  \"version\": \"0.1.0\",\n  \"description\": \"数据处理管线引擎 — 可组合的数据转换、验证和分析管线\",\n  \"main\": \"src/pipeline.js\",\n  \"scripts\": {\n    \"test\": \"node tests/pipeline.test.js\"\n  },\n  \"keywords\": [\n    \"pipeline\",\n    \"data\",\n    \"transform\",\n    \"validate\",\n    \"etl\"\n  ],\n  \"devDependencies\": {\n    \"mocha\": \"^11.7.5\"\n  }\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate. Skill: Data Pipeline Owner: pagoda111king Summary: Lightweight ETL pipeline orchestrator with lifecycle hooks, bundle execution, stage retry, timeout control, and built-in transformers. 26 tests, 100% pass rate. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-04-27T02:02:50.217Z | user v1.1.0: Pipeline stability improvements. All 58 tests pass. Fixed Jest hang with --detectOpenHandles. v1.0.0 | 2026-04-25T07:18:12.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1058,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T15:14:30.747Z","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-11T15:14:30.747Z","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-11T17:43:40.088Z","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"}]}}}