get_copilot_usage_summary
Retrieves a concise summary of GitHub Copilot usage, including remaining premium quota and token savings.
Instructions
Obtém um resumo conciso do uso do GitHub Copilot com informações principais, como o restante da quota premium (economiza tokens)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/server.js:27-31 (registration)Tool 'get_copilot_usage_summary' is registered in the listToolsHandler with its name, description, and inputSchema.
{ name: 'get_copilot_usage_summary', description: 'Obtém um resumo conciso do uso do GitHub Copilot com informações principais, como o restante da quota premium (economiza tokens)', inputSchema: { type: 'object', properties: {}, required: [] } } - src/server.js:52-55 (handler)The callToolHandler dispatches the 'get_copilot_usage_summary' tool to the createUsageSummary function and returns its output.
if (name === 'get_copilot_usage_summary') { const summary = createUsageSummary(usageData); return { content: [{ type: 'text', text: summary }] }; } - src/formatter.js:84-106 (helper)The createUsageSummary function is the core logic that generates a concise summary of GitHub Copilot usage, focusing on premium interactions quota, chat/completions status, and next reset date.
export function createUsageSummary(data) { const quotas = data.quota_snapshots; const summaryLines = []; summaryLines.push(`📊 **Resumo GitHub Copilot** (${data.copilot_plan})\n`); // Status mais importante - interações premium if (!quotas.premium_interactions.unlimited) { const remaining = quotas.premium_interactions.remaining; const total = quotas.premium_interactions.entitlement; const percent = quotas.premium_interactions.percent_remaining.toFixed(1); summaryLines.push(`⭐ **Interações Premium**: ${remaining}/${total} restantes (${percent}%)`); } // Chat e Completions (geralmente ilimitados) summaryLines.push(`🗨️ **Chat**: ${quotas.chat.unlimited ? 'Ilimitado' : quotas.chat.remaining + '/' + quotas.chat.entitlement}`); summaryLines.push(`💡 **Completions**: ${quotas.completions.unlimited ? 'Ilimitado' : quotas.completions.remaining + '/' + quotas.completions.entitlement}`); summaryLines.push(`\n📅 **Renovação**: ${formatDate(data.quota_reset_date)}`); const summary = summaryLines.join('\n'); return summary; } - src/api.js:8-35 (helper)The fetchCopilotUsage function is called first to fetch raw usage data from the GitHub Copilot API, which is then passed to createUsageSummary.
export async function fetchCopilotUsage(token) { try { const response = await fetch('https://api.github.com/copilot_internal/user', { method: 'GET', headers: { 'Accept': 'application/json', 'Authorization': `token ${token}`, 'Editor-Version': 'vscode/1.98.1', 'Editor-Plugin-Version': 'copilot-chat/0.26.7', 'User-Agent': 'GitHubCopilotChat/0.26.7', 'X-Github-Api-Version': '2025-04-01' } }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Erro na requisição: ${response.status} ${response.statusText}. Detalhes: ${errorText}`); } const data = await response.json(); return data; } catch (error) { if (error.name === 'TypeError' && error.message.includes('fetch')) { throw new Error('Erro de rede: Não foi possível conectar à API do GitHub. Verifique sua conexão com a internet.'); } throw error; } }