@bugzy-ai/bugzy 1.7.0 → 1.8.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.
- package/dist/cli/index.cjs +200 -6
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +200 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +199 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +199 -6
- package/dist/index.js.map +1 -1
- package/dist/subagents/index.cjs +146 -0
- package/dist/subagents/index.cjs.map +1 -1
- package/dist/subagents/index.js +146 -0
- package/dist/subagents/index.js.map +1 -1
- package/dist/subagents/metadata.cjs +18 -0
- package/dist/subagents/metadata.cjs.map +1 -1
- package/dist/subagents/metadata.js +18 -0
- package/dist/subagents/metadata.js.map +1 -1
- package/dist/tasks/index.cjs +30 -1
- package/dist/tasks/index.cjs.map +1 -1
- package/dist/tasks/index.js +30 -1
- package/dist/tasks/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/init/.bugzy/runtime/testing-best-practices.md +93 -1
|
@@ -98,6 +98,13 @@ var INTEGRATIONS = {
|
|
|
98
98
|
integrationType: "local"
|
|
99
99
|
// Uses platform API key, no OAuth needed
|
|
100
100
|
},
|
|
101
|
+
github: {
|
|
102
|
+
id: "github",
|
|
103
|
+
name: "GitHub",
|
|
104
|
+
provider: "github",
|
|
105
|
+
requiredMCP: "mcp__github__*",
|
|
106
|
+
integrationType: "oauth"
|
|
107
|
+
},
|
|
101
108
|
local: {
|
|
102
109
|
id: "local",
|
|
103
110
|
name: "Local (Terminal)",
|
|
@@ -185,6 +192,17 @@ var SUBAGENTS = {
|
|
|
185
192
|
isRequired: true,
|
|
186
193
|
// Required for automated test execution and fixing
|
|
187
194
|
version: "1.0.0"
|
|
195
|
+
},
|
|
196
|
+
"changelog-historian": {
|
|
197
|
+
role: "changelog-historian",
|
|
198
|
+
name: "Changelog Historian",
|
|
199
|
+
description: "Retrieves and analyzes code changes from GitHub PRs and commits",
|
|
200
|
+
icon: "git-pull-request",
|
|
201
|
+
integrations: [INTEGRATIONS.github],
|
|
202
|
+
model: "haiku",
|
|
203
|
+
color: "gray",
|
|
204
|
+
isRequired: false,
|
|
205
|
+
version: "1.0.0"
|
|
188
206
|
}
|
|
189
207
|
};
|
|
190
208
|
function getAllSubAgents() {
|
|
@@ -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 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 local: {\n id: 'local',\n name: 'Local (Terminal)',\n provider: 'local',\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\n isLocal: true,\n integrationType: 'local'\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 - CLI uses 'local' (auto-configured), cloud uses email fallback\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\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 github: {\n id: 'github',\n name: 'GitHub',\n provider: 'github',\n requiredMCP: 'mcp__github__*',\n integrationType: 'oauth'\n },\n local: {\n id: 'local',\n name: 'Local (Terminal)',\n provider: 'local',\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\n isLocal: true,\n integrationType: 'local'\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 - CLI uses 'local' (auto-configured), cloud uses email fallback\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\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 'changelog-historian': {\n role: 'changelog-historian',\n name: 'Changelog Historian',\n description: 'Retrieves and analyzes code changes from GitHub PRs and commits',\n icon: 'git-pull-request',\n integrations: [INTEGRATIONS.github],\n model: 'haiku',\n color: 'gray',\n isRequired: false,\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":[]}
|
|
@@ -66,6 +66,13 @@ var INTEGRATIONS = {
|
|
|
66
66
|
integrationType: "local"
|
|
67
67
|
// Uses platform API key, no OAuth needed
|
|
68
68
|
},
|
|
69
|
+
github: {
|
|
70
|
+
id: "github",
|
|
71
|
+
name: "GitHub",
|
|
72
|
+
provider: "github",
|
|
73
|
+
requiredMCP: "mcp__github__*",
|
|
74
|
+
integrationType: "oauth"
|
|
75
|
+
},
|
|
69
76
|
local: {
|
|
70
77
|
id: "local",
|
|
71
78
|
name: "Local (Terminal)",
|
|
@@ -153,6 +160,17 @@ var SUBAGENTS = {
|
|
|
153
160
|
isRequired: true,
|
|
154
161
|
// Required for automated test execution and fixing
|
|
155
162
|
version: "1.0.0"
|
|
163
|
+
},
|
|
164
|
+
"changelog-historian": {
|
|
165
|
+
role: "changelog-historian",
|
|
166
|
+
name: "Changelog Historian",
|
|
167
|
+
description: "Retrieves and analyzes code changes from GitHub PRs and commits",
|
|
168
|
+
icon: "git-pull-request",
|
|
169
|
+
integrations: [INTEGRATIONS.github],
|
|
170
|
+
model: "haiku",
|
|
171
|
+
color: "gray",
|
|
172
|
+
isRequired: false,
|
|
173
|
+
version: "1.0.0"
|
|
156
174
|
}
|
|
157
175
|
};
|
|
158
176
|
function getAllSubAgents() {
|
|
@@ -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 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 local: {\n id: 'local',\n name: 'Local (Terminal)',\n provider: 'local',\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\n isLocal: true,\n integrationType: 'local'\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 - CLI uses 'local' (auto-configured), cloud uses email fallback\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\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 github: {\n id: 'github',\n name: 'GitHub',\n provider: 'github',\n requiredMCP: 'mcp__github__*',\n integrationType: 'oauth'\n },\n local: {\n id: 'local',\n name: 'Local (Terminal)',\n provider: 'local',\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\n isLocal: true,\n integrationType: 'local'\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 - CLI uses 'local' (auto-configured), cloud uses email fallback\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\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 'changelog-historian': {\n role: 'changelog-historian',\n name: 'Changelog Historian',\n description: 'Retrieves and analyzes code changes from GitHub PRs and commits',\n icon: 'git-pull-request',\n integrations: [INTEGRATIONS.github],\n model: 'haiku',\n color: 'gray',\n isRequired: false,\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/dist/tasks/index.cjs
CHANGED
|
@@ -1470,6 +1470,35 @@ CHANGE_CONTEXT = {
|
|
|
1470
1470
|
}
|
|
1471
1471
|
\`\`\``
|
|
1472
1472
|
},
|
|
1473
|
+
// Step 6b: Retrieve Code Change Details (conditional - changelog-historian)
|
|
1474
|
+
{
|
|
1475
|
+
inline: true,
|
|
1476
|
+
title: "Retrieve Code Change Details",
|
|
1477
|
+
content: `{{INVOKE_CHANGELOG_HISTORIAN}} to gather comprehensive context about recent code changes:
|
|
1478
|
+
|
|
1479
|
+
Explore version control history related to the verification scope.
|
|
1480
|
+
|
|
1481
|
+
Specifically gather:
|
|
1482
|
+
- Recent changes merged to the target branch
|
|
1483
|
+
- Change authors and contributors
|
|
1484
|
+
- Scope and impact of each change
|
|
1485
|
+
- Change descriptions and rationale
|
|
1486
|
+
- Related issues or tickets
|
|
1487
|
+
- Files and components affected
|
|
1488
|
+
|
|
1489
|
+
The agent will:
|
|
1490
|
+
1. Check its memory for previously discovered repository context
|
|
1491
|
+
2. Explore version control for relevant changes
|
|
1492
|
+
3. Build comprehensive understanding of the change history
|
|
1493
|
+
4. Return synthesized change information
|
|
1494
|
+
|
|
1495
|
+
Use this information to:
|
|
1496
|
+
- Identify which changes may have caused test failures
|
|
1497
|
+
- Understand the scope and risk of the changes
|
|
1498
|
+
- Enhance the verification report with change attribution
|
|
1499
|
+
- Provide better context for manual verification checklist`,
|
|
1500
|
+
conditionalOnSubagent: "changelog-historian"
|
|
1501
|
+
},
|
|
1473
1502
|
// Step 7: Determine Test Scope (inline)
|
|
1474
1503
|
{
|
|
1475
1504
|
inline: true,
|
|
@@ -1764,7 +1793,7 @@ A successful verification includes:
|
|
|
1764
1793
|
}
|
|
1765
1794
|
],
|
|
1766
1795
|
requiredSubagents: ["test-runner", "test-debugger-fixer"],
|
|
1767
|
-
optionalSubagents: ["documentation-researcher", "issue-tracker", "team-communicator"],
|
|
1796
|
+
optionalSubagents: ["documentation-researcher", "issue-tracker", "team-communicator", "changelog-historian"],
|
|
1768
1797
|
dependentTasks: []
|
|
1769
1798
|
};
|
|
1770
1799
|
|