- Add context-guard.ts to detect interaction context (via-agent, direct, group) and generate guardrails. - Introduce onboarding.ts for conversational onboarding context templates and workspace file checks. - Enhance setup.ts to support new agent creation with channel binding and migration of existing bindings. - Create analyze-channel-bindings.ts to analyze channel availability and detect binding conflicts. - Implement context-test.ts for debugging context detection. - Develop devclaw_onboard.ts for explicit onboarding tool that guides users through setup. - Update devclaw_setup.ts to include channel binding and migration support in setup process. - Modify project-register.ts to enforce project registration from group context and auto-populate group ID. - Enhance queue-status.ts to provide context-aware status checks and recommendations. - Update task tools (task-complete, task-create, task-pickup) to clarify group ID usage for Telegram/WhatsApp.
83 lines
2.9 KiB
TypeScript
83 lines
2.9 KiB
TypeScript
/**
|
|
* analyze_channel_bindings — Check channel availability and detect binding conflicts.
|
|
*
|
|
* Returns analysis of the current channel binding state, including:
|
|
* - Whether the channel is configured and enabled
|
|
* - Existing channel-wide bindings (potential conflicts)
|
|
* - Existing group-specific bindings (no conflicts)
|
|
* - Recommendations for what to do
|
|
*/
|
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
import { jsonResult } from "openclaw/plugin-sdk";
|
|
import type { ToolContext } from "../types.js";
|
|
import {
|
|
analyzeChannelBindings,
|
|
type ChannelType,
|
|
} from "../binding-manager.js";
|
|
|
|
export function createAnalyzeChannelBindingsTool(api: OpenClawPluginApi) {
|
|
return (_ctx: ToolContext) => ({
|
|
name: "analyze_channel_bindings",
|
|
label: "Analyze Channel Bindings",
|
|
description:
|
|
"Check if a channel (telegram/whatsapp) is configured and analyze existing bindings. Use this during onboarding when the user selects a channel binding (telegram/whatsapp) to: detect if the channel is configured and enabled, identify existing channel-wide bindings that would conflict, and provide smart recommendations (migrate binding, skip binding, or proceed). Call this BEFORE devclaw_setup when creating a new agent with channel binding.",
|
|
parameters: {
|
|
type: "object",
|
|
properties: {
|
|
channel: {
|
|
type: "string",
|
|
enum: ["telegram", "whatsapp"],
|
|
description: "The channel to analyze (telegram or whatsapp)",
|
|
},
|
|
},
|
|
required: ["channel"],
|
|
},
|
|
|
|
async execute(_id: string, params: Record<string, unknown>) {
|
|
const channel = params.channel as ChannelType;
|
|
|
|
const analysis = await analyzeChannelBindings(channel);
|
|
|
|
const lines = [`**${channel.charAt(0).toUpperCase() + channel.slice(1)} Binding Analysis**`, ``];
|
|
|
|
if (!analysis.channelConfigured) {
|
|
lines.push(`❌ Channel not configured`);
|
|
} else if (!analysis.channelEnabled) {
|
|
lines.push(`⚠️ Channel configured but disabled`);
|
|
} else {
|
|
lines.push(`✅ Channel configured and enabled`);
|
|
}
|
|
|
|
lines.push(``);
|
|
|
|
if (analysis.existingChannelWideBinding) {
|
|
lines.push(
|
|
`**Existing Channel-Wide Binding:**`,
|
|
` Agent: ${analysis.existingChannelWideBinding.agentName} (${analysis.existingChannelWideBinding.agentId})`,
|
|
` ⚠️ This agent receives ALL ${channel} messages`,
|
|
``,
|
|
);
|
|
}
|
|
|
|
if (analysis.groupSpecificBindings.length > 0) {
|
|
lines.push(
|
|
`**Group-Specific Bindings:**`,
|
|
...analysis.groupSpecificBindings.map(
|
|
(b) => ` • ${b.agentName} (${b.agentId}) → group ${b.groupId}`,
|
|
),
|
|
``,
|
|
);
|
|
}
|
|
|
|
lines.push(`**Recommendation:**`, analysis.recommendation);
|
|
|
|
return jsonResult({
|
|
success: true,
|
|
channel,
|
|
...analysis,
|
|
summary: lines.join("\n"),
|
|
});
|
|
},
|
|
});
|
|
}
|