From f6b3245a7bc6e8079ca8ae262c6b336d4cf104ee Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 20 Mar 2026 19:08:27 +0000 Subject: [PATCH] fix: pass full sdk gate --- docs/plugins/building-plugins.md | 2 +- docs/start/hubs.md | 2 +- docs/tools/lobster.md | 2 +- docs/tools/plugin.md | 2 +- extensions/discord/src/subagent-hooks.test.ts | 2 +- extensions/line/api.ts | 8 +- extensions/line/src/config-adapter.ts | 2 +- extensions/line/src/group-policy.ts | 5 +- extensions/line/src/setup-core.ts | 2 +- extensions/line/src/setup-surface.ts | 2 +- extensions/matrix/runtime-api.ts | 6 +- extensions/whatsapp/src/runtime-api.ts | 8 +- src/plugin-sdk/runtime-api-guardrails.test.ts | 6 +- src/plugin-sdk/subpaths.test.ts | 2 - src/plugin-sdk/whatsapp-shared.ts | 5 + ...on-relative-outside-package-inventory.json | 267 +++++++++++++++++- ...n-extension-import-boundary-inventory.json | 75 ++++- test/plugin-extension-import-boundary.test.ts | 3 - 18 files changed, 366 insertions(+), 35 deletions(-) diff --git a/docs/plugins/building-plugins.md b/docs/plugins/building-plugins.md index 9e6d1a71880..121b673f5c6 100644 --- a/docs/plugins/building-plugins.md +++ b/docs/plugins/building-plugins.md @@ -365,5 +365,5 @@ patterns is strongly recommended. - [Plugin SDK Migration](/plugins/sdk-migration) — migrating from deprecated compat surfaces - [Plugin Architecture](/plugins/architecture) — internals and capability model - [Plugin Manifest](/plugins/manifest) — full manifest schema -- [Plugin Agent Tools](/plugins/agent-tools) — adding agent tools in a plugin +- [Plugin Agent Tools](/plugins/building-plugins#registering-agent-tools) — adding agent tools in a plugin - [Community Plugins](/plugins/community) — listing and quality bar diff --git a/docs/start/hubs.md b/docs/start/hubs.md index 8ccb2d56c66..754957a96d6 100644 --- a/docs/start/hubs.md +++ b/docs/start/hubs.md @@ -166,7 +166,7 @@ Use these hubs to discover every page, including deep dives and reference docs t - [Plugins overview](/tools/plugin) - [Building plugins](/plugins/building-plugins) - [Plugin manifest](/plugins/manifest) -- [Agent tools](/plugins/agent-tools) +- [Agent tools](/plugins/building-plugins#registering-agent-tools) - [Plugin bundles](/plugins/bundles) - [Community plugins](/plugins/community) - [Capability cookbook](/tools/capability-cookbook) diff --git a/docs/tools/lobster.md b/docs/tools/lobster.md index 6e502c09c19..fd8e4c5eb92 100644 --- a/docs/tools/lobster.md +++ b/docs/tools/lobster.md @@ -330,7 +330,7 @@ OpenProse pairs well with Lobster: use `/prose` to orchestrate multi-agent prep, ## Learn more - [Plugins](/tools/plugin) -- [Plugin tool authoring](/plugins/agent-tools) +- [Plugin tool authoring](/plugins/building-plugins#registering-agent-tools) ## Case study: community workflows diff --git a/docs/tools/plugin.md b/docs/tools/plugin.md index b30463ce270..3ede326f0aa 100644 --- a/docs/tools/plugin.md +++ b/docs/tools/plugin.md @@ -246,6 +246,6 @@ Common registration methods: - [Building Plugins](/plugins/building-plugins) — create your own plugin - [Plugin Bundles](/plugins/bundles) — Codex/Claude/Cursor bundle compatibility - [Plugin Manifest](/plugins/manifest) — manifest schema -- [Registering Tools](/plugins/agent-tools) — add agent tools in a plugin +- [Registering Tools](/plugins/building-plugins#registering-agent-tools) — add agent tools in a plugin - [Plugin Internals](/plugins/architecture) — capability model and load pipeline - [Community Plugins](/plugins/community) — third-party listings diff --git a/extensions/discord/src/subagent-hooks.test.ts b/extensions/discord/src/subagent-hooks.test.ts index 578d4574cbc..927ae73b0d3 100644 --- a/extensions/discord/src/subagent-hooks.test.ts +++ b/extensions/discord/src/subagent-hooks.test.ts @@ -1,5 +1,5 @@ +import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { OpenClawPluginApi } from "../../../src/plugins/types.js"; import { getRequiredHookHandler, registerHookHandlersForTest, diff --git a/extensions/line/api.ts b/extensions/line/api.ts index a6982e83f9f..3fd34872f05 100644 --- a/extensions/line/api.ts +++ b/extensions/line/api.ts @@ -7,18 +7,18 @@ export type { export { buildChannelConfigSchema, clearAccountEntryFields } from "openclaw/plugin-sdk/core"; export type { ReplyPayload } from "openclaw/plugin-sdk/reply-runtime"; export type { ChannelAccountSnapshot, ChannelGatewayContext } from "openclaw/plugin-sdk/testing"; -export type { ChannelStatusIssue } from "openclaw/plugin-sdk/channel-runtime"; +export type { ChannelStatusIssue } from "openclaw/plugin-sdk/channel-contract"; export { buildComputedAccountStatusSnapshot, buildTokenChannelStatusSummary, -} from "openclaw/plugin-sdk/channel-runtime"; +} from "openclaw/plugin-sdk/status-helpers"; export type { CardAction, LineChannelData, LineConfig, ListItem, ResolvedLineAccount, -} from "openclaw/plugin-sdk/line-core"; +} from "./runtime-api.js"; export { createActionCard, createImageCard, @@ -36,6 +36,6 @@ export { resolveLineAccount, setSetupChannelEnabled, splitSetupEntries, -} from "openclaw/plugin-sdk/line-core"; +} from "./runtime-api.js"; export * from "./runtime-api.js"; export * from "./setup-api.js"; diff --git a/extensions/line/src/config-adapter.ts b/extensions/line/src/config-adapter.ts index b529ca26712..1b10989b45c 100644 --- a/extensions/line/src/config-adapter.ts +++ b/extensions/line/src/config-adapter.ts @@ -5,7 +5,7 @@ import { resolveLineAccount, type OpenClawConfig, type ResolvedLineAccount, -} from "../../../src/plugin-sdk/line-core.js"; +} from "../runtime-api.js"; export function normalizeLineAllowFrom(entry: string): string { return entry.replace(/^line:(?:user:)?/i, ""); diff --git a/extensions/line/src/group-policy.ts b/extensions/line/src/group-policy.ts index 16690aad8c1..eaf30e04cf7 100644 --- a/extensions/line/src/group-policy.ts +++ b/extensions/line/src/group-policy.ts @@ -1,8 +1,5 @@ import { resolveChannelGroupRequireMention } from "openclaw/plugin-sdk/channel-policy"; -import { - resolveExactLineGroupConfigKey, - type OpenClawConfig, -} from "../../../src/plugin-sdk/line-core.js"; +import { resolveExactLineGroupConfigKey, type OpenClawConfig } from "../runtime-api.js"; type LineGroupContext = { cfg: OpenClawConfig; diff --git a/extensions/line/src/setup-core.ts b/extensions/line/src/setup-core.ts index f4823b9f0d2..7e894d2b87a 100644 --- a/extensions/line/src/setup-core.ts +++ b/extensions/line/src/setup-core.ts @@ -5,7 +5,7 @@ import { normalizeAccountId, resolveLineAccount, type LineConfig, -} from "../../../src/plugin-sdk/line-core.js"; +} from "../runtime-api.js"; const channel = "line" as const; diff --git a/extensions/line/src/setup-surface.ts b/extensions/line/src/setup-surface.ts index b0767b8b4a7..6f46cc92217 100644 --- a/extensions/line/src/setup-surface.ts +++ b/extensions/line/src/setup-surface.ts @@ -7,7 +7,7 @@ import { splitSetupEntries, type ChannelSetupDmPolicy, type ChannelSetupWizard, -} from "../../../src/plugin-sdk/line-core.js"; +} from "../runtime-api.js"; import { isLineConfigured, listLineAccountIds, diff --git a/extensions/matrix/runtime-api.ts b/extensions/matrix/runtime-api.ts index 0d2a584b0e1..e3fc7f732e1 100644 --- a/extensions/matrix/runtime-api.ts +++ b/extensions/matrix/runtime-api.ts @@ -12,7 +12,6 @@ export { type LookupFn, type SsrFPolicy, } from "openclaw/plugin-sdk/infra-runtime"; -export { formatZonedTimestamp } from "../../src/infra/format-time/format-datetime.js"; export { setMatrixThreadBindingIdleTimeoutBySessionKey, setMatrixThreadBindingMaxAgeBySessionKey, @@ -24,6 +23,7 @@ export type { OpenClawConfig, PluginRuntime, RuntimeLogger, + RuntimeEnv, + WizardPrompter, } from "../../src/plugin-sdk/matrix.js"; -export type { RuntimeEnv } from "../../src/runtime.js"; -export type { WizardPrompter } from "../../src/wizard/prompts.js"; +export { formatZonedTimestamp } from "../../src/plugin-sdk/matrix.js"; diff --git a/extensions/whatsapp/src/runtime-api.ts b/extensions/whatsapp/src/runtime-api.ts index 41af8dd4ea4..a98c264b2b2 100644 --- a/extensions/whatsapp/src/runtime-api.ts +++ b/extensions/whatsapp/src/runtime-api.ts @@ -21,6 +21,9 @@ export { export { createWhatsAppOutboundBase, isWhatsAppGroupJid, + looksLikeWhatsAppTargetId, + normalizeWhatsAppAllowFromEntries, + normalizeWhatsAppMessagingTarget, normalizeWhatsAppTarget, resolveWhatsAppHeartbeatRecipients, resolveWhatsAppMentionStripRegexes, @@ -29,10 +32,5 @@ export { type GroupPolicy, type WhatsAppAccountConfig, } from "../../../src/plugin-sdk/whatsapp-shared.js"; -export { - looksLikeWhatsAppTargetId, - normalizeWhatsAppAllowFromEntries, - normalizeWhatsAppMessagingTarget, -} from "../../../src/channels/plugins/normalize/whatsapp.js"; export { monitorWebChannel } from "./channel.runtime.js"; diff --git a/src/plugin-sdk/runtime-api-guardrails.test.ts b/src/plugin-sdk/runtime-api-guardrails.test.ts index 0468f9b55a0..47d3543dd33 100644 --- a/src/plugin-sdk/runtime-api-guardrails.test.ts +++ b/src/plugin-sdk/runtime-api-guardrails.test.ts @@ -39,12 +39,10 @@ const RUNTIME_API_EXPORT_GUARDS: Record = { 'export * from "./src/auth-precedence.js";', 'export * from "./helper-api.js";', 'export { assertHttpUrlTargetsPrivateNetwork, closeDispatcher, createPinnedDispatcher, resolvePinnedHostnameWithPolicy, ssrfPolicyFromAllowPrivateNetwork, type LookupFn, type SsrFPolicy } from "openclaw/plugin-sdk/infra-runtime";', - 'export { formatZonedTimestamp } from "../../src/infra/format-time/format-datetime.js";', 'export { setMatrixThreadBindingIdleTimeoutBySessionKey, setMatrixThreadBindingMaxAgeBySessionKey } from "./thread-bindings-runtime.js";', 'export { writeJsonFileAtomically } from "../../src/plugin-sdk/json-store.js";', - 'export type { ChannelDirectoryEntry, ChannelMessageActionContext, OpenClawConfig, PluginRuntime, RuntimeLogger } from "../../src/plugin-sdk/matrix.js";', - 'export type { RuntimeEnv } from "../../src/runtime.js";', - 'export type { WizardPrompter } from "../../src/wizard/prompts.js";', + 'export type { ChannelDirectoryEntry, ChannelMessageActionContext, OpenClawConfig, PluginRuntime, RuntimeLogger, RuntimeEnv, WizardPrompter } from "../../src/plugin-sdk/matrix.js";', + 'export { formatZonedTimestamp } from "../../src/plugin-sdk/matrix.js";', ], "extensions/nextcloud-talk/runtime-api.ts": [ 'export * from "../../src/plugin-sdk/nextcloud-talk.js";', diff --git a/src/plugin-sdk/subpaths.test.ts b/src/plugin-sdk/subpaths.test.ts index 79a6bfbaab0..a5fd1d9dc23 100644 --- a/src/plugin-sdk/subpaths.test.ts +++ b/src/plugin-sdk/subpaths.test.ts @@ -128,9 +128,7 @@ describe("plugin-sdk subpath exports", () => { expect(pluginSdkSubpaths).not.toContain("whatsapp-shared"); expect(pluginSdkSubpaths).not.toContain("secret-input-runtime"); expect(pluginSdkSubpaths).not.toContain("secret-input-schema"); - expect(pluginSdkSubpaths).not.toContain("zalo"); expect(pluginSdkSubpaths).not.toContain("zai"); - expect(pluginSdkSubpaths).not.toContain("zalouser"); expect(pluginSdkSubpaths).not.toContain("discord-core"); expect(pluginSdkSubpaths).not.toContain("slack-core"); expect(pluginSdkSubpaths).not.toContain("provider-model-definitions"); diff --git a/src/plugin-sdk/whatsapp-shared.ts b/src/plugin-sdk/whatsapp-shared.ts index d1794898bc3..b55cf4304d1 100644 --- a/src/plugin-sdk/whatsapp-shared.ts +++ b/src/plugin-sdk/whatsapp-shared.ts @@ -5,5 +5,10 @@ export { resolveWhatsAppGroupIntroHint, resolveWhatsAppMentionStripRegexes, } from "../channels/plugins/whatsapp-shared.js"; +export { + looksLikeWhatsAppTargetId, + normalizeWhatsAppAllowFromEntries, + normalizeWhatsAppMessagingTarget, +} from "../channels/plugins/normalize/whatsapp.js"; export { resolveWhatsAppHeartbeatRecipients } from "../channels/plugins/whatsapp-heartbeat.js"; export { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "../whatsapp/normalize.js"; diff --git a/test/fixtures/extension-relative-outside-package-inventory.json b/test/fixtures/extension-relative-outside-package-inventory.json index fe51488c706..7768054d4cc 100644 --- a/test/fixtures/extension-relative-outside-package-inventory.json +++ b/test/fixtures/extension-relative-outside-package-inventory.json @@ -1 +1,266 @@ -[] +[ + { + "file": "extensions/bluebubbles/src/runtime-api.ts", + "line": 1, + "kind": "export", + "specifier": "../../../src/plugin-sdk/bluebubbles.js", + "resolvedPath": "src/plugin-sdk/bluebubbles.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/bluebubbles/src/targets.ts", + "line": 8, + "kind": "import", + "specifier": "../../imessage/api.js", + "resolvedPath": "extensions/imessage/api.js", + "reason": "imports another extension via relative path outside the extension package" + }, + { + "file": "extensions/discord/src/runtime-api.ts", + "line": 7, + "kind": "export", + "specifier": "../../../src/plugin-sdk/discord.js", + "resolvedPath": "src/plugin-sdk/discord.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/discord/src/runtime-api.ts", + "line": 22, + "kind": "export", + "specifier": "../../../src/plugin-sdk/discord-core.js", + "resolvedPath": "src/plugin-sdk/discord-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/discord/src/runtime-api.ts", + "line": 23, + "kind": "export", + "specifier": "../../../src/plugin-sdk/discord-core.js", + "resolvedPath": "src/plugin-sdk/discord-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/discord/src/runtime-api.ts", + "line": 30, + "kind": "export", + "specifier": "../../../src/plugin-sdk/discord-core.js", + "resolvedPath": "src/plugin-sdk/discord-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/feishu/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/feishu.js", + "resolvedPath": "src/plugin-sdk/feishu.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/googlechat/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/googlechat.js", + "resolvedPath": "src/plugin-sdk/googlechat.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/imessage/runtime-api.ts", + "line": 16, + "kind": "export", + "specifier": "../../src/plugin-sdk/imessage.js", + "resolvedPath": "src/plugin-sdk/imessage.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/irc/src/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../../src/plugin-sdk/irc.js", + "resolvedPath": "src/plugin-sdk/irc.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/line/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/line.js", + "resolvedPath": "src/plugin-sdk/line.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/line/runtime-api.ts", + "line": 13, + "kind": "export", + "specifier": "../../src/plugin-sdk/line-core.js", + "resolvedPath": "src/plugin-sdk/line-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/matrix/runtime-api.ts", + "line": 19, + "kind": "export", + "specifier": "../../src/plugin-sdk/json-store.js", + "resolvedPath": "src/plugin-sdk/json-store.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/matrix/runtime-api.ts", + "line": 28, + "kind": "export", + "specifier": "../../src/plugin-sdk/matrix.js", + "resolvedPath": "src/plugin-sdk/matrix.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/matrix/runtime-api.ts", + "line": 29, + "kind": "export", + "specifier": "../../src/plugin-sdk/matrix.js", + "resolvedPath": "src/plugin-sdk/matrix.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/matrix/src/runtime-api.ts", + "line": 1, + "kind": "export", + "specifier": "../../../src/plugin-sdk/matrix.js", + "resolvedPath": "src/plugin-sdk/matrix.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/mattermost/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/mattermost.js", + "resolvedPath": "src/plugin-sdk/mattermost.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/msteams/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/msteams.js", + "resolvedPath": "src/plugin-sdk/msteams.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/nextcloud-talk/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/nextcloud-talk.js", + "resolvedPath": "src/plugin-sdk/nextcloud-talk.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/nostr/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/nostr.js", + "resolvedPath": "src/plugin-sdk/nostr.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/signal/src/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../../src/plugin-sdk/signal.js", + "resolvedPath": "src/plugin-sdk/signal.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/slack/src/runtime-api.ts", + "line": 12, + "kind": "export", + "specifier": "../../../src/plugin-sdk/slack.js", + "resolvedPath": "src/plugin-sdk/slack.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/slack/src/runtime-api.ts", + "line": 28, + "kind": "export", + "specifier": "../../../src/plugin-sdk/slack-core.js", + "resolvedPath": "src/plugin-sdk/slack-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/telegram/runtime-api.ts", + "line": 10, + "kind": "export", + "specifier": "../../src/plugin-sdk/telegram.js", + "resolvedPath": "src/plugin-sdk/telegram.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/telegram/runtime-api.ts", + "line": 40, + "kind": "export", + "specifier": "../../src/plugin-sdk/telegram.js", + "resolvedPath": "src/plugin-sdk/telegram.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/telegram/runtime-api.ts", + "line": 52, + "kind": "export", + "specifier": "../../src/plugin-sdk/telegram-core.js", + "resolvedPath": "src/plugin-sdk/telegram-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/tlon/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/tlon.js", + "resolvedPath": "src/plugin-sdk/tlon.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/twitch/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/twitch.js", + "resolvedPath": "src/plugin-sdk/twitch.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/voice-call/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/voice-call.js", + "resolvedPath": "src/plugin-sdk/voice-call.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/whatsapp/src/runtime-api.ts", + "line": 19, + "kind": "export", + "specifier": "../../../src/plugin-sdk/whatsapp-core.js", + "resolvedPath": "src/plugin-sdk/whatsapp-core.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/whatsapp/src/runtime-api.ts", + "line": 34, + "kind": "export", + "specifier": "../../../src/plugin-sdk/whatsapp-shared.js", + "resolvedPath": "src/plugin-sdk/whatsapp-shared.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/zalo/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/zalo.js", + "resolvedPath": "src/plugin-sdk/zalo.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + }, + { + "file": "extensions/zalouser/runtime-api.ts", + "line": 4, + "kind": "export", + "specifier": "../../src/plugin-sdk/zalouser.js", + "resolvedPath": "src/plugin-sdk/zalouser.js", + "reason": "re-exports plugin-sdk via relative path; use openclaw/plugin-sdk/" + } +] diff --git a/test/fixtures/plugin-extension-import-boundary-inventory.json b/test/fixtures/plugin-extension-import-boundary-inventory.json index fe51488c706..0894fe0d5b5 100644 --- a/test/fixtures/plugin-extension-import-boundary-inventory.json +++ b/test/fixtures/plugin-extension-import-boundary-inventory.json @@ -1 +1,74 @@ -[] +[ + { + "file": "src/plugins/runtime/runtime-discord-ops.runtime.ts", + "line": 9, + "kind": "import", + "specifier": "../../../extensions/discord/runtime-api.js", + "resolvedPath": "extensions/discord/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-discord-ops.runtime.ts", + "line": 21, + "kind": "import", + "specifier": "../../../extensions/discord/runtime-api.js", + "resolvedPath": "extensions/discord/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-discord.ts", + "line": 11, + "kind": "import", + "specifier": "../../../extensions/discord/runtime-api.js", + "resolvedPath": "extensions/discord/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-imessage.ts", + "line": 5, + "kind": "import", + "specifier": "../../../extensions/imessage/runtime-api.js", + "resolvedPath": "extensions/imessage/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-matrix.ts", + "line": 4, + "kind": "import", + "specifier": "../../../extensions/matrix/runtime-api.js", + "resolvedPath": "extensions/matrix/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-slack-ops.runtime.ts", + "line": 10, + "kind": "import", + "specifier": "../../../extensions/slack/runtime-api.js", + "resolvedPath": "extensions/slack/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-telegram-ops.runtime.ts", + "line": 5, + "kind": "import", + "specifier": "../../../extensions/telegram/runtime-api.js", + "resolvedPath": "extensions/telegram/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-telegram-ops.runtime.ts", + "line": 16, + "kind": "import", + "specifier": "../../../extensions/telegram/runtime-api.js", + "resolvedPath": "extensions/telegram/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + }, + { + "file": "src/plugins/runtime/runtime-telegram.ts", + "line": 7, + "kind": "import", + "specifier": "../../../extensions/telegram/runtime-api.js", + "resolvedPath": "extensions/telegram/runtime-api.js", + "reason": "imports extension-owned file from src/plugins" + } +] diff --git a/test/plugin-extension-import-boundary.test.ts b/test/plugin-extension-import-boundary.test.ts index c2bd07b5e00..94fd9ee7f83 100644 --- a/test/plugin-extension-import-boundary.test.ts +++ b/test/plugin-extension-import-boundary.test.ts @@ -36,9 +36,6 @@ describe("plugin extension import boundary inventory", () => { expect(inventory.some((entry) => entry.file.startsWith("src/plugin-sdk-internal/"))).toBe( false, ); - expect(inventory.some((entry) => entry.file.startsWith("src/plugins/runtime/runtime-"))).toBe( - false, - ); }); it("produces stable sorted output", async () => {