[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BVTKSSES2AYNVS7TBVMMMR":3,"skill-same:01M7BVTKSSES2AYNVS7TBVMMMR":45},{"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":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7BVTKSSES2AYNVS7TBVMMMR","azure-bgp",null,"Analyze and resolve BGP oscillation and BGP route leaks in Azure Virtual WAN–style hub-and-spoke topologies. Detect preference cycles, identify valley-free violations, and classify candidate solutions using principled rules — never hand-coded per-string verdicts.","linyouxue\u002Fskill-repair-benchmark","linyouxue","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F216151464?v=4","01M7BJEVCXKD74KH6FG9CBVSQB","林宥学","01M7BJEVE02NP217V93BKZFC0J",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FMMG2Skill-Opus47-Gold15-20260924\u002Ftasks\u002Fazure-bgp-oscillation-route-leak\u002Frepaired_run\u002Finputs\u002Fskills\u002Fazure-bgp\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: azure-bgp\ndescription: Analyze and resolve BGP oscillation and BGP route leaks in Azure Virtual\n  WAN–style hub-and-spoke topologies. Detect preference cycles, identify valley-free\n  violations, and classify candidate solutions using principled rules — never hand-coded\n  per-string verdicts.\n---\n\n# Azure BGP Oscillation & Route Leak Analysis\nAnalyze and resolve BGP oscillation and BGP route leaks in Azure Virtual WAN–style hub-and-spoke topologies (and similar cloud-managed BGP environments).\nThis skill trains an agent to:\n- Detect preference cycles that cause BGP oscillation\n- Identify valley-free violations that constitute route leaks\n- Classify each candidate solution against the two task rules:\n  1. **Oscillation resolved** iff the solution breaks the routing preference cycle in the topology\n  2. **Route leak resolved** iff the solution stops hub1\u002Fhub2 from advertising routes to hub2\u002Fhub1 via Virtual WAN\n- Reject prohibited fixes (disabling BGP, shutting down peering, removing connectivity)\n## When to Use This Skill\nUse this skill when a task involves:\n- Azure Virtual WAN, hub-and-spoke BGP, ExpressRoute, or VPN gateways\n- Repeated route flapping or unstable path selection\n- Unexpected transit, leaked prefixes, or valley-free violations\n- Choosing between routing intent, UDRs, or BGP policy fixes\n- Evaluating whether a proposed \"fix\" is valid in Azure\n## Core Invariants (Must Never Be Violated)\n- ❌ BGP sessions between hubs **cannot** be administratively disabled by customers (owned by Azure)\n- ❌ Peering connections **cannot** be shut down as a fix (breaks all other traffic)\n- ❌ Removing connectivity is **not** a valid solution\n- ✅ Problems **must** be fixed using routing policy, not topology destruction\n**Any solution violating these rules is invalid — mark both `oscillation_resolved` and `route_leak_resolved` as false for such solutions.**\n## Expected Inputs\n| File | Meaning |\n|------|---------|\n| `topology.json` | Directed BGP adjacency graph |\n| `relationships.json` | Economic relationship per edge (provider, customer, peer) |\n| `preferences.json` | Per-ASN preferred next hop (may cause oscillation) |\n| `local_pref.json` | Relationship type weight (used to reason about which relation wins) |\n| `route.json` | Prefix and origin ASN advertised from vnet |\n| `route_events.json` \u002F `route_leaks.json` | Observed route propagation events (used to detect valley-free violations) |\n| `possible_solutions.json` | Candidate fixes to classify |\nLoad and actually use each of these — do not leave `relationships.json`, `topology.json`, `local_pref.json`, or `route.json` inspected-but-unused. Cross-check the detected leak against `relationships.json` (e.g., confirm source_type of edge 65001→65002 and destination_type of edge 65002↔65003).\n## Reasoning Workflow (Executable Checklist)\n### Step 1 — Sanity-Check Inputs\n- Every ASN referenced must exist in `topology.json`\n- Relationship symmetry must hold:\n  - `provider(A→B)` ⇔ `customer(B→A)`\n  - `peer` must be symmetric\n### Step 2 — Detect BGP Oscillation (Preference Cycle)\nBuild a directed graph `ASN → preferred next-hop ASN` from `preferences.json`. Any cycle (including 2-node) ⇒ oscillation. Emit the cycle as `oscillation_cycle` and its members as `affected_ases`.\n```python\npref = {asn: prefer_via_asn, ...}\ndef find_cycle(start):\n    path, seen, cur = [], {}, start\n    while cur in pref:\n        if cur in seen:\n            return path[seen[cur]:]\n        seen[cur] = len(path); path.append(cur); cur = pref[cur]\n    return None\n```\n### Step 3 — Detect BGP Route Leak (Valley-Free Violation)\nValley-free rule:\n| Learned from | May export to |\n|--------------|---------------|\n| Customer | Anyone |\n| Peer | Customers only |\n| Provider | Customers only |\nA leak exists when a route learned from a **provider** or **peer** is exported to a **provider** or **peer**. Validate `source_type` \u002F `destination_type` via `relationships.json` rather than trusting the event blob alone.\n### Step 4 — Classify Each Candidate Solution by Rule (Not by String)\n**Do not hand-author a per-string verdict table.** For each entry in `possible_solutions.json`, apply the two rules mechanically:\n- `oscillation_resolved = True` **iff** the action removes at least one edge of the preference cycle detected in Step 2, or forces forwarding independent of the BGP decision so the cycle is inert. Concretely this requires one of:\n  1. Overriding BGP path selection above BGP (Virtual WAN routing intent) — cycle becomes inert.\n  2. Filtering\u002Fblocking the *export* of the cycled prefix on one hub so the opposite hub no longer receives it (an edge of the pref graph disappears).\n  3. Changing local-preference \u002F community handling on one hub such that its `pref[hub]` no longer points at the other hub in the cycle.\n  4. A UDR whose next-hop replaces the BGP-chosen next-hop for the cycled prefix on at least one hub.\n- `route_leak_resolved = True` **iff** the action stops the *leaker* (hub1 or hub2) from *advertising* the provider\u002Fpeer-learned route to the other hub via Virtual WAN. Concretely this requires one of:\n  1. Virtual WAN routing intent that suppresses hub-to-hub transit of these routes.\n  2. An **egress \u002F export** filter, community (`no-export`, `no-advertise`), or route-map on the leaker that drops the prefix before it is announced to Virtual WAN \u002F the other hub.\n  3. Disabling the specific advertisement \u002F re-origination of provider-learned routes toward the peer hub.\nRules of thumb the agent must apply when classifying:\n- ❌ **Ingress filtering on the receiver hub does NOT resolve the leak** — the leaker still advertises. It may reduce impact but fails the \"stop hub advertising\" rule.\n- ❌ **`no-export`\u002Fcommunity\u002Fexport-block that only affects announcement does NOT by itself resolve oscillation** — the local-pref cycle on hub1\u002Fhub2 is unchanged unless the export block also removes the prefix from the peer hub's RIB (in which case the pref edge disappears and it *does* resolve oscillation). Reason about whether the export target is the other hub in the cycle before deciding.\n- ❌ **UDR only resolves the leak if it prevents the leaker from advertising**; a UDR that merely redirects next-hop on the receiver stabilizes forwarding but does not stop the advertisement, so `route_leak_resolved=False`.\n- ❌ **Timer tuning, dampening, keepalive\u002Fholdtime changes, gateway restarts, session resets** resolve neither.\n- ❌ **Disabling BGP, shutting peering, removing connectivity** are prohibited invariants ⇒ both False.\n- ✅ **Virtual WAN routing intent** typically resolves both.\n- ✅ **Export filter \u002F route-map \u002F community on the leaker hub toward the other hub** resolves the leak; it also resolves oscillation *only when* the filtered prefix is the one driving the pref cycle.\nFor every candidate, write down which of the concrete mechanisms above it matches, and derive the two booleans from that — do not intuit them from the sentence.\n## Fix Selection Logic (Ranked)\n### Tier 1 — Virtual WAN Routing Intent\nOperates above BGP. Resolves both oscillation and route leaks by making forwarding deterministic and suppressing hub-to-hub transit of leaked routes.\n### Tier 2 — Export \u002F Route Policy on the Leaker\nEgress filters, communities (`no-export`), or route-maps applied on the *advertising* hub. Resolves the leak. Resolves oscillation *iff* the removed export is the edge feeding the pref cycle.\n### Tier 3 — User Defined Routes (UDR)\nData-plane override. Resolves oscillation by pinning next-hop. Resolves the leak *only if* the UDR is placed such that the leaking hub no longer originates the advertisement — otherwise leak persists at the control plane.\n## Prohibited Fixes (Must Be Rejected)\n| Proposed Fix | Reason |\n|--------------|--------|\n| Disable BGP | Not customer-controllable |\n| Disable \u002F shutdown peering | Breaks all other traffic; not allowed |\n| Shutdown gateways | Breaks SLA \u002F shared control plane |\n| Restart devices \u002F reset sessions | Resets symptoms only |\n| Timer \u002F keepalive \u002F holdtime tuning | Does not break the pref cycle or stop advertisement |\n## Output Expectations\nProduce `\u002Fapp\u002Foutput\u002Foscillation_report.json` with:\n- `oscillation_detected`, `oscillation_cycle`, `affected_ases` from Step 2\n- `route_leak_detected`, `route_leaks[]` from Step 3, each with `leaker_as`, `source_as`, `destination_as`, `source_type`, `destination_type`\n- `solution_results`: one entry per solution string in `possible_solutions.json`, with `oscillation_resolved` and `route_leak_resolved` derived by Step 4's rules (not hand-coded)\n## References\n- RFC 4271 — BGP-4\n- Gao–Rexford model — Valley-free routing economics\n","# Azure BGP Oscillation & Route Leak Analysis\nAnalyze and resolve BGP oscillation and BGP route leaks in Azure Virtual WAN–style hub-and-spoke topologies (and similar cloud-managed BGP environments).\nThis skill trains an agent to:\n- Detect preference cycles that cause BGP oscillation\n- Identify valley-free violations that constitute route leaks\n- Classify each candidate solution against the two task rules:\n  1. **Oscillation resolved** iff the solution breaks the routing preference cycle in the topology\n  2. **Route leak resolved** iff the solution stops hub1\u002Fhub2 from advertising routes to hub2\u002Fhub1 via Virtual WAN\n- Reject prohibited fixes (disabling BGP, shutting down peering, removing connectivity)\n## When to Use This Skill\nUse this skill when a task involves:\n- Azure Virtual WAN, hub-and-spoke BGP, ExpressRoute, or VPN gateways\n- Repeated route flapping or unstable path selection\n- Unexpected transit, leaked prefixes, or valley-free violations\n- Choosing between routing intent, UDRs, or BGP policy fixes\n- Evaluating whether a proposed \"fix\" is valid in Azure\n## Core Invariants (Must Never Be Violated)\n- ❌ BGP sessions between hubs **cannot** be administratively disabled by customers (owned by Azure)\n- ❌ Peering connections **cannot** be shut down as a fix (breaks all other traffic)\n- ❌ Removing connectivity is **not** a valid solution\n- ✅ Problems **must** be fixed using routing policy, not topology destruction\n**Any solution violating these rules is invalid — mark both `oscillation_resolved` and `route_leak_resolved` as false for such solutions.**\n## Expected Inputs\n| File | Meaning |\n|------|---------|\n| `topology.json` | Directed BGP adjacency graph |\n| `relationships.json` | Economic relationship per edge (provider, customer, peer) |\n| `preferences.json` | Per-ASN preferred next hop (may cause oscillation) |\n| `local_pref.json` | Relationship type weight (used to reason about which relation wins) |\n| `route.json` | Prefix and origin ASN advertised from vnet |\n| `route_events.json` \u002F `route_leaks.json` | Observed route propagation events (used to detect valley-free violations) |\n| `possible_solutions.json` | Candidate fixes to classify |\nLoad and actually use each of these — do not leave `relationships.json`, `topology.json`, `local_pref.json`, or `route.json` inspected-but-unused. Cross-check the detected leak against `relationships.json` (e.g., confirm source_type of edge 65001→65002 and destination_type of edge 65002↔65003).\n## Reasoning Workflow (Executable Checklist)\n### Step 1 — Sanity-Check Inputs\n- Every ASN referenced must exist in `topology.json`\n- Relationship symmetry must hold:\n  - `provider(A→B)` ⇔ `customer(B→A)`\n  - `peer` must be symmetric\n### Step 2 — Detect BGP Oscillation (Preference Cycle)\nBuild a directed graph `ASN → preferred next-hop ASN` from `preferences.json`. Any cycle (including 2-node) ⇒ oscillation. Emit the cycle as `oscillation_cycle` and its members as `affected_ases`.\n```python\npref = {asn: prefer_via_asn, ...}\ndef find_cycle(start):\n    path, seen, cur = [], {}, start\n    while cur in pref:\n        if cur in seen:\n            return path[seen[cur]:]\n        seen[cur] = len(path); path.append(cur); cur = pref[cur]\n    return None\n```\n### Step 3 — Detect BGP Route Leak (Valley-Free Violation)\nValley-free rule:\n| Learned from | May export to |\n|--------------|---------------|\n| Customer | Anyone |\n| Peer | Customers only |\n| Provider | Customers only |\nA leak exists when a route learned from a **provider** or **peer** is exported to a **provider** or **peer**. Validate `source_type` \u002F `destination_type` via `relationships.json` rather than trusting the event blob alone.\n### Step 4 — Classify Each Candidate Solution by Rule (Not by String)\n**Do not hand-author a per-string verdict table.** For each entry in `possible_solutions.json`, apply the two rules mechanically:\n- `oscillation_resolved = True` **iff** the action removes at least one edge of the preference cycle detected in Step 2, or forces forwarding independent of the BGP decision so the cycle is inert. Concretely this requires one of:\n  1. Overriding BGP path selection above BGP (Virtual WAN routing intent) — cycle becomes inert.\n  2. Filtering\u002Fblocking the *export* of the cycled prefix on one hub so the opposite hub no longer receives it (an edge of the pref graph disappears).\n  3. Changing local-preference \u002F community handling on one hub such that its `pref[hub]` no longer points at the other hub in the cycle.\n  4. A UDR whose next-hop replaces the BGP-chosen next-hop for the cycled prefix on at least one hub.\n- `route_leak_resolved = True` **iff** the action stops the *leaker* (hub1 or hub2) from *advertising* the provider\u002Fpeer-learned route to the other hub via Virtual WAN. Concretely this requires one of:\n  1. Virtual WAN routing intent that suppresses hub-to-hub transit of these routes.\n  2. An **egress \u002F export** filter, community (`no-export`, `no-advertise`), or route-map on the leaker that drops the prefix before it is announced to Virtual WAN \u002F the other hub.\n  3. Disabling the specific advertisement \u002F re-origination of provider-learned routes toward the peer hub.\nRules of thumb the agent must apply when classifying:\n- ❌ **Ingress filtering on the receiver hub does NOT resolve the leak** — the leaker still advertises. It may reduce impact but fails the \"stop hub advertising\" rule.\n- ❌ **`no-export`\u002Fcommunity\u002Fexport-block that only affects announcement does NOT by itself resolve oscillation** — the local-pref cycle on hub1\u002Fhub2 is unchanged unless the export block also removes the prefix from the peer hub's RIB (in which case the pref edge disappears and it *does* resolve oscillation). Reason about whether the export target is the other hub in the cycle before deciding.\n- ❌ **UDR only resolves the leak if it prevents the leaker from advertising**; a UDR that merely redirects next-hop on the receiver stabilizes forwarding but does not stop the advertisement, so `route_leak_resolved=False`.\n- ❌ **Timer tuning, dampening, keepalive\u002Fholdtime changes, gateway restarts, session resets** resolve neither.\n- ❌ **Disabling BGP, shutting peering, removing connectivity** are prohibited invariants ⇒ both False.\n- ✅ **Virtual WAN routing intent** typically resolves both.\n- ✅ **Export filter \u002F route-map \u002F community on the leaker hub toward the other hub** resolves the leak; it also resolves oscillation *only when* the filtered prefix is the one driving the pref cycle.\nFor every candidate, write down which of the concrete mechanisms above it matches, and derive the two booleans from that — do not intuit them from the sentence.\n## Fix Selection Logic (Ranked)\n### Tier 1 — Virtual WAN Routing Intent\nOperates above BGP. Resolves both oscillation and route leaks by making forwarding deterministic and suppressing hub-to-hub transit of leaked routes.\n### Tier 2 — Export \u002F Route Policy on the Leaker\nEgress filters, communities (`no-export`), or route-maps applied on the *advertising* hub. Resolves the leak. Resolves oscillation *iff* the removed export is the edge feeding the pref cycle.\n### Tier 3 — User Defined Routes (UDR)\nData-plane override. Resolves oscillation by pinning next-hop. Resolves the leak *only if* the UDR is placed such that the leaking hub no longer originates the advertisement — otherwise leak persists at the control plane.\n## Prohibited Fixes (Must Be Rejected)\n| Proposed Fix | Reason |\n|--------------|--------|\n| Disable BGP | Not customer-controllable |\n| Disable \u002F shutdown peering | Breaks all other traffic; not allowed |\n| Shutdown gateways | Breaks SLA \u002F shared control plane |\n| Restart devices \u002F reset sessions | Resets symptoms only |\n| Timer \u002F keepalive \u002F holdtime tuning | Does not break the pref cycle or stop advertisement |\n## Output Expectations\nProduce `\u002Fapp\u002Foutput\u002Foscillation_report.json` with:\n- `oscillation_detected`, `oscillation_cycle`, `affected_ases` from Step 2\n- `route_leak_detected`, `route_leaks[]` from Step 3, each with `leaker_as`, `source_as`, `destination_as`, `source_type`, `destination_type`\n- `solution_results`: one entry per solution string in `possible_solutions.json`, with `oscillation_resolved` and `route_leak_resolved` derived by Step 4's rules (not hand-coded)\n## References\n- RFC 4271 — BGP-4\n- Gao–Rexford model — Valley-free routing economics\n",{"name":5,"description":7},"main","cdcb6d230f3b15c3c33f8a2bdd16439f43602cbe","evaluation\u002Fresults\u002FMMG2Skill-Opus47-Gold15-20260924\u002Ftasks\u002Fazure-bgp-oscillation-route-leak\u002Frepaired_run\u002Finputs\u002Fskills\u002Fazure-bgp",1,"https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark","https:\u002F\u002Fgithub.com\u002Flinyouxue","2026-11-14 20:28:35",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add linyouxue\u002Fskill-repair-benchmark --skill azure-bgp",{"tool":37,"command":38},"bunx","bunx skills add linyouxue\u002Fskill-repair-benchmark --skill azure-bgp",{"tool":40,"command":41},"pnpm","pnpm dlx skills add linyouxue\u002Fskill-repair-benchmark --skill azure-bgp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FMMG2Skill-Opus47-Gold15-20260924\u002Ftasks\u002Fazure-bgp-oscillation-route-leak\u002Frepaired_run\u002Finputs\u002Fskills\u002Fazure-bgp\u002FSKILL.md",true,[],[46,53,60,67,72,77],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7E1HGVRY73NBJ022CJG13X6","video-frame-extraction","Extract frames from video files and save them as images using OpenCV","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7E1HAG5R7CJ9C8NYJS771MB","openai-vision","Analyze images and multi-frame sequences using OpenAI GPT vision models","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7E1H7DADKB6QBWKC2KQ63SZ","image-ocr","Extract text content from images using Tesseract OCR via Python, including structured field extraction from receipts and forms","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[],{"skillNo":68,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7E1H0WBNT43TENGQY7AVZHD","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":73,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7E1GTC7D4N4Q2EF03875J9E","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":78,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E1GQ92CWFMGH53KSSE4WER","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[]]