import { type ConnectorConfigCapabilityName, type ConnectorConfigDocument, type ConnectorConfigScopeName } from "./config-document.js"; import { type ConnectorConfigSummary } from "./config-operator.js"; import { type McpToolsetName } from "./constants.js"; import { type McpToolName, type McpToolRiskClass } from "./observability-catalog.js"; import { type DiscordPermissionName } from "./permissions.js"; export declare const CONFIG_RECIPE_REPORT_SCHEMA_VERSION = 1; export declare const CONFIG_RECIPE_PLAN_DIGEST_PATTERN: RegExp; export declare const CONFIG_RECIPE_NAMES: readonly ["guild-starter", "guild-builder", "coordination-channel", "message-channel", "channel-publisher", "direct-messenger", "incident-response"]; export type ConfigRecipeName = typeof CONFIG_RECIPE_NAMES[number]; export type ConfigRecipeScopeKind = "channel" | "guild" | "user"; export interface ConfigRecipePrivilegedIntent { readonly name: "MESSAGE_CONTENT"; readonly status: "required"; } export interface ConfigRecipeGatewayRequirement { readonly evidenceConnection: "guild-layout" | "none"; readonly eventFeedPolicy: "unchanged"; readonly intents: readonly "GUILDS"[]; } export interface ConfigRecipeDescriptor { readonly capabilities: readonly ConnectorConfigCapabilityName[]; readonly description: string; readonly name: ConfigRecipeName; readonly requirements: { readonly botPermissionBitfield: string; readonly botPermissions: readonly DiscordPermissionName[]; readonly gateway: ConfigRecipeGatewayRequirement; readonly privilegedIntents: readonly ConfigRecipePrivilegedIntent[]; readonly scope: { readonly kind: ConfigRecipeScopeKind; readonly maximum: number; readonly minimum: 1; readonly option: "--channel-id" | "--guild-id" | "--user-id"; readonly outerBoundary: "$.readScope.channelIds" | "$.readScope.guildIds" | null; readonly targets: readonly `$.scopes.${ConnectorConfigScopeName}`[]; }; }; readonly riskClasses: readonly McpToolRiskClass[]; readonly risks: readonly string[]; readonly toolNames: readonly McpToolName[]; readonly toolsets: readonly McpToolsetName[]; readonly warnings: readonly string[]; readonly writeCapable: true; } export interface ConfigRecipeSelection { readonly channelIds?: readonly string[]; readonly guildIds?: readonly string[]; readonly name: string; readonly userIds?: readonly string[]; } export interface NormalizedConfigRecipeRequest { readonly name: ConfigRecipeName; readonly scope: { readonly ids: readonly string[]; readonly kind: ConfigRecipeScopeKind; }; } export interface ConfigRecipeChange { readonly after: boolean | readonly string[]; readonly before: boolean | readonly string[]; readonly path: string; } export interface ConfigRecipeCommand { readonly args: readonly string[]; readonly command: "guildcontrol"; } export interface ConfigRecipePlanReport { readonly action: "plan"; readonly applyCommand: ConfigRecipeCommand; readonly changes: readonly ConfigRecipeChange[]; readonly confirmation: { readonly requiredValue: ConfigRecipeName; }; readonly currentDocumentDigest: string; readonly currentSummary: ConnectorConfigSummary; readonly execution: { readonly configurationWritten: false; readonly discordContacted: false; readonly secretValuesRead: false; }; readonly file: string; readonly nextChecks: readonly ConfigRecipeCommand[]; readonly planDigest: string; readonly proposedDocument: ConnectorConfigDocument; readonly proposedDocumentDigest: string; readonly proposedSummary: ConnectorConfigSummary; readonly recipe: ConfigRecipeDescriptor; readonly recipeContractDigest: string; readonly request: NormalizedConfigRecipeRequest; readonly risks: readonly string[]; readonly schemaVersion: typeof CONFIG_RECIPE_REPORT_SCHEMA_VERSION; readonly status: "already-current" | "planned"; readonly warnings: readonly string[]; } export interface ConfigRecipePlanOptions extends ConfigRecipeSelection { readonly file: string; } export interface ConfigRecipeApplyOptions extends ConfigRecipePlanOptions { readonly confirmation: string; readonly planDigest: string; } export interface ConfigRecipeApplyReport extends Omit { readonly action: "apply"; readonly applied: boolean; readonly backupFile?: string; readonly execution: { readonly configurationWritten: boolean; readonly discordContacted: false; readonly secretValuesRead: false; }; readonly status: "already-current" | "applied"; } export declare const CONFIG_RECIPES: readonly ConfigRecipeDescriptor[]; export declare function normalizeConfigRecipeName(value: string): ConfigRecipeName; export declare function getConfigRecipe(value: string): ConfigRecipeDescriptor; export declare function normalizeConfigRecipeRequest(selection: ConfigRecipeSelection): NormalizedConfigRecipeRequest; export declare function planConfigRecipe(options: ConfigRecipePlanOptions): ConfigRecipePlanReport; export declare function applyConfigRecipe(options: ConfigRecipeApplyOptions): Promise; //# sourceMappingURL=config-recipes.d.ts.map