{"id":66535,"plugin_id":"plugin_asdk_app_6985e5ad62908191ad013449cab57d02","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T12:17:09.825Z","digest":"99cadd44698459ba81abcdf3efa09e74ce90689038c2a6d2036db007b6c375f8","against":null,"payload":{"description":"Clean a Links collection when the user asks to deduplicate links, fix inconsistent labels, identify malformed URLs, or prepare a collection for export. Preserve meaningful URL variants and annotations. Use for collection cleanup, not pasted bookmark import, reading prioritization, or automatic broken-link monitoring.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":249}],"name":"clean-link-collection","skill_md_contents":"---\nname: clean-link-collection\ndescription: \"Clean a Links collection when the user asks to deduplicate links, fix inconsistent labels, identify malformed URLs, or prepare a collection for export. Preserve meaningful URL variants and annotations. Use for collection cleanup, not pasted bookmark import, reading prioritization, or automatic broken-link monitoring.\"\n---\n\n# Clean Link Collection\n\nTurn an existing collection into a consistent, usable collection and explain\nthe changes.\n\n## Inputs\n\n- Use links supplied by the user, gathered from the conversation, or present in\n  the latest model-visible `modelContent.links`.\n- Obtain the cleanup goal and any links or annotations the user wants retained.\n- If the user refers to widget edits that are unavailable, request the updated\n  links. Do not substitute the original tool output for unseen edits.\n\n## Workflow\n\n1. Inspect the supplied entries and count the starting items. Separate usable\n   absolute HTTP(S) URLs from malformed or unsupported values. Trim surrounding\n   whitespace, but do not guess a replacement URL or turn a domain into a\n   verified destination.\n2. Detect repeated URL strings after trimming. Merge only redundant copies;\n   retain materially different annotations or combine them without losing their\n   meaning. Preserve deliberate duplicates and report unresolved ambiguity.\n3. Preserve paths, query parameters, fragments, and URL variants. Do not strip\n   tracking parameters, change HTTP to HTTPS, or infer canonical destinations\n   unless the user requests that change and its validity is established.\n4. Make labels consistent using supplied context. Preserve useful titles and\n   descriptions. Use a hostname or URL as a fallback title and an empty\n   description when the source gives no basis for a factual summary.\n5. Preserve the available order unless the user requests another arrangement.\n   Report malformed entries and uncertain repairs separately. Do not call a\n   syntactically valid URL live or accessible without checking it through an\n   available browsing tool.\n6. Review the result for accidental omissions, lost annotations, and unsupported\n   claims. Publish the usable collection and report the initial and final\n   counts, merges, label changes, and entries needing attention.\n\n## Publish with Links\n\nCall the registered `links` tool once with the chosen ordered entries, each\ncontaining string `url`, `title`, and `description` fields, and an optional\nbrief `reason`. Consume its `{ links }` response as an echo of the supplied\ncollection, not evidence that the pages were fetched or repaired.\n\nDescribe the result as a new collection. Do not claim to change the earlier\nwidget, recover private pin state, or transfer undo history. Let the user review\nand edit the cards, then use Share to copy plain text, Markdown, or bookmark\nHTML. Do not claim clipboard success on the user's behalf.\n\nRespect text-only requests and tool or widget prohibitions by returning the\ncleanup result in text. If no usable links remain, report the unresolved entries\nwithout publishing an empty collection.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}