Skip to content

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

Merged
crazywoola merged 4 commits into
langgenius:mainfrom
jcaiagent7143-ui:fix-linkdigest-readme-locale
Sep 12, 2026
Merged

Add plugin: jcaiagent7143-ui/linkdigest v0.1.0#3044
crazywoola merged 4 commits into
langgenius:mainfrom
jcaiagent7143-ui:fix-linkdigest-readme-locale

Conversation

@jcaiagent7143-ui

@jcaiagent7143-ui jcaiagent7143-ui commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

New plugin. One tool, digest_url(url, format), that turns a Xiaohongshu (RedNote), 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 RedNote note measures about 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 in the tool's LLM-facing description: Bilibili is not supported (the service's address receives HTTP 412), Instagram is wired but not verified end to end, Facebook is out of scope.

Relative to #3026, which was closed because the pre-check found seven Chinese characters in the primary README.md:

  • Those characters were three platform names inside a table. README.md is now English throughout and contains zero Chinese characters.
  • README.zh_Hans.md added, carrying the full Chinese version, including the parts that are easiest to lose in a translation: the Bilibili refusal, the Instagram caveat, and the Facebook exclusion.
  • The primary README links to the localized one.
  • A test in the source repository (tests/test_dify_readme_locale.py) fails if Chinese characters return to the primary README, if the localized file goes missing or stops being linked, or if those three caveats are dropped from the translation. It was verified to fail against the exact content Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 #3026 was closed for.

Every other file in the package is byte-identical to #3026.

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 characters maximum) 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.

Stated precisely, because my checklist on #3026 claimed this and was wrong: README.md is 100% English, enforced by a test. Chinese prose lives in README.zh_Hans.md. The zh_Hans values inside manifest.yaml, provider/linkdigest.yaml and tools/digest_url.yaml are localized label and description fields keyed by locale, which is what those fields exist for. I am flagging them explicitly rather than letting the checkbox imply the package contains no Chinese text anywhere.

Limitation, documented as the third check requires: I have not run this inside a Dify Community Edition or Dify Cloud instance. What was tested is in Local validation below. 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), over HTTPS.
  • Read-only tool. No command execution, no code execution, no SQL, no filesystem access, no browser automation, no proxying or crawling.
  • 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 performs the fetch on its side.
  • Personal data: the plugin sends the URL, the requested format, and the API key. Nothing else leaves the workspace. PRIVACY.md states this.
  • API key is stored by Dify's credential store, sent only as an Authorization: Bearer header, never logged, and not echoed in error messages.
  • Timeouts on every request: 40 s per call, 210 s overall poll deadline.

Local validation

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

$ unzip -l linkdigest-0.1.0.difypkg
15 files: manifest.yaml, provider/, tools/, linkdigest_client.py, main.py,
README.md, README.zh_Hans.md, PRIVACY.md, LICENSE, _assets/icon.png
no __pycache__, no .env, no .git, no virtualenv, no keys

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

$ python - <<'EOF'   # Chinese-character scan of the packaged READMEs
README.md            : 0
README.zh_Hans.md    : present, localized
EOF

# client against the production API
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 ..."

$ pytest tests/test_dify_plugin_honest.py tests/test_dify_readme_locale.py -q
7 passed

tests/test_dify_plugin_honest.py holds every platform claim in the manifest, provider, tool and both READMEs to the service's own coverage table, so the plugin cannot advertise a platform the service does not read.

Reviewer notes

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

Resubmission of #3026. Apologies for the round trip on the section headings: I retitled "What changed" and "Local validation" in the previous body, which is why the checker reported them missing. They are verbatim now.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DpGW9DbqX9bkgv4RTETBmV

…ans.md

The pre-check rejected 7 CJK characters in the primary README. Those were
platform names in a table; the prose is now English-only and the full Chinese
version lives in README.zh_Hans.md, including the Bilibili 412 refusal and the
Instagram caveat.
@github-actions github-actions Bot added the risk: medium Medium-risk Marketplace submission label Sep 8, 2026
@crazywoola

