feat(qa): add Mantis Discord status reaction scenario (#76747)

* feat(qa): add Mantis Discord status reaction scenario

* fix(qa): retry Discord rate limits in Mantis runs

* refactor(qa): reuse Discord API retry helper

* fix(qa): import Discord API through package surface

* fix(ci): generate Discord boundary declarations

* fix(ci): keep xai boundary overrides stable
This commit is contained in:
Peter Steinberger
2026-05-03 17:00:06 +01:00
committed by GitHub
parent 1e8de7661e
commit 77a50db9ea
15 changed files with 990 additions and 130 deletions

View File

@@ -46,6 +46,7 @@ export const EXTENSION_PACKAGE_BOUNDARY_BASE_PATHS = {
],
"openclaw/plugin-sdk/ssrf-runtime": ["../dist/plugin-sdk/src/plugin-sdk/ssrf-runtime.d.ts"],
"@openclaw/qa-channel/api.js": ["../dist/plugin-sdk/extensions/qa-channel/api.d.ts"],
"@openclaw/discord/api.js": ["../dist/plugin-sdk/extensions/discord/api.d.ts"],
"@openclaw/*.js": ["../packages/plugin-sdk/dist/extensions/*.d.ts", "../extensions/*"],
"@openclaw/*": ["../packages/plugin-sdk/dist/extensions/*", "../extensions/*"],
"@openclaw/plugin-sdk/*": ["../dist/plugin-sdk/src/plugin-sdk/*.d.ts"],
@@ -68,6 +69,7 @@ export const EXTENSION_PACKAGE_BOUNDARY_XAI_PATHS = {
(({
"openclaw/plugin-sdk/channel-secret-basic-runtime": _omitBasic,
"openclaw/plugin-sdk/channel-secret-tts-runtime": _omitTts,
"@openclaw/discord/api.js": _omitDiscord,
...rest
}) => rest)(EXTENSION_PACKAGE_BOUNDARY_BASE_PATHS),
"../",

View File

@@ -45,6 +45,13 @@ const QA_CHANNEL_DTS_INPUTS = [
];
const QA_CHANNEL_DTS_STAMP = "dist/plugin-sdk/extensions/qa-channel/.boundary-dts.stamp";
const QA_CHANNEL_DTS_REQUIRED_OUTPUTS = ["dist/plugin-sdk/extensions/qa-channel/api.d.ts"];
const DISCORD_DTS_INPUTS = [
"extensions/discord/api.ts",
"extensions/discord/src/api.ts",
"extensions/discord/tsconfig.json",
];
const DISCORD_DTS_STAMP = "dist/plugin-sdk/extensions/discord/.boundary-dts.stamp";
const DISCORD_DTS_REQUIRED_OUTPUTS = ["dist/plugin-sdk/extensions/discord/api.d.ts"];
const ENTRY_SHIMS_INPUTS = [
"scripts/write-plugin-sdk-entry-dts.ts",
"scripts/lib/plugin-sdk-entrypoints.json",
@@ -290,6 +297,12 @@ async function main(argv = process.argv.slice(2)) {
outputPaths: [QA_CHANNEL_DTS_STAMP, ...QA_CHANNEL_DTS_REQUIRED_OUTPUTS],
includeFile: isRelevantTypeInput,
}) && !hasMissingOutput(QA_CHANNEL_DTS_REQUIRED_OUTPUTS);
const discordDtsFresh =
isArtifactSetFresh({
inputPaths: DISCORD_DTS_INPUTS,
outputPaths: [DISCORD_DTS_STAMP, ...DISCORD_DTS_REQUIRED_OUTPUTS],
includeFile: isRelevantTypeInput,
}) && !hasMissingOutput(DISCORD_DTS_REQUIRED_OUTPUTS);
const prerequisiteSteps = [];
const dependentSteps = [];
@@ -357,6 +370,37 @@ async function main(argv = process.argv.slice(2)) {
} else {
process.stdout.write("[qa-channel boundary dts] fresh; skipping\n");
}
if (!discordDtsFresh) {
removeIncrementalStateForMissingOutput({
outputPaths: DISCORD_DTS_REQUIRED_OUTPUTS,
tsBuildInfoPath: "dist/plugin-sdk/extensions/discord/.tsbuildinfo",
});
dependentSteps.push({
label: "discord boundary dts",
args: [
runTsgoScript,
"-p",
"extensions/discord/tsconfig.json",
"--declaration",
"true",
"--emitDeclarationOnly",
"true",
"--noEmit",
"false",
"--outDir",
"dist/plugin-sdk/extensions/discord",
"--rootDir",
"extensions/discord",
"--tsBuildInfoFile",
"dist/plugin-sdk/extensions/discord/.tsbuildinfo",
],
env: { OPENCLAW_TSGO_HEAVY_CHECK_LOCK_HELD: "1" },
timeoutMs: 300_000,
stampPath: DISCORD_DTS_STAMP,
});
} else {
process.stdout.write("[discord boundary dts] fresh; skipping\n");
}
}
if (prerequisiteSteps.length > 0) {