agent-ecosystem/agent-teams-controller/src/internal/memberMessagingProtocol.js
2026-04-24 22:41:16 +03:00

59 lines
2.3 KiB
JavaScript

function normalizeRuntimeProvider(value) {
const normalized = String(value || '').trim().toLowerCase();
return normalized === 'opencode' ? 'opencode' : 'native';
}
function createMemberMessagingProtocol(runtimeProvider) {
const provider = normalizeRuntimeProvider(runtimeProvider);
if (provider === 'opencode') {
return {
runtimeProvider: 'opencode',
sendToolName: 'agent-teams_message_send',
sendToolAliases: [
'agent-teams_message_send',
'agent_teams_message_send',
'mcp__agent-teams__message_send',
'mcp__agent_teams__message_send',
'message_send',
],
sendLeadPhrase: 'MCP tool agent-teams_message_send',
crossTeamPhrase: 'call MCP tool agent-teams_cross_team_send',
buildLeadMessageExample({ teamName, leadName, fromName, text, summary }) {
return `agent-teams_message_send { teamName: "${teamName}", to: "${leadName}", from: "${fromName}", text: "${text}", summary: "${summary}" }`;
},
buildCrossTeamMessageExample({ teamName, toTeam, fromName, text, summary }) {
return `agent-teams_cross_team_send { teamName: "${teamName}", toTeam: "${toTeam}", fromMember: "${fromName}", text: "${text}", summary: "${summary}" }`;
},
};
}
return {
runtimeProvider: 'native',
sendToolName: 'SendMessage',
sendToolAliases: ['SendMessage'],
sendLeadPhrase: 'SendMessage',
crossTeamPhrase: 'use the cross-team MCP tool cross_team_send',
buildLeadMessageExample({ leadName, text, summary }) {
return `SendMessage { to: "${leadName}", summary: "${summary}", message: "${text}" }`;
},
buildCrossTeamMessageExample({ teamName, toTeam, fromName, text, summary }) {
return `cross_team_send { teamName: "${teamName}", toTeam: "${toTeam}", fromMember: "${fromName}", text: "${text}", summary: "${summary}" }`;
},
};
}
function isOpenCodeMember(member) {
const provider = String((member && (member.providerId || member.provider)) || '')
.trim()
.toLowerCase();
if (provider) return provider === 'opencode';
const model = String((member && member.model) || '').trim().toLowerCase();
return model.startsWith('opencode/');
}
module.exports = {
createMemberMessagingProtocol,
isOpenCodeMember,
normalizeRuntimeProvider,
};