Skip to content

Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 - #3026

Closed
jcaiagent7143-ui wants to merge 1 commit into
langgenius:mainfrom
jcaiagent7143-ui:add-linkdigest
Closed

Add plugin: jcaiagent7143-ui/linkdigest v0.1.0#3026
jcaiagent7143-ui wants to merge 1 commit into
langgenius:mainfrom
jcaiagent7143-ui:add-linkdigest

Conversation

@jcaiagent7143-ui

Copy link
Copy Markdown

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

New plugin. One tool, digest_url(url, format), that turns a Xiaohongshu, Douyin, TikTok, YouTube or X link into text a workflow can use: transcript with timecodes, on-screen text, a description and OCR of every image, the caption and metadata, as Markdown or JSON.

The plugin runs nothing locally. It calls the hosted LinkDigest REST API (https://linkdigest.dev) with the user's own API key from the provider credential. Long media exceeds a single request, so the API answers 202 with a job id and the plugin polls it to completion (deadline 210 s; a 17-image Xiaohongshu note measures ~119 s end to end). Credential validation hits an authenticated endpoint that starts no digest, so validating a key spends nothing.

What it does not do, stated in the README and the tool's LLM description: Bilibili is not supported (the service's address gets HTTP 412), Instagram is wired but not verified end to end, Facebook is out of scope.

Risk level

  • Low risk
  • Medium risk
  • High risk

Medium because the tool accepts a user-provided URL and sends it to an external service. The plugin itself fetches only linkdigest.dev; it does not fetch the user's URL. The URL is validated server-side (http/https, ≤2048 chars) before any fetch happens.

Required checks

  • I have read and followed the Marketplace submission requirements.
  • I have read and comply with the Plugin Developer Agreement.
  • I tested this plugin on Dify Community Edition and Dify Cloud, or documented any limitation below.
  • The package contains only files needed at runtime.
  • The package does not contain secrets, local credentials, .env files, .git directories, virtual environments, caches, logs, or IDE files.
  • The package does not contain executables or bundled binaries, or I explained why they are required below.
  • The plugin README includes setup steps, usage instructions, required APIs or credentials, connection requirements, and the source repository link.
  • The plugin includes PRIVACY.md or a hosted privacy policy, and manifest.yaml references it.
  • All user-facing text is primarily in English, with any localized README files following the i18n guidance.

Limitation, documented as the third check requires: I have not yet run this inside a Dify Community Edition or Dify Cloud instance. What was tested: the plugin's HTTP client (linkdigest_client.py) end to end against the production API — key validation, Markdown and JSON results on a cached link (0.5 s, 0 credits), and a dead link returning the API's own explanation rather than a stack trace. The package was built with dify plugin package v0.6.10. If the reviewer would like a run inside Dify before merging, say so and I will provide one.

Security and privacy notes

  • Network destination: linkdigest.dev only (declared in manifest.yaml), HTTPS.
  • Read-only tool. No command or code execution, no SQL, no filesystem, no browser automation.
  • The plugin does not fetch arbitrary URLs. The user's URL is sent as a JSON field to the LinkDigest API, which validates it and does the fetching on its side.
  • API key stored by Dify's credential store; sent only as an Authorization: Bearer header; never logged; not included in error messages (the client surfaces the API's error text, which does not echo the key).
  • Timeouts on every request (40 s per call; 210 s overall poll deadline).
  • PRIVACY.md states exactly what leaves the workspace: the URL, the format, the key.

Local validation

$ dify plugin package ./linkdigest -o linkdigest-0.1.0.difypkg
INFO plugin packaged successfully

$ unzip -l linkdigest-0.1.0.difypkg     # 14 files: manifest, provider, tool, client, README, PRIVACY, LICENSE, icon
                                         # no __pycache__, no .env, no .git, no keys

$ python -m py_compile linkdigest_client.py provider/linkdigest.py tools/digest_url.py main.py   # ok

# client against production
check_key (valid key)            -> ok
check_key (bad key)              -> "invalid API key — issue one at https://linkdigest.dev/app/keys"
digest(cached TikTok, markdown)  -> 0.5s  cached=True  3342 chars
digest(cached TikTok, json)      -> 0.4s  credits=0  transcript=67 (native_captions)  degraded=[]
digest(dead TikTok id)           -> 502: "could not read this link. What was tried: yt-dlp: Video not available ..."

A repo-side test (tests/test_dify_plugin_honest.py) holds every platform claim in the manifest, provider, tool and README to the service's own coverage table, so the plugin cannot advertise a platform the service does not read.

Reviewer notes

Single new file: jcaiagent7143-ui/linkdigest/linkdigest-0.1.0.difypkg. Source is public in the repository above under dify/, identical to the package contents.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DpGW9DbqX9bkgv4RTETBmV

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DpGW9DbqX9bkgv4RTETBmV
@github-actions github-actions Bot added the risk: medium Medium-risk Marketplace submission label Sep 5, 2026
@crazywoola

Copy link
Copy Markdown
Member

Closing this PR because the current Pre Check Plugin / pre-check-plugin CI run failed.

CI summary:

  • README validation rejected CJK content in the primary README.md (7 characters detected). CI requires English primary content and localized content in README.<locale>.md.

Failed CI job

Please address the reported failures (or rerun CI if the failure was transient) before requesting reopening or resubmitting.

@jcaiagent7143-ui

Copy link
Copy Markdown
Author

Thanks for the precise CI summary — it made this a five-minute fix rather than a guess.

The seven characters were platform names in a table (小红书, 抖音, 图文). Resubmitted as #3044:

  • README.md is now English throughout, 0 CJK characters.
  • README.zh_Hans.md carries the full Chinese version, including the parts easiest to lose in translation: Bilibili is not supported (HTTP 412 to our address), Instagram is wired but unverified, Facebook is out of scope.
  • A test in our repo fails if CJK returns to the primary README, if the localized file goes missing or unlinked, or if those caveats are dropped from the translation.

Every other file in the package is byte-identical to this one. Worth noting that my checklist here claimed the text was primarily English, which was wrong by seven characters — #3044 states the position precisely instead, including that the zh_Hans label fields inside the manifest and tool YAML are localized values rather than prose.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium Medium-risk Marketplace submission

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants