@bugzy-ai/bugzy 1.18.0 → 1.18.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 -21
- package/README.md +273 -273
- package/dist/cli/index.cjs +227 -5
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +226 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +214 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +214 -2
- package/dist/index.js.map +1 -1
- package/dist/subagents/index.cjs.map +1 -1
- package/dist/subagents/index.js.map +1 -1
- package/dist/subagents/metadata.cjs.map +1 -1
- package/dist/subagents/metadata.js.map +1 -1
- package/dist/tasks/index.cjs +130 -2
- package/dist/tasks/index.cjs.map +1 -1
- package/dist/tasks/index.d.cts +1 -0
- package/dist/tasks/index.d.ts +1 -0
- package/dist/tasks/index.js +130 -2
- package/dist/tasks/index.js.map +1 -1
- package/package.json +95 -95
- package/templates/init/.bugzy/runtime/handlers/messages/feedback.md +178 -178
- package/templates/init/.bugzy/runtime/handlers/messages/question.md +122 -122
- package/templates/init/.bugzy/runtime/handlers/messages/status.md +146 -146
- package/templates/init/.bugzy/runtime/knowledge-base.md +61 -61
- package/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -97
- package/templates/init/.bugzy/runtime/project-context.md +35 -35
- package/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -87
- package/templates/init/.bugzy/runtime/templates/event-examples.md +194 -194
- package/templates/init/.bugzy/runtime/templates/test-plan-template.md +50 -50
- package/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -498
- package/templates/init/.claude/settings.json +28 -28
- package/templates/init/.env.testdata +18 -18
- package/templates/init/.gitignore-template +24 -24
- package/templates/init/AGENTS.md +155 -155
- package/templates/init/CLAUDE.md +157 -157
- package/templates/init/test-runs/README.md +45 -45
- package/templates/init/tests/CLAUDE.md +193 -193
- package/templates/init/tests/docs/test-execution-strategy.md +535 -535
- package/templates/init/tests/docs/testing-best-practices.md +724 -724
- package/templates/playwright/BasePage.template.ts +190 -190
- package/templates/playwright/auth.setup.template.ts +89 -89
- package/templates/playwright/dataGenerators.helper.template.ts +148 -148
- package/templates/playwright/dateUtils.helper.template.ts +96 -96
- package/templates/playwright/pages.fixture.template.ts +50 -50
- package/templates/playwright/playwright.config.template.ts +97 -97
- package/templates/playwright/reporters/__tests__/bugzy-reporter-failure-classification.test.ts +299 -299
- package/templates/playwright/reporters/__tests__/bugzy-reporter-manifest-merge.test.ts +329 -329
- package/templates/playwright/reporters/__tests__/playwright.config.ts +5 -5
- package/templates/playwright/reporters/bugzy-reporter.ts +784 -784
- package/dist/templates/init/.bugzy/runtime/knowledge-base.md +0 -61
- package/dist/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +0 -97
- package/dist/templates/init/.bugzy/runtime/project-context.md +0 -35
- package/dist/templates/init/.bugzy/runtime/subagent-memory-guide.md +0 -87
- package/dist/templates/init/.bugzy/runtime/templates/test-plan-template.md +0 -50
- package/dist/templates/init/.bugzy/runtime/templates/test-result-schema.md +0 -498
- package/dist/templates/init/.bugzy/runtime/test-execution-strategy.md +0 -535
- package/dist/templates/init/.bugzy/runtime/testing-best-practices.md +0 -632
- package/dist/templates/init/.gitignore-template +0 -25
|
@@ -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 'azure-devops': {\n id: 'azure-devops',\n name: 'Azure DevOps',\n provider: 'azure-devops',\n requiredMCP: 'mcp__azure-devops__*',\n integrationType: 'oauth' // Uses Nango with API key auth for PAT\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 // No requiredMCP — uses playwright-cli (CLI tool), not MCP server\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 'browser-automation': {\n role: 'browser-automation',\n name: 'Browser Automation',\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['azure-devops'],\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.jira,\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 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":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\r\n * Sub-Agents Metadata\r\n * Client-safe metadata without file system access\r\n */\r\n\r\n/**\r\n * Integration type determines how credentials are obtained\r\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\r\n * - 'local': No configuration needed (Playwright)\r\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\r\n */\r\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\r\n\r\n/**\r\n * Integration configuration for sub-agents\r\n */\r\nexport interface SubAgentIntegration {\r\n id: string;\r\n name: string;\r\n provider: string;\r\n requiredMCP?: string;\r\n /** @deprecated Use integrationType instead */\r\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\r\n integrationType: IntegrationType;\r\n}\r\n\r\n/**\r\n * Sub-Agent Metadata\r\n */\r\nexport interface SubAgentMetadata {\r\n role: string;\r\n name: string;\r\n description: string;\r\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\r\n integrations: SubAgentIntegration[];\r\n model?: string;\r\n color?: string;\r\n isRequired?: boolean;\r\n defaultIntegration?: string; // Fallback integration ID when others aren't configured\r\n version: string;\r\n}\r\n\r\n/**\r\n * Available integrations by provider\r\n */\r\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\r\n linear: {\r\n id: 'linear',\r\n name: 'Linear',\r\n provider: 'linear',\r\n requiredMCP: 'mcp__linear__*',\r\n integrationType: 'oauth'\r\n },\r\n jira: {\r\n id: 'jira',\r\n name: 'Jira',\r\n provider: 'jira',\r\n requiredMCP: 'mcp__jira__*',\r\n integrationType: 'oauth'\r\n },\r\n 'jira-server': {\r\n id: 'jira-server',\r\n name: 'Jira Server',\r\n provider: 'jira-server',\r\n requiredMCP: 'mcp__jira-server__*',\r\n integrationType: 'custom'\r\n },\r\n 'azure-devops': {\r\n id: 'azure-devops',\r\n name: 'Azure DevOps',\r\n provider: 'azure-devops',\r\n requiredMCP: 'mcp__azure-devops__*',\r\n integrationType: 'oauth' // Uses Nango with API key auth for PAT\r\n },\r\n notion: {\r\n id: 'notion',\r\n name: 'Notion',\r\n provider: 'notion',\r\n requiredMCP: 'mcp__notion__*',\r\n integrationType: 'oauth'\r\n },\r\n confluence: {\r\n id: 'confluence',\r\n name: 'Confluence',\r\n provider: 'confluence',\r\n requiredMCP: 'mcp__confluence__*',\r\n integrationType: 'oauth'\r\n },\r\n slack: {\r\n id: 'slack',\r\n name: 'Slack',\r\n provider: 'slack',\r\n requiredMCP: 'mcp__slack__*',\r\n integrationType: 'oauth'\r\n },\r\n playwright: {\r\n id: 'playwright',\r\n name: 'Playwright',\r\n provider: 'playwright',\r\n // No requiredMCP — uses playwright-cli (CLI tool), not MCP server\r\n isLocal: true, // Playwright runs locally, no external connector needed\r\n integrationType: 'local'\r\n },\r\n teams: {\r\n id: 'teams',\r\n name: 'Microsoft Teams',\r\n provider: 'teams',\r\n requiredMCP: 'mcp__teams__*',\r\n integrationType: 'oauth'\r\n },\r\n email: {\r\n id: 'email',\r\n name: 'Email',\r\n provider: 'resend',\r\n requiredMCP: 'mcp__resend__*',\r\n integrationType: 'local' // Uses platform API key, no OAuth needed\r\n },\r\n github: {\r\n id: 'github',\r\n name: 'GitHub',\r\n provider: 'github',\r\n requiredMCP: 'mcp__github__*',\r\n integrationType: 'oauth'\r\n },\r\n local: {\r\n id: 'local',\r\n name: 'Local (Terminal)',\r\n provider: 'local',\r\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\r\n isLocal: true,\r\n integrationType: 'local'\r\n }\r\n};\r\n\r\n/**\r\n * Sub-Agents Registry - metadata only (templates loaded from files)\r\n */\r\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\r\n 'browser-automation': {\r\n role: 'browser-automation',\r\n name: 'Browser Automation',\r\n description: 'Execute automated browser tests (always included)',\r\n icon: 'play',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'green',\r\n isRequired: true,\r\n version: '1.0.0'\r\n },\r\n 'team-communicator': {\r\n role: 'team-communicator',\r\n name: 'Team Communicator',\r\n description: 'Send notifications and updates to your team',\r\n icon: 'message-square',\r\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],\r\n model: 'sonnet',\r\n color: 'blue',\r\n isRequired: true, // Required - CLI uses 'local' (auto-configured), cloud uses email fallback\r\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\r\n version: '1.0.0'\r\n },\r\n 'issue-tracker': {\r\n role: 'issue-tracker',\r\n name: 'Issue Tracker',\r\n description: 'Automatically create and track bugs and issues',\r\n icon: 'bot',\r\n integrations: [\r\n // INTEGRATIONS.linear,\r\n INTEGRATIONS.jira,\r\n INTEGRATIONS['jira-server'],\r\n INTEGRATIONS['azure-devops'],\r\n INTEGRATIONS.notion,\r\n INTEGRATIONS.slack\r\n ],\r\n model: 'sonnet',\r\n color: 'red',\r\n version: '1.0.0'\r\n },\r\n 'documentation-researcher': {\r\n role: 'documentation-researcher',\r\n name: 'Documentation Researcher',\r\n description: 'Search and retrieve information from your documentation',\r\n icon: 'file-search',\r\n integrations: [\r\n INTEGRATIONS.notion,\r\n INTEGRATIONS.jira,\r\n // INTEGRATIONS.confluence\r\n ],\r\n model: 'sonnet',\r\n color: 'cyan',\r\n version: '1.0.0'\r\n },\r\n 'test-code-generator': {\r\n role: 'test-code-generator',\r\n name: 'Test Code Generator',\r\n description: 'Generate automated test scripts and page objects',\r\n icon: 'code',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'purple',\r\n isRequired: true, // Required for automated test generation\r\n version: '1.0.0'\r\n },\r\n 'test-debugger-fixer': {\r\n role: 'test-debugger-fixer',\r\n name: 'Test Debugger & Fixer',\r\n description: 'Debug and fix failing automated tests automatically',\r\n icon: 'wrench',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'yellow',\r\n isRequired: true, // Required for automated test execution and fixing\r\n version: '1.0.0'\r\n },\r\n 'changelog-historian': {\r\n role: 'changelog-historian',\r\n name: 'Changelog Historian',\r\n description: 'Retrieves and analyzes code changes from GitHub PRs and commits',\r\n icon: 'git-pull-request',\r\n integrations: [INTEGRATIONS.github],\r\n model: 'haiku',\r\n color: 'gray',\r\n isRequired: false,\r\n version: '1.0.0'\r\n }\r\n};\r\n\r\n/**\r\n * Get all available sub-agents\r\n */\r\nexport function getAllSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS);\r\n}\r\n\r\n/**\r\n * Get sub-agent by role\r\n */\r\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\r\n return SUBAGENTS[role];\r\n}\r\n\r\n/**\r\n * Get integration by ID\r\n */\r\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\r\n return INTEGRATIONS[integrationId];\r\n}\r\n\r\n/**\r\n * Get required sub-agents (always included)\r\n */\r\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\r\n}\r\n\r\n/**\r\n * Get optional sub-agents (user can choose)\r\n */\r\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\r\n}\r\n\r\n/**\r\n * Map integration ID to display name\r\n */\r\nexport function getIntegrationDisplayName(integrationId: string): string {\r\n return INTEGRATIONS[integrationId]?.name || integrationId;\r\n}\r\n\r\n/**\r\n * Get required integrations from a list of subagent roles\r\n */\r\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\r\n const integrations = new Set<string>();\r\n\r\n for (const role of roles) {\r\n const agent = SUBAGENTS[role];\r\n if (agent?.integrations) {\r\n agent.integrations.forEach(int => integrations.add(int.id));\r\n }\r\n }\r\n\r\n return Array.from(integrations);\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -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 'azure-devops': {\n id: 'azure-devops',\n name: 'Azure DevOps',\n provider: 'azure-devops',\n requiredMCP: 'mcp__azure-devops__*',\n integrationType: 'oauth' // Uses Nango with API key auth for PAT\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 // No requiredMCP — uses playwright-cli (CLI tool), not MCP server\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 'browser-automation': {\n role: 'browser-automation',\n name: 'Browser Automation',\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['azure-devops'],\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.jira,\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 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":";AA6CO,IAAM,eAAoD;AAAA,EAC/D,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA;AAAA,IAEV,SAAS;AAAA;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA;AAAA,IAEV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AACF;AAKO,IAAM,YAA8C;AAAA,EACzD,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,aAAa,UAAU;AAAA,IACtC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,aAAa,OAAO,aAAa,OAAO,aAAa,KAAK;AAAA,IACzE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA;AAAA,IACZ,oBAAoB;AAAA;AAAA,IACpB,SAAS;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA;AAAA,MAEZ,aAAa;AAAA,MACb,aAAa,aAAa;AAAA,MAC1B,aAAa,cAAc;AAAA,MAC3B,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA;AAAA,IAEf;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,aAAa,UAAU;AAAA,IACtC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,aAAa,UAAU;AAAA,IACtC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,aAAa,MAAM;AAAA,IAClC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AACF;AAKO,SAAS,kBAAsC;AACpD,SAAO,OAAO,OAAO,SAAS;AAChC;AAKO,SAAS,YAAY,MAA4C;AACtE,SAAO,UAAU,IAAI;AACvB;AAKO,SAAS,eAAe,eAAwD;AACrF,SAAO,aAAa,aAAa;AACnC;AAKO,SAAS,uBAA2C;AACzD,SAAO,OAAO,OAAO,SAAS,EAAE,OAAO,WAAS,MAAM,UAAU;AAClE;AAKO,SAAS,uBAA2C;AACzD,SAAO,OAAO,OAAO,SAAS,EAAE,OAAO,WAAS,CAAC,MAAM,UAAU;AACnE;AAKO,SAAS,0BAA0B,eAA+B;AACvE,SAAO,aAAa,aAAa,GAAG,QAAQ;AAC9C;AAKO,SAAS,qCAAqC,OAA2B;AAC9E,QAAM,eAAe,oBAAI,IAAY;AAErC,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,UAAU,IAAI;AAC5B,QAAI,OAAO,cAAc;AACvB,YAAM,aAAa,QAAQ,SAAO,aAAa,IAAI,IAAI,EAAE,CAAC;AAAA,IAC5D;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,YAAY;AAChC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\r\n * Sub-Agents Metadata\r\n * Client-safe metadata without file system access\r\n */\r\n\r\n/**\r\n * Integration type determines how credentials are obtained\r\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\r\n * - 'local': No configuration needed (Playwright)\r\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\r\n */\r\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\r\n\r\n/**\r\n * Integration configuration for sub-agents\r\n */\r\nexport interface SubAgentIntegration {\r\n id: string;\r\n name: string;\r\n provider: string;\r\n requiredMCP?: string;\r\n /** @deprecated Use integrationType instead */\r\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\r\n integrationType: IntegrationType;\r\n}\r\n\r\n/**\r\n * Sub-Agent Metadata\r\n */\r\nexport interface SubAgentMetadata {\r\n role: string;\r\n name: string;\r\n description: string;\r\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\r\n integrations: SubAgentIntegration[];\r\n model?: string;\r\n color?: string;\r\n isRequired?: boolean;\r\n defaultIntegration?: string; // Fallback integration ID when others aren't configured\r\n version: string;\r\n}\r\n\r\n/**\r\n * Available integrations by provider\r\n */\r\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\r\n linear: {\r\n id: 'linear',\r\n name: 'Linear',\r\n provider: 'linear',\r\n requiredMCP: 'mcp__linear__*',\r\n integrationType: 'oauth'\r\n },\r\n jira: {\r\n id: 'jira',\r\n name: 'Jira',\r\n provider: 'jira',\r\n requiredMCP: 'mcp__jira__*',\r\n integrationType: 'oauth'\r\n },\r\n 'jira-server': {\r\n id: 'jira-server',\r\n name: 'Jira Server',\r\n provider: 'jira-server',\r\n requiredMCP: 'mcp__jira-server__*',\r\n integrationType: 'custom'\r\n },\r\n 'azure-devops': {\r\n id: 'azure-devops',\r\n name: 'Azure DevOps',\r\n provider: 'azure-devops',\r\n requiredMCP: 'mcp__azure-devops__*',\r\n integrationType: 'oauth' // Uses Nango with API key auth for PAT\r\n },\r\n notion: {\r\n id: 'notion',\r\n name: 'Notion',\r\n provider: 'notion',\r\n requiredMCP: 'mcp__notion__*',\r\n integrationType: 'oauth'\r\n },\r\n confluence: {\r\n id: 'confluence',\r\n name: 'Confluence',\r\n provider: 'confluence',\r\n requiredMCP: 'mcp__confluence__*',\r\n integrationType: 'oauth'\r\n },\r\n slack: {\r\n id: 'slack',\r\n name: 'Slack',\r\n provider: 'slack',\r\n requiredMCP: 'mcp__slack__*',\r\n integrationType: 'oauth'\r\n },\r\n playwright: {\r\n id: 'playwright',\r\n name: 'Playwright',\r\n provider: 'playwright',\r\n // No requiredMCP — uses playwright-cli (CLI tool), not MCP server\r\n isLocal: true, // Playwright runs locally, no external connector needed\r\n integrationType: 'local'\r\n },\r\n teams: {\r\n id: 'teams',\r\n name: 'Microsoft Teams',\r\n provider: 'teams',\r\n requiredMCP: 'mcp__teams__*',\r\n integrationType: 'oauth'\r\n },\r\n email: {\r\n id: 'email',\r\n name: 'Email',\r\n provider: 'resend',\r\n requiredMCP: 'mcp__resend__*',\r\n integrationType: 'local' // Uses platform API key, no OAuth needed\r\n },\r\n github: {\r\n id: 'github',\r\n name: 'GitHub',\r\n provider: 'github',\r\n requiredMCP: 'mcp__github__*',\r\n integrationType: 'oauth'\r\n },\r\n local: {\r\n id: 'local',\r\n name: 'Local (Terminal)',\r\n provider: 'local',\r\n // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)\r\n isLocal: true,\r\n integrationType: 'local'\r\n }\r\n};\r\n\r\n/**\r\n * Sub-Agents Registry - metadata only (templates loaded from files)\r\n */\r\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\r\n 'browser-automation': {\r\n role: 'browser-automation',\r\n name: 'Browser Automation',\r\n description: 'Execute automated browser tests (always included)',\r\n icon: 'play',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'green',\r\n isRequired: true,\r\n version: '1.0.0'\r\n },\r\n 'team-communicator': {\r\n role: 'team-communicator',\r\n name: 'Team Communicator',\r\n description: 'Send notifications and updates to your team',\r\n icon: 'message-square',\r\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],\r\n model: 'sonnet',\r\n color: 'blue',\r\n isRequired: true, // Required - CLI uses 'local' (auto-configured), cloud uses email fallback\r\n defaultIntegration: 'email', // Email fallback for cloud (CLI auto-configures 'local' separately)\r\n version: '1.0.0'\r\n },\r\n 'issue-tracker': {\r\n role: 'issue-tracker',\r\n name: 'Issue Tracker',\r\n description: 'Automatically create and track bugs and issues',\r\n icon: 'bot',\r\n integrations: [\r\n // INTEGRATIONS.linear,\r\n INTEGRATIONS.jira,\r\n INTEGRATIONS['jira-server'],\r\n INTEGRATIONS['azure-devops'],\r\n INTEGRATIONS.notion,\r\n INTEGRATIONS.slack\r\n ],\r\n model: 'sonnet',\r\n color: 'red',\r\n version: '1.0.0'\r\n },\r\n 'documentation-researcher': {\r\n role: 'documentation-researcher',\r\n name: 'Documentation Researcher',\r\n description: 'Search and retrieve information from your documentation',\r\n icon: 'file-search',\r\n integrations: [\r\n INTEGRATIONS.notion,\r\n INTEGRATIONS.jira,\r\n // INTEGRATIONS.confluence\r\n ],\r\n model: 'sonnet',\r\n color: 'cyan',\r\n version: '1.0.0'\r\n },\r\n 'test-code-generator': {\r\n role: 'test-code-generator',\r\n name: 'Test Code Generator',\r\n description: 'Generate automated test scripts and page objects',\r\n icon: 'code',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'purple',\r\n isRequired: true, // Required for automated test generation\r\n version: '1.0.0'\r\n },\r\n 'test-debugger-fixer': {\r\n role: 'test-debugger-fixer',\r\n name: 'Test Debugger & Fixer',\r\n description: 'Debug and fix failing automated tests automatically',\r\n icon: 'wrench',\r\n integrations: [INTEGRATIONS.playwright],\r\n model: 'sonnet',\r\n color: 'yellow',\r\n isRequired: true, // Required for automated test execution and fixing\r\n version: '1.0.0'\r\n },\r\n 'changelog-historian': {\r\n role: 'changelog-historian',\r\n name: 'Changelog Historian',\r\n description: 'Retrieves and analyzes code changes from GitHub PRs and commits',\r\n icon: 'git-pull-request',\r\n integrations: [INTEGRATIONS.github],\r\n model: 'haiku',\r\n color: 'gray',\r\n isRequired: false,\r\n version: '1.0.0'\r\n }\r\n};\r\n\r\n/**\r\n * Get all available sub-agents\r\n */\r\nexport function getAllSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS);\r\n}\r\n\r\n/**\r\n * Get sub-agent by role\r\n */\r\nexport function getSubAgent(role: string): SubAgentMetadata | undefined {\r\n return SUBAGENTS[role];\r\n}\r\n\r\n/**\r\n * Get integration by ID\r\n */\r\nexport function getIntegration(integrationId: string): SubAgentIntegration | undefined {\r\n return INTEGRATIONS[integrationId];\r\n}\r\n\r\n/**\r\n * Get required sub-agents (always included)\r\n */\r\nexport function getRequiredSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS).filter(agent => agent.isRequired);\r\n}\r\n\r\n/**\r\n * Get optional sub-agents (user can choose)\r\n */\r\nexport function getOptionalSubAgents(): SubAgentMetadata[] {\r\n return Object.values(SUBAGENTS).filter(agent => !agent.isRequired);\r\n}\r\n\r\n/**\r\n * Map integration ID to display name\r\n */\r\nexport function getIntegrationDisplayName(integrationId: string): string {\r\n return INTEGRATIONS[integrationId]?.name || integrationId;\r\n}\r\n\r\n/**\r\n * Get required integrations from a list of subagent roles\r\n */\r\nexport function getRequiredIntegrationsFromSubagents(roles: string[]): string[] {\r\n const integrations = new Set<string>();\r\n\r\n for (const role of roles) {\r\n const agent = SUBAGENTS[role];\r\n if (agent?.integrations) {\r\n agent.integrations.forEach(int => integrations.add(int.id));\r\n }\r\n }\r\n\r\n return Array.from(integrations);\r\n}\r\n"],"mappings":"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","names":[]}
|
package/dist/tasks/index.cjs
CHANGED
|
@@ -49,6 +49,7 @@ var TASK_SLUGS = {
|
|
|
49
49
|
RUN_TESTS: "run-tests",
|
|
50
50
|
VERIFY_CHANGES: "verify-changes",
|
|
51
51
|
TRIAGE_RESULTS: "triage-results",
|
|
52
|
+
EXPLORE_TEST_CODEBASE: "explore-test-codebase",
|
|
52
53
|
/** @deprecated Use ONBOARD_TESTING instead */
|
|
53
54
|
FULL_TEST_COVERAGE: "onboard-testing"
|
|
54
55
|
};
|
|
@@ -721,7 +722,29 @@ Read \`.bugzy/runtime/memory/event-history.md\` to:
|
|
|
721
722
|
- List \`./test-cases/\` for existing tests
|
|
722
723
|
- Check \`.bugzy/runtime/knowledge-base.md\` for past insights
|
|
723
724
|
|
|
724
|
-
#### 2.4
|
|
725
|
+
#### 2.4 Knowledge Base: Drafted vs Real Tests (BYOT)
|
|
726
|
+
|
|
727
|
+
When the project uses an external test repository, maintain two sections in \`.bugzy/runtime/knowledge-base.md\`:
|
|
728
|
+
|
|
729
|
+
**Drafted Tests** (Open PRs \u2014 tests not yet merged):
|
|
730
|
+
\`\`\`markdown
|
|
731
|
+
### Drafted Tests
|
|
732
|
+
| PR | Branch | Tests Added | Status | Date |
|
|
733
|
+
|----|--------|-------------|--------|------|
|
|
734
|
+
| #12 | bugzy/verify-changes-a1b2c3d4 | login.spec.ts, checkout.spec.ts | Open | 2026-02-13 |
|
|
735
|
+
\`\`\`
|
|
736
|
+
|
|
737
|
+
**Active Tests** (Merged \u2014 tests are part of the test suite):
|
|
738
|
+
\`\`\`markdown
|
|
739
|
+
### Active Tests
|
|
740
|
+
| File | What it tests | Source PR | Merged |
|
|
741
|
+
|------|---------------|-----------|--------|
|
|
742
|
+
| login.spec.ts | Login flow with valid/invalid credentials | #12 | 2026-02-13 |
|
|
743
|
+
\`\`\`
|
|
744
|
+
|
|
745
|
+
Move entries from Drafted \u2192 Active Tests when PRs are merged. Remove entries when PRs are closed without merge.
|
|
746
|
+
|
|
747
|
+
#### 2.5 Event-Action Reference Patterns
|
|
725
748
|
|
|
726
749
|
Use these as reference patterns for common events. The webhook routing system already handles events with specific default tasks (e.g., deployment_status \u2192 /run-tests). Process-event receives events that need analysis.
|
|
727
750
|
|
|
@@ -740,6 +763,23 @@ Use these as reference patterns for common events. The webhook routing system al
|
|
|
740
763
|
- **QA-relevant content found**: Propose appropriate follow-up tasks (e.g., \`/generate-test-cases\`, \`/verify-changes\`)
|
|
741
764
|
- **No QA content** (HR meeting, offsite planning, etc.): Skip \u2014 log to event history only
|
|
742
765
|
|
|
766
|
+
**External Test Repo Events** (BYOT - events from the customer's external test repository):
|
|
767
|
+
- **PR opened by Bugzy** (\`com.github.external_repo.pull_request\`, \`action: "opened"\`, branch starts with \`bugzy/\`):
|
|
768
|
+
Log to Knowledge Base under "Drafted Tests". No action task needed \u2014 just record the PR number, branch, and what tests were added.
|
|
769
|
+
- **PR review submitted** (\`com.github.external_repo.pull_request_review\`):
|
|
770
|
+
If changes were requested \u2192 queue \`/verify-changes\` with \`{"existingPrBranch": "{head.ref}", "context": "PR review feedback: {review.body}"}\`.
|
|
771
|
+
The execution will iterate on the existing branch, push fixes, and skip PR creation.
|
|
772
|
+
- **PR comment** (\`com.github.external_repo.pull_request_comment\`):
|
|
773
|
+
Read the comment. If it contains actionable feedback, queue \`/verify-changes\`
|
|
774
|
+
with \`{"existingPrBranch": "{issue.pull_request.head.ref}"}\`.
|
|
775
|
+
- **PR merged** (\`com.github.external_repo.pull_request\`, \`action: "closed"\`, \`merged: true\`):
|
|
776
|
+
Update Knowledge Base: move entries from "Drafted Tests" to "Active Tests". Notify team of new test coverage.
|
|
777
|
+
The submodule pointer update happens automatically via the container (\`updateSubmoduleToLatest\`).
|
|
778
|
+
- **PR closed without merge** (\`com.github.external_repo.pull_request\`, \`action: "closed"\`, \`merged: false\`):
|
|
779
|
+
Remove from Knowledge Base "Drafted Tests". Notify team that tests were rejected.
|
|
780
|
+
- **Direct push to main** (\`com.github.external_repo.push\`, ref is main/master):
|
|
781
|
+
Update Knowledge Base if test files were affected. Submodule pointer update is automatic.
|
|
782
|
+
|
|
743
783
|
**Other Events:**
|
|
744
784
|
- Analyze for QA relevance based on knowledge base and project context
|
|
745
785
|
- If action needed, propose appropriate task. If not, log and skip.
|
|
@@ -1899,6 +1939,93 @@ Output this JSON as the final result of the task.`
|
|
|
1899
1939
|
dependentTasks: []
|
|
1900
1940
|
};
|
|
1901
1941
|
|
|
1942
|
+
// src/tasks/library/explore-test-codebase.ts
|
|
1943
|
+
var exploreTestCodebaseTask = {
|
|
1944
|
+
slug: TASK_SLUGS.EXPLORE_TEST_CODEBASE,
|
|
1945
|
+
name: "Explore Test Codebase",
|
|
1946
|
+
description: "Analyze external test repository to understand framework, coverage, and conventions",
|
|
1947
|
+
frontmatter: {
|
|
1948
|
+
description: "Analyze external test codebase for BYOT onboarding",
|
|
1949
|
+
"argument-hint": "--focus [area]"
|
|
1950
|
+
},
|
|
1951
|
+
steps: [
|
|
1952
|
+
// Step 1: Overview (inline)
|
|
1953
|
+
{
|
|
1954
|
+
inline: true,
|
|
1955
|
+
title: "Explore Test Codebase Overview",
|
|
1956
|
+
content: `Analyze the external test repository to understand the testing framework, test coverage, conventions, and codebase structure. This task is triggered during BYOT (Bring Your Own Tests) onboarding to help Bugzy understand the customer's existing test suite.`
|
|
1957
|
+
},
|
|
1958
|
+
// Step 2: Security Notice
|
|
1959
|
+
"security-notice",
|
|
1960
|
+
// Step 3: Arguments (inline)
|
|
1961
|
+
{
|
|
1962
|
+
inline: true,
|
|
1963
|
+
title: "Arguments",
|
|
1964
|
+
content: `**Arguments**: $ARGUMENTS
|
|
1965
|
+
|
|
1966
|
+
**Parse:**
|
|
1967
|
+
- **focus**: specific area to analyze (default: comprehensive)`
|
|
1968
|
+
},
|
|
1969
|
+
// Setup
|
|
1970
|
+
"load-project-context",
|
|
1971
|
+
"read-knowledge-base",
|
|
1972
|
+
// Core analysis
|
|
1973
|
+
"analyze-test-codebase",
|
|
1974
|
+
// Generate results parser for normalizing test output
|
|
1975
|
+
"create-results-parser",
|
|
1976
|
+
// Optional: explore the app itself if URL is available
|
|
1977
|
+
{
|
|
1978
|
+
inline: true,
|
|
1979
|
+
title: "App Exploration (Optional)",
|
|
1980
|
+
content: `If the project has an app URL configured (check \`.bugzy/runtime/project-context.md\` or env vars for TEST_APP_HOST), {{INVOKE_BROWSER_AUTOMATION}} to briefly explore the application:
|
|
1981
|
+
|
|
1982
|
+
1. Navigate to the app URL
|
|
1983
|
+
2. Identify main navigation and key pages
|
|
1984
|
+
3. Map discovered features to test coverage from the codebase analysis
|
|
1985
|
+
4. Note any features that appear untested
|
|
1986
|
+
|
|
1987
|
+
This step helps correlate what the tests cover with what the application actually contains. Skip if no app URL is available.`,
|
|
1988
|
+
conditionalOnSubagent: "browser-automation"
|
|
1989
|
+
},
|
|
1990
|
+
// Generate output
|
|
1991
|
+
{
|
|
1992
|
+
inline: true,
|
|
1993
|
+
title: "Commit Analysis Results",
|
|
1994
|
+
content: `Commit all analysis artifacts to the project repository:
|
|
1995
|
+
|
|
1996
|
+
1. The test codebase analysis report (\`.bugzy/runtime/test-codebase-analysis.md\`)
|
|
1997
|
+
2. Any generated CLAUDE.md draft (if the external repo was missing one)
|
|
1998
|
+
|
|
1999
|
+
Use a clear commit message: "chore: analyze external test codebase"
|
|
2000
|
+
|
|
2001
|
+
These artifacts will be available to all future task executions for this project.`
|
|
2002
|
+
},
|
|
2003
|
+
// Team Communication (conditional)
|
|
2004
|
+
{
|
|
2005
|
+
inline: true,
|
|
2006
|
+
title: "Team Communication",
|
|
2007
|
+
content: `{{INVOKE_TEAM_COMMUNICATOR}} to notify the team about the test codebase analysis:
|
|
2008
|
+
|
|
2009
|
+
\`\`\`
|
|
2010
|
+
1. Post a summary of the analysis findings
|
|
2011
|
+
2. Include key information:
|
|
2012
|
+
- Test framework and runner identified
|
|
2013
|
+
- Number of test files and estimated test cases
|
|
2014
|
+
- Feature areas covered by existing tests
|
|
2015
|
+
- Any gaps or areas without test coverage
|
|
2016
|
+
3. Ask if the analysis looks accurate
|
|
2017
|
+
4. Use appropriate channel and threading
|
|
2018
|
+
\`\`\``,
|
|
2019
|
+
conditionalOnSubagent: "team-communicator"
|
|
2020
|
+
},
|
|
2021
|
+
// Maintenance
|
|
2022
|
+
"update-knowledge-base"
|
|
2023
|
+
],
|
|
2024
|
+
requiredSubagents: ["browser-automation"],
|
|
2025
|
+
optionalSubagents: ["team-communicator"],
|
|
2026
|
+
dependentTasks: []
|
|
2027
|
+
};
|
|
2028
|
+
|
|
1902
2029
|
// src/tasks/index.ts
|
|
1903
2030
|
var TASK_TEMPLATES = {
|
|
1904
2031
|
[TASK_SLUGS.GENERATE_TEST_CASES]: generateTestCasesTask,
|
|
@@ -1909,7 +2036,8 @@ var TASK_TEMPLATES = {
|
|
|
1909
2036
|
[TASK_SLUGS.VERIFY_CHANGES]: verifyChangesTask,
|
|
1910
2037
|
[TASK_SLUGS.ONBOARD_TESTING]: onboardTestingTask,
|
|
1911
2038
|
[TASK_SLUGS.EXPLORE_APPLICATION]: exploreApplicationTask,
|
|
1912
|
-
[TASK_SLUGS.TRIAGE_RESULTS]: triageResultsTask
|
|
2039
|
+
[TASK_SLUGS.TRIAGE_RESULTS]: triageResultsTask,
|
|
2040
|
+
[TASK_SLUGS.EXPLORE_TEST_CODEBASE]: exploreTestCodebaseTask
|
|
1913
2041
|
};
|
|
1914
2042
|
function getTaskTemplate(slug) {
|
|
1915
2043
|
return TASK_TEMPLATES[slug];
|