mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
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:
@@ -1676,73 +1676,157 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "@openclaw/qqbot",
|
||||
"version": "2026.8.1",
|
||||
"description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
|
||||
"source": "official",
|
||||
"name": "@tencent-connect/openclaw-qqbot",
|
||||
"description": "OpenClaw QQ Bot channel plugin by the Tencent Connect team.",
|
||||
"source": "external",
|
||||
"kind": "channel",
|
||||
"openclaw": {
|
||||
"plugin": {
|
||||
"id": "openclaw-qqbot",
|
||||
"label": "QQ Bot"
|
||||
},
|
||||
"contracts": {
|
||||
"tools": [
|
||||
"qqbot_channel_api",
|
||||
"qqbot_platform_api",
|
||||
"qqbot_remind"
|
||||
]
|
||||
},
|
||||
"channel": {
|
||||
"id": "qqbot",
|
||||
"configuredState": {
|
||||
"env": {
|
||||
"anyOf": [
|
||||
"QQBOT_APP_ID",
|
||||
"QQBOT_CLIENT_SECRET"
|
||||
]
|
||||
}
|
||||
},
|
||||
"approvalFlags": [
|
||||
"native"
|
||||
],
|
||||
"label": "QQ Bot",
|
||||
"selectionLabel": "QQ Bot (Official API)",
|
||||
"detailLabel": "QQ Bot",
|
||||
"docsPath": "/channels/qqbot",
|
||||
"docsLabel": "qqbot",
|
||||
"blurb": "connect to QQ via official QQ Bot API with group chat and direct message support.",
|
||||
"systemImage": "bubble.left.and.bubble.right",
|
||||
"setup": {
|
||||
"fields": [
|
||||
{
|
||||
"key": "token",
|
||||
"kind": "string",
|
||||
"sensitive": true,
|
||||
"cli": {
|
||||
"flags": "--token <appId:secret>",
|
||||
"description": "QQBot app id and client secret"
|
||||
"envVars": [
|
||||
"QQBOT_APP_ID",
|
||||
"QQBOT_CLIENT_SECRET"
|
||||
],
|
||||
"approvalFlags": [
|
||||
"native"
|
||||
],
|
||||
"doctorCapabilities": {
|
||||
"openDmRequiresAllowFromWildcard": false
|
||||
},
|
||||
"systemImage": "bubble.left.and.bubble.right"
|
||||
},
|
||||
"channelSecrets": {
|
||||
"fields": [
|
||||
{
|
||||
"field": "clientSecret",
|
||||
"activationField": "appId",
|
||||
"activationEnv": "QQBOT_APP_ID"
|
||||
}
|
||||
]
|
||||
},
|
||||
"channelHostConfig": {
|
||||
"docsSource": "official",
|
||||
"compatibilityMigration": "qqbot.tencent-2.0-compatibility",
|
||||
"schemaAllOf": [
|
||||
{
|
||||
"not": {
|
||||
"required": [
|
||||
"defaultAccount"
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"allowFrom": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"allOf": [
|
||||
{
|
||||
"not": {
|
||||
"const": "*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"anyOf": [
|
||||
{
|
||||
"const": "openclaw:approval-disabled"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[^a-z]*$"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"accounts": {
|
||||
"type": "object",
|
||||
"not": {
|
||||
"required": [
|
||||
"default"
|
||||
]
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"allowFrom": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"allOf": [
|
||||
{
|
||||
"not": {
|
||||
"const": "*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"anyOf": [
|
||||
{
|
||||
"const": "openclaw:approval-disabled"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[^a-z]*$"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"allowFrom"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "tokenFile",
|
||||
"kind": "string",
|
||||
"sensitive": true,
|
||||
"cli": {
|
||||
"flags": "--token-file <path>",
|
||||
"description": "QQBot client secret file"
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "useEnv",
|
||||
"kind": "boolean",
|
||||
"cli": {
|
||||
"flags": "--use-env",
|
||||
"description": "Use QQBOT environment credentials"
|
||||
"required": [
|
||||
"allowFrom"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"channelConfigs": {
|
||||
"qqbot": {
|
||||
"label": "QQ Bot",
|
||||
"description": "QQ Bot API conversation channel.",
|
||||
"preferOver": [
|
||||
"qqbot"
|
||||
],
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"appId": {
|
||||
"type": "string"
|
||||
},
|
||||
"clientSecret": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"install": {
|
||||
"npmSpec": "@openclaw/qqbot",
|
||||
"npmSpec": "@tencent-connect/openclaw-qqbot@2.0.1",
|
||||
"defaultChoice": "npm",
|
||||
"minHostVersion": ">=2026.4.10"
|
||||
"expectedIntegrity": "sha512-2010PaCummeQaxerLtaGfQ/5HChiXaW/KpTERid7V/1zyTs46S2ACi0hgZQ1SB7tH0t1InWr8tzVBJV/pLss3Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -82,6 +82,168 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "@tencent-connect/openclaw-qqbot",
|
||||
"description": "OpenClaw QQ Bot channel plugin by the Tencent Connect team.",
|
||||
"source": "external",
|
||||
"kind": "channel",
|
||||
"openclaw": {
|
||||
"plugin": {
|
||||
"id": "openclaw-qqbot",
|
||||
"label": "QQ Bot"
|
||||
},
|
||||
"contracts": {
|
||||
"tools": ["qqbot_platform_api", "qqbot_remind"]
|
||||
},
|
||||
"channel": {
|
||||
"id": "qqbot",
|
||||
"label": "QQ Bot",
|
||||
"selectionLabel": "QQ Bot (Official API)",
|
||||
"detailLabel": "QQ Bot",
|
||||
"docsPath": "/channels/qqbot",
|
||||
"docsLabel": "qqbot",
|
||||
"blurb": "connect to QQ via official QQ Bot API with group chat and direct message support.",
|
||||
"envVars": ["QQBOT_APP_ID", "QQBOT_CLIENT_SECRET"],
|
||||
"approvalFlags": ["native"],
|
||||
"doctorCapabilities": {
|
||||
"openDmRequiresAllowFromWildcard": false
|
||||
},
|
||||
"systemImage": "bubble.left.and.bubble.right"
|
||||
},
|
||||
"channelSecrets": {
|
||||
"fields": [
|
||||
{
|
||||
"field": "clientSecret",
|
||||
"activationField": "appId",
|
||||
"activationEnv": "QQBOT_APP_ID"
|
||||
}
|
||||
]
|
||||
},
|
||||
"channelHostConfig": {
|
||||
"docsSource": "official",
|
||||
"docsInventory": {
|
||||
"package": {
|
||||
"name": "@openclaw/qqbot",
|
||||
"description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
|
||||
"openclaw": {
|
||||
"install": {
|
||||
"npmSpec": "@openclaw/qqbot",
|
||||
"defaultChoice": "npm"
|
||||
},
|
||||
"release": {
|
||||
"publishToClawHub": true,
|
||||
"publishToNpm": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"manifest": {
|
||||
"id": "qqbot",
|
||||
"description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
|
||||
"channels": ["qqbot"],
|
||||
"contracts": {
|
||||
"tools": []
|
||||
},
|
||||
"skills": ["./skills"]
|
||||
}
|
||||
},
|
||||
"compatibilityMigration": "qqbot.tencent-2.0-compatibility",
|
||||
"schemaAllOf": [
|
||||
{
|
||||
"not": {
|
||||
"required": ["defaultAccount"]
|
||||
},
|
||||
"properties": {
|
||||
"allowFrom": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"allOf": [
|
||||
{
|
||||
"not": {
|
||||
"const": "*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"anyOf": [
|
||||
{
|
||||
"const": "openclaw:approval-disabled"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[^a-z]*$"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"accounts": {
|
||||
"type": "object",
|
||||
"not": {
|
||||
"required": ["default"]
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"allowFrom": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"allOf": [
|
||||
{
|
||||
"not": {
|
||||
"const": "*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"anyOf": [
|
||||
{
|
||||
"const": "openclaw:approval-disabled"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[^a-z]*$"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["allowFrom"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["allowFrom"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"channelConfigs": {
|
||||
"qqbot": {
|
||||
"label": "QQ Bot",
|
||||
"description": "QQ Bot API conversation channel.",
|
||||
"preferOver": ["qqbot"],
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"appId": {
|
||||
"type": "string"
|
||||
},
|
||||
"clientSecret": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"install": {
|
||||
"npmSpec": "@tencent-connect/openclaw-qqbot@2.0.1",
|
||||
"defaultChoice": "npm",
|
||||
"expectedIntegrity": "sha512-2010PaCummeQaxerLtaGfQ/5HChiXaW/KpTERid7V/1zyTs46S2ACi0hgZQ1SB7tH0t1InWr8tzVBJV/pLss3Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "@tencent-weixin/openclaw-weixin",
|
||||
"description": "OpenClaw Weixin channel plugin by the Tencent Weixin team.",
|
||||
|
||||
Reference in New Issue
Block a user