diff --git a/extensions/discord/src/onboarding.ts b/extensions/discord/src/onboarding.ts index f4883b1254f..061f4614241 100644 --- a/extensions/discord/src/onboarding.ts +++ b/extensions/discord/src/onboarding.ts @@ -5,9 +5,9 @@ import type { import { configureChannelAccessWithAllowlist } from "../../../src/channels/plugins/onboarding/channel-access-configure.js"; import { applySingleTokenPromptResult, - parseMentionOrPrefixedId, noteChannelLookupFailure, noteChannelLookupSummary, + parseMentionOrPrefixedId, patchChannelConfigForAccount, promptLegacyChannelAllowFrom, resolveAccountIdForConfigure, diff --git a/src/channels/plugins/onboarding/imessage.ts b/extensions/imessage/src/onboarding.ts similarity index 91% rename from src/channels/plugins/onboarding/imessage.ts rename to extensions/imessage/src/onboarding.ts index b4941ebd82e..85b3dc43be4 100644 --- a/src/channels/plugins/onboarding/imessage.ts +++ b/extensions/imessage/src/onboarding.ts @@ -1,14 +1,7 @@ -import { - listIMessageAccountIds, - resolveDefaultIMessageAccountId, - resolveIMessageAccount, -} from "../../../../extensions/imessage/src/accounts.js"; -import { normalizeIMessageHandle } from "../../../../extensions/imessage/src/targets.js"; -import { detectBinary } from "../../../commands/onboard-helpers.js"; -import type { OpenClawConfig } from "../../../config/config.js"; -import { formatDocsLink } from "../../../terminal/links.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; +import type { + ChannelOnboardingAdapter, + ChannelOnboardingDmPolicy, +} from "../../../src/channels/plugins/onboarding-types.js"; import { parseOnboardingEntriesAllowingWildcard, patchChannelConfigForAccount, @@ -16,7 +9,17 @@ import { resolveAccountIdForConfigure, setChannelDmPolicyWithAllowFrom, setOnboardingChannelEnabled, -} from "./helpers.js"; +} from "../../../src/channels/plugins/onboarding/helpers.js"; +import { detectBinary } from "../../../src/commands/onboard-helpers.js"; +import type { OpenClawConfig } from "../../../src/config/config.js"; +import { formatDocsLink } from "../../../src/terminal/links.js"; +import type { WizardPrompter } from "../../../src/wizard/prompts.js"; +import { + listIMessageAccountIds, + resolveDefaultIMessageAccountId, + resolveIMessageAccount, +} from "./accounts.js"; +import { normalizeIMessageHandle } from "./targets.js"; const channel = "imessage" as const; diff --git a/src/channels/plugins/onboarding/signal.ts b/extensions/signal/src/onboarding.ts similarity index 84% rename from src/channels/plugins/onboarding/signal.ts rename to extensions/signal/src/onboarding.ts index 6609d4bbd76..7279ea1977a 100644 --- a/src/channels/plugins/onboarding/signal.ts +++ b/extensions/signal/src/onboarding.ts @@ -1,17 +1,27 @@ +import type { + ChannelOnboardingAdapter, + ChannelOnboardingDmPolicy, +} from "../../../src/channels/plugins/onboarding-types.js"; +import { + parseOnboardingEntriesAllowingWildcard, + patchChannelConfigForAccount, + promptParsedAllowFromForScopedChannel, + resolveAccountIdForConfigure, + setChannelDmPolicyWithAllowFrom, + setOnboardingChannelEnabled, +} from "../../../src/channels/plugins/onboarding/helpers.js"; +import { formatCliCommand } from "../../../src/cli/command-format.js"; +import { detectBinary } from "../../../src/commands/onboard-helpers.js"; +import { installSignalCli } from "../../../src/commands/signal-install.js"; +import type { OpenClawConfig } from "../../../src/config/config.js"; +import { formatDocsLink } from "../../../src/terminal/links.js"; +import { normalizeE164 } from "../../../src/utils.js"; +import type { WizardPrompter } from "../../../src/wizard/prompts.js"; import { listSignalAccountIds, resolveDefaultSignalAccountId, resolveSignalAccount, -} from "../../../../extensions/signal/src/accounts.js"; -import { formatCliCommand } from "../../../cli/command-format.js"; -import { detectBinary } from "../../../commands/onboard-helpers.js"; -import { installSignalCli } from "../../../commands/signal-install.js"; -import type { OpenClawConfig } from "../../../config/config.js"; -import { formatDocsLink } from "../../../terminal/links.js"; -import { normalizeE164 } from "../../../utils.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; -import * as onboardingHelpers from "./helpers.js"; +} from "./accounts.js"; const channel = "signal" as const; const MIN_E164_DIGITS = 5; @@ -41,7 +51,7 @@ function isUuidLike(value: string): boolean { } export function parseSignalAllowFromEntries(raw: string): { entries: string[]; error?: string } { - return onboardingHelpers.parseOnboardingEntriesAllowingWildcard(raw, (entry) => { + return parseOnboardingEntriesAllowingWildcard(raw, (entry) => { if (entry.toLowerCase().startsWith("uuid:")) { const id = entry.slice("uuid:".length).trim(); if (!id) { @@ -65,7 +75,7 @@ async function promptSignalAllowFrom(params: { prompter: WizardPrompter; accountId?: string; }): Promise { - return onboardingHelpers.promptParsedAllowFromForScopedChannel({ + return promptParsedAllowFromForScopedChannel({ cfg: params.cfg, channel: "signal", accountId: params.accountId, @@ -97,7 +107,7 @@ const dmPolicy: ChannelOnboardingDmPolicy = { allowFromKey: "channels.signal.allowFrom", getCurrent: (cfg) => cfg.channels?.signal?.dmPolicy ?? "pairing", setPolicy: (cfg, policy) => - onboardingHelpers.setChannelDmPolicyWithAllowFrom({ + setChannelDmPolicyWithAllowFrom({ cfg, channel: "signal", dmPolicy: policy, @@ -133,7 +143,7 @@ export const signalOnboardingAdapter: ChannelOnboardingAdapter = { options, }) => { const defaultSignalAccountId = resolveDefaultSignalAccountId(cfg); - const signalAccountId = await onboardingHelpers.resolveAccountIdForConfigure({ + const signalAccountId = await resolveAccountIdForConfigure({ cfg, prompter, label: "Signal", @@ -216,7 +226,7 @@ export const signalOnboardingAdapter: ChannelOnboardingAdapter = { } if (account) { - next = onboardingHelpers.patchChannelConfigForAccount({ + next = patchChannelConfigForAccount({ cfg: next, channel: "signal", accountId: signalAccountId, @@ -240,5 +250,5 @@ export const signalOnboardingAdapter: ChannelOnboardingAdapter = { return { cfg: next, accountId: signalAccountId }; }, dmPolicy, - disable: (cfg) => onboardingHelpers.setOnboardingChannelEnabled(cfg, channel, false), + disable: (cfg) => setOnboardingChannelEnabled(cfg, channel, false), }; diff --git a/src/channels/plugins/onboarding/slack.ts b/extensions/slack/src/onboarding.ts similarity index 92% rename from src/channels/plugins/onboarding/slack.ts rename to extensions/slack/src/onboarding.ts index 8b956edcd23..552c8a9d19b 100644 --- a/src/channels/plugins/onboarding/slack.ts +++ b/extensions/slack/src/onboarding.ts @@ -1,22 +1,12 @@ -import { inspectSlackAccount } from "../../../../extensions/slack/src/account-inspect.js"; +import type { + ChannelOnboardingAdapter, + ChannelOnboardingDmPolicy, +} from "../../../src/channels/plugins/onboarding-types.js"; +import { configureChannelAccessWithAllowlist } from "../../../src/channels/plugins/onboarding/channel-access-configure.js"; import { - listSlackAccountIds, - resolveDefaultSlackAccountId, - resolveSlackAccount, -} from "../../../../extensions/slack/src/accounts.js"; -import { resolveSlackChannelAllowlist } from "../../../../extensions/slack/src/resolve-channels.js"; -import { resolveSlackUserAllowlist } from "../../../../extensions/slack/src/resolve-users.js"; -import type { OpenClawConfig } from "../../../config/config.js"; -import { hasConfiguredSecretInput } from "../../../config/types.secrets.js"; -import { DEFAULT_ACCOUNT_ID } from "../../../routing/session-key.js"; -import { formatDocsLink } from "../../../terminal/links.js"; -import type { WizardPrompter } from "../../../wizard/prompts.js"; -import type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy } from "../onboarding-types.js"; -import { configureChannelAccessWithAllowlist } from "./channel-access-configure.js"; -import { - parseMentionOrPrefixedId, noteChannelLookupFailure, noteChannelLookupSummary, + parseMentionOrPrefixedId, patchChannelConfigForAccount, promptLegacyChannelAllowFrom, resolveAccountIdForConfigure, @@ -25,7 +15,20 @@ import { setAccountGroupPolicyForChannel, setLegacyChannelDmPolicyWithAllowFrom, setOnboardingChannelEnabled, -} from "./helpers.js"; +} from "../../../src/channels/plugins/onboarding/helpers.js"; +import type { OpenClawConfig } from "../../../src/config/config.js"; +import { hasConfiguredSecretInput } from "../../../src/config/types.secrets.js"; +import { DEFAULT_ACCOUNT_ID } from "../../../src/routing/session-key.js"; +import { formatDocsLink } from "../../../src/terminal/links.js"; +import type { WizardPrompter } from "../../../src/wizard/prompts.js"; +import { inspectSlackAccount } from "./account-inspect.js"; +import { + listSlackAccountIds, + resolveDefaultSlackAccountId, + resolveSlackAccount, +} from "./accounts.js"; +import { resolveSlackChannelAllowlist } from "./resolve-channels.js"; +import { resolveSlackUserAllowlist } from "./resolve-users.js"; const channel = "slack" as const; diff --git a/extensions/telegram/src/onboarding.ts b/extensions/telegram/src/onboarding.ts index c555b748d2d..f5911e304ed 100644 --- a/extensions/telegram/src/onboarding.ts +++ b/extensions/telegram/src/onboarding.ts @@ -5,8 +5,8 @@ import type { import { applySingleTokenPromptResult, patchChannelConfigForAccount, - promptSingleChannelSecretInput, promptResolvedAllowFrom, + promptSingleChannelSecretInput, resolveAccountIdForConfigure, resolveOnboardingAccountId, setChannelDmPolicyWithAllowFrom, diff --git a/src/channels/plugins/onboarding/discord.ts b/src/channels/plugins/onboarding/discord.ts deleted file mode 100644 index 34fd42d3b98..00000000000 --- a/src/channels/plugins/onboarding/discord.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Shim: re-exports from extension -export * from "../../../../extensions/discord/src/onboarding.js"; diff --git a/src/channels/plugins/onboarding/imessage.test.ts b/src/channels/plugins/onboarding/imessage.test.ts index 266408a612b..6825cdc67e0 100644 --- a/src/channels/plugins/onboarding/imessage.test.ts +++ b/src/channels/plugins/onboarding/imessage.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { parseIMessageAllowFromEntries } from "./imessage.js"; +import { parseIMessageAllowFromEntries } from "../../../../extensions/imessage/src/onboarding.js"; describe("parseIMessageAllowFromEntries", () => { it("parses handles and chat targets", () => { diff --git a/src/channels/plugins/onboarding/signal.test.ts b/src/channels/plugins/onboarding/signal.test.ts index 920b68f3149..e0b83003db7 100644 --- a/src/channels/plugins/onboarding/signal.test.ts +++ b/src/channels/plugins/onboarding/signal.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from "vitest"; -import { normalizeSignalAccountInput, parseSignalAllowFromEntries } from "./signal.js"; +import { + normalizeSignalAccountInput, + parseSignalAllowFromEntries, +} from "../../../../extensions/signal/src/onboarding.js"; describe("normalizeSignalAccountInput", () => { it("normalizes valid E.164 numbers", () => { diff --git a/src/channels/plugins/onboarding/telegram.ts b/src/channels/plugins/onboarding/telegram.ts deleted file mode 100644 index 772f7d1ce71..00000000000 --- a/src/channels/plugins/onboarding/telegram.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "../../../../extensions/telegram/src/onboarding.js"; diff --git a/src/channels/plugins/onboarding/whatsapp.ts b/src/channels/plugins/onboarding/whatsapp.ts deleted file mode 100644 index e2694f8d7c5..00000000000 --- a/src/channels/plugins/onboarding/whatsapp.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Shim: re-exports from extensions/whatsapp/src/onboarding.ts -export * from "../../../../extensions/whatsapp/src/onboarding.js"; diff --git a/src/channels/plugins/plugins-channel.test.ts b/src/channels/plugins/plugins-channel.test.ts index 37fea7e032d..76452137682 100644 --- a/src/channels/plugins/plugins-channel.test.ts +++ b/src/channels/plugins/plugins-channel.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it, vi } from "vitest"; +import { normalizeSignalAccountInput } from "../../../extensions/signal/src/onboarding.js"; import type { OpenClawConfig } from "../../config/config.js"; import { normalizeIMessageMessagingTarget } from "./normalize/imessage.js"; import { looksLikeSignalTargetId, normalizeSignalMessagingTarget } from "./normalize/signal.js"; -import { normalizeSignalAccountInput } from "./onboarding/signal.js"; import { telegramOutbound } from "./outbound/telegram.js"; import { whatsappOutbound } from "./outbound/whatsapp.js"; diff --git a/src/commands/onboarding/registry.ts b/src/commands/onboarding/registry.ts index 814eab75ea2..cd660350911 100644 --- a/src/commands/onboarding/registry.ts +++ b/src/commands/onboarding/registry.ts @@ -1,10 +1,10 @@ +import { discordOnboardingAdapter } from "../../../extensions/discord/src/onboarding.js"; +import { imessageOnboardingAdapter } from "../../../extensions/imessage/src/onboarding.js"; +import { signalOnboardingAdapter } from "../../../extensions/signal/src/onboarding.js"; +import { slackOnboardingAdapter } from "../../../extensions/slack/src/onboarding.js"; +import { telegramOnboardingAdapter } from "../../../extensions/telegram/src/onboarding.js"; +import { whatsappOnboardingAdapter } from "../../../extensions/whatsapp/src/onboarding.js"; import { listChannelPlugins } from "../../channels/plugins/index.js"; -import { discordOnboardingAdapter } from "../../channels/plugins/onboarding/discord.js"; -import { imessageOnboardingAdapter } from "../../channels/plugins/onboarding/imessage.js"; -import { signalOnboardingAdapter } from "../../channels/plugins/onboarding/signal.js"; -import { slackOnboardingAdapter } from "../../channels/plugins/onboarding/slack.js"; -import { telegramOnboardingAdapter } from "../../channels/plugins/onboarding/telegram.js"; -import { whatsappOnboardingAdapter } from "../../channels/plugins/onboarding/whatsapp.js"; import type { ChannelChoice } from "../onboard-types.js"; import type { ChannelOnboardingAdapter } from "./types.js"; diff --git a/src/plugin-sdk/discord.ts b/src/plugin-sdk/discord.ts index 5b4897f46e9..4a84e48a743 100644 --- a/src/plugin-sdk/discord.ts +++ b/src/plugin-sdk/discord.ts @@ -1,5 +1,6 @@ export type { ChannelMessageActionAdapter } from "../channels/plugins/types.js"; export type { OpenClawConfig } from "../config/config.js"; +export type { DiscordAccountConfig, DiscordActionConfig } from "../config/types.js"; export type { InspectedDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; export type { ResolvedDiscordAccount } from "../../extensions/discord/src/accounts.js"; export * from "./channel-plugin-common.js"; @@ -34,7 +35,7 @@ export { resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, } from "../channels/plugins/group-mentions.js"; -export { discordOnboardingAdapter } from "../channels/plugins/onboarding/discord.js"; +export { discordOnboardingAdapter } from "../../extensions/discord/src/onboarding.js"; export { DiscordConfigSchema } from "../config/zod-schema.providers-core.js"; export { diff --git a/src/plugin-sdk/imessage.ts b/src/plugin-sdk/imessage.ts index 4c3160e95cb..1e231babc58 100644 --- a/src/plugin-sdk/imessage.ts +++ b/src/plugin-sdk/imessage.ts @@ -1,4 +1,5 @@ export type { ResolvedIMessageAccount } from "../../extensions/imessage/src/accounts.js"; +export type { IMessageAccountConfig } from "../config/types.js"; export * from "./channel-plugin-common.js"; export { listIMessageAccountIds, @@ -23,7 +24,7 @@ export { resolveIMessageGroupRequireMention, resolveIMessageGroupToolPolicy, } from "../channels/plugins/group-mentions.js"; -export { imessageOnboardingAdapter } from "../channels/plugins/onboarding/imessage.js"; +export { imessageOnboardingAdapter } from "../../extensions/imessage/src/onboarding.js"; export { IMessageConfigSchema } from "../config/zod-schema.providers-core.js"; export { resolveChannelMediaMaxBytes } from "../channels/plugins/media-limits.js"; diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index 3d6a456b7f3..8b4a4f28a4e 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -664,7 +664,7 @@ export { export { inspectDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; export type { InspectedDiscordAccount } from "../../extensions/discord/src/account-inspect.js"; export { collectDiscordAuditChannelIds } from "../../extensions/discord/src/audit.js"; -export { discordOnboardingAdapter } from "../channels/plugins/onboarding/discord.js"; +export { discordOnboardingAdapter } from "../../extensions/discord/src/onboarding.js"; export { looksLikeDiscordTargetId, normalizeDiscordMessagingTarget, @@ -679,7 +679,7 @@ export { resolveIMessageAccount, type ResolvedIMessageAccount, } from "../../extensions/imessage/src/accounts.js"; -export { imessageOnboardingAdapter } from "../channels/plugins/onboarding/imessage.js"; +export { imessageOnboardingAdapter } from "../../extensions/imessage/src/onboarding.js"; export { looksLikeIMessageTargetId, normalizeIMessageMessagingTarget, @@ -713,7 +713,7 @@ export { extractSlackToolSend, listSlackMessageActions, } from "../../extensions/slack/src/message-actions.js"; -export { slackOnboardingAdapter } from "../channels/plugins/onboarding/slack.js"; +export { slackOnboardingAdapter } from "../../extensions/slack/src/onboarding.js"; export { looksLikeSlackTargetId, normalizeSlackMessagingTarget, @@ -729,7 +729,7 @@ export { } from "../../extensions/telegram/src/accounts.js"; export { inspectTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; export type { InspectedTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; -export { telegramOnboardingAdapter } from "../channels/plugins/onboarding/telegram.js"; +export { telegramOnboardingAdapter } from "../../extensions/telegram/src/onboarding.js"; export { looksLikeTelegramTargetId, normalizeTelegramMessagingTarget, @@ -748,7 +748,7 @@ export { resolveSignalAccount, type ResolvedSignalAccount, } from "../../extensions/signal/src/accounts.js"; -export { signalOnboardingAdapter } from "../channels/plugins/onboarding/signal.js"; +export { signalOnboardingAdapter } from "../../extensions/signal/src/onboarding.js"; export { looksLikeSignalTargetId, normalizeSignalMessagingTarget, diff --git a/src/plugin-sdk/signal.ts b/src/plugin-sdk/signal.ts index d8be4ddc9e4..7a44633b8e6 100644 --- a/src/plugin-sdk/signal.ts +++ b/src/plugin-sdk/signal.ts @@ -1,5 +1,6 @@ export type { ChannelMessageActionAdapter } from "../channels/plugins/types.js"; export type { ResolvedSignalAccount } from "../../extensions/signal/src/accounts.js"; +export type { SignalAccountConfig } from "../config/types.js"; export * from "./channel-plugin-common.js"; export { listSignalAccountIds, @@ -15,7 +16,7 @@ export { resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, } from "../config/runtime-group-policy.js"; -export { signalOnboardingAdapter } from "../channels/plugins/onboarding/signal.js"; +export { signalOnboardingAdapter } from "../../extensions/signal/src/onboarding.js"; export { SignalConfigSchema } from "../config/zod-schema.providers-core.js"; export { normalizeE164 } from "../utils.js"; diff --git a/src/plugin-sdk/slack.ts b/src/plugin-sdk/slack.ts index 740a0fabef0..c05d9786d5c 100644 --- a/src/plugin-sdk/slack.ts +++ b/src/plugin-sdk/slack.ts @@ -1,4 +1,5 @@ export type { OpenClawConfig } from "../config/config.js"; +export type { SlackAccountConfig } from "../config/types.slack.js"; export type { InspectedSlackAccount } from "../../extensions/slack/src/account-inspect.js"; export type { ResolvedSlackAccount } from "../../extensions/slack/src/accounts.js"; export * from "./channel-plugin-common.js"; @@ -38,7 +39,7 @@ export { resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, } from "../channels/plugins/group-mentions.js"; -export { slackOnboardingAdapter } from "../channels/plugins/onboarding/slack.js"; +export { slackOnboardingAdapter } from "../../extensions/slack/src/onboarding.js"; export { SlackConfigSchema } from "../config/zod-schema.providers-core.js"; export { handleSlackMessageAction } from "./slack-message-actions.js"; diff --git a/src/plugin-sdk/telegram.ts b/src/plugin-sdk/telegram.ts index d816ca4125d..f9d8d0ed723 100644 --- a/src/plugin-sdk/telegram.ts +++ b/src/plugin-sdk/telegram.ts @@ -7,6 +7,7 @@ export type { ChannelPlugin } from "../channels/plugins/types.plugin.js"; export type { OpenClawConfig } from "../config/config.js"; export type { PluginRuntime } from "../plugins/runtime/types.js"; export type { OpenClawPluginApi } from "../plugins/types.js"; +export type { TelegramAccountConfig, TelegramActionConfig } from "../config/types.js"; export type { InspectedTelegramAccount } from "../../extensions/telegram/src/account-inspect.js"; export type { ResolvedTelegramAccount } from "../../extensions/telegram/src/accounts.js"; export type { TelegramProbe } from "../../extensions/telegram/src/probe.js"; @@ -63,7 +64,7 @@ export { resolveTelegramGroupRequireMention, resolveTelegramGroupToolPolicy, } from "../channels/plugins/group-mentions.js"; -export { telegramOnboardingAdapter } from "../channels/plugins/onboarding/telegram.js"; +export { telegramOnboardingAdapter } from "../../extensions/telegram/src/onboarding.js"; export { TelegramConfigSchema } from "../config/zod-schema.providers-core.js"; export { buildTokenChannelStatusSummary } from "./status-helpers.js";