@bugzy-ai/bugzy 1.4.0 → 1.5.0

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.
@@ -89,6 +89,14 @@ var INTEGRATIONS = {
89
89
  provider: "teams",
90
90
  requiredMCP: "mcp__teams__*",
91
91
  integrationType: "oauth"
92
+ },
93
+ email: {
94
+ id: "email",
95
+ name: "Email",
96
+ provider: "resend",
97
+ requiredMCP: "mcp__resend__*",
98
+ integrationType: "local"
99
+ // Uses platform API key, no OAuth needed
92
100
  }
93
101
  };
94
102
  var SUBAGENTS = {
@@ -108,9 +116,13 @@ var SUBAGENTS = {
108
116
  name: "Team Communicator",
109
117
  description: "Send notifications and updates to your team",
110
118
  icon: "message-square",
111
- integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],
119
+ integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],
112
120
  model: "sonnet",
113
121
  color: "blue",
122
+ isRequired: true,
123
+ // Required - falls back to email if Slack/Teams not configured
124
+ defaultIntegration: "email",
125
+ // Email is the fallback when OAuth integrations aren't set up
114
126
  version: "1.0.0"
115
127
  },
116
128
  "issue-tracker": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\n * Sub-Agents Metadata\n * Client-safe metadata without file system access\n */\n\n/**\n * Integration type determines how credentials are obtained\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\n * - 'local': No configuration needed (Playwright)\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\n */\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\n\n/**\n * Integration configuration for sub-agents\n */\nexport interface SubAgentIntegration {\n id: string;\n name: string;\n provider: string;\n requiredMCP?: string;\n /** @deprecated Use integrationType instead */\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\n integrationType: IntegrationType;\n}\n\n/**\n * Sub-Agent Metadata\n */\nexport interface SubAgentMetadata {\n role: string;\n name: string;\n description: string;\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\n integrations: SubAgentIntegration[];\n model?: string;\n color?: string;\n isRequired?: boolean;\n version: string;\n}\n\n/**\n * Available integrations by provider\n */\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\n linear: {\n id: 'linear',\n name: 'Linear',\n provider: 'linear',\n requiredMCP: 'mcp__linear__*',\n integrationType: 'oauth'\n },\n jira: {\n id: 'jira',\n name: 'Jira',\n provider: 'jira',\n requiredMCP: 'mcp__jira__*',\n integrationType: 'oauth'\n },\n 'jira-server': {\n id: 'jira-server',\n name: 'Jira Server',\n provider: 'jira-server',\n requiredMCP: 'mcp__jira-server__*',\n integrationType: 'custom'\n },\n notion: {\n id: 'notion',\n name: 'Notion',\n provider: 'notion',\n requiredMCP: 'mcp__notion__*',\n integrationType: 'oauth'\n },\n confluence: {\n id: 'confluence',\n name: 'Confluence',\n provider: 'confluence',\n requiredMCP: 'mcp__confluence__*',\n integrationType: 'oauth'\n },\n slack: {\n id: 'slack',\n name: 'Slack',\n provider: 'slack',\n requiredMCP: 'mcp__slack__*',\n integrationType: 'oauth'\n },\n playwright: {\n id: 'playwright',\n name: 'Playwright',\n provider: 'playwright',\n requiredMCP: 'mcp__playwright__*',\n isLocal: true, // Playwright runs locally, no external connector needed\n integrationType: 'local'\n },\n teams: {\n id: 'teams',\n name: 'Microsoft Teams',\n provider: 'teams',\n requiredMCP: 'mcp__teams__*',\n integrationType: 'oauth'\n }\n};\n\n/**\n * Sub-Agents Registry - metadata only (templates loaded from files)\n */\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\n 'test-runner': {\n role: 'test-runner',\n name: 'Test Runner',\n description: 'Execute automated browser tests (always included)',\n icon: 'play',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'green',\n isRequired: true,\n version: '1.0.0'\n },\n 'team-communicator': {\n role: 'team-communicator',\n name: 'Team Communicator',\n description: 'Send notifications and updates to your team',\n icon: 'message-square',\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],\n model: 'sonnet',\n color: 'blue',\n version: '1.0.0'\n },\n 'issue-tracker': {\n role: 'issue-tracker',\n name: 'Issue Tracker',\n description: 'Automatically create and track bugs and issues',\n icon: 'bot',\n integrations: [\n // INTEGRATIONS.linear,\n // INTEGRATIONS.jira,\n INTEGRATIONS['jira-server'],\n INTEGRATIONS.notion,\n INTEGRATIONS.slack\n ],\n model: 'sonnet',\n color: 'red',\n version: '1.0.0'\n },\n 'documentation-researcher': {\n role: 'documentation-researcher',\n name: 'Documentation Researcher',\n description: 'Search and retrieve information from your documentation',\n icon: 'file-search',\n integrations: [\n INTEGRATIONS.notion,\n // INTEGRATIONS.confluence\n ],\n model: 'sonnet',\n color: 'cyan',\n version: '1.0.0'\n },\n 'test-code-generator': {\n role: 'test-code-generator',\n name: 'Test Code Generator',\n description: 'Generate automated Playwright test scripts and Page Objects',\n icon: 'code',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'purple',\n isRequired: true, // Required for automated test generation\n version: '1.0.0'\n },\n 'test-debugger-fixer': {\n role: 'test-debugger-fixer',\n name: 'Test Debugger & Fixer',\n description: 'Debug and fix failing automated tests automatically',\n icon: 'wrench',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'yellow',\n isRequired: true, // Required for automated test execution and fixing\n version: '1.0.0'\n }\n};\n\n/**\n * Get all available sub-agents\n */\nexport function getAllSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS);\n}\n\n/**\n * Get sub-agent by role\n */\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\n return SUBAGENTS[role];\n}\n\n/**\n * Get integration by ID\n */\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\n return INTEGRATIONS[integrationId];\n}\n\n/**\n * Get required sub-agents (always included)\n */\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\n}\n\n/**\n * Get optional sub-agents (user can choose)\n */\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\n}\n\n/**\n * Map integration ID to display name\n */\nexport function getIntegrationDisplayName(integrationId: string): string {\n return INTEGRATIONS[integrationId]?.name || integrationId;\n}\n\n/**\n * Get required integrations from a list of subagent roles\n */\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\n const integrations = new Set<string>();\n\n for (const role of roles) {\n const agent = SUBAGENTS[role];\n if (agent?.integrations) {\n agent.integrations.forEach(int => integrations.add(int.id));\n }\n }\n\n return Array.from(integrations);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\n * Sub-Agents Metadata\n * Client-safe metadata without file system access\n */\n\n/**\n * Integration type determines how credentials are obtained\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\n * - 'local': No configuration needed (Playwright)\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\n */\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\n\n/**\n * Integration configuration for sub-agents\n */\nexport interface SubAgentIntegration {\n id: string;\n name: string;\n provider: string;\n requiredMCP?: string;\n /** @deprecated Use integrationType instead */\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\n integrationType: IntegrationType;\n}\n\n/**\n * Sub-Agent Metadata\n */\nexport interface SubAgentMetadata {\n role: string;\n name: string;\n description: string;\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\n integrations: SubAgentIntegration[];\n model?: string;\n color?: string;\n isRequired?: boolean;\n defaultIntegration?: string; // Fallback integration ID when others aren't configured\n version: string;\n}\n\n/**\n * Available integrations by provider\n */\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\n linear: {\n id: 'linear',\n name: 'Linear',\n provider: 'linear',\n requiredMCP: 'mcp__linear__*',\n integrationType: 'oauth'\n },\n jira: {\n id: 'jira',\n name: 'Jira',\n provider: 'jira',\n requiredMCP: 'mcp__jira__*',\n integrationType: 'oauth'\n },\n 'jira-server': {\n id: 'jira-server',\n name: 'Jira Server',\n provider: 'jira-server',\n requiredMCP: 'mcp__jira-server__*',\n integrationType: 'custom'\n },\n notion: {\n id: 'notion',\n name: 'Notion',\n provider: 'notion',\n requiredMCP: 'mcp__notion__*',\n integrationType: 'oauth'\n },\n confluence: {\n id: 'confluence',\n name: 'Confluence',\n provider: 'confluence',\n requiredMCP: 'mcp__confluence__*',\n integrationType: 'oauth'\n },\n slack: {\n id: 'slack',\n name: 'Slack',\n provider: 'slack',\n requiredMCP: 'mcp__slack__*',\n integrationType: 'oauth'\n },\n playwright: {\n id: 'playwright',\n name: 'Playwright',\n provider: 'playwright',\n requiredMCP: 'mcp__playwright__*',\n isLocal: true, // Playwright runs locally, no external connector needed\n integrationType: 'local'\n },\n teams: {\n id: 'teams',\n name: 'Microsoft Teams',\n provider: 'teams',\n requiredMCP: 'mcp__teams__*',\n integrationType: 'oauth'\n },\n email: {\n id: 'email',\n name: 'Email',\n provider: 'resend',\n requiredMCP: 'mcp__resend__*',\n integrationType: 'local' // Uses platform API key, no OAuth needed\n }\n};\n\n/**\n * Sub-Agents Registry - metadata only (templates loaded from files)\n */\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\n 'test-runner': {\n role: 'test-runner',\n name: 'Test Runner',\n description: 'Execute automated browser tests (always included)',\n icon: 'play',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'green',\n isRequired: true,\n version: '1.0.0'\n },\n 'team-communicator': {\n role: 'team-communicator',\n name: 'Team Communicator',\n description: 'Send notifications and updates to your team',\n icon: 'message-square',\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],\n model: 'sonnet',\n color: 'blue',\n isRequired: true, // Required - falls back to email if Slack/Teams not configured\n defaultIntegration: 'email', // Email is the fallback when OAuth integrations aren't set up\n version: '1.0.0'\n },\n 'issue-tracker': {\n role: 'issue-tracker',\n name: 'Issue Tracker',\n description: 'Automatically create and track bugs and issues',\n icon: 'bot',\n integrations: [\n // INTEGRATIONS.linear,\n // INTEGRATIONS.jira,\n INTEGRATIONS['jira-server'],\n INTEGRATIONS.notion,\n INTEGRATIONS.slack\n ],\n model: 'sonnet',\n color: 'red',\n version: '1.0.0'\n },\n 'documentation-researcher': {\n role: 'documentation-researcher',\n name: 'Documentation Researcher',\n description: 'Search and retrieve information from your documentation',\n icon: 'file-search',\n integrations: [\n INTEGRATIONS.notion,\n // INTEGRATIONS.confluence\n ],\n model: 'sonnet',\n color: 'cyan',\n version: '1.0.0'\n },\n 'test-code-generator': {\n role: 'test-code-generator',\n name: 'Test Code Generator',\n description: 'Generate automated Playwright test scripts and Page Objects',\n icon: 'code',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'purple',\n isRequired: true, // Required for automated test generation\n version: '1.0.0'\n },\n 'test-debugger-fixer': {\n role: 'test-debugger-fixer',\n name: 'Test Debugger & Fixer',\n description: 'Debug and fix failing automated tests automatically',\n icon: 'wrench',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'yellow',\n isRequired: true, // Required for automated test execution and fixing\n version: '1.0.0'\n }\n};\n\n/**\n * Get all available sub-agents\n */\nexport function getAllSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS);\n}\n\n/**\n * Get sub-agent by role\n */\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\n return SUBAGENTS[role];\n}\n\n/**\n * Get integration by ID\n */\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\n return INTEGRATIONS[integrationId];\n}\n\n/**\n * Get required sub-agents (always included)\n */\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\n}\n\n/**\n * Get optional sub-agents (user can choose)\n */\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\n}\n\n/**\n * Map integration ID to display name\n */\nexport function getIntegrationDisplayName(integrationId: string): string {\n return INTEGRATIONS[integrationId]?.name || integrationId;\n}\n\n/**\n * Get required integrations from a list of subagent roles\n */\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\n const integrations = new Set<string>();\n\n for (const role of roles) {\n const agent = SUBAGENTS[role];\n if (agent?.integrations) {\n agent.integrations.forEach(int => integrations.add(int.id));\n }\n }\n\n return Array.from(integrations);\n}\n"],"mappings":"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","names":[]}
@@ -16,6 +16,7 @@ interface SubAgentMetadata {
16
16
  model?: string;
17
17
  color?: string;
18
18
  isRequired?: boolean;
19
+ defaultIntegration?: string;
19
20
  version: string;
20
21
  }
21
22
  declare const INTEGRATIONS: Record<string, SubAgentIntegration>;
@@ -16,6 +16,7 @@ interface SubAgentMetadata {
16
16
  model?: string;
17
17
  color?: string;
18
18
  isRequired?: boolean;
19
+ defaultIntegration?: string;
19
20
  version: string;
20
21
  }
21
22
  declare const INTEGRATIONS: Record<string, SubAgentIntegration>;
@@ -57,6 +57,14 @@ var INTEGRATIONS = {
57
57
  provider: "teams",
58
58
  requiredMCP: "mcp__teams__*",
59
59
  integrationType: "oauth"
60
+ },
61
+ email: {
62
+ id: "email",
63
+ name: "Email",
64
+ provider: "resend",
65
+ requiredMCP: "mcp__resend__*",
66
+ integrationType: "local"
67
+ // Uses platform API key, no OAuth needed
60
68
  }
61
69
  };