Copy link
Copy Markdown
Member

PR body is missing the 'What changed' section
PR body is missing the 'Local validation' section
PR title/body primary content must be English (found 7 CJK characters)

@jcaiagent7143-ui jcaiagent7143-ui changed the title Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 (resubmit of #3026, README locale fixed) Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 Sep 10, 2026
@jcaiagent7143-ui

Copy link
Copy Markdown
Contributor Author

Thanks — all three were mine, and all three are fixed in the body above.

  1. Missing 'What changed' — I had retitled it "What changed since Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 #3026". Verbatim now.
  2. Missing 'Local validation' — I had renamed it "Package verification". Verbatim now.
  3. 7 Chinese characters in the body — with some irony, those were the same seven characters Add plugin: jcaiagent7143-ui/linkdigest v0.1.0 #3026 was closed for: I quoted the offending platform names while explaining that I had removed them from the README. The body now describes them instead of printing them, and I verified 0 Chinese characters programmatically before pushing this edit.

The package itself is unchanged and was never the problem — README.md has been at zero Chinese characters since the resubmit, with the full Chinese version in README.zh_Hans.md.

Lesson taken: the checker matches section headings literally, so I should have copied the template rather than improving on it.

The failing run's only blocking error was pr_body_errors.txt; every package
check passed. The body now uses the template headings verbatim and contains no
CJK. No file changes — this commit exists only to fire the synchronize trigger.
The 2026-09-11 run failed in 'Wait for System Dependencies' after the 10-minute
step timeout, before reaching any plugin check. No file changes.
@jcaiagent7143-ui

Copy link
Copy Markdown
Contributor Author

Heads-up on the red check: the 2026-09-11 run did not fail on the plugin.

It died in Wait for System Dependencies, which hit the 10-minute step timeout waiting on the background apt install:

##[error]The action 'Wait for System Dependencies' has timed out after 10 minutes.

It never reached the package checks or the PR-body check, so nothing in this submission was actually evaluated. Taking your note about transient failures at face value, I have pushed an empty commit (no file changes) to fire synchronize and re-run it. Happy to stop doing that and wait for a manual re-run instead if you would prefer — just say so.

@crazywoola crazywoola closed this Sep 11, 2026
@crazywoola crazywoola reopened this Sep 11, 2026
@jcaiagent7143-ui

Copy link
Copy Markdown
Contributor Author

It happened again on the re-run, same step, same 10-minute timeout:

##[error]The action 'Wait for System Dependencies' has timed out after 10 minutes.

Both of this branch's runs today died there before reaching any plugin check, so the submission still has not been evaluated. Looking at the last 20 runs of this workflow, roughly half are failing and other branches hit it too, so this reads as runner flakiness rather than anything specific to this PR.

I have stopped pushing empty commits — two is enough to establish it is not transient in the way a single retry fixes, and I would rather not add churn to your branch list. Please re-run it whenever your runners are healthy and I will respond to whatever the checks actually say.

Nothing about the package or the PR body has changed since the last edit: README.md is English-only with the Chinese in README.zh_Hans.md, and the body uses the template headings verbatim.

@crazywoola crazywoola closed this Sep 11, 2026
@crazywoola crazywoola reopened this Sep 11, 2026
@lin-snow
lin-snow marked this pull request as draft September 11, 2026 10:32
@lin-snow
lin-snow marked this pull request as ready for review September 11, 2026 10:32
@lin-snow
lin-snow marked this pull request as draft September 11, 2026 11:00
@lin-snow
lin-snow marked this pull request as ready for review September 11, 2026 11:00
@lin-snow
lin-snow requested a review from crazywoola September 11, 2026 11:50
@crazywoola
crazywoola merged commit a12dcc3 into langgenius:main Sep 12, 2026
2 checks passed
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.

3 participants