@bugzy-ai/bugzy 1.2.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +248 -0
  3. package/dist/cli/index.cjs +7547 -0
  4. package/dist/cli/index.cjs.map +1 -0
  5. package/dist/cli/index.d.cts +1 -0
  6. package/dist/cli/index.d.ts +1 -0
  7. package/dist/cli/index.js +7539 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/index.cjs +6439 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.cts +54 -0
  12. package/dist/index.d.ts +54 -0
  13. package/dist/index.js +6383 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/subagents/index.cjs +2703 -0
  16. package/dist/subagents/index.cjs.map +1 -0
  17. package/dist/subagents/index.d.cts +34 -0
  18. package/dist/subagents/index.d.ts +34 -0
  19. package/dist/subagents/index.js +2662 -0
  20. package/dist/subagents/index.js.map +1 -0
  21. package/dist/subagents/metadata.cjs +207 -0
  22. package/dist/subagents/metadata.cjs.map +1 -0
  23. package/dist/subagents/metadata.d.cts +31 -0
  24. package/dist/subagents/metadata.d.ts +31 -0
  25. package/dist/subagents/metadata.js +174 -0
  26. package/dist/subagents/metadata.js.map +1 -0
  27. package/dist/tasks/index.cjs +3464 -0
  28. package/dist/tasks/index.cjs.map +1 -0
  29. package/dist/tasks/index.d.cts +44 -0
  30. package/dist/tasks/index.d.ts +44 -0
  31. package/dist/tasks/index.js +3431 -0
  32. package/dist/tasks/index.js.map +1 -0
  33. package/dist/templates/init/.bugzy/runtime/project-context.md +35 -0
  34. package/dist/templates/init/.bugzy/runtime/templates/test-plan-template.md +25 -0
  35. package/dist/templates/init/.bugzy/runtime/testing-best-practices.md +278 -0
  36. package/dist/templates/init/.gitignore-template +4 -0
  37. package/package.json +95 -0
  38. package/templates/init/.bugzy/runtime/knowledge-base.md +61 -0
  39. package/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -0
  40. package/templates/init/.bugzy/runtime/project-context.md +35 -0
  41. package/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -0
  42. package/templates/init/.bugzy/runtime/templates/test-plan-template.md +25 -0
  43. package/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -0
  44. package/templates/init/.bugzy/runtime/test-execution-strategy.md +535 -0
  45. package/templates/init/.bugzy/runtime/testing-best-practices.md +632 -0
  46. package/templates/init/.gitignore-template +25 -0
  47. package/templates/init/CLAUDE.md +157 -0
  48. package/templates/init/test-runs/README.md +45 -0
  49. package/templates/playwright/BasePage.template.ts +190 -0
  50. package/templates/playwright/auth.setup.template.ts +89 -0
  51. package/templates/playwright/dataGenerators.helper.template.ts +148 -0
  52. package/templates/playwright/dateUtils.helper.template.ts +96 -0
  53. package/templates/playwright/pages.fixture.template.ts +50 -0
  54. package/templates/playwright/playwright.config.template.ts +97 -0
  55. package/templates/playwright/reporters/bugzy-reporter.ts +454 -0
