@elizaos/plugin-github 1.2.9 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.js +1870 -6835
- package/dist/index.js.map +27 -1
- package/package.json +67 -63
- package/.npmignore +0 -5
- package/README.md +0 -658
- package/dist/index.d.ts +0 -563
- package/tsup.config.ts +0 -32
package/dist/index.js.map
CHANGED
|
@@ -1 +1,27 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/services/github.ts","../src/types.ts","../src/actions/repository.ts","../src/actions/issues.ts","../src/actions/pullRequests.ts","../src/actions/activity.ts","../src/actions/search.ts","../src/actions/users.ts","../src/actions/branches.ts","../src/actions/stats.ts","../src/actions/webhooks.ts","../src/actions/autoCoder.ts","../src/providers/github.ts"],"sourcesContent":["import type { Plugin } from \"@elizaos/core\";\nimport {\n type Action,\n type IAgentRuntime,\n type Provider,\n logger,\n ModelType,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"./services/github\";\nimport {\n githubConfigSchema,\n githubConfigSchemaFlexible,\n type GitHubConfig,\n} from \"./types\";\nimport * as crypto from \"crypto\";\nimport { z } from \"zod\";\n\n// Schema for intelligent webhook event analysis\nconst WebhookEventAnalysisSchema = z.object({\n isAgentMentioned: z.boolean(),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n mentionContext: z.string().optional(),\n actionRequired: z.boolean(),\n urgency: z.enum([\"low\", \"medium\", \"high\"]),\n mentionType: z.enum([\n \"direct_mention\",\n \"implicit_request\",\n \"false_positive\",\n \"none\",\n ]),\n});\n\ntype WebhookEventAnalysis = z.infer<typeof WebhookEventAnalysisSchema>;\n\n// Schema for message relevance analysis\nconst MessageRelevanceSchema = z.object({\n isGitHubRelated: z.boolean(),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n context: z.enum([\"repository\", \"issue\", \"pull_request\", \"general\", \"none\"]),\n requiresAction: z.boolean(),\n});\n\ntype MessageRelevance = z.infer<typeof MessageRelevanceSchema>;\n\n// Use LLM to analyze if agent is mentioned in webhook content\nasync function analyzeWebhookMention(\n runtime: IAgentRuntime,\n content: string,\n agentName: string,\n context: string,\n): Promise<WebhookEventAnalysis> {\n const prompt = `Analyze this GitHub content to determine if the agent \"${agentName}\" is being mentioned or requested:\n\nContent: \"${content}\"\nContext: ${context}\n\nConsider:\n1. Direct mentions like @${agentName}\n2. Implicit requests for help or automation\n3. Context clues that suggest the agent should respond\n4. False positives (just mentioning the name without intent)\n\nRespond with JSON:\n{\n \"isAgentMentioned\": boolean,\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"detailed explanation\",\n \"mentionContext\": \"relevant context around the mention\",\n \"actionRequired\": boolean,\n \"urgency\": \"low\" | \"medium\" | \"high\",\n \"mentionType\": \"direct_mention\" | \"implicit_request\" | \"false_positive\" | \"none\"\n}`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n temperature: 0.2,\n max_tokens: 400,\n });\n\n // Extract JSON from response that might contain markdown backticks\n let jsonText = response;\n if (typeof response === \"string\") {\n // Remove markdown code block markers if present\n jsonText = response.replace(/```json\\s*|\\s*```/g, \"\").trim();\n // Try to find JSON object in the text\n const jsonMatch = jsonText.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n jsonText = jsonMatch[0];\n }\n }\n\n return WebhookEventAnalysisSchema.parse(JSON.parse(jsonText));\n } catch (_error) {\n logger.warn(\"Failed to analyze webhook mention:\", _error);\n return {\n isAgentMentioned: false,\n confidence: 0,\n reasoning: \"Failed to parse mention analysis\",\n actionRequired: false,\n urgency: \"low\",\n mentionType: \"none\",\n };\n }\n}\n\n// Use LLM to analyze message relevance to GitHub\nasync function analyzeMessageRelevance(\n runtime: IAgentRuntime,\n text: string,\n): Promise<MessageRelevance> {\n const prompt = `Analyze this message to determine if it's related to GitHub or requires GitHub plugin functionality:\n\nMessage: \"${text}\"\n\nConsider:\n1. Mentions of GitHub, repositories, issues, pull requests\n2. Git commands or operations\n3. Repository names (owner/repo format)\n4. Issue/PR numbers (#123)\n5. GitHub URLs\n6. Development workflows that might involve GitHub\n\nRespond with JSON:\n{\n \"isGitHubRelated\": boolean,\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"detailed explanation\",\n \"context\": \"repository\" | \"issue\" | \"pull_request\" | \"general\" | \"none\",\n \"requiresAction\": boolean\n}`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n temperature: 0.2,\n max_tokens: 300,\n });\n\n // Extract JSON from response that might contain markdown backticks\n let jsonText = response;\n if (typeof response === \"string\") {\n // Remove markdown code block markers if present\n jsonText = response.replace(/```json\\s*|\\s*```/g, \"\").trim();\n // Try to find JSON object in the text\n const jsonMatch = jsonText.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n jsonText = jsonMatch[0];\n }\n }\n\n return MessageRelevanceSchema.parse(JSON.parse(jsonText));\n } catch (error) {\n logger.warn(\"Failed to analyze message relevance:\", error);\n return {\n isGitHubRelated: false,\n confidence: 0,\n reasoning: \"Failed to parse relevance analysis\",\n context: \"none\",\n requiresAction: false,\n };\n }\n}\n\n// Import all actions\nimport {\n getRepositoryAction,\n listRepositoriesAction,\n createRepositoryAction,\n searchRepositoriesAction,\n} from \"./actions/repository\";\n\nimport {\n getIssueAction,\n listIssuesAction,\n createIssueAction,\n searchIssuesAction,\n} from \"./actions/issues\";\n\nimport {\n getPullRequestAction,\n listPullRequestsAction,\n createPullRequestAction,\n mergePullRequestAction,\n} from \"./actions/pullRequests\";\n\nimport {\n getGitHubActivityAction,\n clearGitHubActivityAction,\n getGitHubRateLimitAction,\n} from \"./actions/activity\";\n\nimport { searchGitHubAction } from \"./actions/search\";\n\nimport {\n getUserProfileAction,\n getUserStatsAction,\n listUserRepositoriesAction,\n} from \"./actions/users\";\n\nimport {\n listBranchesAction,\n createBranchAction,\n getBranchProtectionAction,\n} from \"./actions/branches\";\n\nimport {\n getRepositoryStatsAction,\n getRepositoryTrafficAction,\n} from \"./actions/stats\";\n\nimport {\n createWebhookAction,\n listWebhooksAction,\n deleteWebhookAction,\n pingWebhookAction,\n} from \"./actions/webhooks\";\n\nimport {\n autoCodeIssueAction,\n respondToMentionAction,\n} from \"./actions/autoCoder\";\n\n// Import all providers\nimport {\n githubRepositoryProvider,\n githubIssuesProvider,\n githubPullRequestsProvider,\n githubActivityProvider,\n githubUserProvider,\n} from \"./providers/github\";\n\n// Test suites are defined in a separate module to avoid bundling in production\n// They will be loaded dynamically by the test runner when needed\n\n// Webhook signature verification\nfunction verifyWebhookSignature(\n payload: any,\n signature: string | undefined,\n secret: string,\n): boolean {\n if (!signature || !secret) {\n return false;\n }\n\n const hmac = crypto.createHmac(\"sha256\", secret);\n const digest = `sha256=${hmac.update(JSON.stringify(payload)).digest(\"hex\")}`;\n\n // Use timingSafeEqual to prevent timing attacks\n if (signature.length !== digest.length) {\n return false;\n }\n\n return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(digest));\n}\n\n// Process webhook events\nasync function processWebhookEvent(\n runtime: IAgentRuntime,\n event: string,\n payload: any,\n): Promise<void> {\n // Emit the raw GitHub event\n await runtime.emitEvent(`github:${event}`, {\n runtime,\n payload,\n repository: payload.repository,\n sender: payload.sender,\n });\n\n // Handle specific events\n switch (event) {\n case \"issues\":\n if (payload.action === \"opened\" || payload.action === \"edited\") {\n const issue = payload.issue;\n const body = issue.body || \"\";\n const title = issue.title || \"\";\n const agentName = runtime.character.name;\n const content = `${title}\\n${body}`;\n const context = `Issue #${issue.number} in ${payload.repository.full_name}`;\n\n // Use intelligent analysis instead of string matching\n const analysis = await analyzeWebhookMention(\n runtime,\n content,\n agentName,\n context,\n );\n\n if (analysis.isAgentMentioned && analysis.confidence > 0.6) {\n logger.info(\n `Agent ${agentName} intelligently detected in issue #${issue.number} (confidence: ${Math.round(analysis.confidence * 100)}%)`,\n );\n logger.debug(`Mention analysis: ${analysis.reasoning}`);\n\n await runtime.emitEvent(\"github:agent_mentioned\", {\n runtime,\n issue,\n repository: payload.repository,\n action: payload.action,\n analysis, // Include analysis for downstream processing\n });\n } else if (analysis.confidence > 0.3) {\n logger.debug(\n `Possible mention detected but below threshold: ${analysis.reasoning}`,\n );\n }\n }\n break;\n\n case \"issue_comment\":\n if (payload.action === \"created\" || payload.action === \"edited\") {\n const comment = payload.comment;\n const body = comment.body || \"\";\n const agentName = runtime.character.name;\n const context = `Comment on issue #${payload.issue.number} in ${payload.repository.full_name}`;\n\n // Use intelligent analysis instead of string matching\n const analysis = await analyzeWebhookMention(\n runtime,\n body,\n agentName,\n context,\n );\n\n if (analysis.isAgentMentioned && analysis.confidence > 0.6) {\n logger.info(\n `Agent ${agentName} intelligently detected in issue comment (confidence: ${Math.round(analysis.confidence * 100)}%)`,\n );\n logger.debug(`Mention analysis: ${analysis.reasoning}`);\n\n await runtime.emitEvent(\"github:agent_mentioned_comment\", {\n runtime,\n issue: payload.issue,\n comment,\n repository: payload.repository,\n action: payload.action,\n analysis, // Include analysis for downstream processing\n });\n } else if (analysis.confidence > 0.3) {\n logger.debug(\n `Possible mention in comment detected but below threshold: ${analysis.reasoning}`,\n );\n }\n }\n break;\n\n case \"pull_request\":\n // Emit PR-specific events\n if (payload.action === \"opened\") {\n await runtime.emitEvent(\"github:pr_opened\", {\n runtime,\n pullRequest: payload.pull_request,\n repository: payload.repository,\n });\n }\n break;\n\n default:\n logger.debug(`Received GitHub webhook event: ${event}`);\n }\n}\n\n// Collect all actions - enabled property is now directly on action objects\nconst githubActions: Action[] = [\n // Repository actions - read actions enabled, create disabled\n getRepositoryAction,\n listRepositoriesAction,\n createRepositoryAction, // Has enabled: false property\n searchRepositoriesAction,\n\n // Issue actions - read/list enabled, create disabled by default\n getIssueAction,\n listIssuesAction,\n createIssueAction, // Has enabled: false property\n searchIssuesAction,\n\n // Pull request actions - view enabled, modify disabled\n getPullRequestAction,\n listPullRequestsAction,\n createPullRequestAction, // Has enabled: false property\n mergePullRequestAction, // Has enabled: false property\n\n // Activity actions - all enabled for monitoring\n getGitHubActivityAction,\n clearGitHubActivityAction,\n getGitHubRateLimitAction,\n\n // Search actions - enabled for information gathering\n searchGitHubAction,\n\n // User actions - all enabled for information\n getUserProfileAction,\n getUserStatsAction,\n listUserRepositoriesAction,\n\n // Branch actions - list enabled, create/modify disabled\n listBranchesAction,\n createBranchAction, // Has enabled: false property\n getBranchProtectionAction,\n\n // Stats actions - all enabled for monitoring\n getRepositoryStatsAction,\n getRepositoryTrafficAction,\n\n // Webhook actions - disabled by default (infrastructure changes)\n createWebhookAction, // Has enabled: false property\n listWebhooksAction,\n deleteWebhookAction, // Has enabled: false property\n pingWebhookAction,\n\n // Auto-coder actions - enabled for productivity\n autoCodeIssueAction,\n respondToMentionAction,\n];\n\n// Collect all providers\nconst githubProviders: Provider[] = [\n githubRepositoryProvider,\n githubIssuesProvider,\n githubPullRequestsProvider,\n githubActivityProvider,\n githubUserProvider,\n];\n\nexport const githubPlugin: Plugin = {\n name: \"plugin-github\",\n description:\n \"Comprehensive GitHub integration plugin for ElizaOS with repository management, issue tracking, and PR workflows\",\n\n dependencies: [\"ngrok\"],\n\n config: {\n GITHUB_TOKEN: process.env.GITHUB_TOKEN,\n GITHUB_OWNER: process.env.GITHUB_OWNER,\n GITHUB_WEBHOOK_SECRET: process.env.GITHUB_WEBHOOK_SECRET,\n },\n\n async init(\n config: Record<string, string>,\n runtime?: IAgentRuntime,\n ): Promise<void> {\n logger.info(\"Initializing GitHub plugin...\");\n\n try {\n // Try to get token from runtime if available\n const token =\n runtime?.getSetting(\"GITHUB_TOKEN\") ||\n runtime?.getSetting(\"GITHUB_TOKEN\") ||\n config.GITHUB_TOKEN ||\n config.GITHUB_TOKEN ||\n process.env.GITHUB_TOKEN ||\n process.env.GITHUB_TOKEN;\n\n // Detect if we're in a test environment\n const isTestEnv =\n process.env.NODE_ENV === \"test\" ||\n process.env.VITEST === \"true\" ||\n process.env.JEST_WORKER_ID !== undefined ||\n process.argv.some(\n (arg) => arg.includes(\"test\") || arg.includes(\"spec\"),\n ) ||\n typeof (globalThis as any).describe !== \"undefined\" || // Vitest globals\n typeof (globalThis as any).it !== \"undefined\" ||\n typeof (globalThis as any).expect !== \"undefined\" ||\n (token &&\n (token.startsWith(\"test-\") ||\n token.startsWith(\"dummy-\") ||\n token === \"dummy-token-for-testing\")) ||\n // Additional test environment detection for benchmarks and scenarios\n process.argv.some(\n (arg) => arg.includes(\"benchmark\") || arg.includes(\"scenario\"),\n ) ||\n process.cwd().includes(\"scenarios\");\n\n // Debug log for test environment detection\n if (token && token.includes(\"dummy\")) {\n console.log(\n `GitHub Plugin Debug: isTestEnv=${isTestEnv}, token=${token}, NODE_ENV=${process.env.NODE_ENV}`,\n );\n }\n\n const owner =\n runtime?.getSetting(\"GITHUB_OWNER\") ||\n config.GITHUB_OWNER ||\n process.env.GITHUB_OWNER;\n\n const webhookSecret =\n runtime?.getSetting(\"GITHUB_WEBHOOK_SECRET\") ||\n config.GITHUB_WEBHOOK_SECRET ||\n process.env.GITHUB_WEBHOOK_SECRET;\n\n const validatedConfig = {\n GITHUB_TOKEN: token,\n GITHUB_OWNER: owner,\n GITHUB_WEBHOOK_SECRET: webhookSecret,\n };\n\n // Use flexible validation for testing\n const configSchema = isTestEnv\n ? githubConfigSchemaFlexible\n : githubConfigSchema;\n\n // In test mode, be more permissive with validation\n if (isTestEnv) {\n try {\n await configSchema.parseAsync(validatedConfig);\n } catch (validationError) {\n logger.warn(\n \"Test mode: Config validation failed but continuing with mock config:\",\n validationError,\n );\n // Continue with mock configuration in test mode\n }\n } else {\n // Production mode: require strict validation\n if (!token) {\n throw new Error(\"GitHub token is required\");\n }\n await configSchema.parseAsync(validatedConfig);\n }\n\n // Store validated config for the service using proper state management\n // Avoid global state pollution - use runtime settings instead\n if (runtime) {\n // Store in runtime character settings for service access\n runtime.character.settings = runtime.character.settings || {};\n runtime.character.settings.githubConfig = validatedConfig;\n }\n\n logger.info(\"GitHub plugin configuration validated successfully\");\n\n if (validatedConfig.GITHUB_TOKEN) {\n logger.info(\n `GitHub token type: ${\n validatedConfig.GITHUB_TOKEN.startsWith(\"ghp_\")\n ? \"Personal Access Token\"\n : validatedConfig.GITHUB_TOKEN.startsWith(\"github_pat_\")\n ? \"Fine-grained Token\"\n : \"Other\"\n }`,\n );\n } else if (isTestEnv) {\n logger.info(\"Running in test mode without GitHub token\");\n }\n\n // Check for Ngrok service availability (in non-test mode only to avoid timing issues)\n if (runtime && !isTestEnv) {\n setTimeout(async () => {\n try {\n const tunnelService = runtime.getService(\"tunnel\") as any;\n if (tunnelService && tunnelService.isActive()) {\n const tunnelUrl = await tunnelService.getUrl();\n if (tunnelUrl) {\n logger.info(\n `GitHub webhook endpoint available at: ${tunnelUrl}/api/github/webhook`,\n );\n if (validatedConfig.GITHUB_WEBHOOK_SECRET) {\n logger.info(\n \"GitHub webhook secret is configured - signatures will be verified\",\n );\n } else {\n logger.warn(\n \"GitHub webhook secret is NOT configured - webhooks will be accepted without verification\",\n );\n }\n }\n } else {\n logger.info(\n \"Ngrok service not available - webhooks will only work with public URLs\",\n );\n }\n } catch (error) {\n logger.debug(\"Could not check Ngrok service status:\", error);\n }\n }, 1000); // Delay to allow Ngrok service to initialize\n }\n\n // Ensure we return void\n } catch (error) {\n logger.error(\"GitHub plugin configuration validation failed:\", error);\n\n // Detect test environment again (need to redeclare since we're in catch block)\n const isTestEnvInCatch =\n process.env.NODE_ENV === \"test\" ||\n process.env.VITEST === \"true\" ||\n process.argv.some((arg) => arg.includes(\"test\")) ||\n typeof (globalThis as any).describe !== \"undefined\" ||\n typeof (globalThis as any).it !== \"undefined\" ||\n typeof (globalThis as any).expect !== \"undefined\";\n\n // In test environment, don't throw - just log the warning\n if (isTestEnvInCatch) {\n logger.warn(\"Running in test mode with invalid GitHub configuration\");\n return; // Return void instead of Promise.resolve()\n }\n\n throw new Error(\n `Invalid GitHub plugin configuration: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n\n routes: [\n {\n name: \"github-status\",\n path: \"/api/github/status\",\n type: \"GET\",\n handler: async (req: any, res: any) => {\n try {\n // This endpoint provides GitHub plugin status\n const runtime = (req as any).runtime as IAgentRuntime;\n const config = runtime?.character?.settings\n ?.githubConfig as GitHubConfig;\n\n res.json({\n status: \"active\",\n plugin: \"plugin-github\",\n version: \"1.0.0\",\n authenticated: !!config?.GITHUB_TOKEN,\n tokenType: config?.GITHUB_TOKEN?.startsWith(\"ghp_\")\n ? \"pat\"\n : config?.GITHUB_TOKEN?.startsWith(\"github_pat_\")\n ? \"fine-grained\"\n : \"unknown\",\n timestamp: new Date().toISOString(),\n });\n } catch (error) {\n res.status(500).json({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date().toISOString(),\n });\n }\n },\n },\n {\n name: \"github-activity\",\n path: \"/api/github/activity\",\n type: \"GET\",\n handler: async (req: any, res: any) => {\n try {\n // This endpoint provides recent GitHub activity\n const runtime = (req as any).runtime as IAgentRuntime;\n const githubService = runtime?.getService<GitHubService>(\"github\");\n\n if (!githubService) {\n return res.status(503).json({\n error: \"GitHub service not available\",\n timestamp: new Date().toISOString(),\n });\n }\n\n const limit = parseInt(req.query.limit as string, 10) || 50;\n const activityLog = githubService.getActivityLog(limit);\n\n const stats = {\n total: activityLog.length,\n success: activityLog.filter((a) => a.success).length,\n failed: activityLog.filter((a) => !a.success).length,\n };\n\n res.json({\n status: \"success\",\n stats,\n activity: activityLog,\n timestamp: new Date().toISOString(),\n });\n } catch (error) {\n res.status(500).json({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date().toISOString(),\n });\n }\n },\n },\n {\n name: \"github-rate-limit\",\n path: \"/api/github/rate-limit\",\n type: \"GET\",\n handler: async (req: any, res: any) => {\n try {\n // This endpoint provides GitHub API rate limit status\n const runtime = (req as any).runtime as IAgentRuntime;\n const githubService = runtime?.getService<GitHubService>(\"github\");\n\n if (!githubService) {\n return res.status(503).json({\n error: \"GitHub service not available\",\n timestamp: new Date().toISOString(),\n });\n }\n\n const rateLimit = await githubService.getRateLimit();\n\n res.json({\n status: \"success\",\n rateLimit,\n timestamp: new Date().toISOString(),\n });\n } catch (error) {\n res.status(500).json({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date().toISOString(),\n });\n }\n },\n },\n {\n name: \"github-webhook\",\n path: \"/api/github/webhook\",\n type: \"POST\",\n handler: async (req: any, res: any) => {\n try {\n const runtime = (req as any).runtime as IAgentRuntime;\n const config = runtime?.character?.settings\n ?.githubConfig as GitHubConfig;\n const secret = config?.GITHUB_WEBHOOK_SECRET;\n\n // Get webhook event type\n const event = req.headers[\"x-github-event\"];\n const signature = req.headers[\"x-hub-signature-256\"];\n const payload = req.body;\n\n // Log webhook receipt\n logger.info(`Received GitHub webhook event: ${event}`);\n\n // SECURITY: Make signature verification mandatory\n if (!secret) {\n logger.error(\n \"GitHub webhook secret not configured - rejecting webhook for security\",\n );\n res.statusCode = 401;\n return res.end(\"Webhook secret required for security\");\n }\n\n if (!signature) {\n logger.error(\"GitHub webhook signature missing\");\n res.statusCode = 401;\n return res.end(\"Webhook signature required\");\n }\n\n if (!verifyWebhookSignature(payload, signature, secret)) {\n logger.error(\"GitHub webhook signature verification failed\");\n res.statusCode = 401;\n return res.end(\"Invalid webhook signature\");\n }\n\n logger.debug(\"GitHub webhook signature verified successfully\");\n\n // Process the webhook event\n if (runtime) {\n await processWebhookEvent(runtime, event, payload);\n } else {\n logger.warn(\"Runtime not available for webhook processing\");\n }\n\n res.statusCode = 200;\n res.end(\"OK\");\n } catch (error) {\n logger.error(\"Error processing GitHub webhook:\", error);\n res.statusCode = 500;\n res.end(\"Internal Server Error\");\n }\n },\n },\n ],\n\n events: {\n MESSAGE_RECEIVED: [\n async (params) => {\n // Use intelligent analysis for GitHub-related messages\n const { runtime, message } = params;\n\n if (message.content.text && runtime) {\n try {\n const relevance = await analyzeMessageRelevance(\n runtime,\n message.content.text,\n );\n\n if (relevance.isGitHubRelated && relevance.confidence > 0.7) {\n logger.debug(\"GitHub-related message intelligently detected\", {\n messageId: message.id,\n confidence: Math.round(relevance.confidence * 100),\n context: relevance.context,\n reasoning: relevance.reasoning,\n requiresAction: relevance.requiresAction,\n });\n\n // Could trigger specific GitHub actions based on context\n if (relevance.requiresAction && relevance.confidence > 0.8) {\n logger.info(\n `High-confidence GitHub action required: ${relevance.reasoning}`,\n );\n }\n }\n } catch (error) {\n // Fallback to basic pattern matching only as last resort\n const text = message.content.text.toLowerCase();\n const hasBasicGithubPattern =\n /github\\.com|@[\\w-]+\\/[\\w-]+|#\\d+/.test(text);\n\n if (hasBasicGithubPattern) {\n logger.debug(\n \"GitHub-related message detected via fallback pattern matching\",\n {\n messageId: message.id,\n note: \"LLM analysis failed, using basic patterns\",\n },\n );\n }\n }\n }\n },\n ],\n \"github:agent_mentioned\": [\n async (params) => {\n const { runtime, issue, repository, action } = params;\n logger.info(\n `Agent mentioned in issue #${issue.number} in ${repository.full_name}`,\n );\n\n // Trigger the respond to mention action\n await runtime.processAction(\"RESPOND_TO_GITHUB_MENTION\", {\n issue,\n repository,\n action,\n });\n },\n ],\n \"github:agent_mentioned_comment\": [\n async (params) => {\n const { runtime, issue, comment, repository, action } = params;\n logger.info(`Agent mentioned in comment on issue #${issue.number}`);\n\n // Trigger the respond to mention action\n await runtime.processAction(\"RESPOND_TO_GITHUB_MENTION\", {\n issue,\n comment,\n repository,\n action,\n });\n },\n ],\n \"github:issues\": [\n async (params) => {\n const { runtime, payload } = params;\n logger.info(\n `GitHub issue event: ${payload.action} on issue #${payload.issue.number}`,\n );\n\n // Log issue events for monitoring\n if (payload.action === \"opened\") {\n logger.info(\n `New issue opened: #${payload.issue.number} - ${payload.issue.title}`,\n );\n }\n },\n ],\n \"github:pull_request\": [\n async (params) => {\n const { runtime, payload } = params;\n logger.info(\n `GitHub PR event: ${payload.action} on PR #${payload.pull_request.number}`,\n );\n\n // Log PR events for monitoring\n if (payload.action === \"opened\") {\n logger.info(\n `New PR opened: #${payload.pull_request.number} - ${payload.pull_request.title}`,\n );\n }\n },\n ],\n },\n\n services: [GitHubService],\n actions: githubActions,\n providers: githubProviders,\n // Tests are loaded separately to avoid bundling test framework code in production\n tests: [],\n};\n\n// Export individual components for external use\nexport { GitHubService, githubActions, githubProviders };\n\n// Export types for external use\nexport * from \"./types\";\n\nexport default githubPlugin;\n","import { logger, Service, type IAgentRuntime } from \"@elizaos/core\";\nimport { Octokit } from \"@octokit/rest\";\n\nexport interface GitHubConfig {\n GITHUB_TOKEN: string;\n GITHUB_USERNAME?: string;\n GITHUB_EMAIL?: string;\n}\n\nexport interface GitHubActivityItem {\n id: string;\n timestamp: string;\n action: string;\n resource_type: \"repository\" | \"issue\" | \"pr\" | \"user\";\n resource_id: string;\n details: Record<string, any>;\n success: boolean;\n error?: string;\n}\n\n// Error classes\nexport class GitHubAPIError extends Error {\n constructor(\n message: string,\n public status?: number,\n public response?: any,\n ) {\n super(message);\n this.name = \"GitHubAPIError\";\n }\n}\n\nexport class GitHubAuthenticationError extends GitHubAPIError {\n constructor(message: string) {\n super(message, 401);\n this.name = \"GitHubAuthenticationError\";\n }\n}\n\nexport class GitHubRateLimitError extends GitHubAPIError {\n constructor(\n message: string,\n public resetTime: number,\n ) {\n super(message, 403);\n this.name = \"GitHubRateLimitError\";\n }\n}\n\n// Removed unused type imports\n\nexport class GitHubService extends Service {\n static serviceType = \"github\";\n\n capabilityDescription =\n \"GitHub API integration for repository, issue, and PR management\";\n\n private octokit: Octokit;\n private rateLimitRemaining: number = 5000;\n private rateLimitReset: number = 0;\n private activityLog: GitHubActivityItem[] = [];\n private githubConfig: GitHubConfig;\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n\n // Get config from runtime settings\n const githubToken = runtime?.getSetting(\"GITHUB_TOKEN\") as string;\n const githubUsername = runtime?.getSetting(\"GITHUB_USERNAME\") as string;\n const githubEmail = runtime?.getSetting(\"GITHUB_EMAIL\") as string;\n\n if (!githubToken) {\n throw new Error(\"GitHub token is required\");\n }\n\n this.githubConfig = {\n GITHUB_TOKEN: githubToken,\n GITHUB_USERNAME: githubUsername,\n GITHUB_EMAIL: githubEmail,\n };\n\n this.config = {\n GITHUB_TOKEN: githubToken,\n GITHUB_USERNAME: githubUsername,\n GITHUB_EMAIL: githubEmail,\n };\n\n this.octokit = new Octokit({\n auth: this.githubConfig.GITHUB_TOKEN,\n userAgent: \"ElizaOS GitHub Plugin\",\n });\n }\n\n static async start(runtime: IAgentRuntime): Promise<GitHubService> {\n const service = new GitHubService(runtime);\n logger.info(\"GitHub service started\");\n return service;\n }\n\n async stop(): Promise<void> {\n this.activityLog = [];\n logger.info(\"GitHub service stopped\");\n }\n\n /**\n * Validate authentication by checking user permissions\n */\n async validateAuthentication(): Promise<boolean> {\n try {\n await this.checkRateLimit();\n const { data } = await this.octokit.users.getAuthenticated();\n this.updateRateLimit((data as any)?.headers || {});\n\n this.logActivity(\n \"validate_authentication\",\n \"user\",\n data.login || \"unknown\",\n { user_id: data.id },\n true,\n );\n\n return true;\n } catch (error) {\n this.logActivity(\n \"validate_authentication\",\n \"user\",\n \"unknown\",\n {},\n false,\n String(error),\n );\n return false;\n }\n }\n\n /**\n * Rate limiting helper to prevent hitting GitHub API limits\n */\n private async checkRateLimit(): Promise<void> {\n const now = Date.now() / 1000;\n\n // If we're near the rate limit and reset time hasn't passed, wait\n if (this.rateLimitRemaining < 100 && now < this.rateLimitReset) {\n const waitTime = (this.rateLimitReset - now + 1) * 1000;\n logger.warn(\n `GitHub rate limit low (${this.rateLimitRemaining}), waiting ${waitTime}ms`,\n );\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n }\n\n /**\n * Update rate limit info from response headers\n */\n private updateRateLimit(headers: any): void {\n if (headers[\"x-ratelimit-remaining\"]) {\n this.rateLimitRemaining = parseInt(headers[\"x-ratelimit-remaining\"], 10);\n }\n if (headers[\"x-ratelimit-reset\"]) {\n this.rateLimitReset = parseInt(headers[\"x-ratelimit-reset\"], 10);\n }\n }\n\n /**\n * Sanitize error for logging (remove sensitive data)\n */\n private sanitizeError(error: any): any {\n const sanitized = { ...error };\n\n // Remove sensitive headers and response data\n if (sanitized.response) {\n delete sanitized.response.headers?.authorization;\n delete sanitized.response.headers?.[\"x-github-token\"];\n delete sanitized.response.request?.headers?.authorization;\n }\n\n if (sanitized.request) {\n delete sanitized.request.headers?.authorization;\n delete sanitized.request.headers?.[\"x-github-token\"];\n }\n\n return sanitized;\n }\n\n /**\n * Validate GitHub username/repo name format\n */\n private validateGitHubName(\n name: string,\n type: \"owner\" | \"repo\" | \"username\",\n ): void {\n const pattern = /^[a-zA-Z0-9\\-_.]+$/;\n if (!pattern.test(name)) {\n throw new Error(`Invalid GitHub ${type} name: ${name}`);\n }\n }\n\n /**\n * Get authenticated user information\n */\n async getAuthenticatedUser(): Promise<any> {\n try {\n await this.checkRateLimit();\n const { data, headers } = await this.octokit.users.getAuthenticated();\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_authenticated_user\",\n \"user\",\n data.login,\n { user: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_authenticated_user\",\n \"user\",\n \"unknown\",\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get user by username\n */\n async getUserByUsername(username: string): Promise<any> {\n try {\n this.validateGitHubName(username, \"owner\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.users.getByUsername({\n username,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\"get_user\", \"user\", username, { user: data }, true);\n return data;\n } catch (error) {\n this.logActivity(\"get_user\", \"user\", username, {}, false, String(error));\n throw this.handleError(error);\n }\n }\n\n /**\n * Get repository information\n */\n async getRepository(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.get({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_repository\",\n \"repository\",\n `${owner}/${repo}`,\n { repository: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_repository\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List repositories for authenticated user\n */\n async getRepositories(\n options: {\n visibility?: \"all\" | \"public\" | \"private\";\n affiliation?: \"owner\" | \"collaborator\" | \"organization_member\";\n type?: \"all\" | \"owner\" | \"public\" | \"private\" | \"member\";\n sort?: \"created\" | \"updated\" | \"pushed\" | \"full_name\";\n direction?: \"asc\" | \"desc\";\n per_page?: number;\n } = {},\n ): Promise<any> {\n try {\n await this.checkRateLimit();\n\n const { data, headers } =\n await this.octokit.repos.listForAuthenticatedUser({\n visibility: options.visibility || \"all\",\n affiliation:\n options.affiliation || \"owner,collaborator,organization_member\",\n type: options.type || \"all\",\n sort: options.sort || \"updated\",\n direction: options.direction || \"desc\",\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"list_repositories\",\n \"repository\",\n \"authenticated_user\",\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"list_repositories\",\n \"repository\",\n \"authenticated_user\",\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get repository issues\n */\n async getRepositoryIssues(\n owner: string,\n repo: string,\n options: {\n milestone?: string | number;\n state?: \"open\" | \"closed\" | \"all\";\n assignee?: string;\n creator?: string;\n mentioned?: string;\n labels?: string;\n sort?: \"created\" | \"updated\" | \"comments\";\n direction?: \"asc\" | \"desc\";\n since?: string;\n per_page?: number;\n } = {},\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.issues.listForRepo({\n owner,\n repo,\n milestone: options.milestone ? String(options.milestone) : undefined,\n state: options.state || \"open\",\n assignee: options.assignee,\n creator: options.creator,\n mentioned: options.mentioned,\n labels: options.labels,\n sort: options.sort || \"created\",\n direction: options.direction || \"desc\",\n since: options.since,\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_repository_issues\",\n \"repository\",\n `${owner}/${repo}`,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_repository_issues\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get specific issue\n */\n async getIssue(\n owner: string,\n repo: string,\n issue_number: number,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.issues.get({\n owner,\n repo,\n issue_number,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_issue\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n { issue: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_issue\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Create issue comment\n */\n async createIssueComment(\n owner: string,\n repo: string,\n issue_number: number,\n body: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n if (!body.trim()) {\n throw new Error(\"Comment body cannot be empty\");\n }\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.issues.createComment({\n owner,\n repo,\n issue_number,\n body,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_issue_comment\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n { comment: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_issue_comment\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get issue comments\n */\n async getIssueComments(\n owner: string,\n repo: string,\n issue_number: number,\n options: {\n since?: string;\n per_page?: number;\n } = {},\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.issues.listComments({\n owner,\n repo,\n issue_number,\n since: options.since,\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_issue_comments\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_issue_comments\",\n \"issue\",\n `${owner}/${repo}#${issue_number}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get repository pull requests\n */\n async getRepositoryPullRequests(\n owner: string,\n repo: string,\n options: {\n state?: \"open\" | \"closed\" | \"all\";\n head?: string;\n base?: string;\n sort?: \"created\" | \"updated\" | \"popularity\";\n direction?: \"asc\" | \"desc\";\n per_page?: number;\n } = {},\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.pulls.list({\n owner,\n repo,\n state: options.state || \"open\",\n head: options.head,\n base: options.base,\n sort: options.sort || \"created\",\n direction: options.direction || \"desc\",\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_repository_pull_requests\",\n \"repository\",\n `${owner}/${repo}`,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_repository_pull_requests\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get specific pull request\n */\n async getPullRequest(\n owner: string,\n repo: string,\n pull_number: number,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.pulls.get({\n owner,\n repo,\n pull_number,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_pull_request\",\n \"pr\",\n `${owner}/${repo}#${pull_number}`,\n { pr: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_pull_request\",\n \"pr\",\n `${owner}/${repo}#${pull_number}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Create pull request\n */\n async createPullRequest(\n owner: string,\n repo: string,\n options: {\n title: string;\n head: string;\n base: string;\n body?: string;\n maintainer_can_modify?: boolean;\n draft?: boolean;\n },\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.pulls.create({\n owner,\n repo,\n title: options.title,\n head: options.head,\n base: options.base,\n body: options.body,\n maintainer_can_modify: options.maintainer_can_modify,\n draft: options.draft,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_pull_request\",\n \"pr\",\n `${owner}/${repo}#${data.number}`,\n { pr: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_pull_request\",\n \"pr\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Create or update file\n */\n async createOrUpdateFile(\n owner: string,\n repo: string,\n path: string,\n content: string,\n message: string,\n branch?: string,\n sha?: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } =\n await this.octokit.repos.createOrUpdateFileContents({\n owner,\n repo,\n path,\n message,\n content: Buffer.from(content).toString(\"base64\"),\n branch,\n sha,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_or_update_file\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n { commit: data.commit },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_or_update_file\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get file content\n */\n async getFileContent(\n owner: string,\n repo: string,\n path: string,\n ref?: string,\n ): Promise<{ content: string; sha: string }> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getContent({\n owner,\n repo,\n path,\n ref,\n });\n this.updateRateLimit(headers);\n\n // Handle file content (not directory)\n if (\"content\" in data && typeof data.content === \"string\") {\n const content = Buffer.from(data.content, \"base64\").toString(\"utf-8\");\n\n this.logActivity(\n \"get_file_content\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n { fileSize: content.length },\n true,\n );\n\n return {\n content,\n sha: data.sha,\n };\n }\n\n throw new Error(\"Path is not a file or content not available\");\n } catch (error) {\n this.logActivity(\n \"get_file_content\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Delete file\n */\n async deleteFile(\n owner: string,\n repo: string,\n path: string,\n message: string,\n sha: string,\n branch?: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.deleteFile({\n owner,\n repo,\n path,\n message,\n sha,\n branch,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"delete_file\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n { commit: data.commit },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"delete_file\",\n \"repository\",\n `${owner}/${repo}:${path}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get repository tree\n */\n async getRepositoryTree(\n owner: string,\n repo: string,\n tree_sha?: string,\n ): Promise<any[]> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n // Get default branch if no tree_sha provided\n if (!tree_sha) {\n const repoData = await this.getRepository(owner, repo);\n tree_sha = repoData.default_branch;\n }\n\n const { data, headers } = await this.octokit.git.getTree({\n owner,\n repo,\n tree_sha: tree_sha || \"HEAD\",\n recursive: \"true\",\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_repository_tree\",\n \"repository\",\n `${owner}/${repo}`,\n { treeCount: data.tree.length },\n true,\n );\n return data.tree;\n } catch (error) {\n this.logActivity(\n \"get_repository_tree\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get default branch\n */\n async getDefaultBranch(owner: string, repo: string): Promise<string> {\n try {\n const repository = await this.getRepository(owner, repo);\n return repository.default_branch;\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Create webhook\n */\n async createWebhook(\n owner: string,\n repo: string,\n config: {\n url: string;\n content_type?: \"json\" | \"form\";\n secret?: string;\n insecure_ssl?: string;\n },\n events: string[] = [\"push\"],\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.createWebhook({\n owner,\n repo,\n config,\n events,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n { webhook: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List webhooks\n */\n async listWebhooks(owner: string, repo: string): Promise<any[]> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.listWebhooks({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"list_webhooks\",\n \"repository\",\n `${owner}/${repo}`,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"list_webhooks\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Delete webhook\n */\n async deleteWebhook(\n owner: string,\n repo: string,\n hook_id: number,\n ): Promise<void> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n await this.octokit.repos.deleteWebhook({\n owner,\n repo,\n hook_id,\n });\n\n this.logActivity(\n \"delete_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n { webhook_id: hook_id },\n true,\n );\n } catch (error) {\n this.logActivity(\n \"delete_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Ping webhook\n */\n async pingWebhook(\n owner: string,\n repo: string,\n hook_id: number,\n ): Promise<void> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n await this.octokit.repos.pingWebhook({\n owner,\n repo,\n hook_id,\n });\n\n this.logActivity(\n \"ping_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n { webhook_id: hook_id },\n true,\n );\n } catch (error) {\n this.logActivity(\n \"ping_webhook\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get activity log for debugging and monitoring\n */\n getActivityLog(limit?: number): GitHubActivityItem[] {\n const log = this.activityLog.slice(); // Return a copy\n return limit ? log.slice(-limit) : log;\n }\n\n /**\n * Clear activity log\n */\n clearActivityLog(): void {\n this.activityLog = [];\n }\n\n /**\n * Get rate limit status\n */\n getRateLimitStatus(): {\n remaining: number;\n reset: number;\n limit: number;\n used: number;\n resource: string;\n } {\n const used = 5000 - this.rateLimitRemaining;\n return {\n remaining: this.rateLimitRemaining,\n reset: this.rateLimitReset,\n limit: 5000,\n used,\n resource: \"core\",\n };\n }\n\n /**\n * Get rate limit (alias for compatibility)\n */\n getRateLimit(): {\n remaining: number;\n reset: number;\n limit: number;\n used: number;\n resource: string;\n } {\n return this.getRateLimitStatus();\n }\n\n /**\n * Get current authenticated user (alias for compatibility)\n */\n async getCurrentUser(): Promise<any> {\n return this.getAuthenticatedUser();\n }\n\n /**\n * Get Git reference\n */\n async getRef(owner: string, repo: string, ref: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.git.getRef({\n owner,\n repo,\n ref,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_ref\",\n \"repository\",\n `${owner}/${repo}:${ref}`,\n { ref: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_ref\",\n \"repository\",\n `${owner}/${repo}:${ref}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Create a new branch\n */\n async createBranch(\n owner: string,\n repo: string,\n branchName: string,\n sha: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.git.createRef({\n owner,\n repo,\n ref: `refs/heads/${branchName}`,\n sha,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_branch\",\n \"repository\",\n `${owner}/${repo}:${branchName}`,\n { branch: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_branch\",\n \"repository\",\n `${owner}/${repo}:${branchName}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List branches\n */\n async listBranches(owner: string, repo: string): Promise<any[]> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.listBranches({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"list_branches\",\n \"repository\",\n `${owner}/${repo}`,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"list_branches\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get branch details\n */\n async getBranch(owner: string, repo: string, branch: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getBranch({\n owner,\n repo,\n branch,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_branch\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n { data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_branch\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Delete a branch\n */\n async deleteBranch(\n owner: string,\n repo: string,\n branch: string,\n ): Promise<void> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { headers } = await this.octokit.git.deleteRef({\n owner,\n repo,\n ref: `heads/${branch}`,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"delete_branch\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n {},\n true,\n );\n } catch (error) {\n this.logActivity(\n \"delete_branch\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Compare two branches\n */\n async compareBranches(\n owner: string,\n repo: string,\n base: string,\n head: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.compareCommits({\n owner,\n repo,\n base,\n head,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"compare_branches\",\n \"repository\",\n `${owner}/${repo}:${base}...${head}`,\n { comparison: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"compare_branches\",\n \"repository\",\n `${owner}/${repo}:${base}...${head}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get branch protection settings\n */\n async getBranchProtection(\n owner: string,\n repo: string,\n branch: string,\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getBranchProtection({\n owner,\n repo,\n branch,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_branch_protection\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n { protection: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_branch_protection\",\n \"repository\",\n `${owner}/${repo}:${branch}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List issues\n */\n async listIssues(\n owner: string,\n repo: string,\n options: any = {},\n ): Promise<any> {\n return this.getRepositoryIssues(owner, repo, options);\n }\n\n /**\n * Create issue\n */\n async createIssue(\n owner: string,\n repo: string,\n options: {\n title: string;\n body?: string;\n assignees?: string[];\n milestone?: number;\n labels?: string[];\n },\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.issues.create({\n owner,\n repo,\n title: options.title,\n body: options.body,\n assignees: options.assignees,\n milestone: options.milestone ? String(options.milestone) : undefined,\n labels: options.labels,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_issue\",\n \"issue\",\n `${owner}/${repo}#${data.number}`,\n { issue: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_issue\",\n \"issue\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Search issues\n */\n async searchIssues(query: string, options: any = {}): Promise<any> {\n try {\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.search.issuesAndPullRequests(\n {\n q: query,\n sort: options.sort,\n order: options.order,\n per_page: options.per_page || 30,\n },\n );\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"search_issues\",\n \"issue\",\n query,\n { count: data.items.length },\n true,\n );\n return data; // Return the full search result with items and total_count\n } catch (error) {\n this.logActivity(\n \"search_issues\",\n \"issue\",\n query,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Search pull requests\n */\n async searchPullRequests(query: string, options: any = {}): Promise<any> {\n // Pull requests are also issues in GitHub's API, so we use the same endpoint\n // but ensure we're searching for PRs\n const prQuery = query.includes(\"is:pr\") ? query : `${query} is:pr`;\n return this.searchIssues(prQuery, options);\n }\n\n /**\n * List pull requests\n */\n async listPullRequests(\n owner: string,\n repo: string,\n options: any = {},\n ): Promise<any> {\n return this.getRepositoryPullRequests(owner, repo, options);\n }\n\n /**\n * Merge pull request\n */\n async mergePullRequest(\n owner: string,\n repo: string,\n pull_number: number,\n options: {\n commit_title?: string;\n commit_message?: string;\n merge_method?: \"merge\" | \"squash\" | \"rebase\";\n } = {},\n ): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.pulls.merge({\n owner,\n repo,\n pull_number,\n commit_title: options.commit_title,\n commit_message: options.commit_message,\n merge_method: options.merge_method || \"merge\",\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"merge_pull_request\",\n \"pr\",\n `${owner}/${repo}#${pull_number}`,\n { merge: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"merge_pull_request\",\n \"pr\",\n `${owner}/${repo}#${pull_number}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List repositories\n */\n async listRepositories(options: any = {}): Promise<any> {\n return this.getRepositories(options);\n }\n\n /**\n * Create repository\n */\n async createRepository(options: {\n name: string;\n description?: string;\n private?: boolean;\n auto_init?: boolean;\n gitignore_template?: string;\n license_template?: string;\n }): Promise<any> {\n try {\n await this.checkRateLimit();\n\n const { data, headers } =\n await this.octokit.repos.createForAuthenticatedUser({\n name: options.name,\n description: options.description,\n private: options.private,\n auto_init: options.auto_init,\n gitignore_template: options.gitignore_template,\n license_template: options.license_template,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"create_repository\",\n \"repository\",\n data.full_name,\n { repository: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"create_repository\",\n \"repository\",\n options.name,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Search repositories\n */\n async searchRepositories(query: string, options: any = {}): Promise<any> {\n try {\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.search.repos({\n q: query,\n sort: options.sort,\n order: options.order,\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"search_repositories\",\n \"repository\",\n query,\n { count: data.items.length },\n true,\n );\n return data; // Return the full search result with items and total_count\n } catch (error) {\n this.logActivity(\n \"search_repositories\",\n \"repository\",\n query,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get contributors stats\n */\n async getContributorsStats(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getContributorsStats({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_contributors_stats\",\n \"repository\",\n `${owner}/${repo}`,\n { stats: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_contributors_stats\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get commit activity stats\n */\n async getCommitActivityStats(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getCommitActivityStats(\n {\n owner,\n repo,\n },\n );\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_commit_activity_stats\",\n \"repository\",\n `${owner}/${repo}`,\n { stats: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_commit_activity_stats\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get code frequency stats\n */\n async getCodeFrequencyStats(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getCodeFrequencyStats({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_code_frequency_stats\",\n \"repository\",\n `${owner}/${repo}`,\n { stats: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_code_frequency_stats\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get repository languages\n */\n async getLanguages(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.listLanguages({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_languages\",\n \"repository\",\n `${owner}/${repo}`,\n { languages: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_languages\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get traffic views\n */\n async getTrafficViews(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getViews({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_traffic_views\",\n \"repository\",\n `${owner}/${repo}`,\n { views: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_traffic_views\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get traffic clones\n */\n async getTrafficClones(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getClones({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_traffic_clones\",\n \"repository\",\n `${owner}/${repo}`,\n { clones: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_traffic_clones\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get top paths\n */\n async getTopPaths(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getTopPaths({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_top_paths\",\n \"repository\",\n `${owner}/${repo}`,\n { paths: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_top_paths\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get top referrers\n */\n async getTopReferrers(owner: string, repo: string): Promise<any> {\n try {\n this.validateGitHubName(owner, \"owner\");\n this.validateGitHubName(repo, \"repo\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.getTopReferrers({\n owner,\n repo,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"get_top_referrers\",\n \"repository\",\n `${owner}/${repo}`,\n { referrers: data },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"get_top_referrers\",\n \"repository\",\n `${owner}/${repo}`,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * Get user information\n */\n async getUser(username: string): Promise<any> {\n try {\n this.validateGitHubName(username, \"username\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.users.getByUsername({\n username,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\"get_user\", \"user\", username, { user: data }, true);\n return data;\n } catch (error) {\n this.logActivity(\"get_user\", \"user\", username, {}, false, String(error));\n throw this.handleError(error);\n }\n }\n\n /**\n * List user repositories\n */\n async listUserRepositories(\n username: string,\n options: any = {},\n ): Promise<any> {\n try {\n this.validateGitHubName(username, \"username\");\n\n await this.checkRateLimit();\n\n const { data, headers } = await this.octokit.repos.listForUser({\n username,\n type: options.type || \"owner\",\n sort: options.sort || \"updated\",\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"list_user_repositories\",\n \"user\",\n username,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"list_user_repositories\",\n \"user\",\n username,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n /**\n * List user events\n */\n async listUserEvents(username: string, options: any = {}): Promise<any> {\n try {\n this.validateGitHubName(username, \"username\");\n\n await this.checkRateLimit();\n\n const { data, headers } =\n await this.octokit.activity.listEventsForAuthenticatedUser({\n username,\n per_page: options.per_page || 30,\n });\n this.updateRateLimit(headers);\n\n this.logActivity(\n \"list_user_events\",\n \"user\",\n username,\n { count: data.length },\n true,\n );\n return data;\n } catch (error) {\n this.logActivity(\n \"list_user_events\",\n \"user\",\n username,\n {},\n false,\n String(error),\n );\n throw this.handleError(error);\n }\n }\n\n private logActivity(\n action: string,\n resourceType: \"repository\" | \"issue\" | \"pr\" | \"user\",\n resourceId: string,\n details: Record<string, any> = {},\n success: boolean = true,\n error?: string,\n ) {\n const activity: GitHubActivityItem = {\n id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: new Date().toISOString(),\n action,\n resource_type: resourceType,\n resource_id: resourceId,\n details,\n success,\n error,\n };\n\n this.activityLog.push(activity);\n\n // Keep only the last 1000 activities to prevent memory issues\n if (this.activityLog.length > 1000) {\n this.activityLog = this.activityLog.slice(-1000);\n }\n\n if (success) {\n logger.info(\n `GitHub activity: ${action} on ${resourceType} ${resourceId}`,\n );\n } else {\n logger.error(\n `GitHub activity failed: ${action} on ${resourceType} ${resourceId} - ${error}`,\n );\n }\n }\n\n private handleError(error: any): GitHubAPIError {\n // Log the sanitized error for debugging\n logger.error(\n \"[GitHubService] GitHub API error:\",\n this.sanitizeError(error),\n );\n\n if (error.status === 401) {\n return new GitHubAuthenticationError(\n \"GitHub authentication failed. Please verify your token.\",\n );\n }\n\n if (\n error.status === 403 &&\n error.response?.headers?.[\"x-ratelimit-remaining\"] === \"0\"\n ) {\n const resetTime = parseInt(\n error.response.headers[\"x-ratelimit-reset\"] || \"0\",\n 10,\n );\n return new GitHubRateLimitError(\n \"GitHub API rate limit exceeded\",\n resetTime,\n );\n }\n\n if (error.status === 404) {\n return new GitHubAPIError(\n \"Resource not found. Please check the repository/issue/PR exists and you have access.\",\n error.status,\n undefined, // Don't include response to avoid potential token exposure\n );\n }\n\n if (error.status === 422) {\n return new GitHubAPIError(\n \"Invalid request. Please check the provided parameters.\",\n error.status,\n undefined,\n );\n }\n\n return new GitHubAPIError(\n error.message || \"GitHub API error occurred\",\n error.status || 500,\n undefined, // Don't include response to avoid potential token exposure\n );\n }\n}\n","import { z } from \"zod\";\n\n// GitHub Configuration Schema (Production)\nexport const githubConfigSchema = z.object({\n GITHUB_TOKEN: z\n .string()\n .min(1, \"GitHub token is required\")\n .refine(\n (token) =>\n token.startsWith(\"ghp_\") ||\n token.startsWith(\"github_pat_\") ||\n token.startsWith(\"gho_\") ||\n token.startsWith(\"ghu_\") ||\n token.startsWith(\"ghs_\") ||\n token.startsWith(\"ghr_\"),\n \"Invalid GitHub token format\",\n ),\n GITHUB_OWNER: z.string().optional(),\n GITHUB_WEBHOOK_SECRET: z.string().optional(),\n});\n\n// Flexible GitHub Configuration Schema for testing\nexport const githubConfigSchemaFlexible = z.object({\n GITHUB_TOKEN: z\n .union([z.string(), z.null(), z.undefined()])\n .optional()\n .nullable()\n .refine(\n (token) =>\n !token || // Allow undefined/null\n token === \"\" || // Allow empty string\n token.startsWith(\"ghp_\") ||\n token.startsWith(\"github_pat_\") ||\n token.startsWith(\"gho_\") ||\n token.startsWith(\"ghu_\") ||\n token.startsWith(\"ghs_\") ||\n token.startsWith(\"ghr_\") ||\n token === \"invalid-token-format\" || // Allow invalid for testing\n token === \"dummy-token-for-testing\" || // Allow specific test token\n token.startsWith(\"test-\") || // Allow test tokens\n token.startsWith(\"dummy-\"), // Allow dummy tokens\n \"Invalid GitHub token format\",\n ),\n GITHUB_OWNER: z\n .union([z.string(), z.null(), z.undefined()])\n .optional()\n .nullable(),\n GITHUB_WEBHOOK_SECRET: z\n .union([z.string(), z.null(), z.undefined()])\n .optional()\n .nullable(),\n});\n\nexport type GitHubConfig = z.infer<typeof githubConfigSchema>;\n\n// Repository interfaces\nexport interface GitHubRepository {\n id: number;\n name: string;\n full_name: string;\n description: string | null;\n html_url: string;\n clone_url: string;\n ssh_url: string;\n private: boolean;\n fork: boolean;\n archived: boolean;\n disabled: boolean;\n created_at: string;\n updated_at: string;\n pushed_at: string;\n size: number;\n stargazers_count: number;\n watchers_count: number;\n forks_count: number;\n open_issues_count: number;\n language: string | null;\n topics: string[];\n license: {\n key: string;\n name: string;\n spdx_id: string;\n } | null;\n default_branch: string;\n owner: {\n login: string;\n id: number;\n type: \"User\" | \"Organization\";\n avatar_url: string;\n };\n}\n\n// Issue interfaces\nexport interface GitHubIssue {\n id: number;\n number: number;\n title: string;\n body: string | null;\n state: \"open\" | \"closed\";\n labels: Array<{\n id: number;\n name: string;\n color: string;\n description: string | null;\n }>;\n assignees: Array<{\n login: string;\n id: number;\n avatar_url: string;\n }>;\n user: {\n login: string;\n id: number;\n avatar_url: string;\n };\n created_at: string;\n updated_at: string;\n closed_at: string | null;\n html_url: string;\n comments: number;\n milestone: {\n id: number;\n title: string;\n description: string | null;\n state: \"open\" | \"closed\";\n due_on: string | null;\n } | null;\n}\n\n// Pull Request interfaces\nexport interface GitHubPullRequest {\n id: number;\n number: number;\n title: string;\n body: string | null;\n state: \"open\" | \"closed\" | \"merged\";\n draft: boolean;\n merged: boolean;\n mergeable: boolean | null;\n merged_at: string | null;\n head: {\n ref: string;\n sha: string;\n repo: GitHubRepository | null;\n };\n base: {\n ref: string;\n sha: string;\n repo: GitHubRepository;\n };\n user: {\n login: string;\n id: number;\n avatar_url: string;\n };\n assignees: Array<{\n login: string;\n id: number;\n avatar_url: string;\n }>;\n labels: Array<{\n id: number;\n name: string;\n color: string;\n description: string | null;\n }>;\n created_at: string;\n updated_at: string;\n html_url: string;\n comments: number;\n commits: number;\n additions: number;\n deletions: number;\n changed_files: number;\n}\n\n// Create repository options\nexport interface CreateRepositoryOptions {\n name: string;\n description?: string;\n private?: boolean;\n auto_init?: boolean;\n gitignore_template?: string;\n license_template?: string;\n allow_squash_merge?: boolean;\n allow_merge_commit?: boolean;\n allow_rebase_merge?: boolean;\n delete_branch_on_merge?: boolean;\n has_issues?: boolean;\n has_projects?: boolean;\n has_wiki?: boolean;\n has_downloads?: boolean;\n homepage?: string;\n topics?: string[];\n}\n\n// Create issue options\nexport interface CreateIssueOptions {\n title: string;\n body?: string;\n assignees?: string[];\n milestone?: number;\n labels?: string[];\n}\n\n// Create pull request options\nexport interface CreatePullRequestOptions {\n title: string;\n head: string;\n base: string;\n body?: string;\n draft?: boolean;\n maintainer_can_modify?: boolean;\n}\n\n// Activity tracking\nexport interface GitHubActivityItem {\n id: string;\n timestamp: string;\n action: string;\n resource_type: \"repository\" | \"issue\" | \"pull_request\";\n resource_id: string;\n details: Record<string, any>;\n success: boolean;\n error?: string;\n}\n\n// Search results\nexport interface GitHubSearchResult<T> {\n total_count: number;\n incomplete_results: boolean;\n items: T[];\n}\n\n// Webhook payload types\nexport interface GitHubWebhookPayload {\n action: string;\n repository?: GitHubRepository;\n issue?: GitHubIssue;\n pull_request?: GitHubPullRequest;\n sender: {\n login: string;\n id: number;\n avatar_url: string;\n };\n}\n\n// Rate limit info\nexport interface GitHubRateLimit {\n limit: number;\n remaining: number;\n reset: number;\n used: number;\n resource: string;\n}\n\n// Error types\nexport class GitHubAPIError extends Error {\n constructor(\n message: string,\n public status: number,\n public response?: any,\n ) {\n super(message);\n this.name = \"GitHubAPIError\";\n }\n}\n\nexport class GitHubAuthenticationError extends GitHubAPIError {\n constructor(message: string = \"GitHub authentication failed\") {\n super(message, 401);\n this.name = \"GitHubAuthenticationError\";\n }\n}\n\nexport class GitHubRateLimitError extends GitHubAPIError {\n constructor(\n message: string = \"GitHub API rate limit exceeded\",\n public resetTime: number,\n ) {\n super(message, 403);\n this.name = \"GitHubRateLimitError\";\n }\n}\n\n// Validation schemas for inputs\nexport const createRepositorySchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(2000).optional(),\n private: z.boolean().default(false),\n auto_init: z.boolean().default(true),\n gitignore_template: z.string().optional(),\n license_template: z.string().optional(),\n homepage: z.string().url().optional(),\n topics: z.array(z.string()).max(20).optional(),\n});\n\nexport const createIssueSchema = z.object({\n title: z.string().min(1).max(256),\n body: z.string().max(65536).optional(),\n assignees: z.array(z.string()).max(10).optional(),\n labels: z.array(z.string()).max(100).optional(),\n milestone: z.number().optional(),\n});\n\nexport const createPullRequestSchema = z.object({\n title: z.string().min(1).max(256),\n head: z.string().min(1),\n base: z.string().min(1),\n body: z.string().max(65536).optional(),\n draft: z.boolean().default(false),\n maintainer_can_modify: z.boolean().default(true),\n});\n","import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\nimport { CreateRepositoryOptions, GitHubRepository } from \"../types\";\n\n// Get Repository Action\nexport const getRepositoryAction: Action = {\n name: \"GET_GITHUB_REPOSITORY\",\n similes: [\"CHECK_REPO\", \"FETCH_REPOSITORY\", \"REPO_INFO\", \"INSPECT_REPO\"],\n description:\n \"Retrieves information about a GitHub repository including stats, language, and metadata. Can be chained with LIST_GITHUB_ISSUES or LIST_GITHUB_PULL_REQUESTS to explore repository content\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { owner?: string; repo?: string } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo = options.repo || ownerRepoMatch?.[2];\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n logger.info(`Getting repository information for ${owner}/${repo}`);\n const repository = await githubService.getRepository(owner, repo);\n\n const responseContent: Content = {\n text: `Repository: ${repository.full_name}\nDescription: ${repository.description || \"No description\"}\nLanguage: ${repository.language || \"Unknown\"}\nStars: ${repository.stargazers_count}\nForks: ${repository.forks_count}\nOpen Issues: ${repository.open_issues_count}\nPrivate: ${repository.private ? \"Yes\" : \"No\"}\nCreated: ${new Date(repository.created_at).toLocaleDateString()}\nLast Updated: ${new Date(repository.updated_at).toLocaleDateString()}\nURL: ${repository.html_url}`,\n actions: [\"GET_GITHUB_REPOSITORY\"],\n source: message.content.source,\n // Include data for callbacks\n repository,\n owner,\n repo,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return ActionResult for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n success: true,\n repository,\n owner,\n repo,\n repositoryUrl: repository.html_url,\n stars: repository.stargazers_count,\n language: repository.language,\n },\n data: {\n actionName: \"GET_GITHUB_REPOSITORY\",\n repository,\n github: {\n ...state?.github,\n lastRepository: repository,\n repositories: {\n ...state?.github?.repositories,\n [repository.full_name]: repository,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_REPOSITORY action:\", error);\n const errorContent: Content = {\n text: `Failed to get repository information: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_REPOSITORY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n },\n data: {\n actionName: \"GET_GITHUB_REPOSITORY\",\n error: error instanceof Error ? error.message : String(error),\n },\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Get information about elizaOS/eliza repository\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Repository: elizaOS/eliza\\nDescription: Eliza is a simple, fast, and lightweight AI agent framework\\nLanguage: TypeScript\\nStars: 1234\\nForks: 567\\nOpen Issues: 42\\nPrivate: No\\nCreated: 1/15/2024\\nLast Updated: 3/20/2024\\nURL: https://github.com/elizaOS/eliza\",\n actions: [\"GET_GITHUB_REPOSITORY\"],\n },\n },\n ],\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Check the nodejs/node repository and then list its open issues\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll get information about the nodejs/node repository and then list its open issues.\",\n actions: [\"GET_GITHUB_REPOSITORY\", \"LIST_GITHUB_ISSUES\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n// List Repositories Action\nexport const listRepositoriesAction: Action = {\n name: \"LIST_GITHUB_REPOSITORIES\",\n similes: [\"LIST_REPOS\", \"MY_REPOSITORIES\", \"SHOW_REPOS\"],\n description:\n \"Lists GitHub repositories for the authenticated user with stats and metadata. Can be chained with GET_GITHUB_REPOSITORY to inspect specific repositories or CREATE_GITHUB_REPOSITORY to add new ones\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n type?: \"all\" | \"owner\" | \"public\" | \"private\" | \"member\";\n sort?: \"created\" | \"updated\" | \"pushed\" | \"full_name\";\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n const repositories = await githubService.listRepositories({\n type: options.type || \"owner\",\n sort: options.sort || \"updated\",\n per_page: options.limit || 10,\n });\n\n const repoList = repositories\n .map(\n (repo: any) =>\n `• ${repo.full_name} (${repo.language || \"Unknown\"}) - ⭐ ${repo.stargazers_count}`,\n )\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `Your repositories (${repositories.length} shown):\\n${repoList}`,\n actions: [\"LIST_GITHUB_REPOSITORIES\"],\n source: message.content.source,\n // Include data for callbacks\n repositories,\n repositoryCount: repositories.length,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return ActionResult for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n success: true,\n repositories,\n repositoryCount: repositories.length,\n repositoryNames: repositories.map((repo: any) => repo.full_name),\n },\n data: {\n actionName: \"LIST_GITHUB_REPOSITORIES\",\n repositories,\n github: {\n ...state?.github,\n lastRepositories: repositories,\n repositories: {\n ...state?.github?.repositories,\n ...repositories.reduce(\n (acc: any, repo: any) => {\n acc[repo.full_name] = repo;\n return acc;\n },\n {} as Record<string, any>,\n ),\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in LIST_GITHUB_REPOSITORIES action:\", error);\n const errorContent: Content = {\n text: `Failed to list repositories: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"LIST_GITHUB_REPOSITORIES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n },\n data: {\n actionName: \"LIST_GITHUB_REPOSITORIES\",\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Show me my repositories\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Your repositories (3 shown):\\n• user/awesome-project (JavaScript) - ⭐ 25\\n• user/my-plugin (TypeScript) - ⭐ 8\\n• user/test-repo (Python) - ⭐ 2\",\n actions: [\"LIST_GITHUB_REPOSITORIES\"],\n },\n },\n ],\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"List my most recent repositories and check which ones have open pull requests\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll list your most recent repositories and then check for open pull requests in each.\",\n actions: [\"LIST_GITHUB_REPOSITORIES\", \"LIST_GITHUB_PULL_REQUESTS\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n// Create Repository Action\nexport const createRepositoryAction: Action = {\n name: \"CREATE_GITHUB_REPOSITORY\",\n similes: [\"NEW_REPO\", \"MAKE_REPOSITORY\", \"CREATE_REPO\"],\n description:\n \"Creates a new GitHub repository with optional description and privacy settings. Can be chained with CREATE_GITHUB_ISSUE to add initial issues or LIST_GITHUB_REPOSITORIES to view all repositories\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: any = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract repository name from message text or options\n const text = message.content.text || \"\";\n const nameMatch = text.match(\n /(?:create|make|new)\\s+(?:repo(?:sitory)?\\s+)?(?:called\\s+)?[\"\\']?([a-zA-Z0-9_-]+)[\"\\']?/i,\n );\n\n const name = options.name || nameMatch?.[1];\n\n if (!name) {\n throw new Error(\n \"Repository name is required. Please specify the name of the repository to create\",\n );\n }\n\n // Extract description if present\n const descMatch = text.match(\n /(?:description|desc|about):\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n const description = options.description || descMatch?.[1];\n\n // Check for private/public keywords\n const isPrivate =\n options.private !== undefined\n ? options.private\n : text.includes(\"private\")\n ? true\n : text.includes(\"public\")\n ? false\n : false;\n\n const repositoryOptions: CreateRepositoryOptions = {\n name,\n description,\n private: isPrivate,\n auto_init: options.auto_init !== undefined ? options.auto_init : true,\n gitignore_template: options.gitignore_template,\n license_template: options.license_template,\n ...options,\n };\n\n logger.info(`Creating repository: ${name}`);\n const repository =\n await githubService.createRepository(repositoryOptions);\n\n const responseContent: Content = {\n text: `Successfully created repository: ${repository.full_name}\nDescription: ${repository.description || \"No description\"}\nPrivate: ${repository.private ? \"Yes\" : \"No\"}\nURL: ${repository.html_url}\nClone URL: ${repository.clone_url}`,\n actions: [\"CREATE_GITHUB_REPOSITORY\"],\n source: message.content.source,\n // Include data for callbacks\n repository,\n repositoryUrl: repository.html_url,\n cloneUrl: repository.clone_url,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return ActionResult for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n success: true,\n repository,\n repositoryUrl: repository.html_url,\n cloneUrl: repository.clone_url,\n repositoryName: repository.full_name,\n },\n data: {\n actionName: \"CREATE_GITHUB_REPOSITORY\",\n repository,\n github: {\n ...state?.github,\n lastRepository: repository,\n lastCreatedRepository: repository,\n repositories: {\n ...state?.github?.repositories,\n [repository.full_name]: repository,\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in CREATE_GITHUB_REPOSITORY action:\", error);\n const errorContent: Content = {\n text: `Failed to create repository: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"CREATE_GITHUB_REPOSITORY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n },\n data: {\n actionName: \"CREATE_GITHUB_REPOSITORY\",\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: 'Create a new repository called my-awesome-project with description: \"A really cool project\" and make it public',\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Successfully created repository: user/my-awesome-project\\nDescription: A really cool project\\nPrivate: No\\nURL: https://github.com/user/my-awesome-project\\nClone URL: https://github.com/user/my-awesome-project.git\",\n actions: [\"CREATE_GITHUB_REPOSITORY\"],\n },\n },\n ],\n [\n {\n name: \"{{user}}\",\n content: {\n text: 'Create a private repository called \"secret-project\" and then create an initial issue for setting up the README',\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll create a private repository called 'secret-project' and then set up an initial issue for the README.\",\n actions: [\"CREATE_GITHUB_REPOSITORY\", \"CREATE_GITHUB_ISSUE\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n// Search Repositories Action\nexport const searchRepositoriesAction: Action = {\n name: \"SEARCH_GITHUB_REPOSITORIES\",\n similes: [\"FIND_REPOS\", \"SEARCH_REPOS\", \"REPO_SEARCH\"],\n description:\n \"Searches for GitHub repositories based on query with sorting and filtering options. Can be chained with GET_GITHUB_REPOSITORY to inspect specific results or GET_GITHUB_ACTIVITY to check repository activity\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n query?: string;\n sort?: \"stars\" | \"forks\" | \"help-wanted-issues\" | \"updated\";\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract search query from message text or options\n const text = message.content.text || \"\";\n const queryMatch = text.match(\n /(?:search|find|look for)\\s+(?:repos?(?:itories?)?\\s+)?(?:for\\s+)?[\"\\']?([^\"'\\n]+?)[\"\\']?(?:\\s|$)/i,\n );\n\n const query = options.query || queryMatch?.[1];\n\n if (!query) {\n throw new Error(\n \"Search query is required. Please specify what repositories to search for\",\n );\n }\n\n logger.info(`Searching repositories for: ${query}`);\n const searchResult = await githubService.searchRepositories(query, {\n sort: options.sort || \"stars\",\n per_page: options.limit || 10,\n });\n\n const repoList = searchResult.items\n .map(\n (repo: any) =>\n `• ${repo.full_name} (${repo.language || \"Unknown\"}) - ⭐ ${repo.stargazers_count}\\n ${repo.description || \"No description\"}`,\n )\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `Found ${searchResult.total_count} repositories for \"${query}\" (showing ${searchResult.items.length}):\\n${repoList}`,\n actions: [\"SEARCH_GITHUB_REPOSITORIES\"],\n source: message.content.source,\n // Include data for callbacks\n repositories: searchResult.items,\n query,\n totalCount: searchResult.total_count,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return ActionResult for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n success: true,\n repositories: searchResult.items,\n query,\n totalCount: searchResult.total_count,\n repositoryNames: searchResult.items.map(\n (repo: any) => repo.full_name,\n ),\n },\n data: {\n actionName: \"SEARCH_GITHUB_REPOSITORIES\",\n repositories: searchResult.items,\n github: {\n ...state?.github,\n lastSearchResults: searchResult,\n lastSearchQuery: query,\n repositories: {\n ...state?.github?.repositories,\n ...searchResult.items.reduce(\n (acc: any, repo: any) => {\n acc[repo.full_name] = repo;\n return acc;\n },\n {} as Record<string, any>,\n ),\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in SEARCH_GITHUB_REPOSITORIES action:\", error);\n const errorContent: Content = {\n text: `Failed to search repositories: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"SEARCH_GITHUB_REPOSITORIES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n },\n data: {\n actionName: \"SEARCH_GITHUB_REPOSITORIES\",\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Search for repositories about machine learning\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: 'Found 50000 repositories for \"machine learning\" (showing 10):\\n• tensorflow/tensorflow (C++) - ⭐ 185000\\n An Open Source Machine Learning Framework for Everyone\\n• scikit-learn/scikit-learn (Python) - ⭐ 59000\\n Machine learning library for Python',\n actions: [\"SEARCH_GITHUB_REPOSITORIES\"],\n },\n },\n ],\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Find repositories about React hooks and check the most popular one for recent activity\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll search for React hooks repositories and then check the most popular one for recent activity.\",\n actions: [\"SEARCH_GITHUB_REPOSITORIES\", \"GET_GITHUB_ACTIVITY\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n","import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport {\n GitHubService,\n type GitHubIssue,\n type CreateIssueOptions,\n} from \"../index\";\n\n// Get Issue Action\nexport const getIssueAction: Action = {\n name: \"GET_GITHUB_ISSUE\",\n similes: [\"CHECK_ISSUE\", \"FETCH_ISSUE\", \"ISSUE_INFO\", \"INSPECT_ISSUE\"],\n description:\n \"Retrieves information about a specific GitHub issue and enables chaining with actions like listing pull requests, creating related issues, or analyzing issue patterns\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { owner?: string; repo?: string; issue_number?: number } = {},\n callback?: HandlerCallback,\n ): Promise<any> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner, repo, and issue number from message text or options\n const text = message.content.text || \"\";\n const issueMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)\\/issues\\/(\\d+)/,\n );\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n const issueNumMatch = text.match(/(?:issue\\s*#?|#)(\\d+)/i);\n\n const owner =\n options.owner ||\n issueMatch?.[1] ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n issueMatch?.[2] ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n const issue_number =\n options.issue_number ||\n parseInt(issueMatch?.[3] || issueNumMatch?.[1] || \"0\", 10);\n\n if (!owner || !repo || !issue_number) {\n throw new Error(\n 'Repository owner, name, and issue number are required. Please specify as \"owner/repo#123\" or provide them in options',\n );\n }\n\n logger.info(\n `Getting issue information for ${owner}/${repo}#${issue_number}`,\n );\n const issue = await githubService.getIssue(owner, repo, issue_number);\n\n const labels =\n issue.labels\n ?.map((label: any) =>\n typeof label === \"string\" ? label : label.name || \"\",\n )\n .join(\", \") || \"\";\n const assignees =\n issue.assignees\n ?.map((assignee: any) => `@${assignee.login}`)\n .join(\", \") || \"\";\n\n const responseContent: Content = {\n text: `Issue #${issue.number}: ${issue.title}\nRepository: ${owner}/${repo}\nState: ${issue.state}\nAuthor: @${issue.user?.login || \"unknown\"}\nCreated: ${new Date(issue.created_at).toLocaleDateString()}\nUpdated: ${new Date(issue.updated_at).toLocaleDateString()}\nComments: ${issue.comments}\nLabels: ${labels || \"None\"}\nAssignees: ${assignees || \"None\"}\n${issue.milestone ? `Milestone: ${issue.milestone.title}` : \"\"}\n\nDescription:\n${issue.body || \"No description provided\"}\n\nURL: ${issue.html_url}`,\n actions: [\"GET_GITHUB_ISSUE\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n text: responseContent.text,\n values: {\n success: true,\n issue,\n repository: `${owner}/${repo}`,\n issueNumber: issue_number,\n issueUrl: issue.html_url,\n issueState: issue.state,\n },\n data: {\n actionName: \"GET_GITHUB_ISSUE\",\n issue,\n github: {\n ...state?.github,\n lastIssue: issue,\n issues: {\n ...state?.github?.issues,\n [`${owner}/${repo}#${issue_number}`]: issue,\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_ISSUE action:\", error);\n const errorContent: Content = {\n text: `Failed to get issue information: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_ISSUE\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n text: errorContent.text,\n values: {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n },\n data: {\n actionName: \"GET_GITHUB_ISSUE\",\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Get information about issue #42 in elizaOS/eliza\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Issue #42: Bug in authentication flow\\nRepository: elizaOS/eliza\\nState: open\\nAuthor: @contributor\\nCreated: 3/15/2024\\nUpdated: 3/20/2024\\nComments: 5\\nLabels: bug, authentication\\nAssignees: @maintainer\\n\\nDescription:\\nThe authentication flow is failing when using GitHub tokens...\\n\\nURL: https://github.com/elizaOS/eliza/issues/42\",\n actions: [\"GET_GITHUB_ISSUE\"],\n },\n },\n ],\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Check issue #123 in facebook/react and see if there are any related pull requests\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll check the details of issue #123 in facebook/react and then search for related pull requests.\",\n actions: [\"GET_GITHUB_ISSUE\", \"SEARCH_GITHUB_PULL_REQUESTS\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n// List Issues Action\nexport const listIssuesAction: Action = {\n name: \"LIST_GITHUB_ISSUES\",\n similes: [\"LIST_ISSUES\", \"SHOW_ISSUES\", \"GET_ISSUES\"],\n description:\n \"Lists GitHub issues for a repository with filtering options, enabling workflows like issue triage, bulk operations, or pattern analysis across issues\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n owner?: string;\n repo?: string;\n state?: \"open\" | \"closed\" | \"all\";\n labels?: string;\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ): Promise<any> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n // Extract state filter from text\n const issueState =\n options.state ||\n (text.includes(\"closed\")\n ? \"closed\"\n : text.includes(\"all\")\n ? \"all\"\n : \"open\");\n\n logger.info(`Listing ${issueState} issues for ${owner}/${repo}`);\n const issues = await githubService.listIssues(owner, repo, {\n state: issueState,\n labels: options.labels,\n per_page: options.limit || 10,\n });\n\n const issueList = issues\n .map((issue: any) => {\n const labels =\n issue.labels\n ?.map((label: any) =>\n typeof label === \"string\" ? label : label.name || \"\",\n )\n .join(\", \") || \"\";\n return `• #${issue.number}: ${issue.title} (${issue.state})${labels ? ` [${labels}]` : \"\"}`;\n })\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `${issueState.charAt(0).toUpperCase() + issueState.slice(1)} issues for ${owner}/${repo} (${issues.length} shown):\\n${issueList}`,\n actions: [\"LIST_GITHUB_ISSUES\"],\n source: message.content.source,\n // Include data for callbacks\n issues,\n repository: `${owner}/${repo}`,\n issueCount: issues.length,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n text: responseContent.text,\n values: {\n issues,\n repository: `${owner}/${repo}`,\n issueCount: issues.length,\n },\n data: {\n issues,\n github: {\n ...state?.data?.github, // Preserve previous github state from data\n ...state?.github, // Also check root-level github state\n lastIssues: issues,\n lastRepository:\n state?.data?.github?.lastRepository ||\n state?.github?.lastRepository, // Preserve lastRepository\n issues: {\n ...state?.data?.github?.issues,\n ...state?.github?.issues,\n ...issues.reduce(\n (acc: any, issue: any) => {\n acc[`${owner}/${repo}#${issue.number}`] = issue;\n return acc;\n },\n {} as Record<string, any>,\n ),\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in LIST_GITHUB_ISSUES action:\", error);\n const errorContent: Content = {\n text: `Failed to list issues: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"LIST_GITHUB_ISSUES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return errorContent;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"List open issues for elizaOS/eliza\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Open issues for elizaOS/eliza (5 shown):\\n• #42: Bug in authentication flow (open) [bug, authentication]\\n• #41: Feature request: Add new provider (open) [enhancement]\\n• #40: Documentation update needed (open) [documentation]\",\n actions: [\"LIST_GITHUB_ISSUES\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Show me high priority bugs in microsoft/vscode and check their activity\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Searching for high priority bugs in microsoft/vscode...\\n\\nOpen issues for microsoft/vscode (8 shown):\\n• #1234: Critical: Editor crashes on large files (open) [bug, high-priority, crash]\\n• #1230: Memory leak in extension host (open) [bug, high-priority, performance]\\n• #1225: Terminal not responding after update (open) [bug, high-priority, terminal]\\n• #1220: Debugger fails to attach (open) [bug, high-priority, debug]\\n\\nLet me check the recent activity on these critical issues...\",\n actions: [\"LIST_GITHUB_ISSUES\", \"GET_GITHUB_ACTIVITY\"],\n },\n },\n ],\n ],\n};\n\n// Create Issue Action\nexport const createIssueAction: Action = {\n name: \"CREATE_GITHUB_ISSUE\",\n similes: [\"NEW_ISSUE\", \"SUBMIT_ISSUE\", \"REPORT_ISSUE\", \"FILE_ISSUE\"],\n description:\n \"Creates a new GitHub issue and enables chaining with actions like creating branches, assigning users, or linking to pull requests\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: any = {},\n callback?: HandlerCallback,\n ): Promise<any> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n // Extract title from message text or options\n const titleMatch =\n text.match(/(?:title|issue)\\s*[:=]\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i) ||\n text.match(\n /(?:create|submit|file)\\s+(?:issue|bug)?\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n\n const title = options.title || titleMatch?.[1];\n\n if (!title) {\n throw new Error(\n \"Issue title is required. Please specify the title for the issue\",\n );\n }\n\n // Extract body/description from message text or options\n const bodyMatch = text.match(\n /(?:description|body|details?)\\s*[:=]\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n const body = options.body || bodyMatch?.[1];\n\n // Extract labels from message text or options\n const labelsMatch = text.match(\n /(?:labels?)\\s*[:=]\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n const labelsText = labelsMatch?.[1];\n const labels =\n options.labels ||\n (labelsText ? labelsText.split(/[,\\s]+/).filter(Boolean) : undefined);\n\n const issueOptions: CreateIssueOptions = {\n title,\n body,\n labels,\n assignees: options.assignees,\n milestone: options.milestone,\n };\n\n logger.info(`Creating issue in ${owner}/${repo}: ${title}`);\n const issue = await githubService.createIssue(owner, repo, issueOptions);\n\n const responseContent: Content = {\n text: `Successfully created issue #${issue.number}: ${issue.title}\nRepository: ${owner}/${repo}\nState: ${issue.state}\nAuthor: @${issue.user?.login || \"unknown\"}\nCreated: ${new Date(issue.created_at).toLocaleDateString()}\nLabels: ${\n issue.labels\n ?.map((label: any) =>\n typeof label === \"string\" ? label : label.name || \"\",\n )\n .join(\", \") || \"None\"\n }\n\n${issue.body || \"No description provided\"}\n\nURL: ${issue.html_url}`,\n actions: [\"CREATE_GITHUB_ISSUE\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n text: responseContent.text,\n values: {\n issue,\n repository: `${owner}/${repo}`,\n issueNumber: issue.number,\n issueUrl: issue.html_url,\n },\n data: {\n issue,\n github: {\n ...state?.github,\n lastIssue: issue,\n lastCreatedIssue: issue,\n issues: {\n ...state?.github?.issues,\n [`${owner}/${repo}#${issue.number}`]: issue,\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in CREATE_GITHUB_ISSUE action:\", error);\n const errorContent: Content = {\n text: `Failed to create issue: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"CREATE_GITHUB_ISSUE\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return errorContent;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: 'Create an issue in elizaOS/eliza with title: \"Authentication bug\" and description: \"The GitHub auth is not working properly\" and add labels: bug, authentication',\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Successfully created issue #43: Authentication bug\\nRepository: elizaOS/eliza\\nState: open\\nAuthor: @agent\\nCreated: 3/21/2024\\nLabels: bug, authentication\\n\\nThe GitHub auth is not working properly\\n\\nURL: https://github.com/elizaOS/eliza/issues/43\",\n actions: [\"CREATE_GITHUB_ISSUE\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Create a feature request issue in my new-project repo and then create a branch for it\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"First, I'll create the feature request issue...\\n\\nSuccessfully created issue #1: Add user authentication\\nRepository: user/new-project\\nState: open\\nAuthor: @agent\\nCreated: 3/21/2024\\nLabels: enhancement\\n\\nImplement user authentication system with JWT tokens\\n\\nURL: https://github.com/user/new-project/issues/1\\n\\nNow I'll create a feature branch for this issue...\",\n actions: [\"CREATE_GITHUB_ISSUE\", \"CREATE_GITHUB_BRANCH\"],\n },\n },\n ],\n ],\n};\n\n// Search Issues Action\nexport const searchIssuesAction: Action = {\n name: \"SEARCH_GITHUB_ISSUES\",\n similes: [\"FIND_ISSUES\", \"SEARCH_BUGS\", \"ISSUE_SEARCH\"],\n description:\n \"Searches for GitHub issues across repositories using advanced queries, enabling cross-project analysis, pattern detection, and bulk issue management workflows\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n query?: string;\n sort?: \"comments\" | \"reactions\" | \"created\" | \"updated\";\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ): Promise<any> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract search query from message text or options\n const text = message.content.text || \"\";\n const queryMatch = text.match(\n /(?:search|find|look for)\\s+(?:issues?\\s+)?(?:for\\s+)?[\"\\']?([^\"'\\n]+?)[\"\\']?(?:\\s|$)/i,\n );\n\n const query = options.query || queryMatch?.[1];\n\n if (!query) {\n throw new Error(\n \"Search query is required. Please specify what issues to search for\",\n );\n }\n\n logger.info(`Searching issues for: ${query}`);\n const searchResult = await githubService.searchIssues(query, {\n sort: options.sort || \"updated\",\n per_page: options.limit || 10,\n });\n\n const issueList = (searchResult.items || [])\n .map((issue: any) => {\n const labels =\n issue.labels\n ?.map((label: any) =>\n typeof label === \"string\" ? label : label.name || \"\",\n )\n .join(\", \") || \"\";\n const repoName = issue.html_url\n ? issue.html_url.match(/github\\.com\\/([^\\/]+\\/[^\\/]+)/)?.[1] ||\n \"unknown\"\n : \"unknown\";\n return `• ${repoName}#${issue.number}: ${issue.title} (${issue.state})${labels ? ` [${labels}]` : \"\"}`;\n })\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `Found ${searchResult.total_count || 0} issues for \"${query}\" (showing ${searchResult.items?.length || 0}):\\n${issueList}`,\n actions: [\"SEARCH_GITHUB_ISSUES\"],\n source: message.content.source,\n // Include data for callbacks\n issues: searchResult.items || [],\n totalCount: searchResult.total_count || 0,\n query,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n text: responseContent.text,\n values: {\n issues: searchResult.items,\n totalCount: searchResult.total_count,\n query,\n },\n data: {\n issues: searchResult.items,\n github: {\n ...state?.data?.github, // Preserve previous github state from data\n ...state?.github, // Also check root-level github state\n lastIssueSearchResults: searchResult,\n lastIssueSearchQuery: query,\n lastRateLimit:\n state?.data?.github?.lastRateLimit ||\n state?.github?.lastRateLimit, // Preserve lastRateLimit\n issues: {\n ...state?.data?.github?.issues,\n ...state?.github?.issues,\n ...(searchResult.items || []).reduce(\n (acc: any, issue: any) => {\n const repoName = issue.html_url\n ? issue.html_url.match(/github\\.com\\/([^\\/]+\\/[^\\/]+)/)?.[1]\n : null;\n if (repoName) {\n acc[`${repoName}#${issue.number}`] = issue;\n }\n return acc;\n },\n {} as Record<string, any>,\n ),\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in SEARCH_GITHUB_ISSUES action:\", error);\n const errorContent: Content = {\n text: `Failed to search issues: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"SEARCH_GITHUB_ISSUES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return errorContent;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Search for issues about authentication bugs\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Found 150 issues for \"authentication bugs\" (showing 10):\\n• elizaOS/eliza#42: Authentication flow failing (open) [bug, authentication]\\n• user/project#15: Auth token validation issue (closed) [bug]\\n• company/app#88: Login authentication error (open) [bug, security]',\n actions: [\"SEARCH_GITHUB_ISSUES\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Find all TypeScript migration issues across popular repos and analyze the patterns\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Found 3,250 issues for \"TypeScript migration\" (showing 10):\\n• facebook/jest#11234: Migrate codebase to TypeScript (open) [enhancement, typescript, breaking-change]\\n• expressjs/express#4567: TypeScript support roadmap (open) [enhancement, typescript, discussion]\\n• webpack/webpack#8901: Convert core modules to TypeScript (in progress) [enhancement, typescript]\\n• redux-saga/redux-saga#2345: TypeScript migration tracking (open) [enhancement, typescript, meta]\\n\\nI notice most migrations follow a phased approach. Let me check the activity on these migration efforts...',\n actions: [\"SEARCH_GITHUB_ISSUES\", \"GET_GITHUB_ACTIVITY\"],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\nimport { CreatePullRequestOptions, GitHubPullRequest } from \"../types\";\n\n// Get Pull Request Action\nexport const getPullRequestAction: Action = {\n name: \"GET_GITHUB_PULL_REQUEST\",\n similes: [\"CHECK_PR\", \"FETCH_PULL_REQUEST\", \"PR_INFO\", \"INSPECT_PR\"],\n description: \"Retrieves information about a specific GitHub pull request\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { owner?: string; repo?: string; pull_number?: number } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner, repo, and PR number from message text or options\n const text = message.content.text || \"\";\n const prMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)\\/pull\\/(\\d+)/,\n );\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n const prNumMatch = text.match(/(?:pr\\s*#?|pull\\s*request\\s*#?|#)(\\d+)/i);\n\n const owner =\n options.owner ||\n prMatch?.[1] ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n prMatch?.[2] ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n const pull_number =\n options.pull_number ||\n parseInt(prMatch?.[3] || prNumMatch?.[1] || \"0\", 10);\n\n if (!owner || !repo || !pull_number) {\n throw new Error(\n 'Repository owner, name, and PR number are required. Please specify as \"owner/repo#123\" or provide them in options',\n );\n }\n\n logger.info(\n `Getting pull request information for ${owner}/${repo}#${pull_number}`,\n );\n const pr = await githubService.getPullRequest(owner, repo, pull_number);\n\n const labels =\n pr.labels\n ?.map((label: any) =>\n typeof label === \"string\" ? label : label.name || \"\",\n )\n .join(\", \") || \"\";\n const assignees =\n pr.assignees?.map((assignee: any) => `@${assignee.login}`).join(\", \") ||\n \"\";\n\n const responseContent: Content = {\n text: `Pull Request #${pr.number}: ${pr.title}\nRepository: ${owner}/${repo}\nState: ${pr.state}${pr.merged ? \" (merged)\" : \"\"}\nDraft: ${pr.draft ? \"Yes\" : \"No\"}\nAuthor: @${pr.user.login}\nCreated: ${new Date(pr.created_at).toLocaleDateString()}\nUpdated: ${new Date(pr.updated_at).toLocaleDateString()}\n${pr.merged_at ? `Merged: ${new Date(pr.merged_at).toLocaleDateString()}` : \"\"}\nComments: ${pr.comments}\nCommits: ${pr.commits}\nFiles Changed: ${pr.changed_files}\nAdditions: +${pr.additions}\nDeletions: -${pr.deletions}\nLabels: ${labels || \"None\"}\nAssignees: ${assignees || \"None\"}\nHead: ${pr.head.ref} (${pr.head.sha.substring(0, 7)})\nBase: ${pr.base.ref} (${pr.base.sha.substring(0, 7)})\nMergeable: ${pr.mergeable === null ? \"Unknown\" : pr.mergeable ? \"Yes\" : \"No\"}\n\nDescription:\n${pr.body || \"No description provided\"}\n\nURL: ${pr.html_url}`,\n actions: [\"GET_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n pullRequest: pr,\n repository: `${owner}/${repo}`,\n pullNumber: pull_number,\n },\n data: {\n pullRequest: pr,\n github: {\n ...state?.github,\n lastPullRequest: pr,\n pullRequests: {\n ...state?.github?.pullRequests,\n [`${owner}/${repo}#${pull_number}`]: pr,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_PULL_REQUEST action:\", error);\n const errorContent: Content = {\n text: `Failed to get pull request information: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Get information about PR #25 in elizaOS/eliza\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Pull Request #25: Add new authentication provider\\nRepository: elizaOS/eliza\\nState: open\\nDraft: No\\nAuthor: @contributor\\nCreated: 3/15/2024\\nUpdated: 3/20/2024\\nComments: 3\\nCommits: 5\\nFiles Changed: 8\\nAdditions: +120\\nDeletions: -15\\nLabels: enhancement, authentication\\nAssignees: @maintainer\\nHead: feature/auth-provider (abc1234)\\nBase: main (def5678)\\nMergeable: Yes\\n\\nDescription:\\nThis PR adds a new authentication provider for GitHub integration...\\n\\nURL: https://github.com/elizaOS/eliza/pull/25\",\n actions: [\"GET_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Check PR #456 in vercel/next.js and see what issues it addresses\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Pull Request #456: Fix hydration mismatch in dynamic routes\\nRepository: vercel/next.js\\nState: open\\nDraft: No\\nAuthor: @contributor\\nCreated: 3/18/2024\\nUpdated: 3/21/2024\\nComments: 8\\nCommits: 3\\nFiles Changed: 12\\nAdditions: +85\\nDeletions: -42\\nLabels: bug, hydration\\nAssignees: @next-team\\nHead: fix/hydration-mismatch (xyz789)\\nBase: canary (abc123)\\nMergeable: Yes\\n\\nDescription:\\nFixes #445, #389 - Resolves hydration mismatches when using dynamic routes with SSR...\\n\\nURL: https://github.com/vercel/next.js/pull/456\\n\\nLet me check the referenced issues to understand what problems this PR solves...\",\n actions: [\"GET_GITHUB_PULL_REQUEST\", \"GET_GITHUB_ISSUE\"],\n },\n },\n ],\n ],\n};\n\n// List Pull Requests Action\nexport const listPullRequestsAction: Action = {\n name: \"LIST_GITHUB_PULL_REQUESTS\",\n similes: [\"LIST_PRS\", \"SHOW_PULL_REQUESTS\", \"GET_PRS\"],\n description: \"Lists GitHub pull requests for a repository\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n owner?: string;\n repo?: string;\n state?: \"open\" | \"closed\" | \"all\";\n head?: string;\n base?: string;\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n // Extract state filter from text\n const prState =\n options.state ||\n (text.includes(\"closed\")\n ? \"closed\"\n : text.includes(\"all\")\n ? \"all\"\n : \"open\");\n\n logger.info(`Listing ${prState} pull requests for ${owner}/${repo}`);\n const prs = await githubService.listPullRequests(owner, repo, {\n state: prState,\n head: options.head,\n base: options.base,\n per_page: options.limit || 10,\n });\n\n const prList = prs\n .map((pr: any) => {\n const labels = pr.labels\n ? pr.labels.map((label: any) => label.name).join(\", \")\n : \"\";\n const status = pr.merged ? \"merged\" : pr.state;\n const draft = pr.draft ? \" (draft)\" : \"\";\n return `• #${pr.number}: ${pr.title} (${status}${draft})${labels ? ` [${labels}]` : \"\"}`;\n })\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `${prState.charAt(0).toUpperCase() + prState.slice(1)} pull requests for ${owner}/${repo} (${prs.length} shown):\\n${prList}`,\n actions: [\"LIST_GITHUB_PULL_REQUESTS\"],\n source: message.content.source,\n // Include data for callbacks\n pullRequests: prs,\n repository: `${owner}/${repo}`,\n pullRequestCount: prs.length,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n pullRequests: prs,\n repository: `${owner}/${repo}`,\n pullRequestCount: prs.length,\n },\n data: {\n pullRequests: prs,\n github: {\n ...state?.github,\n lastPullRequests: prs,\n pullRequests: {\n ...state?.github?.pullRequests,\n ...prs.reduce(\n (acc: any, pr: any) => {\n acc[`${owner}/${repo}#${pr.number}`] = pr;\n return acc;\n },\n {} as Record<string, any>,\n ),\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in LIST_GITHUB_PULL_REQUESTS action:\", error);\n const errorContent: Content = {\n text: `Failed to list pull requests: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"LIST_GITHUB_PULL_REQUESTS\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"List open pull requests for elizaOS/eliza\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Open pull requests for elizaOS/eliza (3 shown):\\n• #25: Add new authentication provider (open) [enhancement, authentication]\\n• #24: Fix memory leak in service (open) [bug]\\n• #23: Update documentation (open) (draft) [documentation]\",\n actions: [\"LIST_GITHUB_PULL_REQUESTS\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Show me PRs ready for review in rust-lang/rust and check their CI status\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Open pull requests for rust-lang/rust (10 shown):\\n• #98765: Optimize compiler performance for large crates (open) [performance, ready-for-review]\\n• #98760: Add new lint for unsafe code patterns (open) [lint, ready-for-review]\\n• #98755: Fix ICE in type inference (open) [bug, ready-for-review]\\n• #98750: Implement RFC 3324 (open) [rfc, ready-for-review]\\n• #98745: Update LLVM to version 16 (open) [dependencies, ready-for-review]\\n\\nNow let me check the CI status for these pull requests...\",\n actions: [\"LIST_GITHUB_PULL_REQUESTS\", \"GET_GITHUB_WORKFLOW_RUNS\"],\n },\n },\n ],\n ],\n};\n\n// Create Pull Request Action\nexport const createPullRequestAction: Action = {\n name: \"CREATE_GITHUB_PULL_REQUEST\",\n similes: [\"NEW_PR\", \"SUBMIT_PR\", \"CREATE_PR\", \"OPEN_PULL_REQUEST\"],\n description: \"Creates a new GitHub pull request\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: any = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n // Extract title from message text or options\n const titleMatch =\n text.match(/(?:title|pr)\\s*[:=]\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i) ||\n text.match(\n /(?:create|submit|open)\\s+(?:pr|pull\\s*request)?\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n\n const title = options.title || titleMatch?.[1];\n\n if (!title) {\n throw new Error(\n \"Pull request title is required. Please specify the title for the PR\",\n );\n }\n\n // Extract head and base branches from message text or options\n const branchMatch = text.match(\n /(?:from|head)\\s*[:=]?\\s*([^\\s]+)(?:\\s+(?:to|into|base)\\s*[:=]?\\s*([^\\s]+))?/i,\n );\n const head = options.head || branchMatch?.[1];\n const base = options.base || branchMatch?.[2] || \"main\";\n\n if (!head) {\n throw new Error(\n \"Head branch is required. Please specify the branch to merge from\",\n );\n }\n\n // Extract body/description from message text or options\n const bodyMatch = text.match(\n /(?:description|body|details?)\\s*[:=]\\s*[\"\\']?([^\"'\\n]+)[\"\\']?/i,\n );\n const body = options.body || bodyMatch?.[1];\n\n // Check for draft keyword\n const draft =\n options.draft !== undefined ? options.draft : text.includes(\"draft\");\n\n const prOptions: CreatePullRequestOptions = {\n title,\n head,\n base,\n body,\n draft,\n maintainer_can_modify: options.maintainer_can_modify,\n };\n\n logger.info(`Creating pull request in ${owner}/${repo}: ${title}`);\n const pr = await githubService.createPullRequest(owner, repo, prOptions);\n\n const responseContent: Content = {\n text: `Successfully created pull request #${pr.number}: ${pr.title}\nRepository: ${owner}/${repo}\nState: ${pr.state}\nDraft: ${pr.draft ? \"Yes\" : \"No\"}\nAuthor: @${pr.user.login}\nCreated: ${new Date(pr.created_at).toLocaleDateString()}\nHead: ${pr.head.ref}\nBase: ${pr.base.ref}\n\n${pr.body || \"No description provided\"}\n\nURL: ${pr.html_url}`,\n actions: [\"CREATE_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n pullRequest: pr,\n repository: `${owner}/${repo}`,\n pullNumber: pr.number,\n pullRequestUrl: pr.html_url,\n },\n data: {\n pullRequest: pr,\n github: {\n ...state?.github,\n lastPullRequest: pr,\n lastCreatedPullRequest: pr,\n pullRequests: {\n ...state?.github?.pullRequests,\n [`${owner}/${repo}#${pr.number}`]: pr,\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in CREATE_GITHUB_PULL_REQUEST action:\", error);\n const errorContent: Content = {\n text: `Failed to create pull request: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"CREATE_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n ...errorContent,\n };\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: 'Create a pull request in elizaOS/eliza with title: \"Add GitHub integration\" from feature/github-integration to main with description: \"This PR adds comprehensive GitHub integration capabilities\"',\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Successfully created pull request #26: Add GitHub integration\\nRepository: elizaOS/eliza\\nState: open\\nDraft: No\\nAuthor: @agent\\nCreated: 3/21/2024\\nHead: feature/github-integration\\nBase: main\\n\\nThis PR adds comprehensive GitHub integration capabilities\\n\\nURL: https://github.com/elizaOS/eliza/pull/26\",\n actions: [\"CREATE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Create a draft PR for my bugfix branch and link it to issue #789\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"First, let me check issue #789 to understand the context...\\n\\nIssue #789: Database connection timeout\\nRepository: user/api-server\\nState: open\\nLabels: bug, database, priority-high\\n\\nNow I'll create a draft pull request for your bugfix...\\n\\nSuccessfully created pull request #790: Fix database connection timeout\\nRepository: user/api-server\\nState: open\\nDraft: Yes\\nAuthor: @agent\\nCreated: 3/21/2024\\nHead: bugfix/db-timeout\\nBase: main\\n\\nFixes #789 - Resolves database connection timeout issues by implementing connection pooling\\n\\nURL: https://github.com/user/api-server/pull/790\",\n actions: [\"GET_GITHUB_ISSUE\", \"CREATE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n ],\n};\n\n// Merge Pull Request Action\nexport const mergePullRequestAction: Action = {\n name: \"MERGE_GITHUB_PULL_REQUEST\",\n similes: [\"MERGE_PR\", \"ACCEPT_PR\", \"APPROVE_PR\"],\n description: \"Merges a GitHub pull request\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n owner?: string;\n repo?: string;\n pull_number?: number;\n commit_title?: string;\n commit_message?: string;\n merge_method?: \"merge\" | \"squash\" | \"rebase\";\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner, repo, and PR number from message text or options\n const text = message.content.text || \"\";\n const prMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)\\/pull\\/(\\d+)/,\n );\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n const prNumMatch = text.match(/(?:pr\\s*#?|pull\\s*request\\s*#?|#)(\\d+)/i);\n\n const owner =\n options.owner ||\n prMatch?.[1] ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastPullRequest?.base?.repo?.owner?.login ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n prMatch?.[2] ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastPullRequest?.base?.repo?.name ||\n state?.github?.lastRepository?.name;\n const pull_number =\n options.pull_number ||\n parseInt(prMatch?.[3] || prNumMatch?.[1] || \"0\", 10) ||\n state?.github?.lastPullRequest?.number;\n\n if (!owner || !repo || !pull_number) {\n throw new Error(\n 'Repository owner, name, and PR number are required. Please specify as \"owner/repo#123\" or provide them in options',\n );\n }\n\n // Extract merge method from text\n const mergeMethod =\n options.merge_method ||\n (text.includes(\"squash\")\n ? \"squash\"\n : text.includes(\"rebase\")\n ? \"rebase\"\n : \"merge\");\n\n logger.info(\n `Merging pull request ${owner}/${repo}#${pull_number} using ${mergeMethod}`,\n );\n const result = await githubService.mergePullRequest(\n owner,\n repo,\n pull_number,\n {\n commit_title: options.commit_title,\n commit_message: options.commit_message,\n merge_method: mergeMethod,\n },\n );\n\n const responseContent: Content = {\n text: `Successfully merged pull request #${pull_number}\nRepository: ${owner}/${repo}\nMerge method: ${mergeMethod}\nCommit SHA: ${result.sha}\nMessage: ${result.message}`,\n actions: [\"MERGE_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n merged: true,\n repository: `${owner}/${repo}`,\n pullNumber: pull_number,\n sha: result.sha,\n },\n data: {\n mergeResult: result,\n github: {\n ...state?.github,\n lastMergeResult: result,\n lastMergedPullRequest: pull_number,\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in MERGE_GITHUB_PULL_REQUEST action:\", error);\n const errorContent: Content = {\n text: `Failed to merge pull request: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"MERGE_GITHUB_PULL_REQUEST\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n ...errorContent,\n };\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Merge PR #25 in elizaOS/eliza using squash method\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Successfully merged pull request #25\\nRepository: elizaOS/eliza\\nMerge method: squash\\nCommit SHA: abc123def456\\nMessage: Pull request successfully merged\",\n actions: [\"MERGE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Review and merge the documentation PR if all checks pass\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Let me check the most recent documentation PR...\\n\\nPull Request #23: Update documentation (open)\\nRepository: user/project\\nMergeable: Yes\\nAll checks passing: ✓\\n\\nThe PR looks good with all checks passing. I'll merge it now...\\n\\nSuccessfully merged pull request #23\\nRepository: user/project\\nMerge method: merge\\nCommit SHA: def789abc123\\nMessage: Merge pull request #23 from user/update-docs\\n\\nNow let me update the activity log...\",\n actions: [\n \"GET_GITHUB_PULL_REQUEST\",\n \"MERGE_GITHUB_PULL_REQUEST\",\n \"GET_GITHUB_ACTIVITY\",\n ],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\n\n// Get GitHub Activity Action\nexport const getGitHubActivityAction: Action = {\n name: \"GET_GITHUB_ACTIVITY\",\n similes: [\"SHOW_ACTIVITY\", \"GITHUB_LOG\", \"ACTIVITY_LOG\", \"GITHUB_HISTORY\"],\n description: \"Shows recent GitHub activity performed by the agent\",\n\n validate: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n limit?: number;\n filter?: \"all\" | \"success\" | \"failed\";\n resource_type?: \"repository\" | \"issue\" | \"pull_request\";\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n const limit = options.limit || 20;\n const activityLog = githubService.getActivityLog(limit);\n\n // Apply filters\n let filteredActivity = activityLog;\n\n if (options.filter && options.filter !== \"all\") {\n filteredActivity = activityLog.filter((item) =>\n options.filter === \"success\" ? item.success : !item.success,\n );\n }\n\n if (options.resource_type) {\n filteredActivity = filteredActivity.filter(\n (item) => item.resource_type === options.resource_type,\n );\n }\n\n if (filteredActivity.length === 0) {\n const responseContent: Content = {\n text: \"No GitHub activity found matching the specified criteria.\",\n actions: [\"GET_GITHUB_ACTIVITY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: true,\n text: responseContent.text,\n values: {\n activityCount: 0,\n activity: [],\n },\n data: {\n activity: [],\n github: state?.github || {},\n },\n } as ActionResult;\n }\n\n // Group activities by date\n const activityByDate = filteredActivity.reduce(\n (acc, activity) => {\n const date = new Date(activity.timestamp).toLocaleDateString();\n if (!acc[date]) {\n acc[date] = [];\n }\n acc[date].push(activity);\n return acc;\n },\n {} as Record<string, typeof filteredActivity>,\n );\n\n const activityText = Object.entries(activityByDate)\n .sort(([a], [b]) => new Date(b).getTime() - new Date(a).getTime())\n .map(([date, activities]) => {\n const activityList = activities\n .map((activity) => {\n const time = new Date(activity.timestamp).toLocaleTimeString();\n const status = activity.success ? \"✅\" : \"❌\";\n const action = activity.action.replace(/_/g, \" \").toLowerCase();\n return ` ${time} ${status} ${action} ${activity.resource_type} ${activity.resource_id}${activity.error ? ` (${activity.error})` : \"\"}`;\n })\n .join(\"\\n\");\n\n return `**${date}**\\n${activityList}`;\n })\n .join(\"\\n\\n\");\n\n const successCount = filteredActivity.filter((a) => a.success).length;\n const failureCount = filteredActivity.filter((a) => !a.success).length;\n\n const responseContent: Content = {\n text: `GitHub Activity Log (${filteredActivity.length} entries)\\nSuccess: ${successCount} | Failed: ${failureCount}\\n\\n${activityText}`,\n actions: [\"GET_GITHUB_ACTIVITY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n activity: filteredActivity,\n activityCount: filteredActivity.length,\n successCount,\n failureCount,\n },\n data: {\n activity: filteredActivity,\n github: {\n ...state?.github,\n lastActivityLog: filteredActivity,\n activityStats: {\n total: filteredActivity.length,\n success: successCount,\n failed: failureCount,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_ACTIVITY action:\", error);\n const errorContent: Content = {\n text: `Failed to get GitHub activity: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_ACTIVITY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n cleared: false,\n },\n data: {\n github: {\n ...state?.github,\n lastActivityLog: [],\n activityStats: {\n total: 0,\n success: 0,\n failed: 0,\n },\n },\n },\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Show me my recent GitHub activity\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub Activity Log (5 entries)\\nSuccess: 4 | Failed: 1\\n\\n**3/21/2024**\\n 2:30 PM ✅ create issue issue elizaOS/eliza#43\\n 2:25 PM ✅ get repository repository elizaOS/eliza\\n 2:20 PM ❌ create repository repository invalid-name (Repository name is invalid)\\n\\n**3/20/2024**\\n 4:15 PM ✅ list repositories repository authenticated_user\\n 3:45 PM ✅ search repositories repository search\",\n actions: [\"GET_GITHUB_ACTIVITY\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Show me what went wrong with my recent GitHub operations and check my rate limit\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub Activity Log (3 failed entries)\\nSuccess: 0 | Failed: 3\\n\\n**3/21/2024**\\n 3:45 PM ❌ create pull_request pull_request user/repo#0 (Base branch does not exist)\\n 3:30 PM ❌ merge pull_request pull_request user/repo#15 (PR has merge conflicts)\\n 3:15 PM ❌ create repository repository @invalid/name (Repository name is invalid)\\n\\nLet me check your current API rate limit status...\",\n actions: [\"GET_GITHUB_ACTIVITY\", \"GET_GITHUB_RATE_LIMIT\"],\n },\n },\n ],\n ],\n};\n\n// Clear GitHub Activity Action\nexport const clearGitHubActivityAction: Action = {\n name: \"CLEAR_GITHUB_ACTIVITY\",\n similes: [\"CLEAR_LOG\", \"RESET_ACTIVITY\", \"CLEAR_HISTORY\"],\n description: \"Clears the GitHub activity log\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {} = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n githubService.clearActivityLog();\n\n const responseContent: Content = {\n text: \"GitHub activity log has been cleared.\",\n actions: [\"CLEAR_GITHUB_ACTIVITY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n cleared: true,\n },\n data: {\n github: {\n ...state?.github,\n lastActivityLog: [],\n activityStats: {\n total: 0,\n success: 0,\n failed: 0,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in CLEAR_GITHUB_ACTIVITY action:\", error);\n const errorContent: Content = {\n text: `Failed to clear GitHub activity: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"CLEAR_GITHUB_ACTIVITY\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n cleared: false,\n },\n data: {\n github: {\n ...state?.github,\n lastActivityLog: [],\n activityStats: {\n total: 0,\n success: 0,\n failed: 0,\n },\n },\n },\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Clear my GitHub activity log\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub activity log has been cleared.\",\n actions: [\"CLEAR_GITHUB_ACTIVITY\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Clear the activity log and start fresh with listing my repositories\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub activity log has been cleared.\\n\\nNow let me list your repositories to start fresh...\",\n actions: [\"CLEAR_GITHUB_ACTIVITY\", \"LIST_GITHUB_REPOSITORIES\"],\n },\n },\n ],\n ],\n};\n\n// Get GitHub Rate Limit Action\nexport const getGitHubRateLimitAction: Action = {\n name: \"GET_GITHUB_RATE_LIMIT\",\n similes: [\"CHECK_RATE_LIMIT\", \"RATE_LIMIT_STATUS\", \"API_LIMITS\"],\n description: \"Shows current GitHub API rate limit status\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {} = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n const rateLimit = await githubService.getRateLimit();\n const resetTime = new Date(rateLimit.reset * 1000);\n const now = new Date();\n const resetInMinutes = Math.ceil(\n (resetTime.getTime() - now.getTime()) / (1000 * 60),\n );\n\n const responseContent: Content & { rateLimit?: any; data?: any } = {\n text: `GitHub API Rate Limit Status:\nLimit: ${rateLimit.limit} requests per hour\nUsed: ${rateLimit.used} requests\nRemaining: ${rateLimit.remaining} requests\nReset Time: ${resetTime.toLocaleString()}\nReset In: ${resetInMinutes} minutes\nResource: ${rateLimit.resource}\n\nUsage: ${Math.round((rateLimit.used / rateLimit.limit) * 100)}%`,\n actions: [\"GET_GITHUB_RATE_LIMIT\"],\n source: message.content.source,\n rateLimit,\n data: {\n ...state?.data,\n rateLimit,\n },\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n rateLimit,\n remaining: rateLimit.remaining,\n resetInMinutes,\n },\n data: {\n rateLimit,\n github: {\n ...state?.github,\n lastRateLimit: rateLimit,\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_RATE_LIMIT action:\", error);\n const errorContent: Content = {\n text: `Failed to get rate limit status: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_RATE_LIMIT\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n values: {\n cleared: false,\n },\n data: {\n github: {\n ...state?.github,\n lastRateLimit: null,\n },\n },\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Check my GitHub API rate limit\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub API Rate Limit Status:\\nLimit: 5000 requests per hour\\nUsed: 127 requests\\nRemaining: 4873 requests\\nReset Time: 3/21/2024, 3:45:00 PM\\nReset In: 23 minutes\\nResource: core\\n\\nUsage: 3%\",\n actions: [\"GET_GITHUB_RATE_LIMIT\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Check if I have enough API calls left to search through 100 repositories\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub API Rate Limit Status:\\nLimit: 5000 requests per hour\\nUsed: 2341 requests\\nRemaining: 2659 requests\\nReset Time: 3/21/2024, 4:00:00 PM\\nReset In: 35 minutes\\nResource: core\\n\\nUsage: 47%\\n\\nYou have 2659 requests remaining, which is more than enough to search through 100 repositories. Each search typically uses 1-2 API calls, so you should be fine. Let me start the repository search...\",\n actions: [\"GET_GITHUB_RATE_LIMIT\", \"SEARCH_GITHUB_REPOSITORIES\"],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\n\n// Advanced GitHub Search Action (searches repos, issues, and PRs)\nexport const searchGitHubAction: Action = {\n name: \"SEARCH_GITHUB\",\n similes: [\"GITHUB_SEARCH\", \"FIND_ON_GITHUB\", \"SEARCH_ALL\"],\n description:\n \"Comprehensive GitHub search across repositories, issues, and pull requests\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n query?: string;\n type?: \"repositories\" | \"issues\" | \"pull_requests\" | \"all\";\n sort?: string;\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract search query from message text or options\n const text = message.content.text || \"\";\n const queryMatch = text.match(\n /(?:search|find)\\s+(?:for\\s+)?[\"\\']?([^\"'\\n]+?)[\"\\']?(?:\\s|$)/i,\n );\n const query = options.query || queryMatch?.[1];\n\n if (!query) {\n throw new Error(\"Search query is required\");\n }\n\n // Determine search type from context\n const searchType =\n options.type ||\n (text.includes(\"issue\")\n ? \"issues\"\n : text.includes(\"pr\") || text.includes(\"pull request\")\n ? \"pull_requests\"\n : text.includes(\"repo\")\n ? \"repositories\"\n : \"all\");\n\n const results: any = {};\n let responseText = \"\";\n\n if (searchType === \"all\" || searchType === \"repositories\") {\n const repos = await githubService.searchRepositories(query, {\n sort: \"stars\",\n per_page: options.limit || 5,\n });\n results.repositories = repos.items;\n if (repos.items.length > 0) {\n responseText += `**Repositories (${repos.total_count} total):**\\n`;\n responseText += repos.items\n .map(\n (r: any) =>\n `• ${r.full_name} - ⭐ ${r.stargazers_count} - ${r.description || \"No description\"}`,\n )\n .join(\"\\n\");\n responseText += \"\\n\\n\";\n }\n }\n\n if (searchType === \"all\" || searchType === \"issues\") {\n const issues = await githubService.searchIssues(`${query} is:issue`, {\n sort: \"updated\",\n per_page: options.limit || 5,\n });\n results.issues = issues.items;\n if (issues.items.length > 0) {\n responseText += `**Issues (${issues.total_count} total):**\\n`;\n responseText += issues.items\n .map((i: any) => {\n const repoName = i.html_url\n ? i.html_url.match(/github\\.com\\/([^\\/]+\\/[^\\/]+)/)?.[1]\n : \"unknown\";\n return `• ${repoName}#${i.number}: ${i.title} (${i.state})`;\n })\n .join(\"\\n\");\n responseText += \"\\n\\n\";\n }\n }\n\n if (searchType === \"all\" || searchType === \"pull_requests\") {\n const prs = await githubService.searchIssues(`${query} is:pr`, {\n sort: \"updated\",\n per_page: options.limit || 5,\n });\n results.pullRequests = prs.items;\n if (prs.items.length > 0) {\n responseText += `**Pull Requests (${prs.total_count} total):**\\n`;\n responseText += prs.items\n .map((pr: any) => {\n const repoName = pr.html_url\n ? pr.html_url.match(/github\\.com\\/([^\\/]+\\/[^\\/]+)/)?.[1]\n : \"unknown\";\n return `• ${repoName}#${pr.number}: ${pr.title} (${pr.state})`;\n })\n .join(\"\\n\");\n responseText += \"\\n\\n\";\n }\n }\n\n if (!responseText) {\n responseText = `No results found for \"${query}\"`;\n } else {\n responseText = `Search results for \"${query}\":\\n\\n${responseText.trim()}`;\n }\n\n const responseContent: Content = {\n text: responseText,\n actions: [\"SEARCH_GITHUB\"],\n source: message.content.source,\n // Include data for callbacks\n results,\n query,\n searchType,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n results,\n query,\n searchType,\n },\n data: {\n searchResults: results,\n github: {\n ...state?.github,\n lastSearchResults: results,\n lastSearchQuery: query,\n lastSearchType: searchType,\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in SEARCH_GITHUB action:\", error);\n const errorContent: Content = {\n text: `Failed to search GitHub: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"SEARCH_GITHUB\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: 'Search GitHub for \"machine learning\"',\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Search results for \"machine learning\":\\n\\n**Repositories (150,000 total):**\\n• tensorflow/tensorflow - ⭐ 185000 - An Open Source Machine Learning Framework for Everyone\\n• scikit-learn/scikit-learn - ⭐ 59000 - machine learning in Python\\n• pytorch/pytorch - ⭐ 75000 - Tensors and Dynamic neural networks in Python\\n• keras-team/keras - ⭐ 61000 - Deep Learning for humans\\n• apache/spark - ⭐ 38000 - Apache Spark - A unified analytics engine\\n\\n**Issues (25,000 total):**\\n• tensorflow/tensorflow#58432: Add support for new optimizer (open)\\n• scikit-learn/scikit-learn#24567: Bug in RandomForest prediction (open)',\n actions: [\"SEARCH_GITHUB\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: 'Find everything related to \"GraphQL Apollo\" on GitHub',\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Search results for \"GraphQL Apollo\":\\n\\n**Repositories (8,500 total):**\\n• apollographql/apollo-server - ⭐ 13500 - 🌍 Spec-compliant GraphQL server\\n• apollographql/apollo-client - ⭐ 19000 - 🚀 A fully-featured GraphQL client\\n• apollographql/apollo - ⭐ 2300 - 🚀 The Apollo GraphQL platform\\n\\n**Issues (2,100 total):**\\n• apollographql/apollo-client#9876: Cache invalidation not working properly (open)\\n• apollographql/apollo-server#5432: Federation v2 support (closed)\\n\\n**Pull Requests (890 total):**\\n• apollographql/apollo-client#9890: Fix subscription memory leak (open)\\n• apollographql/apollo-server#5445: Add custom scalar support (merged)\\n\\nWould you like me to dive deeper into any of these results?',\n actions: [\"SEARCH_GITHUB\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Search for TypeScript issues in popular frameworks\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Search results for \"TypeScript issues in popular frameworks\":\\n\\n**Issues (12,345 total):**\\n• microsoft/vscode#98765: TypeScript 5.0 support (open)\\n• angular/angular#45678: Type inference regression in v15 (open)\\n• vuejs/core#8901: TypeScript strict mode compatibility (closed)\\n• facebook/react#23456: JSX transform TypeScript types (open)\\n• nestjs/nest#7890: Decorator metadata issues with TS 5.0 (open)\\n\\n**Pull Requests (3,456 total):**\\n• DefinitelyTyped/DefinitelyTyped#67890: Update React types for v18 (open)\\n• microsoft/TypeScript#54321: Fix generic constraint inference (merged)\\n• angular/angular#45679: Fix TypeScript 5.0 compatibility (open)\\n\\nThese results show active TypeScript-related development across major frameworks. Would you like me to search for something more specific?',\n actions: [\"SEARCH_GITHUB\"],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\n\n// Get User Profile Action\nexport const getUserProfileAction: Action = {\n name: \"GET_GITHUB_USER\",\n similes: [\"GET_USER\", \"USER_PROFILE\", \"CHECK_USER\", \"USER_INFO\"],\n description: \"Retrieves detailed information about a GitHub user\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { username?: string } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract username from message text or options\n const text = message.content.text || \"\";\n const usernameMatch = text.match(\n /@?([a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38})/,\n );\n const username = options.username || usernameMatch?.[1];\n\n if (!username) {\n // Get current authenticated user if no username provided\n logger.info(\"No username provided, getting authenticated user\");\n const user = await githubService.getCurrentUser();\n\n const responseContent: Content = {\n text: `Your GitHub Profile:\nUsername: @${user.login}\nName: ${user.name || \"Not set\"}\nBio: ${user.bio || \"No bio\"}\nCompany: ${user.company || \"Not specified\"}\nLocation: ${user.location || \"Not specified\"}\nEmail: ${user.email || \"Not public\"}\nTwitter: ${user.twitter_username ? `@${user.twitter_username}` : \"Not linked\"}\nBlog: ${user.blog || \"No blog\"}\n\nPublic Repos: ${user.public_repos}\nPublic Gists: ${user.public_gists}\nFollowers: ${user.followers}\nFollowing: ${user.following}\n\nCreated: ${new Date(user.created_at).toLocaleDateString()}\nUpdated: ${new Date(user.updated_at).toLocaleDateString()}\n\nProfile URL: ${user.html_url}`,\n actions: [\"GET_GITHUB_USER\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: true,\n text: responseContent.text,\n values: {\n user,\n username: user.login,\n },\n data: {\n user,\n github: {\n ...state?.github,\n lastUser: user,\n currentUser: user,\n },\n },\n };\n }\n\n // Get specific user\n logger.info(`Getting user information for ${username}`);\n const user = await githubService.getUser(username);\n\n const responseContent: Content = {\n text: `GitHub User: @${user.login}\nName: ${user.name || \"Not set\"}\nBio: ${user.bio || \"No bio\"}\nCompany: ${user.company || \"Not specified\"}\nLocation: ${user.location || \"Not specified\"}\nEmail: ${user.email || \"Not public\"}\nTwitter: ${user.twitter_username ? `@${user.twitter_username}` : \"Not linked\"}\nBlog: ${user.blog || \"No blog\"}\nType: ${user.type}\n\nPublic Repos: ${user.public_repos}\nPublic Gists: ${user.public_gists}\nFollowers: ${user.followers}\nFollowing: ${user.following}\n\nCreated: ${new Date(user.created_at).toLocaleDateString()}\nUpdated: ${new Date(user.updated_at).toLocaleDateString()}\n\nProfile URL: ${user.html_url}`,\n actions: [\"GET_GITHUB_USER\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n user,\n username: user.login,\n },\n data: {\n user,\n github: {\n ...state?.github,\n lastUser: user,\n users: {\n ...state?.github?.users,\n [user.login]: user,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_USER action:\", error);\n const errorContent: Content = {\n text: `Failed to get user information: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_USER\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Get information about @octocat\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub User: @octocat\\nName: The Octocat\\nBio: GitHub mascot\\nCompany: @github\\nLocation: San Francisco\\nEmail: Not public\\nTwitter: Not linked\\nBlog: https://github.blog\\nType: User\\n\\nPublic Repos: 8\\nPublic Gists: 8\\nFollowers: 3938\\nFollowing: 9\\n\\nCreated: 1/25/2011\\nUpdated: 3/21/2024\\n\\nProfile URL: https://github.com/octocat\",\n actions: [\"GET_GITHUB_USER\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Check torvalds profile and see his top repositories\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub User: @torvalds\\nName: Linus Torvalds\\nBio: Creator of Linux\\nCompany: Linux Foundation\\nLocation: Portland, OR\\nEmail: Not public\\nTwitter: Not linked\\nBlog: Not specified\\nType: User\\n\\nPublic Repos: 6\\nPublic Gists: 0\\nFollowers: 171234\\nFollowing: 0\\n\\nCreated: 9/3/2011\\nUpdated: 3/21/2024\\n\\nProfile URL: https://github.com/torvalds\\n\\nNow let me check his repositories...\",\n actions: [\"GET_GITHUB_USER\", \"LIST_USER_REPOSITORIES\"],\n },\n },\n ],\n ],\n};\n\n// Get User Stats Action\nexport const getUserStatsAction: Action = {\n name: \"GET_GITHUB_USER_STATS\",\n similes: [\"USER_STATS\", \"USER_ACTIVITY\", \"USER_CONTRIBUTIONS\"],\n description:\n \"Gets comprehensive statistics about a GitHub user including contributions and language breakdown\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { username?: string; year?: number } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract username from message text or options\n const text = message.content.text || \"\";\n const usernameMatch = text.match(\n /@?([a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38})/,\n );\n const username =\n options.username ||\n usernameMatch?.[1] ||\n (await githubService.getCurrentUser()).login;\n\n logger.info(`Getting stats for user ${username}`);\n\n // Get user's repositories to calculate stats\n const repos = await githubService.listUserRepositories(username, {\n type: \"owner\",\n sort: \"updated\",\n per_page: 100,\n });\n\n // Calculate language statistics\n const languageStats: Record<string, number> = {};\n let totalStars = 0;\n let totalForks = 0;\n let totalIssues = 0;\n\n for (const repo of repos) {\n if (repo.language) {\n languageStats[repo.language] =\n (languageStats[repo.language] || 0) + 1;\n }\n totalStars += repo.stargazers_count || 0;\n totalForks += repo.forks_count || 0;\n totalIssues += repo.open_issues_count || 0;\n }\n\n // Sort languages by count\n const sortedLanguages = Object.entries(languageStats)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5);\n\n // Get recent activity (events)\n const events = await githubService.listUserEvents(username, {\n per_page: 100,\n });\n\n // Count event types\n const eventTypes: Record<string, number> = {};\n for (const event of events) {\n eventTypes[event.type] = (eventTypes[event.type] || 0) + 1;\n }\n\n const recentCommits = events.filter(\n (e: any) => e.type === \"PushEvent\",\n ).length;\n const recentPRs = events.filter(\n (e: any) => e.type === \"PullRequestEvent\",\n ).length;\n const recentIssues = events.filter(\n (e: any) => e.type === \"IssuesEvent\",\n ).length;\n\n const responseContent: Content = {\n text: `GitHub Stats for @${username}:\n\n**Repository Statistics:**\nTotal Repositories: ${repos.length}\nTotal Stars Received: ⭐ ${totalStars}\nTotal Forks: 🍴 ${totalForks}\nTotal Open Issues: 📝 ${totalIssues}\n\n**Top Languages:**\n${sortedLanguages.map(([lang, count]) => `• ${lang}: ${count} repos`).join(\"\\n\") || \"No languages detected\"}\n\n**Recent Activity (last 100 events):**\nPush Events (Commits): ${recentCommits}\nPull Request Events: ${recentPRs}\nIssue Events: ${recentIssues}\nTotal Events: ${events.length}\n\n**Most Popular Repositories:**\n${repos\n .sort(\n (a: any, b: any) => (b.stargazers_count || 0) - (a.stargazers_count || 0),\n )\n .slice(0, 5)\n .map(\n (r: any) =>\n `• ${r.name} - ⭐ ${r.stargazers_count || 0} - ${r.description || \"No description\"}`,\n )\n .join(\"\\n\")}`,\n actions: [\"GET_GITHUB_USER_STATS\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n username,\n stats: {\n totalRepos: repos.length,\n totalStars,\n totalForks,\n totalIssues,\n languages: languageStats,\n recentActivity: {\n commits: recentCommits,\n pullRequests: recentPRs,\n issues: recentIssues,\n totalEvents: events.length,\n },\n },\n },\n data: {\n stats: {\n username,\n repositories: repos,\n languageStats,\n events,\n eventTypes,\n },\n github: {\n ...state?.github,\n userStats: {\n ...state?.github?.userStats,\n [username]: {\n repos: repos.length,\n stars: totalStars,\n forks: totalForks,\n languages: languageStats,\n lastUpdated: new Date().toISOString(),\n },\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_USER_STATS action:\", error);\n const errorContent: Content = {\n text: `Failed to get user stats: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_USER_STATS\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n ...errorContent,\n };\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Get stats for @gaearon\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub Stats for @gaearon:\\n\\n**Repository Statistics:**\\nTotal Repositories: 245\\nTotal Stars Received: ⭐ 89234\\nTotal Forks: 🍴 12456\\nTotal Open Issues: 📝 234\\n\\n**Top Languages:**\\n• JavaScript: 178 repos\\n• TypeScript: 45 repos\\n• HTML: 12 repos\\n• CSS: 8 repos\\n• Shell: 2 repos\\n\\n**Recent Activity (last 100 events):**\\nPush Events (Commits): 34\\nPull Request Events: 12\\nIssue Events: 8\\nTotal Events: 100\\n\\n**Most Popular Repositories:**\\n• redux - ⭐ 60234 - Predictable state container for JavaScript apps\\n• react-hot-loader - ⭐ 12456 - Live editing of React\\n• overreacted.io - ⭐ 6789 - Personal blog by Dan Abramov\\n• whatthefuck.is - ⭐ 4567 - An opinionated glossary of computer science terms\\n• react-dnd - ⭐ 3456 - Drag and Drop for React\",\n actions: [\"GET_GITHUB_USER_STATS\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Show me my GitHub statistics and language breakdown\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"GitHub Stats for @user:\\n\\n**Repository Statistics:**\\nTotal Repositories: 42\\nTotal Stars Received: ⭐ 156\\nTotal Forks: 🍴 23\\nTotal Open Issues: 📝 8\\n\\n**Top Languages:**\\n• TypeScript: 15 repos\\n• JavaScript: 12 repos\\n• Python: 8 repos\\n• Go: 4 repos\\n• Rust: 3 repos\\n\\n**Recent Activity (last 100 events):**\\nPush Events (Commits): 67\\nPull Request Events: 8\\nIssue Events: 5\\nTotal Events: 100\\n\\n**Most Popular Repositories:**\\n• awesome-project - ⭐ 45 - A really cool project\\n• my-cli-tool - ⭐ 34 - Useful CLI tool for developers\\n• react-components - ⭐ 28 - Reusable React components\\n• api-wrapper - ⭐ 21 - API wrapper for various services\\n• dotfiles - ⭐ 18 - My personal dotfiles\\n\\nYour most active language is TypeScript, and you've been quite active with 67 commits recently!\",\n actions: [\"GET_GITHUB_USER_STATS\"],\n },\n },\n ],\n ],\n};\n\n// List User Repositories Action\nexport const listUserRepositoriesAction: Action = {\n name: \"LIST_USER_REPOSITORIES\",\n similes: [\"USER_REPOS\", \"USER_PROJECTS\", \"GET_USER_REPOS\"],\n description: \"Lists repositories for a specific GitHub user\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n username?: string;\n type?: \"all\" | \"owner\" | \"member\";\n sort?: \"created\" | \"updated\" | \"pushed\" | \"full_name\";\n limit?: number;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract username from message text or options\n const text = message.content.text || \"\";\n const usernameMatch = text.match(\n /@?([a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38})/,\n );\n const username =\n options.username ||\n usernameMatch?.[1] ||\n state?.github?.lastUser?.login;\n\n if (!username) {\n throw new Error(\n \"Username is required. Please specify a GitHub username\",\n );\n }\n\n logger.info(`Listing repositories for user ${username}`);\n const repos = await githubService.listUserRepositories(username, {\n type: options.type || \"owner\",\n sort: options.sort || \"updated\",\n per_page: options.limit || 10,\n });\n\n const repoList = repos\n .map(\n (repo: any) =>\n `• ${repo.name} (${repo.language || \"Unknown\"}) - ⭐ ${repo.stargazers_count}${repo.fork ? \" (fork)\" : \"\"}${repo.description ? `\\n ${repo.description}` : \"\"}`,\n )\n .join(\"\\n\");\n\n const responseContent: Content = {\n text: `Repositories for @${username} (${repos.length} shown):\\n${repoList}`,\n actions: [\"LIST_USER_REPOSITORIES\"],\n source: message.content.source,\n // Include data for callbacks\n repositories: repos,\n username,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n repositories: repos,\n username,\n repositoryCount: repos.length,\n },\n data: {\n repositories: repos,\n github: {\n ...state?.github,\n userRepositories: {\n ...state?.github?.userRepositories,\n [username]: repos,\n },\n },\n },\n };\n } catch (error) {\n logger.error(\"Error in LIST_USER_REPOSITORIES action:\", error);\n const errorContent: Content = {\n text: `Failed to list user repositories: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"LIST_USER_REPOSITORIES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n ...errorContent,\n };\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"List repositories for @sindresorhus\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Repositories for @sindresorhus (10 shown):\\n• awesome - (Unknown) - ⭐ 285234\\n 😎 Awesome lists about all kinds of interesting topics\\n• awesome-nodejs - (Unknown) - ⭐ 54567\\n ⚡ Delightful Node.js packages and resources\\n• got - (TypeScript) - ⭐ 13456\\n 🌐 Human-friendly and powerful HTTP request library for Node.js\\n• ora - (JavaScript) - ⭐ 8901\\n Elegant terminal spinner\\n• execa - (JavaScript) - ⭐ 5678\\n Process execution for humans\\n• p-limit - (JavaScript) - ⭐ 1234\\n Run multiple promise-returning & async functions with limited concurrency\",\n actions: [\"LIST_USER_REPOSITORIES\"],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\n\n// List Branches Action\nexport const listBranchesAction: Action = {\n name: \"LIST_GITHUB_BRANCHES\",\n similes: [\"LIST_BRANCHES\", \"SHOW_BRANCHES\", \"GET_BRANCHES\", \"BRANCH_LIST\"],\n description:\n \"Lists branches in a GitHub repository, sorted by last commit date\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: {\n owner?: string;\n repo?: string;\n protected?: boolean;\n limit?: number;\n },\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options?.owner ||\n ownerRepoMatch?.[1] ||\n state?.data?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options?.repo ||\n ownerRepoMatch?.[2] ||\n state?.data?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n logger.info(`Listing branches for ${owner}/${repo}`);\n\n // Get all branches\n const allBranches: any[] = [];\n let page = 1;\n const perPage = 100;\n\n while (true) {\n const branches = await githubService.listBranches(owner, repo);\n\n allBranches.push(...branches);\n\n if (branches.length < perPage) {\n break;\n }\n page++;\n }\n\n // Get detailed branch info with last commit date\n const branchesWithDetails = await Promise.all(\n allBranches.slice(0, options?.limit || 20).map(async (branch) => {\n try {\n const branchData = await githubService.getBranch(\n owner,\n repo,\n branch.name,\n );\n\n return {\n name: branch.name,\n protected: branch.protected,\n commit: {\n sha: branchData.commit.sha,\n message: branchData.commit.commit.message.split(\"\\n\")[0],\n author: branchData.commit.commit.author?.name || \"Unknown\",\n date:\n branchData.commit.commit.author?.date ||\n new Date().toISOString(),\n },\n };\n } catch (error) {\n // Fallback if detailed info fails\n return {\n name: branch.name,\n protected: branch.protected,\n commit: {\n sha: branch.commit.sha,\n message: \"Unable to fetch commit details\",\n author: \"Unknown\",\n date: new Date().toISOString(),\n },\n };\n }\n }),\n );\n\n // Sort by commit date (most recent first)\n branchesWithDetails.sort(\n (a, b) =>\n new Date(b.commit.date).getTime() - new Date(a.commit.date).getTime(),\n );\n\n // Filter by protected status if requested\n const filteredBranches =\n options?.protected !== undefined\n ? branchesWithDetails.filter(\n (b) => b.protected === options?.protected,\n )\n : branchesWithDetails;\n\n const branchList = filteredBranches\n .map((branch) => {\n const date = new Date(branch.commit.date);\n const timeAgo = getTimeAgo(date);\n return `• ${branch.name}${branch.protected ? \" 🔒\" : \"\"}\n Last commit: ${timeAgo} by ${branch.commit.author}\n \"${branch.commit.message}\"\n SHA: ${branch.commit.sha.substring(0, 7)}`;\n })\n .join(\"\\n\\n\");\n\n const responseContent: Content = {\n text: `Branches for ${owner}/${repo} (${filteredBranches.length} shown, ${allBranches.length} total):\\n\\n${branchList}`,\n actions: [\"LIST_GITHUB_BRANCHES\"],\n source: message.content.source,\n // Include data for callbacks\n branches: filteredBranches,\n repository: `${owner}/${repo}`,\n totalBranches: allBranches.length,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n branches: filteredBranches,\n repository: `${owner}/${repo}`,\n branchCount: filteredBranches.length,\n totalBranches: allBranches.length,\n },\n data: {\n branches: filteredBranches,\n github: {\n ...state?.github,\n lastBranches: filteredBranches,\n branches: {\n ...state?.github?.branches,\n [`${owner}/${repo}`]: filteredBranches,\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in LIST_GITHUB_BRANCHES action:\", error);\n const errorContent: Content = {\n text: `Failed to list branches: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"LIST_GITHUB_BRANCHES\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"List branches for facebook/react\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Branches for facebook/react (20 shown, 145 total):\\n\\n• main 🔒\\n Last commit: 2 hours ago by React Bot\\n \"Update experimental API docs\"\\n SHA: abc1234\\n\\n• 18.x 🔒\\n Last commit: 3 days ago by Dan Abramov\\n \"Backport fix for hydration warning\"\\n SHA: def5678\\n\\n• experimental\\n Last commit: 5 days ago by Andrew Clark\\n \"Experimental: Add new Suspense features\"\\n SHA: ghi9012',\n actions: [\"LIST_GITHUB_BRANCHES\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Show me the most recently updated branches in my project repo and check for stale branches\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Branches for user/project (15 shown, 23 total):\\n\\n• feature/new-api\\n Last commit: 1 hour ago by You\\n \"Add REST API endpoints\"\\n SHA: abc1234\\n\\n• main 🔒\\n Last commit: 2 days ago by GitHub Actions\\n \"Merge pull request #45 from user/feature/auth\"\\n SHA: def5678\\n\\n• feature/auth\\n Last commit: 3 days ago by You\\n \"Implement JWT authentication\"\\n SHA: ghi9012\\n\\n• bugfix/memory-leak\\n Last commit: 2 weeks ago by Contributor\\n \"Fix memory leak in service worker\"\\n SHA: jkl3456\\n\\n• feature/old-feature\\n Last commit: 3 months ago by Former Contributor\\n \"WIP: Started new feature\"\\n SHA: mno7890\\n\\nI notice you have some potentially stale branches:\\n- feature/old-feature: Last updated 3 months ago\\n- Several other branches not shown are over 6 months old\\n\\nWould you like me to help identify which branches can be safely deleted?',\n actions: [\"LIST_GITHUB_BRANCHES\"],\n },\n },\n ],\n ],\n};\n\n// Create Branch Action\nexport const createBranchAction: Action = {\n name: \"CREATE_GITHUB_BRANCH\",\n similes: [\"NEW_BRANCH\", \"MAKE_BRANCH\", \"BRANCH_FROM\"],\n description: \"Creates a new branch in a GitHub repository\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n owner?: string;\n repo?: string;\n branch?: string;\n from?: string;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract parameters from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n const branchMatch = text.match(\n /(?:branch|called|named)\\s+[\"\\']?([a-zA-Z0-9._\\/-]+)[\"\\']?/i,\n );\n const fromMatch = text.match(\n /(?:from|based on|off)\\s+[\"\\']?([a-zA-Z0-9._\\/-]+)[\"\\']?/i,\n );\n\n const owner =\n options?.owner ||\n ownerRepoMatch?.[1] ||\n state?.data?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options?.repo ||\n ownerRepoMatch?.[2] ||\n state?.data?.github?.lastRepository?.name;\n const branch = options.branch || branchMatch?.[1];\n const from = options.from || fromMatch?.[1] || \"main\";\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n if (!branch) {\n throw new Error(\n \"Branch name is required. Please specify the name for the new branch\",\n );\n }\n\n logger.info(`Creating branch ${branch} from ${from} in ${owner}/${repo}`);\n\n // Get the SHA of the source branch\n const refData = await githubService.getRef(owner, repo, `heads/${from}`);\n\n // Create the new branch\n const _newBranch = await githubService.createBranch(\n owner,\n repo,\n branch,\n refData.object.sha,\n );\n\n const responseContent: Content = {\n text: `Successfully created branch \"${branch}\" from \"${from}\" in ${owner}/${repo}\nBranch: ${branch}\nBased on: ${from} (${refData.object.sha.substring(0, 7)})\nCreated at: ${new Date().toLocaleString()}`,\n actions: [\"CREATE_GITHUB_BRANCH\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n branch,\n from,\n repository: `${owner}/${repo}`,\n sha: refData.object.sha,\n },\n data: {\n newBranch: {\n name: branch,\n sha: refData.object.sha,\n from,\n },\n github: {\n ...state?.github,\n lastCreatedBranch: branch,\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in CREATE_GITHUB_BRANCH action:\", error);\n const errorContent: Content = {\n text: `Failed to create branch: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"CREATE_GITHUB_BRANCH\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Create a new branch called feature/payment-integration from main in my project repo\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Successfully created branch \"feature/payment-integration\" from \"main\" in user/project\\nBranch: feature/payment-integration\\nBased on: main (abc1234)\\nCreated at: 3/21/2024, 2:30:45 PM',\n actions: [\"CREATE_GITHUB_BRANCH\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Create a bugfix branch for issue #123 based on the release-v2 branch\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'I\\'ll create a bugfix branch for issue #123. Let me first check the issue details...\\n\\nIssue #123: Fix user authentication timeout\\nRepository: user/api-server\\nState: open\\nLabels: bug, priority-high\\n\\nNow creating the branch...\\n\\nSuccessfully created branch \"bugfix/issue-123-auth-timeout\" from \"release-v2\" in user/api-server\\nBranch: bugfix/issue-123-auth-timeout\\nBased on: release-v2 (def5678)\\nCreated at: 3/21/2024, 2:35:15 PM\\n\\nThe branch is ready for your fix. Would you like me to create a pull request draft for this issue?',\n actions: [\"GET_GITHUB_ISSUE\", \"CREATE_GITHUB_BRANCH\"],\n },\n },\n ],\n ],\n};\n\n// Get Branch Protection Action\nexport const getBranchProtectionAction: Action = {\n name: \"GET_BRANCH_PROTECTION\",\n similes: [\"CHECK_PROTECTION\", \"BRANCH_RULES\", \"PROTECTION_STATUS\"],\n description: \"Gets branch protection rules for a GitHub repository branch\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: {\n owner?: string;\n repo?: string;\n branch?: string;\n } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract parameters from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n const branchMatch = text.match(\n /(?:branch\\s+)?[\"\\']?([a-zA-Z0-9._\\/-]+)[\"\\']?/i,\n );\n\n const owner =\n options?.owner ||\n ownerRepoMatch?.[1] ||\n state?.data?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options?.repo ||\n ownerRepoMatch?.[2] ||\n state?.data?.github?.lastRepository?.name;\n const branch =\n options.branch ||\n branchMatch?.[1] ||\n state?.github?.lastCreatedBranch ||\n \"main\";\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n logger.info(\n `Getting branch protection for ${branch} in ${owner}/${repo}`,\n );\n\n try {\n const protection = await githubService.getBranchProtection(\n owner,\n repo,\n branch,\n );\n\n const requiredChecks =\n protection.required_status_checks?.contexts || [];\n const requiredReviews = protection.required_pull_request_reviews;\n const restrictions = protection.restrictions;\n\n const responseContent: Content = {\n text: `Branch Protection for \"${branch}\" in ${owner}/${repo}:\n\n**Status Checks:**\n${protection.required_status_checks ? `✅ Required checks: ${requiredChecks.join(\", \") || \"None specified\"}` : \"❌ No required status checks\"}\n\n**Pull Request Reviews:**\n${\n requiredReviews\n ? `✅ Required approvals: ${requiredReviews.required_approving_review_count || 1}\n✅ Dismiss stale reviews: ${requiredReviews.dismiss_stale_reviews ? \"Yes\" : \"No\"}\n✅ Require code owner reviews: ${requiredReviews.require_code_owner_reviews ? \"Yes\" : \"No\"}`\n : \"❌ No review requirements\"\n}\n\n**Restrictions:**\n${restrictions ? `✅ Restricted to: ${restrictions.users?.map((u: any) => `@${u.login}`).join(\", \") || \"No users\"}, ${restrictions.teams?.map((t: any) => t.name).join(\", \") || \"No teams\"}` : \"❌ No push restrictions\"}\n\n**Other Settings:**\n• Enforce admins: ${protection.enforce_admins?.enabled ? \"Yes\" : \"No\"}\n• Allow force pushes: ${protection.allow_force_pushes?.enabled ? \"Yes\" : \"No\"}\n• Allow deletions: ${protection.allow_deletions?.enabled ? \"Yes\" : \"No\"}\n• Required linear history: ${protection.required_linear_history?.enabled ? \"Yes\" : \"No\"}`,\n actions: [\"GET_BRANCH_PROTECTION\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: true,\n text: responseContent.text,\n values: {\n protection,\n branch,\n repository: `${owner}/${repo}`,\n },\n data: {\n protection,\n github: {\n ...state?.github,\n branchProtection: {\n ...state?.github?.branchProtection,\n [`${owner}/${repo}:${branch}`]: protection,\n },\n },\n },\n } as ActionResult;\n } catch (error: any) {\n if (error.status === 404) {\n const responseContent: Content = {\n text: `Branch \"${branch}\" in ${owner}/${repo} has no protection rules configured.`,\n actions: [\"GET_BRANCH_PROTECTION\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: true,\n text: responseContent.text,\n values: {\n protected: false,\n branch,\n repository: `${owner}/${repo}`,\n },\n data: {\n github: state?.github || {},\n },\n } as ActionResult;\n }\n throw error;\n }\n } catch (error) {\n logger.error(\"Error in GET_BRANCH_PROTECTION action:\", error);\n const errorContent: Content = {\n text: `Failed to get branch protection: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_BRANCH_PROTECTION\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Check branch protection for main branch in facebook/react\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: 'Branch Protection for \"main\" in facebook/react:\\n\\n**Status Checks:**\\n✅ Required checks: ci/circleci, continuous-integration/travis-ci\\n\\n**Pull Request Reviews:**\\n✅ Required approvals: 2\\n✅ Dismiss stale reviews: Yes\\n✅ Require code owner reviews: Yes\\n\\n**Restrictions:**\\n✅ Restricted to: @react-core-team\\n\\n**Other Settings:**\\n• Enforce admins: No\\n• Allow force pushes: No\\n• Allow deletions: No\\n• Required linear history: Yes',\n actions: [\"GET_BRANCH_PROTECTION\"],\n },\n },\n ],\n ],\n};\n\n// Helper function to get human-readable time ago\nfunction getTimeAgo(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n const diffWeeks = Math.floor(diffMs / 604800000);\n const diffMonths = Math.floor(diffMs / 2592000000);\n\n if (diffMins < 1) {\n return \"just now\";\n }\n if (diffMins < 60) {\n return `${diffMins} minute${diffMins === 1 ? \"\" : \"s\"} ago`;\n }\n if (diffHours < 24) {\n return `${diffHours} hour${diffHours === 1 ? \"\" : \"s\"} ago`;\n }\n if (diffDays < 7) {\n return `${diffDays} day${diffDays === 1 ? \"\" : \"s\"} ago`;\n }\n if (diffWeeks < 4) {\n return `${diffWeeks} week${diffWeeks === 1 ? \"\" : \"s\"} ago`;\n }\n return `${diffMonths} month${diffMonths === 1 ? \"\" : \"s\"} ago`;\n}\n","import {\n type Action,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\n\n// Get Repository Stats Action\nexport const getRepositoryStatsAction: Action = {\n name: \"GET_GITHUB_REPO_STATS\",\n similes: [\"REPO_STATS\", \"REPOSITORY_STATS\", \"PROJECT_STATS\", \"REPO_METRICS\"],\n description:\n \"Gets comprehensive statistics about a GitHub repository including contributors, commits, and activity\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { owner?: string; repo?: string } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n logger.info(`Getting stats for repository ${owner}/${repo}`);\n\n // Get repository info\n const repository = await githubService.getRepository(owner, repo);\n\n // Get contributor stats\n const contributors = await githubService.getContributorsStats(\n owner,\n repo,\n );\n\n // Get commit activity\n const commitActivity = await githubService.getCommitActivityStats(\n owner,\n repo,\n );\n\n // Get code frequency\n const codeFrequency = await githubService.getCodeFrequencyStats(\n owner,\n repo,\n );\n\n // Get language breakdown\n const languages = await githubService.getLanguages(owner, repo);\n\n // Calculate stats\n const totalCommits =\n contributors?.reduce(\n (sum: number, c: any) => sum + (c.total || 0),\n 0,\n ) || 0;\n const topContributors = (contributors || [])\n .sort((a: any, b: any) => (b.total || 0) - (a.total || 0))\n .slice(0, 5);\n\n // Recent activity (last 4 weeks)\n const recentWeeks = (commitActivity || []).slice(-4);\n const recentCommits = recentWeeks.reduce(\n (sum: number, week: any) => sum + (week.total || 0),\n 0,\n );\n\n // Code changes (last entry in code frequency)\n const codeFreqArray = Array.isArray(codeFrequency) ? codeFrequency : [];\n const lastWeekCode = codeFreqArray[codeFreqArray.length - 1] || [0, 0, 0];\n const [, additions, deletions] = lastWeekCode;\n\n // Language stats\n const totalBytes = Object.values(languages || {}).reduce(\n (sum: number, bytes: any) => sum + bytes,\n 0,\n );\n const languagePercentages = Object.entries(languages || {})\n .map(([lang, bytes]: [string, any]) => ({\n language: lang,\n percentage: ((Number(bytes) / Number(totalBytes)) * 100).toFixed(1),\n }))\n .sort((a, b) => parseFloat(b.percentage) - parseFloat(a.percentage))\n .slice(0, 5);\n\n const responseContent: Content = {\n text: `Repository Stats for ${owner}/${repo}:\n\n**Basic Info:**\n• Created: ${new Date(repository.created_at).toLocaleDateString()}\n• Last Updated: ${new Date(repository.updated_at).toLocaleDateString()}\n• Stars: ⭐ ${repository.stargazers_count}\n• Forks: 🍴 ${repository.forks_count}\n• Open Issues: 📝 ${repository.open_issues_count}\n• Size: ${(repository.size / 1024).toFixed(1)} MB\n\n**Contributors:**\nTotal Contributors: ${contributors?.length || 0}\nTotal Commits: ${totalCommits}\n\nTop Contributors:\n${topContributors\n .map((c: any) => `• @${c.author?.login || \"unknown\"} - ${c.total} commits`)\n .join(\"\\n\")}\n\n**Recent Activity (Last 4 weeks):**\nTotal Commits: ${recentCommits}\nLast Week: +${Math.abs(additions)} lines, -${Math.abs(deletions)} lines\n\n**Languages:**\n${languagePercentages.map((l) => `• ${l.language}: ${l.percentage}%`).join(\"\\n\")}`,\n actions: [\"GET_GITHUB_REPO_STATS\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n // Return result for chaining\n return {\n success: true,\n text: responseContent.text,\n values: {\n repository: `${owner}/${repo}`,\n stats: {\n basic: {\n stars: repository.stargazers_count,\n forks: repository.forks_count,\n issues: repository.open_issues_count,\n size: repository.size,\n },\n contributors: {\n total: contributors?.length || 0,\n commits: totalCommits,\n top: topContributors,\n },\n activity: {\n recentCommits,\n additions,\n deletions,\n },\n languages: languagePercentages,\n },\n },\n data: {\n repository,\n stats: {\n contributors,\n commitActivity,\n codeFrequency,\n languages,\n },\n github: {\n ...state?.github,\n repositoryStats: {\n ...state?.github?.repositoryStats,\n [`${owner}/${repo}`]: {\n repository,\n contributors: contributors?.length || 0,\n totalCommits,\n languages: languagePercentages,\n lastUpdated: new Date().toISOString(),\n },\n },\n },\n },\n } as ActionResult;\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_REPO_STATS action:\", error);\n const errorContent: Content = {\n text: `Failed to get repository stats: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_REPO_STATS\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n text: errorContent.text,\n error: error instanceof Error ? error.message : String(error),\n } as ActionResult;\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Get stats for facebook/react repository\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Repository Stats for facebook/react:\\n\\n**Basic Info:**\\n• Created: 5/29/2013\\n• Last Updated: 3/21/2024\\n• Stars: ⭐ 223456\\n• Forks: 🍴 45678\\n• Open Issues: 📝 1234\\n• Size: 234.5 MB\\n\\n**Contributors:**\\nTotal Contributors: 1584\\nTotal Commits: 15234\\n\\nTop Contributors:\\n• @gaearon - 892 commits\\n• @sophiebits - 765 commits\\n• @sebmarkbage - 654 commits\\n• @acdlite - 543 commits\\n• @zpao - 432 commits\\n\\n**Recent Activity (Last 4 weeks):**\\nTotal Commits: 234\\nLast Week: +1234 lines, -567 lines\\n\\n**Languages:**\\n• JavaScript: 68.2%\\n• TypeScript: 25.3%\\n• CSS: 3.8%\\n• HTML: 2.1%\\n• Other: 0.6%\",\n actions: [\"GET_GITHUB_REPO_STATS\"],\n },\n },\n ],\n [\n {\n name: \"User\",\n content: {\n text: \"Analyze the activity and health of my project repository\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Repository Stats for user/project:\\n\\n**Basic Info:**\\n• Created: 1/15/2024\\n• Last Updated: 3/21/2024\\n• Stars: ⭐ 42\\n• Forks: 🍴 8\\n• Open Issues: 📝 5\\n• Size: 12.3 MB\\n\\n**Contributors:**\\nTotal Contributors: 3\\nTotal Commits: 234\\n\\nTop Contributors:\\n• @user - 189 commits\\n• @contributor1 - 34 commits\\n• @contributor2 - 11 commits\\n\\n**Recent Activity (Last 4 weeks):**\\nTotal Commits: 45\\nLast Week: +892 lines, -234 lines\\n\\n**Languages:**\\n• TypeScript: 72.5%\\n• JavaScript: 15.2%\\n• CSS: 8.3%\\n• HTML: 4.0%\\n\\nThe repository shows healthy activity with consistent commits. Consider addressing the 5 open issues to improve project health.\",\n actions: [\"GET_GITHUB_REPO_STATS\"],\n },\n },\n ],\n ],\n};\n\n// Get Repository Traffic Action\nexport const getRepositoryTrafficAction: Action = {\n name: \"GET_GITHUB_REPO_TRAFFIC\",\n similes: [\"REPO_TRAFFIC\", \"VISITOR_STATS\", \"TRAFFIC_ANALYTICS\"],\n description:\n \"Gets traffic statistics for a GitHub repository (requires push access)\",\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<boolean> => {\n const githubService = runtime.getService<GitHubService>(\"github\");\n return !!githubService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { owner?: string; repo?: string } = {},\n callback?: HandlerCallback,\n ) => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service not available\");\n }\n\n // Extract owner and repo from message text or options\n const text = message.content.text || \"\";\n const ownerRepoMatch = text.match(\n /(?:github\\.com\\/)?([^\\/\\s]+)\\/([^\\/\\s]+)/,\n );\n\n const owner =\n options.owner ||\n ownerRepoMatch?.[1] ||\n state?.github?.lastRepository?.owner?.login ||\n runtime.getSetting(\"GITHUB_OWNER\");\n const repo =\n options.repo ||\n ownerRepoMatch?.[2] ||\n state?.github?.lastRepository?.name;\n\n if (!owner || !repo) {\n throw new Error(\n 'Repository owner and name are required. Please specify as \"owner/repo\" or provide them in options',\n );\n }\n\n logger.info(`Getting traffic stats for repository ${owner}/${repo}`);\n\n try {\n // Get views\n const views = await githubService.getTrafficViews(owner, repo);\n\n // Get clones\n const clones = await githubService.getTrafficClones(owner, repo);\n\n // Get popular paths\n const paths = await githubService.getTopPaths(owner, repo);\n\n // Get referrers\n const referrers = await githubService.getTopReferrers(owner, repo);\n\n const responseContent: Content = {\n text: `Traffic Stats for ${owner}/${repo}:\n\n**Views (Last 14 days):**\n• Total Views: ${views.count}\n• Unique Visitors: ${views.uniques}\n\n**Clones (Last 14 days):**\n• Total Clones: ${clones.count}\n• Unique Cloners: ${clones.uniques}\n\n**Popular Content:**\n${paths\n .slice(0, 5)\n .map((p: any) => `• ${p.path} - ${p.count} views (${p.uniques} unique)`)\n .join(\"\\n\")}\n\n**Top Referrers:**\n${referrers\n .slice(0, 5)\n .map((r: any) => `• ${r.referrer} - ${r.count} views (${r.uniques} unique)`)\n .join(\"\\n\")}`,\n actions: [\"GET_GITHUB_REPO_TRAFFIC\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: true,\n text: responseContent.text,\n values: {\n repository: `${owner}/${repo}`,\n traffic: {\n views: {\n total: views.count,\n unique: views.uniques,\n },\n clones: {\n total: clones.count,\n unique: clones.uniques,\n },\n paths: paths.slice(0, 5),\n referrers: referrers.slice(0, 5),\n },\n },\n data: {\n traffic: {\n views,\n clones,\n paths,\n referrers,\n },\n github: {\n ...state?.github,\n repositoryTraffic: {\n ...state?.github?.repositoryTraffic,\n [`${owner}/${repo}`]: {\n views,\n clones,\n lastUpdated: new Date().toISOString(),\n },\n },\n },\n },\n };\n } catch (error: any) {\n if (error.status === 403) {\n const responseContent: Content = {\n text: `Traffic statistics are not available for ${owner}/${repo}. This feature requires push access to the repository.`,\n actions: [\"GET_GITHUB_REPO_TRAFFIC\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(responseContent);\n }\n\n return {\n success: false,\n text: responseContent.text,\n values: {\n repository: `${owner}/${repo}`,\n available: false,\n },\n data: {\n github: state?.github || {},\n },\n };\n }\n throw error;\n }\n } catch (error) {\n logger.error(\"Error in GET_GITHUB_REPO_TRAFFIC action:\", error);\n const errorContent: Content = {\n text: `Failed to get repository traffic: ${error instanceof Error ? error.message : String(error)}`,\n actions: [\"GET_GITHUB_REPO_TRAFFIC\"],\n source: message.content.source,\n };\n\n if (callback) {\n await callback(errorContent);\n }\n\n return {\n success: false,\n ...errorContent,\n };\n }\n },\n\n examples: [\n [\n {\n name: \"User\",\n content: {\n text: \"Show traffic stats for my awesome-project repository\",\n },\n },\n {\n name: \"Assistant\",\n content: {\n text: \"Traffic Stats for user/awesome-project:\\n\\n**Views (Last 14 days):**\\n• Total Views: 1,234\\n• Unique Visitors: 456\\n\\n**Clones (Last 14 days):**\\n• Total Clones: 89\\n• Unique Cloners: 34\\n\\n**Popular Content:**\\n• /README.md - 456 views (234 unique)\\n• /docs/getting-started.md - 123 views (89 unique)\\n• /src/index.js - 78 views (45 unique)\\n• /package.json - 56 views (34 unique)\\n• /LICENSE - 45 views (23 unique)\\n\\n**Top Referrers:**\\n• google.com - 234 views (123 unique)\\n• github.com - 189 views (98 unique)\\n• stackoverflow.com - 78 views (45 unique)\\n• reddit.com - 56 views (34 unique)\\n• twitter.com - 45 views (23 unique)\",\n actions: [\"GET_GITHUB_REPO_TRAFFIC\"],\n },\n },\n ],\n ],\n};\n","import {\n type Action,\n type IAgentRuntime,\n type Memory,\n type State,\n type HandlerCallback,\n logger,\n ModelType,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\nimport { z } from \"zod\";\n\n// Schema for webhook evaluation\nconst WebhookIntentSchema = z.object({\n intent: z.enum([\n \"create_webhook\",\n \"list_webhooks\",\n \"delete_webhook\",\n \"ping_webhook\",\n \"unclear\",\n ]),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n parameters: z\n .object({\n owner: z.string().optional(),\n repo: z.string().optional(),\n webhookId: z.number().optional(),\n events: z.array(z.string()).optional(),\n })\n .optional(),\n});\n\ntype WebhookIntent = z.infer<typeof WebhookIntentSchema>;\n\n// Use LLM to understand webhook-related requests instead of string matching\nasync function analyzeWebhookIntent(\n runtime: IAgentRuntime,\n message: Memory,\n state: State,\n): Promise<WebhookIntent> {\n const prompt = `Analyze this message to determine if the user wants to perform a webhook-related action:\n\nMessage: \"${message.content.text}\"\n\nContext from state:\n${state.data?.github?.lastRepository ? `Current repository: ${state.data.github.lastRepository.full_name}` : \"No repository context\"}\n\nDetermine:\n1. What webhook action they want (create, list, delete, ping, or unclear)\n2. Confidence level (0-1)\n3. Your reasoning\n4. Extract parameters (owner, repo, webhookId, events)\n\nFormat as JSON matching this schema:\n{\n \"intent\": \"create_webhook\" | \"list_webhooks\" | \"delete_webhook\" | \"ping_webhook\" | \"unclear\",\n \"confidence\": 0.8,\n \"reasoning\": \"User is asking to...\",\n \"parameters\": {\n \"owner\": \"extracted_owner\",\n \"repo\": \"extracted_repo\", \n \"webhookId\": 123,\n \"events\": [\"issues\", \"pull_request\"]\n }\n}`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n temperature: 0.1,\n max_tokens: 500,\n });\n\n const parsed = WebhookIntentSchema.parse(JSON.parse(response));\n return parsed;\n } catch (error) {\n logger.warn(\"Failed to analyze webhook intent:\", error);\n return {\n intent: \"unclear\",\n confidence: 0,\n reasoning: \"Failed to parse intent\",\n };\n }\n}\n\nexport const createWebhookAction: Action = {\n name: \"CREATE_GITHUB_WEBHOOK\",\n similes: [\"SETUP_WEBHOOK\", \"ADD_WEBHOOK\", \"CONFIGURE_WEBHOOK\"],\n description:\n \"Create a GitHub webhook for real-time event processing using Ngrok tunnel\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Create a webhook for owner/repo to listen for issues and pull requests\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll create a webhook for the repository with the appropriate events configured.\",\n actions: [\"CREATE_GITHUB_WEBHOOK\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n // Use LLM to determine if this is a webhook creation request\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n return intent.intent === \"create_webhook\" && intent.confidence > 0.7;\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options: any = {},\n callback: HandlerCallback = async () => [],\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n const tunnelService = runtime.getService(\"tunnel\") as any;\n\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n if (!tunnelService || !tunnelService.isActive()) {\n throw new Error(\n \"Ngrok tunnel service is not available. Please start the tunnel service first.\",\n );\n }\n\n // Analyze the request using LLM\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n\n if (intent.intent !== \"create_webhook\") {\n await callback({\n text: \"I understand you want to work with webhooks, but I'm not sure exactly what you want to create. Could you be more specific?\",\n thought: `Intent analysis: ${intent.reasoning}`,\n });\n return;\n }\n\n // Extract parameters with fallbacks from state\n let owner = intent.parameters?.owner;\n let repo = intent.parameters?.repo;\n\n if (!owner || !repo) {\n // Try to get from current state\n if (state.github?.lastRepository) {\n owner = owner || state.data?.github?.lastRepository?.owner?.login;\n repo = repo || state.data?.github?.lastRepository?.name;\n } else {\n // Use LLM to ask for clarification\n const clarificationPrompt = `The user wants to create a webhook but didn't specify the repository clearly. \n \nMessage: \"${message.content.text}\"\n\nPlease extract or ask for the missing information. If you can reasonably infer the repository, provide it. If not, ask for clarification.\n\nFormat as JSON:\n{\n \"needsClarification\": true/false,\n \"clarificationMessage\": \"What repository would you like...\",\n \"inferredOwner\": \"possible_owner\",\n \"inferredRepo\": \"possible_repo\"\n}`;\n\n const clarificationResponse = await runtime.useModel(\n ModelType.TEXT_LARGE,\n {\n prompt: clarificationPrompt,\n temperature: 0.3,\n max_tokens: 200,\n },\n );\n\n const clarification = JSON.parse(clarificationResponse);\n\n if (clarification.needsClarification) {\n await callback({\n text: clarification.clarificationMessage,\n thought: \"Need repository clarification for webhook creation\",\n });\n return;\n }\n\n owner = clarification.inferredOwner;\n repo = clarification.inferredRepo;\n }\n }\n\n if (!owner || !repo) {\n await callback({\n text: \"I need to know which repository you want to create a webhook for. Please specify the owner and repository name.\",\n thought: \"Missing repository information\",\n });\n return;\n }\n\n // Get tunnel URL\n const tunnelUrl = await tunnelService.getUrl();\n const webhookUrl = `${tunnelUrl}/api/github/webhook`;\n\n // Get webhook secret\n const webhookSecret = runtime.getSetting(\"GITHUB_WEBHOOK_SECRET\");\n if (!webhookSecret) {\n logger.warn(\n \"No webhook secret configured - webhook will be created without signature verification\",\n );\n }\n\n // Default events or use specified events\n const events = intent.parameters?.events || [\n \"issues\",\n \"issue_comment\",\n \"pull_request\",\n \"pull_request_review\",\n \"push\",\n ];\n\n // Create the webhook\n const webhook = await githubService.createWebhook(\n owner,\n repo,\n {\n url: webhookUrl,\n content_type: \"json\",\n secret: webhookSecret,\n },\n events,\n );\n\n // Test the webhook\n await githubService.pingWebhook(owner!, repo!, webhook.id);\n\n await callback({\n text: `✅ Successfully created webhook for ${owner}/${repo}!\n\n**Webhook Details:**\n- ID: ${webhook.id}\n- URL: ${webhookUrl}\n- Events: ${events.join(\", \")}\n- Secret: ${webhookSecret ? \"Configured ✅\" : \"Not configured ⚠️\"}\n\nThe webhook has been tested with a ping and is ready to receive events.`,\n thought: `Created webhook ${webhook.id} for ${owner}/${repo}`,\n actions: [\"CREATE_GITHUB_WEBHOOK\"],\n });\n\n // Update state\n if (!state.data?.github) {\n if (!state.data) {\n state!.data = {};\n }\n state!.data.github = {};\n }\n state!.data.github.lastWebhook = {\n id: webhook.id,\n owner,\n repo,\n url: webhookUrl,\n events,\n };\n } catch (error) {\n logger.error(\"Failed to create GitHub webhook:\", error);\n await callback({\n text: `❌ Failed to create webhook: ${error instanceof Error ? error.message : String(error)}\n\nCommon issues:\n- Make sure you have admin access to the repository\n- Verify your GitHub token has webhook permissions\n- Check that the Ngrok tunnel is active`,\n thought: \"Error creating webhook\",\n });\n }\n },\n};\n\nexport const listWebhooksAction: Action = {\n name: \"LIST_GITHUB_WEBHOOKS\",\n similes: [\"SHOW_WEBHOOKS\", \"GET_WEBHOOKS\", \"VIEW_WEBHOOKS\"],\n description: \"List all webhooks configured for a GitHub repository\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"List webhooks for owner/repo\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll show you all the webhooks configured for that repository.\",\n actions: [\"LIST_GITHUB_WEBHOOKS\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n return intent.intent === \"list_webhooks\" && intent.confidence > 0.7;\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options: any = {},\n callback: HandlerCallback = async () => [],\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n\n let owner = intent.parameters?.owner;\n let repo = intent.parameters?.repo;\n\n // Try to get from state if not specified\n if (!owner || !repo) {\n if (state.github?.lastRepository) {\n owner = owner || state.data?.github?.lastRepository?.owner?.login;\n repo = repo || state.data?.github?.lastRepository?.name;\n } else {\n await callback({\n text: \"I need to know which repository you want to list webhooks for. Please specify the owner and repository name.\",\n thought: \"Missing repository information\",\n });\n return;\n }\n }\n\n const webhooks = await githubService.listWebhooks(owner!, repo!);\n\n if (webhooks.length === 0) {\n await callback({\n text: `No webhooks found for ${owner}/${repo}.`,\n thought: `No webhooks in ${owner}/${repo}`,\n });\n return;\n }\n\n let responseText = `**Webhooks for ${owner}/${repo}:**\\n\\n`;\n\n webhooks.forEach((webhook, index) => {\n responseText += `**${index + 1}. Webhook #${webhook.id}**\\n`;\n responseText += `- URL: ${webhook.config.url}\\n`;\n responseText += `- Events: ${webhook.events.join(\", \")}\\n`;\n responseText += `- Active: ${webhook.active ? \"✅\" : \"❌\"}\\n`;\n responseText += `- Last Response: ${webhook.last_response?.code || \"N/A\"}\\n`;\n responseText += `- Created: ${new Date(webhook.created_at).toLocaleDateString()}\\n\\n`;\n });\n\n await callback({\n text: responseText,\n thought: `Listed ${webhooks.length} webhooks for ${owner}/${repo}`,\n actions: [\"LIST_GITHUB_WEBHOOKS\"],\n });\n\n // Update state\n if (!state.data?.github) {\n if (!state.data) {\n state!.data = {};\n }\n state!.data.github = {};\n }\n state!.data.github.lastWebhooks = webhooks;\n } catch (error) {\n logger.error(\"Failed to list GitHub webhooks:\", error);\n await callback({\n text: `❌ Failed to list webhooks: ${error instanceof Error ? error.message : String(error)}`,\n thought: \"Error listing webhooks\",\n });\n }\n },\n};\n\nexport const deleteWebhookAction: Action = {\n name: \"DELETE_GITHUB_WEBHOOK\",\n similes: [\"REMOVE_WEBHOOK\", \"DESTROY_WEBHOOK\"],\n description: \"Delete a specific GitHub webhook from a repository\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Delete webhook 12345 from owner/repo\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll delete that webhook from the repository.\",\n actions: [\"DELETE_GITHUB_WEBHOOK\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n return intent.intent === \"delete_webhook\" && intent.confidence > 0.7;\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options: any = {},\n callback: HandlerCallback = async () => [],\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n\n let owner = intent.parameters?.owner;\n let repo = intent.parameters?.repo;\n const webhookId = intent.parameters?.webhookId;\n\n if (!webhookId) {\n await callback({\n text: 'I need the webhook ID to delete. Please specify which webhook you want to delete (e.g., \"delete webhook 12345\").',\n thought: \"Missing webhook ID\",\n });\n return;\n }\n\n // Try to get repository from state if not specified\n if (!owner || !repo) {\n if (state.github?.lastRepository) {\n owner = owner || state.data?.github?.lastRepository?.owner?.login;\n repo = repo || state.data?.github?.lastRepository?.name;\n } else {\n await callback({\n text: \"I need to know which repository the webhook belongs to. Please specify the owner and repository name.\",\n thought: \"Missing repository information\",\n });\n return;\n }\n }\n\n // Verify webhook exists first\n const webhooks = await githubService.listWebhooks(owner!, repo!);\n const webhook = webhooks.find((w) => w.id === webhookId);\n\n if (!webhook) {\n await callback({\n text: `❌ Webhook #${webhookId} not found in ${owner}/${repo}. \n\nAvailable webhooks: ${webhooks.map((w) => `#${w.id}`).join(\", \") || \"None\"}`,\n thought: `Webhook ${webhookId} not found`,\n });\n return;\n }\n\n // Delete the webhook\n await githubService.deleteWebhook(owner!, repo!, webhookId);\n\n await callback({\n text: `✅ Successfully deleted webhook #${webhookId} from ${owner}/${repo}.\n\n**Deleted webhook details:**\n- URL: ${webhook.config.url}\n- Events: ${webhook.events.join(\", \")}`,\n thought: `Deleted webhook ${webhookId} from ${owner}/${repo}`,\n actions: [\"DELETE_GITHUB_WEBHOOK\"],\n });\n } catch (error) {\n logger.error(\"Failed to delete GitHub webhook:\", error);\n await callback({\n text: `❌ Failed to delete webhook: ${error instanceof Error ? error.message : String(error)}`,\n thought: \"Error deleting webhook\",\n });\n }\n },\n};\n\nexport const pingWebhookAction: Action = {\n name: \"PING_GITHUB_WEBHOOK\",\n similes: [\"TEST_WEBHOOK\", \"CHECK_WEBHOOK\"],\n description: \"Send a ping to test a GitHub webhook\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Ping webhook 12345 on owner/repo\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll send a test ping to that webhook.\",\n actions: [\"PING_GITHUB_WEBHOOK\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n return intent.intent === \"ping_webhook\" && intent.confidence > 0.7;\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options: any = {},\n callback: HandlerCallback = async () => [],\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n const intent = await analyzeWebhookIntent(\n runtime,\n message,\n state || { values: {}, data: {}, text: \"\" },\n );\n\n let owner = intent.parameters?.owner;\n let repo = intent.parameters?.repo;\n const webhookId = intent.parameters?.webhookId;\n\n if (!webhookId) {\n await callback({\n text: 'I need the webhook ID to ping. Please specify which webhook you want to test (e.g., \"ping webhook 12345\").',\n thought: \"Missing webhook ID\",\n });\n return;\n }\n\n // Try to get repository from state if not specified\n if (!owner || !repo) {\n if (state.github?.lastRepository) {\n owner = owner || state.data?.github?.lastRepository?.owner?.login;\n repo = repo || state.data?.github?.lastRepository?.name;\n } else {\n await callback({\n text: \"I need to know which repository the webhook belongs to. Please specify the owner and repository name.\",\n thought: \"Missing repository information\",\n });\n return;\n }\n }\n\n // Ping the webhook\n const result = await githubService.pingWebhook(owner!, repo!, webhookId);\n\n await callback({\n text: `✅ Successfully sent ping to webhook #${webhookId} on ${owner}/${repo}.\n\nThe webhook should receive a test payload. Check your webhook endpoint logs or GitHub's webhook delivery logs to verify it was received.`,\n thought: `Pinged webhook ${webhookId} on ${owner}/${repo}`,\n actions: [\"PING_GITHUB_WEBHOOK\"],\n });\n } catch (error) {\n logger.error(\"Failed to ping GitHub webhook:\", error);\n await callback({\n text: `❌ Failed to ping webhook: ${error instanceof Error ? error.message : String(error)}\n\nCommon issues:\n- Webhook ID doesn't exist\n- Network connectivity problems\n- GitHub API rate limits`,\n thought: \"Error pinging webhook\",\n });\n }\n },\n};\n","import {\n type Action,\n type IAgentRuntime,\n type Memory,\n type State,\n type HandlerCallback,\n logger,\n ModelType,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\nimport { z } from \"zod\";\n\n// Structured schemas for LLM responses\nconst IssueAnalysisSchema = z.object({\n canAutomate: z.boolean(),\n complexity: z.enum([\"simple\", \"medium\", \"complex\"]),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n issueType: z.enum([\"bug\", \"feature\", \"documentation\", \"refactor\", \"other\"]),\n summary: z.string(),\n requiredFiles: z.array(z.string()),\n estimatedChanges: z.number().min(0),\n riskLevel: z.enum([\"low\", \"medium\", \"high\"]),\n dependencies: z.array(z.string()).optional(),\n});\n\nconst CodeChangeSchema = z.object({\n file: z.string(),\n action: z.enum([\"create\", \"update\", \"delete\"]),\n content: z.string().optional(),\n reasoning: z.string(),\n lineNumbers: z\n .object({\n start: z.number().optional(),\n end: z.number().optional(),\n })\n .optional(),\n});\n\nconst CodeGenerationSchema = z.object({\n canGenerate: z.boolean(),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n changes: z.array(CodeChangeSchema),\n testingNeeded: z.boolean(),\n deploymentNotes: z.string().optional(),\n});\n\ntype IssueAnalysis = z.infer<typeof IssueAnalysisSchema>;\ntype CodeGeneration = z.infer<typeof CodeGenerationSchema>;\n\n// Use LLM to validate if this should be an auto-coding action\nasync function shouldAutoCode(\n runtime: IAgentRuntime,\n issue: any,\n repository: any,\n): Promise<boolean> {\n const prompt = `Analyze this GitHub issue to determine if it's suitable for automated coding:\n\nRepository: ${repository.full_name}\nIssue #${issue.number}: ${issue.title}\nBody: ${issue.body || \"No description provided\"}\nLabels: ${issue.labels.map((l: any) => l.name).join(\", \") || \"None\"}\nAuthor: ${issue.user.login}\n\nConsider:\n1. Is this a request that can be automated?\n2. Does it involve code changes?\n3. Is the scope clear and limited?\n4. Would automation be safe and helpful?\n\nRespond with JSON:\n{\n \"shouldAutoCode\": true/false,\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"explanation of decision\"\n}`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n temperature: 0.2,\n max_tokens: 300,\n });\n\n const result = JSON.parse(response);\n return result.shouldAutoCode && result.confidence > 0.7;\n } catch (_error) {\n logger.warn(\"Failed to evaluate auto-coding suitability:\", _error);\n return false;\n }\n}\n\nexport const autoCodeIssueAction: Action = {\n name: \"AUTO_CODE_ISSUE\",\n similes: [\"FIX_ISSUE\", \"SOLVE_ISSUE\", \"AUTO_FIX_ISSUE\"],\n description:\n \"Intelligently analyze a GitHub issue and create a pull request with a real code fix\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"@agent please fix this issue\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll analyze this issue using AI and create a pull request with a real fix.\",\n actions: [\"AUTO_CODE_ISSUE\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n return false;\n }\n\n // If this is from a webhook event, validate the issue is suitable for auto-coding\n const { issue, repository } = state?.data || {};\n if (issue && repository) {\n return await shouldAutoCode(runtime, issue, repository);\n }\n\n // For manual triggers, just check service availability\n return true;\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options?: any,\n callback?: HandlerCallback,\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n const { issue, repository, action: eventAction } = options || {};\n\n if (!issue || !repository) {\n await callback?.({\n text: \"This action requires issue and repository information from a GitHub webhook event.\",\n thought: \"Missing required webhook data\",\n });\n return;\n }\n\n logger.info(\n `Intelligent auto-coding for issue #${issue.number} in ${repository.full_name}`,\n );\n\n // Check if already handled\n if (issue.assignee && issue.assignee.login !== runtime.character.name) {\n await callback?.({\n text: `Issue #${issue.number} is already assigned to ${issue.assignee.login}. I won't interfere.`,\n thought: \"Issue already assigned to someone else\",\n });\n return;\n }\n\n // Step 1: Deep analysis of the issue using structured LLM output\n const analysisPrompt = `Analyze this GitHub issue comprehensively:\n\nRepository: ${repository.full_name}\nLanguage: ${repository.language || \"Unknown\"}\nDescription: ${repository.description || \"No description\"}\n\nIssue #${issue.number}: ${issue.title}\nBody: ${issue.body || \"No description provided\"}\nLabels: ${issue.labels.map((l: any) => l.name).join(\", \") || \"None\"}\nAuthor: ${issue.user.login}\n\nProvide a detailed analysis as JSON:\n{\n \"canAutomate\": boolean,\n \"complexity\": \"simple\" | \"medium\" | \"complex\",\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"detailed explanation\",\n \"issueType\": \"bug\" | \"feature\" | \"documentation\" | \"refactor\" | \"other\",\n \"summary\": \"what needs to be done\",\n \"requiredFiles\": [\"file1.js\", \"file2.py\"],\n \"estimatedChanges\": 5,\n \"riskLevel\": \"low\" | \"medium\" | \"high\",\n \"dependencies\": [\"optional array of dependencies\"]\n}`;\n\n const analysisResponse = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: analysisPrompt,\n temperature: 0.2,\n max_tokens: 1000,\n });\n\n let analysis: IssueAnalysis;\n try {\n analysis = IssueAnalysisSchema.parse(JSON.parse(analysisResponse));\n } catch (error) {\n logger.error(\"Failed to parse issue analysis:\", error);\n await callback?.({\n text: `I analyzed issue #${issue.number} but the analysis was inconclusive. This likely indicates the issue is too complex or ambiguous for automated fixing.`,\n thought: \"Failed to parse structured analysis\",\n });\n return;\n }\n\n // Intelligent decision making based on analysis\n if (\n !analysis.canAutomate ||\n analysis.confidence < 0.6 ||\n analysis.riskLevel === \"high\"\n ) {\n await callback?.({\n text: `Issue #${issue.number} analysis complete:\n\n**Complexity**: ${analysis.complexity}\n**Risk Level**: ${analysis.riskLevel}\n**Confidence**: ${Math.round(analysis.confidence * 100)}%\n\n**Reasoning**: ${analysis.reasoning}\n\nThis issue requires human intervention due to its complexity or risk level. I recommend reviewing the requirements and breaking it down into smaller, more specific tasks.`,\n thought: `Issue too complex/risky for automation: ${analysis.reasoning}`,\n });\n return;\n }\n\n // Step 2: Get repository structure for intelligent file analysis\n const repoStructure = await analyzeRepositoryStructure(\n githubService,\n repository,\n );\n\n // Step 3: Generate code changes using AI with repository context\n const codeGenPrompt = `Generate specific code changes for this issue:\n\nRepository: ${repository.full_name}\nIssue: ${issue.title}\nType: ${analysis.issueType}\nFiles to modify: ${analysis.requiredFiles.join(\", \")}\n\nRepository structure context:\n${repoStructure}\n\nIssue details:\n${issue.body || \"No description provided\"}\n\nGenerate actual code changes as JSON:\n{\n \"canGenerate\": boolean,\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"explanation\",\n \"changes\": [\n {\n \"file\": \"path/to/file.js\",\n \"action\": \"create\" | \"update\" | \"delete\",\n \"content\": \"actual file content or changes\",\n \"reasoning\": \"why this change is needed\",\n \"lineNumbers\": {\"start\": 10, \"end\": 20}\n }\n ],\n \"testingNeeded\": boolean,\n \"deploymentNotes\": \"any deployment considerations\"\n}`;\n\n const codeResponse = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: codeGenPrompt,\n temperature: 0.1,\n max_tokens: 3000,\n });\n\n let codeGeneration: CodeGeneration;\n try {\n codeGeneration = CodeGenerationSchema.parse(JSON.parse(codeResponse));\n } catch (error) {\n logger.error(\"Failed to parse code generation:\", error);\n await callback?.({\n text: `I understand what needs to be done for issue #${issue.number}, but I couldn't generate the specific code changes reliably. This suggests the changes are too complex for automated implementation.`,\n thought: \"Failed to generate code changes\",\n });\n return;\n }\n\n if (!codeGeneration.canGenerate || codeGeneration.confidence < 0.7) {\n await callback?.({\n text: `While I can analyze issue #${issue.number}, I'm not confident enough (${Math.round(codeGeneration.confidence * 100)}%) to generate the code changes automatically.\n\n**Reasoning**: ${codeGeneration.reasoning}\n\nI recommend having a human developer review this issue.`,\n thought: `Low confidence in code generation: ${codeGeneration.reasoning}`,\n });\n return;\n }\n\n // Step 4: Create branch and implement changes\n const defaultBranch = await githubService.getDefaultBranch(\n repository.owner.login,\n repository.name,\n );\n const branchName = `auto-fix/issue-${issue.number}`;\n\n const defaultBranchRef = await githubService.getRef(\n repository.owner.login,\n repository.name,\n `heads/${defaultBranch}`,\n );\n\n await githubService.createBranch(\n repository.owner.login,\n repository.name,\n branchName,\n defaultBranchRef.object.sha,\n );\n\n logger.info(`Created branch ${branchName} for issue #${issue.number}`);\n\n // Step 5: Apply intelligent code changes\n const changedFiles: string[] = [];\n\n for (const change of codeGeneration.changes) {\n try {\n if (change.action === \"create\") {\n await githubService.createOrUpdateFile(\n repository.owner.login,\n repository.name,\n change.file,\n change.content || \"\",\n `Auto-fix: Create ${change.file} for issue #${issue.number}`,\n branchName,\n );\n } else if (change.action === \"update\") {\n // Get existing file content for intelligent updates\n let existingContent = \"\";\n let fileSha: string | undefined;\n\n try {\n const fileData = await githubService.getFileContent(\n repository.owner.login,\n repository.name,\n change.file,\n defaultBranch,\n );\n existingContent = fileData.content;\n fileSha = fileData.sha;\n } catch (error) {\n logger.warn(\n `File ${change.file} not found, will create new file`,\n );\n }\n\n // Apply intelligent content update\n const updatedContent = change.content || existingContent;\n\n await githubService.createOrUpdateFile(\n repository.owner.login,\n repository.name,\n change.file,\n updatedContent,\n `Auto-fix: Update ${change.file} for issue #${issue.number}`,\n branchName,\n fileSha,\n );\n } else if (change.action === \"delete\") {\n const fileData = await githubService.getFileContent(\n repository.owner.login,\n repository.name,\n change.file,\n defaultBranch,\n );\n\n await githubService.deleteFile(\n repository.owner.login,\n repository.name,\n change.file,\n `Auto-fix: Delete ${change.file} for issue #${issue.number}`,\n fileData.sha,\n branchName,\n );\n }\n\n changedFiles.push(change.file);\n logger.info(\n `${change.action} ${change.file} in branch ${branchName}`,\n );\n } catch (error) {\n logger.error(\n `Failed to ${change.action} file ${change.file}:`,\n error,\n );\n // Continue with other changes\n }\n }\n\n if (changedFiles.length === 0) {\n await callback?.({\n text: `I analyzed issue #${issue.number} and generated a solution, but encountered errors applying the changes to the repository. This may be due to file permissions or repository structure changes.`,\n thought: \"No files were successfully changed\",\n });\n return;\n }\n\n // Step 6: Create intelligent pull request\n const prBody = `## 🤖 Automated Fix for Issue #${issue.number}\n\n**Analysis Summary**: ${analysis.summary}\n\n**Issue Type**: ${analysis.issueType}\n**Complexity**: ${analysis.complexity}\n**Risk Level**: ${analysis.riskLevel}\n**AI Confidence**: ${Math.round(codeGeneration.confidence * 100)}%\n\n### 🔧 Changes Made\n\n${codeGeneration.changes\n .map(\n (change) =>\n `- **${change.action.toUpperCase()}** \\`${change.file}\\`: ${change.reasoning}`,\n )\n .join(\"\\n\")}\n\n### 🧪 Testing ${codeGeneration.testingNeeded ? \"Required\" : \"Recommended\"}\n\n${\n codeGeneration.testingNeeded\n ? \"⚠️ **Testing is required** before merging these changes.\"\n : \"✅ Changes are low-risk but testing is still recommended.\"\n}\n\n${\n codeGeneration.deploymentNotes\n ? `### 📋 Deployment Notes\\n${codeGeneration.deploymentNotes}`\n : \"\"\n}\n\n### 🔍 Review Checklist\n\n- [ ] Code changes implement the requested functionality\n- [ ] No unintended side effects introduced\n- [ ] Documentation updated if necessary\n- [ ] Tests pass (if applicable)\n\n---\n*This PR was automatically generated using AI analysis. Generated with confidence level: ${Math.round(codeGeneration.confidence * 100)}%*\n\nFixes #${issue.number}`;\n\n const pr = await githubService.createPullRequest(\n repository.owner.login,\n repository.name,\n {\n title: `🤖 Auto-fix: ${issue.title}`,\n body: prBody,\n head: branchName,\n base: defaultBranch,\n },\n );\n\n logger.info(\n `Created intelligent PR #${pr.number} for issue #${issue.number}`,\n );\n\n // Step 7: Comment on the issue with analysis\n await githubService.createIssueComment(\n repository.owner.login,\n repository.name,\n issue.number,\n `🤖 **Automated Analysis Complete**\n\nI've analyzed this issue and created an automated fix: **PR #${pr.number}**\n\n**Analysis Results:**\n- **Type**: ${analysis.issueType}\n- **Complexity**: ${analysis.complexity}\n- **Risk Level**: ${analysis.riskLevel}\n- **AI Confidence**: ${Math.round(codeGeneration.confidence * 100)}%\n\n**Files Modified**: ${changedFiles.join(\", \")}\n\n${\n codeGeneration.testingNeeded\n ? \"⚠️ **Testing is required** before merging.\"\n : \"✅ Changes appear safe but review is recommended.\"\n}\n\nPlease review the PR and let me know if adjustments are needed!`,\n );\n\n await callback?.({\n text: `🤖 **Automated fix created for issue #${issue.number}**\n\n**Analysis**: ${analysis.issueType} (${analysis.complexity} complexity)\n**Solution**: PR #${pr.number} with ${changedFiles.length} file changes\n**Confidence**: ${Math.round(codeGeneration.confidence * 100)}%\n\nThe solution has been implemented based on AI analysis of the repository structure and issue requirements.`,\n thought: `Created intelligent automated fix with ${changedFiles.length} changes`,\n actions: [\"AUTO_CODE_ISSUE\"],\n });\n } catch (error) {\n logger.error(\"Failed to auto-code issue:\", error);\n await callback?.({\n text: `❌ Failed to create automated fix: ${error instanceof Error ? error.message : String(error)}\n\nThis could be due to:\n- Repository access permissions\n- Complex code requirements\n- API rate limits\n- File structure changes`,\n thought: \"Error in intelligent auto-coding process\",\n });\n }\n },\n};\n\n// Helper function for repository analysis\nasync function analyzeRepositoryStructure(\n githubService: GitHubService,\n repository: any,\n): Promise<string> {\n try {\n // Get repository tree structure\n const tree = await githubService.getRepositoryTree(\n repository.owner.login,\n repository.name,\n );\n\n // Analyze key files and structure\n const keyFiles = tree\n .filter(\n (item: any) =>\n item.type === \"blob\" &&\n (item.path.endsWith(\".js\") ||\n item.path.endsWith(\".ts\") ||\n item.path.endsWith(\".py\") ||\n item.path.endsWith(\".java\") ||\n item.path.endsWith(\".md\") ||\n item.path === \"package.json\" ||\n item.path === \"requirements.txt\" ||\n item.path === \"pom.xml\"),\n )\n .slice(0, 20); // Limit to first 20 files\n\n return `Key files found:\n${keyFiles.map((f: any) => `- ${f.path}`).join(\"\\n\")}\n\nTotal files: ${tree.length}\nPrimary language: ${repository.language || \"Unknown\"}`;\n } catch (error) {\n logger.warn(\"Could not analyze repository structure:\", error);\n return `Repository: ${repository.full_name}\nLanguage: ${repository.language || \"Unknown\"}\nStructure analysis unavailable`;\n }\n}\n\n// Schema for mention analysis\nconst MentionAnalysisSchema = z.object({\n requestType: z.enum([\n \"code_fix\",\n \"question\",\n \"review\",\n \"clarification\",\n \"other\",\n ]),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n shouldAutoCode: z.boolean(),\n suggestedResponse: z.string(),\n urgency: z.enum([\"low\", \"medium\", \"high\"]),\n requiresHuman: z.boolean(),\n});\n\ntype MentionAnalysis = z.infer<typeof MentionAnalysisSchema>;\n\n// Intelligent mention analysis using LLM\nasync function analyzeMention(\n runtime: IAgentRuntime,\n mentionText: string,\n issue: any,\n repository: any,\n isComment: boolean,\n): Promise<MentionAnalysis> {\n const prompt = `Analyze this GitHub mention to understand what the user wants:\n\nRepository: ${repository.full_name}\nContext: ${isComment ? \"Comment on existing issue\" : \"New issue\"}\nIssue: #${issue.number} - ${issue.title}\nMention text: \"${mentionText}\"\n\nUser profile: ${issue.user?.login || \"unknown\"}\nIssue labels: ${issue.labels?.map((l: any) => l.name).join(\", \") || \"none\"}\n\nAnalyze what they're asking for and how I should respond:\n\n{\n \"requestType\": \"code_fix\" | \"question\" | \"review\" | \"clarification\" | \"other\",\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"detailed explanation of what they want\",\n \"shouldAutoCode\": boolean,\n \"suggestedResponse\": \"my response message\",\n \"urgency\": \"low\" | \"medium\" | \"high\",\n \"requiresHuman\": boolean\n}`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n temperature: 0.3,\n max_tokens: 800,\n });\n\n return MentionAnalysisSchema.parse(JSON.parse(response));\n } catch (error) {\n logger.warn(\"Failed to analyze mention:\", error);\n return {\n requestType: \"other\",\n confidence: 0.1,\n reasoning: \"Failed to parse mention intent\",\n shouldAutoCode: false,\n suggestedResponse:\n \"I see you've mentioned me! Could you please clarify what you'd like me to help with?\",\n urgency: \"low\",\n requiresHuman: false,\n };\n }\n}\n\nexport const respondToMentionAction: Action = {\n name: \"RESPOND_TO_GITHUB_MENTION\",\n similes: [\"HANDLE_GITHUB_MENTION\", \"REPLY_TO_MENTION\"],\n description:\n \"Intelligently respond when the agent is mentioned in a GitHub issue or comment\",\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"@agent can you help fix this bug?\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll analyze this issue and see if I can provide an automated fix.\",\n actions: [\"RESPOND_TO_GITHUB_MENTION\"],\n },\n },\n ],\n ],\n\n async validate(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ): Promise<boolean> {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n return false;\n }\n\n // Validate this is actually a mention of the agent\n const { issue, comment, repository } = state?.data || {};\n if (!issue || !repository) {\n return false;\n }\n\n const mentionText = comment?.body || issue?.body || \"\";\n const agentName = runtime.character.name;\n\n // Use more sophisticated mention detection\n const mentionPatterns = [\n new RegExp(`@${agentName}\\\\b`, \"i\"),\n new RegExp(`@${agentName.toLowerCase()}\\\\b`, \"i\"),\n new RegExp(`${agentName}\\\\b.*help`, \"i\"),\n new RegExp(`${agentName}\\\\b.*fix`, \"i\"),\n ];\n\n return mentionPatterns.some((pattern) => pattern.test(mentionText));\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State = { values: {}, data: {}, text: \"\" },\n options?: any,\n callback?: HandlerCallback,\n ): Promise<void> {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n if (!githubService) {\n throw new Error(\"GitHub service is not available\");\n }\n\n const { issue, comment, repository, action: eventAction } = options || {};\n\n if (!repository || !issue) {\n throw new Error(\"Repository and issue information is required\");\n }\n\n logger.info(\n `Intelligent mention response in ${repository.full_name}#${issue.number}`,\n );\n\n const isIssueComment = !!comment;\n const mentionText = isIssueComment ? comment.body : issue.body;\n\n // Use AI to analyze the mention\n const analysis = await analyzeMention(\n runtime,\n mentionText,\n issue,\n repository,\n isIssueComment,\n );\n\n // Generate intelligent response based on analysis\n let responseText = analysis.suggestedResponse;\n\n // Add context based on analysis\n if (analysis.confidence < 0.5) {\n responseText += `\\n\\n*Note: I'm ${Math.round(analysis.confidence * 100)}% confident in understanding your request. Please feel free to clarify if needed.*`;\n }\n\n if (analysis.urgency === \"high\") {\n responseText = `🚨 **High Priority Request Detected**\\n\\n${responseText}`;\n }\n\n if (analysis.requiresHuman) {\n responseText += `\\n\\n⚠️ **Human Review Recommended**: ${analysis.reasoning}`;\n }\n\n // Post intelligent response\n await githubService.createIssueComment(\n repository.owner.login,\n repository.name,\n issue.number,\n responseText,\n );\n\n // Decide whether to trigger auto-coding based on analysis\n if (\n analysis.shouldAutoCode &&\n analysis.confidence > 0.6 &&\n analysis.requestType === \"code_fix\" &&\n !analysis.requiresHuman\n ) {\n logger.info(\n `Triggering auto-code for mention with confidence ${analysis.confidence}`,\n );\n\n // Use the action system to trigger auto-coding\n try {\n // Find and execute the auto-code action\n const autoCodeAction = runtime.actions.find(\n (a) => a.name === \"AUTO_CODE_ISSUE\",\n );\n if (autoCodeAction) {\n await autoCodeAction.handler(\n runtime,\n message,\n state,\n {\n issue,\n repository,\n action: eventAction,\n },\n callback,\n );\n }\n } catch (error) {\n logger.error(\"Failed to trigger auto-coding:\", error);\n\n // Post a follow-up comment about the auto-coding failure\n await githubService.createIssueComment(\n repository.owner.login,\n repository.name,\n issue.number,\n \"I attempted to create an automated fix but encountered an issue. A human developer should review this request.\",\n );\n }\n }\n\n await callback?.({\n text: `🤖 **Intelligent mention response generated**\n\n**Analysis**: ${analysis.requestType} (confidence: ${Math.round(analysis.confidence * 100)}%)\n**Auto-coding**: ${analysis.shouldAutoCode ? \"Triggered\" : \"Not suitable\"}\n**Urgency**: ${analysis.urgency}\n\n**Reasoning**: ${analysis.reasoning}`,\n thought: `Intelligent mention handling: ${analysis.requestType} with ${Math.round(analysis.confidence * 100)}% confidence`,\n actions: [\"RESPOND_TO_GITHUB_MENTION\"],\n });\n } catch (error) {\n logger.error(\"Failed to handle GitHub mention intelligently:\", error);\n\n // Fallback to simple response\n try {\n const { issue, repository } = options || {};\n if (issue && repository) {\n const githubService = runtime.getService<GitHubService>(\"github\");\n await githubService?.createIssueComment(\n repository.owner.login,\n repository.name,\n issue.number,\n \"I see you've mentioned me, but I encountered an error processing your request. Please try again or contact a human developer.\",\n );\n }\n } catch (fallbackError) {\n logger.error(\"Fallback response also failed:\", fallbackError);\n }\n\n await callback?.({\n text: `❌ Failed to handle mention intelligently: ${error instanceof Error ? error.message : String(error)}`,\n thought: \"Error in intelligent mention handling\",\n });\n }\n },\n};\n","import {\n type IAgentRuntime,\n type Memory,\n type Provider,\n type ProviderResult,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { GitHubService } from \"../services/github\";\nimport { GitHubRepository, GitHubIssue, GitHubPullRequest } from \"../types\";\n\n// GitHub Repository Context Provider\nexport const githubRepositoryProvider: Provider = {\n name: \"GITHUB_REPOSITORY_CONTEXT\",\n description: \"Provides context about GitHub repositories from current state\",\n\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<ProviderResult> => {\n try {\n const githubState = state?.github;\n\n if (!githubState) {\n return {\n text: \"GitHub Repository context is available. I can help you search for repositories, get repository details, and manage repository-related tasks.\",\n values: {},\n data: {},\n };\n }\n\n let contextText = \"\";\n const values: Record<string, any> = {};\n const data: Record<string, any> = {};\n\n // Current repository context\n if (githubState.lastRepository) {\n const repo = githubState.lastRepository;\n contextText += `Current Repository: ${repo.full_name}\\n`;\n contextText += `Description: ${repo.description || \"No description\"}\\n`;\n contextText += `Language: ${repo.language || \"Unknown\"}\\n`;\n contextText += `Stars: ${repo.stargazers_count}\\n`;\n contextText += `Forks: ${repo.forks_count}\\n`;\n contextText += `Open Issues: ${repo.open_issues_count}\\n`;\n contextText += `Private: ${repo.private ? \"Yes\" : \"No\"}\\n`;\n\n values.currentRepository = repo.full_name;\n values.repositoryOwner = repo.owner.login;\n values.repositoryName = repo.name;\n values.repositoryLanguage = repo.language;\n values.repositoryStars = repo.stargazers_count;\n values.repositoryForks = repo.forks_count;\n values.repositoryOpenIssues = repo.open_issues_count;\n values.repositoryPrivate = repo.private;\n\n data.lastRepository = repo;\n }\n\n // Recently accessed repositories\n if (\n githubState.repositories &&\n Object.keys(githubState.repositories).length > 0\n ) {\n const recentRepos = (\n Object.values(githubState.repositories) as GitHubRepository[]\n )\n .sort(\n (a, b) =>\n new Date(b.updated_at).getTime() -\n new Date(a.updated_at).getTime(),\n )\n .slice(0, 5);\n\n contextText += \"\\nRecent Repositories:\\n\";\n recentRepos.forEach((repo) => {\n contextText += `- ${repo.full_name} (${repo.language || \"Unknown\"})\\n`;\n });\n\n values.recentRepositories = recentRepos.map((r) => r.full_name);\n data.repositories = githubState.repositories;\n }\n\n // Last created repository\n if (githubState.lastCreatedRepository) {\n const repo = githubState.lastCreatedRepository;\n contextText += `\\nLast Created Repository: ${repo.full_name}\\n`;\n contextText += `Created: ${new Date(repo.created_at).toLocaleDateString()}\\n`;\n\n values.lastCreatedRepository = repo.full_name;\n data.lastCreatedRepository = repo;\n }\n\n // If we have no context yet, provide a helpful message\n if (!contextText) {\n contextText =\n \"GitHub Repository context is available. I can help you search for repositories, get repository details, and manage repository-related tasks.\";\n }\n\n return {\n text: contextText,\n values,\n data,\n };\n } catch (error) {\n logger.error(\"Error in GitHub repository provider:\", error);\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n },\n};\n\n// GitHub Issues Context Provider\nexport const githubIssuesProvider: Provider = {\n name: \"GITHUB_ISSUES_CONTEXT\",\n description: \"Provides context about GitHub issues from current state\",\n\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<ProviderResult> => {\n try {\n const githubState = state?.github;\n\n if (!githubState) {\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n\n let contextText = \"\";\n const values: Record<string, any> = {};\n const data: Record<string, any> = {};\n\n // Current issue context\n if (githubState.lastIssue) {\n const issue = githubState.lastIssue;\n contextText += `Current Issue: #${issue.number} - ${issue.title}\\n`;\n contextText += `State: ${issue.state}\\n`;\n contextText += `Author: @${issue.user.login}\\n`;\n contextText += `Created: ${new Date(issue.created_at).toLocaleDateString()}\\n`;\n contextText += `Comments: ${issue.comments}\\n`;\n\n if (issue.labels.length > 0) {\n contextText += `Labels: ${issue.labels.map((l: any) => l.name).join(\", \")}\\n`;\n }\n\n if (issue.assignees.length > 0) {\n contextText += `Assignees: ${issue.assignees.map((a: any) => `@${a.login}`).join(\", \")}\\n`;\n }\n\n values.currentIssue = issue.number;\n values.issueTitle = issue.title;\n values.issueState = issue.state;\n values.issueAuthor = issue.user.login;\n values.issueLabels = issue.labels.map((l: any) => l.name);\n values.issueAssignees = issue.assignees.map((a: any) => a.login);\n values.issueComments = issue.comments;\n\n data.lastIssue = issue;\n }\n\n // Recent issues\n if (githubState.issues && Object.keys(githubState.issues).length > 0) {\n const recentIssues = (\n Object.values(githubState.issues) as GitHubIssue[]\n )\n .sort(\n (a, b) =>\n new Date(b.updated_at).getTime() -\n new Date(a.updated_at).getTime(),\n )\n .slice(0, 5);\n\n contextText += \"\\nRecent Issues:\\n\";\n recentIssues.forEach((issue) => {\n const repoMatch = Object.keys(githubState.issues || {}).find(\n (key) => githubState.issues![key].id === issue.id,\n );\n const repoName = repoMatch?.split(\"#\")[0] || \"unknown\";\n contextText += `- ${repoName}#${issue.number}: ${issue.title} (${issue.state})\\n`;\n });\n\n values.recentIssues = recentIssues.map(\n (i) => `#${i.number}: ${i.title}`,\n );\n data.issues = githubState.issues;\n }\n\n // Last created issue\n if (githubState.lastCreatedIssue) {\n const issue = githubState.lastCreatedIssue;\n contextText += `\\nLast Created Issue: #${issue.number} - ${issue.title}\\n`;\n contextText += `Created: ${new Date(issue.created_at).toLocaleDateString()}\\n`;\n\n values.lastCreatedIssue = issue.number;\n values.lastCreatedIssueTitle = issue.title;\n data.lastCreatedIssue = issue;\n }\n\n // Issue search results\n if (githubState.lastIssueSearchResults) {\n const searchResults = githubState.lastIssueSearchResults;\n contextText += `\\nLast Issue Search: \"${githubState.lastIssueSearchQuery}\"\\n`;\n contextText += `Found: ${searchResults.total_count} issues\\n`;\n\n values.lastIssueSearchQuery = githubState.lastIssueSearchQuery;\n values.lastIssueSearchCount = searchResults.total_count;\n data.lastIssueSearchResults = searchResults;\n }\n\n return {\n text: contextText,\n values,\n data,\n };\n } catch (error) {\n logger.error(\"Error in GitHub issues provider:\", error);\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n },\n};\n\n// GitHub Pull Requests Context Provider\nexport const githubPullRequestsProvider: Provider = {\n name: \"GITHUB_PULL_REQUESTS_CONTEXT\",\n description: \"Provides context about GitHub pull requests from current state\",\n\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<ProviderResult> => {\n try {\n const githubState = state?.github;\n\n if (!githubState) {\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n\n let contextText = \"\";\n const values: Record<string, any> = {};\n const data: Record<string, any> = {};\n\n // Current pull request context\n if (githubState.lastPullRequest) {\n const pr = githubState.lastPullRequest;\n contextText += `Current Pull Request: #${pr.number} - ${pr.title}\\n`;\n contextText += `State: ${pr.state}${pr.merged ? \" (merged)\" : \"\"}\\n`;\n contextText += `Draft: ${pr.draft ? \"Yes\" : \"No\"}\\n`;\n contextText += `Author: @${pr.user.login}\\n`;\n contextText += `Created: ${new Date(pr.created_at).toLocaleDateString()}\\n`;\n contextText += `Head: ${pr.head.ref} → Base: ${pr.base.ref}\\n`;\n contextText += `Files Changed: ${pr.changed_files}\\n`;\n contextText += `Additions: +${pr.additions}, Deletions: -${pr.deletions}\\n`;\n\n if (pr.labels.length > 0) {\n contextText += `Labels: ${pr.labels.map((l: any) => l.name).join(\", \")}\\n`;\n }\n\n if (pr.assignees.length > 0) {\n contextText += `Assignees: ${pr.assignees.map((a: any) => `@${a.login}`).join(\", \")}\\n`;\n }\n\n values.currentPullRequest = pr.number;\n values.pullRequestTitle = pr.title;\n values.pullRequestState = pr.state;\n values.pullRequestDraft = pr.draft;\n values.pullRequestMerged = pr.merged;\n values.pullRequestAuthor = pr.user.login;\n values.pullRequestHead = pr.head.ref;\n values.pullRequestBase = pr.base.ref;\n values.pullRequestFilesChanged = pr.changed_files;\n values.pullRequestAdditions = pr.additions;\n values.pullRequestDeletions = pr.deletions;\n values.pullRequestLabels = pr.labels.map((l: any) => l.name);\n values.pullRequestAssignees = pr.assignees.map((a: any) => a.login);\n\n data.lastPullRequest = pr;\n }\n\n // Recent pull requests\n if (\n githubState.pullRequests &&\n Object.keys(githubState.pullRequests).length > 0\n ) {\n const recentPRs = (\n Object.values(githubState.pullRequests) as GitHubPullRequest[]\n )\n .sort(\n (a, b) =>\n new Date(b.updated_at).getTime() -\n new Date(a.updated_at).getTime(),\n )\n .slice(0, 5);\n\n contextText += \"\\nRecent Pull Requests:\\n\";\n recentPRs.forEach((pr) => {\n const repoMatch = Object.keys(githubState.pullRequests || {}).find(\n (key) => githubState.pullRequests![key].id === pr.id,\n );\n const repoName = repoMatch?.split(\"#\")[0] || \"unknown\";\n const status = pr.merged ? \"merged\" : pr.state;\n contextText += `- ${repoName}#${pr.number}: ${pr.title} (${status})\\n`;\n });\n\n values.recentPullRequests = recentPRs.map(\n (pr) => `#${pr.number}: ${pr.title}`,\n );\n data.pullRequests = githubState.pullRequests;\n }\n\n // Last created pull request\n if (githubState.lastCreatedPullRequest) {\n const pr = githubState.lastCreatedPullRequest;\n contextText += `\\nLast Created Pull Request: #${pr.number} - ${pr.title}\\n`;\n contextText += `Created: ${new Date(pr.created_at).toLocaleDateString()}\\n`;\n contextText += `Head: ${pr.head.ref} → Base: ${pr.base.ref}\\n`;\n\n values.lastCreatedPullRequest = pr.number;\n values.lastCreatedPullRequestTitle = pr.title;\n values.lastCreatedPullRequestHead = pr.head.ref;\n values.lastCreatedPullRequestBase = pr.base.ref;\n data.lastCreatedPullRequest = pr;\n }\n\n // Last merged pull request\n if (githubState.lastMergedPullRequest) {\n const merged = githubState.lastMergedPullRequest;\n contextText += `\\nLast Merged Pull Request: ${merged.owner}/${merged.repo}#${merged.pull_number}\\n`;\n contextText += `Commit SHA: ${merged.sha}\\n`;\n\n values.lastMergedPullRequest = `${merged.owner}/${merged.repo}#${merged.pull_number}`;\n values.lastMergedCommitSha = merged.sha;\n data.lastMergedPullRequest = merged;\n }\n\n return {\n text: contextText,\n values,\n data,\n };\n } catch (error) {\n logger.error(\"Error in GitHub pull requests provider:\", error);\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n },\n};\n\n// GitHub Activity Context Provider\nexport const githubActivityProvider: Provider = {\n name: \"GITHUB_ACTIVITY_CONTEXT\",\n description: \"Provides context about recent GitHub activity and statistics\",\n\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<ProviderResult> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n const githubState = state?.github;\n\n if (!githubService && !githubState) {\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n\n let contextText = \"\";\n const values: Record<string, any> = {};\n const data: Record<string, any> = {};\n\n // Activity statistics from state\n if (githubState?.activityStats) {\n const stats = githubState.activityStats;\n contextText += \"GitHub Activity Summary:\\n\";\n contextText += `Total Actions: ${stats.total}\\n`;\n contextText += `Successful: ${stats.success}\\n`;\n contextText += `Failed: ${stats.failed}\\n`;\n contextText += `Success Rate: ${stats.total > 0 ? Math.round((stats.success / stats.total) * 100) : 0}%\\n`;\n\n values.totalActions = stats.total;\n values.successfulActions = stats.success;\n values.failedActions = stats.failed;\n values.successRate =\n stats.total > 0 ? Math.round((stats.success / stats.total) * 100) : 0;\n\n data.activityStats = stats;\n } else {\n contextText += \"GitHub activity context:\\n\";\n }\n\n // Recent activity from service\n if (githubService) {\n try {\n const recentActivity = githubService.getActivityLog(10);\n\n if (recentActivity.length > 0) {\n contextText += \"\\nRecent Activity (last 10 actions):\\n\";\n recentActivity.forEach((activity) => {\n const time = new Date(activity.timestamp).toLocaleTimeString();\n const status = activity.success ? \"✅\" : \"❌\";\n const action = activity.action.replace(/_/g, \" \").toLowerCase();\n contextText += `- ${time} ${status} ${action} ${activity.resource_type}\\n`;\n });\n\n values.recentActivityCount = recentActivity.length;\n values.lastActivity = recentActivity[0];\n data.recentActivity = recentActivity;\n }\n } catch (error) {\n logger.warn(\"Could not fetch recent activity from service:\", error);\n }\n }\n\n // Rate limit information\n if (githubState?.rateLimit) {\n const rateLimit = githubState.rateLimit;\n const usage = Math.round((rateLimit.used / rateLimit.limit) * 100);\n\n contextText += \"\\nAPI Rate Limit:\\n\";\n contextText += `Used: ${rateLimit.used}/${rateLimit.limit} (${usage}%)\\n`;\n contextText += `Remaining: ${rateLimit.remaining}\\n`;\n\n if (githubState.rateLimitCheckedAt) {\n contextText += `Last Checked: ${new Date(githubState.rateLimitCheckedAt).toLocaleString()}\\n`;\n }\n\n values.rateLimitUsed = rateLimit.used;\n values.rateLimitLimit = rateLimit.limit;\n values.rateLimitRemaining = rateLimit.remaining;\n values.rateLimitUsage = usage;\n\n data.rateLimit = rateLimit;\n }\n\n return {\n text: contextText,\n values,\n data,\n };\n } catch (error) {\n logger.error(\"Error in GitHub activity provider:\", error);\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n },\n};\n\n// GitHub User Context Provider\nexport const githubUserProvider: Provider = {\n name: \"GITHUB_USER_CONTEXT\",\n description: \"Provides context about the authenticated GitHub user\",\n\n get: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n ): Promise<ProviderResult> => {\n try {\n const githubService = runtime.getService<GitHubService>(\"github\");\n\n if (!githubService) {\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n\n try {\n const user = await githubService.getCurrentUser();\n\n const contextText = `GitHub User: @${user.login}\nName: ${user.name || \"Not specified\"}\nEmail: ${user.email || \"Not public\"}\nBio: ${user.bio || \"No bio\"}\nCompany: ${user.company || \"Not specified\"}\nLocation: ${user.location || \"Not specified\"}\nPublic Repos: ${user.public_repos}\nFollowers: ${user.followers}\nFollowing: ${user.following}\nAccount Created: ${new Date(user.created_at).toLocaleDateString()}\nProfile: ${user.html_url}`;\n\n const values = {\n githubUsername: user.login,\n githubName: user.name,\n githubEmail: user.email,\n githubBio: user.bio,\n githubCompany: user.company,\n githubLocation: user.location,\n githubPublicRepos: user.public_repos,\n githubFollowers: user.followers,\n githubFollowing: user.following,\n githubAccountType: user.type,\n githubProfileUrl: user.html_url,\n };\n\n const data = {\n currentUser: user,\n };\n\n return {\n text: contextText,\n values,\n data,\n };\n } catch (error) {\n logger.warn(\"Could not fetch GitHub user information:\", error);\n return {\n text: \"GitHub user information unavailable\",\n values: {},\n data: {},\n };\n }\n } catch (error) {\n logger.error(\"Error in GitHub user provider:\", error);\n return {\n text: \"\",\n values: {},\n data: {},\n };\n }\n },\n};\n"],"mappings":"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","names":["logger","ModelType","logger","Service","Octokit","GitHubAPIError","Error","message","status","response","name","GitHubAuthenticationError","GitHubRateLimitError","resetTime","GitHubService","Service","runtime","capabilityDescription","octokit","rateLimitRemaining","rateLimitReset","activityLog","githubConfig","githubToken","getSetting","githubUsername","githubEmail","GITHUB_TOKEN","GITHUB_USERNAME","GITHUB_EMAIL","config","Octokit","auth","userAgent","start","service","logger","info","stop","validateAuthentication","checkRateLimit","data","users","getAuthenticated","updateRateLimit","headers","logActivity","login","user_id","id","error","String","now","Date","waitTime","warn","Promise","resolve","setTimeout","parseInt","sanitizeError","sanitized","authorization","request","validateGitHubName","type","pattern","test","getAuthenticatedUser","user","handleError","getUserByUsername","username","getByUsername","getRepository","owner","repo","repos","get","repository","getRepositories","options","listForAuthenticatedUser","visibility","affiliation","sort","direction","per_page","count","length","getRepositoryIssues","issues","listForRepo","milestone","undefined","state","assignee","creator","mentioned","labels","since","getIssue","issue_number","issue","createIssueComment","body","trim","createComment","comment","getIssueComments","listComments","getRepositoryPullRequests","pulls","list","head","base","getPullRequest","pull_number","pr","createPullRequest","create","title","maintainer_can_modify","draft","number","createOrUpdateFile","path","content","branch","sha","createOrUpdateFileContents","Buffer","from","toString","commit","getFileContent","ref","getContent","fileSize","deleteFile","getRepositoryTree","tree_sha","repoData","default_branch","git","getTree","recursive","treeCount","tree","getDefaultBranch","createWebhook","events","webhook","listWebhooks","deleteWebhook","hook_id","webhook_id","pingWebhook","getActivityLog","limit","log","slice","clearActivityLog","getRateLimitStatus","used","remaining","reset","resource","getRateLimit","getCurrentUser","getRef","createBranch","branchName","createRef","listBranches","getBranch","deleteBranch","deleteRef","compareBranches","compareCommits","comparison","getBranchProtection","protection","listIssues","createIssue","assignees","searchIssues","query","search","issuesAndPullRequests","q","order","items","searchPullRequests","prQuery","includes","listPullRequests","mergePullRequest","merge","commit_title","commit_message","merge_method","listRepositories","createRepository","createForAuthenticatedUser","description","private","auto_init","gitignore_template","license_template","full_name","searchRepositories","getContributorsStats","stats","getCommitActivityStats","getCodeFrequencyStats","getLanguages","listLanguages","languages","getTrafficViews","getViews","views","getTrafficClones","getClones","clones","getTopPaths","paths","getTopReferrers","referrers","getUser","listUserRepositories","listForUser","listUserEvents","activity","listEventsForAuthenticatedUser","action","resourceType","resourceId","details","success","Math","random","substr","timestamp","toISOString","resource_type","resource_id","push","serviceType","z","githubConfigSchema","z","object","GITHUB_TOKEN","string","min","refine","token","startsWith","GITHUB_OWNER","optional","GITHUB_WEBHOOK_SECRET","githubConfigSchemaFlexible","union","null","undefined","nullable","GitHubAPIError","Error","message","status","response","name","_GitHubAPIError","GitHubAuthenticationError","_GitHubAuthenticationError","GitHubRateLimitError","resetTime","_GitHubRateLimitError","createRepositorySchema","max","description","private","boolean","default","auto_init","gitignore_template","license_template","homepage","url","topics","array","createIssueSchema","title","body","assignees","labels","milestone","number","createPullRequestSchema","head","base","draft","maintainer_can_modify","crypto","z","logger","getRepositoryAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","ownerRepoMatch","match","owner","getSetting","repo","logger","info","repository","getRepository","responseContent","full_name","language","stargazers_count","forks_count","open_issues_count","private","Date","created_at","toLocaleDateString","updated_at","html_url","actions","source","success","values","repositoryUrl","stars","data","actionName","github","lastRepository","repositories","error","errorContent","String","examples","listRepositoriesAction","listRepositories","type","sort","per_page","limit","repoList","map","join","length","repositoryCount","repositoryNames","lastRepositories","reduce","acc","createRepositoryAction","nameMatch","descMatch","isPrivate","undefined","includes","repositoryOptions","auto_init","gitignore_template","license_template","createRepository","clone_url","cloneUrl","repositoryName","lastCreatedRepository","searchRepositoriesAction","queryMatch","query","searchResult","searchRepositories","items","total_count","totalCount","lastSearchResults","lastSearchQuery","logger","getIssueAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","issueMatch","match","ownerRepoMatch","issueNumMatch","owner","github","lastRepository","login","getSetting","repo","issue_number","parseInt","logger","info","issue","getIssue","labels","map","label","join","assignees","assignee","responseContent","number","title","user","Date","created_at","toLocaleDateString","updated_at","comments","milestone","body","html_url","actions","source","values","success","repository","issueNumber","issueUrl","issueState","data","actionName","lastIssue","issues","error","errorContent","String","examples","listIssuesAction","includes","listIssues","per_page","limit","issueList","charAt","toUpperCase","slice","length","issueCount","lastIssues","reduce","acc","createIssueAction","titleMatch","bodyMatch","labelsMatch","labelsText","split","filter","Boolean","undefined","issueOptions","createIssue","lastCreatedIssue","searchIssuesAction","queryMatch","query","searchResult","searchIssues","sort","items","repoName","total_count","totalCount","lastIssueSearchResults","lastIssueSearchQuery","lastRateLimit","logger","getPullRequestAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","prMatch","match","ownerRepoMatch","prNumMatch","owner","github","lastRepository","login","getSetting","repo","pull_number","parseInt","logger","info","pr","getPullRequest","labels","map","label","join","assignees","assignee","responseContent","number","title","merged","draft","user","Date","created_at","toLocaleDateString","updated_at","merged_at","comments","commits","changed_files","additions","deletions","head","ref","sha","substring","base","mergeable","body","html_url","actions","source","success","values","pullRequest","repository","pullNumber","data","lastPullRequest","pullRequests","error","errorContent","String","examples","listPullRequestsAction","prState","includes","prs","listPullRequests","per_page","limit","prList","status","charAt","toUpperCase","slice","length","pullRequestCount","lastPullRequests","reduce","acc","createPullRequestAction","titleMatch","branchMatch","bodyMatch","undefined","prOptions","maintainer_can_modify","createPullRequest","pullRequestUrl","lastCreatedPullRequest","mergePullRequestAction","mergeMethod","merge_method","result","mergePullRequest","commit_title","commit_message","mergeResult","lastMergeResult","lastMergedPullRequest","logger","getGitHubActivityAction","name","similes","description","validate","runtime","_message","_state","githubService","getService","handler","message","state","options","callback","Error","limit","activityLog","getActivityLog","filteredActivity","filter","item","success","resource_type","length","responseContent","text","actions","source","content","values","activityCount","activity","data","github","activityByDate","reduce","acc","date","Date","timestamp","toLocaleDateString","push","activityText","Object","entries","sort","a","b","getTime","map","activities","activityList","time","toLocaleTimeString","status","action","replace","toLowerCase","resource_id","error","join","successCount","failureCount","lastActivityLog","activityStats","total","failed","logger","errorContent","String","cleared","examples","clearGitHubActivityAction","clearActivityLog","getGitHubRateLimitAction","rateLimit","getRateLimit","resetTime","reset","now","resetInMinutes","Math","ceil","used","remaining","toLocaleString","resource","round","lastRateLimit","logger","searchGitHubAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","queryMatch","match","query","searchType","type","includes","results","responseText","repos","searchRepositories","sort","per_page","limit","repositories","items","length","total_count","map","r","full_name","stargazers_count","join","issues","searchIssues","i","repoName","html_url","number","title","prs","pullRequests","pr","trim","responseContent","actions","source","success","values","data","searchResults","github","lastSearchResults","lastSearchQuery","lastSearchType","error","logger","errorContent","String","examples","logger","getUserProfileAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","usernameMatch","match","username","logger","info","user","getCurrentUser","responseContent","login","bio","company","location","email","twitter_username","blog","public_repos","public_gists","followers","following","Date","created_at","toLocaleDateString","updated_at","html_url","actions","source","success","values","data","github","lastUser","currentUser","getUser","type","users","error","errorContent","String","examples","getUserStatsAction","repos","listUserRepositories","sort","per_page","languageStats","totalStars","totalForks","totalIssues","repo","language","stargazers_count","forks_count","open_issues_count","sortedLanguages","Object","entries","a","b","slice","events","listUserEvents","eventTypes","event","recentCommits","filter","e","length","recentPRs","recentIssues","map","lang","count","join","r","stats","totalRepos","languages","recentActivity","commits","pullRequests","issues","totalEvents","repositories","userStats","stars","forks","lastUpdated","toISOString","listUserRepositoriesAction","limit","repoList","fork","repositoryCount","userRepositories","logger","listBranchesAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","ownerRepoMatch","match","owner","data","github","lastRepository","login","getSetting","repo","logger","info","allBranches","page","perPage","branches","listBranches","push","length","branchesWithDetails","Promise","all","slice","limit","map","branch","branchData","getBranch","protected","commit","sha","split","author","date","Date","toISOString","error","sort","a","b","getTime","filteredBranches","undefined","filter","branchList","timeAgo","getTimeAgo","substring","join","responseContent","actions","source","repository","totalBranches","success","values","branchCount","lastBranches","errorContent","String","examples","createBranchAction","branchMatch","fromMatch","from","refData","getRef","_newBranch","createBranch","object","toLocaleString","newBranch","lastCreatedBranch","getBranchProtectionAction","protection","getBranchProtection","requiredChecks","required_status_checks","contexts","requiredReviews","required_pull_request_reviews","restrictions","required_approving_review_count","dismiss_stale_reviews","require_code_owner_reviews","users","u","teams","t","enforce_admins","enabled","allow_force_pushes","allow_deletions","required_linear_history","branchProtection","status","now","diffMs","diffMins","Math","floor","diffHours","diffDays","diffWeeks","diffMonths","logger","getRepositoryStatsAction","name","similes","description","validate","runtime","message","state","githubService","getService","handler","options","callback","Error","text","content","ownerRepoMatch","match","owner","github","lastRepository","login","getSetting","repo","logger","info","repository","getRepository","contributors","getContributorsStats","commitActivity","getCommitActivityStats","codeFrequency","getCodeFrequencyStats","languages","getLanguages","totalCommits","reduce","sum","c","total","topContributors","sort","a","b","slice","recentWeeks","recentCommits","week","codeFreqArray","Array","isArray","lastWeekCode","length","additions","deletions","totalBytes","Object","values","bytes","languagePercentages","entries","map","lang","language","percentage","Number","toFixed","parseFloat","responseContent","Date","created_at","toLocaleDateString","updated_at","stargazers_count","forks_count","open_issues_count","size","author","join","Math","abs","l","actions","source","success","stats","basic","stars","forks","issues","commits","top","activity","data","repositoryStats","lastUpdated","toISOString","error","errorContent","String","examples","getRepositoryTrafficAction","views","getTrafficViews","clones","getTrafficClones","paths","getTopPaths","referrers","getTopReferrers","count","uniques","p","path","r","referrer","traffic","unique","repositoryTraffic","status","available","logger","ModelType","z","WebhookIntentSchema","z","object","intent","enum","confidence","number","min","max","reasoning","string","parameters","owner","optional","repo","webhookId","events","array","analyzeWebhookIntent","runtime","message","state","prompt","content","text","data","github","lastRepository","full_name","response","useModel","ModelType","TEXT_LARGE","temperature","max_tokens","parsed","parse","JSON","error","logger","warn","createWebhookAction","name","similes","description","examples","actions","validate","values","handler","options","callback","githubService","getService","tunnelService","Error","isActive","thought","login","clarificationPrompt","clarificationResponse","clarification","needsClarification","clarificationMessage","inferredOwner","inferredRepo","tunnelUrl","getUrl","webhookUrl","webhookSecret","getSetting","webhook","createWebhook","url","content_type","secret","pingWebhook","id","join","lastWebhook","String","listWebhooksAction","webhooks","listWebhooks","length","responseText","forEach","index","config","active","last_response","code","Date","created_at","toLocaleDateString","lastWebhooks","deleteWebhookAction","find","w","map","deleteWebhook","pingWebhookAction","result","logger","ModelType","z","IssueAnalysisSchema","z","object","canAutomate","boolean","complexity","enum","confidence","number","min","max","reasoning","string","issueType","summary","requiredFiles","array","estimatedChanges","riskLevel","dependencies","optional","CodeChangeSchema","file","action","content","lineNumbers","start","end","CodeGenerationSchema","canGenerate","changes","testingNeeded","deploymentNotes","shouldAutoCode","runtime","issue","repository","prompt","full_name","title","body","labels","map","l","name","join","user","login","response","useModel","ModelType","TEXT_LARGE","temperature","max_tokens","result","JSON","parse","_error","logger","warn","autoCodeIssueAction","similes","description","examples","text","actions","validate","message","state","githubService","getService","data","handler","values","options","callback","Error","eventAction","thought","info","assignee","character","analysisPrompt","language","analysisResponse","analysis","error","Math","round","repoStructure","analyzeRepositoryStructure","codeGenPrompt","codeResponse","codeGeneration","defaultBranch","getDefaultBranch","owner","branchName","defaultBranchRef","getRef","createBranch","sha","changedFiles","change","createOrUpdateFile","existingContent","fileSha","fileData","getFileContent","updatedContent","deleteFile","push","length","prBody","toUpperCase","pr","createPullRequest","head","base","createIssueComment","String","tree","getRepositoryTree","keyFiles","filter","item","type","path","endsWith","slice","f","MentionAnalysisSchema","requestType","suggestedResponse","urgency","requiresHuman","analyzeMention","mentionText","isComment","respondToMentionAction","comment","agentName","mentionPatterns","RegExp","toLowerCase","some","pattern","test","isIssueComment","responseText","autoCodeAction","find","a","fallbackError","logger","githubRepositoryProvider","name","description","get","runtime","message","state","githubState","github","text","values","data","contextText","lastRepository","repo","full_name","language","stargazers_count","forks_count","open_issues_count","private","currentRepository","repositoryOwner","owner","login","repositoryName","repositoryLanguage","repositoryStars","repositoryForks","repositoryOpenIssues","repositoryPrivate","repositories","Object","keys","length","recentRepos","sort","a","b","Date","updated_at","getTime","slice","forEach","recentRepositories","map","r","lastCreatedRepository","created_at","toLocaleDateString","error","logger","githubIssuesProvider","lastIssue","issue","number","title","user","comments","labels","l","join","assignees","currentIssue","issueTitle","issueState","issueAuthor","issueLabels","issueAssignees","issueComments","issues","recentIssues","repoMatch","find","key","id","repoName","split","i","lastCreatedIssue","lastCreatedIssueTitle","lastIssueSearchResults","searchResults","lastIssueSearchQuery","total_count","lastIssueSearchCount","githubPullRequestsProvider","lastPullRequest","pr","merged","draft","head","ref","base","changed_files","additions","deletions","currentPullRequest","pullRequestTitle","pullRequestState","pullRequestDraft","pullRequestMerged","pullRequestAuthor","pullRequestHead","pullRequestBase","pullRequestFilesChanged","pullRequestAdditions","pullRequestDeletions","pullRequestLabels","pullRequestAssignees","pullRequests","recentPRs","status","recentPullRequests","lastCreatedPullRequest","lastCreatedPullRequestTitle","lastCreatedPullRequestHead","lastCreatedPullRequestBase","lastMergedPullRequest","pull_number","sha","lastMergedCommitSha","githubActivityProvider","githubService","getService","activityStats","stats","total","success","failed","Math","round","totalActions","successfulActions","failedActions","successRate","recentActivity","getActivityLog","activity","time","timestamp","toLocaleTimeString","action","replace","toLowerCase","resource_type","recentActivityCount","lastActivity","warn","rateLimit","usage","used","limit","remaining","rateLimitCheckedAt","toLocaleString","rateLimitUsed","rateLimitLimit","rateLimitRemaining","rateLimitUsage","githubUserProvider","getCurrentUser","email","bio","company","location","public_repos","followers","following","html_url","githubUsername","githubName","githubEmail","githubBio","githubCompany","githubLocation","githubPublicRepos","githubFollowers","githubFollowing","githubAccountType","type","githubProfileUrl","currentUser","WebhookEventAnalysisSchema","z","object","isAgentMentioned","boolean","confidence","number","min","max","reasoning","string","mentionContext","optional","actionRequired","urgency","enum","mentionType","MessageRelevanceSchema","isGitHubRelated","context","requiresAction","analyzeWebhookMention","runtime","content","agentName","prompt","response","useModel","ModelType","TEXT_LARGE","temperature","max_tokens","jsonText","replace","trim","jsonMatch","match","parse","JSON","_error","logger","warn","analyzeMessageRelevance","text","error","verifyWebhookSignature","payload","signature","secret","hmac","createHmac","digest","update","stringify","length","timingSafeEqual","Buffer","from","processWebhookEvent","event","emitEvent","repository","sender","action","issue","body","title","character","name","full_name","analysis","info","Math","round","debug","comment","pullRequest","pull_request","githubActions","getRepositoryAction","listRepositoriesAction","createRepositoryAction","searchRepositoriesAction","getIssueAction","listIssuesAction","createIssueAction","searchIssuesAction","getPullRequestAction","listPullRequestsAction","createPullRequestAction","mergePullRequestAction","getGitHubActivityAction","clearGitHubActivityAction","getGitHubRateLimitAction","searchGitHubAction","getUserProfileAction","getUserStatsAction","listUserRepositoriesAction","listBranchesAction","createBranchAction","getBranchProtectionAction","getRepositoryStatsAction","getRepositoryTrafficAction","createWebhookAction","listWebhooksAction","deleteWebhookAction","pingWebhookAction","autoCodeIssueAction","respondToMentionAction","githubProviders","githubRepositoryProvider","githubIssuesProvider","githubPullRequestsProvider","githubActivityProvider","githubUserProvider","githubPlugin","description","dependencies","config","GITHUB_TOKEN","process","env","GITHUB_OWNER","GITHUB_WEBHOOK_SECRET","init","token","getSetting","isTestEnv","NODE_ENV","VITEST","JEST_WORKER_ID","undefined","argv","some","arg","includes","globalThis","describe","it","expect","startsWith","cwd","console","log","owner","webhookSecret","validatedConfig","configSchema","githubConfigSchemaFlexible","githubConfigSchema","parseAsync","validationError","Error","settings","githubConfig","setTimeout","tunnelService","getService","isActive","tunnelUrl","getUrl","isTestEnvInCatch","message","String","routes","path","type","handler","req","res","json","status","plugin","version","authenticated","tokenType","timestamp","Date","toISOString","githubService","limit","parseInt","query","activityLog","getActivityLog","stats","total","success","filter","a","failed","activity","rateLimit","getRateLimit","headers","statusCode","end","events","MESSAGE_RECEIVED","params","relevance","messageId","id","toLowerCase","hasBasicGithubPattern","test","note","processAction","services","GitHubService","actions","providers","tests","githubPlugin"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../index.ts", "../actions/createBranch.ts", "../generated/specs/specs.ts", "../generated/specs/spec-helpers.ts", "../service.ts", "../config.ts", "../error.ts", "../types.ts", "../actions/createComment.ts", "../actions/createIssue.ts", "../actions/createPullRequest.ts", "../actions/mergePullRequest.ts", "../actions/pushCode.ts", "../actions/reviewPullRequest.ts", "../actions/index.ts", "../providers/issueContext.ts", "../providers/repositoryState.ts", "../providers/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { type IAgentRuntime, logger, type Plugin } from \"@elizaos/core\";\nimport { allActions } from \"./actions\";\nimport { allProviders } from \"./providers\";\nimport { GitHubService } from \"./service\";\n\nconst githubPlugin: Plugin = {\n name: \"github\",\n description:\n \"GitHub integration for repository management, issues, pull requests, and code reviews\",\n services: [GitHubService],\n actions: allActions,\n providers: allProviders,\n\n init: async (_config: Record<string, string>, runtime: IAgentRuntime) => {\n const token = runtime.getSetting(\"GITHUB_API_TOKEN\");\n const owner = runtime.getSetting(\"GITHUB_OWNER\");\n const repo = runtime.getSetting(\"GITHUB_REPO\");\n const branch = runtime.getSetting(\"GITHUB_BRANCH\") ?? \"main\";\n\n logger.info(\n `GitHub Plugin - Token: ${token ? \"configured\" : \"not configured\"}, Owner: ${owner ?? \"not set\"}, Repo: ${repo ?? \"not set\"}, Branch: ${branch}`\n );\n\n if (!token) {\n logger.warn(\"GitHub API Token not provided - plugin will not be functional\");\n }\n },\n};\n\nexport default githubPlugin;\n",
|
|
6
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { type CreateBranchParams, createBranchSchema, formatZodErrors } from \"../types\";\n\nconst spec = requireActionSpec(\"CREATE_BRANCH\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Create a branch called feature/new-feature from main\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll create the feature/new-feature branch from main.\",\n actions: [\"CREATE_GITHUB_BRANCH\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Make a new branch fix/bug-123 based on develop\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Creating branch fix/bug-123 from develop.\",\n actions: [\"CREATE_GITHUB_BRANCH\"],\n },\n },\n ],\n];\n\nexport const createBranchAction: Action = {\n name: \"CREATE_GITHUB_BRANCH\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return text.includes(\"branch\") || text.includes(\"fork\") || text.includes(\"checkout\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const params: CreateBranchParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n branchName: (state?.branchName as string) ?? \"\",\n fromRef: (state?.fromRef as string) ?? service.getConfig().branch ?? \"main\",\n };\n\n const validation = createBranchSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid branch parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't create the branch due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const branch = await service.createBranch(params);\n\n logger.info(`Created branch ${branch.name} from ${params.fromRef}`);\n\n if (callback) {\n await callback({\n text: `Created branch \"${branch.name}\" from ${params.fromRef}.\\n\\nLatest commit: ${branch.sha.slice(0, 7)}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to create branch: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to create the branch: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default createBranchAction;\n",
|
|
7
|
+
"/**\n * Auto-generated canonical action/provider/evaluator docs for plugin-github.\n * DO NOT EDIT - Generated from prompts/specs/**.\n */\n\nexport type ActionDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n parameters?: readonly unknown[];\n examples?: readonly (readonly unknown[])[];\n};\n\nexport type ProviderDoc = {\n name: string;\n description: string;\n position?: number;\n dynamic?: boolean;\n};\n\nexport type EvaluatorDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n alwaysRun?: boolean;\n examples?: readonly unknown[];\n};\n\nexport const coreActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"CREATE_GITHUB_BRANCH\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_COMMENT\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_ISSUE\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"MERGE_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"PUSH_GITHUB_CODE\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"REVIEW_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n ],\n} as const;\nexport const allActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"CREATE_GITHUB_BRANCH\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_COMMENT\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_ISSUE\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"CREATE_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"MERGE_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"PUSH_GITHUB_CODE\",\n description: \"\",\n parameters: [],\n },\n {\n name: \"REVIEW_GITHUB_PULL_REQUEST\",\n description: \"\",\n parameters: [],\n },\n ],\n} as const;\nexport const coreProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"GITHUB_ISSUE_CONTEXT\",\n description:\n \"Provides detailed context about a specific GitHub issue or pull request when referenced\",\n dynamic: true,\n },\n {\n name: \"GITHUB_REPOSITORY_STATE\",\n description: \"Provides context about the current GitHub repository including recent activity\",\n dynamic: true,\n },\n ],\n} as const;\nexport const allProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"GITHUB_ISSUE_CONTEXT\",\n description:\n \"Provides detailed context about a specific GitHub issue or pull request when referenced\",\n dynamic: true,\n },\n {\n name: \"GITHUB_REPOSITORY_STATE\",\n description: \"Provides context about the current GitHub repository including recent activity\",\n dynamic: true,\n },\n ],\n} as const;\nexport const coreEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\nexport const allEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\n\nexport const coreActionDocs: readonly ActionDoc[] = coreActionsSpec.actions;\nexport const allActionDocs: readonly ActionDoc[] = allActionsSpec.actions;\nexport const coreProviderDocs: readonly ProviderDoc[] = coreProvidersSpec.providers;\nexport const allProviderDocs: readonly ProviderDoc[] = allProvidersSpec.providers;\nexport const coreEvaluatorDocs: readonly EvaluatorDoc[] = coreEvaluatorsSpec.evaluators;\nexport const allEvaluatorDocs: readonly EvaluatorDoc[] = allEvaluatorsSpec.evaluators;\n",
|
|
8
|
+
"/**\n * Helper functions to lookup action/provider/evaluator specs by name.\n * These allow language-specific implementations to import their text content\n * (description, similes, examples) from the centralized specs.\n *\n * DO NOT EDIT the spec data - update prompts/actions.json, prompts/providers.json, prompts/evaluators.json and regenerate.\n */\n\nimport {\n type ActionDoc,\n allActionDocs,\n allEvaluatorDocs,\n allProviderDocs,\n coreActionDocs,\n coreEvaluatorDocs,\n coreProviderDocs,\n type EvaluatorDoc,\n type ProviderDoc,\n} from \"./specs\";\n\n// Build lookup maps for O(1) access\nconst coreActionMap = new Map<string, ActionDoc>(coreActionDocs.map((doc) => [doc.name, doc]));\nconst allActionMap = new Map<string, ActionDoc>(allActionDocs.map((doc) => [doc.name, doc]));\nconst coreProviderMap = new Map<string, ProviderDoc>(\n coreProviderDocs.map((doc) => [doc.name, doc])\n);\nconst allProviderMap = new Map<string, ProviderDoc>(allProviderDocs.map((doc) => [doc.name, doc]));\nconst coreEvaluatorMap = new Map<string, EvaluatorDoc>(\n coreEvaluatorDocs.map((doc) => [doc.name, doc])\n);\nconst allEvaluatorMap = new Map<string, EvaluatorDoc>(\n allEvaluatorDocs.map((doc) => [doc.name, doc])\n);\n\n/**\n * Get an action spec by name from the core specs.\n * @param name - The action name\n * @returns The action spec or undefined if not found\n */\nexport function getActionSpec(name: string): ActionDoc | undefined {\n return coreActionMap.get(name) ?? allActionMap.get(name);\n}\n\n/**\n * Get an action spec by name, throwing if not found.\n * @param name - The action name\n * @returns The action spec\n * @throws Error if the action is not found\n */\nexport function requireActionSpec(name: string): ActionDoc {\n const spec = getActionSpec(name);\n if (!spec) {\n throw new Error(`Action spec not found: ${name}`);\n }\n return spec;\n}\n\n/**\n * Get a provider spec by name from the core specs.\n * @param name - The provider name\n * @returns The provider spec or undefined if not found\n */\nexport function getProviderSpec(name: string): ProviderDoc | undefined {\n return coreProviderMap.get(name) ?? allProviderMap.get(name);\n}\n\n/**\n * Get a provider spec by name, throwing if not found.\n * @param name - The provider name\n * @returns The provider spec\n * @throws Error if the provider is not found\n */\nexport function requireProviderSpec(name: string): ProviderDoc {\n const spec = getProviderSpec(name);\n if (!spec) {\n throw new Error(`Provider spec not found: ${name}`);\n }\n return spec;\n}\n\n/**\n * Get an evaluator spec by name from the core specs.\n * @param name - The evaluator name\n * @returns The evaluator spec or undefined if not found\n */\nexport function getEvaluatorSpec(name: string): EvaluatorDoc | undefined {\n return coreEvaluatorMap.get(name) ?? allEvaluatorMap.get(name);\n}\n\n/**\n * Get an evaluator spec by name, throwing if not found.\n * @param name - The evaluator name\n * @returns The evaluator spec\n * @throws Error if the evaluator is not found\n */\nexport function requireEvaluatorSpec(name: string): EvaluatorDoc {\n const spec = getEvaluatorSpec(name);\n if (!spec) {\n throw new Error(`Evaluator spec not found: ${name}`);\n }\n return spec;\n}\n\n// Re-export types for convenience\nexport type { ActionDoc, ProviderDoc, EvaluatorDoc };\n",
|
|
9
|
+
"import { type IAgentRuntime, logger, type Metadata, Service } from \"@elizaos/core\";\nimport { Octokit } from \"@octokit/rest\";\nimport { type GitHubPluginConfig, validateGitHubConfig } from \"./config\";\nimport { FileNotFoundError } from \"./error\";\nimport type {\n CreateBranchParams,\n CreateCommentParams,\n CreateCommitParams,\n CreateIssueParams,\n CreatePullRequestParams,\n CreateReviewParams,\n GetFileParams,\n GitHubBranch,\n GitHubComment,\n GitHubCommit,\n GitHubDirectoryEntry,\n GitHubFileContent,\n GitHubIssue,\n GitHubPullRequest,\n GitHubRepository,\n GitHubReview,\n GitHubUser,\n IssueState,\n IssueStateReason,\n ListIssuesParams,\n ListPullRequestsParams,\n MergeableState,\n MergePullRequestParams,\n PullRequestState,\n RepositoryRef,\n ReviewState,\n UpdateIssueParams,\n UpdatePullRequestParams,\n} from \"./types\";\n\nexport const GITHUB_SERVICE_NAME = \"github\";\n\nexport class GitHubService extends Service {\n static override serviceType = GITHUB_SERVICE_NAME;\n\n private octokit: Octokit | null = null;\n private _config: GitHubPluginConfig | null = null;\n\n declare config?: Metadata;\n\n capabilityDescription =\n \"GitHub integration for repository management, issues, pull requests, and code reviews\";\n\n get name(): string {\n return GITHUB_SERVICE_NAME;\n }\n\n getConfig(): GitHubPluginConfig {\n if (!this._config) {\n throw new Error(\"GitHub service not initialized\");\n }\n return this._config;\n }\n\n private getClient(): Octokit {\n if (!this.octokit) {\n throw new Error(\"GitHub service not initialized\");\n }\n return this.octokit;\n }\n\n async start(runtime: IAgentRuntime): Promise<void> {\n logger.info(\"Starting GitHub service...\");\n\n this._config = validateGitHubConfig(runtime);\n const settings = this._config.toSettings();\n this.config = {\n apiToken: settings.apiToken ?? \"\",\n owner: settings.owner ?? undefined,\n repo: settings.repo ?? undefined,\n branch: settings.branch ?? \"main\",\n webhookSecret: settings.webhookSecret ?? undefined,\n appId: settings.appId ?? undefined,\n appPrivateKey: settings.appPrivateKey ?? undefined,\n installationId: settings.installationId ?? undefined,\n };\n\n this.octokit = new Octokit({\n auth: this._config.apiToken,\n userAgent: \"elizaos-plugin-github/1.0.0\",\n });\n\n const { data: user } = await this.octokit.users.getAuthenticated();\n logger.info(`GitHub service started - authenticated as ${user.login}`);\n }\n\n override async stop(): Promise<void> {\n logger.info(\"Stopping GitHub service...\");\n this.octokit = null;\n this._config = null;\n this.config = undefined;\n logger.info(\"GitHub service stopped\");\n }\n\n async getRepository(params: RepositoryRef): Promise<GitHubRepository> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.repos.get({ owner, repo });\n return this.mapRepository(data);\n }\n\n async listRepositories(\n username?: string,\n options?: {\n type?: \"all\" | \"owner\" | \"member\";\n perPage?: number;\n page?: number;\n }\n ): Promise<GitHubRepository[]> {\n const client = this.getClient();\n\n const { data } = username\n ? await client.repos.listForUser({\n username,\n type: options?.type ?? \"owner\",\n per_page: options?.perPage ?? 30,\n page: options?.page ?? 1,\n })\n : await client.repos.listForAuthenticatedUser({\n type: options?.type ?? \"all\",\n per_page: options?.perPage ?? 30,\n page: options?.page ?? 1,\n });\n\n return data.map((r) => this.mapRepository(r));\n }\n\n async createIssue(params: CreateIssueParams): Promise<GitHubIssue> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.create({\n owner,\n repo,\n title: params.title,\n body: params.body,\n assignees: params.assignees,\n labels: params.labels,\n milestone: params.milestone,\n });\n\n return this.mapIssue(data);\n }\n\n async getIssue(params: RepositoryRef & { issueNumber: number }): Promise<GitHubIssue> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.get({\n owner,\n repo,\n issue_number: params.issueNumber,\n });\n\n return this.mapIssue(data);\n }\n\n async updateIssue(params: UpdateIssueParams): Promise<GitHubIssue> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.update({\n owner,\n repo,\n issue_number: params.issueNumber,\n title: params.title,\n body: params.body,\n state: params.state,\n state_reason: params.stateReason,\n assignees: params.assignees,\n labels: params.labels,\n milestone: params.milestone ?? undefined,\n });\n\n return this.mapIssue(data);\n }\n\n async listIssues(params: ListIssuesParams): Promise<GitHubIssue[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.listForRepo({\n owner,\n repo,\n state: params.state ?? \"open\",\n labels: params.labels,\n sort: params.sort ?? \"created\",\n direction: params.direction ?? \"desc\",\n assignee: params.assignee,\n creator: params.creator,\n mentioned: params.mentioned,\n per_page: params.perPage ?? 30,\n page: params.page ?? 1,\n });\n\n return data.filter((issue) => !issue.pull_request).map((issue) => this.mapIssue(issue));\n }\n\n async closeIssue(\n params: RepositoryRef & {\n issueNumber: number;\n reason?: \"completed\" | \"not_planned\";\n }\n ): Promise<GitHubIssue> {\n return this.updateIssue({\n ...params,\n state: \"closed\",\n stateReason: params.reason ?? \"completed\",\n });\n }\n\n async reopenIssue(params: RepositoryRef & { issueNumber: number }): Promise<GitHubIssue> {\n return this.updateIssue({\n ...params,\n state: \"open\",\n stateReason: \"reopened\",\n });\n }\n\n async createPullRequest(params: CreatePullRequestParams): Promise<GitHubPullRequest> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.create({\n owner,\n repo,\n title: params.title,\n body: params.body,\n head: params.head,\n base: params.base,\n draft: params.draft,\n maintainer_can_modify: params.maintainerCanModify,\n });\n\n return this.mapPullRequest(data);\n }\n\n async getPullRequest(params: RepositoryRef & { pullNumber: number }): Promise<GitHubPullRequest> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.get({\n owner,\n repo,\n pull_number: params.pullNumber,\n });\n\n return this.mapPullRequest(data);\n }\n\n async updatePullRequest(params: UpdatePullRequestParams): Promise<GitHubPullRequest> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.update({\n owner,\n repo,\n pull_number: params.pullNumber,\n title: params.title,\n body: params.body,\n state: params.state,\n base: params.base,\n maintainer_can_modify: params.maintainerCanModify,\n });\n\n return this.mapPullRequest(data);\n }\n\n async listPullRequests(params: ListPullRequestsParams): Promise<GitHubPullRequest[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.list({\n owner,\n repo,\n state: params.state ?? \"open\",\n head: params.head,\n base: params.base,\n sort: params.sort ?? \"created\",\n direction: params.direction ?? \"desc\",\n per_page: params.perPage ?? 30,\n page: params.page ?? 1,\n });\n\n return data.map((pr) => this.mapPullRequest(pr));\n }\n\n async mergePullRequest(\n params: MergePullRequestParams\n ): Promise<{ sha: string; merged: boolean; message: string }> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.merge({\n owner,\n repo,\n pull_number: params.pullNumber,\n commit_title: params.commitTitle,\n commit_message: params.commitMessage,\n merge_method: params.mergeMethod ?? \"merge\",\n sha: params.sha,\n });\n\n return {\n sha: data.sha,\n merged: data.merged,\n message: data.message,\n };\n }\n\n async closePullRequest(\n params: RepositoryRef & { pullNumber: number }\n ): Promise<GitHubPullRequest> {\n return this.updatePullRequest({\n ...params,\n state: \"closed\",\n });\n }\n\n async createReview(params: CreateReviewParams): Promise<GitHubReview> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.createReview({\n owner,\n repo,\n pull_number: params.pullNumber,\n body: params.body,\n event: params.event,\n commit_id: params.commitId,\n comments: params.comments?.map((c) => ({\n path: c.path,\n line: c.line,\n body: c.body,\n side: c.side,\n start_line: c.startLine,\n start_side: c.startSide,\n })),\n });\n\n return this.mapReview(data);\n }\n\n async listReviews(params: RepositoryRef & { pullNumber: number }): Promise<GitHubReview[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.pulls.listReviews({\n owner,\n repo,\n pull_number: params.pullNumber,\n });\n\n return data.map((r) => this.mapReview(r));\n }\n\n async createComment(params: CreateCommentParams): Promise<GitHubComment> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.createComment({\n owner,\n repo,\n issue_number: params.issueNumber,\n body: params.body,\n });\n\n return this.mapComment(data);\n }\n\n async listComments(\n params: RepositoryRef & {\n issueNumber: number;\n perPage?: number;\n page?: number;\n }\n ): Promise<GitHubComment[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.issues.listComments({\n owner,\n repo,\n issue_number: params.issueNumber,\n per_page: params.perPage ?? 30,\n page: params.page ?? 1,\n });\n\n return data.map((c) => this.mapComment(c));\n }\n\n async createBranch(params: CreateBranchParams): Promise<GitHubBranch> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n let sha: string;\n\n if (params.fromRef.match(/^[0-9a-f]{40}$/i)) {\n sha = params.fromRef;\n } else {\n const { data: refData } = await client.git.getRef({\n owner,\n repo,\n ref: `heads/${params.fromRef}`,\n });\n sha = refData.object.sha;\n }\n\n await client.git.createRef({\n owner,\n repo,\n ref: `refs/heads/${params.branchName}`,\n sha,\n });\n\n return {\n name: params.branchName,\n sha,\n protected: false,\n };\n }\n\n async deleteBranch(params: RepositoryRef & { branchName: string }): Promise<void> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n await client.git.deleteRef({\n owner,\n repo,\n ref: `heads/${params.branchName}`,\n });\n }\n\n async listBranches(\n params: RepositoryRef & { perPage?: number; page?: number }\n ): Promise<GitHubBranch[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.repos.listBranches({\n owner,\n repo,\n per_page: params.perPage ?? 30,\n page: params.page ?? 1,\n });\n\n return data.map((b) => ({\n name: b.name,\n sha: b.commit.sha,\n protected: b.protected,\n }));\n }\n\n async getFile(params: GetFileParams): Promise<GitHubFileContent> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.repos.getContent({\n owner,\n repo,\n path: params.path,\n ref: params.branch,\n });\n\n if (Array.isArray(data)) {\n throw new FileNotFoundError(`${params.path} is a directory, not a file`, owner, repo);\n }\n\n if (data.type !== \"file\") {\n throw new FileNotFoundError(`${params.path} is not a file`, owner, repo);\n }\n\n let content = \"\";\n if (\"content\" in data && data.content) {\n content = Buffer.from(data.content, \"base64\").toString(\"utf-8\");\n }\n\n return {\n name: data.name,\n path: data.path,\n content,\n sha: data.sha,\n size: data.size,\n type: data.type as \"file\",\n encoding: \"encoding\" in data ? (data.encoding ?? \"base64\") : \"base64\",\n htmlUrl: data.html_url ?? \"\",\n downloadUrl: data.download_url,\n };\n }\n\n async listDirectory(params: GetFileParams): Promise<GitHubDirectoryEntry[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n const { data } = await client.repos.getContent({\n owner,\n repo,\n path: params.path,\n ref: params.branch,\n });\n\n if (!Array.isArray(data)) {\n throw new FileNotFoundError(`${params.path} is a file, not a directory`, owner, repo);\n }\n\n return data.map((entry) => ({\n name: entry.name,\n path: entry.path,\n sha: entry.sha,\n size: entry.size,\n type: entry.type as \"file\" | \"dir\" | \"symlink\" | \"submodule\",\n htmlUrl: entry.html_url ?? \"\",\n downloadUrl: entry.download_url,\n }));\n }\n\n async createCommit(params: CreateCommitParams): Promise<GitHubCommit> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n\n let parentSha = params.parentSha;\n if (!parentSha) {\n const { data: refData } = await client.git.getRef({\n owner,\n repo,\n ref: `heads/${params.branch}`,\n });\n parentSha = refData.object.sha;\n }\n\n const { data: parentCommit } = await client.git.getCommit({\n owner,\n repo,\n commit_sha: parentSha,\n });\n\n const treeItems: Array<{\n path: string;\n mode: \"100644\" | \"100755\" | \"040000\" | \"160000\" | \"120000\";\n type: \"blob\" | \"tree\" | \"commit\";\n sha?: string;\n }> = [];\n\n for (const file of params.files) {\n if (file.operation === \"delete\") {\n continue;\n }\n\n const { data: blob } = await client.git.createBlob({\n owner,\n repo,\n content: file.content,\n encoding: file.encoding ?? \"utf-8\",\n });\n\n treeItems.push({\n path: file.path,\n mode: \"100644\",\n type: \"blob\",\n sha: blob.sha,\n });\n }\n\n const { data: newTree } = await client.git.createTree({\n owner,\n repo,\n base_tree: parentCommit.tree.sha,\n tree: treeItems,\n });\n\n const { data: commit } = await client.git.createCommit({\n owner,\n repo,\n message: params.message,\n tree: newTree.sha,\n parents: [parentSha],\n author: params.authorName\n ? {\n name: params.authorName,\n email: params.authorEmail ?? `${params.authorName}@users.noreply.github.com`,\n }\n : undefined,\n });\n\n await client.git.updateRef({\n owner,\n repo,\n ref: `heads/${params.branch}`,\n sha: commit.sha,\n });\n\n return {\n sha: commit.sha,\n message: commit.message,\n author: {\n name: commit.author?.name ?? \"Unknown\",\n email: commit.author?.email ?? \"\",\n date: commit.author?.date ?? new Date().toISOString(),\n },\n committer: {\n name: commit.committer?.name ?? \"Unknown\",\n email: commit.committer?.email ?? \"\",\n date: commit.committer?.date ?? new Date().toISOString(),\n },\n timestamp: commit.author?.date ?? new Date().toISOString(),\n htmlUrl: commit.html_url,\n parents: commit.parents.map((p) => p.sha),\n };\n }\n\n async listCommits(\n params: RepositoryRef & {\n branch?: string;\n path?: string;\n perPage?: number;\n page?: number;\n }\n ): Promise<GitHubCommit[]> {\n const client = this.getClient();\n const { owner, repo } = this.resolveRepoRef(params);\n const branch = params.branch ?? this._config?.branch ?? \"main\";\n\n const { data } = await client.repos.listCommits({\n owner,\n repo,\n sha: branch,\n path: params.path,\n per_page: params.perPage ?? 30,\n page: params.page ?? 1,\n });\n\n return data.map((c) => ({\n sha: c.sha,\n message: c.commit.message,\n author: {\n name: c.commit.author?.name ?? \"Unknown\",\n email: c.commit.author?.email ?? \"\",\n date: c.commit.author?.date ?? \"\",\n },\n committer: {\n name: c.commit.committer?.name ?? \"Unknown\",\n email: c.commit.committer?.email ?? \"\",\n date: c.commit.committer?.date ?? \"\",\n },\n timestamp: c.commit.author?.date ?? \"\",\n htmlUrl: c.html_url,\n parents: c.parents.map((p) => p.sha),\n }));\n }\n\n async getAuthenticatedUser(): Promise<GitHubUser> {\n const client = this.getClient();\n\n const { data } = await client.users.getAuthenticated();\n return this.mapUser(data);\n }\n\n async getUser(username: string): Promise<GitHubUser> {\n const client = this.getClient();\n\n const { data } = await client.users.getByUsername({ username });\n return this.mapUser(data);\n }\n\n private resolveRepoRef(params: Partial<RepositoryRef>): {\n owner: string;\n repo: string;\n } {\n const owner = params.owner ?? this._config?.owner;\n const repo = params.repo ?? this._config?.repo;\n\n if (!owner || !repo) {\n throw new Error(\n \"Repository owner and name are required. Configure defaults or provide them explicitly.\"\n );\n }\n\n return { owner, repo };\n }\n\n private mapRepository(data: unknown): GitHubRepository {\n const d = data as Record<string, unknown>;\n const license = d.license as Record<string, unknown> | null;\n return {\n id: d.id as number,\n name: d.name as string,\n fullName: d.full_name as string,\n owner: this.mapUser(d.owner),\n description: d.description as string | null,\n private: d.private as boolean,\n fork: d.fork as boolean,\n defaultBranch: d.default_branch as string,\n language: d.language as string | null,\n stargazersCount: d.stargazers_count as number,\n forksCount: d.forks_count as number,\n openIssuesCount: d.open_issues_count as number,\n watchersCount: d.watchers_count as number,\n htmlUrl: d.html_url as string,\n cloneUrl: d.clone_url as string,\n sshUrl: d.ssh_url as string,\n createdAt: d.created_at as string,\n updatedAt: d.updated_at as string,\n pushedAt: d.pushed_at as string,\n topics: (d.topics as string[]) ?? [],\n license: license\n ? {\n key: license.key as string,\n name: license.name as string,\n spdxId: license.spdx_id as string,\n url: license.url as string | null,\n }\n : null,\n };\n }\n\n private mapUser(data: unknown): GitHubUser {\n const d = data as Record<string, unknown>;\n return {\n id: d.id as number,\n login: d.login as string,\n name: (d.name as string | null) ?? null,\n avatarUrl: d.avatar_url as string,\n htmlUrl: d.html_url as string,\n type: d.type as \"User\" | \"Organization\" | \"Bot\",\n };\n }\n\n private mapIssue(data: unknown): GitHubIssue {\n const d = data as Record<string, unknown>;\n return {\n number: d.number as number,\n title: d.title as string,\n body: d.body as string | null,\n state: d.state as IssueState,\n stateReason: (d.state_reason as IssueStateReason | null) ?? null,\n user: this.mapUser(d.user),\n assignees: ((d.assignees as unknown[]) ?? []).map((a: unknown) => this.mapUser(a)),\n labels: ((d.labels as unknown[]) ?? []).map((l: unknown) => this.mapLabel(l)),\n milestone: d.milestone ? this.mapMilestone(d.milestone) : null,\n createdAt: d.created_at as string,\n updatedAt: d.updated_at as string,\n closedAt: d.closed_at as string | null,\n htmlUrl: d.html_url as string,\n comments: d.comments as number,\n isPullRequest: !!d.pull_request,\n };\n }\n\n private mapLabel(data: unknown): {\n id: number;\n name: string;\n color: string;\n description: string | null;\n default: boolean;\n } {\n if (typeof data === \"string\") {\n return {\n id: 0,\n name: data,\n color: \"\",\n description: null,\n default: false,\n };\n }\n const d = data as Record<string, unknown>;\n return {\n id: d.id as number,\n name: d.name as string,\n color: d.color as string,\n description: d.description as string | null,\n default: d.default as boolean,\n };\n }\n\n private mapMilestone(data: unknown): {\n number: number;\n title: string;\n description: string | null;\n state: \"open\" | \"closed\";\n dueOn: string | null;\n createdAt: string;\n updatedAt: string;\n closedAt: string | null;\n openIssues: number;\n closedIssues: number;\n } {\n const d = data as Record<string, unknown>;\n return {\n number: d.number as number,\n title: d.title as string,\n description: d.description as string | null,\n state: d.state as \"open\" | \"closed\",\n dueOn: d.due_on as string | null,\n createdAt: d.created_at as string,\n updatedAt: d.updated_at as string,\n closedAt: d.closed_at as string | null,\n openIssues: d.open_issues as number,\n closedIssues: d.closed_issues as number,\n };\n }\n\n private mapPullRequest(data: unknown): GitHubPullRequest {\n const d = data as Record<string, unknown>;\n const head = d.head as Record<string, unknown>;\n const base = d.base as Record<string, unknown>;\n const headRepo = head.repo as Record<string, unknown> | null;\n const baseRepo = base.repo as Record<string, unknown> | null;\n const headRepoOwner = headRepo?.owner as Record<string, unknown> | undefined;\n const baseRepoOwner = baseRepo?.owner as Record<string, unknown> | undefined;\n return {\n number: d.number as number,\n title: d.title as string,\n body: d.body as string | null,\n state: d.state as PullRequestState,\n draft: (d.draft as boolean) ?? false,\n merged: (d.merged as boolean) ?? false,\n mergeable: d.mergeable as boolean | null,\n mergeableState: (d.mergeable_state as MergeableState) ?? \"unknown\",\n user: this.mapUser(d.user),\n head: {\n ref: head.ref as string,\n label: head.label as string,\n sha: head.sha as string,\n repo: headRepo\n ? { owner: headRepoOwner?.login as string, repo: headRepo.name as string }\n : null,\n },\n base: {\n ref: base.ref as string,\n label: base.label as string,\n sha: base.sha as string,\n repo: baseRepo\n ? { owner: baseRepoOwner?.login as string, repo: baseRepo.name as string }\n : null,\n },\n assignees: ((d.assignees as unknown[]) ?? []).map((a: unknown) => this.mapUser(a)),\n requestedReviewers: ((d.requested_reviewers as unknown[]) ?? []).map((r: unknown) =>\n this.mapUser(r)\n ),\n labels: ((d.labels as unknown[]) ?? []).map((l: unknown) => this.mapLabel(l)),\n milestone: d.milestone ? this.mapMilestone(d.milestone) : null,\n createdAt: d.created_at as string,\n updatedAt: d.updated_at as string,\n closedAt: d.closed_at as string | null,\n mergedAt: d.merged_at as string | null,\n htmlUrl: d.html_url as string,\n commits: (d.commits as number) ?? 0,\n additions: (d.additions as number) ?? 0,\n deletions: (d.deletions as number) ?? 0,\n changedFiles: (d.changed_files as number) ?? 0,\n };\n }\n\n private mapReview(data: unknown): GitHubReview {\n const d = data as Record<string, unknown>;\n return {\n id: d.id as number,\n user: this.mapUser(d.user),\n body: d.body as string | null,\n state: d.state as ReviewState,\n commitId: d.commit_id as string,\n htmlUrl: d.html_url as string,\n submittedAt: d.submitted_at as string,\n };\n }\n\n private mapComment(data: unknown): GitHubComment {\n const d = data as Record<string, unknown>;\n return {\n id: d.id as number,\n body: d.body as string,\n user: this.mapUser(d.user),\n createdAt: d.created_at as string,\n updatedAt: d.updated_at as string,\n htmlUrl: d.html_url as string,\n };\n }\n}\n",
|
|
10
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { z } from \"zod\";\nimport { ConfigError, MissingSettingError } from \"./error\";\nimport { formatZodErrors, type GitHubSettings } from \"./types\";\n\nconst configSchema = z.object({\n apiToken: z.string().min(1, \"API token is required\"),\n owner: z.string().optional(),\n repo: z.string().optional(),\n branch: z.string().default(\"main\"),\n webhookSecret: z.string().optional(),\n appId: z.string().optional(),\n appPrivateKey: z.string().optional(),\n installationId: z.string().optional(),\n});\n\nexport type GitHubConfig = z.infer<typeof configSchema>;\n\nexport class GitHubPluginConfig {\n public readonly apiToken: string;\n public readonly owner: string | undefined;\n public readonly repo: string | undefined;\n public readonly branch: string;\n public readonly webhookSecret: string | undefined;\n public readonly appId: string | undefined;\n public readonly appPrivateKey: string | undefined;\n public readonly installationId: string | undefined;\n\n private constructor(config: GitHubConfig) {\n this.apiToken = config.apiToken;\n this.owner = config.owner;\n this.repo = config.repo;\n this.branch = config.branch;\n this.webhookSecret = config.webhookSecret;\n this.appId = config.appId;\n this.appPrivateKey = config.appPrivateKey;\n this.installationId = config.installationId;\n }\n\n static fromRuntime(runtime: IAgentRuntime): GitHubPluginConfig {\n const apiToken = runtime.getSetting(\"GITHUB_API_TOKEN\");\n\n if (!apiToken) {\n throw new MissingSettingError(\"GITHUB_API_TOKEN\");\n }\n\n const rawConfig = {\n apiToken,\n owner: runtime.getSetting(\"GITHUB_OWNER\") ?? undefined,\n repo: runtime.getSetting(\"GITHUB_REPO\") ?? undefined,\n branch: runtime.getSetting(\"GITHUB_BRANCH\") ?? \"main\",\n webhookSecret: runtime.getSetting(\"GITHUB_WEBHOOK_SECRET\") ?? undefined,\n appId: runtime.getSetting(\"GITHUB_APP_ID\") ?? undefined,\n appPrivateKey: runtime.getSetting(\"GITHUB_APP_PRIVATE_KEY\") ?? undefined,\n installationId: runtime.getSetting(\"GITHUB_INSTALLATION_ID\") ?? undefined,\n };\n\n const result = configSchema.safeParse(rawConfig);\n\n if (!result.success) {\n throw new ConfigError(formatZodErrors(result.error));\n }\n\n return new GitHubPluginConfig(result.data);\n }\n\n static fromSettings(settings: GitHubSettings): GitHubPluginConfig {\n const result = configSchema.safeParse({\n ...settings,\n branch: settings.branch ?? \"main\",\n });\n\n if (!result.success) {\n throw new ConfigError(formatZodErrors(result.error));\n }\n\n return new GitHubPluginConfig(result.data);\n }\n\n static fromEnv(): GitHubPluginConfig {\n const apiToken = process.env.GITHUB_API_TOKEN;\n\n if (!apiToken) {\n throw new MissingSettingError(\"GITHUB_API_TOKEN\");\n }\n\n const rawConfig = {\n apiToken,\n owner: process.env.GITHUB_OWNER,\n repo: process.env.GITHUB_REPO,\n branch: process.env.GITHUB_BRANCH ?? \"main\",\n webhookSecret: process.env.GITHUB_WEBHOOK_SECRET,\n appId: process.env.GITHUB_APP_ID,\n appPrivateKey: process.env.GITHUB_APP_PRIVATE_KEY,\n installationId: process.env.GITHUB_INSTALLATION_ID,\n };\n\n const result = configSchema.safeParse(rawConfig);\n\n if (!result.success) {\n throw new ConfigError(formatZodErrors(result.error));\n }\n\n return new GitHubPluginConfig(result.data);\n }\n\n getRepositoryRef(owner?: string, repo?: string): { owner: string; repo: string } {\n const resolvedOwner = owner ?? this.owner;\n const resolvedRepo = repo ?? this.repo;\n\n if (!resolvedOwner) {\n throw new MissingSettingError(\"owner (GITHUB_OWNER)\");\n }\n\n if (!resolvedRepo) {\n throw new MissingSettingError(\"repo (GITHUB_REPO)\");\n }\n\n return { owner: resolvedOwner, repo: resolvedRepo };\n }\n\n hasAppAuth(): boolean {\n return !!(this.appId && this.appPrivateKey);\n }\n\n validate(): void {\n if (\n !this.apiToken.startsWith(\"ghp_\") &&\n !this.apiToken.startsWith(\"gho_\") &&\n !this.apiToken.startsWith(\"ghu_\") &&\n !this.apiToken.startsWith(\"ghs_\") &&\n !this.apiToken.startsWith(\"ghr_\") &&\n !this.apiToken.startsWith(\"github_pat_\")\n ) {\n console.warn(\"GitHub API token format not recognized. Ensure it is a valid token.\");\n }\n\n if (this.hasAppAuth() && !this.installationId) {\n throw new ConfigError(\n \"GITHUB_INSTALLATION_ID is required when using GitHub App authentication\"\n );\n }\n }\n\n toSettings(): GitHubSettings {\n return {\n apiToken: this.apiToken,\n owner: this.owner,\n repo: this.repo,\n branch: this.branch,\n webhookSecret: this.webhookSecret,\n appId: this.appId,\n appPrivateKey: this.appPrivateKey,\n installationId: this.installationId,\n };\n }\n}\n\nexport function validateGitHubConfig(runtime: IAgentRuntime): GitHubPluginConfig {\n const config = GitHubPluginConfig.fromRuntime(runtime);\n config.validate();\n return config;\n}\n",
|
|
11
|
+
"export class GitHubError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"GitHubError\";\n Object.setPrototypeOf(this, GitHubError.prototype);\n }\n\n isRetryable(): boolean {\n return false;\n }\n\n retryAfterMs(): number | null {\n return null;\n }\n}\n\nexport class ClientNotInitializedError extends GitHubError {\n constructor() {\n super(\"GitHub client not initialized - ensure GITHUB_API_TOKEN is configured\");\n this.name = \"ClientNotInitializedError\";\n Object.setPrototypeOf(this, ClientNotInitializedError.prototype);\n }\n}\n\nexport class ConfigError extends GitHubError {\n constructor(message: string) {\n super(`Configuration error: ${message}`);\n this.name = \"ConfigError\";\n Object.setPrototypeOf(this, ConfigError.prototype);\n }\n}\n\nexport class MissingSettingError extends GitHubError {\n public readonly settingName: string;\n\n constructor(settingName: string) {\n super(`Missing required setting: ${settingName}`);\n this.name = \"MissingSettingError\";\n this.settingName = settingName;\n Object.setPrototypeOf(this, MissingSettingError.prototype);\n }\n}\n\nexport class InvalidArgumentError extends GitHubError {\n constructor(message: string) {\n super(`Invalid argument: ${message}`);\n this.name = \"InvalidArgumentError\";\n Object.setPrototypeOf(this, InvalidArgumentError.prototype);\n }\n}\n\nexport class RepositoryNotFoundError extends GitHubError {\n public readonly owner: string;\n public readonly repo: string;\n\n constructor(owner: string, repo: string) {\n super(`Repository not found: ${owner}/${repo}`);\n this.name = \"RepositoryNotFoundError\";\n this.owner = owner;\n this.repo = repo;\n Object.setPrototypeOf(this, RepositoryNotFoundError.prototype);\n }\n}\n\nexport class BranchNotFoundError extends GitHubError {\n public readonly branch: string;\n\n constructor(branch: string, owner: string, repo: string) {\n super(`Branch not found: ${branch} in ${owner}/${repo}`);\n this.name = \"BranchNotFoundError\";\n this.branch = branch;\n Object.setPrototypeOf(this, BranchNotFoundError.prototype);\n }\n}\n\nexport class FileNotFoundError extends GitHubError {\n public readonly path: string;\n\n constructor(path: string, owner: string, repo: string) {\n super(`File not found: ${path} in ${owner}/${repo}`);\n this.name = \"FileNotFoundError\";\n this.path = path;\n Object.setPrototypeOf(this, FileNotFoundError.prototype);\n }\n}\n\nexport class IssueNotFoundError extends GitHubError {\n public readonly issueNumber: number;\n\n constructor(issueNumber: number, owner: string, repo: string) {\n super(`Issue #${issueNumber} not found in ${owner}/${repo}`);\n this.name = \"IssueNotFoundError\";\n this.issueNumber = issueNumber;\n Object.setPrototypeOf(this, IssueNotFoundError.prototype);\n }\n}\n\nexport class PullRequestNotFoundError extends GitHubError {\n public readonly pullNumber: number;\n\n constructor(pullNumber: number, owner: string, repo: string) {\n super(`Pull request #${pullNumber} not found in ${owner}/${repo}`);\n this.name = \"PullRequestNotFoundError\";\n this.pullNumber = pullNumber;\n Object.setPrototypeOf(this, PullRequestNotFoundError.prototype);\n }\n}\n\nexport class PermissionDeniedError extends GitHubError {\n constructor(action: string) {\n super(`Permission denied: ${action}`);\n this.name = \"PermissionDeniedError\";\n Object.setPrototypeOf(this, PermissionDeniedError.prototype);\n }\n}\n\nexport class RateLimitedError extends GitHubError {\n private readonly _retryAfterMs: number;\n public readonly remaining: number;\n public readonly resetAt: Date;\n\n constructor(retryAfterMs: number, remaining: number, resetAt: Date) {\n super(`Rate limited by GitHub API, retry after ${Math.ceil(retryAfterMs / 1000)}s`);\n this.name = \"RateLimitedError\";\n this._retryAfterMs = retryAfterMs;\n this.remaining = remaining;\n this.resetAt = resetAt;\n Object.setPrototypeOf(this, RateLimitedError.prototype);\n }\n\n override isRetryable(): boolean {\n return true;\n }\n\n override retryAfterMs(): number {\n return this._retryAfterMs;\n }\n}\n\nexport class SecondaryRateLimitError extends GitHubError {\n private readonly _retryAfterMs: number;\n\n constructor(retryAfterMs: number) {\n super(`Secondary rate limit hit, retry after ${Math.ceil(retryAfterMs / 1000)}s`);\n this.name = \"SecondaryRateLimitError\";\n this._retryAfterMs = retryAfterMs;\n Object.setPrototypeOf(this, SecondaryRateLimitError.prototype);\n }\n\n override isRetryable(): boolean {\n return true;\n }\n\n override retryAfterMs(): number {\n return this._retryAfterMs;\n }\n}\n\nexport class TimeoutError extends GitHubError {\n private readonly _timeoutMs: number;\n\n constructor(timeoutMs: number, operation: string) {\n super(`Operation timed out after ${timeoutMs}ms: ${operation}`);\n this.name = \"TimeoutError\";\n this._timeoutMs = timeoutMs;\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n\n override isRetryable(): boolean {\n return true;\n }\n\n override retryAfterMs(): number {\n return Math.floor(this._timeoutMs / 2);\n }\n}\n\nexport class MergeConflictError extends GitHubError {\n public readonly pullNumber: number;\n\n constructor(pullNumber: number, owner: string, repo: string) {\n super(`Merge conflict in pull request #${pullNumber} in ${owner}/${repo}`);\n this.name = \"MergeConflictError\";\n this.pullNumber = pullNumber;\n Object.setPrototypeOf(this, MergeConflictError.prototype);\n }\n}\n\nexport class BranchExistsError extends GitHubError {\n public readonly branch: string;\n\n constructor(branch: string, owner: string, repo: string) {\n super(`Branch already exists: ${branch} in ${owner}/${repo}`);\n this.name = \"BranchExistsError\";\n this.branch = branch;\n Object.setPrototypeOf(this, BranchExistsError.prototype);\n }\n}\n\nexport class ValidationError extends GitHubError {\n public readonly field: string;\n\n constructor(field: string, reason: string) {\n super(`Validation failed for ${field}: ${reason}`);\n this.name = \"ValidationError\";\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\nexport class GitHubApiError extends GitHubError {\n public readonly status: number;\n public readonly code: string | null;\n public readonly documentationUrl: string | null;\n\n constructor(\n status: number,\n message: string,\n code: string | null = null,\n documentationUrl: string | null = null\n ) {\n super(`GitHub API error (${status}): ${message}`);\n this.name = \"GitHubApiError\";\n this.status = status;\n this.code = code;\n this.documentationUrl = documentationUrl;\n Object.setPrototypeOf(this, GitHubApiError.prototype);\n }\n\n override isRetryable(): boolean {\n return this.status >= 500;\n }\n}\n\nexport class NetworkError extends GitHubError {\n constructor(message: string) {\n super(`Network error: ${message}`);\n this.name = \"NetworkError\";\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n\n override isRetryable(): boolean {\n return true;\n }\n\n override retryAfterMs(): number {\n return 1000;\n }\n}\n\nexport class GitOperationError extends GitHubError {\n public readonly operation: string;\n\n constructor(operation: string, reason: string) {\n super(`Git operation failed (${operation}): ${reason}`);\n this.name = \"GitOperationError\";\n this.operation = operation;\n Object.setPrototypeOf(this, GitOperationError.prototype);\n }\n}\n\nexport class WebhookVerificationError extends GitHubError {\n constructor(reason: string) {\n super(`Webhook verification failed: ${reason}`);\n this.name = \"WebhookVerificationError\";\n Object.setPrototypeOf(this, WebhookVerificationError.prototype);\n }\n}\n\ninterface OctokitErrorResponse {\n status: number;\n message?: string;\n response?: {\n headers?: {\n \"retry-after\"?: string;\n \"x-ratelimit-remaining\"?: string;\n \"x-ratelimit-reset\"?: string;\n };\n data?: {\n message?: string;\n errors?: Array<{ code?: string; field?: string; message?: string }>;\n documentation_url?: string;\n };\n };\n}\n\nexport function mapOctokitError(error: unknown, owner: string, repo: string): GitHubError {\n if (error && typeof error === \"object\" && \"status\" in error && typeof error.status === \"number\") {\n const err = error as OctokitErrorResponse;\n\n const message = err.response?.data?.message ?? err.message ?? \"Unknown error\";\n const docUrl = err.response?.data?.documentation_url ?? null;\n\n switch (err.status) {\n case 401:\n return new PermissionDeniedError(\"Invalid or missing authentication token\");\n\n case 403: {\n const remaining = err.response?.headers?.[\"x-ratelimit-remaining\"];\n const reset = err.response?.headers?.[\"x-ratelimit-reset\"];\n\n if (remaining === \"0\" && reset) {\n const resetTime = new Date(Number(reset) * 1000);\n const retryAfter = resetTime.getTime() - Date.now();\n return new RateLimitedError(Math.max(retryAfter, 0), 0, resetTime);\n }\n\n const retryAfter = err.response?.headers?.[\"retry-after\"];\n if (retryAfter) {\n return new SecondaryRateLimitError(Number(retryAfter) * 1000);\n }\n\n return new PermissionDeniedError(message);\n }\n\n case 404:\n if (message.toLowerCase().includes(\"branch\")) {\n return new BranchNotFoundError(\"\", owner, repo);\n }\n if (message.toLowerCase().includes(\"issue\")) {\n return new IssueNotFoundError(0, owner, repo);\n }\n if (message.toLowerCase().includes(\"pull\")) {\n return new PullRequestNotFoundError(0, owner, repo);\n }\n return new RepositoryNotFoundError(owner, repo);\n\n case 409:\n if (message.toLowerCase().includes(\"merge\")) {\n return new MergeConflictError(0, owner, repo);\n }\n if (message.toLowerCase().includes(\"already exists\")) {\n return new BranchExistsError(\"\", owner, repo);\n }\n return new GitHubApiError(err.status, message, null, docUrl);\n\n case 422: {\n const errors = err.response?.data?.errors ?? [];\n if (errors.length > 0) {\n const firstError = errors[0];\n return new ValidationError(firstError?.field ?? \"\", firstError?.message ?? message);\n }\n return new ValidationError(\"\", message);\n }\n\n case 429: {\n const retryAfter = err.response?.headers?.[\"retry-after\"];\n return new SecondaryRateLimitError(retryAfter ? Number(retryAfter) * 1000 : 60000);\n }\n\n default:\n return new GitHubApiError(err.status, message, null, docUrl);\n }\n }\n\n if (\n error instanceof Error &&\n (error.message.includes(\"ECONNREFUSED\") ||\n error.message.includes(\"ETIMEDOUT\") ||\n error.message.includes(\"ENOTFOUND\") ||\n error.message.includes(\"fetch failed\"))\n ) {\n return new NetworkError(error.message);\n }\n\n if (error instanceof Error) {\n return new GitHubError(error.message);\n }\n\n return new GitHubError(String(error));\n}\n",
|
|
12
|
+
"import { z } from \"zod\";\n\nexport interface RepositoryRef {\n /** Repository owner (username or organization) */\n owner: string;\n /** Repository name */\n repo: string;\n}\n\nexport interface FileRef extends RepositoryRef {\n /** File path relative to repository root */\n path: string;\n /** Branch name */\n branch?: string;\n}\n\nexport interface FileChange {\n /** File path relative to repository root */\n path: string;\n /** File content (string for text, base64 for binary) */\n content: string;\n /** Optional encoding (defaults to utf-8) */\n encoding?: \"utf-8\" | \"base64\";\n /** Operation type */\n operation?: \"add\" | \"modify\" | \"delete\";\n}\n\nexport type IssueState = \"open\" | \"closed\";\n\nexport type IssueStateReason = \"completed\" | \"not_planned\" | \"reopened\";\n\nexport interface GitHubIssue {\n /** Issue number */\n number: number;\n /** Issue title */\n title: string;\n /** Issue body/description */\n body: string | null;\n /** Issue state */\n state: IssueState;\n /** State reason */\n stateReason: IssueStateReason | null;\n /** Issue author */\n user: GitHubUser;\n /** Assigned users */\n assignees: GitHubUser[];\n /** Labels */\n labels: GitHubLabel[];\n /** Milestone */\n milestone: GitHubMilestone | null;\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n /** Close timestamp (ISO 8601) */\n closedAt: string | null;\n /** HTML URL */\n htmlUrl: string;\n /** Number of comments */\n comments: number;\n /** Whether this is a pull request */\n isPullRequest: boolean;\n}\n\nexport interface CreateIssueParams extends RepositoryRef {\n /** Issue title */\n title: string;\n /** Issue body/description */\n body?: string;\n /** Assignee usernames */\n assignees?: string[];\n /** Label names */\n labels?: string[];\n /** Milestone number */\n milestone?: number;\n}\n\nexport interface UpdateIssueParams extends RepositoryRef {\n /** Issue number */\n issueNumber: number;\n /** New title */\n title?: string;\n /** New body */\n body?: string;\n /** New state */\n state?: IssueState;\n /** State reason */\n stateReason?: IssueStateReason;\n /** Assignee usernames */\n assignees?: string[];\n /** Label names */\n labels?: string[];\n /** Milestone number */\n milestone?: number | null;\n}\n\nexport interface ListIssuesParams extends RepositoryRef {\n /** Filter by state */\n state?: IssueState | \"all\";\n /** Filter by labels (comma-separated) */\n labels?: string;\n /** Sort field */\n sort?: \"created\" | \"updated\" | \"comments\";\n /** Sort direction */\n direction?: \"asc\" | \"desc\";\n /** Filter by assignee username */\n assignee?: string;\n /** Filter by creator username */\n creator?: string;\n /** Filter by mentioned username */\n mentioned?: string;\n /** Results per page */\n perPage?: number;\n /** Page number */\n page?: number;\n}\n\nexport type PullRequestState = \"open\" | \"closed\";\n\nexport type MergeableState = \"mergeable\" | \"conflicting\" | \"unknown\";\n\nexport interface GitHubPullRequest {\n /** PR number */\n number: number;\n /** PR title */\n title: string;\n /** PR body/description */\n body: string | null;\n /** PR state */\n state: PullRequestState;\n /** Whether PR is a draft */\n draft: boolean;\n /** Whether PR is merged */\n merged: boolean;\n /** Mergeable state */\n mergeable: boolean | null;\n /** Mergeable state detail */\n mergeableState: MergeableState;\n /** PR author */\n user: GitHubUser;\n /** Head branch reference */\n head: GitHubBranchRef;\n /** Base branch reference */\n base: GitHubBranchRef;\n /** Assigned users */\n assignees: GitHubUser[];\n /** Requested reviewers */\n requestedReviewers: GitHubUser[];\n /** Labels */\n labels: GitHubLabel[];\n /** Milestone */\n milestone: GitHubMilestone | null;\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n /** Close timestamp (ISO 8601) */\n closedAt: string | null;\n /** Merge timestamp (ISO 8601) */\n mergedAt: string | null;\n /** HTML URL */\n htmlUrl: string;\n /** Number of commits */\n commits: number;\n /** Number of additions */\n additions: number;\n /** Number of deletions */\n deletions: number;\n /** Number of changed files */\n changedFiles: number;\n}\n\nexport interface GitHubBranchRef {\n /** Branch name */\n ref: string;\n /** Full ref (refs/heads/...) */\n label: string;\n /** Commit SHA */\n sha: string;\n /** Repository info */\n repo: RepositoryRef | null;\n}\n\nexport interface CreatePullRequestParams extends RepositoryRef {\n /** PR title */\n title: string;\n /** PR body/description */\n body?: string;\n /** Head branch name */\n head: string;\n /** Base branch name */\n base: string;\n /** Create as draft */\n draft?: boolean;\n /** Allow maintainer edits */\n maintainerCanModify?: boolean;\n}\n\nexport interface UpdatePullRequestParams extends RepositoryRef {\n /** PR number */\n pullNumber: number;\n /** New title */\n title?: string;\n /** New body */\n body?: string;\n /** New state */\n state?: PullRequestState;\n /** New base branch */\n base?: string;\n /** Maintainer can modify */\n maintainerCanModify?: boolean;\n}\n\nexport interface MergePullRequestParams extends RepositoryRef {\n /** PR number */\n pullNumber: number;\n /** Commit title */\n commitTitle?: string;\n /** Commit message */\n commitMessage?: string;\n /** Merge method */\n mergeMethod?: \"merge\" | \"squash\" | \"rebase\";\n /** SHA to verify */\n sha?: string;\n}\n\nexport interface ListPullRequestsParams extends RepositoryRef {\n /** Filter by state */\n state?: PullRequestState | \"all\";\n /** Filter by head branch */\n head?: string;\n /** Filter by base branch */\n base?: string;\n /** Sort field */\n sort?: \"created\" | \"updated\" | \"popularity\" | \"long-running\";\n /** Sort direction */\n direction?: \"asc\" | \"desc\";\n /** Results per page */\n perPage?: number;\n /** Page number */\n page?: number;\n}\n\nexport type ReviewState = \"APPROVED\" | \"CHANGES_REQUESTED\" | \"COMMENTED\" | \"DISMISSED\" | \"PENDING\";\n\nexport interface GitHubReview {\n /** Review ID */\n id: number;\n /** Review author */\n user: GitHubUser;\n /** Review body */\n body: string | null;\n /** Review state */\n state: ReviewState;\n /** Commit SHA reviewed */\n commitId: string;\n /** HTML URL */\n htmlUrl: string;\n /** Submission timestamp (ISO 8601) */\n submittedAt: string | null;\n}\n\nexport interface GitHubReviewComment {\n id: number;\n body: string;\n path: string;\n line: number | null;\n originalLine: number | null;\n side: \"LEFT\" | \"RIGHT\";\n user: GitHubUser;\n createdAt: string;\n updatedAt: string;\n htmlUrl: string;\n inReplyToId: number | null;\n}\n\nexport interface CreateReviewParams extends RepositoryRef {\n /** PR number */\n pullNumber: number;\n /** Review body */\n body?: string;\n /** Review event */\n event: \"APPROVE\" | \"REQUEST_CHANGES\" | \"COMMENT\";\n /** Commit SHA to review */\n commitId?: string;\n /** Review comments */\n comments?: ReviewCommentInput[];\n}\n\nexport interface ReviewCommentInput {\n /** File path */\n path: string;\n /** Line number */\n line: number;\n /** Comment body */\n body: string;\n /** Diff side */\n side?: \"LEFT\" | \"RIGHT\";\n /** Start line for multi-line comment */\n startLine?: number;\n /** Start side for multi-line comment */\n startSide?: \"LEFT\" | \"RIGHT\";\n}\n\nexport interface GitHubComment {\n /** Comment ID */\n id: number;\n /** Comment body */\n body: string;\n /** Comment author */\n user: GitHubUser;\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n /** HTML URL */\n htmlUrl: string;\n}\n\nexport interface CreateCommentParams extends RepositoryRef {\n /** Issue or PR number */\n issueNumber: number;\n /** Comment body */\n body: string;\n}\n\nexport interface GitHubBranch {\n /** Branch name */\n name: string;\n /** Latest commit SHA */\n sha: string;\n /** Whether branch is protected */\n protected: boolean;\n}\n\nexport interface CreateBranchParams extends RepositoryRef {\n /** New branch name */\n branchName: string;\n /** Source ref (branch name or SHA) */\n fromRef: string;\n}\n\nexport interface GitHubCommit {\n /** Commit SHA */\n sha: string;\n /** Commit message */\n message: string;\n /** Commit author */\n author: GitHubCommitAuthor;\n /** Commit committer */\n committer: GitHubCommitAuthor;\n /** Commit timestamp (ISO 8601) */\n timestamp: string;\n /** HTML URL */\n htmlUrl: string;\n /** Parent commit SHAs */\n parents: string[];\n}\n\nexport interface GitHubCommitAuthor {\n /** Author name */\n name: string;\n /** Author email */\n email: string;\n /** Timestamp (ISO 8601) */\n date: string;\n}\n\nexport interface CreateCommitParams extends RepositoryRef {\n /** Commit message */\n message: string;\n /** Files to commit */\n files: FileChange[];\n /** Branch name */\n branch: string;\n /** Parent commit SHA (optional, uses branch head) */\n parentSha?: string;\n /** Author name (optional, uses authenticated user) */\n authorName?: string;\n /** Author email (optional) */\n authorEmail?: string;\n}\n\nexport interface GitHubFileContent {\n /** File name */\n name: string;\n /** File path */\n path: string;\n /** File content (decoded) */\n content: string;\n /** Content SHA */\n sha: string;\n /** File size in bytes */\n size: number;\n /** File type */\n type: \"file\" | \"dir\" | \"symlink\" | \"submodule\";\n /** Encoding (usually base64) */\n encoding: string;\n /** HTML URL */\n htmlUrl: string;\n /** Download URL */\n downloadUrl: string | null;\n}\n\nexport interface GetFileParams extends FileRef {}\n\nexport interface GitHubDirectoryEntry {\n /** Entry name */\n name: string;\n /** Entry path */\n path: string;\n /** Entry SHA */\n sha: string;\n /** Entry size (0 for directories) */\n size: number;\n /** Entry type */\n type: \"file\" | \"dir\" | \"symlink\" | \"submodule\";\n /** HTML URL */\n htmlUrl: string;\n /** Download URL (null for directories) */\n downloadUrl: string | null;\n}\n\nexport interface GitHubRepository {\n /** Repository ID */\n id: number;\n /** Repository name */\n name: string;\n /** Full name (owner/repo) */\n fullName: string;\n /** Repository owner */\n owner: GitHubUser;\n /** Description */\n description: string | null;\n /** Whether repository is private */\n private: boolean;\n /** Whether repository is a fork */\n fork: boolean;\n /** Default branch name */\n defaultBranch: string;\n /** Primary language */\n language: string | null;\n /** Star count */\n stargazersCount: number;\n /** Fork count */\n forksCount: number;\n /** Open issues count */\n openIssuesCount: number;\n /** Watcher count */\n watchersCount: number;\n /** HTML URL */\n htmlUrl: string;\n /** Clone URL */\n cloneUrl: string;\n /** SSH URL */\n sshUrl: string;\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n /** Last push timestamp (ISO 8601) */\n pushedAt: string;\n /** Topics */\n topics: string[];\n /** License */\n license: GitHubLicense | null;\n}\n\nexport interface GitHubLicense {\n /** License key */\n key: string;\n /** License name */\n name: string;\n /** SPDX ID */\n spdxId: string | null;\n /** URL */\n url: string | null;\n}\n\nexport interface GitHubUser {\n /** User ID */\n id: number;\n /** Username */\n login: string;\n /** Display name */\n name: string | null;\n /** Avatar URL */\n avatarUrl: string;\n /** HTML profile URL */\n htmlUrl: string;\n /** User type */\n type: \"User\" | \"Organization\" | \"Bot\";\n}\n\nexport interface GitHubLabel {\n /** Label ID */\n id: number;\n /** Label name */\n name: string;\n /** Label color (hex without #) */\n color: string;\n /** Label description */\n description: string | null;\n /** Whether this is a default label */\n default: boolean;\n}\n\nexport interface GitHubMilestone {\n /** Milestone number */\n number: number;\n /** Milestone title */\n title: string;\n /** Milestone description */\n description: string | null;\n /** Milestone state */\n state: \"open\" | \"closed\";\n /** Due date (ISO 8601) */\n dueOn: string | null;\n /** Creation timestamp (ISO 8601) */\n createdAt: string;\n /** Last update timestamp (ISO 8601) */\n updatedAt: string;\n /** Close timestamp (ISO 8601) */\n closedAt: string | null;\n /** Open issues count */\n openIssues: number;\n /** Closed issues count */\n closedIssues: number;\n}\n\nexport type GitHubEventType =\n | \"push\"\n | \"pull_request\"\n | \"pull_request_review\"\n | \"pull_request_review_comment\"\n | \"issues\"\n | \"issue_comment\"\n | \"create\"\n | \"delete\"\n | \"fork\"\n | \"star\"\n | \"watch\"\n | \"release\"\n | \"workflow_run\"\n | \"check_run\"\n | \"check_suite\"\n | \"status\";\n\nexport interface GitHubWebhookEvent {\n /** Event action */\n action?: string;\n /** Sender (user who triggered the event) */\n sender: GitHubUser;\n /** Repository */\n repository: GitHubRepository;\n /** Organization (if applicable) */\n organization?: GitHubUser;\n}\n\nexport interface PushEventPayload extends GitHubWebhookEvent {\n /** Ref that was pushed (refs/heads/...) */\n ref: string;\n /** Before SHA */\n before: string;\n /** After SHA */\n after: string;\n /** Whether ref was created */\n created: boolean;\n /** Whether ref was deleted */\n deleted: boolean;\n /** Whether push was forced */\n forced: boolean;\n /** Commits in the push */\n commits: PushCommit[];\n /** Head commit */\n headCommit: PushCommit | null;\n /** Compare URL */\n compare: string;\n /** Pusher info */\n pusher: { name: string; email: string };\n}\n\nexport interface PushCommit {\n /** Commit SHA */\n id: string;\n /** Commit message */\n message: string;\n /** Commit timestamp (ISO 8601) */\n timestamp: string;\n /** Commit URL */\n url: string;\n /** Author */\n author: { name: string; email: string };\n /** Committer */\n committer: { name: string; email: string };\n /** Added files */\n added: string[];\n /** Removed files */\n removed: string[];\n /** Modified files */\n modified: string[];\n}\n\nexport interface PullRequestEventPayload extends GitHubWebhookEvent {\n action:\n | \"opened\"\n | \"closed\"\n | \"reopened\"\n | \"synchronize\"\n | \"edited\"\n | \"assigned\"\n | \"unassigned\"\n | \"labeled\"\n | \"unlabeled\"\n | \"ready_for_review\"\n | \"converted_to_draft\"\n | \"review_requested\"\n | \"review_request_removed\";\n /** Pull request number */\n number: number;\n /** Pull request */\n pullRequest: GitHubPullRequest;\n}\n\nexport interface IssueEventPayload extends GitHubWebhookEvent {\n action:\n | \"opened\"\n | \"closed\"\n | \"reopened\"\n | \"edited\"\n | \"assigned\"\n | \"unassigned\"\n | \"labeled\"\n | \"unlabeled\"\n | \"pinned\"\n | \"unpinned\"\n | \"milestoned\"\n | \"demilestoned\"\n | \"transferred\"\n | \"deleted\";\n /** Issue */\n issue: GitHubIssue;\n}\n\nexport interface CommentEventPayload extends GitHubWebhookEvent {\n action: \"created\" | \"edited\" | \"deleted\";\n /** Issue or PR */\n issue: GitHubIssue;\n /** Comment */\n comment: GitHubComment;\n}\n\nexport interface GitHubSettings {\n /** GitHub API token */\n apiToken: string;\n /** Default repository owner */\n owner?: string;\n /** Default repository name */\n repo?: string;\n /** Default branch */\n branch?: string;\n /** Webhook secret */\n webhookSecret?: string;\n /** GitHub App ID */\n appId?: string;\n /** GitHub App private key */\n appPrivateKey?: string;\n /** GitHub App installation ID */\n installationId?: string;\n}\n\nexport const repositoryRefSchema = z.object({\n owner: z.string().min(1, \"Owner is required\"),\n repo: z.string().min(1, \"Repo is required\"),\n});\n\nexport const fileRefSchema = repositoryRefSchema.extend({\n path: z.string().min(1, \"Path is required\"),\n branch: z.string().optional(),\n});\n\nexport const createIssueSchema = repositoryRefSchema.extend({\n title: z.string().min(1, \"Title is required\"),\n body: z.string().optional(),\n assignees: z.array(z.string()).optional(),\n labels: z.array(z.string()).optional(),\n milestone: z.number().optional(),\n});\n\nexport const updateIssueSchema = repositoryRefSchema.extend({\n issueNumber: z.number().min(1, \"Issue number is required\"),\n title: z.string().optional(),\n body: z.string().optional(),\n state: z.enum([\"open\", \"closed\"]).optional(),\n stateReason: z.enum([\"completed\", \"not_planned\", \"reopened\"]).optional(),\n assignees: z.array(z.string()).optional(),\n labels: z.array(z.string()).optional(),\n milestone: z.number().nullable().optional(),\n});\n\nexport const createPullRequestSchema = repositoryRefSchema.extend({\n title: z.string().min(1, \"Title is required\"),\n body: z.string().optional(),\n head: z.string().min(1, \"Head branch is required\"),\n base: z.string().min(1, \"Base branch is required\"),\n draft: z.boolean().optional(),\n maintainerCanModify: z.boolean().optional(),\n});\n\nexport const createReviewSchema = repositoryRefSchema.extend({\n pullNumber: z.number().min(1, \"Pull request number is required\"),\n body: z.string().optional(),\n event: z.enum([\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"]),\n commitId: z.string().optional(),\n comments: z\n .array(\n z.object({\n path: z.string(),\n line: z.number(),\n body: z.string(),\n side: z.enum([\"LEFT\", \"RIGHT\"]).optional(),\n startLine: z.number().optional(),\n startSide: z.enum([\"LEFT\", \"RIGHT\"]).optional(),\n })\n )\n .optional(),\n});\n\nexport const createCommentSchema = repositoryRefSchema.extend({\n issueNumber: z.number().min(1, \"Issue number is required\"),\n body: z.string().min(1, \"Comment body is required\"),\n});\n\nexport const createBranchSchema = repositoryRefSchema.extend({\n branchName: z.string().min(1, \"Branch name is required\"),\n fromRef: z.string().min(1, \"Source ref is required\"),\n});\n\nexport const createCommitSchema = repositoryRefSchema.extend({\n message: z.string().min(1, \"Commit message is required\"),\n files: z.array(\n z.object({\n path: z.string().min(1, \"File path is required\"),\n content: z.string(),\n encoding: z.enum([\"utf-8\", \"base64\"]).optional(),\n operation: z.enum([\"add\", \"modify\", \"delete\"]).optional(),\n })\n ),\n branch: z.string().min(1, \"Branch is required\"),\n parentSha: z.string().optional(),\n authorName: z.string().optional(),\n authorEmail: z.string().optional(),\n});\n\nexport const mergePullRequestSchema = repositoryRefSchema.extend({\n pullNumber: z.number().min(1, \"Pull request number is required\"),\n commitTitle: z.string().optional(),\n commitMessage: z.string().optional(),\n mergeMethod: z.enum([\"merge\", \"squash\", \"rebase\"]).optional(),\n sha: z.string().optional(),\n});\n\nexport const gitHubSettingsSchema = z.object({\n apiToken: z.string().min(1, \"API token is required\"),\n owner: z.string().optional(),\n repo: z.string().optional(),\n branch: z.string().optional(),\n webhookSecret: z.string().optional(),\n appId: z.string().optional(),\n appPrivateKey: z.string().optional(),\n installationId: z.string().optional(),\n});\n\nexport function formatZodErrors(error: z.ZodError): string {\n const flattened = error.flatten();\n const fieldErrors = Object.entries(flattened.fieldErrors)\n .map(\n ([field, messages]) =>\n `${field}: ${Array.isArray(messages) ? messages.join(\", \") : String(messages)}`\n )\n .join(\"; \");\n const formErrors = flattened.formErrors.join(\", \");\n return [fieldErrors, formErrors].filter(Boolean).join(\"; \");\n}\n",
|
|
13
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { type CreateCommentParams, createCommentSchema, formatZodErrors } from \"../types\";\n\nconst spec = requireActionSpec(\"CREATE_COMMENT\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Comment on issue #42 saying 'I'll take a look at this today'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll add that comment to issue #42.\",\n actions: [\"CREATE_GITHUB_COMMENT\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Reply to PR #15 with 'Thanks for the fix!'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Adding your comment to pull request #15.\",\n actions: [\"CREATE_GITHUB_COMMENT\"],\n },\n },\n ],\n];\n\nexport const createCommentAction: Action = {\n name: \"CREATE_GITHUB_COMMENT\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return text.includes(\"comment\") || text.includes(\"reply\") || text.includes(\"respond\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text ?? \"\";\n\n const params: CreateCommentParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n issueNumber: (state?.issueNumber as number) ?? 0,\n body: (state?.body as string) ?? text,\n };\n\n const validation = createCommentSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid comment parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't create the comment due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const comment = await service.createComment(params);\n\n logger.info(`Created comment on #${params.issueNumber}`);\n\n if (callback) {\n await callback({\n text: `Added comment to #${params.issueNumber}.\\n\\nView it at: ${comment.htmlUrl}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to create comment: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to create the comment: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default createCommentAction;\n",
|
|
14
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { type CreateIssueParams, createIssueSchema, formatZodErrors } from \"../types\";\n\nconst spec = requireActionSpec(\"CREATE_ISSUE\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Create an issue in my-org/my-repo with title 'Bug: Login fails' and body 'Users cannot log in after update'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll create that issue for you in my-org/my-repo.\",\n actions: [\"CREATE_GITHUB_ISSUE\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Open a new issue titled 'Add dark mode support' with labels 'enhancement' and 'ui'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Creating a new issue with the title 'Add dark mode support' and the specified labels.\",\n actions: [\"CREATE_GITHUB_ISSUE\"],\n },\n },\n ],\n];\n\nexport const createIssueAction: Action = {\n name: \"CREATE_GITHUB_ISSUE\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"issue\") ||\n text.includes(\"bug\") ||\n text.includes(\"report\") ||\n text.includes(\"ticket\")\n );\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text ?? \"\";\n\n const params: CreateIssueParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n title: (state?.title as string) ?? text.slice(0, 100),\n body: (state?.body as string) ?? text,\n labels: (state?.labels as string[]) ?? [],\n assignees: (state?.assignees as string[]) ?? [],\n };\n\n const validation = createIssueSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid issue parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't create the issue due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const issue = await service.createIssue(params);\n\n logger.info(`Created issue #${issue.number}: ${issue.title}`);\n\n if (callback) {\n await callback({\n text: `Created issue #${issue.number}: \"${issue.title}\"\\n\\nView it at: ${issue.htmlUrl}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to create issue: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to create the issue: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default createIssueAction;\n",
|
|
15
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { type CreatePullRequestParams, createPullRequestSchema, formatZodErrors } from \"../types\";\n\nconst spec = requireActionSpec(\"CREATE_PULL_REQUEST\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: spec.name,\n content: {\n text: \"Create a pull request from feature/dark-mode to main with title 'Add dark mode support'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll create a pull request from feature/dark-mode to main.\",\n actions: [\"CREATE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Open a PR to merge my-branch into develop\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Creating a pull request to merge my-branch into develop.\",\n actions: [\"CREATE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n];\n\nexport const createPullRequestAction: Action = {\n name: \"CREATE_GITHUB_PULL_REQUEST\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return text.includes(\"pull request\") || text.includes(\"pr\") || text.includes(\"merge\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text ?? \"\";\n\n const params: CreatePullRequestParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n title: (state?.title as string) ?? text.slice(0, 100),\n body: (state?.body as string) ?? text,\n head: (state?.head as string) ?? \"\",\n base: (state?.base as string) ?? service.getConfig().branch ?? \"main\",\n draft: (state?.draft as boolean) ?? false,\n };\n\n const validation = createPullRequestSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid pull request parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't create the pull request due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const pr = await service.createPullRequest(params);\n\n logger.info(`Created pull request #${pr.number}: ${pr.title}`);\n\n if (callback) {\n await callback({\n text: `Created pull request #${pr.number}: \"${pr.title}\"\\n\\nFrom: ${pr.head.ref}\\nTo: ${pr.base.ref}\\n\\nView it at: ${pr.htmlUrl}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to create pull request: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to create the pull request: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default createPullRequestAction;\n",
|
|
16
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { formatZodErrors, type MergePullRequestParams, mergePullRequestSchema } from \"../types\";\n\nconst spec = requireActionSpec(\"MERGE_PULL_REQUEST\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: spec.name,\n content: {\n text: \"Merge pull request #42\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll merge pull request #42.\",\n actions: [\"MERGE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Squash and merge PR #15 with title 'Feature: Add dark mode'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Squash merging pull request #15 with your custom commit title.\",\n actions: [\"MERGE_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n];\n\nexport const mergePullRequestAction: Action = {\n name: \"MERGE_GITHUB_PULL_REQUEST\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return text.includes(\"merge\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text?.toLowerCase() ?? \"\";\n\n let mergeMethod: \"merge\" | \"squash\" | \"rebase\" = \"merge\";\n if (text.includes(\"squash\")) {\n mergeMethod = \"squash\";\n } else if (text.includes(\"rebase\")) {\n mergeMethod = \"rebase\";\n }\n\n const params: MergePullRequestParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n pullNumber: (state?.pullNumber as number) ?? 0,\n commitTitle: state?.commitTitle as string | undefined,\n commitMessage: state?.commitMessage as string | undefined,\n mergeMethod: (state?.mergeMethod as \"merge\" | \"squash\" | \"rebase\") ?? mergeMethod,\n };\n\n const validation = mergePullRequestSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid merge parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't merge the pull request due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const result = await service.mergePullRequest(params);\n\n if (result.merged) {\n logger.info(`Merged pull request #${params.pullNumber}`);\n if (callback) {\n await callback({\n text: `Successfully merged pull request #${params.pullNumber}.\\n\\nMerge commit: ${result.sha.slice(0, 7)}\\nMethod: ${params.mergeMethod}`,\n });\n }\n return { success: true };\n } else {\n logger.warn(`Pull request #${params.pullNumber} was not merged: ${result.message}`);\n if (callback) {\n await callback({\n text: `Could not merge pull request #${params.pullNumber}: ${result.message}`,\n });\n }\n return { success: false };\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to merge pull request: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to merge the pull request: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default mergePullRequestAction;\n",
|
|
17
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport {\n type CreateCommitParams,\n createCommitSchema,\n type FileChange,\n formatZodErrors,\n} from \"../types\";\n\nconst spec = requireActionSpec(\"PUSH_CODE\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: spec.name,\n content: {\n text: \"Push the file changes to the feature/dark-mode branch with message 'Add dark mode styles'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll commit and push those changes to feature/dark-mode.\",\n actions: [\"PUSH_GITHUB_CODE\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Commit these files to main: README.md with content 'Hello World'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"Committing README.md to main branch.\",\n actions: [\"PUSH_GITHUB_CODE\"],\n },\n },\n ],\n];\n\nexport const pushCodeAction: Action = {\n name: \"PUSH_GITHUB_CODE\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"push\") ||\n text.includes(\"commit\") ||\n text.includes(\"save\") ||\n text.includes(\"upload\")\n );\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text ?? \"\";\n\n const files = (state?.files as FileChange[]) ?? [];\n\n const params: CreateCommitParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n message: (state?.message as string) ?? text.slice(0, 100),\n files,\n branch: (state?.branch as string) ?? service.getConfig().branch ?? \"main\",\n authorName: state?.authorName as string | undefined,\n authorEmail: state?.authorEmail as string | undefined,\n };\n\n const validation = createCommitSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid commit parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't push the code due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const commit = await service.createCommit(params);\n\n logger.info(`Created commit ${commit.sha.slice(0, 7)} on ${params.branch}`);\n\n if (callback) {\n await callback({\n text: `Pushed ${files.length} file(s) to ${params.branch}.\\n\\nCommit: ${commit.sha.slice(0, 7)}\\nMessage: ${commit.message}\\n\\nView at: ${commit.htmlUrl}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to push code: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to push the code: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default pushCodeAction;\n",
|
|
18
|
+
"import {\n type Action,\n type ActionExample,\n type ActionResult,\n type Content,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\nimport { type CreateReviewParams, createReviewSchema, formatZodErrors } from \"../types\";\n\nconst spec = requireActionSpec(\"REVIEW_PULL_REQUEST\");\n\nconst examples: ActionExample[][] = [\n [\n {\n name: spec.name,\n content: {\n text: \"Approve pull request #42 with comment 'LGTM!'\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll approve pull request #42 with that comment.\",\n actions: [\"REVIEW_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Request changes on PR #15 - the tests are failing\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I'll request changes on pull request #15 with your feedback.\",\n actions: [\"REVIEW_GITHUB_PULL_REQUEST\"],\n },\n },\n ],\n];\n\nexport const reviewPullRequestAction: Action = {\n name: \"REVIEW_GITHUB_PULL_REQUEST\",\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const service = runtime.getService(GITHUB_SERVICE_NAME);\n if (!service) {\n return false;\n }\n\n const text = (message.content as Content).text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"review\") ||\n text.includes(\"approve\") ||\n text.includes(\"request changes\") ||\n text.includes(\"lgtm\")\n );\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n logger.error(\"GitHub service not available\");\n if (callback) {\n await callback({\n text: \"GitHub service is not available. Please ensure the plugin is properly configured.\",\n });\n }\n return { success: false };\n }\n\n try {\n const content = message.content as Content;\n const text = content.text ?? \"\";\n\n let event: \"APPROVE\" | \"REQUEST_CHANGES\" | \"COMMENT\" = \"COMMENT\";\n const lowerText = text.toLowerCase();\n if (\n lowerText.includes(\"approve\") ||\n lowerText.includes(\"lgtm\") ||\n lowerText.includes(\"looks good\")\n ) {\n event = \"APPROVE\";\n } else if (\n lowerText.includes(\"request changes\") ||\n lowerText.includes(\"needs work\") ||\n lowerText.includes(\"fix\")\n ) {\n event = \"REQUEST_CHANGES\";\n }\n\n const params: CreateReviewParams = {\n owner: (state?.owner as string) ?? service.getConfig().owner ?? \"\",\n repo: (state?.repo as string) ?? service.getConfig().repo ?? \"\",\n pullNumber: (state?.pullNumber as number) ?? 0,\n body: (state?.body as string) ?? text,\n event: (state?.event as \"APPROVE\" | \"REQUEST_CHANGES\" | \"COMMENT\") ?? event,\n };\n\n const validation = createReviewSchema.safeParse(params);\n if (!validation.success) {\n const errors = formatZodErrors(validation.error);\n logger.error(`Invalid review parameters: ${errors}`);\n if (callback) {\n await callback({\n text: `I couldn't create the review due to missing information: ${errors}`,\n });\n }\n return { success: false };\n }\n\n const review = await service.createReview(params);\n\n const eventLabel =\n review.state === \"APPROVED\"\n ? \"approved\"\n : review.state === \"CHANGES_REQUESTED\"\n ? \"requested changes on\"\n : \"commented on\";\n\n logger.info(`Created ${review.state} review on PR #${params.pullNumber}`);\n\n if (callback) {\n await callback({\n text: `I've ${eventLabel} pull request #${params.pullNumber}.\\n\\nView the review at: ${review.htmlUrl}`,\n });\n }\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Failed to create review: ${errorMessage}`);\n\n if (callback) {\n await callback({\n text: `Failed to create the review: ${errorMessage}`,\n });\n }\n\n return { success: false };\n }\n },\n\n examples,\n};\n\nexport default reviewPullRequestAction;\n",
|
|
19
|
+
"export { createBranchAction, default as createBranch } from \"./createBranch\";\nexport { createCommentAction, default as createComment } from \"./createComment\";\nexport { createIssueAction, default as createIssue } from \"./createIssue\";\nexport {\n createPullRequestAction,\n default as createPullRequest,\n} from \"./createPullRequest\";\nexport {\n default as mergePullRequest,\n mergePullRequestAction,\n} from \"./mergePullRequest\";\nexport { default as pushCode, pushCodeAction } from \"./pushCode\";\nexport {\n default as reviewPullRequest,\n reviewPullRequestAction,\n} from \"./reviewPullRequest\";\n\nimport { createBranchAction } from \"./createBranch\";\nimport { createCommentAction } from \"./createComment\";\nimport { createIssueAction } from \"./createIssue\";\nimport { createPullRequestAction } from \"./createPullRequest\";\nimport { mergePullRequestAction } from \"./mergePullRequest\";\nimport { pushCodeAction } from \"./pushCode\";\nimport { reviewPullRequestAction } from \"./reviewPullRequest\";\n\nexport const allActions = [\n createIssueAction,\n createPullRequestAction,\n reviewPullRequestAction,\n createCommentAction,\n createBranchAction,\n pushCodeAction,\n mergePullRequestAction,\n];\n",
|
|
20
|
+
"import type {\n Content,\n IAgentRuntime,\n Memory,\n Provider,\n ProviderResult,\n State,\n} from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\n\nfunction extractIssueNumber(text: string): number | null {\n const patterns = [/#(\\d+)/, /issue\\s*#?(\\d+)/i, /pr\\s*#?(\\d+)/i, /pull\\s*request\\s*#?(\\d+)/i];\n\n for (const pattern of patterns) {\n const match = text.match(pattern);\n if (match?.[1]) {\n return Number.parseInt(match[1], 10);\n }\n }\n\n return null;\n}\n\nconst spec = requireProviderSpec(\"issueContext\");\n\nexport const issueContextProvider: Provider = {\n name: spec.name,\n description:\n \"Provides detailed context about a specific GitHub issue or pull request when referenced\",\n\n get: async (runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n return { text: null };\n }\n\n const text = (message.content as Content).text ?? \"\";\n const issueNumber = extractIssueNumber(text);\n\n if (!issueNumber) {\n return { text: null };\n }\n\n try {\n const config = service.getConfig();\n\n if (!config.owner || !config.repo) {\n return { text: null };\n }\n\n try {\n const issue = await service.getIssue({\n owner: config.owner,\n repo: config.repo,\n issueNumber,\n });\n\n if (issue.isPullRequest) {\n const pr = await service.getPullRequest({\n owner: config.owner,\n repo: config.repo,\n pullNumber: issueNumber,\n });\n\n const labels = pr.labels.map((l) => l.name).join(\", \");\n const assignees = pr.assignees.map((a) => a.login).join(\", \");\n const reviewers = pr.requestedReviewers.map((r) => r.login).join(\", \");\n\n const parts = [\n `## Pull Request #${pr.number}: ${pr.title}`,\n \"\",\n `**State:** ${pr.state}${pr.draft ? \" (Draft)\" : \"\"}${pr.merged ? \" (Merged)\" : \"\"}`,\n `**Author:** ${pr.user.login}`,\n `**Branch:** ${pr.head.ref} → ${pr.base.ref}`,\n `**Created:** ${pr.createdAt}`,\n `**Updated:** ${pr.updatedAt}`,\n ];\n\n if (labels) {\n parts.push(`**Labels:** ${labels}`);\n }\n if (assignees) {\n parts.push(`**Assignees:** ${assignees}`);\n }\n if (reviewers) {\n parts.push(`**Reviewers Requested:** ${reviewers}`);\n }\n\n parts.push(\n \"\",\n `**Changes:** +${pr.additions} / -${pr.deletions} (${pr.changedFiles} files)`,\n \"\",\n \"### Description\",\n pr.body ?? \"_No description provided_\",\n \"\",\n `**URL:** ${pr.htmlUrl}`\n );\n\n return { text: parts.join(\"\\n\") };\n }\n\n const labels = issue.labels.map((l) => l.name).join(\", \");\n const assignees = issue.assignees.map((a) => a.login).join(\", \");\n\n const parts = [\n `## Issue #${issue.number}: ${issue.title}`,\n \"\",\n `**State:** ${issue.state}${issue.stateReason ? ` (${issue.stateReason})` : \"\"}`,\n `**Author:** ${issue.user.login}`,\n `**Created:** ${issue.createdAt}`,\n `**Updated:** ${issue.updatedAt}`,\n `**Comments:** ${issue.comments}`,\n ];\n\n if (labels) {\n parts.push(`**Labels:** ${labels}`);\n }\n if (assignees) {\n parts.push(`**Assignees:** ${assignees}`);\n }\n if (issue.milestone) {\n parts.push(`**Milestone:** ${issue.milestone.title}`);\n }\n\n parts.push(\n \"\",\n \"### Description\",\n issue.body ?? \"_No description provided_\",\n \"\",\n `**URL:** ${issue.htmlUrl}`\n );\n\n return { text: parts.join(\"\\n\") };\n } catch {\n return {\n text: `Issue/PR #${issueNumber} not found in ${config.owner}/${config.repo}`,\n };\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return { text: `Unable to fetch issue context: ${errorMessage}` };\n }\n },\n};\n\nexport default issueContextProvider;\n",
|
|
21
|
+
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport { GITHUB_SERVICE_NAME, type GitHubService } from \"../service\";\n\nconst spec = requireProviderSpec(\"repositoryState\");\n\nexport const repositoryStateProvider: Provider = {\n name: spec.name,\n description: \"Provides context about the current GitHub repository including recent activity\",\n\n get: async (runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> => {\n const service = runtime.getService<GitHubService>(GITHUB_SERVICE_NAME);\n\n if (!service) {\n return { text: null };\n }\n\n try {\n const config = service.getConfig();\n\n if (!config.owner || !config.repo) {\n return {\n text: \"GitHub repository not configured. Please set GITHUB_OWNER and GITHUB_REPO.\",\n };\n }\n\n const repo = await service.getRepository({\n owner: config.owner,\n repo: config.repo,\n });\n\n const issues = await service.listIssues({\n owner: config.owner,\n repo: config.repo,\n state: \"open\",\n perPage: 5,\n });\n\n const pullRequests = await service.listPullRequests({\n owner: config.owner,\n repo: config.repo,\n state: \"open\",\n perPage: 5,\n });\n\n const parts: string[] = [\n `## GitHub Repository: ${repo.fullName}`,\n \"\",\n `**Description:** ${repo.description ?? \"No description\"}`,\n `**Default Branch:** ${repo.defaultBranch}`,\n `**Language:** ${repo.language ?? \"Not specified\"}`,\n `**Stars:** ${repo.stargazersCount} | **Forks:** ${repo.forksCount}`,\n `**Open Issues:** ${repo.openIssuesCount}`,\n \"\",\n ];\n\n if (issues.length > 0) {\n parts.push(\"### Recent Open Issues\");\n for (const issue of issues) {\n const labels = issue.labels.map((l) => l.name).join(\", \");\n parts.push(`- #${issue.number}: ${issue.title}${labels ? ` [${labels}]` : \"\"}`);\n }\n parts.push(\"\");\n }\n\n if (pullRequests.length > 0) {\n parts.push(\"### Recent Open Pull Requests\");\n for (const pr of pullRequests) {\n const status = pr.draft ? \"[DRAFT] \" : \"\";\n parts.push(`- #${pr.number}: ${status}${pr.title} (${pr.head.ref} → ${pr.base.ref})`);\n }\n parts.push(\"\");\n }\n\n return { text: parts.join(\"\\n\") };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n return {\n text: `Unable to fetch GitHub repository state: ${errorMessage}`,\n };\n }\n },\n};\n\nexport default repositoryStateProvider;\n",
|
|
22
|
+
"export { default as issueContext, issueContextProvider } from \"./issueContext\";\nexport {\n default as repositoryState,\n repositoryStateProvider,\n} from \"./repositoryState\";\n\nimport { issueContextProvider } from \"./issueContext\";\nimport { repositoryStateProvider } from \"./repositoryState\";\n\nexport const allProviders = [repositoryStateProvider, issueContextProvider];\n"
|
|
23
|
+
],
|
|
24
|
+
"mappings": ";AAAA,mBAA6B;;;ACA7B;AAAA,YAQE;AAAA;;;ACoBK,IAAM,kBAAkB;AAAA,EAC7B,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,EACF;AACF;AACO,IAAM,iBAAiB;AAAA,EAC5B,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,IACf;AAAA,EACF;AACF;AACO,IAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,aACE;AAAA,MACF,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AACF;AACO,IAAM,mBAAmB;AAAA,EAC9B,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,aACE;AAAA,MACF,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AACF;AACO,IAAM,qBAAqB;AAAA,EAChC,SAAS;AAAA,EACT,YAAY,CAAC;AACf;AACO,IAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,YAAY,CAAC;AACf;AAEO,IAAM,iBAAuC,gBAAgB;AAC7D,IAAM,gBAAsC,eAAe;AAC3D,IAAM,mBAA2C,kBAAkB;AACnE,IAAM,kBAA0C,iBAAiB;AACjE,IAAM,oBAA6C,mBAAmB;AACtE,IAAM,mBAA4C,kBAAkB;;;ACrI3E,IAAM,gBAAgB,IAAI,IAAuB,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAC7F,IAAM,eAAe,IAAI,IAAuB,cAAc,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3F,IAAM,kBAAkB,IAAI,IAC1B,iBAAiB,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAC/C;AACA,IAAM,iBAAiB,IAAI,IAAyB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AACjG,IAAM,mBAAmB,IAAI,IAC3B,kBAAkB,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAChD;AACA,IAAM,kBAAkB,IAAI,IAC1B,iBAAiB,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAC/C;AAOO,SAAS,aAAa,CAAC,MAAqC;AAAA,EACjE,OAAO,cAAc,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI;AAAA;AASlD,SAAS,iBAAiB,CAAC,MAAyB;AAAA,EACzD,MAAM,OAAO,cAAc,IAAI;AAAA,EAC/B,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,0BAA0B,MAAM;AAAA,EAClD;AAAA,EACA,OAAO;AAAA;AAQF,SAAS,eAAe,CAAC,MAAuC;AAAA,EACrE,OAAO,gBAAgB,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI;AAAA;AAStD,SAAS,mBAAmB,CAAC,MAA2B;AAAA,EAC7D,MAAM,OAAO,gBAAgB,IAAI;AAAA,EACjC,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,4BAA4B,MAAM;AAAA,EACpD;AAAA,EACA,OAAO;AAAA;;;AC7ET;AACA;;;ACAA,cAAS;;;ACDF,MAAM,oBAAoB,MAAM;AAAA,EACrC,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,OAAO,eAAe,MAAM,YAAY,SAAS;AAAA;AAAA,EAGnD,WAAW,GAAY;AAAA,IACrB,OAAO;AAAA;AAAA,EAGT,YAAY,GAAkB;AAAA,IAC5B,OAAO;AAAA;AAEX;AAUO,MAAM,oBAAoB,YAAY;AAAA,EAC3C,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,wBAAwB,SAAS;AAAA,IACvC,KAAK,OAAO;AAAA,IACZ,OAAO,eAAe,MAAM,YAAY,SAAS;AAAA;AAErD;AAAA;AAEO,MAAM,4BAA4B,YAAY;AAAA,EACnC;AAAA,EAEhB,WAAW,CAAC,aAAqB;AAAA,IAC/B,MAAM,6BAA6B,aAAa;AAAA,IAChD,KAAK,OAAO;AAAA,IACZ,KAAK,cAAc;AAAA,IACnB,OAAO,eAAe,MAAM,oBAAoB,SAAS;AAAA;AAE7D;AAkCO,MAAM,0BAA0B,YAAY;AAAA,EACjC;AAAA,EAEhB,WAAW,CAAC,MAAc,OAAe,MAAc;AAAA,IACrD,MAAM,mBAAmB,WAAW,SAAS,MAAM;AAAA,IACnD,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,OAAO,eAAe,MAAM,kBAAkB,SAAS;AAAA;AAE3D;;;ACpFA;AA+pBO,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB;AAC5C,CAAC;AAEM,IAAM,gBAAgB,oBAAoB,OAAO;AAAA,EACtD,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB;AAAA,EAC1C,QAAQ,EAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,oBAAoB,oBAAoB,OAAO;AAAA,EAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,oBAAoB,oBAAoB,OAAO;AAAA,EAC1D,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,0BAA0B;AAAA,EACzD,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC3C,aAAa,EAAE,KAAK,CAAC,aAAa,eAAe,UAAU,CAAC,EAAE,SAAS;AAAA,EACvE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAEM,IAAM,0BAA0B,oBAAoB,OAAO;AAAA,EAChE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,yBAAyB;AAAA,EACjD,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,yBAAyB;AAAA,EACjD,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,qBAAqB,EAAE,QAAQ,EAAE,SAAS;AAC5C,CAAC;AAEM,IAAM,qBAAqB,oBAAoB,OAAO;AAAA,EAC3D,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,iCAAiC;AAAA,EAC/D,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,EAAE,KAAK,CAAC,WAAW,mBAAmB,SAAS,CAAC;AAAA,EACvD,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EACP,MACC,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,EAAE,SAAS;AAAA,IACzC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,WAAW,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,EAAE,SAAS;AAAA,EAChD,CAAC,CACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,sBAAsB,oBAAoB,OAAO;AAAA,EAC5D,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,0BAA0B;AAAA,EACzD,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,0BAA0B;AACpD,CAAC;AAEM,IAAM,qBAAqB,oBAAoB,OAAO;AAAA,EAC3D,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,yBAAyB;AAAA,EACvD,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB;AACrD,CAAC;AAEM,IAAM,qBAAqB,oBAAoB,OAAO;AAAA,EAC3D,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,4BAA4B;AAAA,EACvD,OAAO,EAAE,MACP,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,uBAAuB;AAAA,IAC/C,SAAS,EAAE,OAAO;AAAA,IAClB,UAAU,EAAE,KAAK,CAAC,SAAS,QAAQ,CAAC,EAAE,SAAS;AAAA,IAC/C,WAAW,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC1D,CAAC,CACH;AAAA,EACA,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB;AAAA,EAC9C,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,yBAAyB,oBAAoB,OAAO;AAAA,EAC/D,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,iCAAiC;AAAA,EAC/D,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,KAAK,CAAC,SAAS,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC5D,KAAK,EAAE,OAAO,EAAE,SAAS;AAC3B,CAAC;AAEM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,uBAAuB;AAAA,EACnD,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AACtC,CAAC;AAEM,SAAS,eAAe,CAAC,OAA2B;AAAA,EACzD,MAAM,YAAY,MAAM,QAAQ;AAAA,EAChC,MAAM,cAAc,OAAO,QAAQ,UAAU,WAAW,EACrD,IACC,EAAE,OAAO,cACP,GAAG,UAAU,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,QAAQ,GAChF,EACC,KAAK,IAAI;AAAA,EACZ,MAAM,aAAa,UAAU,WAAW,KAAK,IAAI;AAAA,EACjD,OAAO,CAAC,aAAa,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA;;;AFzwB5D,IAAM,eAAe,GAAE,OAAO;AAAA,EAC5B,UAAU,GAAE,OAAO,EAAE,IAAI,GAAG,uBAAuB;AAAA,EACnD,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,GAAE,OAAO,EAAE,QAAQ,MAAM;AAAA,EACjC,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgB,GAAE,OAAO,EAAE,SAAS;AACtC,CAAC;AAAA;AAIM,MAAM,mBAAmB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,QAAsB;AAAA,IACxC,KAAK,WAAW,OAAO;AAAA,IACvB,KAAK,QAAQ,OAAO;AAAA,IACpB,KAAK,OAAO,OAAO;AAAA,IACnB,KAAK,SAAS,OAAO;AAAA,IACrB,KAAK,gBAAgB,OAAO;AAAA,IAC5B,KAAK,QAAQ,OAAO;AAAA,IACpB,KAAK,gBAAgB,OAAO;AAAA,IAC5B,KAAK,iBAAiB,OAAO;AAAA;AAAA,SAGxB,WAAW,CAAC,SAA4C;AAAA,IAC7D,MAAM,WAAW,QAAQ,WAAW,kBAAkB;AAAA,IAEtD,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,oBAAoB,kBAAkB;AAAA,IAClD;AAAA,IAEA,MAAM,YAAY;AAAA,MAChB;AAAA,MACA,OAAO,QAAQ,WAAW,cAAc,KAAK;AAAA,MAC7C,MAAM,QAAQ,WAAW,aAAa,KAAK;AAAA,MAC3C,QAAQ,QAAQ,WAAW,eAAe,KAAK;AAAA,MAC/C,eAAe,QAAQ,WAAW,uBAAuB,KAAK;AAAA,MAC9D,OAAO,QAAQ,WAAW,eAAe,KAAK;AAAA,MAC9C,eAAe,QAAQ,WAAW,wBAAwB,KAAK;AAAA,MAC/D,gBAAgB,QAAQ,WAAW,wBAAwB,KAAK;AAAA,IAClE;AAAA,IAEA,MAAM,SAAS,aAAa,UAAU,SAAS;AAAA,IAE/C,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,MAAM,IAAI,YAAY,gBAAgB,OAAO,KAAK,CAAC;AAAA,IACrD;AAAA,IAEA,OAAO,IAAI,mBAAmB,OAAO,IAAI;AAAA;AAAA,SAGpC,YAAY,CAAC,UAA8C;AAAA,IAChE,MAAM,SAAS,aAAa,UAAU;AAAA,SACjC;AAAA,MACH,QAAQ,SAAS,UAAU;AAAA,IAC7B,CAAC;AAAA,IAED,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,MAAM,IAAI,YAAY,gBAAgB,OAAO,KAAK,CAAC;AAAA,IACrD;AAAA,IAEA,OAAO,IAAI,mBAAmB,OAAO,IAAI;AAAA;AAAA,SAGpC,OAAO,GAAuB;AAAA,IACnC,MAAM,WAAW,QAAQ,IAAI;AAAA,IAE7B,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,oBAAoB,kBAAkB;AAAA,IAClD;AAAA,IAEA,MAAM,YAAY;AAAA,MAChB;AAAA,MACA,OAAO,QAAQ,IAAI;AAAA,MACnB,MAAM,QAAQ,IAAI;AAAA,MAClB,QAAQ,QAAQ,IAAI,iBAAiB;AAAA,MACrC,eAAe,QAAQ,IAAI;AAAA,MAC3B,OAAO,QAAQ,IAAI;AAAA,MACnB,eAAe,QAAQ,IAAI;AAAA,MAC3B,gBAAgB,QAAQ,IAAI;AAAA,IAC9B;AAAA,IAEA,MAAM,SAAS,aAAa,UAAU,SAAS;AAAA,IAE/C,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,MAAM,IAAI,YAAY,gBAAgB,OAAO,KAAK,CAAC;AAAA,IACrD;AAAA,IAEA,OAAO,IAAI,mBAAmB,OAAO,IAAI;AAAA;AAAA,EAG3C,gBAAgB,CAAC,OAAgB,MAAgD;AAAA,IAC/E,MAAM,gBAAgB,SAAS,KAAK;AAAA,IACpC,MAAM,eAAe,QAAQ,KAAK;AAAA,IAElC,IAAI,CAAC,eAAe;AAAA,MAClB,MAAM,IAAI,oBAAoB,sBAAsB;AAAA,IACtD;AAAA,IAEA,IAAI,CAAC,cAAc;AAAA,MACjB,MAAM,IAAI,oBAAoB,oBAAoB;AAAA,IACpD;AAAA,IAEA,OAAO,EAAE,OAAO,eAAe,MAAM,aAAa;AAAA;AAAA,EAGpD,UAAU,GAAY;AAAA,IACpB,OAAO,CAAC,EAAE,KAAK,SAAS,KAAK;AAAA;AAAA,EAG/B,QAAQ,GAAS;AAAA,IACf,IACE,CAAC,KAAK,SAAS,WAAW,MAAM,KAChC,CAAC,KAAK,SAAS,WAAW,MAAM,KAChC,CAAC,KAAK,SAAS,WAAW,MAAM,KAChC,CAAC,KAAK,SAAS,WAAW,MAAM,KAChC,CAAC,KAAK,SAAS,WAAW,MAAM,KAChC,CAAC,KAAK,SAAS,WAAW,aAAa,GACvC;AAAA,MACA,QAAQ,KAAK,qEAAqE;AAAA,IACpF;AAAA,IAEA,IAAI,KAAK,WAAW,KAAK,CAAC,KAAK,gBAAgB;AAAA,MAC7C,MAAM,IAAI,YACR,yEACF;AAAA,IACF;AAAA;AAAA,EAGF,UAAU,GAAmB;AAAA,IAC3B,OAAO;AAAA,MACL,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK;AAAA,MACpB,gBAAgB,KAAK;AAAA,IACvB;AAAA;AAEJ;AAEO,SAAS,oBAAoB,CAAC,SAA4C;AAAA,EAC/E,MAAM,SAAS,mBAAmB,YAAY,OAAO;AAAA,EACrD,OAAO,SAAS;AAAA,EAChB,OAAO;AAAA;;;AD9HF,IAAM,sBAAsB;AAAA;AAE5B,MAAM,sBAAsB,QAAQ;AAAA,SACzB,cAAc;AAAA,EAEtB,UAA0B;AAAA,EAC1B,UAAqC;AAAA,EAI7C,wBACE;AAAA,MAEE,IAAI,GAAW;AAAA,IACjB,OAAO;AAAA;AAAA,EAGT,SAAS,GAAuB;AAAA,IAC9B,IAAI,CAAC,KAAK,SAAS;AAAA,MACjB,MAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,EAGN,SAAS,GAAY;AAAA,IAC3B,IAAI,CAAC,KAAK,SAAS;AAAA,MACjB,MAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,OAGR,MAAK,CAAC,SAAuC;AAAA,IACjD,OAAO,KAAK,4BAA4B;AAAA,IAExC,KAAK,UAAU,qBAAqB,OAAO;AAAA,IAC3C,MAAM,WAAW,KAAK,QAAQ,WAAW;AAAA,IACzC,KAAK,SAAS;AAAA,MACZ,UAAU,SAAS,YAAY;AAAA,MAC/B,OAAO,SAAS,SAAS;AAAA,MACzB,MAAM,SAAS,QAAQ;AAAA,MACvB,QAAQ,SAAS,UAAU;AAAA,MAC3B,eAAe,SAAS,iBAAiB;AAAA,MACzC,OAAO,SAAS,SAAS;AAAA,MACzB,eAAe,SAAS,iBAAiB;AAAA,MACzC,gBAAgB,SAAS,kBAAkB;AAAA,IAC7C;AAAA,IAEA,KAAK,UAAU,IAAI,QAAQ;AAAA,MACzB,MAAM,KAAK,QAAQ;AAAA,MACnB,WAAW;AAAA,IACb,CAAC;AAAA,IAED,QAAQ,MAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,iBAAiB;AAAA,IACjE,OAAO,KAAK,6CAA6C,KAAK,OAAO;AAAA;AAAA,OAGxD,KAAI,GAAkB;AAAA,IACnC,OAAO,KAAK,4BAA4B;AAAA,IACxC,KAAK,UAAU;AAAA,IACf,KAAK,UAAU;AAAA,IACf,KAAK,SAAS;AAAA,IACd,OAAO,KAAK,wBAAwB;AAAA;AAAA,OAGhC,cAAa,CAAC,QAAkD;AAAA,IACpE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACvD,OAAO,KAAK,cAAc,IAAI;AAAA;AAAA,OAG1B,iBAAgB,CACpB,UACA,SAK6B;AAAA,IAC7B,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,QAAQ,SAAS,WACb,MAAM,OAAO,MAAM,YAAY;AAAA,MAC7B;AAAA,MACA,MAAM,SAAS,QAAQ;AAAA,MACvB,UAAU,SAAS,WAAW;AAAA,MAC9B,MAAM,SAAS,QAAQ;AAAA,IACzB,CAAC,IACD,MAAM,OAAO,MAAM,yBAAyB;AAAA,MAC1C,MAAM,SAAS,QAAQ;AAAA,MACvB,UAAU,SAAS,WAAW;AAAA,MAC9B,MAAM,SAAS,QAAQ;AAAA,IACzB,CAAC;AAAA,IAEL,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA;AAAA,OAGxC,YAAW,CAAC,QAAiD;AAAA,IACjE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,OAAO;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,IACpB,CAAC;AAAA,IAED,OAAO,KAAK,SAAS,IAAI;AAAA;AAAA,OAGrB,SAAQ,CAAC,QAAuE;AAAA,IACpF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,IAAI;AAAA,MACvC;AAAA,MACA;AAAA,MACA,cAAc,OAAO;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,SAAS,IAAI;AAAA;AAAA,OAGrB,YAAW,CAAC,QAAiD;AAAA,IACjE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,OAAO;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,cAAc,OAAO;AAAA,MACrB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO,aAAa;AAAA,IACjC,CAAC;AAAA,IAED,OAAO,KAAK,SAAS,IAAI;AAAA;AAAA,OAGrB,WAAU,CAAC,QAAkD;AAAA,IACjE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,YAAY;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,OAAO,OAAO,SAAS;AAAA,MACvB,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO,QAAQ;AAAA,MACrB,WAAW,OAAO,aAAa;AAAA,MAC/B,UAAU,OAAO;AAAA,MACjB,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO,WAAW;AAAA,MAC5B,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,MAAM,YAAY,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,KAAK,CAAC;AAAA;AAAA,OAGlF,WAAU,CACd,QAIsB;AAAA,IACtB,OAAO,KAAK,YAAY;AAAA,SACnB;AAAA,MACH,OAAO;AAAA,MACP,aAAa,OAAO,UAAU;AAAA,IAChC,CAAC;AAAA;AAAA,OAGG,YAAW,CAAC,QAAuE;AAAA,IACvF,OAAO,KAAK,YAAY;AAAA,SACnB;AAAA,MACH,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC;AAAA;AAAA,OAGG,kBAAiB,CAAC,QAA6D;AAAA,IACnF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,OAAO;AAAA,MACzC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,uBAAuB,OAAO;AAAA,IAChC,CAAC;AAAA,IAED,OAAO,KAAK,eAAe,IAAI;AAAA;AAAA,OAG3B,eAAc,CAAC,QAA4E;AAAA,IAC/F,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,IAAI;AAAA,MACtC;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,IACtB,CAAC;AAAA,IAED,OAAO,KAAK,eAAe,IAAI;AAAA;AAAA,OAG3B,kBAAiB,CAAC,QAA6D;AAAA,IACnF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,OAAO;AAAA,MACzC;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,uBAAuB,OAAO;AAAA,IAChC,CAAC;AAAA,IAED,OAAO,KAAK,eAAe,IAAI;AAAA;AAAA,OAG3B,iBAAgB,CAAC,QAA8D;AAAA,IACnF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,KAAK;AAAA,MACvC;AAAA,MACA;AAAA,MACA,OAAO,OAAO,SAAS;AAAA,MACvB,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,MAAM,OAAO,QAAQ;AAAA,MACrB,WAAW,OAAO,aAAa;AAAA,MAC/B,UAAU,OAAO,WAAW;AAAA,MAC5B,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;AAAA;AAAA,OAG3C,iBAAgB,CACpB,QAC4D;AAAA,IAC5D,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,MAAM;AAAA,MACxC;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,MACvB,cAAc,OAAO,eAAe;AAAA,MACpC,KAAK,OAAO;AAAA,IACd,CAAC;AAAA,IAED,OAAO;AAAA,MACL,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,IAChB;AAAA;AAAA,OAGI,iBAAgB,CACpB,QAC4B;AAAA,IAC5B,OAAO,KAAK,kBAAkB;AAAA,SACzB;AAAA,MACH,OAAO;AAAA,IACT,CAAC;AAAA;AAAA,OAGG,aAAY,CAAC,QAAmD;AAAA,IACpE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,aAAa;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO,UAAU,IAAI,CAAC,OAAO;AAAA,QACrC,MAAM,EAAE;AAAA,QACR,MAAM,EAAE;AAAA,QACR,MAAM,EAAE;AAAA,QACR,MAAM,EAAE;AAAA,QACR,YAAY,EAAE;AAAA,QACd,YAAY,EAAE;AAAA,MAChB,EAAE;AAAA,IACJ,CAAC;AAAA,IAED,OAAO,KAAK,UAAU,IAAI;AAAA;AAAA,OAGtB,YAAW,CAAC,QAAyE;AAAA,IACzF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,YAAY;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,IACtB,CAAC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA;AAAA,OAGpC,cAAa,CAAC,QAAqD;AAAA,IACvE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,cAAc;AAAA,MACjD;AAAA,MACA;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,MAAM,OAAO;AAAA,IACf,CAAC;AAAA,IAED,OAAO,KAAK,WAAW,IAAI;AAAA;AAAA,OAGvB,aAAY,CAChB,QAK0B;AAAA,IAC1B,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,OAAO,aAAa;AAAA,MAChD;AAAA,MACA;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,UAAU,OAAO,WAAW;AAAA,MAC5B,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAAA;AAAA,OAGrC,aAAY,CAAC,QAAmD;AAAA,IACpE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,IAAI;AAAA,IAEJ,IAAI,OAAO,QAAQ,MAAM,iBAAiB,GAAG;AAAA,MAC3C,MAAM,OAAO;AAAA,IACf,EAAO;AAAA,MACL,QAAQ,MAAM,YAAY,MAAM,OAAO,IAAI,OAAO;AAAA,QAChD;AAAA,QACA;AAAA,QACA,KAAK,SAAS,OAAO;AAAA,MACvB,CAAC;AAAA,MACD,MAAM,QAAQ,OAAO;AAAA;AAAA,IAGvB,MAAM,OAAO,IAAI,UAAU;AAAA,MACzB;AAAA,MACA;AAAA,MACA,KAAK,cAAc,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb;AAAA,MACA,WAAW;AAAA,IACb;AAAA;AAAA,OAGI,aAAY,CAAC,QAA+D;AAAA,IAChF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,MAAM,OAAO,IAAI,UAAU;AAAA,MACzB;AAAA,MACA;AAAA,MACA,KAAK,SAAS,OAAO;AAAA,IACvB,CAAC;AAAA;AAAA,OAGG,aAAY,CAChB,QACyB;AAAA,IACzB,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,aAAa;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,UAAU,OAAO,WAAW;AAAA,MAC5B,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,MACtB,MAAM,EAAE;AAAA,MACR,KAAK,EAAE,OAAO;AAAA,MACd,WAAW,EAAE;AAAA,IACf,EAAE;AAAA;AAAA,OAGE,QAAO,CAAC,QAAmD;AAAA,IAC/D,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,IACd,CAAC;AAAA,IAED,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,MACvB,MAAM,IAAI,kBAAkB,GAAG,OAAO,mCAAmC,OAAO,IAAI;AAAA,IACtF;AAAA,IAEA,IAAI,KAAK,SAAS,QAAQ;AAAA,MACxB,MAAM,IAAI,kBAAkB,GAAG,OAAO,sBAAsB,OAAO,IAAI;AAAA,IACzE;AAAA,IAEA,IAAI,UAAU;AAAA,IACd,IAAI,aAAa,QAAQ,KAAK,SAAS;AAAA,MACrC,UAAU,OAAO,KAAK,KAAK,SAAS,QAAQ,EAAE,SAAS,OAAO;AAAA,IAChE;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX;AAAA,MACA,KAAK,KAAK;AAAA,MACV,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,UAAU,cAAc,OAAQ,KAAK,YAAY,WAAY;AAAA,MAC7D,SAAS,KAAK,YAAY;AAAA,MAC1B,aAAa,KAAK;AAAA,IACpB;AAAA;AAAA,OAGI,cAAa,CAAC,QAAwD;AAAA,IAC1E,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,QAAQ,SAAS,MAAM,OAAO,MAAM,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,IACd,CAAC;AAAA,IAED,IAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AAAA,MACxB,MAAM,IAAI,kBAAkB,GAAG,OAAO,mCAAmC,OAAO,IAAI;AAAA,IACtF;AAAA,IAEA,OAAO,KAAK,IAAI,CAAC,WAAW;AAAA,MAC1B,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,KAAK,MAAM;AAAA,MACX,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM,YAAY;AAAA,MAC3B,aAAa,MAAM;AAAA,IACrB,EAAE;AAAA;AAAA,OAGE,aAAY,CAAC,QAAmD;AAAA,IACpE,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAElD,IAAI,YAAY,OAAO;AAAA,IACvB,IAAI,CAAC,WAAW;AAAA,MACd,QAAQ,MAAM,YAAY,MAAM,OAAO,IAAI,OAAO;AAAA,QAChD;AAAA,QACA;AAAA,QACA,KAAK,SAAS,OAAO;AAAA,MACvB,CAAC;AAAA,MACD,YAAY,QAAQ,OAAO;AAAA,IAC7B;AAAA,IAEA,QAAQ,MAAM,iBAAiB,MAAM,OAAO,IAAI,UAAU;AAAA,MACxD;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,IAED,MAAM,YAKD,CAAC;AAAA,IAEN,WAAW,QAAQ,OAAO,OAAO;AAAA,MAC/B,IAAI,KAAK,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AAAA,MAEA,QAAQ,MAAM,SAAS,MAAM,OAAO,IAAI,WAAW;AAAA,QACjD;AAAA,QACA;AAAA,QACA,SAAS,KAAK;AAAA,QACd,UAAU,KAAK,YAAY;AAAA,MAC7B,CAAC;AAAA,MAED,UAAU,KAAK;AAAA,QACb,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM,YAAY,MAAM,OAAO,IAAI,WAAW;AAAA,MACpD;AAAA,MACA;AAAA,MACA,WAAW,aAAa,KAAK;AAAA,MAC7B,MAAM;AAAA,IACR,CAAC;AAAA,IAED,QAAQ,MAAM,WAAW,MAAM,OAAO,IAAI,aAAa;AAAA,MACrD;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,SAAS,CAAC,SAAS;AAAA,MACnB,QAAQ,OAAO,aACX;AAAA,QACE,MAAM,OAAO;AAAA,QACb,OAAO,OAAO,eAAe,GAAG,OAAO;AAAA,MACzC,IACA;AAAA,IACN,CAAC;AAAA,IAED,MAAM,OAAO,IAAI,UAAU;AAAA,MACzB;AAAA,MACA;AAAA,MACA,KAAK,SAAS,OAAO;AAAA,MACrB,KAAK,OAAO;AAAA,IACd,CAAC;AAAA,IAED,OAAO;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,SAAS,OAAO;AAAA,MAChB,QAAQ;AAAA,QACN,MAAM,OAAO,QAAQ,QAAQ;AAAA,QAC7B,OAAO,OAAO,QAAQ,SAAS;AAAA,QAC/B,MAAM,OAAO,QAAQ,QAAQ,IAAI,KAAK,EAAE,YAAY;AAAA,MACtD;AAAA,MACA,WAAW;AAAA,QACT,MAAM,OAAO,WAAW,QAAQ;AAAA,QAChC,OAAO,OAAO,WAAW,SAAS;AAAA,QAClC,MAAM,OAAO,WAAW,QAAQ,IAAI,KAAK,EAAE,YAAY;AAAA,MACzD;AAAA,MACA,WAAW,OAAO,QAAQ,QAAQ,IAAI,KAAK,EAAE,YAAY;AAAA,MACzD,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,IAC1C;AAAA;AAAA,OAGI,YAAW,CACf,QAMyB;AAAA,IACzB,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,QAAQ,OAAO,SAAS,KAAK,eAAe,MAAM;AAAA,IAClD,MAAM,SAAS,OAAO,UAAU,KAAK,SAAS,UAAU;AAAA,IAExD,QAAQ,SAAS,MAAM,OAAO,MAAM,YAAY;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,MAAM,OAAO;AAAA,MACb,UAAU,OAAO,WAAW;AAAA,MAC5B,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAAA,IAED,OAAO,KAAK,IAAI,CAAC,OAAO;AAAA,MACtB,KAAK,EAAE;AAAA,MACP,SAAS,EAAE,OAAO;AAAA,MAClB,QAAQ;AAAA,QACN,MAAM,EAAE,OAAO,QAAQ,QAAQ;AAAA,QAC/B,OAAO,EAAE,OAAO,QAAQ,SAAS;AAAA,QACjC,MAAM,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACjC;AAAA,MACA,WAAW;AAAA,QACT,MAAM,EAAE,OAAO,WAAW,QAAQ;AAAA,QAClC,OAAO,EAAE,OAAO,WAAW,SAAS;AAAA,QACpC,MAAM,EAAE,OAAO,WAAW,QAAQ;AAAA,MACpC;AAAA,MACA,WAAW,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACpC,SAAS,EAAE;AAAA,MACX,SAAS,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,IACrC,EAAE;AAAA;AAAA,OAGE,qBAAoB,GAAwB;AAAA,IAChD,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,QAAQ,SAAS,MAAM,OAAO,MAAM,iBAAiB;AAAA,IACrD,OAAO,KAAK,QAAQ,IAAI;AAAA;AAAA,OAGpB,QAAO,CAAC,UAAuC;AAAA,IACnD,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,QAAQ,SAAS,MAAM,OAAO,MAAM,cAAc,EAAE,SAAS,CAAC;AAAA,IAC9D,OAAO,KAAK,QAAQ,IAAI;AAAA;AAAA,EAGlB,cAAc,CAAC,QAGrB;AAAA,IACA,MAAM,QAAQ,OAAO,SAAS,KAAK,SAAS;AAAA,IAC5C,MAAM,OAAO,OAAO,QAAQ,KAAK,SAAS;AAAA,IAE1C,IAAI,CAAC,SAAS,CAAC,MAAM;AAAA,MACnB,MAAM,IAAI,MACR,wFACF;AAAA,IACF;AAAA,IAEA,OAAO,EAAE,OAAO,KAAK;AAAA;AAAA,EAGf,aAAa,CAAC,MAAiC;AAAA,IACrD,MAAM,IAAI;AAAA,IACV,MAAM,UAAU,EAAE;AAAA,IAClB,OAAO;AAAA,MACL,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,OAAO,KAAK,QAAQ,EAAE,KAAK;AAAA,MAC3B,aAAa,EAAE;AAAA,MACf,SAAS,EAAE;AAAA,MACX,MAAM,EAAE;AAAA,MACR,eAAe,EAAE;AAAA,MACjB,UAAU,EAAE;AAAA,MACZ,iBAAiB,EAAE;AAAA,MACnB,YAAY,EAAE;AAAA,MACd,iBAAiB,EAAE;AAAA,MACnB,eAAe,EAAE;AAAA,MACjB,SAAS,EAAE;AAAA,MACX,UAAU,EAAE;AAAA,MACZ,QAAQ,EAAE;AAAA,MACV,WAAW,EAAE;AAAA,MACb,WAAW,EAAE;AAAA,MACb,UAAU,EAAE;AAAA,MACZ,QAAS,EAAE,UAAuB,CAAC;AAAA,MACnC,SAAS,UACL;AAAA,QACE,KAAK,QAAQ;AAAA,QACb,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,KAAK,QAAQ;AAAA,MACf,IACA;AAAA,IACN;AAAA;AAAA,EAGM,OAAO,CAAC,MAA2B;AAAA,IACzC,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,IAAI,EAAE;AAAA,MACN,OAAO,EAAE;AAAA,MACT,MAAO,EAAE,QAA0B;AAAA,MACnC,WAAW,EAAE;AAAA,MACb,SAAS,EAAE;AAAA,MACX,MAAM,EAAE;AAAA,IACV;AAAA;AAAA,EAGM,QAAQ,CAAC,MAA4B;AAAA,IAC3C,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,MACT,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,aAAc,EAAE,gBAA4C;AAAA,MAC5D,MAAM,KAAK,QAAQ,EAAE,IAAI;AAAA,MACzB,YAAa,EAAE,aAA2B,CAAC,GAAG,IAAI,CAAC,MAAe,KAAK,QAAQ,CAAC,CAAC;AAAA,MACjF,SAAU,EAAE,UAAwB,CAAC,GAAG,IAAI,CAAC,MAAe,KAAK,SAAS,CAAC,CAAC;AAAA,MAC5E,WAAW,EAAE,YAAY,KAAK,aAAa,EAAE,SAAS,IAAI;AAAA,MAC1D,WAAW,EAAE;AAAA,MACb,WAAW,EAAE;AAAA,MACb,UAAU,EAAE;AAAA,MACZ,SAAS,EAAE;AAAA,MACX,UAAU,EAAE;AAAA,MACZ,eAAe,CAAC,CAAC,EAAE;AAAA,IACrB;AAAA;AAAA,EAGM,QAAQ,CAAC,MAMf;AAAA,IACA,IAAI,OAAO,SAAS,UAAU;AAAA,MAC5B,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,aAAa,EAAE;AAAA,MACf,SAAS,EAAE;AAAA,IACb;AAAA;AAAA,EAGM,YAAY,CAAC,MAWnB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,MACT,aAAa,EAAE;AAAA,MACf,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,MACT,WAAW,EAAE;AAAA,MACb,WAAW,EAAE;AAAA,MACb,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE;AAAA,MACd,cAAc,EAAE;AAAA,IAClB;AAAA;AAAA,EAGM,cAAc,CAAC,MAAkC;AAAA,IACvD,MAAM,IAAI;AAAA,IACV,MAAM,OAAO,EAAE;AAAA,IACf,MAAM,OAAO,EAAE;AAAA,IACf,MAAM,WAAW,KAAK;AAAA,IACtB,MAAM,WAAW,KAAK;AAAA,IACtB,MAAM,gBAAgB,UAAU;AAAA,IAChC,MAAM,gBAAgB,UAAU;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,MACT,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,OAAQ,EAAE,SAAqB;AAAA,MAC/B,QAAS,EAAE,UAAsB;AAAA,MACjC,WAAW,EAAE;AAAA,MACb,gBAAiB,EAAE,mBAAsC;AAAA,MACzD,MAAM,KAAK,QAAQ,EAAE,IAAI;AAAA,MACzB,MAAM;AAAA,QACJ,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,KAAK,KAAK;AAAA,QACV,MAAM,WACF,EAAE,OAAO,eAAe,OAAiB,MAAM,SAAS,KAAe,IACvE;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACJ,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,KAAK,KAAK;AAAA,QACV,MAAM,WACF,EAAE,OAAO,eAAe,OAAiB,MAAM,SAAS,KAAe,IACvE;AAAA,MACN;AAAA,MACA,YAAa,EAAE,aAA2B,CAAC,GAAG,IAAI,CAAC,MAAe,KAAK,QAAQ,CAAC,CAAC;AAAA,MACjF,qBAAsB,EAAE,uBAAqC,CAAC,GAAG,IAAI,CAAC,MACpE,KAAK,QAAQ,CAAC,CAChB;AAAA,MACA,SAAU,EAAE,UAAwB,CAAC,GAAG,IAAI,CAAC,MAAe,KAAK,SAAS,CAAC,CAAC;AAAA,MAC5E,WAAW,EAAE,YAAY,KAAK,aAAa,EAAE,SAAS,IAAI;AAAA,MAC1D,WAAW,EAAE;AAAA,MACb,WAAW,EAAE;AAAA,MACb,UAAU,EAAE;AAAA,MACZ,UAAU,EAAE;AAAA,MACZ,SAAS,EAAE;AAAA,MACX,SAAU,EAAE,WAAsB;AAAA,MAClC,WAAY,EAAE,aAAwB;AAAA,MACtC,WAAY,EAAE,aAAwB;AAAA,MACtC,cAAe,EAAE,iBAA4B;AAAA,IAC/C;AAAA;AAAA,EAGM,SAAS,CAAC,MAA6B;AAAA,IAC7C,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,IAAI,EAAE;AAAA,MACN,MAAM,KAAK,QAAQ,EAAE,IAAI;AAAA,MACzB,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,UAAU,EAAE;AAAA,MACZ,SAAS,EAAE;AAAA,MACX,aAAa,EAAE;AAAA,IACjB;AAAA;AAAA,EAGM,UAAU,CAAC,MAA8B;AAAA,IAC/C,MAAM,IAAI;AAAA,IACV,OAAO;AAAA,MACL,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,MAAM,KAAK,QAAQ,EAAE,IAAI;AAAA,MACzB,WAAW,EAAE;AAAA,MACb,WAAW,EAAE;AAAA,MACb,SAAS,EAAE;AAAA,IACb;AAAA;AAEJ;;;AHn2BA,IAAM,OAAO,kBAAkB,eAAe;AAE9C,IAAM,WAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,sBAAsB;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,sBAAsB;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,SAAS,KAAK,UAAU,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,KAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OAAO,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,UAAU;AAAA;AAAA,EAGrF,SAAS,OACP,SACA,UACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,SAA6B;AAAA,QACjC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,YAAa,OAAO,cAAyB;AAAA,QAC7C,SAAU,OAAO,WAAsB,QAAQ,UAAU,EAAE,UAAU;AAAA,MACvE;AAAA,MAEA,MAAM,aAAa,mBAAmB,UAAU,MAAM;AAAA,MACtD,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,8BAA8B,QAAQ;AAAA,QACnD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,4DAA4D;AAAA,UACpE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,SAAS,MAAM,QAAQ,aAAa,MAAM;AAAA,MAEhD,QAAO,KAAK,kBAAkB,OAAO,aAAa,OAAO,SAAS;AAAA,MAElE,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,mBAAmB,OAAO,cAAc,OAAO;AAAA;AAAA,iBAA8B,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QAC1G,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,4BAA4B,cAAc;AAAA,MAEvD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,gCAAgC;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;AOnIA;AAAA,YAQE;AAAA;AAQF,IAAM,QAAO,kBAAkB,gBAAgB;AAE/C,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,uBAAuB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,uBAAuB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,sBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OAAO,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,SAAS;AAAA;AAAA,EAGtF,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,MAE7B,MAAM,SAA8B;AAAA,QAClC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,aAAc,OAAO,eAA0B;AAAA,QAC/C,MAAO,OAAO,QAAmB;AAAA,MACnC;AAAA,MAEA,MAAM,aAAa,oBAAoB,UAAU,MAAM;AAAA,MACvD,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,+BAA+B,QAAQ;AAAA,QACpD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,6DAA6D;AAAA,UACrE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,UAAU,MAAM,QAAQ,cAAc,MAAM;AAAA,MAElD,QAAO,KAAK,uBAAuB,OAAO,aAAa;AAAA,MAEvD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,qBAAqB,OAAO;AAAA;AAAA,cAA+B,QAAQ;AAAA,QAC3E,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,6BAA6B,cAAc;AAAA,MAExD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,iCAAiC;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;ACtIA;AAAA,YAQE;AAAA;AAQF,IAAM,QAAO,kBAAkB,cAAc;AAE7C,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,qBAAqB;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,qBAAqB;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAA4B;AAAA,EACvC,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OACE,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,KAAK,KACnB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,QAAQ;AAAA;AAAA,EAI1B,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,MAE7B,MAAM,SAA4B;AAAA,QAChC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,OAAQ,OAAO,SAAoB,KAAK,MAAM,GAAG,GAAG;AAAA,QACpD,MAAO,OAAO,QAAmB;AAAA,QACjC,QAAS,OAAO,UAAuB,CAAC;AAAA,QACxC,WAAY,OAAO,aAA0B,CAAC;AAAA,MAChD;AAAA,MAEA,MAAM,aAAa,kBAAkB,UAAU,MAAM;AAAA,MACrD,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,6BAA6B,QAAQ;AAAA,QAClD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,2DAA2D;AAAA,UACnE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,QAAQ,MAAM,QAAQ,YAAY,MAAM;AAAA,MAE9C,QAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,OAAO;AAAA,MAE5D,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,kBAAkB,MAAM,YAAY,MAAM;AAAA;AAAA,cAAyB,MAAM;AAAA,QACjF,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,2BAA2B,cAAc;AAAA,MAEtD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,+BAA+B;AAAA,QACvC,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;AC7IA;AAAA,YAQE;AAAA;AAQF,IAAM,QAAO,kBAAkB,qBAAqB;AAEpD,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM,MAAK;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,4BAA4B;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,4BAA4B;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0BAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OAAO,KAAK,SAAS,cAAc,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,OAAO;AAAA;AAAA,EAGtF,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,MAE7B,MAAM,SAAkC;AAAA,QACtC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,OAAQ,OAAO,SAAoB,KAAK,MAAM,GAAG,GAAG;AAAA,QACpD,MAAO,OAAO,QAAmB;AAAA,QACjC,MAAO,OAAO,QAAmB;AAAA,QACjC,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,UAAU;AAAA,QAC/D,OAAQ,OAAO,SAAqB;AAAA,MACtC;AAAA,MAEA,MAAM,aAAa,wBAAwB,UAAU,MAAM;AAAA,MAC3D,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,oCAAoC,QAAQ;AAAA,QACzD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,kEAAkE;AAAA,UAC1E,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,KAAK,MAAM,QAAQ,kBAAkB,MAAM;AAAA,MAEjD,QAAO,KAAK,yBAAyB,GAAG,WAAW,GAAG,OAAO;AAAA,MAE7D,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,yBAAyB,GAAG,YAAY,GAAG;AAAA;AAAA,QAAmB,GAAG,KAAK;AAAA,MAAY,GAAG,KAAK;AAAA;AAAA,cAAsB,GAAG;AAAA,QAC3H,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,kCAAkC,cAAc;AAAA,MAE7D,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,sCAAsC;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;ACzIA;AAAA,YAQE;AAAA;AAQF,IAAM,QAAO,kBAAkB,oBAAoB;AAEnD,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM,MAAK;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,2BAA2B;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,2BAA2B;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,yBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OAAO,KAAK,SAAS,OAAO;AAAA;AAAA,EAG9B,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,MAAM,YAAY,KAAK;AAAA,MAE5C,IAAI,cAA6C;AAAA,MACjD,IAAI,KAAK,SAAS,QAAQ,GAAG;AAAA,QAC3B,cAAc;AAAA,MAChB,EAAO,SAAI,KAAK,SAAS,QAAQ,GAAG;AAAA,QAClC,cAAc;AAAA,MAChB;AAAA,MAEA,MAAM,SAAiC;AAAA,QACrC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,YAAa,OAAO,cAAyB;AAAA,QAC7C,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO;AAAA,QACtB,aAAc,OAAO,eAAiD;AAAA,MACxE;AAAA,MAEA,MAAM,aAAa,uBAAuB,UAAU,MAAM;AAAA,MAC1D,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,6BAA6B,QAAQ;AAAA,QAClD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,iEAAiE;AAAA,UACzE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,SAAS,MAAM,QAAQ,iBAAiB,MAAM;AAAA,MAEpD,IAAI,OAAO,QAAQ;AAAA,QACjB,QAAO,KAAK,wBAAwB,OAAO,YAAY;AAAA,QACvD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,qCAAqC,OAAO;AAAA;AAAA,gBAAgC,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,UAAc,OAAO;AAAA,UAC9H,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACzB,EAAO;AAAA,QACL,QAAO,KAAK,iBAAiB,OAAO,8BAA8B,OAAO,SAAS;AAAA,QAClF,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,iCAAiC,OAAO,eAAe,OAAO;AAAA,UACtE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA,MAE1B,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,iCAAiC,cAAc;AAAA,MAE5D,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,qCAAqC;AAAA,QAC7C,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;ACvJA;AAAA,YAQE;AAAA;AAaF,IAAM,QAAO,kBAAkB,WAAW;AAE1C,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM,MAAK;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,kBAAkB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,kBAAkB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,iBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OACE,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,QAAQ;AAAA;AAAA,EAI1B,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,MAE7B,MAAM,QAAS,OAAO,SAA0B,CAAC;AAAA,MAEjD,MAAM,SAA6B;AAAA,QACjC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,SAAU,OAAO,WAAsB,KAAK,MAAM,GAAG,GAAG;AAAA,QACxD;AAAA,QACA,QAAS,OAAO,UAAqB,QAAQ,UAAU,EAAE,UAAU;AAAA,QACnE,YAAY,OAAO;AAAA,QACnB,aAAa,OAAO;AAAA,MACtB;AAAA,MAEA,MAAM,aAAa,mBAAmB,UAAU,MAAM;AAAA,MACtD,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,8BAA8B,QAAQ;AAAA,QACnD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,wDAAwD;AAAA,UAChE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,SAAS,MAAM,QAAQ,aAAa,MAAM;AAAA,MAEhD,QAAO,KAAK,kBAAkB,OAAO,IAAI,MAAM,GAAG,CAAC,QAAQ,OAAO,QAAQ;AAAA,MAE1E,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,UAAU,MAAM,qBAAqB,OAAO;AAAA;AAAA,UAAsB,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,WAAe,OAAO;AAAA;AAAA,WAAuB,OAAO;AAAA,QACnJ,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,wBAAwB,cAAc;AAAA,MAEnD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,4BAA4B;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;ACrJA;AAAA,YAQE;AAAA;AAQF,IAAM,QAAO,kBAAkB,qBAAqB;AAEpD,IAAM,YAA8B;AAAA,EAClC;AAAA,IACE;AAAA,MACE,MAAM,MAAK;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,4BAA4B;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,CAAC,4BAA4B;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0BAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS,MAAK,UAAU,CAAC,GAAG,MAAK,OAAO,IAAI,CAAC;AAAA,EAC7C,aAAa,MAAK;AAAA,EAElB,UAAU,OAAO,SAAwB,SAAiB,WAAqC;AAAA,IAC7F,MAAM,UAAU,QAAQ,WAAW,mBAAmB;AAAA,IACtD,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,MAAM,YAAY,KAAK;AAAA,IACjE,OACE,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,iBAAiB,KAC/B,KAAK,SAAS,MAAM;AAAA;AAAA,EAIxB,SAAS,OACP,SACA,SACA,OACA,UACA,aAC0B;AAAA,IAC1B,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,QAAO,MAAM,8BAA8B;AAAA,MAC3C,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,QAAQ;AAAA,MACxB,MAAM,OAAO,QAAQ,QAAQ;AAAA,MAE7B,IAAI,QAAmD;AAAA,MACvD,MAAM,YAAY,KAAK,YAAY;AAAA,MACnC,IACE,UAAU,SAAS,SAAS,KAC5B,UAAU,SAAS,MAAM,KACzB,UAAU,SAAS,YAAY,GAC/B;AAAA,QACA,QAAQ;AAAA,MACV,EAAO,SACL,UAAU,SAAS,iBAAiB,KACpC,UAAU,SAAS,YAAY,KAC/B,UAAU,SAAS,KAAK,GACxB;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MAEA,MAAM,SAA6B;AAAA,QACjC,OAAQ,OAAO,SAAoB,QAAQ,UAAU,EAAE,SAAS;AAAA,QAChE,MAAO,OAAO,QAAmB,QAAQ,UAAU,EAAE,QAAQ;AAAA,QAC7D,YAAa,OAAO,cAAyB;AAAA,QAC7C,MAAO,OAAO,QAAmB;AAAA,QACjC,OAAQ,OAAO,SAAuD;AAAA,MACxE;AAAA,MAEA,MAAM,aAAa,mBAAmB,UAAU,MAAM;AAAA,MACtD,IAAI,CAAC,WAAW,SAAS;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,KAAK;AAAA,QAC/C,QAAO,MAAM,8BAA8B,QAAQ;AAAA,QACnD,IAAI,UAAU;AAAA,UACZ,MAAM,SAAS;AAAA,YACb,MAAM,4DAA4D;AAAA,UACpE,CAAC;AAAA,QACH;AAAA,QACA,OAAO,EAAE,SAAS,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAM,SAAS,MAAM,QAAQ,aAAa,MAAM;AAAA,MAEhD,MAAM,aACJ,OAAO,UAAU,aACb,aACA,OAAO,UAAU,sBACf,yBACA;AAAA,MAER,QAAO,KAAK,WAAW,OAAO,uBAAuB,OAAO,YAAY;AAAA,MAExE,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,QAAQ,4BAA4B,OAAO;AAAA;AAAA,sBAAsC,OAAO;AAAA,QAChG,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,QAAO,MAAM,4BAA4B,cAAc;AAAA,MAEvD,IAAI,UAAU;AAAA,QACZ,MAAM,SAAS;AAAA,UACb,MAAM,gCAAgC;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,EAAE,SAAS,MAAM;AAAA;AAAA;AAAA,EAI5B;AACF;;AC1IO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACtBA,SAAS,kBAAkB,CAAC,MAA6B;AAAA,EACvD,MAAM,WAAW,CAAC,UAAU,oBAAoB,iBAAiB,2BAA2B;AAAA,EAE5F,WAAW,WAAW,UAAU;AAAA,IAC9B,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,IAChC,IAAI,QAAQ,IAAI;AAAA,MACd,OAAO,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,IAAM,QAAO,oBAAoB,cAAc;AAExC,IAAM,uBAAiC;AAAA,EAC5C,MAAM,MAAK;AAAA,EACX,aACE;AAAA,EAEF,KAAK,OAAO,SAAwB,SAAiB,WAA2C;AAAA,IAC9F,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AAAA,IAEA,MAAM,OAAQ,QAAQ,QAAoB,QAAQ;AAAA,IAClD,MAAM,cAAc,mBAAmB,IAAI;AAAA,IAE3C,IAAI,CAAC,aAAa;AAAA,MAChB,OAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,SAAS,QAAQ,UAAU;AAAA,MAEjC,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;AAAA,QACjC,OAAO,EAAE,MAAM,KAAK;AAAA,MACtB;AAAA,MAEA,IAAI;AAAA,QACF,MAAM,QAAQ,MAAM,QAAQ,SAAS;AAAA,UACnC,OAAO,OAAO;AAAA,UACd,MAAM,OAAO;AAAA,UACb;AAAA,QACF,CAAC;AAAA,QAED,IAAI,MAAM,eAAe;AAAA,UACvB,MAAM,KAAK,MAAM,QAAQ,eAAe;AAAA,YACtC,OAAO,OAAO;AAAA,YACd,MAAM,OAAO;AAAA,YACb,YAAY;AAAA,UACd,CAAC;AAAA,UAED,MAAM,UAAS,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,UACrD,MAAM,aAAY,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,UAC5D,MAAM,YAAY,GAAG,mBAAmB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,UAErE,MAAM,SAAQ;AAAA,YACZ,oBAAoB,GAAG,WAAW,GAAG;AAAA,YACrC;AAAA,YACA,cAAc,GAAG,QAAQ,GAAG,QAAQ,aAAa,KAAK,GAAG,SAAS,cAAc;AAAA,YAChF,eAAe,GAAG,KAAK;AAAA,YACvB,eAAe,GAAG,KAAK,SAAQ,GAAG,KAAK;AAAA,YACvC,gBAAgB,GAAG;AAAA,YACnB,gBAAgB,GAAG;AAAA,UACrB;AAAA,UAEA,IAAI,SAAQ;AAAA,YACV,OAAM,KAAK,eAAe,SAAQ;AAAA,UACpC;AAAA,UACA,IAAI,YAAW;AAAA,YACb,OAAM,KAAK,kBAAkB,YAAW;AAAA,UAC1C;AAAA,UACA,IAAI,WAAW;AAAA,YACb,OAAM,KAAK,4BAA4B,WAAW;AAAA,UACpD;AAAA,UAEA,OAAM,KACJ,IACA,iBAAiB,GAAG,gBAAgB,GAAG,cAAc,GAAG,uBACxD,IACA,mBACA,GAAG,QAAQ,6BACX,IACA,YAAY,GAAG,SACjB;AAAA,UAEA,OAAO,EAAE,MAAM,OAAM,KAAK;AAAA,CAAI,EAAE;AAAA,QAClC;AAAA,QAEA,MAAM,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,QACxD,MAAM,YAAY,MAAM,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,QAE/D,MAAM,QAAQ;AAAA,UACZ,aAAa,MAAM,WAAW,MAAM;AAAA,UACpC;AAAA,UACA,cAAc,MAAM,QAAQ,MAAM,cAAc,KAAK,MAAM,iBAAiB;AAAA,UAC5E,eAAe,MAAM,KAAK;AAAA,UAC1B,gBAAgB,MAAM;AAAA,UACtB,gBAAgB,MAAM;AAAA,UACtB,iBAAiB,MAAM;AAAA,QACzB;AAAA,QAEA,IAAI,QAAQ;AAAA,UACV,MAAM,KAAK,eAAe,QAAQ;AAAA,QACpC;AAAA,QACA,IAAI,WAAW;AAAA,UACb,MAAM,KAAK,kBAAkB,WAAW;AAAA,QAC1C;AAAA,QACA,IAAI,MAAM,WAAW;AAAA,UACnB,MAAM,KAAK,kBAAkB,MAAM,UAAU,OAAO;AAAA,QACtD;AAAA,QAEA,MAAM,KACJ,IACA,mBACA,MAAM,QAAQ,6BACd,IACA,YAAY,MAAM,SACpB;AAAA,QAEA,OAAO,EAAE,MAAM,MAAM,KAAK;AAAA,CAAI,EAAE;AAAA,QAChC,MAAM;AAAA,QACN,OAAO;AAAA,UACL,MAAM,aAAa,4BAA4B,OAAO,SAAS,OAAO;AAAA,QACxE;AAAA;AAAA,MAEF,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,OAAO,EAAE,MAAM,kCAAkC,eAAe;AAAA;AAAA;AAGtE;;AC7IA,IAAM,QAAO,oBAAoB,iBAAiB;AAE3C,IAAM,0BAAoC;AAAA,EAC/C,MAAM,MAAK;AAAA,EACX,aAAa;AAAA,EAEb,KAAK,OAAO,SAAwB,UAAkB,WAA2C;AAAA,IAC/F,MAAM,UAAU,QAAQ,WAA0B,mBAAmB;AAAA,IAErE,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,SAAS,QAAQ,UAAU;AAAA,MAEjC,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;AAAA,QACjC,OAAO;AAAA,UACL,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,MAAM,QAAQ,cAAc;AAAA,QACvC,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,MACf,CAAC;AAAA,MAED,MAAM,SAAS,MAAM,QAAQ,WAAW;AAAA,QACtC,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,QACb,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MAED,MAAM,eAAe,MAAM,QAAQ,iBAAiB;AAAA,QAClD,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,QACb,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MAED,MAAM,QAAkB;AAAA,QACtB,yBAAyB,KAAK;AAAA,QAC9B;AAAA,QACA,oBAAoB,KAAK,eAAe;AAAA,QACxC,uBAAuB,KAAK;AAAA,QAC5B,iBAAiB,KAAK,YAAY;AAAA,QAClC,cAAc,KAAK,gCAAgC,KAAK;AAAA,QACxD,oBAAoB,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,IAAI,OAAO,SAAS,GAAG;AAAA,QACrB,MAAM,KAAK,wBAAwB;AAAA,QACnC,WAAW,SAAS,QAAQ;AAAA,UAC1B,MAAM,SAAS,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,UACxD,MAAM,KAAK,MAAM,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK,YAAY,IAAI;AAAA,QAChF;AAAA,QACA,MAAM,KAAK,EAAE;AAAA,MACf;AAAA,MAEA,IAAI,aAAa,SAAS,GAAG;AAAA,QAC3B,MAAM,KAAK,+BAA+B;AAAA,QAC1C,WAAW,MAAM,cAAc;AAAA,UAC7B,MAAM,SAAS,GAAG,QAAQ,aAAa;AAAA,UACvC,MAAM,KAAK,MAAM,GAAG,WAAW,SAAS,GAAG,UAAU,GAAG,KAAK,SAAQ,GAAG,KAAK,MAAM;AAAA,QACrF;AAAA,QACA,MAAM,KAAK,EAAE;AAAA,MACf;AAAA,MAEA,OAAO,EAAE,MAAM,MAAM,KAAK;AAAA,CAAI,EAAE;AAAA,MAChC,OAAO,OAAO;AAAA,MACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,4CAA4C;AAAA,MACpD;AAAA;AAAA;AAGN;;ACzEO,IAAM,eAAe,CAAC,yBAAyB,oBAAoB;;;AjBJ1E,IAAM,eAAuB;AAAA,EAC3B,MAAM;AAAA,EACN,aACE;AAAA,EACF,UAAU,CAAC,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,WAAW;AAAA,EAEX,MAAM,OAAO,SAAiC,YAA2B;AAAA,IACvE,MAAM,QAAQ,QAAQ,WAAW,kBAAkB;AAAA,IACnD,MAAM,QAAQ,QAAQ,WAAW,cAAc;AAAA,IAC/C,MAAM,OAAO,QAAQ,WAAW,aAAa;AAAA,IAC7C,MAAM,SAAS,QAAQ,WAAW,eAAe,KAAK;AAAA,IAEtD,QAAO,KACL,0BAA0B,QAAQ,eAAe,4BAA4B,SAAS,oBAAoB,QAAQ,sBAAsB,QAC1I;AAAA,IAEA,IAAI,CAAC,OAAO;AAAA,MACV,QAAO,KAAK,+DAA+D;AAAA,IAC7E;AAAA;AAEJ;AAEA,IAAe;",
|
|
25
|
+
"debugId": "31A6850FEF70673064756E2164756E21",
|
|
26
|
+
"names": []
|
|
27
|
+
}
|