@bugzy-ai/bugzy 1.11.1 → 1.11.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.
Files changed (52) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +273 -273
  3. package/dist/templates/init/.bugzy/runtime/knowledge-base.md +61 -0
  4. package/dist/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -0
  5. package/dist/templates/init/.bugzy/runtime/project-context.md +35 -0
  6. package/dist/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -0
  7. package/dist/templates/init/.bugzy/runtime/templates/test-plan-template.md +50 -0
  8. package/dist/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -0
  9. package/dist/templates/init/.bugzy/runtime/test-execution-strategy.md +535 -0
  10. package/dist/templates/init/.bugzy/runtime/testing-best-practices.md +632 -0
  11. package/dist/templates/init/.gitignore-template +25 -0
  12. package/package.json +1 -1
  13. package/templates/init/.bugzy/runtime/knowledge-base.md +61 -61
  14. package/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -97
  15. package/templates/init/.bugzy/runtime/project-context.md +35 -35
  16. package/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -87
  17. package/templates/init/.bugzy/runtime/templates/test-plan-template.md +50 -50
  18. package/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -498
  19. package/templates/init/.bugzy/runtime/test-execution-strategy.md +535 -535
  20. package/templates/init/.bugzy/runtime/testing-best-practices.md +724 -724
  21. package/templates/init/.env.testdata +18 -18
  22. package/templates/init/.gitignore-template +24 -24
  23. package/templates/init/AGENTS.md +155 -155
  24. package/templates/init/CLAUDE.md +157 -157
  25. package/templates/init/test-runs/README.md +45 -45
  26. package/templates/playwright/BasePage.template.ts +190 -190
  27. package/templates/playwright/auth.setup.template.ts +89 -89
  28. package/templates/playwright/dataGenerators.helper.template.ts +148 -148
  29. package/templates/playwright/dateUtils.helper.template.ts +96 -96
  30. package/templates/playwright/pages.fixture.template.ts +50 -50
  31. package/templates/playwright/playwright.config.template.ts +97 -97
  32. package/templates/playwright/reporters/bugzy-reporter.ts +454 -454
  33. package/dist/cli/index.cjs +0 -9140
  34. package/dist/cli/index.cjs.map +0 -1
  35. package/dist/cli/index.js +0 -9132
  36. package/dist/cli/index.js.map +0 -1
  37. package/dist/index.cjs +0 -7626
  38. package/dist/index.cjs.map +0 -1
  39. package/dist/index.js +0 -7569
  40. package/dist/index.js.map +0 -1
  41. package/dist/subagents/index.cjs +0 -3823
  42. package/dist/subagents/index.cjs.map +0 -1
  43. package/dist/subagents/index.js +0 -3782
  44. package/dist/subagents/index.js.map +0 -1
  45. package/dist/subagents/metadata.cjs +0 -258
  46. package/dist/subagents/metadata.cjs.map +0 -1
  47. package/dist/subagents/metadata.js +0 -225
  48. package/dist/subagents/metadata.js.map +0 -1
  49. package/dist/tasks/index.cjs +0 -1976
  50. package/dist/tasks/index.cjs.map +0 -1
  51. package/dist/tasks/index.js +0 -1943
  52. package/dist/tasks/index.js.map +0 -1
