一键导入
create-new-rich-content-extractor
Public-first workflow for adding rich metadata support, using authenticated extraction only when public sources are insufficient.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Public-first workflow for adding rich metadata support, using authenticated extraction only when public sources are insufficient.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Interview-driven referral catalog CRUD, inbox/MCP referral import, batch planning, and upstream-worthy shared catalog follow-up for OpenLinks.
Help a downstream OpenLinks fork expose its own deployed identity URL and icon across websites, apps, repos, docs, service profiles, or metadata surfaces using the fork's canonical URL and brand assets.
Persist rich-link images and related metadata into the committed OpenLinks cache when links are added or updated.
| name | create-new-rich-content-extractor |
| description | Public-first workflow for adding rich metadata support, using authenticated extraction only when public sources are insufficient. |
Use this skill when OpenLinks is missing rich metadata for a link and you need to decide whether the fix belongs in direct/public enrichment or authenticated extraction.
Do not use this skill for payment/tip-card branding work. Card-shell icons and payment QR badge composition are data-model and shared-icon concerns, not rich-enrichment concerns.
public_direct, public_augmented, or authenticated_required.badge.mode changesFor those cases, update the payment-card data/config plus the shared icon pipeline documented in docs/data-model.md and the CRUD workflows.
titledescriptionprofileDescription when the platform exposes a distinct user-authored bioimageogImagetwitterImageprofileImagehandleRun public-source triage first.
Classify the outcome into exactly one branch.
public_direct
public_augmented
authenticated_required
If the branch is public_direct, stop.
data/policy/rich-authenticated-extractors.json.npm run validate:data
npm run enrich:rich:strict
npm run build
public_augmented, implement public support end-to-end.
description and profileDescription.image -> profileImage by default when profileImage is missing unless the platform is explicitly excluded because image commonly represents preview/banner media.profileImage whenever the public source exposes a true avatar separate from preview media.public_augmented examples: Medium (RSS/feed), Substack (canonical public profile + custom-domain source preservation), X (oEmbed + avatar), Instagram (public page metadata), YouTube (public page metadata).ogImage and twitterImage separately when they are discoverable, even if image intentionally chooses only one render candidate.sourceLabel and UI copy even when the fetch target host differs.public_augmented even when a requested count metric is still unsupported. Do not escalate count-only gaps to authenticated extraction unless public sources were conclusively checked and rejected.src/lib/identity/handle-resolver.tssrc/lib/identity/handle-resolver.test.tsdata/policy/rich-authenticated-extractors.jsondata/cache/rich-authenticated-cache.jsonpublic/cache/rich-authenticated/*data/policy/remote-cache-policy.json:
public_rich_metadata for HTML/source fetches,content_images for remote preview/avatar image hosts localized by bun run images:sync.npm run validate:data
npm run enrich:rich:strict
npm run build
If the branch is authenticated_required, confirm blocker evidence before scaffolding.
data/policy/rich-enrichment-blockers.json.docs/rich-metadata-fetch-blockers.md with UTC-stamped attempts.authenticated_required examples: LinkedIn and Facebook.Scaffold the authenticated extractor only for authenticated_required.
npm run auth:extractor:new -- --id <extractor-id> --domains <domain1,domain2> --summary "<summary>"
Implement the authenticated plugin in scripts/authenticated-extractors/plugins/<extractor-id>.ts.
scripts/authenticated-extractors/auth-flow-runtime.ts) and browser session helper (scripts/authenticated-extractors/browser-session.ts) when possible.eval snippets from dedicated files via scripts/shared/embedded-code-loader.ts.ensureSession with transition monitoring + ask-first action confirmation.extract with metadata quality checks and local asset download.image, profileImage, ogImage, twitterImage.profileImage explicitly so preview and avatar roles stay unambiguous.assets.* entries.data/policy/remote-cache-policy.json under authenticated_asset_images.For both public_augmented and authenticated_required, update handle coverage when applicable.
src/lib/identity/handle-resolver.ts.src/lib/identity/handle-resolver.test.ts for:
metadata.handle override precedence.For authenticated_required, implement mandatory auth-state loop behavior.
loginmfa_challengepost_auth_consentauthenticatedblockedunknownFor authenticated_required, configure links and capture cache.
links[].enrichment.authenticatedExtractor.authenticatedCacheKey.npm run auth:flow:assist -- --extractor <extractor-id> --url <target-url>
- Capture cache:
npm run setup:rich-auth
npm run validate:data
npm run enrich:rich:strict
npm run build
For authenticated_required, also run:
npm run quality:embedded-code
Optional LinkedIn-specific diagnostics:
npm run linkedin:debug:bootstrap
npm run linkedin:debug:login
npm run linkedin:debug:validate
Update docs to match the chosen branch.
docs/create-new-rich-content-extractor.mddocs/authenticated-rich-extractors.md only when authenticated workflow guidance changes.docs/rich-metadata-fetch-blockers.md only for authenticated_required or when blocker evidence changes.Share back (recommended).
These prompts apply only to the authenticated_required branch.
When the flow detects an actionable consent screen, use this confirmation format:
Action candidate '<label>' detected (risk=<risk>, confidence=<0-1>). Execute now? [y/N]When the flow reaches an unknown screen:
Unknown state detected (<state>). Continue waiting? [y=continue / n=abort]Do not auto-click consent actions without explicit confirmation.
This log format applies only when the chosen branch is authenticated_required.
For each meaningful auth-run update in docs/rich-metadata-fetch-blockers.md, record:
public_direct
public_augmented
authenticated_required
authenticated_cache,scripts/embedded-code/browser/* files,scripts/authenticated-extractors/plugins/*.template.ts with explicit replacement tokens.metadata.handle override precedence remains intact.Stop and escalate if any occur:
docs/authenticated-rich-extractors.mddocs/create-new-rich-content-extractor.mddocs/rich-metadata-fetch-blockers.md