Commit Graph

8769 Commits

Author SHA1 Message Date
github-actions[bot] a5573cdcac style: auto format 2026-06-08 16:09:35 +00:00
dependabot[bot] 07834413f5
chore(deps-dev): bump eslint-plugin-unicorn from 64.0.0 to 65.0.0 (#22219)
* chore(deps-dev): bump eslint-plugin-unicorn from 64.0.0 to 65.0.0

Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 64.0.0 to 65.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v64.0.0...v65.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-unicorn
  dependency-version: 65.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: no-array-from-fill

* fix: unicorn-js/no-duplicate-set-values

* fix: no-this-outside-of-class

* fix: no-unnecessary-nested-ternary

* fix: prefer-array-last-methods

* fix: prefer-queue-microtask

* fix: prefer-split-limit

* fix: no-array-from-fill

* fix: no-unused-array-method-return

* fix: prefer-single-call

* fix: prefer-includes-over-repeated-comparisons

* fix: consistent-compound-words

* fix: prefer-includes-over-repeated-comparisons

* chore: add eslint-plugin-unicorn v65 recommended preset

* fix: correct duration parsing logic in parseDuration function

* fix: update oxlint-disable

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2026-06-09 00:08:15 +08:00
slowmande ad4b89c3d9
feat(route): add Naver search RSS route (#22025)
* route(naver): add Naver search RSS route

Supports all search categories: all (통합검색), blog (블로그), cafe (카페), news (뉴스), video (동영상)

* fix: use string replaceAll instead of regex in cleanText

Replace regex patterns with plain strings to satisfy oxlint unicorn/prefer-string-replace-all rule.

* fix: remove console.log and fix cleanText double-unescaping

- Remove console.log to satisfy oxlint no-console rule
- Use single-pass regex replaceAll to prevent HTML entity double-unescaping (CodeQL)

* fix(naver): address review comments and fix cafe/all category bugs

- Fix ALL category: use templateIds array to extract all content types (web, blog, news, video) instead of only webItem
- Fix CAFE category: change URL to ssc=tab.m_cafe.all format and use cheerio HTML parsing since cafe page returns pure HTML instead of JSON SSR
- Address Rule 11: move author/source metadata from description to dedicated author field
- Address Rule 14: return undefined for unparseable dates instead of fake current time
- Use single route path instead of array
- Add maintainer GitHub ID
- Fix cleanText double-unescaping issue with single-pass regex callback

* refactor(naver): split extractItems to reduce cyclomatic complexity

Split the 37-complexity extractItems into extractVideoItem and extractGenericItem.
Fixes CodeFactor "Complex Method" warning.

* refactor(naver): split functions to pass CodeFactor complexity check

Extract extractLink, buildItemFromTemplate, buildVideoDescription, and
buildVideoResult helpers to bring all methods under complexity threshold.

* fix(route): address review - use DataItem, Array.map, and entities package

- Replace manual item type with DataItem from @/types
- Use toArray().map().filter() instead of each() + push()
- Use decodeHTML from 'entities' instead of manual replaceAll

* fix(route): fix oxlint regex warnings

- Use non-capturing groups for regex used only with .test()
- Escape { } in regex literal
- Use character class [분일주] for single-char alternatives
2026-06-08 12:23:11 +08:00
Tony 4390cabb21
feat(utils/playwright): add PLAYWRIGHT_CDP_ENDPOINT support (#22212)
* feat(utils/playwright): add PLAYWRIGHT_CDP_ENDPOINT support

* fix: close browser
2026-06-08 10:31:39 +08:00
Kovin 983ee11419
feat(route): add Grupo Animal (#22196)
* feat(route): add Animal Politico

* fix(route/animalpolitico): shorter name for politica route, replaced correct feed link

* fix(route/animalpolitico): shorter name for estados route

* fix(route/animalpolitico): replaced wrong route category

* fix(route/animalpolitico): used template literals for better readability on GraphQL query

* fix(route/animalpolitico): change namespace (1/2)

* fix(route/animalpolitico): change namespace (2/2)
2026-06-07 06:13:49 +08:00
Tony 66d05d2644 docs: fix picnob metadata 2026-06-07 04:47:50 +08:00
Tony 055c5b7c9e
fix: restore picnob (#22204)
* fix: restore picnob

* feat: redirect `/picnob.info` to `/picnob`

* style: fix indent
2026-06-07 04:44:20 +08:00
Tony cfcdc34e1f
refactor: replace playwright with patchright (#21976)
* refactor: use patchwright

* refactor: migrate setRequestInterception and waitUntil

* fix: overwrite ua

* refactor: drop puppeteer cookie/requestfinished shims

Migrate page.cookies/setCookie and browser.cookies/setCookie call sites to the native context APIs (page.context().cookies/addCookies), rewrite requestfinished handlers to await request.response() instead of consuming the synchronous puppeteer-shaped payload, and remove the now-redundant browser.close context-cleanup wrapper. Playwright already handles all of these natively; the shims existed only for the puppeteer -> playwright migration.

* refactor: remove page.authenticate, page.setUserAgent,  browser.newPage(), browser.userAgent() shims

update cookie utility tests

* refactor: replace browser instance with context in Playwright usage across multiple routes

- Updated all instances of `browser` to `context` in Playwright-related functions for consistency and improved resource management.
- Ensured proper closure of context after operations to prevent memory leaks.
- Adjusted request interception methods to utilize the new context variable.

* fix: direct type import

* refactor: remove Puppeteer compatibility layers and unify page handling with Playwright

* fix: test case

* chore: bump patchright to v1.60.0

* chore: pin patchright to 1.59.1

nft can't resolve browser.json due to https://github.com/microsoft/playwright/pull/40093

* chore: pin to node 24.15 for playwright

browser install on node 24.16 stucks due to https://github.com/microsoft/playwright/issues/40724

* fix: update patchright and patchright-core to version 1.60.2 and adjust minify-docker.js for compatibility

* fix: import BrowserContext from patchright
2026-06-07 02:43:20 +08:00
Clementina Lam Choi 6886265f1b
feat(route): add Le Monde & Le Monde in English (#22175)
* feat(route): add Le Monde route

* feat(route): add Le Monde in English route

Add English version of Le Monde RSS route with 40+ categories
covering World, Europe, France, Economy, Culture, Sports, etc.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(route/le-monde): remove unnecessary cache.tryGet wrapper

cache.tryGet was wrapping a synchronous callback with no async work,
making it a no-op. The items are already fully parsed from the RSS
feed, so direct assignment is sufficient.

* fix: address review comments for Le Monde route

- Rename namespace from le-monde/le-monde-en to lemonde
- Remove unnecessary .first() calls on RSS elements
- Remove default ofetch responseType option
- Use static cheerio import instead of dynamic import
- Extract <category> tags into category field

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: sort imports to satisfy oxlint

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: update example paths to match lemonde namespace

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: trigger CI to re-test with updated route paths

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: remove non-existent <content> element fallback from image URL

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: mlkgrnt <mlkgrnt@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 23:16:17 +08:00
an-lee cae03809c0
fix(route/patreon): creator ID extraction and render content from JSON (#22188)
* fix(route/patreon): Fix creator ID extraction

* fix(route/patreon): render content from content_json_string

* fix(route/patreon): satisfy oxlint and use trueUA for creator fetches

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(route/patreon): resolve review comments

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 12:54:26 +08:00
BeaCox 6c52888af2
fix(route/sjtu/cs/tzgg): add category description table for docs (#22197) 2026-06-06 12:14:47 +08:00
Tinko 5542e787e3
feat(route): add Shanghai weather alert (#22087)
* feat: add Shanghai weather alert

* chore: update `updated` field by alert deactivate time

* chore: fix import path

* chore: remove cache time

* fix: disable cache age extend

---------

Co-authored-by: Tinko <24890691+TinkoLiu@users.noreply.github.com>
2026-06-06 11:33:59 +08:00
BeaCox 7386c170c0
feat(route/sjtu/cs/tzgg): add SJTU CS department notice route (#22194)
* feat(route/sjtu/cs/tzgg): add CS department notice route

* fix(route/sjtu/cs/tzgg): remove unnecessary date padding
2026-06-06 02:16:18 +08:00
Tony 75d43dd086
chore: add eslint-plugin-regexp (#22189)
* chore: add eslint-plugin-regexp

* chore: autofix

* chore: fix no-useless-flag

* chore: fix optimal-lookaround-quantifier

* chore: fix no-lazy-ends

* chore: fix no-contradiction-with-assertion

* chore: fix no-useless-assertions

* chore: fix no-useless-quantifier

* chore: fix remaining regexp issues

* fix: regex for WFU news link validation
2026-06-05 20:04:39 +08:00
Cod1doc 3567ced4d2
fix: transform json number item link (#22168)
* fix: transform json number item link

* docs(route/rsshub): use concrete json transform example

* Revert "docs(route/rsshub): use concrete json transform example"

This reverts commit e4d916451afa2207959312d999dfbc6c71919e55.

---------

Co-authored-by: jack <jack@example.com>
Co-authored-by: jack <jack@jacks-MacBook-Air.local>
2026-06-05 03:51:04 +08:00
Andvari 6135a6db71
fix(route/apnews): Adapt to new author format (#22184) 2026-06-04 21:50:02 +08:00
Andvari 6c037dd734
fix(route/apnews): Change default path for mobile API (#22105)
* fix(route/apnews): Change default path for mobile API

* Update mobile-api.ts

* Update mobile-api.ts
2026-06-04 21:15:03 +08:00
TonyRL 0a2e5b91db fix: fromCodePoint RangeError error
#22172
2026-06-03 22:50:26 +00:00
Jiamin 7a8c5c6c62
feat(route): add Henan Museum exhibition route (#22138)
* feat(route): add Henan Museum exhibition route

* fix: remove trim for title
2026-06-04 06:03:31 +08:00
CaoMeiYouRen233 f5dc400cb2
fix(route/iwara): 修复 apiRootUrl 引用错误 (#22176) 2026-06-04 05:30:53 +08:00
Tony fbe1a46018 fix(route/twitter): throw exception on invalid user 2026-06-04 05:25:46 +08:00
Tony 8eaa2e06f9
fix(route/cls): fix telegraph api (#22171) 2026-06-03 11:45:31 +08:00
Jiamin 7931a8d4ce
fix(route): fix zh name for shanximuseum (#22169) 2026-06-03 02:18:32 +08:00
Jiamin f82a357623
feat: add shanxi museum temporary exhibition route (#22046)
* feat: add shanxi museum temporary exhibition route

* chore: trigger ci

* fix: remove pubDate if no return information

* fix: remove redundancy

* fix:fix the timezone error and refactor the resData and list

* fix: remove ! check for imgurl

* fix: remove empty message and add trycatch
2026-06-02 22:18:47 +08:00
BeaCox 575f71abde
feat(route/sjtu): add CS school academic activities (#22050)
* feat(route/sjtu): add CS school academic activities

* refactor(route/sjtu/cs/xshd): use JSX for description and respect dedicated item fields

  - Switch to .tsx with renderToString (Rule 25)
  - Move 时间→pubDate (with HH:mm), 报告人→author, 封面→image (Rule 11)
  - Drop hand-written referrerpolicy attributes (Rule 39)
  - pubDate now preserves hour/minute when source provides it

* fix(route/sjtu/cs/xshd): separate publish date from event time

  - pubDate now reflects announcement publish date:
    - in-site articles: detail page 发布日期 (authoritative)
    - WeChat-redirect items: extracted from image URL path /upload/image/YYYYMMDD/
  - 举办时间 (event time) moved back into description (no longer duplicates pubDate)

* fix(route/sjtu/cs/xshd): remove manual title trimming (Rule 16)

* fix(route/sjtu/cs/xshd): address review comments

  - Use response URL to detect WeChat redirect
  - Fetch WeChat MP content via fetchArticle
  - Remove try-catch around detail requests
  - Remove dangerouslySetInnerHTML from JSX rendering

* fix(route/sjtu/cs/xshd): use ofetch consistently

* fix(route/sjtu/cs/xshd): fallback on WeChat MP WAF errors

* fix(route/sjtu/cs/xshd): fallback when detail enrichment fails

  The route enriches list items by fetching detail pages, but some SJTU
  detail URLs are redirect stubs to WeChat MP. In CI, those intermediate
  detail requests can fail with no response before the route reaches the
  WeChat MP parser, causing Promise.all to reject and the whole feed to
  return 503.

  Switch detail enrichment aggregation from Promise.all to
  Promise.allSettled and fall back to list-page metadata for only the
  failed item. Successful items are still enriched with in-site article
  content or WeChat MP content.

  This follows the existing resilient detail-fetching pattern in
  lib/routes/usenix/usenix.ts and keeps the scoped WeChatMpError fallback
  around fetchArticle(), similar to lib/routes/wechat/sogou.ts.
2026-06-01 05:33:37 +08:00
github-actions[bot] d486205245 style: auto format 2026-05-30 03:38:43 +00:00
Jsongcloud db1e74c6f9
fix(route/twitter): handle TweetPreviewDisplay for subscriber-only posts (#21957)
* fix(twitter): handle TweetPreviewDisplay for subscriber-only posts

* fix(twitter): remove unused screenName variable

* fix(twitter): fix indentation and use English comments

* fix(twitter): fix indentation and remove unused variables

* fix(twitter): revert mobile-api changes as mobile API is disabled

* fix(twitter): add configurable prefix options for subscriber-only posts

---------

Co-authored-by: root <root@exquisite-echo-2.localdomain>
2026-05-30 11:37:37 +08:00
Tony 9a34eef2af docs: fix description 2026-05-30 05:49:25 +08:00
Jiamin 5ac2c937a6
feat(route): add shanghai museum news route (#22049)
* feat: add shanghai museum news route

* feat: add shanghai museum news route

* fix: update radar

* fix: remove redundancy and fix the time zone
2026-05-30 05:25:54 +08:00
github-actions[bot] 99e35563c4 style: auto format 2026-05-26 23:10:33 +00:00
Jiamin 9446e707ff
feat(route): add the Palace Museum route (#21960)
* feat(route): add the Palace Museum route

* fix: fix trailing space, array and radar target

* fix: fix array

* fix: follow rule22

* refactor(dpm): migrate exhibitions route to JSX format (.tsx)

* fix(dpm): use arrow function in cheerio filter

* fix: update example

* fix: remove redundancy and fix error for endDate and fullduration

* chore: trigger gh actions retry

* fix: remove trim for fullduration

* fix:remove ! check for imgurl and fullduration

* fix: remove exhibition_item
2026-05-27 07:09:21 +08:00
dependabot[bot] 2c349add50
chore(deps-dev): bump the oxc group across 1 directory with 4 updates (#22107)
* chore(deps-dev): bump the oxc group across 1 directory with 4 updates

Bumps the oxc group with 4 updates in the / directory: [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins), [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt), [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) and [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint).


Updates `@oxlint/plugins` from 1.66.0 to 1.67.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.67.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.51.0 to 0.52.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.52.0/npm/oxfmt)

Updates `oxlint` from 1.66.0 to 1.67.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.67.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.66.0 to 1.67.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint-plugin-eslint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.67.0/npm/oxlint-plugin-eslint)

---
updated-dependencies:
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.52.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: use native unicorn/import-style

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-27 00:51:12 +08:00
LunyaaDev f29e5ccb55
feat(route/kleinanzeigen): add Kleinanzeigen (kleinanzeigen.de) (#21959)
* add Kleinanzeigen.de search feed

* simplify route name

* Update lib/routes/kleinanzeigen/search.ts

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* remove title cloning

* include all images

* improve description parsing

---------
2026-05-25 10:25:39 +08:00
Jiamin 0788983eac
feat: add China National Museum exhibition route (#21891)
* feat: add China National Museum exhibition route

* Update route.ts

* Update zl.ts

* Update zl.ts

* Update zl.ts

* fix: refactor to JSX and fix cache import

* fix: refactor to JSX, fix duration and fix import

* fix: replaceAll, if and regualr expression range

* Update zl.ts

* fix: refactor extra output and import namespace

* fix: fix error

* fix: adjust fullduration logic

* feat: refactor route file with type and subtype used

* fix: reduce the complexity

* fix: remove trim() for title

* fix: remove redundancy and fix error

* fix: remove toLowerCase redundancy

* fix: remove trim for title

* fix: Apply suggestions from code review and error fix

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

---------
2026-05-24 12:29:39 +08:00
github-actions[bot] cd6a40c14f style: auto format 2026-05-23 13:39:38 +00:00
Andvari 6f9b7c99f3
fix(route/scmp): Adapt to new section format (#22085)
* fix(route/scmp): Adapt to new section format

* Update utils.ts
2026-05-23 21:38:33 +08:00
Chih-Hsuan Yen b5bcb8a567
feat(route/cna): cleanup extracted full texts (#21962)
Here is a page with description-box:
https://www.cna.com.tw/news/aipl/202605070117.aspx

Explanation for the term 憲法第130條 is injected in the middle of a
paragraph and makes that paragraph hard to read. This change fixes that.
2026-05-23 05:21:45 +00:00
Azan c2d357fc03
fix(route/4gamers): handle InsertOneAdsSection (#22071) 2026-05-21 21:52:17 +08:00
Ch3n4y e5e2368fe0
feat(route): add itsec news (#22066)
* feat(route): add itsec news

* fix(route): preserve itsec titles

---------

Co-authored-by: Ch3n4y <ch3n4y@gmial.com>
2026-05-21 13:51:27 +08:00
github-actions[bot] 9d3790f73c style: auto format 2026-05-14 14:26:50 +00:00
Jiamin 5cb99133d9
feat: add Shanghai Museum exhibition route (#21890)
* feat: add Shanghai Museum exhibition route

* Update shanghaimuseum.ts

* feat: add Shanghai Museum exhibition route

* Update shanghaimuseum.ts

* Update shanghaimuseum.ts

* docs: add namespace for shanghaimuseum

* feat(route): rename to offline-exhibit and update metadata

* fix: update with fixed output and fix errors

* fix: fix errors

* fix: add exhibitiontype

* fix: refactor to JSX

* feat: update shanghai museum route with type param

* fix: update offline-exhibit to use path params

* fix: exhibitItem from ExhibitItem

* fix: update interface
2026-05-14 22:25:36 +08:00
DIYgod 30776baef7 fix: update obsidian community routes 2026-05-14 15:47:50 +08:00
DIYgod 265921b7b8 fix(route): normalize Bilibili mall image URLs 2026-05-14 13:18:46 +08:00
chansantheman 591dcb85be
feat(route/gigazine): add English news full-text feed (#21757)
* route(gigazine): add English news full-text feed

Adds /gigazine/en route that fetches full article content from
GIGAZINE's English news listing. Uses sequential fetching with
delays to respect Cloudflare rate limits; subsequent loads are
served from cache.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* route(gigazine): improve english feed resilience

* test(gigazine): add english route coverage

* test(gigazine): move route coverage out of route tree

* test(api): cover route status cache fallbacks

* refactor(gigazine): apply PR review feedback to english route

- Use ofetch built-in auto-retry instead of hand-rolled circuit breaker
- Remove config.trueUA; let request-rewriter inject random browser UA
- Simplify Number.parseInt call (drop redundant ?? '' fallback)
- Update tests to match new retry and UA behaviour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove unrelated changes and unnecessary test file

* refactor(gigazine): simplify selectors and cleanup logic per review

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 03:54:02 +08:00
Q16KBreak dd8ee08393
feat(route/nyaa): support fulltext mode (#21888)
* feat(route): support fulltext mode for nyaa

* feat(route): replace parameter name

* feat(route): migrate from query parameters to route paths

* feat(route): use mode=fulltext as trigger and update namespace

* delete fulltext routes
2026-05-12 02:45:14 +08:00
github-actions[bot] 6e12d60764 style: auto format 2026-05-11 16:26:16 +00:00
Shoggomo 5cf0d2b133
feat(route/4chan): add filters for sticky threads and reply count (#21964)
* feat(route/4chan): add filters for sticky threads and reply count

* Revert formatting

* Applied suggestion
2026-05-12 00:25:01 +08:00
lex 898b320644
feat(route): add /humanlayer/blog route (#21565)
* feat(route): add /humanlayer/blog route

Add RSS feed for HumanLayer blog (www.humanlayer.dev/blog), scraping
blog listing and full article content with cheerio.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(route): use CSS :not() selector instead of JS filter for humanlayer blog

Address PR review feedback: move /blog/tags/ exclusion into the CSS selector
instead of using a separate .filter() call.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): extract tags into category field for humanlayer blog

Parse #-prefixed tags from the meta line and populate the category field.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): address review feedback for humanlayer blog

- Remove redundant :not() selector (tag links use different class)
- Simplify tag extraction from parts.slice(3).join() to parts[3]
- Fix tag regex to match hyphenated tags like best-practices

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): remove custom limit for humanlayer blog, use built-in

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: HAPI <noreply@hapi.run>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: zj1123581321 <zj1123581321@users.noreply.github.com>
2026-05-12 00:03:51 +08:00
Tony e55ade5117
fix(route/github): fix pr url (#21974) 2026-05-11 21:44:59 +08:00
Tony a98de2effd refactor: use arrow function 2026-05-11 02:16:04 +08:00