62
70
  var SUBAGENTS = {
@@ -76,9 +84,13 @@ var SUBAGENTS = {
76
84
  name: "Team Communicator",
77
85
  description: "Send notifications and updates to your team",
78
86
  icon: "message-square",
79
- integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],
87
+ integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],
80
88
  model: "sonnet",
81
89
  color: "blue",
90
+ isRequired: true,
91
+ // Required - falls back to email if Slack/Teams not configured
92
+ defaultIntegration: "email",
93
+ // Email is the fallback when OAuth integrations aren't set up
82
94
  version: "1.0.0"
83
95
  },
84
96
  "issue-tracker": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\n * Sub-Agents Metadata\n * Client-safe metadata without file system access\n */\n\n/**\n * Integration type determines how credentials are obtained\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\n * - 'local': No configuration needed (Playwright)\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\n */\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\n\n/**\n * Integration configuration for sub-agents\n */\nexport interface SubAgentIntegration {\n id: string;\n name: string;\n provider: string;\n requiredMCP?: string;\n /** @deprecated Use integrationType instead */\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\n integrationType: IntegrationType;\n}\n\n/**\n * Sub-Agent Metadata\n */\nexport interface SubAgentMetadata {\n role: string;\n name: string;\n description: string;\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\n integrations: SubAgentIntegration[];\n model?: string;\n color?: string;\n isRequired?: boolean;\n version: string;\n}\n\n/**\n * Available integrations by provider\n */\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\n linear: {\n id: 'linear',\n name: 'Linear',\n provider: 'linear',\n requiredMCP: 'mcp__linear__*',\n integrationType: 'oauth'\n },\n jira: {\n id: 'jira',\n name: 'Jira',\n provider: 'jira',\n requiredMCP: 'mcp__jira__*',\n integrationType: 'oauth'\n },\n 'jira-server': {\n id: 'jira-server',\n name: 'Jira Server',\n provider: 'jira-server',\n requiredMCP: 'mcp__jira-server__*',\n integrationType: 'custom'\n },\n notion: {\n id: 'notion',\n name: 'Notion',\n provider: 'notion',\n requiredMCP: 'mcp__notion__*',\n integrationType: 'oauth'\n },\n confluence: {\n id: 'confluence',\n name: 'Confluence',\n provider: 'confluence',\n requiredMCP: 'mcp__confluence__*',\n integrationType: 'oauth'\n },\n slack: {\n id: 'slack',\n name: 'Slack',\n provider: 'slack',\n requiredMCP: 'mcp__slack__*',\n integrationType: 'oauth'\n },\n playwright: {\n id: 'playwright',\n name: 'Playwright',\n provider: 'playwright',\n requiredMCP: 'mcp__playwright__*',\n isLocal: true, // Playwright runs locally, no external connector needed\n integrationType: 'local'\n },\n teams: {\n id: 'teams',\n name: 'Microsoft Teams',\n provider: 'teams',\n requiredMCP: 'mcp__teams__*',\n integrationType: 'oauth'\n }\n};\n\n/**\n * Sub-Agents Registry - metadata only (templates loaded from files)\n */\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\n 'test-runner': {\n role: 'test-runner',\n name: 'Test Runner',\n description: 'Execute automated browser tests (always included)',\n icon: 'play',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'green',\n isRequired: true,\n version: '1.0.0'\n },\n 'team-communicator': {\n role: 'team-communicator',\n name: 'Team Communicator',\n description: 'Send notifications and updates to your team',\n icon: 'message-square',\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],\n model: 'sonnet',\n color: 'blue',\n version: '1.0.0'\n },\n 'issue-tracker': {\n role: 'issue-tracker',\n name: 'Issue Tracker',\n description: 'Automatically create and track bugs and issues',\n icon: 'bot',\n integrations: [\n // INTEGRATIONS.linear,\n // INTEGRATIONS.jira,\n INTEGRATIONS['jira-server'],\n INTEGRATIONS.notion,\n INTEGRATIONS.slack\n ],\n model: 'sonnet',\n color: 'red',\n version: '1.0.0'\n },\n 'documentation-researcher': {\n role: 'documentation-researcher',\n name: 'Documentation Researcher',\n description: 'Search and retrieve information from your documentation',\n icon: 'file-search',\n integrations: [\n INTEGRATIONS.notion,\n // INTEGRATIONS.confluence\n ],\n model: 'sonnet',\n color: 'cyan',\n version: '1.0.0'\n },\n 'test-code-generator': {\n role: 'test-code-generator',\n name: 'Test Code Generator',\n description: 'Generate automated Playwright test scripts and Page Objects',\n icon: 'code',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'purple',\n isRequired: true, // Required for automated test generation\n version: '1.0.0'\n },\n 'test-debugger-fixer': {\n role: 'test-debugger-fixer',\n name: 'Test Debugger & Fixer',\n description: 'Debug and fix failing automated tests automatically',\n icon: 'wrench',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'yellow',\n isRequired: true, // Required for automated test execution and fixing\n version: '1.0.0'\n }\n};\n\n/**\n * Get all available sub-agents\n */\nexport function getAllSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS);\n}\n\n/**\n * Get sub-agent by role\n */\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\n return SUBAGENTS[role];\n}\n\n/**\n * Get integration by ID\n */\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\n return INTEGRATIONS[integrationId];\n}\n\n/**\n * Get required sub-agents (always included)\n */\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\n}\n\n/**\n * Get optional sub-agents (user can choose)\n */\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\n}\n\n/**\n * Map integration ID to display name\n */\nexport function getIntegrationDisplayName(integrationId: string): string {\n return INTEGRATIONS[integrationId]?.name || integrationId;\n}\n\n/**\n * Get required integrations from a list of subagent roles\n */\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\n const integrations = new Set<string>();\n\n for (const role of roles) {\n const agent = SUBAGENTS[role];\n if (agent?.integrations) {\n agent.integrations.forEach(int => integrations.add(int.id));\n }\n }\n\n return Array.from(integrations);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\n * Sub-Agents Metadata\n * Client-safe metadata without file system access\n */\n\n/**\n * Integration type determines how credentials are obtained\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\n * - 'local': No configuration needed (Playwright)\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\n */\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\n\n/**\n * Integration configuration for sub-agents\n */\nexport interface SubAgentIntegration {\n id: string;\n name: string;\n provider: string;\n requiredMCP?: string;\n /** @deprecated Use integrationType instead */\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\n integrationType: IntegrationType;\n}\n\n/**\n * Sub-Agent Metadata\n */\nexport interface SubAgentMetadata {\n role: string;\n name: string;\n description: string;\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\n integrations: SubAgentIntegration[];\n model?: string;\n color?: string;\n isRequired?: boolean;\n defaultIntegration?: string; // Fallback integration ID when others aren't configured\n version: string;\n}\n\n/**\n * Available integrations by provider\n */\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\n linear: {\n id: 'linear',\n name: 'Linear',\n provider: 'linear',\n requiredMCP: 'mcp__linear__*',\n integrationType: 'oauth'\n },\n jira: {\n id: 'jira',\n name: 'Jira',\n provider: 'jira',\n requiredMCP: 'mcp__jira__*',\n integrationType: 'oauth'\n },\n 'jira-server': {\n id: 'jira-server',\n name: 'Jira Server',\n provider: 'jira-server',\n requiredMCP: 'mcp__jira-server__*',\n integrationType: 'custom'\n },\n notion: {\n id: 'notion',\n name: 'Notion',\n provider: 'notion',\n requiredMCP: 'mcp__notion__*',\n integrationType: 'oauth'\n },\n confluence: {\n id: 'confluence',\n name: 'Confluence',\n provider: 'confluence',\n requiredMCP: 'mcp__confluence__*',\n integrationType: 'oauth'\n },\n slack: {\n id: 'slack',\n name: 'Slack',\n provider: 'slack',\n requiredMCP: 'mcp__slack__*',\n integrationType: 'oauth'\n },\n playwright: {\n id: 'playwright',\n name: 'Playwright',\n provider: 'playwright',\n requiredMCP: 'mcp__playwright__*',\n isLocal: true, // Playwright runs locally, no external connector needed\n integrationType: 'local'\n },\n teams: {\n id: 'teams',\n name: 'Microsoft Teams',\n provider: 'teams',\n requiredMCP: 'mcp__teams__*',\n integrationType: 'oauth'\n },\n email: {\n id: 'email',\n name: 'Email',\n provider: 'resend',\n requiredMCP: 'mcp__resend__*',\n integrationType: 'local' // Uses platform API key, no OAuth needed\n }\n};\n\n/**\n * Sub-Agents Registry - metadata only (templates loaded from files)\n */\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\n 'test-runner': {\n role: 'test-runner',\n name: 'Test Runner',\n description: 'Execute automated browser tests (always included)',\n icon: 'play',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'green',\n isRequired: true,\n version: '1.0.0'\n },\n 'team-communicator': {\n role: 'team-communicator',\n name: 'Team Communicator',\n description: 'Send notifications and updates to your team',\n icon: 'message-square',\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],\n model: 'sonnet',\n color: 'blue',\n isRequired: true, // Required - falls back to email if Slack/Teams not configured\n defaultIntegration: 'email', // Email is the fallback when OAuth integrations aren't set up\n version: '1.0.0'\n },\n 'issue-tracker': {\n role: 'issue-tracker',\n name: 'Issue Tracker',\n description: 'Automatically create and track bugs and issues',\n icon: 'bot',\n integrations: [\n // INTEGRATIONS.linear,\n // INTEGRATIONS.jira,\n INTEGRATIONS['jira-server'],\n INTEGRATIONS.notion,\n INTEGRATIONS.slack\n ],\n model: 'sonnet',\n color: 'red',\n version: '1.0.0'\n },\n 'documentation-researcher': {\n role: 'documentation-researcher',\n name: 'Documentation Researcher',\n description: 'Search and retrieve information from your documentation',\n icon: 'file-search',\n integrations: [\n INTEGRATIONS.notion,\n // INTEGRATIONS.confluence\n ],\n model: 'sonnet',\n color: 'cyan',\n version: '1.0.0'\n },\n 'test-code-generator': {\n role: 'test-code-generator',\n name: 'Test Code Generator',\n description: 'Generate automated Playwright test scripts and Page Objects',\n icon: 'code',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'purple',\n isRequired: true, // Required for automated test generation\n version: '1.0.0'\n },\n 'test-debugger-fixer': {\n role: 'test-debugger-fixer',\n name: 'Test Debugger & Fixer',\n description: 'Debug and fix failing automated tests automatically',\n icon: 'wrench',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'yellow',\n isRequired: true, // Required for automated test execution and fixing\n version: '1.0.0'\n }\n};\n\n/**\n * Get all available sub-agents\n */\nexport function getAllSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS);\n}\n\n/**\n * Get sub-agent by role\n */\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\n return SUBAGENTS[role];\n}\n\n/**\n * Get integration by ID\n */\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\n return INTEGRATIONS[integrationId];\n}\n\n/**\n * Get required sub-agents (always included)\n */\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\n}\n\n/**\n * Get optional sub-agents (user can choose)\n */\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\n}\n\n/**\n * Map integration ID to display name\n */\nexport function getIntegrationDisplayName(integrationId: string): string {\n return INTEGRATIONS[integrationId]?.name || integrationId;\n}\n\n/**\n * Get required integrations from a list of subagent roles\n */\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\n const integrations = new Set<string>();\n\n for (const role of roles) {\n const agent = SUBAGENTS[role];\n if (agent?.integrations) {\n agent.integrations.forEach(int => integrations.add(int.id));\n }\n }\n\n return Array.from(integrations);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bugzy-ai/bugzy",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Open-source AI agent configuration for QA automation with Claude Code",
5
5
  "publishConfig": {
6
6
  "access": "public"