diff --git a/scripts/addie-tool-surface-budget.json b/scripts/addie-tool-surface-budget.json index 973ea439c5..83c4cecf4b 100644 --- a/scripts/addie-tool-surface-budget.json +++ b/scripts/addie-tool-surface-budget.json @@ -1,7 +1,7 @@ { "schema_version": 4, - "profile_ids_sha256": "5acc51e8ab204b5043ee416bcf3d1a48fa94ee8d7e1c5e5a7f71d39f93445a1b", - "profile_contract_sha256": "761dcbd0dd9ebefbbefb62a475472bf479cae4e11fc16e50aa2acb9f588a8465", + "profile_ids_sha256": "79957b57d370335967ead65eec0cb71fc81c3d469d222169f9319e6c3a3306a8", + "profile_contract_sha256": "f3ac0fa74e7fe520eb2ae537bc4c0d7f515c5fb23cb90ad8b490c529b8e964df", "baseline": { "id": "2026-08-26-pre-domain-consolidation", "metrics": { @@ -66,6 +66,7 @@ "slack_bolt:private_channel_member": { "custom_tool_count": 148, "wire_schema_bytes": 125095, "maximum_provider_tool_count": 1, "maximum_provider_tool_wire_bytes": 52 }, "slack_bolt:public_channel_admin": { "custom_tool_count": 209, "wire_schema_bytes": 161050, "maximum_provider_tool_count": 1, "maximum_provider_tool_wire_bytes": 52 }, "slack_bolt:public_channel_member": { "custom_tool_count": 147, "wire_schema_bytes": 124622, "maximum_provider_tool_count": 1, "maximum_provider_tool_wire_bytes": 52 }, + "slack_bolt:system_channel_admin": { "custom_tool_count": 217, "wire_schema_bytes": 167053, "maximum_provider_tool_count": 1, "maximum_provider_tool_wire_bytes": 52 }, "tavus_voice:admin": { "custom_tool_count": 220, "wire_schema_bytes": 162700, "maximum_provider_tool_count": 0, "maximum_provider_tool_wire_bytes": 2 }, "tavus_voice:baseline": { "custom_tool_count": 19, "wire_schema_bytes": 12383, "maximum_provider_tool_count": 0, "maximum_provider_tool_wire_bytes": 2 }, "tavus_voice:committee_leader": { "custom_tool_count": 132, "wire_schema_bytes": 104901, "maximum_provider_tool_count": 0, "maximum_provider_tool_wire_bytes": 2 }, diff --git a/scripts/build-addie-tool-surface-inventory.ts b/scripts/build-addie-tool-surface-inventory.ts index 2519f07a96..1424b81fb4 100644 --- a/scripts/build-addie-tool-surface-inventory.ts +++ b/scripts/build-addie-tool-surface-inventory.ts @@ -12,6 +12,13 @@ import { mergeAddieToolDefinitions, } from '../server/src/addie/tool-wire-shape.js'; import { assembleAddieSystemPrompt } from '../server/src/addie/prompt-assembly.js'; +import { + ADMIN_CHANNEL_WG_SLUG, + selectSlackToolSets, + SYSTEM_CHANNEL_TOOL_SETS, + type SlackToolSource, + type SystemChannelRole, +} from '../server/src/addie/slack-tool-selection.js'; interface BudgetFile { schema_version: 4; @@ -261,23 +268,34 @@ function buildSlackBoltProfiles(defs: Awaited const memberRequest = buildRequest(false, false); const adminRequest = buildRequest(true, false); const publicRequest = buildRequest(false, true); - const surfaces = [ - { audience: 'member_dm', isAdmin: false, isPublic: false, forceAdmin: false, available: memberRequest }, - { audience: 'admin_dm', isAdmin: true, isPublic: false, forceAdmin: true, available: adminRequest }, - { audience: 'private_channel_member', isAdmin: false, isPublic: false, forceAdmin: false, available: memberRequest }, - { audience: 'private_channel_admin', isAdmin: true, isPublic: false, forceAdmin: false, available: adminRequest }, - { audience: 'admin_working_group', isAdmin: true, isPublic: false, forceAdmin: true, available: adminRequest }, - { audience: 'public_channel_member', isAdmin: false, isPublic: true, forceAdmin: false, available: publicRequest }, - { audience: 'public_channel_admin', isAdmin: true, isPublic: true, forceAdmin: false, available: buildRequest(true, true) }, + const surfaces: Array<{ + audience: string; + source: SlackToolSource; + isAdmin: boolean; + isPublic: boolean; + workingGroupSlug?: string; + available: AddieTool[]; + }> = [ + { audience: 'member_dm', source: 'dm', isAdmin: false, isPublic: false, available: memberRequest }, + { audience: 'admin_dm', source: 'dm', isAdmin: true, isPublic: false, available: adminRequest }, + { audience: 'private_channel_member', source: 'channel', isAdmin: false, isPublic: false, available: memberRequest }, + { audience: 'private_channel_admin', source: 'channel', isAdmin: true, isPublic: false, available: adminRequest }, + { audience: 'admin_working_group', source: 'channel', isAdmin: true, isPublic: false, workingGroupSlug: ADMIN_CHANNEL_WG_SLUG, available: adminRequest }, + { audience: 'public_channel_member', source: 'channel', isAdmin: false, isPublic: true, available: publicRequest }, + { audience: 'public_channel_admin', source: 'channel', isAdmin: true, isPublic: true, available: buildRequest(true, true) }, ]; const profiles: Profile[] = []; for (const surface of surfaces) { for (const [setName, set] of Object.entries(toolSets.TOOL_SETS)) { if (!surface.isAdmin && set.adminOnly) continue; - const selectedSets = surface.forceAdmin - ? [...new Set([setName, 'admin'])] - : [setName]; + const selectedSets = selectSlackToolSets({ + routerSelectedSets: [setName], + routerAvailable: true, + source: surface.source, + isAdmin: surface.isAdmin, + workingGroupSlug: surface.workingGroupSlug, + }); const allowed = new Set(toolSets.getToolsForSets( selectedSets, surface.isAdmin, @@ -307,8 +325,15 @@ function buildSlackBoltProfiles(defs: Awaited const allValidSets = Object.entries(toolSets.TOOL_SETS) .filter(([, set]) => surface.isAdmin || !set.adminOnly) .map(([name]) => name); + const selectedAllValidSets = selectSlackToolSets({ + routerSelectedSets: allValidSets, + routerAvailable: true, + source: surface.source, + isAdmin: surface.isAdmin, + workingGroupSlug: surface.workingGroupSlug, + }); const allAllowed = new Set(toolSets.getToolsForSets( - allValidSets, + selectedAllValidSets, surface.isAdmin, surface.isPublic, )); @@ -317,7 +342,7 @@ function buildSlackBoltProfiles(defs: Awaited runtime: 'slack_bolt', audience: surface.audience, route: 'all_valid_sets_maximum', - selectedToolSets: allValidSets, + selectedToolSets: selectedAllValidSets, globalTools, requestTools: surface.available.filter((tool) => allAllowed.has(tool.name)), providerToolCount: 1, @@ -329,26 +354,80 @@ function buildSlackBoltProfiles(defs: Awaited 'nonstreaming_web_search', ], })); - const certificationSets = ['certification', 'knowledge']; - const certificationAllowed = new Set(toolSets.getToolsForSets( - certificationSets, + const fallbackSets = selectSlackToolSets({ + routerAvailable: false, + source: surface.source, + isAdmin: surface.isAdmin, + workingGroupSlug: surface.workingGroupSlug, + }); + const fallbackAllowed = new Set(toolSets.getToolsForSets( + fallbackSets, surface.isAdmin, surface.isPublic, )); profiles.push(profile({ - id: `slack_bolt:${surface.audience}:certification_session`, + id: `slack_bolt:${surface.audience}:router_unavailable`, runtime: 'slack_bolt', audience: surface.audience, - route: 'certification_session', - selectedToolSets: certificationSets, + route: 'router_unavailable', + selectedToolSets: fallbackSets, globalTools, - requestTools: surface.available.filter((tool) => certificationAllowed.has(tool.name)), + requestTools: surface.available.filter((tool) => fallbackAllowed.has(tool.name)), providerToolCount: 1, - conditionalMaximums: [ - 'certification_context_overrides_router_and_admin_auto_add', - 'google_docs_configured', - 'nonstreaming_web_search', - ], + conditionalMaximums: ['router_unavailable', 'google_docs_configured', 'nonstreaming_web_search'], + })); + + if (surface.source === 'dm') { + const certificationSets = selectSlackToolSets({ + routerSelectedSets: ['admin'], + routerAvailable: true, + source: surface.source, + isAdmin: surface.isAdmin, + hasActiveCertification: true, + }); + const certificationAllowed = new Set(toolSets.getToolsForSets( + certificationSets, + surface.isAdmin, + surface.isPublic, + )); + profiles.push(profile({ + id: `slack_bolt:${surface.audience}:certification_session`, + runtime: 'slack_bolt', + audience: surface.audience, + route: 'certification_session', + selectedToolSets: certificationSets, + globalTools, + requestTools: surface.available.filter((tool) => certificationAllowed.has(tool.name)), + providerToolCount: 1, + conditionalMaximums: [ + 'active_certification_overrides_router_admin_and_fallback', + 'google_docs_configured', + 'nonstreaming_web_search', + ], + })); + } + } + + for (const systemRole of Object.keys(SYSTEM_CHANNEL_TOOL_SETS) as SystemChannelRole[]) { + const allValidSets = Object.keys(toolSets.TOOL_SETS); + const selectedSets = selectSlackToolSets({ + routerSelectedSets: allValidSets, + routerAvailable: true, + source: 'channel', + isAdmin: true, + systemRole, + }); + const allowed = new Set(toolSets.getToolsForSets(selectedSets, true, false)); + profiles.push(profile({ + id: `slack_bolt:system_channel_admin:${systemRole}:all_valid_sets_maximum`, + runtime: 'slack_bolt', + audience: 'system_channel_admin', + route: `system_role_${systemRole}_all_valid_sets_maximum`, + selectedToolSets: selectedSets, + globalTools, + requestTools: adminRequest.filter((tool) => allowed.has(tool.name)), + providerToolCount: 1, + conditionalMaximums: ['server_configured_system_channel', 'router_returns_all_valid_tool_sets', 'google_docs_configured', 'nonstreaming_web_search'], })); } profiles.push( diff --git a/server/src/addie/bolt-app.ts b/server/src/addie/bolt-app.ts index 0a68371564..ff1fca1d51 100644 --- a/server/src/addie/bolt-app.ts +++ b/server/src/addie/bolt-app.ts @@ -236,27 +236,19 @@ import { type OfficialDocsCohortReason, type ProfiledChannelRespondPlan, } from './jobs/shadow-replay-cohort.js'; +import { + hasActiveCertificationProgress, + resolveRequiredSlackChannelContext, + resolveSlackChannelPrivacy, + selectSlackToolSets, + type SystemChannelRole, +} from './slack-tool-selection.js'; /** * Slack's built-in system bot user ID. * Slackbot sends system notifications (e.g., "added you to #channel") that should be ignored. */ const SLACKBOT_USER_ID = 'USLACKBOT'; -const ADMIN_CHANNEL_WG_SLUG = 'aao-admin'; - -/** - * Tool sets to auto-include when Addie is in a system-configured channel. - * Keyed by the channel's system role from system_settings. - */ -type SystemChannelRole = 'prospect' | 'escalation' | 'billing' | 'error' | 'admin'; - -const SYSTEM_CHANNEL_TOOL_SETS: Record = { - prospect: ['admin', 'outreach'], - escalation: ['admin'], - billing: ['admin', 'billing'], - error: ['admin'], - admin: ['admin'], -}; let systemChannelMap: Map | null = null; let systemChannelMapExpiresAt = 0; @@ -683,7 +675,10 @@ export async function buildChannelContext(channelId: string): Promise { +): Promise<{ requestContext: string; memberContext: MemberContext | null; hasActiveCertification: boolean }> { try { const memberContext = existingMemberContext !== undefined ? existingMemberContext : await getMemberContext(userId); const memberContextText = memberContext ? formatMemberContextForPrompt(memberContext) : null; @@ -1104,11 +1099,13 @@ async function buildRequestContext( // Add certification module state so Addie remembers active modules // even when conversation history is trimmed let certContextText = ''; + let hasActiveCertification = false; const workosUserId = memberContext?.workos_user?.workos_user_id; if (workosUserId) { try { const progress = await certDb.getProgress(workosUserId); const inProgress = progress.filter(p => p.status === 'in_progress'); + hasActiveCertification = hasActiveCertificationProgress(progress); certContextText = await buildCertificationContext(inProgress, workosUserId) || ''; // If no module is in progress, inject a strong reminder to call start_certification_module. // Without this, Addie can teach certification content in a guardrail-free zone where @@ -1140,11 +1137,11 @@ async function buildRequestContext( return { requestContext: sections.length > 0 ? sections.join('\n\n') : '', memberContext, - hasCertificationContext: !!certContextText, + hasActiveCertification, }; } catch (error) { logger.warn({ error, userId }, 'Addie Bolt: Failed to get member context, continuing without it'); - return { requestContext: '', memberContext: null, hasCertificationContext: false }; + return { requestContext: '', memberContext: null, hasActiveCertification: false }; } } @@ -1488,7 +1485,7 @@ async function selectRoutedToolsForSlackResponse( slackUserId: string, threadId: string, threadContext?: ThreadContext | null, - options?: { isThread?: boolean; hasCertificationContext?: boolean; threadMessages?: string[] } + options?: { isThread?: boolean; hasActiveCertification?: boolean; threadMessages?: string[] } ): Promise<{ tools: RequestTools; isAAOAdmin: boolean; @@ -1507,23 +1504,19 @@ async function selectRoutedToolsForSlackResponse( if (!addieRouter) { logger.warn('Addie Bolt: Router unavailable, defaulting to knowledge tool set'); - const fallbackSets = ['knowledge']; - if (userIsAdmin && (source === 'dm' || threadContext?.viewing_channel_working_group_slug === ADMIN_CHANNEL_WG_SLUG)) { - fallbackSets.push('admin'); - } - const fallbackSystemRole = threadContext?.viewing_channel_system_role as SystemChannelRole | undefined; - if (userIsAdmin && fallbackSystemRole) { - for (const set of SYSTEM_CHANNEL_TOOL_SETS[fallbackSystemRole] ?? []) { - if (!fallbackSets.includes(set)) { - fallbackSets.push(set); - } - } - } + const fallbackSets = selectSlackToolSets({ + routerAvailable: false, + source, + isAdmin: userIsAdmin, + workingGroupSlug: threadContext?.viewing_channel_working_group_slug, + systemRole: threadContext?.viewing_channel_system_role as SystemChannelRole | undefined, + hasActiveCertification: options?.hasActiveCertification, + }); const { filteredTools, unavailableHint } = filterToolsBySet( userTools, fallbackSets, userIsAdmin, - false + threadContext?.viewing_channel_is_private === false, ); return { tools: filteredTools, @@ -1549,35 +1542,18 @@ async function selectRoutedToolsForSlackResponse( // Direct interactions (DMs, mentions, assistant threads) always respond. // Non-respond router actions only make sense for channel messages where Addie can stay silent. const isDirectInteraction = source === 'dm' || source === 'mention'; - const selectedSets = plan.action === 'respond' + const routerSelectedSets = plan.action === 'respond' ? [...plan.tool_sets] : isDirectInteraction ? ['knowledge'] : []; - - // Certification sessions use certification + knowledge tools so Addie can verify protocol claims - if (options?.hasCertificationContext) { - selectedSets.length = 0; - selectedSets.push('certification'); - selectedSets.push('knowledge'); - } - - // Admin DMs and admin channels: always include admin tools. - // Admins DMing Addie are almost always asking operational questions; relying on - // the Haiku router to guess "admin" from the message is fragile. - const isAdminDm = userIsAdmin && source === 'dm'; - const isAdminChannel = userIsAdmin && threadContext?.viewing_channel_working_group_slug === ADMIN_CHANNEL_WG_SLUG; - if ((isAdminDm || isAdminChannel) && !options?.hasCertificationContext && !selectedSets.includes('admin')) { - selectedSets.push('admin'); - } - - // System-configured channels: auto-include relevant tool sets for admins - const systemRole = threadContext?.viewing_channel_system_role as SystemChannelRole | undefined; - if (userIsAdmin && systemRole && !options?.hasCertificationContext) { - for (const set of SYSTEM_CHANNEL_TOOL_SETS[systemRole] ?? []) { - if (!selectedSets.includes(set)) { - selectedSets.push(set); - } - } - } + const selectedSets = selectSlackToolSets({ + routerSelectedSets, + routerAvailable: true, + source, + isAdmin: userIsAdmin, + workingGroupSlug: threadContext?.viewing_channel_working_group_slug, + systemRole: threadContext?.viewing_channel_system_role as SystemChannelRole | undefined, + hasActiveCertification: options?.hasActiveCertification, + }); const { filteredTools, unavailableHint } = filterToolsBySet( userTools, @@ -1592,7 +1568,7 @@ async function selectRoutedToolsForSlackResponse( action: plan.action, reason: plan.reason, selectedSets, - hasCertificationContext: !!options?.hasCertificationContext, + hasActiveCertification: !!options?.hasActiveCertification, filteredToolCount: filteredTools.tools.length, totalToolCount: userTools.tools.length, requiresPrecision: plan.action === 'respond' ? !!plan.requires_precision : false, @@ -1853,7 +1829,7 @@ async function handleUserMessage({ } // Build per-request context for system prompt - let { requestContext, memberContext: updatedMemberContext, hasCertificationContext } = await buildRequestContext( + let { requestContext, memberContext: updatedMemberContext, hasActiveCertification } = await buildRequestContext( userId, slackThreadContext ); @@ -1893,14 +1869,14 @@ async function handleUserMessage({ userId, thread.thread_id, slackThreadContext, - { isThread: true, hasCertificationContext } + { isThread: true, hasActiveCertification } ); const requestContextWithRouting = [requestContext, routedTools.unavailableHint, buildConfidenceCalibration(routedTools.confidence)] .filter(Boolean) .join('\n\n'); // Admin users get higher iteration limit; certification sessions get more iterations - const certIterations = hasCertificationContext && !routedTools.isAAOAdmin + const certIterations = hasActiveCertification && !routedTools.isAAOAdmin ? CERTIFICATION_MAX_ITERATIONS : undefined; const dmEffectiveModel = routedTools.requiresPrecision @@ -3473,20 +3449,14 @@ export async function buildChannelResponseInvocation(input: { threadId, channelContext, ); - const selectedToolSets = [...plan.tool_sets]; - if ( - userIsAdmin - && channelContext?.viewing_channel_working_group_slug === ADMIN_CHANNEL_WG_SLUG - && !selectedToolSets.includes('admin') - ) { - selectedToolSets.push('admin'); - } - const channelSystemRole = channelContext?.viewing_channel_system_role as SystemChannelRole | undefined; - if (userIsAdmin && channelSystemRole) { - for (const set of SYSTEM_CHANNEL_TOOL_SETS[channelSystemRole] ?? []) { - if (!selectedToolSets.includes(set)) selectedToolSets.push(set); - } - } + const selectedToolSets = selectSlackToolSets({ + routerSelectedSets: plan.tool_sets, + routerAvailable: true, + source: 'channel', + isAdmin: userIsAdmin, + workingGroupSlug: channelContext?.viewing_channel_working_group_slug, + systemRole: channelContext?.viewing_channel_system_role as SystemChannelRole | undefined, + }); const { filteredTools, unavailableHint } = filterToolsBySet( userTools, @@ -3899,7 +3869,11 @@ async function handleDirectMessage( } // Build per-request context for system prompt (no channel context for DMs) - let { requestContext, memberContext: updatedMemberContext } = await buildRequestContext(userId); + let { + requestContext, + memberContext: updatedMemberContext, + hasActiveCertification, + } = await buildRequestContext(userId); if (historyUnavailable) { requestContext += `\n\n${HISTORY_UNAVAILABLE_NOTE}`; } @@ -3932,7 +3906,8 @@ async function handleDirectMessage( memberContext, userId, thread.thread_id, - null + null, + { isThread: true, hasActiveCertification }, ); requestContext = [requestContext, routedTools.unavailableHint, buildConfidenceCalibration(routedTools.confidence)] @@ -5780,11 +5755,16 @@ async function handleReactionAdded({ } // Fetch channel context (includes working group if channel is linked to one) - let channelContext: ThreadContext | undefined; - try { - channelContext = await buildChannelContext(itemChannel); - } catch (error) { - logger.debug({ error, itemChannel }, 'Addie Bolt: Could not get channel context for reaction handler'); + const channelContext = await resolveRequiredSlackChannelContext( + itemChannel, + buildChannelContext, + ); + if (!channelContext) { + logger.warn( + { event: 'addie_reaction_channel_context_unavailable' }, + 'Addie Bolt: Skipping reaction response because channel privacy could not be verified', + ); + return; } // Build per-request context for system prompt (pass channelContext so public channel guard is included) diff --git a/server/src/addie/config-version.ts b/server/src/addie/config-version.ts index 7e8932b4d3..6f10d4c750 100644 --- a/server/src/addie/config-version.ts +++ b/server/src/addie/config-version.ts @@ -30,7 +30,7 @@ import { loadRules, loadResponseStyle } from './rules/index.js'; * Format: YYYY.MM.N where N is incremented for multiple changes in a month * Example: 2025.01.1, 2025.01.2, 2025.02.1 */ -export const CODE_VERSION = '2026.08.28'; +export const CODE_VERSION = '2026.08.29'; // Types export interface ConfigVersion { diff --git a/server/src/addie/generated/tool-surface-inventory.generated.json b/server/src/addie/generated/tool-surface-inventory.generated.json index 04f782a598..081ba25679 100644 --- a/server/src/addie/generated/tool-surface-inventory.generated.json +++ b/server/src/addie/generated/tool-surface-inventory.generated.json @@ -15,7 +15,7 @@ "server/src/addie/tool-wire-shape.ts": "103f31ca6d8e15b34a67e88a9ba69f08827571b293f4cb9ab9c1ad3d03b7e6cc", "server/src/addie/prompt-assembly.ts": "6c002ae5a52cdd26e13f424f6e00757dff163b3b273a1b4ab069fdb86f4f375f", "server/src/addie/register-baseline-tools.ts": "54a62e0d89023ff9c67321639da80e67559f181eccdecf80dbdc57cc42af5b05", - "server/src/addie/bolt-app.ts": "a3c2aeb9a90bdbce7c4559dd2980e00eda293cc98fede39d9dc0dae503e29700", + "server/src/addie/bolt-app.ts": "2ad3261887845d3322495dd33ebb38142483e3b105467c7d2be4bea12474c044", "server/src/addie/handler.ts": "a7dd51a29add78a1297f6138d53929a2ac13ddb3b85323c52d136cfc0e5d6c1d", "server/src/routes/addie-chat.ts": "da5abf635cbae6368b31e75fbb40dbb1a08a00315203dde7308fbc6272343e4b", "server/src/routes/tavus.ts": "17af1ae3f8c561ff4f4c48b5588ba9e3d21eec10f1d497a4479f342364b17e22", @@ -3378,7 +3378,7 @@ "knowledge" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", + "active_certification_overrides_router_admin_and_fallback", "google_docs_configured", "nonstreaming_web_search" ], @@ -5048,6 +5048,176 @@ "ordered_tool_names_sha256": "58b1c57868c42b3fdd163ddbbc827b7dbc56d24d8463889b93aa802b568319f9", "wire_schema_sha256": "2b7825fe141dfa0c4a10e0b5d410bdce2dabd66d055390b0054f212548ac79c3" }, + { + "id": "slack_bolt:admin_dm:router_unavailable", + "runtime": "slack_bolt", + "audience": "admin_dm", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge", + "admin" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 140, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 98215, + "overridden_tool_count": 6, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "get_account_link", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "search_image_library" + ], + "ordered_tool_names_sha256": "a5ec22bd1f46498947e3f339a9ed63385f4abbfa23e174503ed27a40d00e7ded", + "wire_schema_sha256": "fc3c2abd9400c20c5f140a6a92c3335637bcf20d2495bb31cc8b430d756abe4e" + }, { "id": "slack_bolt:admin_working_group:adcp_operations", "runtime": "slack_bolt", @@ -6358,28 +6528,30 @@ "wire_schema_sha256": "02500f48817ad2ad7219efd6aea7372e0962435c526a145254fdca67f9ba248e" }, { - "id": "slack_bolt:admin_working_group:certification_session", + "id": "slack_bolt:admin_working_group:collaboration", "runtime": "slack_bolt", "audience": "admin_working_group", - "route": "certification_session", + "route": "collaboration", "selected_tool_sets": [ - "certification", - "knowledge" + "collaboration", + "admin" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 82, + "custom_tool_count": 138, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 65409, - "overridden_tool_count": 4, + "wire_schema_bytes": 96484, + "overridden_tool_count": 2, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -6434,6 +6606,8 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", + "list_working_groups", + "get_working_group", "propose_content", "get_my_content", "list_pending_content", @@ -6444,173 +6618,57 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "call_adcp_task", - "list_escalations", - "resolve_escalation", - "search_image_library", - "list_certification_tracks", - "get_certification_module", - "start_certification_module", - "complete_certification_module", - "get_learner_progress", - "test_out_modules", - "start_certification_exam", - "complete_certification_exam" - ], - "ordered_tool_names_sha256": "7cefa9648ee313d971d9dada8982df4977339c39ed3692d29883e4d9ebe0bb50", - "wire_schema_sha256": "31ee505a62ed15986f6740defe8803c912e2f2b0091edf94633a58545820664e" - }, - { - "id": "slack_bolt:admin_working_group:collaboration", - "runtime": "slack_bolt", - "audience": "admin_working_group", - "route": "collaboration", - "selected_tool_sets": [ - "collaboration", - "admin" - ], - "conditional_maximums": [ - "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", - "nonstreaming_web_search" - ], - "custom_tool_count": 138, - "maximum_provider_tool_count": 1, - "maximum_provider_tool_names": [ - "web_search" - ], - "maximum_provider_tool_wire_bytes": 52, - "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 96484, - "overridden_tool_count": 2, - "conflicting_override_count": 0, - "conflicting_override_names": [], - "ordered_tool_names": [ - "search_docs", - "get_doc", - "search_repos", - "search_resources", - "bookmark_resource", - "get_recent_news", - "find_membership_products", - "create_payment_link", - "send_invoice", - "confirm_send_invoice", - "get_billing_portal", - "validate_json", - "get_schema", - "list_schemas", - "compare_schema_versions", - "list_members", - "get_member", - "list_agents", - "get_agent", - "validate_agent", - "lookup_domain", - "list_publishers", - "research_brand", - "resolve_brand", - "save_brand", - "list_brands", - "list_missing_brands", - "upload_brand_logo", - "publish_brand_canonical_document", - "add_to_brand_refs", - "check_mutual_assertion", - "notify_pending_verification", - "validate_adagents", - "resolve_property", - "save_property", - "list_properties", - "list_missing_properties", - "check_property_list", - "enhance_property", - "resolve_catalog", - "browse_catalog", - "dispute_catalog_entry", - "fetch_url", - "read_slack_file", - "read_google_doc", - "get_si_availability", - "list_si_agents", - "connect_to_si_agent", - "send_to_si_agent", - "end_si_session", - "get_si_session_status", - "list_working_groups", - "get_working_group", - "propose_content", - "get_my_content", - "list_pending_content", - "approve_content", - "reject_content", - "request_revisions", - "get_account_link", - "draft_github_issue", - "create_github_issue", - "get_github_issue", - "set_outreach_preference", - "check_illustration_status", - "generate_perspective_illustration", - "escalate_to_admin", - "get_escalation_status", - "capture_learning", - "list_pending_invoices", - "get_account", - "resend_invoice", - "update_billing_email", - "add_prospect", - "update_prospect", - "enrich_company", - "query_prospects", - "prospect_search_lusha", - "search_industry_feeds", - "add_industry_feed", - "get_feed_stats", - "get_platform_stats", - "list_feed_proposals", - "approve_feed_proposal", - "reject_feed_proposal", - "add_media_contact", - "list_flagged_conversations", - "review_flagged_conversation", - "create_chapter", - "list_chapters", - "create_industry_gathering", - "list_industry_gatherings", - "add_committee_leader", - "remove_committee_leader", - "list_committee_leaders", - "add_working_group_member", - "remove_working_group_member", - "merge_organizations", - "find_duplicate_orgs", - "check_domain_health", - "manage_organization_domains", - "update_org_member_role", - "rename_working_group", - "claim_prospect", - "suggest_prospects", - "set_reminder", - "my_upcoming_tasks", - "complete_task", - "log_conversation", - "get_member_search_analytics", - "list_organizations_by_users", - "list_slack_users_by_org", - "list_users_by_engagement", - "list_paying_members", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", "list_escalations", "resolve_escalation", "update_member_logo", @@ -8038,29 +8096,28 @@ "wire_schema_sha256": "2b7825fe141dfa0c4a10e0b5d410bdce2dabd66d055390b0054f212548ac79c3" }, { - "id": "slack_bolt:member_dm:adcp_operations", + "id": "slack_bolt:admin_working_group:router_unavailable", "runtime": "slack_bolt", - "audience": "member_dm", - "route": "adcp_operations", + "audience": "admin_working_group", + "route": "router_unavailable", "selected_tool_sets": [ - "adcp_operations" + "knowledge", + "admin" ], "conditional_maximums": [ + "router_unavailable", "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 75, + "custom_tool_count": 140, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 62788, - "overridden_tool_count": 0, + "wire_schema_bytes": 98215, + "overridden_tool_count": 6, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -8115,6 +8172,8 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", + "list_working_groups", + "get_working_group", "propose_content", "get_my_content", "list_pending_content", @@ -8122,34 +8181,97 @@ "reject_content", "request_revisions", "get_account_link", - "save_agent", - "list_saved_agents", - "remove_saved_agent", - "setup_test_agent", "draft_github_issue", "create_github_issue", "get_github_issue", + "list_github_issues", "set_outreach_preference", + "search_slack", + "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "ask_about_adcp_task", - "call_adcp_task", - "get_adcp_capabilities", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", "search_image_library" ], - "ordered_tool_names_sha256": "afff997d27d10316deaae9b8137ad3f92fedfeda44bb56865a939595281b4104", - "wire_schema_sha256": "a3ff4cd2bd97474fb0a28f9b4215bba77aa7f3e5fa2c070bc9d156cfba39d727" + "ordered_tool_names_sha256": "a5ec22bd1f46498947e3f339a9ed63385f4abbfa23e174503ed27a40d00e7ded", + "wire_schema_sha256": "fc3c2abd9400c20c5f140a6a92c3335637bcf20d2495bb31cc8b430d756abe4e" }, { - "id": "slack_bolt:member_dm:agent_conformance", + "id": "slack_bolt:member_dm:adcp_operations", "runtime": "slack_bolt", "audience": "member_dm", - "route": "agent_conformance", + "route": "adcp_operations", "selected_tool_sets": [ - "agent_conformance" + "adcp_operations" ], "conditional_maximums": [ "google_docs_configured", @@ -8158,14 +8280,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 70, + "custom_tool_count": 75, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 53366, + "wire_schema_bytes": 62788, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -8228,6 +8350,10 @@ "reject_content", "request_revisions", "get_account_link", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", "draft_github_issue", "create_github_issue", "get_github_issue", @@ -8237,13 +8363,115 @@ "escalate_to_admin", "get_escalation_status", "capture_learning", - "issue_conformance_token", - "run_conformance_against_my_agent", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", "search_image_library" ], - "ordered_tool_names_sha256": "e525ffd5d15f5c28a7ba033be3757dcce3a568fd7a931e82e08eb0402aafc16d", - "wire_schema_sha256": "cfb100f382151778afbedf34212dbb6047cf74e0052ac21bec58a800974d3839" - }, + "ordered_tool_names_sha256": "afff997d27d10316deaae9b8137ad3f92fedfeda44bb56865a939595281b4104", + "wire_schema_sha256": "a3ff4cd2bd97474fb0a28f9b4215bba77aa7f3e5fa2c070bc9d156cfba39d727" + }, + { + "id": "slack_bolt:member_dm:agent_conformance", + "runtime": "slack_bolt", + "audience": "member_dm", + "route": "agent_conformance", + "selected_tool_sets": [ + "agent_conformance" + ], + "conditional_maximums": [ + "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", + "nonstreaming_web_search" + ], + "custom_tool_count": 70, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 53366, + "overridden_tool_count": 0, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "get_account_link", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "set_outreach_preference", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "issue_conformance_token", + "run_conformance_against_my_agent", + "search_image_library" + ], + "ordered_tool_names_sha256": "e525ffd5d15f5c28a7ba033be3757dcce3a568fd7a931e82e08eb0402aafc16d", + "wire_schema_sha256": "cfb100f382151778afbedf34212dbb6047cf74e0052ac21bec58a800974d3839" + }, { "id": "slack_bolt:member_dm:agent_testing", "runtime": "slack_bolt", @@ -8660,7 +8888,7 @@ "knowledge" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", + "active_certification_overrides_router_admin_and_fallback", "google_docs_configured", "nonstreaming_web_search" ], @@ -9607,6 +9835,106 @@ "ordered_tool_names_sha256": "3a2cf9047a7dc9190b843f38c96a9925c6f845cba1182bd6fba04213f02b6b1c", "wire_schema_sha256": "50c5faa9aa7eae96fa245864bf1d7aeea8eaa06ec3eac0cadbc18b7edbc89401" }, + { + "id": "slack_bolt:member_dm:router_unavailable", + "runtime": "slack_bolt", + "audience": "member_dm", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 71, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 54923, + "overridden_tool_count": 4, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "get_account_link", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "search_image_library" + ], + "ordered_tool_names_sha256": "55bc5e1430d0f14c9b795b0ef5048dcfbd4393a27362a5cfdfda078798c8383d", + "wire_schema_sha256": "b5da1fb5a621daa1a881ec6e40bffb451c19093ff00a78fd302c7a7ac2fdcedd" + }, { "id": "slack_bolt:private_channel_admin:adcp_operations", "runtime": "slack_bolt", @@ -10581,28 +10909,29 @@ "wire_schema_sha256": "bf9902afd31cc09b571534f5d325f40c5840478ce727bdb823519ff4030baaad" }, { - "id": "slack_bolt:private_channel_admin:certification_session", + "id": "slack_bolt:private_channel_admin:collaboration", "runtime": "slack_bolt", "audience": "private_channel_admin", - "route": "certification_session", + "route": "collaboration", "selected_tool_sets": [ - "certification", - "knowledge" + "collaboration" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 82, + "custom_tool_count": 71, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 65409, - "overridden_tool_count": 4, + "wire_schema_bytes": 55486, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -10667,38 +10996,27 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "call_adcp_task", "list_escalations", "resolve_escalation", - "search_image_library", - "list_certification_tracks", - "get_certification_module", - "start_certification_module", - "complete_certification_module", - "get_learner_progress", - "test_out_modules", - "start_certification_exam", - "complete_certification_exam" + "send_member_dm", + "search_image_library" ], - "ordered_tool_names_sha256": "7cefa9648ee313d971d9dada8982df4977339c39ed3692d29883e4d9ebe0bb50", - "wire_schema_sha256": "31ee505a62ed15986f6740defe8803c912e2f2b0091edf94633a58545820664e" + "ordered_tool_names_sha256": "55b96ec233e7baeecfcbdfadce7201eaf5d6dae68c476e3bfad91b4662dafc94", + "wire_schema_sha256": "4d079c79eebefd652188e97049fa07b5ece312a8e51066a23cc80cca598a3af8" }, { - "id": "slack_bolt:private_channel_admin:collaboration", + "id": "slack_bolt:private_channel_admin:committee_leadership", "runtime": "slack_bolt", "audience": "private_channel_admin", - "route": "collaboration", + "route": "committee_leadership", "selected_tool_sets": [ - "collaboration" + "committee_leadership" ], "conditional_maximums": [ "google_docs_configured", @@ -10707,14 +11025,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 71, + "custom_tool_count": 79, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 55486, + "wire_schema_bytes": 62603, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -10770,109 +11088,7 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", - "propose_content", - "get_my_content", - "list_pending_content", - "approve_content", - "reject_content", - "request_revisions", - "get_account_link", - "draft_github_issue", - "create_github_issue", - "get_github_issue", - "set_outreach_preference", - "check_illustration_status", - "generate_perspective_illustration", - "escalate_to_admin", - "get_escalation_status", - "capture_learning", - "list_escalations", - "resolve_escalation", - "send_member_dm", - "search_image_library" - ], - "ordered_tool_names_sha256": "55b96ec233e7baeecfcbdfadce7201eaf5d6dae68c476e3bfad91b4662dafc94", - "wire_schema_sha256": "4d079c79eebefd652188e97049fa07b5ece312a8e51066a23cc80cca598a3af8" - }, - { - "id": "slack_bolt:private_channel_admin:committee_leadership", - "runtime": "slack_bolt", - "audience": "private_channel_admin", - "route": "committee_leadership", - "selected_tool_sets": [ - "committee_leadership" - ], - "conditional_maximums": [ - "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", - "nonstreaming_web_search" - ], - "custom_tool_count": 79, - "maximum_provider_tool_count": 1, - "maximum_provider_tool_names": [ - "web_search" - ], - "maximum_provider_tool_wire_bytes": 52, - "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 62603, - "overridden_tool_count": 0, - "conflicting_override_count": 0, - "conflicting_override_names": [], - "ordered_tool_names": [ - "search_docs", - "get_doc", - "search_repos", - "search_resources", - "bookmark_resource", - "get_recent_news", - "find_membership_products", - "create_payment_link", - "send_invoice", - "confirm_send_invoice", - "get_billing_portal", - "validate_json", - "get_schema", - "list_schemas", - "compare_schema_versions", - "list_members", - "get_member", - "list_agents", - "get_agent", - "validate_agent", - "lookup_domain", - "list_publishers", - "research_brand", - "resolve_brand", - "save_brand", - "list_brands", - "list_missing_brands", - "upload_brand_logo", - "publish_brand_canonical_document", - "add_to_brand_refs", - "check_mutual_assertion", - "notify_pending_verification", - "validate_adagents", - "resolve_property", - "save_property", - "list_properties", - "list_missing_properties", - "check_property_list", - "enhance_property", - "resolve_catalog", - "browse_catalog", - "dispute_catalog_entry", - "fetch_url", - "read_slack_file", - "read_google_doc", - "get_si_availability", - "list_si_agents", - "connect_to_si_agent", - "send_to_si_agent", - "end_si_session", - "get_si_session_status", - "list_working_groups", + "list_working_groups", "propose_content", "get_my_content", "list_pending_content", @@ -11662,6 +11878,108 @@ "ordered_tool_names_sha256": "a76c3ae9bb3dbf4569f0415b7ec5a60ce047e307585ce748116370259cc8aee4", "wire_schema_sha256": "e670e9c5ad8bf44884c55d711227140fa1efe6718c312f1945843016b79ffd9c" }, + { + "id": "slack_bolt:private_channel_admin:router_unavailable", + "runtime": "slack_bolt", + "audience": "private_channel_admin", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 73, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 57217, + "overridden_tool_count": 4, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "get_account_link", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "list_escalations", + "resolve_escalation", + "search_image_library" + ], + "ordered_tool_names_sha256": "fb67e298c1e5cfb91fa08cb50a871fbb9bd15dfd25b1fbad8e28325458b3e53d", + "wire_schema_sha256": "42cd7bc0465f9e64ffcd5878f594e913f1af4dfc5d78a0abed6ae0413860f653" + }, { "id": "slack_bolt:private_channel_member:adcp_operations", "runtime": "slack_bolt", @@ -12276,28 +12594,29 @@ "wire_schema_sha256": "8a46a1b8382b58b519f3e5e4bf5c4f0f9d0aa7dc28b25ab153082e8712fc0a3f" }, { - "id": "slack_bolt:private_channel_member:certification_session", + "id": "slack_bolt:private_channel_member:collaboration", "runtime": "slack_bolt", "audience": "private_channel_member", - "route": "certification_session", + "route": "collaboration", "selected_tool_sets": [ - "certification", - "knowledge" + "collaboration" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 80, + "custom_tool_count": 69, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 63115, - "overridden_tool_count": 4, + "wire_schema_bytes": 53192, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -12362,36 +12681,25 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "call_adcp_task", - "search_image_library", - "list_certification_tracks", - "get_certification_module", - "start_certification_module", - "complete_certification_module", - "get_learner_progress", - "test_out_modules", - "start_certification_exam", - "complete_certification_exam" + "send_member_dm", + "search_image_library" ], - "ordered_tool_names_sha256": "3bf55c3f5be1dec9323cd4f4ce7c6cd92cc9451bd58eac89b5ad1b010f49aacb", - "wire_schema_sha256": "4f791fc9db6fc34efabd7ce90c81be12ac103918b34d3088b622b592d2e5bda0" + "ordered_tool_names_sha256": "3122f368b3dd8a24e01bdfd0310baae2025e04db39535033f0c3b4a32f080b12", + "wire_schema_sha256": "63109afc62912ad2e67960d8c701e8b7d5ead0460cb7c326d193c741af9ba820" }, { - "id": "slack_bolt:private_channel_member:collaboration", + "id": "slack_bolt:private_channel_member:committee_leadership", "runtime": "slack_bolt", "audience": "private_channel_member", - "route": "collaboration", + "route": "committee_leadership", "selected_tool_sets": [ - "collaboration" + "committee_leadership" ], "conditional_maximums": [ "google_docs_configured", @@ -12400,14 +12708,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 69, + "custom_tool_count": 77, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 53192, + "wire_schema_bytes": 60309, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -12463,6 +12771,7 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", + "list_working_groups", "propose_content", "get_my_content", "list_pending_content", @@ -12479,125 +12788,24 @@ "escalate_to_admin", "get_escalation_status", "capture_learning", - "send_member_dm", - "search_image_library" + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders" ], - "ordered_tool_names_sha256": "3122f368b3dd8a24e01bdfd0310baae2025e04db39535033f0c3b4a32f080b12", - "wire_schema_sha256": "63109afc62912ad2e67960d8c701e8b7d5ead0460cb7c326d193c741af9ba820" + "ordered_tool_names_sha256": "d6eaec50e43a1ffaa4c556086eb77361960f3da0f479f4831374ae979023a7e0", + "wire_schema_sha256": "6dd4e48a59c7bfa3913de7ca38a2793b4b891ede846c25d1e2e57d393f882cd9" }, { - "id": "slack_bolt:private_channel_member:committee_leadership", + "id": "slack_bolt:private_channel_member:content", "runtime": "slack_bolt", "audience": "private_channel_member", - "route": "committee_leadership", - "selected_tool_sets": [ - "committee_leadership" - ], - "conditional_maximums": [ - "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", - "nonstreaming_web_search" - ], - "custom_tool_count": 77, - "maximum_provider_tool_count": 1, - "maximum_provider_tool_names": [ - "web_search" - ], - "maximum_provider_tool_wire_bytes": 52, - "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 60309, - "overridden_tool_count": 0, - "conflicting_override_count": 0, - "conflicting_override_names": [], - "ordered_tool_names": [ - "search_docs", - "get_doc", - "search_repos", - "search_resources", - "bookmark_resource", - "get_recent_news", - "find_membership_products", - "create_payment_link", - "send_invoice", - "confirm_send_invoice", - "get_billing_portal", - "validate_json", - "get_schema", - "list_schemas", - "compare_schema_versions", - "list_members", - "get_member", - "list_agents", - "get_agent", - "validate_agent", - "lookup_domain", - "list_publishers", - "research_brand", - "resolve_brand", - "save_brand", - "list_brands", - "list_missing_brands", - "upload_brand_logo", - "publish_brand_canonical_document", - "add_to_brand_refs", - "check_mutual_assertion", - "notify_pending_verification", - "validate_adagents", - "resolve_property", - "save_property", - "list_properties", - "list_missing_properties", - "check_property_list", - "enhance_property", - "resolve_catalog", - "browse_catalog", - "dispute_catalog_entry", - "fetch_url", - "read_slack_file", - "read_google_doc", - "get_si_availability", - "list_si_agents", - "connect_to_si_agent", - "send_to_si_agent", - "end_si_session", - "get_si_session_status", - "list_working_groups", - "propose_content", - "get_my_content", - "list_pending_content", - "approve_content", - "reject_content", - "request_revisions", - "get_account_link", - "draft_github_issue", - "create_github_issue", - "get_github_issue", - "set_outreach_preference", - "check_illustration_status", - "generate_perspective_illustration", - "escalate_to_admin", - "get_escalation_status", - "capture_learning", - "create_event", - "manage_event_registrations", - "update_event", - "check_person_event_status", - "invite_to_event", - "search_image_library", - "add_committee_co_leader", - "remove_committee_co_leader", - "list_committee_co_leaders" - ], - "ordered_tool_names_sha256": "d6eaec50e43a1ffaa4c556086eb77361960f3da0f479f4831374ae979023a7e0", - "wire_schema_sha256": "6dd4e48a59c7bfa3913de7ca38a2793b4b891ede846c25d1e2e57d393f882cd9" - }, - { - "id": "slack_bolt:private_channel_member:content", - "runtime": "slack_bolt", - "audience": "private_channel_member", - "route": "content", + "route": "content", "selected_tool_sets": [ "content" ], @@ -13232,6 +13440,106 @@ "ordered_tool_names_sha256": "3a2cf9047a7dc9190b843f38c96a9925c6f845cba1182bd6fba04213f02b6b1c", "wire_schema_sha256": "50c5faa9aa7eae96fa245864bf1d7aeea8eaa06ec3eac0cadbc18b7edbc89401" }, + { + "id": "slack_bolt:private_channel_member:router_unavailable", + "runtime": "slack_bolt", + "audience": "private_channel_member", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 71, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 54923, + "overridden_tool_count": 4, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "get_account_link", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "search_image_library" + ], + "ordered_tool_names_sha256": "55bc5e1430d0f14c9b795b0ef5048dcfbd4393a27362a5cfdfda078798c8383d", + "wire_schema_sha256": "b5da1fb5a621daa1a881ec6e40bffb451c19093ff00a78fd302c7a7ac2fdcedd" + }, { "id": "slack_bolt:public_channel_admin:adcp_operations", "runtime": "slack_bolt", @@ -14181,28 +14489,29 @@ "wire_schema_sha256": "e6ee774a1886c99743541ba3e4256ad059d7190169fb5d954d4852db9af1687e" }, { - "id": "slack_bolt:public_channel_admin:certification_session", + "id": "slack_bolt:public_channel_admin:collaboration", "runtime": "slack_bolt", "audience": "public_channel_admin", - "route": "certification_session", + "route": "collaboration", "selected_tool_sets": [ - "certification", - "knowledge" + "collaboration" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 81, + "custom_tool_count": 70, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 64936, - "overridden_tool_count": 4, + "wire_schema_bytes": 55013, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -14266,38 +14575,27 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "call_adcp_task", "list_escalations", "resolve_escalation", - "search_image_library", - "list_certification_tracks", - "get_certification_module", - "start_certification_module", - "complete_certification_module", - "get_learner_progress", - "test_out_modules", - "start_certification_exam", - "complete_certification_exam" + "send_member_dm", + "search_image_library" ], - "ordered_tool_names_sha256": "34dc291e055949699fff0d89ec44eb32cc2b98ac766631f575cb22f989811bf9", - "wire_schema_sha256": "e628159c579c835b0b472877b1fc620c407d3b24d4bbd86f6045f2d6cfb43e7f" + "ordered_tool_names_sha256": "ad59f825c50fd9cee0224155930778ac470c3168831e7d687761d6502f422d5b", + "wire_schema_sha256": "378df1cc45998f552b7405d020e5ec92420b2a8118c7e96f83e1a815b99cffcc" }, { - "id": "slack_bolt:public_channel_admin:collaboration", + "id": "slack_bolt:public_channel_admin:committee_leadership", "runtime": "slack_bolt", "audience": "public_channel_admin", - "route": "collaboration", + "route": "committee_leadership", "selected_tool_sets": [ - "collaboration" + "committee_leadership" ], "conditional_maximums": [ "google_docs_configured", @@ -14306,14 +14604,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 70, + "custom_tool_count": 78, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 55013, + "wire_schema_bytes": 62130, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -14369,108 +14667,7 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", - "propose_content", - "get_my_content", - "list_pending_content", - "approve_content", - "reject_content", - "request_revisions", - "draft_github_issue", - "create_github_issue", - "get_github_issue", - "set_outreach_preference", - "check_illustration_status", - "generate_perspective_illustration", - "escalate_to_admin", - "get_escalation_status", - "capture_learning", - "list_escalations", - "resolve_escalation", - "send_member_dm", - "search_image_library" - ], - "ordered_tool_names_sha256": "ad59f825c50fd9cee0224155930778ac470c3168831e7d687761d6502f422d5b", - "wire_schema_sha256": "378df1cc45998f552b7405d020e5ec92420b2a8118c7e96f83e1a815b99cffcc" - }, - { - "id": "slack_bolt:public_channel_admin:committee_leadership", - "runtime": "slack_bolt", - "audience": "public_channel_admin", - "route": "committee_leadership", - "selected_tool_sets": [ - "committee_leadership" - ], - "conditional_maximums": [ - "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", - "nonstreaming_web_search" - ], - "custom_tool_count": 78, - "maximum_provider_tool_count": 1, - "maximum_provider_tool_names": [ - "web_search" - ], - "maximum_provider_tool_wire_bytes": 52, - "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 62130, - "overridden_tool_count": 0, - "conflicting_override_count": 0, - "conflicting_override_names": [], - "ordered_tool_names": [ - "search_docs", - "get_doc", - "search_repos", - "search_resources", - "bookmark_resource", - "get_recent_news", - "find_membership_products", - "create_payment_link", - "send_invoice", - "confirm_send_invoice", - "get_billing_portal", - "validate_json", - "get_schema", - "list_schemas", - "compare_schema_versions", - "list_members", - "get_member", - "list_agents", - "get_agent", - "validate_agent", - "lookup_domain", - "list_publishers", - "research_brand", - "resolve_brand", - "save_brand", - "list_brands", - "list_missing_brands", - "upload_brand_logo", - "publish_brand_canonical_document", - "add_to_brand_refs", - "check_mutual_assertion", - "notify_pending_verification", - "validate_adagents", - "resolve_property", - "save_property", - "list_properties", - "list_missing_properties", - "check_property_list", - "enhance_property", - "resolve_catalog", - "browse_catalog", - "dispute_catalog_entry", - "fetch_url", - "read_slack_file", - "read_google_doc", - "get_si_availability", - "list_si_agents", - "connect_to_si_agent", - "send_to_si_agent", - "end_si_session", - "get_si_session_status", - "list_working_groups", + "list_working_groups", "propose_content", "get_my_content", "list_pending_content", @@ -15252,6 +15449,107 @@ "ordered_tool_names_sha256": "f3da849fded3c28bce166d3ab341ce1237c50e6fb4ba0cd3f809cf62f5ab300f", "wire_schema_sha256": "d0dd8ba07a21e92815735552a8e354db8a59acb94b7723ef68dca69f8b51dd6f" }, + { + "id": "slack_bolt:public_channel_admin:router_unavailable", + "runtime": "slack_bolt", + "audience": "public_channel_admin", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 72, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 56744, + "overridden_tool_count": 4, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "propose_content", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "list_escalations", + "resolve_escalation", + "search_image_library" + ], + "ordered_tool_names_sha256": "d942789acd92f1cab9b53b1be69fb6b9948075bad24c418a1c54ded0d784ea6d", + "wire_schema_sha256": "5edae2ea7ea4caf1eddf20d3789298dfafe22570f0e4c0de4bc2297b7752b00e" + }, { "id": "slack_bolt:public_channel_member:adcp_operations", "runtime": "slack_bolt", @@ -15861,28 +16159,29 @@ "wire_schema_sha256": "5566b6d0608ff91a83720e2fdb3a22dc378d2a704be0c332117ddb9f5ededccc" }, { - "id": "slack_bolt:public_channel_member:certification_session", + "id": "slack_bolt:public_channel_member:collaboration", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "certification_session", + "route": "collaboration", "selected_tool_sets": [ - "certification", - "knowledge" + "collaboration" ], "conditional_maximums": [ - "certification_context_overrides_router_and_admin_auto_add", "google_docs_configured", + "conformance_socket_enabled", + "event_and_meeting_permissions", + "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 79, + "custom_tool_count": 68, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 62642, - "overridden_tool_count": 4, + "wire_schema_bytes": 52719, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -15946,36 +16245,25 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "call_adcp_task", - "search_image_library", - "list_certification_tracks", - "get_certification_module", - "start_certification_module", - "complete_certification_module", - "get_learner_progress", - "test_out_modules", - "start_certification_exam", - "complete_certification_exam" + "send_member_dm", + "search_image_library" ], - "ordered_tool_names_sha256": "2bc85b64574cb0c1b5b8ff889de59ff625c1647d276ba91e7ca693de7d0d0424", - "wire_schema_sha256": "c882a1d2ef1b272adefcc7bf45bef542584ef2508b597978e718b1e8b1c6570c" + "ordered_tool_names_sha256": "609a43b00ced3501f353b277d62d34297d1cca01753dd7c06964f5235cfa6659", + "wire_schema_sha256": "8fce7b067d6f92dc7a0041c46977df7d11378352981e4802e2e822ffc828b1a2" }, { - "id": "slack_bolt:public_channel_member:collaboration", + "id": "slack_bolt:public_channel_member:committee_leadership", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "collaboration", + "route": "committee_leadership", "selected_tool_sets": [ - "collaboration" + "committee_leadership" ], "conditional_maximums": [ "google_docs_configured", @@ -15984,14 +16272,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 68, + "custom_tool_count": 76, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 52719, + "wire_schema_bytes": 59836, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -16047,6 +16335,7 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", + "list_working_groups", "propose_content", "get_my_content", "list_pending_content", @@ -16062,19 +16351,26 @@ "escalate_to_admin", "get_escalation_status", "capture_learning", - "send_member_dm", - "search_image_library" + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders" ], - "ordered_tool_names_sha256": "609a43b00ced3501f353b277d62d34297d1cca01753dd7c06964f5235cfa6659", - "wire_schema_sha256": "8fce7b067d6f92dc7a0041c46977df7d11378352981e4802e2e822ffc828b1a2" + "ordered_tool_names_sha256": "c16319db465ee46af794c7d4ccbfe529b6d638b10bdd3175d90d114699977d5c", + "wire_schema_sha256": "d41559a67099451b5e968a2351d93e0d38fbef95711cbd4ad9c25ecea9afda1c" }, { - "id": "slack_bolt:public_channel_member:committee_leadership", + "id": "slack_bolt:public_channel_member:content", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "committee_leadership", + "route": "content", "selected_tool_sets": [ - "committee_leadership" + "content" ], "conditional_maximums": [ "google_docs_configured", @@ -16083,14 +16379,14 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 76, + "custom_tool_count": 71, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 59836, + "wire_schema_bytes": 54016, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], @@ -16146,42 +16442,37 @@ "send_to_si_agent", "end_si_session", "get_si_session_status", - "list_working_groups", "propose_content", "get_my_content", "list_pending_content", "approve_content", "reject_content", "request_revisions", + "add_committee_document", + "update_committee_document", + "delete_committee_document", "draft_github_issue", "create_github_issue", "get_github_issue", + "propose_news_source", "set_outreach_preference", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "create_event", - "manage_event_registrations", - "update_event", - "check_person_event_status", - "invite_to_event", - "search_image_library", - "add_committee_co_leader", - "remove_committee_co_leader", - "list_committee_co_leaders" + "search_image_library" ], - "ordered_tool_names_sha256": "c16319db465ee46af794c7d4ccbfe529b6d638b10bdd3175d90d114699977d5c", - "wire_schema_sha256": "d41559a67099451b5e968a2351d93e0d38fbef95711cbd4ad9c25ecea9afda1c" + "ordered_tool_names_sha256": "2fc2cb273fb676d21322b3d3272c7fe2b89bae06e3e451e80c86932806b743cc", + "wire_schema_sha256": "6e010363c57a8023a3ce9edb36f76da19e03b3769cb466498b8cbfa6d2947ed6" }, { - "id": "slack_bolt:public_channel_member:content", + "id": "slack_bolt:public_channel_member:directory", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "content", + "route": "directory", "selected_tool_sets": [ - "content" + "directory" ], "conditional_maximums": [ "google_docs_configured", @@ -16190,15 +16481,15 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 71, + "custom_tool_count": 70, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 54016, - "overridden_tool_count": 0, + "wire_schema_bytes": 53761, + "overridden_tool_count": 11, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -16259,13 +16550,12 @@ "approve_content", "reject_content", "request_revisions", - "add_committee_document", - "update_committee_document", - "delete_committee_document", "draft_github_issue", "create_github_issue", "get_github_issue", - "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", "set_outreach_preference", "check_illustration_status", "generate_perspective_illustration", @@ -16274,16 +16564,16 @@ "capture_learning", "search_image_library" ], - "ordered_tool_names_sha256": "2fc2cb273fb676d21322b3d3272c7fe2b89bae06e3e451e80c86932806b743cc", - "wire_schema_sha256": "6e010363c57a8023a3ce9edb36f76da19e03b3769cb466498b8cbfa6d2947ed6" + "ordered_tool_names_sha256": "ae1c15905731df2e653021500bfc316ece4015b66ff8354c2613e9d5179840da", + "wire_schema_sha256": "b0fccb25916f934297a605de0a3ef5f45ee099dc044b9341a85e40d8c742ead7" }, { - "id": "slack_bolt:public_channel_member:directory", + "id": "slack_bolt:public_channel_member:events", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "directory", + "route": "events", "selected_tool_sets": [ - "directory" + "events" ], "conditional_maximums": [ "google_docs_configured", @@ -16292,15 +16582,15 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 70, + "custom_tool_count": 71, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 53761, - "overridden_tool_count": 11, + "wire_schema_bytes": 53944, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -16364,27 +16654,28 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "search_members", - "request_introduction", - "get_my_search_analytics", "set_outreach_preference", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", "search_image_library" ], - "ordered_tool_names_sha256": "ae1c15905731df2e653021500bfc316ece4015b66ff8354c2613e9d5179840da", - "wire_schema_sha256": "b0fccb25916f934297a605de0a3ef5f45ee099dc044b9341a85e40d8c742ead7" + "ordered_tool_names_sha256": "47fa4cc32b45695509e714d4bceef884cdb0ecc2bcb1c9c3cc4035cd75859e79", + "wire_schema_sha256": "c70dffdfbd25d71112d8a2d6b303358537f06691ca5b7d1e20a5f337866619bf" }, { - "id": "slack_bolt:public_channel_member:events", + "id": "slack_bolt:public_channel_member:knowledge", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "events", + "route": "knowledge", "selected_tool_sets": [ - "events" + "knowledge" ], "conditional_maximums": [ "google_docs_configured", @@ -16393,15 +16684,15 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 71, + "custom_tool_count": 70, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 53944, - "overridden_tool_count": 0, + "wire_schema_bytes": 54450, + "overridden_tool_count": 4, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -16465,28 +16756,27 @@ "draft_github_issue", "create_github_issue", "get_github_issue", + "list_github_issues", "set_outreach_preference", + "search_slack", + "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", - "list_events", - "get_event_details", - "register_event_interest", - "list_event_attendees", "search_image_library" ], - "ordered_tool_names_sha256": "47fa4cc32b45695509e714d4bceef884cdb0ecc2bcb1c9c3cc4035cd75859e79", - "wire_schema_sha256": "c70dffdfbd25d71112d8a2d6b303358537f06691ca5b7d1e20a5f337866619bf" + "ordered_tool_names_sha256": "766b920233135a10c33ad69bf6e0dcd6fa4aafc5388a48c262147a343c541d92", + "wire_schema_sha256": "65978b053197788d4ab4d0b5281932ef21254ec1fdcd340f0f87335c1ee6d07a" }, { - "id": "slack_bolt:public_channel_member:knowledge", + "id": "slack_bolt:public_channel_member:meetings", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "knowledge", + "route": "meetings", "selected_tool_sets": [ - "knowledge" + "meetings" ], "conditional_maximums": [ "google_docs_configured", @@ -16495,15 +16785,15 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 70, + "custom_tool_count": 78, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 54450, - "overridden_tool_count": 4, + "wire_schema_bytes": 61826, + "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -16567,27 +16857,35 @@ "draft_github_issue", "create_github_issue", "get_github_issue", - "list_github_issues", "set_outreach_preference", - "search_slack", - "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", + "schedule_meeting", + "list_upcoming_meetings", + "get_my_meetings", + "get_meeting_details", + "rsvp_to_meeting", + "cancel_meeting", + "cancel_meeting_series", + "update_meeting", + "add_meeting_attendee", + "update_topic_subscriptions", + "manage_committee_topics", "search_image_library" ], - "ordered_tool_names_sha256": "766b920233135a10c33ad69bf6e0dcd6fa4aafc5388a48c262147a343c541d92", - "wire_schema_sha256": "65978b053197788d4ab4d0b5281932ef21254ec1fdcd340f0f87335c1ee6d07a" + "ordered_tool_names_sha256": "1118d061d1c316ff19fd22dd3d35d3563dbdad427c1b9fe4ef27d09b83a62634", + "wire_schema_sha256": "7853122f5b9f9b5e7e5e5bc63f36a97906e3d811a952ddf60d381d21a4e54adc" }, { - "id": "slack_bolt:public_channel_member:meetings", + "id": "slack_bolt:public_channel_member:member", "runtime": "slack_bolt", "audience": "public_channel_member", - "route": "meetings", + "route": "member", "selected_tool_sets": [ - "meetings" + "member" ], "conditional_maximums": [ "google_docs_configured", @@ -16596,17 +16894,133 @@ "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 78, + "custom_tool_count": 87, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 61826, + "wire_schema_bytes": 65759, "overridden_tool_count": 0, "conflicting_override_count": 0, "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "join_working_group", + "request_working_group_invitation", + "get_my_working_groups", + "express_council_interest", + "withdraw_council_interest", + "get_my_council_interests", + "get_my_profile", + "update_my_profile", + "get_company_listing", + "update_company_listing", + "update_company_logo", + "request_brand_domain_challenge", + "verify_brand_domain_challenge", + "list_perspectives", + "create_working_group_post", + "propose_content", + "attach_content_asset", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "list_committee_documents", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "set_outreach_preference", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "draft_social_posts", + "search_image_library" + ], + "ordered_tool_names_sha256": "2a7bc7f777a5ec8f19fa9164a1ee1e7ae336eb364a0db21569a5ff379a1ff680", + "wire_schema_sha256": "783185bb56d3594457f2dfdff18fd1ef0977e3a7971135f79629b9a61cd13a75" + }, + { + "id": "slack_bolt:public_channel_member:router_unavailable", + "runtime": "slack_bolt", + "audience": "public_channel_member", + "route": "router_unavailable", + "selected_tool_sets": [ + "knowledge" + ], + "conditional_maximums": [ + "router_unavailable", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 70, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 54450, + "overridden_tool_count": 4, + "conflicting_override_count": 0, + "conflicting_override_names": [], "ordered_tool_names": [ "search_docs", "get_doc", @@ -16668,12 +17082,1035 @@ "draft_github_issue", "create_github_issue", "get_github_issue", + "list_github_issues", "set_outreach_preference", + "search_slack", + "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", + "search_image_library" + ], + "ordered_tool_names_sha256": "766b920233135a10c33ad69bf6e0dcd6fa4aafc5388a48c262147a343c541d92", + "wire_schema_sha256": "65978b053197788d4ab4d0b5281932ef21254ec1fdcd340f0f87335c1ee6d07a" + }, + { + "id": "slack_bolt:system_channel_admin:admin:all_valid_sets_maximum", + "runtime": "slack_bolt", + "audience": "system_channel_admin", + "route": "system_role_admin_all_valid_sets_maximum", + "selected_tool_sets": [ + "knowledge", + "member", + "directory", + "agent_testing", + "agent_conformance", + "adcp_operations", + "content", + "billing", + "events", + "meetings", + "committee_leadership", + "admin", + "outreach", + "collaboration", + "certification" + ], + "conditional_maximums": [ + "server_configured_system_channel", + "router_returns_all_valid_tool_sets", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 217, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 167053, + "overridden_tool_count": 24, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "join_working_group", + "request_working_group_invitation", + "get_my_working_groups", + "express_council_interest", + "withdraw_council_interest", + "get_my_council_interests", + "get_my_profile", + "update_my_profile", + "get_company_listing", + "update_company_listing", + "update_company_logo", + "request_brand_domain_challenge", + "verify_brand_domain_challenge", + "list_perspectives", + "create_working_group_post", + "propose_content", + "attach_content_asset", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "add_committee_document", + "list_committee_documents", + "update_committee_document", + "delete_committee_document", + "get_account_link", + "get_agent_status", + "check_publisher_authorization", + "test_adcp_agent", + "evaluate_agent_quality", + "compare_media_kit", + "test_rfp_response", + "test_io_execution", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", + "grade_agent_signing", + "diagnose_agent_auth", + "issue_conformance_token", + "run_conformance_against_my_agent", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "preview_org_stripe_customer_update", + "confirm_org_stripe_customer_update", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "send_payment_request", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "grant_discount", + "remove_discount", + "list_discounts", + "create_promotion_code", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "schedule_meeting", + "list_upcoming_meetings", + "get_my_meetings", + "get_meeting_details", + "rsvp_to_meeting", + "cancel_meeting", + "cancel_meeting_series", + "update_meeting", + "add_meeting_attendee", + "update_topic_subscriptions", + "manage_committee_topics", + "send_member_dm", + "draft_social_posts", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders", + "list_certification_tracks", + "get_certification_module", + "start_certification_module", + "complete_certification_module", + "get_learner_progress", + "test_out_modules", + "start_certification_exam", + "complete_certification_exam" + ], + "ordered_tool_names_sha256": "64d21dff195adb56e922af9c868e6873f76c8304eb9515fab66f3c476f6b2536", + "wire_schema_sha256": "7c1a733a3bebe591f628772caf2b5df7486eb0fdfb54003389903ec0585a903c" + }, + { + "id": "slack_bolt:system_channel_admin:billing:all_valid_sets_maximum", + "runtime": "slack_bolt", + "audience": "system_channel_admin", + "route": "system_role_billing_all_valid_sets_maximum", + "selected_tool_sets": [ + "knowledge", + "member", + "directory", + "agent_testing", + "agent_conformance", + "adcp_operations", + "content", + "billing", + "events", + "meetings", + "committee_leadership", + "admin", + "outreach", + "collaboration", + "certification" + ], + "conditional_maximums": [ + "server_configured_system_channel", + "router_returns_all_valid_tool_sets", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 217, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 167053, + "overridden_tool_count": 24, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "join_working_group", + "request_working_group_invitation", + "get_my_working_groups", + "express_council_interest", + "withdraw_council_interest", + "get_my_council_interests", + "get_my_profile", + "update_my_profile", + "get_company_listing", + "update_company_listing", + "update_company_logo", + "request_brand_domain_challenge", + "verify_brand_domain_challenge", + "list_perspectives", + "create_working_group_post", + "propose_content", + "attach_content_asset", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "add_committee_document", + "list_committee_documents", + "update_committee_document", + "delete_committee_document", + "get_account_link", + "get_agent_status", + "check_publisher_authorization", + "test_adcp_agent", + "evaluate_agent_quality", + "compare_media_kit", + "test_rfp_response", + "test_io_execution", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", + "grade_agent_signing", + "diagnose_agent_auth", + "issue_conformance_token", + "run_conformance_against_my_agent", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "preview_org_stripe_customer_update", + "confirm_org_stripe_customer_update", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "send_payment_request", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "grant_discount", + "remove_discount", + "list_discounts", + "create_promotion_code", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "schedule_meeting", + "list_upcoming_meetings", + "get_my_meetings", + "get_meeting_details", + "rsvp_to_meeting", + "cancel_meeting", + "cancel_meeting_series", + "update_meeting", + "add_meeting_attendee", + "update_topic_subscriptions", + "manage_committee_topics", + "send_member_dm", + "draft_social_posts", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders", + "list_certification_tracks", + "get_certification_module", + "start_certification_module", + "complete_certification_module", + "get_learner_progress", + "test_out_modules", + "start_certification_exam", + "complete_certification_exam" + ], + "ordered_tool_names_sha256": "64d21dff195adb56e922af9c868e6873f76c8304eb9515fab66f3c476f6b2536", + "wire_schema_sha256": "7c1a733a3bebe591f628772caf2b5df7486eb0fdfb54003389903ec0585a903c" + }, + { + "id": "slack_bolt:system_channel_admin:error:all_valid_sets_maximum", + "runtime": "slack_bolt", + "audience": "system_channel_admin", + "route": "system_role_error_all_valid_sets_maximum", + "selected_tool_sets": [ + "knowledge", + "member", + "directory", + "agent_testing", + "agent_conformance", + "adcp_operations", + "content", + "billing", + "events", + "meetings", + "committee_leadership", + "admin", + "outreach", + "collaboration", + "certification" + ], + "conditional_maximums": [ + "server_configured_system_channel", + "router_returns_all_valid_tool_sets", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 217, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 167053, + "overridden_tool_count": 24, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "join_working_group", + "request_working_group_invitation", + "get_my_working_groups", + "express_council_interest", + "withdraw_council_interest", + "get_my_council_interests", + "get_my_profile", + "update_my_profile", + "get_company_listing", + "update_company_listing", + "update_company_logo", + "request_brand_domain_challenge", + "verify_brand_domain_challenge", + "list_perspectives", + "create_working_group_post", + "propose_content", + "attach_content_asset", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "add_committee_document", + "list_committee_documents", + "update_committee_document", + "delete_committee_document", + "get_account_link", + "get_agent_status", + "check_publisher_authorization", + "test_adcp_agent", + "evaluate_agent_quality", + "compare_media_kit", + "test_rfp_response", + "test_io_execution", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", + "grade_agent_signing", + "diagnose_agent_auth", + "issue_conformance_token", + "run_conformance_against_my_agent", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "preview_org_stripe_customer_update", + "confirm_org_stripe_customer_update", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "send_payment_request", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "grant_discount", + "remove_discount", + "list_discounts", + "create_promotion_code", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "schedule_meeting", + "list_upcoming_meetings", + "get_my_meetings", + "get_meeting_details", + "rsvp_to_meeting", + "cancel_meeting", + "cancel_meeting_series", + "update_meeting", + "add_meeting_attendee", + "update_topic_subscriptions", + "manage_committee_topics", + "send_member_dm", + "draft_social_posts", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders", + "list_certification_tracks", + "get_certification_module", + "start_certification_module", + "complete_certification_module", + "get_learner_progress", + "test_out_modules", + "start_certification_exam", + "complete_certification_exam" + ], + "ordered_tool_names_sha256": "64d21dff195adb56e922af9c868e6873f76c8304eb9515fab66f3c476f6b2536", + "wire_schema_sha256": "7c1a733a3bebe591f628772caf2b5df7486eb0fdfb54003389903ec0585a903c" + }, + { + "id": "slack_bolt:system_channel_admin:escalation:all_valid_sets_maximum", + "runtime": "slack_bolt", + "audience": "system_channel_admin", + "route": "system_role_escalation_all_valid_sets_maximum", + "selected_tool_sets": [ + "knowledge", + "member", + "directory", + "agent_testing", + "agent_conformance", + "adcp_operations", + "content", + "billing", + "events", + "meetings", + "committee_leadership", + "admin", + "outreach", + "collaboration", + "certification" + ], + "conditional_maximums": [ + "server_configured_system_channel", + "router_returns_all_valid_tool_sets", + "google_docs_configured", + "nonstreaming_web_search" + ], + "custom_tool_count": 217, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_names": [ + "web_search" + ], + "maximum_provider_tool_wire_bytes": 52, + "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", + "wire_schema_bytes": 167053, + "overridden_tool_count": 24, + "conflicting_override_count": 0, + "conflicting_override_names": [], + "ordered_tool_names": [ + "search_docs", + "get_doc", + "search_repos", + "search_resources", + "bookmark_resource", + "get_recent_news", + "find_membership_products", + "create_payment_link", + "send_invoice", + "confirm_send_invoice", + "get_billing_portal", + "validate_json", + "get_schema", + "list_schemas", + "compare_schema_versions", + "list_members", + "get_member", + "list_agents", + "get_agent", + "validate_agent", + "lookup_domain", + "list_publishers", + "research_brand", + "resolve_brand", + "save_brand", + "list_brands", + "list_missing_brands", + "upload_brand_logo", + "publish_brand_canonical_document", + "add_to_brand_refs", + "check_mutual_assertion", + "notify_pending_verification", + "validate_adagents", + "resolve_property", + "save_property", + "list_properties", + "list_missing_properties", + "check_property_list", + "enhance_property", + "resolve_catalog", + "browse_catalog", + "dispute_catalog_entry", + "fetch_url", + "read_slack_file", + "read_google_doc", + "get_si_availability", + "list_si_agents", + "connect_to_si_agent", + "send_to_si_agent", + "end_si_session", + "get_si_session_status", + "list_working_groups", + "get_working_group", + "join_working_group", + "request_working_group_invitation", + "get_my_working_groups", + "express_council_interest", + "withdraw_council_interest", + "get_my_council_interests", + "get_my_profile", + "update_my_profile", + "get_company_listing", + "update_company_listing", + "update_company_logo", + "request_brand_domain_challenge", + "verify_brand_domain_challenge", + "list_perspectives", + "create_working_group_post", + "propose_content", + "attach_content_asset", + "get_my_content", + "list_pending_content", + "approve_content", + "reject_content", + "request_revisions", + "add_committee_document", + "list_committee_documents", + "update_committee_document", + "delete_committee_document", + "get_account_link", + "get_agent_status", + "check_publisher_authorization", + "test_adcp_agent", + "evaluate_agent_quality", + "compare_media_kit", + "test_rfp_response", + "test_io_execution", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", + "draft_github_issue", + "create_github_issue", + "get_github_issue", + "list_github_issues", + "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", + "set_outreach_preference", + "search_slack", + "get_channel_activity", + "check_illustration_status", + "generate_perspective_illustration", + "escalate_to_admin", + "get_escalation_status", + "capture_learning", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", + "grade_agent_signing", + "diagnose_agent_auth", + "issue_conformance_token", + "run_conformance_against_my_agent", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "preview_org_stripe_customer_update", + "confirm_org_stripe_customer_update", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "send_payment_request", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "grant_discount", + "remove_discount", + "list_discounts", + "create_promotion_code", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", "schedule_meeting", "list_upcoming_meetings", "get_my_meetings", @@ -16685,35 +18122,61 @@ "add_meeting_attendee", "update_topic_subscriptions", "manage_committee_topics", - "search_image_library" + "send_member_dm", + "draft_social_posts", + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders", + "list_certification_tracks", + "get_certification_module", + "start_certification_module", + "complete_certification_module", + "get_learner_progress", + "test_out_modules", + "start_certification_exam", + "complete_certification_exam" ], - "ordered_tool_names_sha256": "1118d061d1c316ff19fd22dd3d35d3563dbdad427c1b9fe4ef27d09b83a62634", - "wire_schema_sha256": "7853122f5b9f9b5e7e5e5bc63f36a97906e3d811a952ddf60d381d21a4e54adc" + "ordered_tool_names_sha256": "64d21dff195adb56e922af9c868e6873f76c8304eb9515fab66f3c476f6b2536", + "wire_schema_sha256": "7c1a733a3bebe591f628772caf2b5df7486eb0fdfb54003389903ec0585a903c" }, { - "id": "slack_bolt:public_channel_member:member", + "id": "slack_bolt:system_channel_admin:prospect:all_valid_sets_maximum", "runtime": "slack_bolt", - "audience": "public_channel_member", - "route": "member", + "audience": "system_channel_admin", + "route": "system_role_prospect_all_valid_sets_maximum", "selected_tool_sets": [ - "member" + "knowledge", + "member", + "directory", + "agent_testing", + "agent_conformance", + "adcp_operations", + "content", + "billing", + "events", + "meetings", + "committee_leadership", + "admin", + "outreach", + "collaboration", + "certification" ], "conditional_maximums": [ + "server_configured_system_channel", + "router_returns_all_valid_tool_sets", "google_docs_configured", - "conformance_socket_enabled", - "event_and_meeting_permissions", - "member_content_permissions", "nonstreaming_web_search" ], - "custom_tool_count": 87, + "custom_tool_count": 217, "maximum_provider_tool_count": 1, "maximum_provider_tool_names": [ "web_search" ], "maximum_provider_tool_wire_bytes": 52, "maximum_provider_tool_wire_sha256": "41862a9288a9f94aa80bd76a6d113c5217ffb3b495e3b96e9ab3db014d52b275", - "wire_schema_bytes": 65759, - "overridden_tool_count": 0, + "wire_schema_bytes": 167053, + "overridden_tool_count": 24, "conflicting_override_count": 0, "conflicting_override_names": [], "ordered_tool_names": [ @@ -16792,21 +18255,151 @@ "approve_content", "reject_content", "request_revisions", + "add_committee_document", "list_committee_documents", + "update_committee_document", + "delete_committee_document", + "get_account_link", + "get_agent_status", + "check_publisher_authorization", + "test_adcp_agent", + "evaluate_agent_quality", + "compare_media_kit", + "test_rfp_response", + "test_io_execution", + "save_agent", + "list_saved_agents", + "remove_saved_agent", + "setup_test_agent", "draft_github_issue", "create_github_issue", "get_github_issue", + "list_github_issues", + "propose_news_source", + "search_members", + "request_introduction", + "get_my_search_analytics", "set_outreach_preference", + "search_slack", + "get_channel_activity", "check_illustration_status", "generate_perspective_illustration", "escalate_to_admin", "get_escalation_status", "capture_learning", + "ask_about_adcp_task", + "call_adcp_task", + "get_adcp_capabilities", + "grade_agent_signing", + "diagnose_agent_auth", + "issue_conformance_token", + "run_conformance_against_my_agent", + "list_pending_invoices", + "get_account", + "resend_invoice", + "update_billing_email", + "preview_org_stripe_customer_update", + "confirm_org_stripe_customer_update", + "add_prospect", + "update_prospect", + "enrich_company", + "query_prospects", + "send_payment_request", + "prospect_search_lusha", + "search_industry_feeds", + "add_industry_feed", + "get_feed_stats", + "get_platform_stats", + "list_feed_proposals", + "approve_feed_proposal", + "reject_feed_proposal", + "add_media_contact", + "list_flagged_conversations", + "review_flagged_conversation", + "grant_discount", + "remove_discount", + "list_discounts", + "create_promotion_code", + "create_chapter", + "list_chapters", + "create_industry_gathering", + "list_industry_gatherings", + "add_committee_leader", + "remove_committee_leader", + "list_committee_leaders", + "add_working_group_member", + "remove_working_group_member", + "merge_organizations", + "find_duplicate_orgs", + "check_domain_health", + "manage_organization_domains", + "update_org_member_role", + "rename_working_group", + "claim_prospect", + "suggest_prospects", + "set_reminder", + "my_upcoming_tasks", + "complete_task", + "log_conversation", + "get_member_search_analytics", + "list_organizations_by_users", + "list_slack_users_by_org", + "list_users_by_engagement", + "list_paying_members", + "list_escalations", + "resolve_escalation", + "update_member_logo", + "update_member_profile", + "triage_prospect_domain", + "get_outreach_stats", + "get_outreach_history", + "send_outreach", + "lookup_person", + "create_contact", + "get_action_items", + "list_pending_brand_logos", + "list_brand_logos", + "review_brand_logo", + "list_pending_community_mirrors", + "transfer_brand_ownership", + "list_orphaned_brands", + "list_events", + "get_event_details", + "register_event_interest", + "list_event_attendees", + "create_event", + "manage_event_registrations", + "update_event", + "check_person_event_status", + "invite_to_event", + "schedule_meeting", + "list_upcoming_meetings", + "get_my_meetings", + "get_meeting_details", + "rsvp_to_meeting", + "cancel_meeting", + "cancel_meeting_series", + "update_meeting", + "add_meeting_attendee", + "update_topic_subscriptions", + "manage_committee_topics", + "send_member_dm", "draft_social_posts", - "search_image_library" + "search_image_library", + "add_committee_co_leader", + "remove_committee_co_leader", + "list_committee_co_leaders", + "list_certification_tracks", + "get_certification_module", + "start_certification_module", + "complete_certification_module", + "get_learner_progress", + "test_out_modules", + "start_certification_exam", + "complete_certification_exam" ], - "ordered_tool_names_sha256": "2a7bc7f777a5ec8f19fa9164a1ee1e7ae336eb364a0db21569a5ff379a1ff680", - "wire_schema_sha256": "783185bb56d3594457f2dfdff18fd1ef0977e3a7971135f79629b9a61cd13a75" + "ordered_tool_names_sha256": "64d21dff195adb56e922af9c868e6873f76c8304eb9515fab66f3c476f6b2536", + "wire_schema_sha256": "7c1a733a3bebe591f628772caf2b5df7486eb0fdfb54003389903ec0585a903c" }, { "id": "tavus_voice:admin:maximum", @@ -18036,6 +19629,12 @@ "maximum_provider_tool_count": 1, "maximum_provider_tool_wire_bytes": 52 }, + "slack_bolt:system_channel_admin": { + "custom_tool_count": 217, + "wire_schema_bytes": 167053, + "maximum_provider_tool_count": 1, + "maximum_provider_tool_wire_bytes": 52 + }, "tavus_voice:admin": { "custom_tool_count": 220, "wire_schema_bytes": 162700, @@ -18079,12 +19678,12 @@ "maximum_provider_tool_wire_bytes": 52 } }, - "profile_ids_sha256": "5acc51e8ab204b5043ee416bcf3d1a48fa94ee8d7e1c5e5a7f71d39f93445a1b", - "profile_contract_sha256": "761dcbd0dd9ebefbbefb62a475472bf479cae4e11fc16e50aa2acb9f588a8465", + "profile_ids_sha256": "79957b57d370335967ead65eec0cb71fc81c3d469d222169f9319e6c3a3306a8", + "profile_contract_sha256": "f3ac0fa74e7fe520eb2ae537bc4c0d7f515c5fb23cb90ad8b490c529b8e964df", "status": "within_budget" }, "profile_contract": { - "profile_ids_sha256": "5acc51e8ab204b5043ee416bcf3d1a48fa94ee8d7e1c5e5a7f71d39f93445a1b", - "profile_contract_sha256": "761dcbd0dd9ebefbbefb62a475472bf479cae4e11fc16e50aa2acb9f588a8465" + "profile_ids_sha256": "79957b57d370335967ead65eec0cb71fc81c3d469d222169f9319e6c3a3306a8", + "profile_contract_sha256": "f3ac0fa74e7fe520eb2ae537bc4c0d7f515c5fb23cb90ad8b490c529b8e964df" } } diff --git a/server/src/addie/slack-tool-selection.ts b/server/src/addie/slack-tool-selection.ts new file mode 100644 index 0000000000..cc802d2ac7 --- /dev/null +++ b/server/src/addie/slack-tool-selection.ts @@ -0,0 +1,87 @@ +export type SlackToolSource = 'dm' | 'mention' | 'channel'; +export type SystemChannelRole = 'prospect' | 'escalation' | 'billing' | 'error' | 'admin'; + +export const ADMIN_CHANNEL_WG_SLUG = 'aao-admin'; + +/** Tool sets required by server-owned channel configuration. */ +export const SYSTEM_CHANNEL_TOOL_SETS: Readonly> = { + prospect: ['admin', 'outreach'], + escalation: ['admin'], + billing: ['admin', 'billing'], + error: ['admin'], + admin: ['admin'], +}; + +export interface SlackToolSetSelectionInput { + routerSelectedSets?: readonly string[]; + routerAvailable: boolean; + source: SlackToolSource; + isAdmin: boolean; + workingGroupSlug?: string | null; + systemRole?: SystemChannelRole | null; + /** Active certification modules override normal routing only in DMs. */ + hasActiveCertification?: boolean; +} + +export function hasActiveCertificationProgress( + progress: readonly { status: string }[], +): boolean { + return progress.some((entry) => entry.status === 'in_progress'); +} + +function appendUnique(target: string[], values: readonly string[]): void { + for (const value of values) { + if (!target.includes(value)) target.push(value); + } +} + +/** Apply server-owned Slack routing rules after the router proposes sets. */ +export function selectSlackToolSets(input: SlackToolSetSelectionInput): string[] { + if (input.source === 'dm' && input.hasActiveCertification) { + return ['certification', 'knowledge']; + } + + const selected = input.routerAvailable + ? [...(input.routerSelectedSets ?? [])] + : ['knowledge']; + + if ( + input.isAdmin + && (input.source === 'dm' || input.workingGroupSlug === ADMIN_CHANNEL_WG_SLUG) + ) { + appendUnique(selected, ['admin']); + } + + if (input.isAdmin && input.systemRole) { + appendUnique(selected, SYSTEM_CHANNEL_TOOL_SETS[input.systemRole] ?? []); + } + + return selected; +} + +/** Normalize Slack conversation privacy, including DM shapes that omit is_private. */ +export function resolveSlackChannelPrivacy(channel: { + is_im?: boolean; + is_mpim?: boolean; + is_private?: boolean; +}): boolean | null { + if (channel.is_im === true || channel.is_mpim === true) return true; + return typeof channel.is_private === 'boolean' ? channel.is_private : null; +} + +/** Resolve privacy-sensitive channel context without exposing resolver errors. */ +export async function resolveRequiredSlackChannelContext< + T extends { viewing_channel_is_private?: boolean }, +>( + channelId: string, + resolver: (id: string) => Promise, +): Promise { + try { + const context = await resolver(channelId); + return typeof context.viewing_channel_is_private === 'boolean' + ? context + : null; + } catch { + return null; + } +} diff --git a/server/tests/unit/addie/slack-tool-selection.test.ts b/server/tests/unit/addie/slack-tool-selection.test.ts new file mode 100644 index 0000000000..8039a9f7d7 --- /dev/null +++ b/server/tests/unit/addie/slack-tool-selection.test.ts @@ -0,0 +1,136 @@ +import { describe, expect, it } from 'vitest'; +import { + ADMIN_CHANNEL_WG_SLUG, + hasActiveCertificationProgress, + resolveRequiredSlackChannelContext, + resolveSlackChannelPrivacy, + selectSlackToolSets, + SYSTEM_CHANNEL_TOOL_SETS, + type SystemChannelRole, +} from '../../../src/addie/slack-tool-selection.js'; + +describe('Slack tool-set selection policy', () => { + it('distinguishes an active module from the no-module certification warning', () => { + expect(hasActiveCertificationProgress([])).toBe(false); + expect(hasActiveCertificationProgress([{ status: 'completed' }])).toBe(false); + expect(hasActiveCertificationProgress([{ status: 'in_progress' }])).toBe(true); + }); + + it.each([ + ['member DM', { source: 'dm', isAdmin: false }, ['knowledge']], + ['admin DM', { source: 'dm', isAdmin: true }, ['knowledge', 'admin']], + ['private admin channel', { source: 'channel', isAdmin: true }, ['knowledge']], + ['public admin channel', { source: 'channel', isAdmin: true }, ['knowledge']], + [ + 'admin working group', + { source: 'channel', isAdmin: true, workingGroupSlug: ADMIN_CHANNEL_WG_SLUG }, + ['knowledge', 'admin'], + ], + ] as const)('applies the normal %s policy', (_label, input, expected) => { + expect(selectSlackToolSets({ + routerSelectedSets: ['knowledge'], + routerAvailable: true, + ...input, + })).toEqual(expected); + }); + + it('overrides router and admin sets for an active certification DM', () => { + expect(selectSlackToolSets({ + routerSelectedSets: ['billing', 'admin'], + routerAvailable: true, + source: 'dm', + isAdmin: true, + hasActiveCertification: true, + })).toEqual(['certification', 'knowledge']); + }); + + it('applies the certification override when the router is unavailable', () => { + expect(selectSlackToolSets({ + routerAvailable: false, + source: 'dm', + isAdmin: true, + hasActiveCertification: true, + })).toEqual(['certification', 'knowledge']); + }); + + it('does not treat a non-DM certification context as a routing override', () => { + expect(selectSlackToolSets({ + routerSelectedSets: ['knowledge'], + routerAvailable: true, + source: 'channel', + isAdmin: true, + workingGroupSlug: ADMIN_CHANNEL_WG_SLUG, + hasActiveCertification: true, + })).toEqual(['knowledge', 'admin']); + }); + + it.each(Object.entries(SYSTEM_CHANNEL_TOOL_SETS) as Array<[SystemChannelRole, readonly string[]]>) ( + 'adds the exact %s system-channel sets for admins', + (systemRole, requiredSets) => { + expect(selectSlackToolSets({ + routerSelectedSets: ['knowledge'], + routerAvailable: true, + source: 'channel', + isAdmin: true, + systemRole, + })).toEqual(['knowledge', ...requiredSets]); + }, + ); + + it('never grants server-owned admin sets to a non-admin', () => { + expect(selectSlackToolSets({ + routerSelectedSets: ['knowledge'], + routerAvailable: true, + source: 'channel', + isAdmin: false, + workingGroupSlug: ADMIN_CHANNEL_WG_SLUG, + systemRole: 'billing', + })).toEqual(['knowledge']); + }); + + it('deduplicates router and server-owned sets without reordering them', () => { + expect(selectSlackToolSets({ + routerSelectedSets: ['billing', 'admin'], + routerAvailable: true, + source: 'channel', + isAdmin: true, + systemRole: 'billing', + })).toEqual(['billing', 'admin']); + }); + + it('returns verified channel context from the required resolver', async () => { + const context = { viewing_channel_is_private: false }; + await expect(resolveRequiredSlackChannelContext( + 'C123', + async () => context, + )).resolves.toBe(context); + await expect(resolveRequiredSlackChannelContext( + 'C456', + async () => ({ viewing_channel_is_private: true }), + )).resolves.toEqual({ viewing_channel_is_private: true }); + }); + + it.each([ + ['DM', { is_im: true }, true], + ['multi-person DM', { is_mpim: true }, true], + ['public channel', { is_private: false }, false], + ['private channel', { is_private: true }, true], + ['unclassified partial response', { name: 'unknown' }, null], + ] as const)('normalizes %s privacy', (_label, channel, expected) => { + expect(resolveSlackChannelPrivacy(channel)).toBe(expected); + }); + + it('fails closed when channel privacy is absent from partial context', async () => { + await expect(resolveRequiredSlackChannelContext( + 'C123', + async () => ({ viewing_channel_name: 'general' }), + )).resolves.toBeNull(); + }); + + it('fails closed when required channel context cannot be resolved', async () => { + await expect(resolveRequiredSlackChannelContext( + 'C123', + async () => { throw new Error('private resolver detail'); }, + )).resolves.toBeNull(); + }); +});