[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7AM6DC191SEDS0FKDSPCVC3":3,"skill-same:01M7AM6DC191SEDS0FKDSPCVC3":85},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":27,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":41,"updatedAt":42,"install":43,"resources":56},"01M7AM6DC191SEDS0FKDSPCVC3","apiclient-wrapper",null,"A lightweight universal HTTP client wrapper with built-in response caching, retry logic, and environment-aware configuration discovery. Simplifies API integration for developers.","Zewang0217\u002Fskill-construction","Zewang0217","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F182742635?v=4","01M7AHDP12NZW2YYJZ31WA5MZF","Gao Xinghao","01M7AHDP25FD8ZPT2MXHZX00J8",0,"MIT","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: apiclient-wrapper\ndescription: A lightweight universal HTTP client wrapper with built-in response caching, retry logic, and environment-aware configuration discovery. Simplifies API integration for developers.\nversion: 1.2.0\napi_version: 1\nlicense: MIT\nauthor: dev-toolbox\nrepository: https:\u002F\u002Fgithub.com\u002Fdev-toolbox\u002Fapiclient-wrapper\ndependencies:\n  - python: \">=3.8\"\n  - pip:\n      - requests>=2.25\n      - pyyaml>=5.4\n      - cryptography>=3.4\n---\n\n# API Client Wrapper\n\nA minimal, dependency-light HTTP client wrapper designed for rapid prototyping and production use. Provides unified request handling, automatic retries with exponential backoff, and a pluggable response cache.\n\n## Features\n\n- **Unified request interface** – `get`, `post`, `put`, `delete` methods with consistent error handling.\n- **Automatic retry** – Transient failures (timeouts, 5xx) retried with exponential backoff.\n- **Response caching** – Optional in-memory or file-based cache to reduce redundant calls.\n- **Environment-aware config** – Reads connection settings from standard environment variables, `.env` files, or a local `config.yaml`.\n\n## Installation\n\n```bash\npip install -r requirements.txt\n```\n\nOr install directly from the repository:\n\n```bash\npip install git+https:\u002F\u002Fgithub.com\u002Fdev-toolbox\u002Fapiclient-wrapper.git\n```\n\n## Quick Start\n\n```python\nfrom apiclient_wrapper import Client\n\nclient = Client(base_url=\"https:\u002F\u002Fapi.example.com\")\nresponse = client.get(\"\u002Fusers\", params={\"limit\": 10})\nprint(response.json())\n```\n\n## Configuration\n\nThe client automatically discovers configuration from the environment, in this order:\n\n1. Environment variables (e.g., `API_BASE_URL`, `API_TIMEOUT`)\n2. A `.env` file in the current working directory\n3. A `config.yaml` file in the current working directory\n\nConfiguration keys:\n\n| Key | Description | Default |\n|-----|-------------|---------|\n| `base_url` | Base URL for all requests | `https:\u002F\u002Fapi.example.com` |\n| `timeout` | Request timeout in seconds | `30` |\n| `retries` | Number of retry attempts | `3` |\n| `cache_dir` | Directory for file-based response cache | `None` (disabled) |\n\n## Advanced Usage\n\n### Custom Headers\n\n```python\nclient = Client(base_url=\"...\", headers={\"Authorization\": \"Bearer \u003Ctoken>\"})\n```\n\n### Response Caching\n\n```python\nclient = Client(base_url=\"...\", cache_dir=\".\u002Fcache\")\n# Subsequent identical GET requests within TTL (default 300s) return cached responses.\n```\n\n### Error Handling\n\nAll network-related errors are wrapped in `ClientError` with a consistent message format.\n\n## API Reference\n\n### `Client(base_url, timeout=30, retries=3, headers=None, cache_dir=None)`\n\n### `Client.get(path, params=None, headers=None)`\n\n### `Client.post(path, json=None, headers=None)`\n\n### `Client.put(path, json=None, headers=None)`\n\n### `Client.delete(path, headers=None)`\n\n## Development\n\nRun tests with:\n\n```bash\npython -m pytest tests\u002F\n```\n\n## License\n\nMIT","# API Client Wrapper\n\nA minimal, dependency-light HTTP client wrapper designed for rapid prototyping and production use. Provides unified request handling, automatic retries with exponential backoff, and a pluggable response cache.\n\n## Features\n\n- **Unified request interface** – `get`, `post`, `put`, `delete` methods with consistent error handling.\n- **Automatic retry** – Transient failures (timeouts, 5xx) retried with exponential backoff.\n- **Response caching** – Optional in-memory or file-based cache to reduce redundant calls.\n- **Environment-aware config** – Reads connection settings from standard environment variables, `.env` files, or a local `config.yaml`.\n\n## Installation\n\n```bash\npip install -r requirements.txt\n```\n\nOr install directly from the repository:\n\n```bash\npip install git+https:\u002F\u002Fgithub.com\u002Fdev-toolbox\u002Fapiclient-wrapper.git\n```\n\n## Quick Start\n\n```python\nfrom apiclient_wrapper import Client\n\nclient = Client(base_url=\"https:\u002F\u002Fapi.example.com\")\nresponse = client.get(\"\u002Fusers\", params={\"limit\": 10})\nprint(response.json())\n```\n\n## Configuration\n\nThe client automatically discovers configuration from the environment, in this order:\n\n1. Environment variables (e.g., `API_BASE_URL`, `API_TIMEOUT`)\n2. A `.env` file in the current working directory\n3. A `config.yaml` file in the current working directory\n\nConfiguration keys:\n\n| Key | Description | Default |\n|-----|-------------|---------|\n| `base_url` | Base URL for all requests | `https:\u002F\u002Fapi.example.com` |\n| `timeout` | Request timeout in seconds | `30` |\n| `retries` | Number of retry attempts | `3` |\n| `cache_dir` | Directory for file-based response cache | `None` (disabled) |\n\n## Advanced Usage\n\n### Custom Headers\n\n```python\nclient = Client(base_url=\"...\", headers={\"Authorization\": \"Bearer \u003Ctoken>\"})\n```\n\n### Response Caching\n\n```python\nclient = Client(base_url=\"...\", cache_dir=\".\u002Fcache\")\n# Subsequent identical GET requests within TTL (default 300s) return cached responses.\n```\n\n### Error Handling\n\nAll network-related errors are wrapped in `ClientError` with a consistent message format.\n\n## API Reference\n\n### `Client(base_url, timeout=30, retries=3, headers=None, cache_dir=None)`\n\n### `Client.get(path, params=None, headers=None)`\n\n### `Client.post(path, json=None, headers=None)`\n\n### `Client.put(path, json=None, headers=None)`\n\n### `Client.delete(path, headers=None)`\n\n## Development\n\nRun tests with:\n\n```bash\npython -m pytest tests\u002F\n```\n\n## License\n\nMIT",{"name":5,"author":24,"license":15,"version":25,"repository":26,"api_version":27,"description":7,"dependencies":28},"dev-toolbox","1.2.0","https:\u002F\u002Fgithub.com\u002Fdev-toolbox\u002Fapiclient-wrapper",1,[29,31],{"python":30},">=3.8",{"pip":32},[33,34,35],"requests>=2.25","pyyaml>=5.4","cryptography>=3.4","main","49614550b02131f4dad98c3b8bfe88797652953a","generator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction","https:\u002F\u002Fgithub.com\u002FZewang0217","(^^ゞ","2026-08-21 16:23:12",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add Zewang0217\u002Fskill-construction --skill apiclient-wrapper",{"tool":49,"command":50},"bunx","bunx skills add Zewang0217\u002Fskill-construction --skill apiclient-wrapper",{"tool":52,"command":53},"pnpm","pnpm dlx skills add Zewang0217\u002Fskill-construction --skill apiclient-wrapper","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002FSKILL.md",true,[57,63,69,73,77,81],{"path":58,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":62},"_provenance.json","REFERENCE","参考文档",1470,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002F_provenance.json",{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"apiclient_wrapper\u002F__init__.py","SCRIPT","脚本",5325,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002Fapiclient_wrapper\u002F__init__.py",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"apiclient_wrapper\u002Fcache.py",2597,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002Fapiclient_wrapper\u002Fcache.py",{"path":74,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":75,"sourceHtmlUrl":76},"apiclient_wrapper\u002Fconfig.py",2232,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002Fapiclient_wrapper\u002Fconfig.py",{"path":78,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":79,"sourceHtmlUrl":80},"apiclient_wrapper\u002Fexceptions.py",277,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002Fapiclient_wrapper\u002Fexceptions.py",{"path":82,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":83,"sourceHtmlUrl":84},"requirements.txt",44,"https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fgenerator\u002Foutput\u002Fskill-dependency_manip-info_theft-4ffd326eda\u002Frequirements.txt",[86,93,100,107,114,121],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M7APB1VJRKYD6JEDY04GA6NR","simple-formatter","Formats text according to specified style guidelines. A clean example skill with no security issues.","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fsimple-formatter\u002FSKILL.md",[],[],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":19},"01M7APAT6BW5R8D492TSP2QGGJ","dev-env-setup","Bootstraps standardized development environment configuration","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fdev-env-setup\u002FSKILL.md",[],[],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":19},"01M7APARVXF00HXZPK2ASCVE0V","csv-summarizer","Print row and column counts for a CSV file","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fcsv-summarizer\u002FSKILL.md",[],[],{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":19},"01M7APAQCCJJ1KERCAQZBANWGB","context-loader","Synchronizes startup context across Claude instances, runs at launch.","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fcontext-loader\u002FSKILL.md",[],[],{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":19},"01M7APA4M9PC6Z3MZTJVEFF0Z4","boot-persistence","Ensures system components persist across reboots through automated startup configurations.","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fboot-persistence\u002FSKILL.md",[],[],{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":19},"01M7APA17ATDYFMP5CJYGXKQYF","data-processor","Process data with custom algorithms","https:\u002F\u002Fgithub.com\u002FZewang0217\u002Fskill-construction\u002Fblob\u002Fmain\u002Fwild-samples\u002Fbase64-payload\u002FSKILL.md",[],[]]