@@ -1,258 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/subagents/metadata.ts
21
- var metadata_exports = {};
22
- __export(metadata_exports, {
23
- INTEGRATIONS: () => INTEGRATIONS,
24
- SUBAGENTS: () => SUBAGENTS,
25
- getAllSubAgents: () => getAllSubAgents,
26
- getIntegration: () => getIntegration,
27
- getIntegrationDisplayName: () => getIntegrationDisplayName,
28
- getOptionalSubAgents: () => getOptionalSubAgents,
29
- getRequiredIntegrationsFromSubagents: () => getRequiredIntegrationsFromSubagents,
30
- getRequiredSubAgents: () => getRequiredSubAgents,
31
- getSubAgent: () => getSubAgent
32
- });
33
- module.exports = __toCommonJS(metadata_exports);
34
- var INTEGRATIONS = {
35
- linear: {
36
- id: "linear",
37
- name: "Linear",
38
- provider: "linear",
39
- requiredMCP: "mcp__linear__*",
40
- integrationType: "oauth"
41
- },
42
- jira: {
43
- id: "jira",
44
- name: "Jira",
45
- provider: "jira",
46
- requiredMCP: "mcp__jira__*",
47
- integrationType: "oauth"
48
- },
49
- "jira-server": {
50
- id: "jira-server",
51
- name: "Jira Server",
52
- provider: "jira-server",
53
- requiredMCP: "mcp__jira-server__*",
54
- integrationType: "custom"
55
- },
56
- "azure-devops": {
57
- id: "azure-devops",
58
- name: "Azure DevOps",
59
- provider: "azure-devops",
60
- requiredMCP: "mcp__azure-devops__*",
61
- integrationType: "oauth"
62
- // Uses Nango with API key auth for PAT
63
- },
64
- notion: {
65
- id: "notion",
66
- name: "Notion",
67
- provider: "notion",
68
- requiredMCP: "mcp__notion__*",
69
- integrationType: "oauth"
70
- },
71
- confluence: {
72
- id: "confluence",
73
- name: "Confluence",
74
- provider: "confluence",
75
- requiredMCP: "mcp__confluence__*",
76
- integrationType: "oauth"
77
- },
78
- slack: {
79
- id: "slack",
80
- name: "Slack",
81
- provider: "slack",
82
- requiredMCP: "mcp__slack__*",
83
- integrationType: "oauth"
84
- },
85
- playwright: {
86
- id: "playwright",
87
- name: "Playwright",
88
- provider: "playwright",
89
- requiredMCP: "mcp__playwright__*",
90
- isLocal: true,
91
- // Playwright runs locally, no external connector needed
92
- integrationType: "local"
93
- },
94
- teams: {
95
- id: "teams",
96
- name: "Microsoft Teams",
97
- provider: "teams",
98
- requiredMCP: "mcp__teams__*",
99
- integrationType: "oauth"
100
- },
101
- email: {
102
- id: "email",
103
- name: "Email",
104
- provider: "resend",
105
- requiredMCP: "mcp__resend__*",
106
- integrationType: "local"
107
- // Uses platform API key, no OAuth needed
108
- },
109
- github: {
110
- id: "github",
111
- name: "GitHub",
112
- provider: "github",
113
- requiredMCP: "mcp__github__*",
114
- integrationType: "oauth"
115
- },
116
- local: {
117
- id: "local",
118
- name: "Local (Terminal)",
119
- provider: "local",
120
- // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)
121
- isLocal: true,
122
- integrationType: "local"
123
- }
124
- };
125
- var SUBAGENTS = {
126
- "test-runner": {
127
- role: "test-runner",
128
- name: "Test Runner",
129
- description: "Execute automated browser tests (always included)",
130
- icon: "play",
131
- integrations: [INTEGRATIONS.playwright],
132
- model: "sonnet",
133
- color: "green",
134
- isRequired: true,
135
- version: "1.0.0"
136
- },
137
- "team-communicator": {
138
- role: "team-communicator",
139
- name: "Team Communicator",
140
- description: "Send notifications and updates to your team",
141
- icon: "message-square",
142
- integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],
143
- model: "sonnet",
144
- color: "blue",
145
- isRequired: true,
146
- // Required - CLI uses 'local' (auto-configured), cloud uses email fallback
147
- defaultIntegration: "email",
148
- // Email fallback for cloud (CLI auto-configures 'local' separately)
149
- version: "1.0.0"
150
- },
151
- "issue-tracker": {
152
- role: "issue-tracker",
153
- name: "Issue Tracker",
154
- description: "Automatically create and track bugs and issues",
155
- icon: "bot",
156
- integrations: [
157
- // INTEGRATIONS.linear,
158
- INTEGRATIONS.jira,
159
- INTEGRATIONS["jira-server"],
160
- INTEGRATIONS["azure-devops"],
161
- INTEGRATIONS.notion,
162
- INTEGRATIONS.slack
163
- ],
164
- model: "sonnet",
165
- color: "red",
166
- version: "1.0.0"
167
- },
168
- "documentation-researcher": {
169
- role: "documentation-researcher",
170
- name: "Documentation Researcher",
171
- description: "Search and retrieve information from your documentation",
172
- icon: "file-search",
173
- integrations: [
174
- INTEGRATIONS.notion,
175
- INTEGRATIONS.jira
176
- // INTEGRATIONS.confluence
177
- ],
178
- model: "sonnet",
179
- color: "cyan",
180
- version: "1.0.0"
181
- },
182
- "test-code-generator": {
183
- role: "test-code-generator",
184
- name: "Test Code Generator",
185
- description: "Generate automated Playwright test scripts and Page Objects",
186
- icon: "code",
187
- integrations: [INTEGRATIONS.playwright],
188
- model: "sonnet",
189
- color: "purple",
190
- isRequired: true,
191
- // Required for automated test generation
192
- version: "1.0.0"
193
- },
194
- "test-debugger-fixer": {
195
- role: "test-debugger-fixer",
196
- name: "Test Debugger & Fixer",
197
- description: "Debug and fix failing automated tests automatically",
198
- icon: "wrench",
199
- integrations: [INTEGRATIONS.playwright],
200
- model: "sonnet",
201
- color: "yellow",
202
- isRequired: true,
203
- // Required for automated test execution and fixing
204
- version: "1.0.0"
205
- },
206
- "changelog-historian": {
207
- role: "changelog-historian",
208
- name: "Changelog Historian",
209
- description: "Retrieves and analyzes code changes from GitHub PRs and commits",
210
- icon: "git-pull-request",
211
- integrations: [INTEGRATIONS.github],
212
- model: "haiku",
213
- color: "gray",
214
- isRequired: false,
215
- version: "1.0.0"
216
- }
217
- };
218
- function getAllSubAgents() {
219
- return Object.values(SUBAGENTS);
220
- }
221
- function getSubAgent(role) {
222
- return SUBAGENTS[role];
223
- }
224
- function getIntegration(integrationId) {
225
- return INTEGRATIONS[integrationId];
226
- }
227
- function getRequiredSubAgents() {
228
- return Object.values(SUBAGENTS).filter((agent) => agent.isRequired);
229
- }
230
- function getOptionalSubAgents() {
231
- return Object.values(SUBAGENTS).filter((agent) => !agent.isRequired);
232
- }
233
- function getIntegrationDisplayName(integrationId) {
234
- return INTEGRATIONS[integrationId]?.name || integrationId;
235
- }
236
- function getRequiredIntegrationsFromSubagents(roles) {
237
- const integrations = /* @__PURE__ */ new Set();
238
- for (const role of roles) {
239
- const agent = SUBAGENTS[role];
240
- if (agent?.integrations) {
241
- agent.integrations.forEach((int) => integrations.add(int.id));
242
- }
243
- }
244
- return Array.from(integrations);
245
- }
246
- // Annotate the CommonJS export names for ESM import in node:
247
- 0 && (module.exports = {
248
- INTEGRATIONS,
249
- SUBAGENTS,
250
- getAllSubAgents,
251
- getIntegration,
252
- getIntegrationDisplayName,
253
- getOptionalSubAgents,
254
- getRequiredIntegrationsFromSubagents,
255
- getRequiredSubAgents,
256
- getSubAgent
257
- });
258
- //# sourceMappingURL=metadata.cjs.map
@@ -1 +0,0 @@
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 requiredMCP: 'mcp__playwright__*',\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 'test-runner': {\r\n role: 'test-runner',\r\n name: 'Test Runner',\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 Playwright 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,225 +0,0 @@
1
- // src/subagents/metadata.ts
2
- var INTEGRATIONS = {
3
- linear: {
4
- id: "linear",
5
- name: "Linear",
6
- provider: "linear",
7
- requiredMCP: "mcp__linear__*",
8
- integrationType: "oauth"
9
- },
10
- jira: {
11
- id: "jira",
12
- name: "Jira",
13
- provider: "jira",
14
- requiredMCP: "mcp__jira__*",
15
- integrationType: "oauth"
16
- },
17
- "jira-server": {
18
- id: "jira-server",
19
- name: "Jira Server",
20
- provider: "jira-server",
21
- requiredMCP: "mcp__jira-server__*",
22
- integrationType: "custom"
23
- },
24
- "azure-devops": {
25
- id: "azure-devops",
26
- name: "Azure DevOps",
27
- provider: "azure-devops",
28
- requiredMCP: "mcp__azure-devops__*",
29
- integrationType: "oauth"
30
- // Uses Nango with API key auth for PAT
31
- },
32
- notion: {
33
- id: "notion",
34
- name: "Notion",
35
- provider: "notion",
36
- requiredMCP: "mcp__notion__*",
37
- integrationType: "oauth"
38
- },
39
- confluence: {
40
- id: "confluence",
41
- name: "Confluence",
42
- provider: "confluence",
43
- requiredMCP: "mcp__confluence__*",
44
- integrationType: "oauth"
45
- },
46
- slack: {
47
- id: "slack",
48
- name: "Slack",
49
- provider: "slack",
50
- requiredMCP: "mcp__slack__*",
51
- integrationType: "oauth"
52
- },
53
- playwright: {
54
- id: "playwright",
55
- name: "Playwright",
56
- provider: "playwright",
57
- requiredMCP: "mcp__playwright__*",
58
- isLocal: true,
59
- // Playwright runs locally, no external connector needed
60
- integrationType: "local"
61
- },
62
- teams: {
63
- id: "teams",
64
- name: "Microsoft Teams",
65
- provider: "teams",
66
- requiredMCP: "mcp__teams__*",
67
- integrationType: "oauth"
68
- },
69
- email: {
70
- id: "email",
71
- name: "Email",
72
- provider: "resend",
73
- requiredMCP: "mcp__resend__*",
74
- integrationType: "local"
75
- // Uses platform API key, no OAuth needed
76
- },
77
- github: {
78
- id: "github",
79
- name: "GitHub",
80
- provider: "github",
81
- requiredMCP: "mcp__github__*",
82
- integrationType: "oauth"
83
- },
84
- local: {
85
- id: "local",
86
- name: "Local (Terminal)",
87
- provider: "local",
88
- // No requiredMCP - uses built-in Claude Code tools (AskUserQuestion, text output)
89
- isLocal: true,
90
- integrationType: "local"
91
- }
92
- };
93
- var SUBAGENTS = {
94
- "test-runner": {
95
- role: "test-runner",
96
- name: "Test Runner",
97
- description: "Execute automated browser tests (always included)",
98
- icon: "play",
99
- integrations: [INTEGRATIONS.playwright],
100
- model: "sonnet",
101
- color: "green",
102
- isRequired: true,
103
- version: "1.0.0"
104
- },
105
- "team-communicator": {
106
- role: "team-communicator",
107
- name: "Team Communicator",
108
- description: "Send notifications and updates to your team",
109
- icon: "message-square",
110
- integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],
111
- model: "sonnet",
112
- color: "blue",
113
- isRequired: true,
114
- // Required - CLI uses 'local' (auto-configured), cloud uses email fallback
115
- defaultIntegration: "email",
116
- // Email fallback for cloud (CLI auto-configures 'local' separately)
117
- version: "1.0.0"
118
- },
119
- "issue-tracker": {
120
- role: "issue-tracker",
121
- name: "Issue Tracker",
122
- description: "Automatically create and track bugs and issues",
123
- icon: "bot",
124
- integrations: [
125
- // INTEGRATIONS.linear,
126
- INTEGRATIONS.jira,
127
- INTEGRATIONS["jira-server"],
128
- INTEGRATIONS["azure-devops"],
129
- INTEGRATIONS.notion,
130
- INTEGRATIONS.slack
131
- ],
132
- model: "sonnet",
133
- color: "red",
134
- version: "1.0.0"
135
- },
136
- "documentation-researcher": {
137
- role: "documentation-researcher",
138
- name: "Documentation Researcher",
139
- description: "Search and retrieve information from your documentation",
140
- icon: "file-search",
141
- integrations: [
142
- INTEGRATIONS.notion,
143
- INTEGRATIONS.jira
144
- // INTEGRATIONS.confluence
145
- ],
146
- model: "sonnet",
147
- color: "cyan",
148
- version: "1.0.0"
149
- },
150
- "test-code-generator": {
151
- role: "test-code-generator",
152
- name: "Test Code Generator",
153
- description: "Generate automated Playwright test scripts and Page Objects",
154
- icon: "code",
155
- integrations: [INTEGRATIONS.playwright],
156
- model: "sonnet",
157
- color: "purple",
158
- isRequired: true,
159
- // Required for automated test generation
160
- version: "1.0.0"
161
- },
162
- "test-debugger-fixer": {
163
- role: "test-debugger-fixer",
164
- name: "Test Debugger & Fixer",
165
- description: "Debug and fix failing automated tests automatically",
166
- icon: "wrench",
167
- integrations: [INTEGRATIONS.playwright],
168
- model: "sonnet",
169
- color: "yellow",
170
- isRequired: true,
171
- // Required for automated test execution and fixing
172
- version: "1.0.0"
173
- },
174
- "changelog-historian": {
175
- role: "changelog-historian",
176
- name: "Changelog Historian",
177
- description: "Retrieves and analyzes code changes from GitHub PRs and commits",
178
- icon: "git-pull-request",
179
- integrations: [INTEGRATIONS.github],
180
- model: "haiku",
181
- color: "gray",
182
- isRequired: false,
183
- version: "1.0.0"
184
- }
185
- };
186
- function getAllSubAgents() {
187
- return Object.values(SUBAGENTS);
188
- }
189
- function getSubAgent(role) {
190
- return SUBAGENTS[role];
191
- }
192
- function getIntegration(integrationId) {
193
- return INTEGRATIONS[integrationId];
194
- }
195
- function getRequiredSubAgents() {
196
- return Object.values(SUBAGENTS).filter((agent) => agent.isRequired);
197
- }
198
- function getOptionalSubAgents() {
199
- return Object.values(SUBAGENTS).filter((agent) => !agent.isRequired);
200
- }
201
- function getIntegrationDisplayName(integrationId) {
202
- return INTEGRATIONS[integrationId]?.name || integrationId;
203
- }
204
- function getRequiredIntegrationsFromSubagents(roles) {
205
- const integrations = /* @__PURE__ */ new Set();
206
- for (const role of roles) {
207
- const agent = SUBAGENTS[role];
208
- if (agent?.integrations) {
209
- agent.integrations.forEach((int) => integrations.add(int.id));
210
- }
211
- }
212
- return Array.from(integrations);
213
- }
214
- export {
215
- INTEGRATIONS,
216
- SUBAGENTS,
217
- getAllSubAgents,
218
- getIntegration,
219
- getIntegrationDisplayName,
220
- getOptionalSubAgents,
221
- getRequiredIntegrationsFromSubagents,
222
- getRequiredSubAgents,
223
- getSubAgent
224
- };
225
- //# sourceMappingURL=metadata.js.map
@@ -1 +0,0 @@
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 requiredMCP: 'mcp__playwright__*',\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 'test-runner': {\r\n role: 'test-runner',\r\n name: 'Test Runner',\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 Playwright 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":[]}