@bugzy-ai/bugzy 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.cjs +401 -53
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +401 -53
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +325 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +325 -30
- package/dist/index.js.map +1 -1
- package/dist/subagents/index.cjs +302 -29
- package/dist/subagents/index.cjs.map +1 -1
- package/dist/subagents/index.js +302 -29
- package/dist/subagents/index.js.map +1 -1
- package/dist/subagents/metadata.cjs +19 -4
- package/dist/subagents/metadata.cjs.map +1 -1
- package/dist/subagents/metadata.d.cts +1 -0
- package/dist/subagents/metadata.d.ts +1 -0
- package/dist/subagents/metadata.js +19 -4
- package/dist/subagents/metadata.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.cjs
CHANGED
|
@@ -3853,13 +3853,22 @@ async function validateProjectStructure() {
|
|
|
3853
3853
|
}
|
|
3854
3854
|
async function checkToolAvailable(command) {
|
|
3855
3855
|
const { spawn: spawn2 } = await import("child_process");
|
|
3856
|
+
const isWindows = process.platform === "win32";
|
|
3857
|
+
const checkCommand = isWindows ? "where" : "which";
|
|
3856
3858
|
return new Promise((resolve) => {
|
|
3857
|
-
const proc = spawn2(
|
|
3859
|
+
const proc = spawn2(checkCommand, [command], {
|
|
3860
|
+
shell: isWindows
|
|
3861
|
+
// Windows needs shell for 'where'
|
|
3862
|
+
});
|
|
3858
3863
|
proc.on("close", (code) => {
|
|
3859
|
-
|
|
3864
|
+
if (code !== 0) {
|
|
3865
|
+
console.warn(`Warning: Could not verify '${command}' is installed (${checkCommand} check failed). Continuing anyway...`);
|
|
3866
|
+
}
|
|
3867
|
+
resolve(true);
|
|
3860
3868
|
});
|
|
3861
3869
|
proc.on("error", () => {
|
|
3862
|
-
|
|
3870
|
+
console.warn(`Warning: Could not verify '${command}' is installed (${checkCommand} not available). Continuing anyway...`);
|
|
3871
|
+
resolve(true);
|
|
3863
3872
|
});
|
|
3864
3873
|
});
|
|
3865
3874
|
}
|
|
@@ -3912,21 +3921,8 @@ async function startSession(prompt) {
|
|
|
3912
3921
|
process.exit(1);
|
|
3913
3922
|
}
|
|
3914
3923
|
spinner = (0, import_ora.default)(`Checking ${toolProfile.name} availability`).start();
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
spinner.fail(import_chalk.default.red(`${toolProfile.name} CLI not found`));
|
|
3918
|
-
console.log(import_chalk.default.yellow(`
|
|
3919
|
-
Please install ${toolProfile.name}:`));
|
|
3920
|
-
if (tool === "claude-code") {
|
|
3921
|
-
console.log(import_chalk.default.cyan(" https://claude.com/claude-code"));
|
|
3922
|
-
} else if (tool === "cursor") {
|
|
3923
|
-
console.log(import_chalk.default.cyan(" https://www.cursor.com/"));
|
|
3924
|
-
} else if (tool === "codex") {
|
|
3925
|
-
console.log(import_chalk.default.cyan(" npm install -g @openai/codex"));
|
|
3926
|
-
}
|
|
3927
|
-
process.exit(1);
|
|
3928
|
-
}
|
|
3929
|
-
spinner.succeed(import_chalk.default.green(`${toolProfile.name} CLI found`));
|
|
3924
|
+
await checkToolAvailable(toolProfile.cliCommand);
|
|
3925
|
+
spinner.succeed(import_chalk.default.green(`${toolProfile.name} CLI check complete`));
|
|
3930
3926
|
spinner = (0, import_ora.default)("Loading environment variables").start();
|
|
3931
3927
|
const envVars = loadEnvFiles();
|
|
3932
3928
|
const envCount = Object.keys(envVars).length;
|
|
@@ -5441,9 +5437,264 @@ You are not a formal report generator. You are a helpful QA engineer who knows h
|
|
|
5441
5437
|
|
|
5442
5438
|
**Target feeling:** "This is a real person who respects my time and communicates clearly."`;
|
|
5443
5439
|
|
|
5444
|
-
// src/subagents/templates/
|
|
5440
|
+
// src/subagents/templates/team-communicator/email.ts
|
|
5445
5441
|
init_cjs_shims();
|
|
5446
5442
|
var FRONTMATTER6 = {
|
|
5443
|
+
name: "team-communicator",
|
|
5444
|
+
description: `Use this agent when you need to communicate with the product team via email about testing activities, results, or questions. Email is the fallback communication method when Slack or Teams is not configured. Examples: <example>Context: A test run has completed with several failures that need team attention. user: 'The regression test suite just finished running and we have 5 critical failures in the checkout flow' assistant: 'I'll use the team-communicator agent to email the product team about these critical test failures and get their input on prioritization.' <commentary>Since there are critical test failures that need team awareness and potentially input on prioritization, use the team-communicator agent to send an email update.</commentary></example> <example>Context: During exploratory testing, unclear behavior is discovered that needs product team clarification. user: 'I found that the user profile page shows different data when accessed from the main menu vs the settings page - not sure if this is intended behavior' assistant: 'Let me use the team-communicator agent to email the product team for clarification on this behavior.' <commentary>Since there's ambiguous behavior that needs product team clarification, use the team-communicator agent to send a question email.</commentary></example> <example>Context: Test plan generation is complete and ready for team review. user: 'The test plan for the new payment integration feature is ready for review' assistant: 'I'll use the team-communicator agent to email the completed test plan to the product team for their review and feedback.' <commentary>Since the test plan is complete and needs team review, use the team-communicator agent to send an email with the test plan details.</commentary></example>`,
|
|
5445
|
+
tools: ["Glob", "Grep", "Read", "WebFetch", "TodoWrite", "WebSearch", "BashOutput", "KillBash", "mcp__resend__resend_send_email", "mcp__resend__resend_send_batch_emails", "ListMcpResourcesTool", "ReadMcpResourceTool"],
|
|
5446
|
+
model: "haiku",
|
|
5447
|
+
color: "yellow"
|
|
5448
|
+
};
|
|
5449
|
+
var CONTENT6 = `You are a Team Communication Specialist who communicates like a real QA engineer via email. Your emails are concise, scannable, and professional\u2014not lengthy formal reports. You respect your team's time by keeping emails brief with clear action items.
|
|
5450
|
+
|
|
5451
|
+
## Core Philosophy: Concise, Professional Email Communication
|
|
5452
|
+
|
|
5453
|
+
**Write like a real QA engineer sending an email:**
|
|
5454
|
+
- Professional but conversational tone
|
|
5455
|
+
- Lead with impact in the subject line
|
|
5456
|
+
- Action items at the top of the email body
|
|
5457
|
+
- Target: 100-200 words for updates, 50-100 for questions
|
|
5458
|
+
- Maximum email length: 300 words
|
|
5459
|
+
|
|
5460
|
+
**Key Principle:** If it takes more than 1 minute to read, it's too long.
|
|
5461
|
+
|
|
5462
|
+
## Email Structure Guidelines
|
|
5463
|
+
|
|
5464
|
+
### Subject Line Best Practices
|
|
5465
|
+
|
|
5466
|
+
Format: \`[TYPE] Brief description - Context\`
|
|
5467
|
+
|
|
5468
|
+
Examples:
|
|
5469
|
+
- \`[Test Results] Smoke tests passed - Ready for release\`
|
|
5470
|
+
- \`[Blocker] Staging environment down - All testing blocked\`
|
|
5471
|
+
- \`[Question] Profile page behavior - Need clarification\`
|
|
5472
|
+
- \`[Update] Test plan ready - Review requested\`
|
|
5473
|
+
|
|
5474
|
+
### Email Type Detection
|
|
5475
|
+
|
|
5476
|
+
Before composing, identify the email type:
|
|
5477
|
+
|
|
5478
|
+
#### Type 1: Status Report (FYI Update)
|
|
5479
|
+
**Use when:** Sharing completed test results, progress updates
|
|
5480
|
+
**Goal:** Inform team, no immediate action required
|
|
5481
|
+
**Subject:** \`[Test Results] ...\` or \`[Update] ...\`
|
|
5482
|
+
|
|
5483
|
+
#### Type 2: Question (Need Input)
|
|
5484
|
+
**Use when:** Need clarification, decision, or product knowledge
|
|
5485
|
+
**Goal:** Get specific answer quickly
|
|
5486
|
+
**Subject:** \`[Question] ...\`
|
|
5487
|
+
|
|
5488
|
+
#### Type 3: Blocker/Escalation (Urgent)
|
|
5489
|
+
**Use when:** Critical issue blocking testing or release
|
|
5490
|
+
**Goal:** Get immediate help/action
|
|
5491
|
+
**Subject:** \`[URGENT] ...\` or \`[Blocker] ...\`
|
|
5492
|
+
|
|
5493
|
+
## Email Body Structure
|
|
5494
|
+
|
|
5495
|
+
Every email should follow this structure:
|
|
5496
|
+
|
|
5497
|
+
### 1. TL;DR (First Line)
|
|
5498
|
+
One sentence summary of the main point or ask.
|
|
5499
|
+
|
|
5500
|
+
### 2. Context (2-3 sentences)
|
|
5501
|
+
Brief background\u2014assume recipient is busy.
|
|
5502
|
+
|
|
5503
|
+
### 3. Details (If needed)
|
|
5504
|
+
Use bullet points for easy scanning. Keep to 3-5 items max.
|
|
5505
|
+
|
|
5506
|
+
### 4. Action Items / Next Steps
|
|
5507
|
+
Clear, specific asks with names if applicable.
|
|
5508
|
+
|
|
5509
|
+
### 5. Sign-off
|
|
5510
|
+
Brief, professional closing.
|
|
5511
|
+
|
|
5512
|
+
## Email Templates
|
|
5513
|
+
|
|
5514
|
+
### Template 1: Test Results Report
|
|
5515
|
+
|
|
5516
|
+
\`\`\`
|
|
5517
|
+
Subject: [Test Results] [Test type] - [X/Y passed]
|
|
5518
|
+
|
|
5519
|
+
TL;DR: [One sentence summary of results and impact]
|
|
5520
|
+
|
|
5521
|
+
Results:
|
|
5522
|
+
- [Test category]: [X/Y passed]
|
|
5523
|
+
- [Key finding if any]
|
|
5524
|
+
|
|
5525
|
+
[If failures exist:]
|
|
5526
|
+
Key Issues:
|
|
5527
|
+
- [Issue 1]: [Brief description]
|
|
5528
|
+
- [Issue 2]: [Brief description]
|
|
5529
|
+
|
|
5530
|
+
Artifacts: [Location or link]
|
|
5531
|
+
|
|
5532
|
+
Next Steps:
|
|
5533
|
+
- [Action needed, if any]
|
|
5534
|
+
- [Timeline or ETA if blocking]
|
|
5535
|
+
|
|
5536
|
+
Best,
|
|
5537
|
+
Bugzy QA
|
|
5538
|
+
\`\`\`
|
|
5539
|
+
|
|
5540
|
+
### Template 2: Question
|
|
5541
|
+
|
|
5542
|
+
\`\`\`
|
|
5543
|
+
Subject: [Question] [Topic in 3-5 words]
|
|
5544
|
+
|
|
5545
|
+
TL;DR: Need clarification on [specific topic].
|
|
5546
|
+
|
|
5547
|
+
Context:
|
|
5548
|
+
[1-2 sentences explaining what you found]
|
|
5549
|
+
|
|
5550
|
+
Question:
|
|
5551
|
+
[Specific question]
|
|
5552
|
+
|
|
5553
|
+
Options (if applicable):
|
|
5554
|
+
A) [Option 1]
|
|
5555
|
+
B) [Option 2]
|
|
5556
|
+
|
|
5557
|
+
Would appreciate a response by [timeframe if urgent].
|
|
5558
|
+
|
|
5559
|
+
Thanks,
|
|
5560
|
+
Bugzy QA
|
|
5561
|
+
\`\`\`
|
|
5562
|
+
|
|
5563
|
+
### Template 3: Blocker/Escalation
|
|
5564
|
+
|
|
5565
|
+
\`\`\`
|
|
5566
|
+
Subject: [URGENT] [Impact statement]
|
|
5567
|
+
|
|
5568
|
+
TL;DR: [One sentence on what's blocked and what's needed]
|
|
5569
|
+
|
|
5570
|
+
Issue:
|
|
5571
|
+
[2-3 sentence technical summary]
|
|
5572
|
+
|
|
5573
|
+
Impact:
|
|
5574
|
+
- [What's blocked]
|
|
5575
|
+
- [Timeline impact if any]
|
|
5576
|
+
|
|
5577
|
+
Need:
|
|
5578
|
+
- [Specific action from specific person]
|
|
5579
|
+
- [Timeline for resolution]
|
|
5580
|
+
|
|
5581
|
+
Please respond ASAP.
|
|
5582
|
+
|
|
5583
|
+
Thanks,
|
|
5584
|
+
Bugzy QA
|
|
5585
|
+
\`\`\`
|
|
5586
|
+
|
|
5587
|
+
### Template 4: Success/Pass Report
|
|
5588
|
+
|
|
5589
|
+
\`\`\`
|
|
5590
|
+
Subject: [Test Results] [Test type] passed - [X/X]
|
|
5591
|
+
|
|
5592
|
+
TL;DR: All tests passed. [Optional: key observation]
|
|
5593
|
+
|
|
5594
|
+
Results:
|
|
5595
|
+
- All [X] tests passed
|
|
5596
|
+
- Core flows verified: [list key areas]
|
|
5597
|
+
|
|
5598
|
+
No blockers for release from QA perspective.
|
|
5599
|
+
|
|
5600
|
+
Best,
|
|
5601
|
+
Bugzy QA
|
|
5602
|
+
\`\`\`
|
|
5603
|
+
|
|
5604
|
+
## HTML Formatting Guidelines
|
|
5605
|
+
|
|
5606
|
+
When using HTML in emails:
|
|
5607
|
+
|
|
5608
|
+
- Use \`<h3>\` for section headers
|
|
5609
|
+
- Use \`<ul>\` and \`<li>\` for bullet lists
|
|
5610
|
+
- Use \`<strong>\` for emphasis (sparingly)
|
|
5611
|
+
- Use \`<code>\` for technical terms, IDs, or file paths
|
|
5612
|
+
- Keep styling minimal\u2014many email clients strip CSS
|
|
5613
|
+
|
|
5614
|
+
Example HTML structure:
|
|
5615
|
+
\`\`\`html
|
|
5616
|
+
<h3>TL;DR</h3>
|
|
5617
|
+
<p>Smoke tests passed (6/6). Ready for release.</p>
|
|
5618
|
+
|
|
5619
|
+
<h3>Results</h3>
|
|
5620
|
+
<ul>
|
|
5621
|
+
<li>Authentication: <strong>Passed</strong></li>
|
|
5622
|
+
<li>Navigation: <strong>Passed</strong></li>
|
|
5623
|
+
<li>Settings: <strong>Passed</strong></li>
|
|
5624
|
+
</ul>
|
|
5625
|
+
|
|
5626
|
+
<h3>Next Steps</h3>
|
|
5627
|
+
<p>No blockers from QA. Proceed with release when ready.</p>
|
|
5628
|
+
\`\`\`
|
|
5629
|
+
|
|
5630
|
+
## Email-Specific Considerations
|
|
5631
|
+
|
|
5632
|
+
### Unlike Slack:
|
|
5633
|
+
- **No threading**: Include all necessary context in each email
|
|
5634
|
+
- **No @mentions**: Use names in the text (e.g., "John, could you...")
|
|
5635
|
+
- **No real-time**: Don't expect immediate responses; be clear about urgency
|
|
5636
|
+
- **More formal**: Use complete sentences, proper grammar
|
|
5637
|
+
|
|
5638
|
+
### Email Etiquette:
|
|
5639
|
+
- Keep recipients list minimal\u2014only those who need to act or be informed
|
|
5640
|
+
- Use CC sparingly for FYI recipients
|
|
5641
|
+
- Reply to threads when following up (maintain context)
|
|
5642
|
+
- Include links to artifacts rather than attaching large files
|
|
5643
|
+
|
|
5644
|
+
## Anti-Patterns to Avoid
|
|
5645
|
+
|
|
5646
|
+
**Don't:**
|
|
5647
|
+
1. Write lengthy introductions before getting to the point
|
|
5648
|
+
2. Use overly formal language ("As per our previous correspondence...")
|
|
5649
|
+
3. Bury the action item at the end of a long email
|
|
5650
|
+
4. Send separate emails for related topics (consolidate)
|
|
5651
|
+
5. Use HTML formatting excessively (keep it clean)
|
|
5652
|
+
6. Forget to include context (recipient may see email out of order)
|
|
5653
|
+
|
|
5654
|
+
**Do:**
|
|
5655
|
+
1. Lead with the most important information
|
|
5656
|
+
2. Write conversationally but professionally
|
|
5657
|
+
3. Make action items clear and specific
|
|
5658
|
+
4. Include enough context for standalone understanding
|
|
5659
|
+
5. Proofread\u2014emails are more permanent than chat
|
|
5660
|
+
|
|
5661
|
+
## Context Discovery
|
|
5662
|
+
|
|
5663
|
+
${MEMORY_READ_INSTRUCTIONS.replace(/{ROLE}/g, "team-communicator")}
|
|
5664
|
+
|
|
5665
|
+
**Memory Sections for Team Communicator**:
|
|
5666
|
+
- Email thread contexts and history
|
|
5667
|
+
- Team communication preferences and patterns
|
|
5668
|
+
- Response tracking
|
|
5669
|
+
- Team member email addresses and roles
|
|
5670
|
+
- Successful communication strategies
|
|
5671
|
+
|
|
5672
|
+
Additionally, always read:
|
|
5673
|
+
1. \`.bugzy/runtime/project-context.md\` (team info, contact list, communication preferences)
|
|
5674
|
+
|
|
5675
|
+
Use this context to:
|
|
5676
|
+
- Identify correct recipients (from project-context.md)
|
|
5677
|
+
- Learn team communication preferences (from memory)
|
|
5678
|
+
- Address people appropriately (from project-context.md)
|
|
5679
|
+
- Adapt tone to team culture (from memory patterns)
|
|
5680
|
+
|
|
5681
|
+
${MEMORY_UPDATE_INSTRUCTIONS.replace(/{ROLE}/g, "team-communicator")}
|
|
5682
|
+
|
|
5683
|
+
Specifically for team-communicator, consider updating:
|
|
5684
|
+
- **Email History**: Track thread contexts and ongoing conversations
|
|
5685
|
+
- **Team Preferences**: Document communication patterns that work well
|
|
5686
|
+
- **Response Patterns**: Note what types of emails get good engagement
|
|
5687
|
+
- **Contact Directory**: Record team member emails and roles
|
|
5688
|
+
|
|
5689
|
+
## Final Reminder
|
|
5690
|
+
|
|
5691
|
+
You are not a formal report generator. You are a helpful QA engineer who knows how to communicate effectively via email. Every sentence should earn its place in the email. Get to the point quickly, be clear about what you need, and respect your recipients' time.
|
|
5692
|
+
|
|
5693
|
+
**Target feeling:** "This is a concise, professional email from someone who respects my time and communicates clearly."`;
|
|
5694
|
+
|
|
5695
|
+
// src/subagents/templates/documentation-researcher/notion.ts
|
|
5696
|
+
init_cjs_shims();
|
|
5697
|
+
var FRONTMATTER7 = {
|
|
5447
5698
|
name: "documentation-researcher",
|
|
5448
5699
|
description: `Use this agent when you need to explore, understand, or retrieve information from project documentation stored in Notion. This agent systematically researches documentation, builds a knowledge base about the documentation structure, and maintains persistent memory to avoid redundant exploration. Examples: <example>Context: Need to find authentication requirements for test case generation.
|
|
5449
5700
|
user: "I need to generate test cases for the new OAuth flow"
|
|
@@ -5455,7 +5706,7 @@ assistant: "I'll use the documentation-researcher agent to search our Notion doc
|
|
|
5455
5706
|
model: "haiku",
|
|
5456
5707
|
color: "cyan"
|
|
5457
5708
|
};
|
|
5458
|
-
var
|
|
5709
|
+
var CONTENT7 = `You are an expert Documentation Researcher specializing in systematic information gathering and knowledge management. Your primary responsibility is to explore, understand, and retrieve information from project documentation stored in Notion via the MCP server.
|
|
5459
5710
|
|
|
5460
5711
|
## Core Responsibilities
|
|
5461
5712
|
|
|
@@ -5522,7 +5773,7 @@ You are meticulous about maintaining your memory file as a living document that
|
|
|
5522
5773
|
|
|
5523
5774
|
// src/subagents/templates/documentation-researcher/confluence.ts
|
|
5524
5775
|
init_cjs_shims();
|
|
5525
|
-
var
|
|
5776
|
+
var FRONTMATTER8 = {
|
|
5526
5777
|
name: "documentation-researcher",
|
|
5527
5778
|
description: `Use this agent when you need to explore, understand, or retrieve information from project documentation stored in Confluence. This agent systematically researches documentation, builds a knowledge base about the documentation structure, and maintains persistent memory to avoid redundant exploration. Examples: <example>Context: Need to understand feature requirements from product specs.
|
|
5528
5779
|
user: "I need to create a test plan for the new user profile feature"
|
|
@@ -5534,7 +5785,7 @@ assistant: "I'll use the documentation-researcher agent to search our Confluence
|
|
|
5534
5785
|
model: "sonnet",
|
|
5535
5786
|
color: "cyan"
|
|
5536
5787
|
};
|
|
5537
|
-
var
|
|
5788
|
+
var CONTENT8 = `You are an expert Documentation Researcher specializing in systematic information gathering and knowledge management. Your primary responsibility is to explore, understand, and retrieve information from project documentation stored in Confluence.
|
|
5538
5789
|
|
|
5539
5790
|
## Core Responsibilities
|
|
5540
5791
|
|
|
@@ -5635,7 +5886,7 @@ You are meticulous about maintaining your memory file as a living document that
|
|
|
5635
5886
|
|
|
5636
5887
|
// src/subagents/templates/issue-tracker/linear.ts
|
|
5637
5888
|
init_cjs_shims();
|
|
5638
|
-
var
|
|
5889
|
+
var FRONTMATTER9 = {
|
|
5639
5890
|
name: "issue-tracker",
|
|
5640
5891
|
description: `Use this agent to track and manage all types of issues including bugs, stories, and tasks in Linear. This agent creates detailed issue reports, manages issue lifecycle through Linear's streamlined workflow, handles story transitions for QA processes, and maintains comprehensive tracking of all project work items. Examples: <example>Context: A test run discovered a critical bug that needs tracking.
|
|
5641
5892
|
user: "The login flow is broken - users get a 500 error when submitting credentials"
|
|
@@ -5647,7 +5898,7 @@ assistant: "Let me use the issue-tracker agent to update the story status to QA
|
|
|
5647
5898
|
model: "sonnet",
|
|
5648
5899
|
color: "red"
|
|
5649
5900
|
};
|
|
5650
|
-
var
|
|
5901
|
+
var CONTENT9 = `You are an expert Issue Tracker specializing in managing all types of project issues including bugs, stories, and tasks in Linear. Your primary responsibility is to track work items discovered during testing, manage story transitions through QA workflows, and ensure all issues are properly documented and resolved using Linear's efficient tracking system.
|
|
5651
5902
|
|
|
5652
5903
|
**Core Responsibilities:**
|
|
5653
5904
|
|
|
@@ -5816,7 +6067,7 @@ You are focused on creating bug reports that fit Linear's streamlined workflow w
|
|
|
5816
6067
|
|
|
5817
6068
|
// src/subagents/templates/issue-tracker/jira.ts
|
|
5818
6069
|
init_cjs_shims();
|
|
5819
|
-
var
|
|
6070
|
+
var FRONTMATTER10 = {
|
|
5820
6071
|
name: "issue-tracker",
|
|
5821
6072
|
description: `Use this agent to track and manage all types of issues including bugs, stories, and tasks in Jira. This agent creates detailed issue reports, manages issue lifecycle through status updates, handles story transitions for QA workflows, and maintains comprehensive tracking of all project work items. Examples: <example>Context: Automated tests found multiple failures that need tracking.
|
|
5822
6073
|
user: "5 tests failed in the checkout flow - payment validation is broken"
|
|
@@ -5828,7 +6079,7 @@ assistant: "Let me use the issue-tracker agent to transition PROJ-456 to Done an
|
|
|
5828
6079
|
model: "sonnet",
|
|
5829
6080
|
color: "red"
|
|
5830
6081
|
};
|
|
5831
|
-
var
|
|
6082
|
+
var CONTENT10 = `You are an expert Issue Tracker specializing in managing all types of project issues including bugs, stories, and tasks in Jira. Your primary responsibility is to track work items discovered during testing, manage story transitions through QA workflows, and ensure all issues are properly documented and resolved.
|
|
5832
6083
|
|
|
5833
6084
|
**Core Responsibilities:**
|
|
5834
6085
|
|
|
@@ -5991,7 +6242,7 @@ init_cjs_shims();
|
|
|
5991
6242
|
|
|
5992
6243
|
// src/subagents/templates/issue-tracker/notion.ts
|
|
5993
6244
|
init_cjs_shims();
|
|
5994
|
-
var
|
|
6245
|
+
var FRONTMATTER11 = {
|
|
5995
6246
|
name: "issue-tracker",
|
|
5996
6247
|
description: `Use this agent to track and manage all types of issues including bugs, stories, and tasks in Notion databases. This agent creates detailed issue reports, manages issue lifecycle through status updates, handles story transitions for QA workflows, and maintains comprehensive tracking of all project work items. Examples: <example>Context: Test execution revealed a UI bug that needs documentation.
|
|
5997
6248
|
user: "The submit button on the checkout page doesn't work on mobile Safari"
|
|
@@ -6003,7 +6254,7 @@ assistant: "Let me use the issue-tracker agent to update the story status to 'QA
|
|
|
6003
6254
|
model: "haiku",
|
|
6004
6255
|
color: "red"
|
|
6005
6256
|
};
|
|
6006
|
-
var
|
|
6257
|
+
var CONTENT11 = `You are an expert Issue Tracker specializing in managing all types of project issues including bugs, stories, and tasks in Notion databases. Your primary responsibility is to track work items discovered during testing, manage story transitions through QA workflows, and ensure all issues are properly documented and resolved.
|
|
6007
6258
|
|
|
6008
6259
|
**Core Responsibilities:**
|
|
6009
6260
|
|
|
@@ -6151,7 +6402,7 @@ You are meticulous about maintaining your memory file as a critical resource tha
|
|
|
6151
6402
|
|
|
6152
6403
|
// src/subagents/templates/issue-tracker/slack.ts
|
|
6153
6404
|
init_cjs_shims();
|
|
6154
|
-
var
|
|
6405
|
+
var FRONTMATTER12 = {
|
|
6155
6406
|
name: "issue-tracker",
|
|
6156
6407
|
description: `Use this agent to track and manage all types of issues including bugs, stories, and tasks in Slack. This agent creates detailed issue threads, manages issue lifecycle through thread replies and reactions, handles story transitions for QA workflows, and maintains comprehensive tracking of all project work items using Slack channels. Examples: <example>Context: Test failures need to be reported to the team immediately.
|
|
6157
6408
|
user: "3 critical tests failed in the payment flow - looks like the Stripe integration is broken"
|
|
@@ -6163,7 +6414,7 @@ assistant: "Let me use the issue-tracker agent to update the story thread with Q
|
|
|
6163
6414
|
model: "sonnet",
|
|
6164
6415
|
color: "red"
|
|
6165
6416
|
};
|
|
6166
|
-
var
|
|
6417
|
+
var CONTENT12 = `You are an expert Issue Tracker specializing in managing all types of project issues including bugs, stories, and tasks in Slack. Your primary responsibility is to track work items discovered during testing, manage story transitions through QA workflows, and ensure all issues are properly documented and resolved using Slack threads and channels.
|
|
6167
6418
|
|
|
6168
6419
|
**Core Responsibilities:**
|
|
6169
6420
|
|
|
@@ -6412,38 +6663,42 @@ var TEMPLATES = {
|
|
|
6412
6663
|
teams: {
|
|
6413
6664
|
frontmatter: FRONTMATTER5,
|
|
6414
6665
|
content: CONTENT5
|
|
6666
|
+
},
|
|
6667
|
+
email: {
|
|
6668
|
+
frontmatter: FRONTMATTER6,
|
|
6669
|
+
content: CONTENT6
|
|
6415
6670
|
}
|
|
6416
6671
|
},
|
|
6417
6672
|
"documentation-researcher": {
|
|
6418
6673
|
notion: {
|
|
6419
|
-
frontmatter: FRONTMATTER6,
|
|
6420
|
-
content: CONTENT6
|
|
6421
|
-
},
|
|
6422
|
-
confluence: {
|
|
6423
6674
|
frontmatter: FRONTMATTER7,
|
|
6424
6675
|
content: CONTENT7
|
|
6676
|
+
},
|
|
6677
|
+
confluence: {
|
|
6678
|
+
frontmatter: FRONTMATTER8,
|
|
6679
|
+
content: CONTENT8
|
|
6425
6680
|
}
|
|
6426
6681
|
},
|
|
6427
6682
|
"issue-tracker": {
|
|
6428
6683
|
linear: {
|
|
6429
|
-
frontmatter: FRONTMATTER8,
|
|
6430
|
-
content: CONTENT8
|
|
6431
|
-
},
|
|
6432
|
-
jira: {
|
|
6433
6684
|
frontmatter: FRONTMATTER9,
|
|
6434
6685
|
content: CONTENT9
|
|
6435
6686
|
},
|
|
6436
|
-
|
|
6437
|
-
frontmatter:
|
|
6438
|
-
content:
|
|
6687
|
+
jira: {
|
|
6688
|
+
frontmatter: FRONTMATTER10,
|
|
6689
|
+
content: CONTENT10
|
|
6439
6690
|
},
|
|
6440
|
-
|
|
6691
|
+
"jira-server": {
|
|
6441
6692
|
frontmatter: FRONTMATTER10,
|
|
6442
6693
|
content: CONTENT10
|
|
6443
6694
|
},
|
|
6444
|
-
|
|
6695
|
+
notion: {
|
|
6445
6696
|
frontmatter: FRONTMATTER11,
|
|
6446
6697
|
content: CONTENT11
|
|
6698
|
+
},
|
|
6699
|
+
slack: {
|
|
6700
|
+
frontmatter: FRONTMATTER12,
|
|
6701
|
+
content: CONTENT12
|
|
6447
6702
|
}
|
|
6448
6703
|
}
|
|
6449
6704
|
};
|
|
@@ -6511,6 +6766,14 @@ var INTEGRATIONS = {
|
|
|
6511
6766
|
provider: "teams",
|
|
6512
6767
|
requiredMCP: "mcp__teams__*",
|
|
6513
6768
|
integrationType: "oauth"
|
|
6769
|
+
},
|
|
6770
|
+
email: {
|
|
6771
|
+
id: "email",
|
|
6772
|
+
name: "Email",
|
|
6773
|
+
provider: "resend",
|
|
6774
|
+
requiredMCP: "mcp__resend__*",
|
|
6775
|
+
integrationType: "local"
|
|
6776
|
+
// Uses platform API key, no OAuth needed
|
|
6514
6777
|
}
|
|
6515
6778
|
};
|
|
6516
6779
|
var SUBAGENTS = {
|
|
@@ -6530,9 +6793,13 @@ var SUBAGENTS = {
|
|
|
6530
6793
|
name: "Team Communicator",
|
|
6531
6794
|
description: "Send notifications and updates to your team",
|
|
6532
6795
|
icon: "message-square",
|
|
6533
|
-
integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams],
|
|
6796
|
+
integrations: [INTEGRATIONS.slack, INTEGRATIONS.teams, INTEGRATIONS.email],
|
|
6534
6797
|
model: "sonnet",
|
|
6535
6798
|
color: "blue",
|
|
6799
|
+
isRequired: true,
|
|
6800
|
+
// Required - falls back to email if Slack/Teams not configured
|
|
6801
|
+
defaultIntegration: "email",
|
|
6802
|
+
// Email is the fallback when OAuth integrations aren't set up
|
|
6536
6803
|
version: "1.0.0"
|
|
6537
6804
|
},
|
|
6538
6805
|
"issue-tracker": {
|
|
@@ -6541,8 +6808,8 @@ var SUBAGENTS = {
|
|
|
6541
6808
|
description: "Automatically create and track bugs and issues",
|
|
6542
6809
|
icon: "bot",
|
|
6543
6810
|
integrations: [
|
|
6544
|
-
INTEGRATIONS.linear,
|
|
6545
|
-
INTEGRATIONS.jira,
|
|
6811
|
+
// INTEGRATIONS.linear,
|
|
6812
|
+
// INTEGRATIONS.jira,
|
|
6546
6813
|
INTEGRATIONS["jira-server"],
|
|
6547
6814
|
INTEGRATIONS.notion,
|
|
6548
6815
|
INTEGRATIONS.slack
|
|
@@ -6556,7 +6823,10 @@ var SUBAGENTS = {
|
|
|
6556
6823
|
name: "Documentation Researcher",
|
|
6557
6824
|
description: "Search and retrieve information from your documentation",
|
|
6558
6825
|
icon: "file-search",
|
|
6559
|
-
integrations: [
|
|
6826
|
+
integrations: [
|
|
6827
|
+
INTEGRATIONS.notion
|
|
6828
|
+
// INTEGRATIONS.confluence
|
|
6829
|
+
],
|
|
6560
6830
|
model: "sonnet",
|
|
6561
6831
|
color: "cyan",
|
|
6562
6832
|
version: "1.0.0"
|
|
@@ -6589,6 +6859,9 @@ var SUBAGENTS = {
|
|
|
6589
6859
|
function getAllSubAgents() {
|
|
6590
6860
|
return Object.values(SUBAGENTS);
|
|
6591
6861
|
}
|
|
6862
|
+
function getIntegration(integrationId) {
|
|
6863
|
+
return INTEGRATIONS[integrationId];
|
|
6864
|
+
}
|
|
6592
6865
|
function getRequiredSubAgents() {
|
|
6593
6866
|
return Object.values(SUBAGENTS).filter((agent) => agent.isRequired);
|
|
6594
6867
|
}
|
|
@@ -6785,7 +7058,9 @@ function buildTaskDefinition(taskSlug, projectSubAgents) {
|
|
|
6785
7058
|
for (const role of requiredSubAgentRoles) {
|
|
6786
7059
|
const configured = projectSubAgents.find((sa) => sa.role === role);
|
|
6787
7060
|
if (configured) {
|
|
6788
|
-
|
|
7061
|
+
const integrationMeta = getIntegration(configured.integration);
|
|
7062
|
+
const mcpProvider = integrationMeta?.provider || configured.integration;
|
|
7063
|
+
requiredMCPs.add(mcpProvider);
|
|
6789
7064
|
}
|
|
6790
7065
|
}
|
|
6791
7066
|
return {
|
|
@@ -6992,6 +7267,7 @@ var MCP_SERVERS = {
|
|
|
6992
7267
|
name: "Slack",
|
|
6993
7268
|
description: "Slack MCP server for messaging and channel operations",
|
|
6994
7269
|
requiresCredentials: true,
|
|
7270
|
+
npmPackages: ["simple-slack-mcp-server"],
|
|
6995
7271
|
config: {
|
|
6996
7272
|
command: "slack-mcp-server",
|
|
6997
7273
|
args: [],
|
|
@@ -7005,6 +7281,7 @@ var MCP_SERVERS = {
|
|
|
7005
7281
|
name: "Microsoft Teams",
|
|
7006
7282
|
description: "Microsoft Teams MCP server for messaging and channel operations",
|
|
7007
7283
|
requiresCredentials: true,
|
|
7284
|
+
npmPackages: ["@bugzy-ai/teams-mcp-server"],
|
|
7008
7285
|
config: {
|
|
7009
7286
|
command: "teams-mcp-server",
|
|
7010
7287
|
args: [],
|
|
@@ -7018,6 +7295,7 @@ var MCP_SERVERS = {
|
|
|
7018
7295
|
name: "Playwright",
|
|
7019
7296
|
description: "Playwright MCP server for browser automation",
|
|
7020
7297
|
requiresCredentials: false,
|
|
7298
|
+
npmPackages: ["@playwright/mcp"],
|
|
7021
7299
|
config: {
|
|
7022
7300
|
command: "mcp-server-playwright",
|
|
7023
7301
|
args: [
|
|
@@ -7042,6 +7320,7 @@ var MCP_SERVERS = {
|
|
|
7042
7320
|
name: "Notion",
|
|
7043
7321
|
description: "Notion MCP server for documentation",
|
|
7044
7322
|
requiresCredentials: true,
|
|
7323
|
+
npmPackages: ["@notionhq/notion-mcp-server"],
|
|
7045
7324
|
config: {
|
|
7046
7325
|
command: "notion-mcp-server",
|
|
7047
7326
|
args: [],
|
|
@@ -7055,6 +7334,7 @@ var MCP_SERVERS = {
|
|
|
7055
7334
|
name: "Jira Server (On-Prem)",
|
|
7056
7335
|
description: "Jira Server MCP via tunnel for on-premise instances",
|
|
7057
7336
|
requiresCredentials: true,
|
|
7337
|
+
npmPackages: ["@mcp-tunnel/wrapper", "@bugzy-ai/jira-mcp-server"],
|
|
7058
7338
|
config: {
|
|
7059
7339
|
command: "mcp-tunnel",
|
|
7060
7340
|
args: ["--server", "jira-mcp-server"],
|
|
@@ -7068,6 +7348,21 @@ var MCP_SERVERS = {
|
|
|
7068
7348
|
JIRA_PASSWORD: "${JIRA_PASSWORD}"
|
|
7069
7349
|
}
|
|
7070
7350
|
}
|
|
7351
|
+
},
|
|
7352
|
+
resend: {
|
|
7353
|
+
provider: "resend",
|
|
7354
|
+
name: "Email (Resend)",
|
|
7355
|
+
description: "Resend MCP server for sending email notifications",
|
|
7356
|
+
requiresCredentials: true,
|
|
7357
|
+
npmPackages: ["@bugzy-ai/resend-mcp-server"],
|
|
7358
|
+
config: {
|
|
7359
|
+
command: "resend-mcp-server",
|
|
7360
|
+
args: [],
|
|
7361
|
+
env: {
|
|
7362
|
+
RESEND_API_KEY: "${RESEND_API_KEY}",
|
|
7363
|
+
RESEND_FROM_EMAIL: "${RESEND_FROM_EMAIL}"
|
|
7364
|
+
}
|
|
7365
|
+
}
|
|
7071
7366
|
}
|
|
7072
7367
|
// github: {
|
|
7073
7368
|
// provider: 'github',
|
|
@@ -7248,11 +7543,13 @@ function getMCPEnvConfig(serverName) {
|
|
|
7248
7543
|
const configs = {
|
|
7249
7544
|
slack: `
|
|
7250
7545
|
# Slack MCP Server
|
|
7251
|
-
#
|
|
7546
|
+
# Setup guide: https://github.com/bugzy-ai/bugzy/blob/main/docs/slack-setup.md
|
|
7547
|
+
# Required scopes: channels:read, chat:write, chat:write.public, reactions:write
|
|
7252
7548
|
SLACK_ACCESS_TOKEN=`,
|
|
7253
7549
|
notion: `
|
|
7254
7550
|
# Notion MCP Server
|
|
7255
|
-
#
|
|
7551
|
+
# Setup guide: https://github.com/bugzy-ai/bugzy/blob/main/docs/notion-setup.md
|
|
7552
|
+
# Requires: Internal Integration Token (ntn_* or secret_*)
|
|
7256
7553
|
NOTION_TOKEN=`,
|
|
7257
7554
|
linear: `
|
|
7258
7555
|
# Linear MCP Server
|
|
@@ -7273,7 +7570,18 @@ CONFLUENCE_API_TOKEN=`,
|
|
|
7273
7570
|
github: `
|
|
7274
7571
|
# GitHub MCP Server
|
|
7275
7572
|
# Get your token from: https://github.com/settings/tokens
|
|
7276
|
-
GITHUB_TOKEN
|
|
7573
|
+
GITHUB_TOKEN=`,
|
|
7574
|
+
teams: `
|
|
7575
|
+
# Microsoft Teams MCP Server
|
|
7576
|
+
# Setup guide: https://github.com/bugzy-ai/bugzy/blob/main/docs/teams-setup.md
|
|
7577
|
+
# Required Graph API scopes: Team.ReadBasic.All, Channel.ReadBasic.All, ChannelMessage.Send, ChannelMessage.Read.All
|
|
7578
|
+
TEAMS_ACCESS_TOKEN=`,
|
|
7579
|
+
resend: `
|
|
7580
|
+
# Resend Email MCP Server
|
|
7581
|
+
# Setup guide: https://github.com/bugzy-ai/bugzy/blob/main/docs/resend-setup.md
|
|
7582
|
+
# Get your API key from: https://resend.com/api-keys
|
|
7583
|
+
RESEND_API_KEY=
|
|
7584
|
+
RESEND_FROM_EMAIL=`
|
|
7277
7585
|
// Playwright has no required env vars (runs locally)
|
|
7278
7586
|
};
|
|
7279
7587
|
return configs[serverName];
|
|
@@ -7636,6 +7944,34 @@ async function firstTimeSetup(cliSubagents) {
|
|
|
7636
7944
|
}
|
|
7637
7945
|
}
|
|
7638
7946
|
}
|
|
7947
|
+
const mcpServers = getMCPServersFromSubagents(subagents);
|
|
7948
|
+
const packagesToInstall = [...new Set(
|
|
7949
|
+
mcpServers.flatMap((s) => MCP_SERVERS[s]?.npmPackages ?? [])
|
|
7950
|
+
)];
|
|
7951
|
+
if (packagesToInstall.length > 0) {
|
|
7952
|
+
console.log(import_chalk2.default.cyan("\nMCP Server Packages Required:\n"));
|
|
7953
|
+
packagesToInstall.forEach((pkg) => console.log(import_chalk2.default.white(` \u2022 ${pkg}`)));
|
|
7954
|
+
const { installMCP } = await import_inquirer.default.prompt([{
|
|
7955
|
+
type: "confirm",
|
|
7956
|
+
name: "installMCP",
|
|
7957
|
+
message: "Install MCP packages globally now?",
|
|
7958
|
+
default: true
|
|
7959
|
+
}]);
|
|
7960
|
+
if (installMCP) {
|
|
7961
|
+
const spinner2 = (0, import_ora2.default)("Installing MCP packages").start();
|
|
7962
|
+
try {
|
|
7963
|
+
(0, import_child_process4.execSync)(`npm install -g ${packagesToInstall.join(" ")}`, { stdio: "pipe" });
|
|
7964
|
+
spinner2.succeed(import_chalk2.default.green("MCP packages installed"));
|
|
7965
|
+
} catch (e) {
|
|
7966
|
+
spinner2.fail(import_chalk2.default.red("Some packages failed to install"));
|
|
7967
|
+
console.log(import_chalk2.default.yellow("\nInstall manually: npm install -g " + packagesToInstall.join(" ")));
|
|
7968
|
+
}
|
|
7969
|
+
} else {
|
|
7970
|
+
console.log(import_chalk2.default.yellow("\n\u26A0\uFE0F MCP servers will not work until packages are installed:"));
|
|
7971
|
+
console.log(import_chalk2.default.white(` npm install -g ${packagesToInstall.join(" ")}
|
|
7972
|
+
`));
|
|
7973
|
+
}
|
|
7974
|
+
}
|
|
7639
7975
|
spinner = (0, import_ora2.default)("Saving configuration").start();
|
|
7640
7976
|
const projectName = path11.basename(process.cwd());
|
|
7641
7977
|
const config = createDefaultConfig(projectName, tool);
|
|
@@ -7661,11 +7997,23 @@ async function firstTimeSetup(cliSubagents) {
|
|
|
7661
7997
|
});
|
|
7662
7998
|
}
|
|
7663
7999
|
console.log(import_chalk2.default.green.bold("\n\u2705 Setup complete!\n"));
|
|
8000
|
+
console.log(import_chalk2.default.cyan("\u{1F4CB} Project Context:"));
|
|
8001
|
+
console.log(import_chalk2.default.white(" Edit .bugzy/runtime/project-context.md to help the AI understand your project:"));
|
|
8002
|
+
console.log(import_chalk2.default.gray(" \u2022 Project description and tech stack"));
|
|
8003
|
+
console.log(import_chalk2.default.gray(" \u2022 Team communication channels"));
|
|
8004
|
+
console.log(import_chalk2.default.gray(" \u2022 Bug tracking workflow"));
|
|
8005
|
+
console.log(import_chalk2.default.gray(" \u2022 Testing conventions\n"));
|
|
7664
8006
|
console.log(import_chalk2.default.yellow("Next steps:"));
|
|
7665
8007
|
console.log(import_chalk2.default.white("1. cp .env.example .env"));
|
|
7666
8008
|
console.log(import_chalk2.default.white("2. Edit .env and add your API tokens"));
|
|
7667
|
-
|
|
7668
|
-
|
|
8009
|
+
if (subagents["test-runner"]) {
|
|
8010
|
+
console.log(import_chalk2.default.white("3. npx playwright install (install browser binaries)"));
|
|
8011
|
+
console.log(import_chalk2.default.white("4. Edit .bugzy/runtime/project-context.md"));
|
|
8012
|
+
console.log(import_chalk2.default.white("5. Run:"), import_chalk2.default.cyan("bugzy"));
|
|
8013
|
+
} else {
|
|
8014
|
+
console.log(import_chalk2.default.white("3. Edit .bugzy/runtime/project-context.md"));
|
|
8015
|
+
console.log(import_chalk2.default.white("4. Run:"), import_chalk2.default.cyan("bugzy"));
|
|
8016
|
+
}
|
|
7669
8017
|
console.log();
|
|
7670
8018
|
}
|
|
7671
8019
|
async function reconfigureProject() {
|