0.2.1
Directory-template runs with sonar-deep-research were quietly discarding ~99% of every response — the streaming reader was taking the wrong field. 0.2.1 fixes that, keeps citations even when a long research stream drops mid-flight, adds a per-run model picker to the run dialog, and rebuilds the toolkit-profile template so the model searches the product's real name and triages SEO slop instead of citing it.
Why care?
If you generate research notes with Perplexed's directory templates — the "Apply directory template to current file" workflow — 0.2.1 is the release where the deep-research path actually works.
sonar-deep-research runs now keep their output. Perplexity's deep-research model does all its work server-side, then delivers the entire finished document — often 10,000+ characters — in the first event of its streaming response, in a field the plugin wasn't reading. The reader took delta.content (correct for the lighter sonar models, which stream token-by-token); on a deep-research response that field holds only a ~75-character tail fragment of a 10,000-character report. The other 99% arrived on the wire and was thrown away. toolkit-profile shipped with sonar-deep-research as its default model — so it was the default that was broken. Fixed.
Citations survive a dropped connection. Deep research holds a stream open for minutes; a WiFi roam or idle socket mid-stream used to discard everything, including the citations deep research delivers up front. A cut-off run now keeps whatever content and sources arrived, writes the citations footer anyway, and tells you it was truncated.
You pick the model when you run. "Apply directory template" now opens a run dialog with a model dropdown — and the loading toast finally names the model actually running, instead of a hardcoded "deep research" string.
What's new
Deep-research streaming — read the snapshot, not the fragment
Both streaming paths now treat Perplexity's cumulative message.content snapshot as the source of truth and append only the new tail.
| Model | How it streams | Old reader | 0.2.1 reader |
|---|---|---|---|
sonar, sonar-pro |
Token-by-token deltas | Worked | Works |
sonar-deep-research |
Whole document in event 1, then tiny deltas | ~75 of ~10,234 chars | Full document |
Citations that survive a timeout
A dropped or timed-out stream no longer discards the run. The runner returns its partial content and the sources it already received, writes the citations footer, and shows a "stream cut off — saved partial content with N sources, re-run to complete" notice. The deep-research idle timeout was lengthened (90s → 270s) since deep research legitimately holds the socket silent while it researches.
A model picker in the run dialog
"Apply directory template to current file" opens a dialog with a template dropdown and a model dropdown — sonar-pro, sonar-reasoning-pro, sonar, sonar-reasoning, sonar-deep-research. The model defaults to the template's cft model: and overrides it for that run only. The cf_last_run_model frontmatter stamp records the model that actually ran.
Domain scoping — cf_search_domains
New search_domain_filter support: a cf_search_domains: list in a target file's frontmatter (entity-specific) or a search-domains: key in a template's cft block (generic). Plain entries allowlist, a leading - denylists, capped at 10. Job boards (Indeed, Glassdoor, ZipRecruiter, USAJobs) are denied automatically — a job listing is never a product source. Allowlisting is a last resort for collision-heavy names, not the everyday workflow.
The toolkit-profile template, rebuilt
The shipped toolkit-profile template's system prompt was overhauled: it anchors the entity on its real name ({{basename}}) instead of the scraped marketing tagline; it tells the model to triage source quality — editorial authority over SEO ranking, judge each page on its merits — rather than trusting or hard-banning by domain; it adds a hard "search, don't recall" instruction and per-section length ceilings. Default model is now sonar-pro, with sonar-deep-research one dialog click away.
Longer request timeout
The directory-template request timeout default moved 5 minutes → 10, so a sonar-deep-research run has room to finish.
Verify the release assets
Every release asset is signed via GitHub's artifact attestation system. Before manual install, verify provenance:
gh attestation verify main.js --repo lossless-group/perplexed-plugin
gh attestation verify manifest.json --repo lossless-group/perplexed-plugin
gh attestation verify styles.css --repo lossless-group/perplexed-pluginExit code 0 means the file came out of a legitimate build of the source repo.
The Lossless Group plugin family
| Plugin | What it does |
|---|---|
| Cite Wide | Stable hex-identifier citations + URL-based dedupe + LLM-paste research conversion |
| Image Gin | Recraft + Ideogram image generation, Magnific stock search, ImageKit CDN, drag-gate |
| Perplexed (this release) | Source-cited research from Perplexity, Claude, Gemini, Perplexica, or LM Studio + per-directory templates |
| Metafetch | Pull OpenGraph metadata into note frontmatter via OpenGraph.io or Microlink |
If Perplexed saves you time, buy us a coffee. The plugins are free; the coffee keeps the next one coming.
Full release narrative
Marketing-grade narrative with the deeper context, the full eight-file changeset, and what's next: changelog/releases/0.2.1.md.