refactor: pilot discord directory ownership

This commit is contained in:
Tak Hoffman 2026-03-18 14:24:42 -05:00
parent b744aaccf3
commit d4513b96f9
No known key found for this signature in database
4 changed files with 25 additions and 14 deletions

View File

@ -47,8 +47,6 @@ export {
getPresence,
hasAnyGuildPermissionDiscord,
kickMemberDiscord,
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
listGuildChannelsDiscord,
listGuildEmojisDiscord,
listPinsDiscord,
@ -64,8 +62,6 @@ export {
removeOwnReactionsDiscord,
removeReactionDiscord,
removeRoleDiscord,
resolveDiscordChannelAllowlist,
resolveDiscordUserAllowlist,
searchMessagesDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
@ -79,7 +75,3 @@ export {
uploadEmojiDiscord,
uploadStickerDiscord,
} from "../../../extensions/discord/runtime-api.js";
export {
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../../../extensions/discord/api.js";

View File

@ -368,6 +368,19 @@ describe("channel import guardrails", () => {
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/session-key-api\.js";/);
});
it("keeps Discord directory ownership on extension public seams", () => {
const text = readSource("src/plugin-sdk/discord.ts");
const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)]
.map((match) => match[0])
.filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js"))
.join("\n");
expect(bridgeImports).not.toMatch(
/\b(?:listDiscordDirectoryGroupsFromConfig|listDiscordDirectoryPeersFromConfig|listDiscordDirectoryGroupsLive|listDiscordDirectoryPeersLive|resolveDiscordChannelAllowlist|resolveDiscordUserAllowlist)\b/,
);
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
});
it("keeps channel helper modules off their own SDK barrels", () => {
for (const source of SAME_CHANNEL_SDK_GUARDS) {
const text = readSource(source.path);

View File

@ -1,3 +1,7 @@
import {
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../../extensions/discord/api.js";
import type {
ThreadBindingManager,
ThreadBindingRecord,
@ -6,7 +10,11 @@ import type {
import {
autoBindSpawnedDiscordSubagent,
getThreadBindingManager,
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
listThreadBindingsBySessionKey,
resolveDiscordChannelAllowlist,
resolveDiscordUserAllowlist,
resolveThreadBindingIdleTimeoutMs,
resolveThreadBindingInactivityExpiresAt,
resolveThreadBindingMaxAgeExpiresAt,
@ -63,8 +71,6 @@ import {
getPresence,
hasAnyGuildPermissionDiscord,
kickMemberDiscord,
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
listGuildChannelsDiscord,
listGuildEmojisDiscord,
listPinsDiscord,
@ -80,8 +86,6 @@ import {
removeOwnReactionsDiscord,
removeReactionDiscord,
removeRoleDiscord,
resolveDiscordChannelAllowlist,
resolveDiscordUserAllowlist,
searchMessagesDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
@ -94,8 +98,6 @@ import {
unpinMessageDiscord,
uploadEmojiDiscord,
uploadStickerDiscord,
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
} from "../channels/discord/plugin-sdk-bridge.js";
export type {

View File

@ -266,6 +266,10 @@ describe("plugin-sdk subpath exports", () => {
it("exports Discord helpers", () => {
expect(typeof discordSdk.buildChannelConfigSchema).toBe("function");
expect(typeof discordSdk.DiscordConfigSchema).toBe("object");
expect(typeof discordSdk.listDiscordDirectoryGroupsFromConfig).toBe("function");
expect(typeof discordSdk.listDiscordDirectoryPeersFromConfig).toBe("function");
expect(typeof discordSdk.listDiscordDirectoryGroupsLive).toBe("function");
expect(typeof discordSdk.listDiscordDirectoryPeersLive).toBe("function");
expect(typeof discordSdk.getThreadBindingManager).toBe("function");
expect(typeof discordSdk.listThreadBindingsBySessionKey).toBe("function");
expect(typeof discordSdk.normalizeExplicitDiscordSessionKey).toBe("function");