Channels: move onboarding adapters into extensions
This commit is contained in:
parent
392ddb56e2
commit
8b001d6e4d
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<OpenClawConfig> {
|
||||
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),
|
||||
};
|
||||
@ -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;
|
||||
|
||||
@ -5,8 +5,8 @@ import type {
|
||||
import {
|
||||
applySingleTokenPromptResult,
|
||||
patchChannelConfigForAccount,
|
||||
promptSingleChannelSecretInput,
|
||||
promptResolvedAllowFrom,
|
||||
promptSingleChannelSecretInput,
|
||||
resolveAccountIdForConfigure,
|
||||
resolveOnboardingAccountId,
|
||||
setChannelDmPolicyWithAllowFrom,
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim: re-exports from extension
|
||||
export * from "../../../../extensions/discord/src/onboarding.js";
|
||||
@ -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", () => {
|
||||
|
||||
@ -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", () => {
|
||||
|
||||
@ -1 +0,0 @@
|
||||
export * from "../../../../extensions/telegram/src/onboarding.js";
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim: re-exports from extensions/whatsapp/src/onboarding.ts
|
||||
export * from "../../../../extensions/whatsapp/src/onboarding.js";
|
||||
@ -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";
|
||||
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user