@@ -0,0 +1,31 @@
1
+ type IntegrationType = 'oauth' | 'local' | 'custom';
2
+ interface SubAgentIntegration {
3
+ id: string;
4
+ name: string;
5
+ provider: string;
6
+ requiredMCP?: string;
7
+ isLocal?: boolean;
8
+ integrationType: IntegrationType;
9
+ }
10
+ interface SubAgentMetadata {
11
+ role: string;
12
+ name: string;
13
+ description: string;
14
+ icon: string;
15
+ integrations: SubAgentIntegration[];
16
+ model?: string;
17
+ color?: string;
18
+ isRequired?: boolean;
19
+ version: string;
20
+ }
21
+ declare const INTEGRATIONS: Record<string, SubAgentIntegration>;
22
+ declare const SUBAGENTS: Record<string, SubAgentMetadata>;
23
+ declare function getAllSubAgents(): SubAgentMetadata[];
24
+ declare function getSubAgent(role: string): SubAgentMetadata | undefined;
25
+ declare function getIntegration(integrationId: string): SubAgentIntegration | undefined;
26
+ declare function getRequiredSubAgents(): SubAgentMetadata[];
27
+ declare function getOptionalSubAgents(): SubAgentMetadata[];
28
+ declare function getIntegrationDisplayName(integrationId: string): string;
29
+ declare function getRequiredIntegrationsFromSubagents(roles: string[]): string[];
30
+
31
+ export { INTEGRATIONS, type IntegrationType, SUBAGENTS, type SubAgentIntegration, type SubAgentMetadata, getAllSubAgents, getIntegration, getIntegrationDisplayName, getOptionalSubAgents, getRequiredIntegrationsFromSubagents, getRequiredSubAgents, getSubAgent };
@@ -0,0 +1,174 @@
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
+ notion: {
25
+ id: "notion",
26
+ name: "Notion",
27
+ provider: "notion",
28
+ requiredMCP: "mcp__notion__*",
29
+ integrationType: "oauth"
30
+ },
31
+ confluence: {
32
+ id: "confluence",
33
+ name: "Confluence",
34
+ provider: "confluence",
35
+ requiredMCP: "mcp__confluence__*",
36
+ integrationType: "oauth"
37
+ },
38
+ slack: {
39
+ id: "slack",
40
+ name: "Slack",
41
+ provider: "slack",
42
+ requiredMCP: "mcp__slack__*",
43
+ integrationType: "oauth"
44
+ },
45
+ playwright: {
46
+ id: "playwright",
47
+ name: "Playwright",
48
+ provider: "playwright",
49
+ requiredMCP: "mcp__playwright__*",
50
+ isLocal: true,
51
+ // Playwright runs locally, no external connector needed
52
+ integrationType: "local"
53
+ },
54
+ teams: {
55
+ id: "teams",
56
+ name: "Microsoft Teams",
57
+ provider: "teams",
58
+ requiredMCP: "mcp__teams__*",
59
+ integrationType: "oauth"
60
+ }
61
+ };
62
+ var SUBAGENTS = {
63
+ "test-runner": {
64
+ role: "test-runner",
65
+ name: "Test Runner",
66
+ description: "Execute automated browser tests (always included)",
67
+ icon: "play",
68
+ integrations: [INTEGRATIONS.playwright],
69
+ model: "sonnet",
70
+ color: "green",
71
+ isRequired: true,
72
+ version: "1.0.0"
73
+ },
74
+ "team-communicator": {
75
+ role: "team-communicator",
76
+ name: "Team Communicator",
77
+ description: "Send notifications and updates to your team",
78
+ icon: "message-square",
79
+ integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],
80
+ model: "sonnet",
81
+ color: "blue",
82
+ version: "1.0.0"
83
+ },
84
+ "issue-tracker": {
85
+ role: "issue-tracker",
86
+ name: "Issue Tracker",
87
+ description: "Automatically create and track bugs and issues",
88
+ icon: "bot",
89
+ integrations: [
90
+ INTEGRATIONS.linear,
91
+ INTEGRATIONS.jira,
92
+ INTEGRATIONS["jira-server"],
93
+ INTEGRATIONS.notion,
94
+ INTEGRATIONS.slack
95
+ ],
96
+ model: "sonnet",
97
+ color: "red",
98
+ version: "1.0.0"
99
+ },
100
+ "documentation-researcher": {
101
+ role: "documentation-researcher",
102
+ name: "Documentation Researcher",
103
+ description: "Search and retrieve information from your documentation",
104
+ icon: "file-search",
105
+ integrations: [INTEGRATIONS.notion, INTEGRATIONS.confluence],
106
+ model: "sonnet",
107
+ color: "cyan",
108
+ version: "1.0.0"
109
+ },
110
+ "test-code-generator": {
111
+ role: "test-code-generator",
112
+ name: "Test Code Generator",
113
+ description: "Generate automated Playwright test scripts and Page Objects",
114
+ icon: "code",
115
+ integrations: [INTEGRATIONS.playwright],
116
+ model: "sonnet",
117
+ color: "purple",
118
+ isRequired: true,
119
+ // Required for automated test generation
120
+ version: "1.0.0"
121
+ },
122
+ "test-debugger-fixer": {
123
+ role: "test-debugger-fixer",
124
+ name: "Test Debugger & Fixer",
125
+ description: "Debug and fix failing automated tests automatically",
126
+ icon: "wrench",
127
+ integrations: [INTEGRATIONS.playwright],
128
+ model: "sonnet",
129
+ color: "yellow",
130
+ isRequired: true,
131
+ // Required for automated test execution and fixing
132
+ version: "1.0.0"
133
+ }
134
+ };
135
+ function getAllSubAgents() {
136
+ return Object.values(SUBAGENTS);
137
+ }
138
+ function getSubAgent(role) {
139
+ return SUBAGENTS[role];
140
+ }
141
+ function getIntegration(integrationId) {
142
+ return INTEGRATIONS[integrationId];
143
+ }
144
+ function getRequiredSubAgents() {
145
+ return Object.values(SUBAGENTS).filter((agent) => agent.isRequired);
146
+ }
147
+ function getOptionalSubAgents() {
148
+ return Object.values(SUBAGENTS).filter((agent) => !agent.isRequired);
149
+ }
150
+ function getIntegrationDisplayName(integrationId) {
151
+ return INTEGRATIONS[integrationId]?.name || integrationId;
152
+ }
153
+ function getRequiredIntegrationsFromSubagents(roles) {
154
+ const integrations = /* @__PURE__ */ new Set();
155
+ for (const role of roles) {
156
+ const agent = SUBAGENTS[role];
157
+ if (agent?.integrations) {
158
+ agent.integrations.forEach((int) => integrations.add(int.id));
159
+ }
160
+ }
161
+ return Array.from(integrations);
162
+ }
163
+ export {
164
+ INTEGRATIONS,
165
+ SUBAGENTS,
166
+ getAllSubAgents,
167
+ getIntegration,
168
+ getIntegrationDisplayName,
169
+ getOptionalSubAgents,
170
+ getRequiredIntegrationsFromSubagents,
171
+ getRequiredSubAgents,
172
+ getSubAgent
173
+ };
174
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/subagents/metadata.ts"],"sourcesContent":["/**\n * Sub-Agents Metadata\n * Client-safe metadata without file system access\n */\n\n/**\n * Integration type determines how credentials are obtained\n * - 'oauth': Uses Nango OAuth flow (Slack, Notion, Jira Cloud, etc.)\n * - 'local': No configuration needed (Playwright)\n * - 'custom': Custom configuration flow (Jira Server via MCP tunnel)\n */\nexport type IntegrationType = 'oauth' | 'local' | 'custom';\n\n/**\n * Integration configuration for sub-agents\n */\nexport interface SubAgentIntegration {\n id: string;\n name: string;\n provider: string;\n requiredMCP?: string;\n /** @deprecated Use integrationType instead */\n isLocal?: boolean; // True if integration doesn't require external connector (e.g., playwright)\n integrationType: IntegrationType;\n}\n\n/**\n * Sub-Agent Metadata\n */\nexport interface SubAgentMetadata {\n role: string;\n name: string;\n description: string;\n icon: string; // Icon name (e.g., 'play', 'message-square', 'bot', 'file-search')\n integrations: SubAgentIntegration[];\n model?: string;\n color?: string;\n isRequired?: boolean;\n version: string;\n}\n\n/**\n * Available integrations by provider\n */\nexport const INTEGRATIONS: Record<string, SubAgentIntegration> = {\n linear: {\n id: 'linear',\n name: 'Linear',\n provider: 'linear',\n requiredMCP: 'mcp__linear__*',\n integrationType: 'oauth'\n },\n jira: {\n id: 'jira',\n name: 'Jira',\n provider: 'jira',\n requiredMCP: 'mcp__jira__*',\n integrationType: 'oauth'\n },\n 'jira-server': {\n id: 'jira-server',\n name: 'Jira Server',\n provider: 'jira-server',\n requiredMCP: 'mcp__jira-server__*',\n integrationType: 'custom'\n },\n notion: {\n id: 'notion',\n name: 'Notion',\n provider: 'notion',\n requiredMCP: 'mcp__notion__*',\n integrationType: 'oauth'\n },\n confluence: {\n id: 'confluence',\n name: 'Confluence',\n provider: 'confluence',\n requiredMCP: 'mcp__confluence__*',\n integrationType: 'oauth'\n },\n slack: {\n id: 'slack',\n name: 'Slack',\n provider: 'slack',\n requiredMCP: 'mcp__slack__*',\n integrationType: 'oauth'\n },\n playwright: {\n id: 'playwright',\n name: 'Playwright',\n provider: 'playwright',\n requiredMCP: 'mcp__playwright__*',\n isLocal: true, // Playwright runs locally, no external connector needed\n integrationType: 'local'\n },\n teams: {\n id: 'teams',\n name: 'Microsoft Teams',\n provider: 'teams',\n requiredMCP: 'mcp__teams__*',\n integrationType: 'oauth'\n }\n};\n\n/**\n * Sub-Agents Registry - metadata only (templates loaded from files)\n */\nexport const SUBAGENTS: Record<string, SubAgentMetadata> = {\n 'test-runner': {\n role: 'test-runner',\n name: 'Test Runner',\n description: 'Execute automated browser tests (always included)',\n icon: 'play',\n integrations: [INTEGRATIONS.playwright],\n model: 'sonnet',\n color: 'green',\n isRequired: true,\n version: '1.0.0'\n },\n 'team-communicator': {\n role: 'team-communicator',\n name: 'Team Communicator',\n description: 'Send notifications and updates to your team',\n icon: 'message-square',\n integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],\n model: 'sonnet',\n color: 'blue',\n version: '1.0.0'\n },\n 'issue-tracker': {\n role: 'issue-tracker',\n name: 'Issue Tracker',\n description: 'Automatically create and track bugs and issues',\n icon: 'bot',\n integrations: [\n INTEGRATIONS.linear,\n INTEGRATIONS.jira,\n INTEGRATIONS['jira-server'],\n INTEGRATIONS.notion,\n INTEGRATIONS.slack\n ],\n model: 'sonnet',\n color: 'red',\n version: '1.0.0'\n },\n 'documentation-researcher': {\n role: 'documentation-researcher',\n name: 'Documentation Researcher',\n description: 'Search and retrieve information from your documentation',\n icon: 'file-search',\n integrations: [INTEGRATIONS.notion, INTEGRATIONS.confluence],\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":";AA4CO,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,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,IACV,aAAa;AAAA,IACb,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;AACF;AAKO,IAAM,YAA8C;AAAA,EACzD,eAAe;AAAA,IACb,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,KAAK;AAAA,IACrD,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,aAAa;AAAA,MAC1B,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,CAAC,aAAa,QAAQ,aAAa,UAAU;AAAA,IAC3D,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;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":[]}