refactor(qqbot): install plugin from Tencent package (#107295)

* refactor(qqbot): remove bundled extension source

Mechanical deletion half of the #107295 squashed rebase; the catalog
repoint and host integration land in the follow-up commit.

Co-authored-by: sliverp <870080352@qq.com>

* refactor(qqbot): install plugin from Tencent package

Squashed rebase of #107295 onto current main. Repoints the official
external channel catalog at @tencent-connect/openclaw-qqbot@2.0.1 and
adapts onboarding, doctor migrations, secrets, build guards, and tests.

Documents the known limitation that the external package does not
support structured SecretRef clientSecret values; operators move those
to QQBOT_CLIENT_SECRET or clientSecretFile before upgrading.

Co-authored-by: sliverp <870080352@qq.com>

* fix(doctor): reuse shared hasOwnKey record helper

The rebased QQBot migration carried its own hasOwnKey export, colliding
with the one main now ships in legacy-config-record-shared.ts.

Co-authored-by: sliverp <870080352@qq.com>

* fix(plugins): carry catalog integrity through the update bridge

The externalized-bundled-plugin bridge dropped the official catalog's
expectedIntegrity pin, so bundled-user updates installed the external
npm package without integrity verification. The bridge now carries the
pin for the catalog's exact npm spec and both bridge install calls pass
it through; update-channel spec overrides intentionally skip the pin
since it only covers the pinned version.

Co-authored-by: sliverp <870080352@qq.com>

* chore(plugin-sdk): refresh per-entrypoint API baselines

The QQBot compat export and bundled-type removal shift 26 entrypoint
closure hashes in the new split baseline layout.

Co-authored-by: sliverp <870080352@qq.com>

* refactor(qqbot): drop helper reintroduced during rebase

Main's coercion consolidation added this file after the deletion
commit's base; its only consumers were the removed qqbot sources.

Co-authored-by: sliverp <870080352@qq.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
Sliverp
2026-08-12 06:10:27 +08:00
committed by GitHub
parent d035dba6c7
commit 84c7d45f15
379 changed files with 2996 additions and 47557 deletions
-68
View File
@@ -965,34 +965,6 @@ rules:
}
}
heredocLine = "";
- id: ghsa-66r7-m7xm-v49h.qqbot-outbound-media-unvalidated-local-path
languages:
- typescript
- javascript
severity: ERROR
message: QQBot outbound helper resolves local media paths without media-root boundary validation.
patterns:
- pattern-either:
- pattern: |
const $MEDIA = resolveQQBotLocalMediaPath(normalizePath(...));
- pattern: |
const $MEDIA = resolveQQBotLocalMediaPath($PATH);
- pattern-inside: |
export async function $FN(...){
...
}
- metavariable-regex:
metavariable: $FN
regex: ^(sendPhoto|sendVoice|sendVideoMsg|sendDocument|sendMedia|sendVoiceMessage)$
- pattern-not-inside: |
const $RESOLVED = resolveOutboundMediaPath(...);
...
metadata:
ghsa: GHSA-66R7-M7XM-V49H
advisory-url: https://github.com/openclaw/openclaw/security/advisories/GHSA-66R7-M7XM-V49H
detector-bucket: precise
source-run: 2026-04-17T07-37-10Z
source-rule-id: qqbot-outbound-media-unvalidated-local-path
- id: ghsa-6g25-pc82-vfwp.oauth-state-reuses-pkce-verifier
languages:
- typescript
@@ -1617,46 +1589,6 @@ rules:
detector-bucket: precise
source-run: 2026-04-17T07-37-10Z
source-rule-id: openclaw-skill-env-host-injection
- id: ghsa-846p-hgpv-vphc.qqbot-outbound-local-read-without-boundary-check
message: QQ Bot outbound local media handling reads a user-influenced path after resolveQQBotLocalMediaPath() without resolveOutboundMediaPath()/resolveQQBotPayloadLocalFilePath() boundary enforcement.
severity: ERROR
languages:
- typescript
- javascript
patterns:
- pattern-either:
- pattern: |
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
...
readFileAsync($MP)
- pattern: |
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
...
audioFileToSilkBase64($MP, ...)
- pattern: |
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
...
checkFileSize($MP)
- pattern-not: |
$RES = resolveOutboundMediaPath($RAW, ..., ...)
...
- pattern-not: |
$SAFE = resolveQQBotPayloadLocalFilePath($MP)
...
- pattern-not: |
if (!resolveQQBotPayloadLocalFilePath($MP)) {
...
}
metadata:
category: security
technology:
- qqbot
confidence: medium
ghsa: GHSA-846P-HGPV-VPHC
advisory-url: https://github.com/openclaw/openclaw/security/advisories/GHSA-846P-HGPV-VPHC
detector-bucket: precise
source-run: 2026-04-17T07-37-10Z
source-rule-id: qqbot-outbound-local-read-without-boundary-check
- id: ghsa-8689-gm9g-jgr6.plivo-v3-replay-key-uses-unsorted-url
languages:
- typescript