@aisdet/aisdet 1.0.1

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/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # AISDET — AI Software Development & Testing
2
+
3
+ Autonomous testing agents for **GitHub Copilot Chat** with **MCP integration**.
4
+
5
+ ## šŸš€ Install
6
+
7
+ ```bash
8
+ npm install aisdet
9
+ npx aisdet-init
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ function copyRecursiveSync(src, dest) {
6
+ const exists = fs.existsSync(src);
7
+ const stats = exists && fs.statSync(src);
8
+ const isDirectory = exists && stats.isDirectory();
9
+
10
+ if (isDirectory) {
11
+ if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
12
+ fs.readdirSync(src).forEach(childItemName => {
13
+ copyRecursiveSync(
14
+ path.join(src, childItemName),
15
+ path.join(dest, childItemName)
16
+ );
17
+ });
18
+ } else {
19
+ fs.copyFileSync(src, dest);
20
+ }
21
+ }
22
+
23
+ const templatesDir = path.join(__dirname, '..', 'templates');
24
+ const targetDir = process.cwd();
25
+
26
+ console.log('šŸš€ Initializing AI SDET STLC Agent Suite...\n');
27
+
28
+ // Copy .github/chatmodes
29
+ copyRecursiveSync(
30
+ path.join(templatesDir, '.github'),
31
+ path.join(targetDir, '.github')
32
+ );
33
+
34
+ // Copy .vscode/mcp.json
35
+ const vscodeDir = path.join(targetDir, '.vscode');
36
+ if (!fs.existsSync(vscodeDir)) fs.mkdirSync(vscodeDir, { recursive: true });
37
+ fs.copyFileSync(
38
+ path.join(templatesDir, '.vscode', 'mcp.json'),
39
+ path.join(vscodeDir, 'mcp.json')
40
+ );
41
+
42
+ console.log('āœ… Success! Added:');
43
+ console.log(' - .github/chatmodes/*.chatmode.md');
44
+ console.log(' - .vscode/mcp.json');
45
+ console.log('\nšŸ’” Now open VS Code with GitHub Copilot Chat and use @requirements, @testdata, etc.');
package/package.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@aisdet/aisdet",
3
+ "version": "1.0.1",
4
+ "description": "AI-powered STLC agent suite for GitHub Copilot Chat",
5
+ "bin": {
6
+ "aisdet-init": "./bin/aisdet-init.js"
7
+ }
8
+ }
@@ -0,0 +1,31 @@
1
+ # @report Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate test summary. Save manifest to agent/report.md.
4
+
5
+ File: agent/report.md
6
+ # Report Agent Manifest
7
+ - Purpose: Compile executive test summary
8
+ - Output: reports/summary.md
9
+ - Audience: QA leads, product, engineering
10
+
11
+ File: reports/summary.md
12
+ # Test Execution Summary
13
+
14
+ ## Metrics
15
+ - Total Tests: 24
16
+ - Passed: 22 (91.7%)
17
+ - Failed: 2
18
+ - Duration: 4m 12s
19
+
20
+ ## Environment
21
+ - Target: staging.example.test
22
+ - Build: v1.4.2
23
+ - Date: 2025-10-12
24
+
25
+ ## Top Failures
26
+ 1. Login button missing – UI refactor
27
+ 2. Email not sent – SMTP config
28
+
29
+ ## Recommendations
30
+ - Stabilize locators
31
+ - Add retry for email tests
@@ -0,0 +1,26 @@
1
+ # @infra Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate test infrastructure. Save manifest to agent/infra.md.
4
+
5
+ File: agent/infra.md
6
+ # Infra Agent Manifest
7
+ - Purpose: Provision portable test environments
8
+ - Output: scripts/, Dockerfile.test
9
+ - Strategy: Containerized, script-driven setup
10
+
11
+ File: scripts/setup-test-env.sh
12
+ #!/bin/bash
13
+ set -e
14
+ export TEST_ENV=${TEST_ENV:-staging}
15
+ export BASE_URL=${BASE_URL:-http://localhost:3000}
16
+ if [ -n "$WAIT_HOST" ] && [ -n "$WAIT_PORT" ]; then
17
+ timeout 60s sh -c 'until nc -z $0 $1; do sleep 1; done' "$WAIT_HOST" "$WAIT_PORT"
18
+ fi
19
+ echo "Test environment ready."
20
+
21
+ File: Dockerfile.test
22
+ FROM alpine:latest
23
+ RUN apk add --no-cache curl bash
24
+ COPY scripts/setup-test-env.sh /scripts/
25
+ RUN chmod +x /scripts/setup-test-env.sh
26
+ CMD ["/scripts/setup-test-env.sh"]
@@ -0,0 +1,34 @@
1
+ # @defects Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate bug reports. Save manifest to agent/defects.md.
4
+
5
+ File: agent/defects.md
6
+ # Defects Agent Manifest
7
+ - Purpose: Triage failures into structured bug reports
8
+ - Output: defects/template.md
9
+ - Format: Tool-agnostic, ready for Jira/GitHub
10
+
11
+ File: defects/template.md
12
+ ## Summary
13
+ [Brief title]
14
+
15
+ ## Steps
16
+ 1. [Action]
17
+ 2. [Failure]
18
+
19
+ ## Expected
20
+ [Correct behavior]
21
+
22
+ ## Actual
23
+ [Observed behavior]
24
+
25
+ ## Evidence
26
+ - Test: tests/...
27
+ - Log: [snippet]
28
+ - Env: [OS, URL, build]
29
+
30
+ ## Severity
31
+ High / Medium / Low
32
+
33
+ ## Suggested Fix
34
+ [Actionable recommendation]
@@ -0,0 +1,31 @@
1
+ # @developer Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate unit test guidance. Save manifest to agent/developer.md.
4
+
5
+ File: agent/developer.md
6
+ # Developer Agent Manifest
7
+ - Purpose: Bridge dev and QA via unit test examples
8
+ - Output: tests/unit/README.md
9
+ - Style: Language-agnostic principles
10
+
11
+ File: tests/unit/README.md
12
+ # Unit Test Guidelines
13
+
14
+ ## Principles
15
+ - One behavior per test
16
+ - Mock external dependencies
17
+ - Cover edge cases: null, empty, invalid, boundary
18
+
19
+ ## Examples
20
+ FUNCTION: validateEmail(input)
21
+ - PASS: "user@domain.com" → true
22
+ - FAIL: "invalid" → false
23
+ - FAIL: "" → false
24
+
25
+ FUNCTION: calculateTotal(items)
26
+ - PASS: [10,20] → 30
27
+ - PASS: [] → 0
28
+ - FAIL: [null] → error
29
+
30
+ ## Naming
31
+ test_[function]_[scenario]
@@ -0,0 +1,28 @@
1
+ # @testcase Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate test cases. Save manifest to agent/testcase.md.
4
+
5
+ File: agent/testcase.md
6
+ # Test Case Agent Manifest
7
+ - Purpose: Convert test plan into executable test cases
8
+ - Output: Generic test syntax in tests/ directory
9
+ - Format: Framework-agnostic pseudocode
10
+
11
+ File: tests/core/auth.test.generic
12
+ TEST: Valid user login
13
+ GIVEN user is on login page
14
+ WHEN enters valid credentials from test-data/users.json
15
+ AND submits form
16
+ THEN redirected to dashboard
17
+ AND session active
18
+
19
+ TEST: Invalid email format
20
+ GIVEN on login page
21
+ WHEN enters "invalid-email"
22
+ AND submits
23
+ THEN error message displayed
24
+
25
+ TEST: Duplicate registration
26
+ GIVEN on registration page
27
+ WHEN submits existing email
28
+ THEN shows "already exists" error
@@ -0,0 +1,49 @@
1
+ # @requirements Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Fetch real-time requirements from Jira via MCP. Save manifest to agent/requirements.md.
4
+
5
+ File: agent/requirements.md
6
+ # Requirements Agent Manifest
7
+ - Purpose: Extract test scenarios from Jira user stories via MCP
8
+ - MCP Tool: jira (defined in mcp.json)
9
+ - Output: test-scenarios/functional.md, test-scenarios/non-functional.md
10
+ - Root artifacts: test-scenarios/
11
+
12
+ File: scripts/fetch-requirements-from-jira.mjs
13
+ #!/usr/bin/env node
14
+ // Fetch requirements from Jira MCP server
15
+ import fs from 'fs';
16
+ import { execSync } from 'child_process';
17
+
18
+ const mcpConfig = JSON.parse(fs.readFileSync('./mcp.json', 'utf8'));
19
+ const jiraMcp = mcpConfig.mcpServers.jira;
20
+
21
+ console.log(`šŸ“” Fetching requirements from ${jiraMcp.endpoint}...`);
22
+
23
+ // Simulate MCP call (in real use, use fetch or mcp-client)
24
+ const mockStories = [
25
+ "User can log in with email and password",
26
+ "System must respond in <2s",
27
+ "Prevent SQL injection in search"
28
+ ];
29
+
30
+ const functional = mockStories.filter(s => !s.includes('<') && !s.includes('must'));
31
+ const nonFunctional = mockStories.filter(s => s.includes('<') || s.includes('must'));
32
+
33
+ fs.writeFileSync('test-scenarios/functional.md',
34
+ '## Functional Scenarios\n' + functional.map(s => `- ${s}`).join('\n')
35
+ );
36
+ fs.writeFileSync('test-scenarios/non-functional.md',
37
+ '## Non-Functional Scenarios\n' + nonFunctional.map(s => `- ${s}`).join('\n')
38
+ );
39
+
40
+ console.log('āœ… Requirements saved to test-scenarios/');
41
+
42
+ File: test-scenarios/functional.md
43
+ ## Functional Scenarios
44
+ - User can log in with email and password
45
+
46
+ File: test-scenarios/non-functional.md
47
+ ## Non-Functional Scenarios
48
+ - System must respond in <2s
49
+ - Prevent SQL injection in search
@@ -0,0 +1,38 @@
1
+ # @planner Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Create test plan. Save manifest to agent/planner.md.
4
+
5
+ File: agent/planner.md
6
+ # Planner Agent Manifest
7
+ - Purpose: Generate comprehensive test plan from scenarios
8
+ - Output: test-plan.md in root
9
+ - Input: test-scenarios/ (assumed present)
10
+
11
+ File: test-plan.md
12
+ # Test Plan
13
+
14
+ ## Objectives
15
+ - Validate authentication and core workflows
16
+ - Ensure performance and security baselines
17
+
18
+ ## Scope
19
+ āœ… In: Auth, core actions, error handling
20
+ āŒ Out: Third-party integrations, accessibility
21
+
22
+ ## Resources
23
+ - Synthetic test data
24
+ - Staging-like environment
25
+ - Framework-native test runner
26
+
27
+ ## Timeline
28
+ - Unit: alongside dev
29
+ - E2E: per commit
30
+ - Perf: pre-release
31
+
32
+ ## Coverage
33
+ - 1 scenario → ≄1 test case
34
+ - All inputs → valid + invalid cases
35
+
36
+ ## Risks
37
+ - Flaky tests → retry/isolate
38
+ - Env drift → script setup
@@ -0,0 +1,27 @@
1
+ # @Self-Healing Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Apply healing strategies. Save manifest to agent/Self-Healing.md.
4
+
5
+ File: agent/Self-Healing.md
6
+ # Self-Healing Agent Manifest
7
+ - Purpose: Repair broken locators and waits
8
+ - Output: tests/healed/README.md
9
+ - Strategy: Resilient selectors, fallbacks
10
+
11
+ File: tests/healed/README.md
12
+ # Self-Healing Guidance
13
+
14
+ ## Locator Strategy
15
+ 1. Prefer [data-testid="..."]
16
+ 2. Fallback to text/content
17
+ 3. Use structural context
18
+ 4. Avoid index-based selectors
19
+
20
+ ## Example (Pseudocode)
21
+ element = find('[data-testid="btn"]')
22
+ if not element: element = find('button', text='Submit')
23
+ if not element: element = find('form button[type="submit"]')
24
+ click(element)
25
+
26
+ ## Rule
27
+ Every test must include ≄1 resilient strategy.
@@ -0,0 +1,52 @@
1
+ # @testdesigner Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Generate flow diagram. Save manifest to agent/testdesigner.md.
4
+
5
+ File: agent/testdesigner.md
6
+ # Test Designer Agent Manifest
7
+ - Purpose: Visualize E2E test flows
8
+ - Output: docs/test-flow.mmd and docs/test-flow.html
9
+ - Format: Mermaid v10.9.4 compatible
10
+
11
+ File: docs/test-flow.mmd
12
+ graph TD
13
+ A[Start: User Access] --> B{Valid Credentials?}
14
+ B -->|Yes| C[Login Success]
15
+ B -->|No| D[Show Error]
16
+ C --> E[Perform Core Action\n(e.g., Submit Form)]
17
+ E --> F{Valid?}
18
+ F -->|Yes| G[Confirm Success]
19
+ F -->|No| H[Show Validation Error]
20
+ G --> I[End]
21
+ H --> E
22
+ D --> B
23
+
24
+ classDef decision fill:#ffeaa7,stroke:#e17055;
25
+ classDef action fill:#74b9ff,stroke:#0984e3,color:white;
26
+ classDef startend fill:#00b894,stroke:#00a085,color:white;
27
+ classDef error fill:#fd79a8,stroke:#c2367f,color:white;
28
+ class A,I startend
29
+ class B,F decision
30
+ class C,E,G action
31
+ class D,H error
32
+
33
+ File: docs/test-flow.html
34
+ <!DOCTYPE html>
35
+ <html>
36
+ <head>
37
+ <meta charset="utf-8">
38
+ <title>Test Flow</title>
39
+ <style>.mermaid{background:#fff;padding:20px;border-radius:8px;}</style>
40
+ </head>
41
+ <body>
42
+ <div class="mermaid" id="diagram"></div>
43
+ <script type="module">
44
+ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.9.4/dist/mermaid.esm.min.mjs';
45
+ mermaid.initialize({startOnLoad:false,securityLevel:'loose'});
46
+ fetch('test-flow.mmd').then(r=>r.text()).then(txt=>{
47
+ const {svg}=mermaid.render('svg',txt);
48
+ document.getElementById('diagram').innerHTML=svg;
49
+ });
50
+ </script>
51
+ </body>
52
+ </html>
@@ -0,0 +1,54 @@
1
+ # @executor Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Execute tests via Chrome DevTools MCP. Save manifest to agent/executor.md.
4
+
5
+ File: agent/executor.md
6
+ # Executor Agent Manifest
7
+ - Purpose: Run tests using live browser via Chrome DevTools MCP
8
+ - MCP Tool: chrome-devtools (defined in mcp.json)
9
+ - Output: scripts/run-tests-via-devtools.mjs, reports/
10
+ - Root artifacts: scripts/, reports/
11
+
12
+ File: scripts/run-tests-via-devtools.mjs
13
+ #!/usr/bin/env node
14
+ // Execute E2E tests using Chrome DevTools MCP
15
+ import fs from 'fs';
16
+
17
+ const mcpConfig = JSON.parse(fs.readFileSync('./mcp.json', 'utf8'));
18
+ const devtoolsMcp = mcpConfig.mcpServers['chrome-devtools'];
19
+
20
+ console.log(`šŸš€ Launching test via ${devtoolsMcp.endpoint}...`);
21
+
22
+ // Simulate test execution
23
+ const result = {
24
+ passed: 5,
25
+ failed: 1,
26
+ duration: "3.2s",
27
+ logs: "Test completed with 1 failure in login flow"
28
+ };
29
+
30
+ // Save report
31
+ fs.writeFileSync('reports/executor-result.json', JSON.stringify(result, null, 2));
32
+ fs.writeFileSync('reports/summary.md',
33
+ `# Test Execution Summary
34
+ - **Passed**: ${result.passed}
35
+ - **Failed**: ${result.failed}
36
+ - **Duration**: ${result.duration}
37
+ - **Logs**: ${result.logs}
38
+ `);
39
+
40
+ console.log('āœ… Test results saved to reports/');
41
+
42
+ File: scripts/run-tests.sh
43
+ #!/bin/bash
44
+ # Fallback: run via devtools MCP or native runner
45
+ if [ -f "mcp.json" ] && grep -q "chrome-devtools" mcp.json; then
46
+ node scripts/run-tests-via-devtools.mjs
47
+ else
48
+ echo "āš ļø MCP not configured. Using native runner..."
49
+ npm test:e2e 2>/dev/null || python -m pytest tests/e2e 2>/dev/null
50
+ fi
51
+
52
+ File: reports/README.md
53
+ # Test Reports
54
+ Results from MCP or native execution.
@@ -0,0 +1,65 @@
1
+ # @testdata Agent (Autonomous)
2
+
3
+ You operate in autonomous agentic mode. Fetch real data from DB via MCP. Save manifest to agent/testdata.md.
4
+
5
+ File: agent/testdata.md
6
+ # Test Data Agent Manifest
7
+ - Purpose: Generate test data from database via MCP
8
+ - MCP Tool: database (defined in mcp.json)
9
+ - Output: test-data/users.json, test-data/invalid_inputs.csv
10
+ - Rules: Anonymize PII, use .example.test
11
+
12
+ File: scripts/fetch-test-data-from-db.mjs
13
+ #!/usr/bin/env node
14
+ // Extract and anonymize test data via Database MCP
15
+ import fs from 'fs';
16
+
17
+ const mcpConfig = JSON.parse(fs.readFileSync('./mcp.json', 'utf8'));
18
+ const dbMcp = mcpConfig.mcpServers.database;
19
+
20
+ console.log(`šŸ—ƒļø Querying ${dbMcp.endpoint} for test data...`);
21
+
22
+ // Simulate DB response (in real use: fetch + anonymize)
23
+ const rawUsers = [
24
+ { id: 101, email: "john@real.com", role: "admin" },
25
+ { id: 102, email: "jane@real.com", role: "user" }
26
+ ];
27
+
28
+ const anonymized = rawUsers.map(u => ({
29
+ id: `user_${u.id}`,
30
+ email: u.email.replace(/@.*/, '@example.test'),
31
+ password: "Pass123!",
32
+ role: u.role
33
+ }));
34
+
35
+ fs.writeFileSync('test-data/users.json', JSON.stringify(anonymized, null, 2));
36
+
37
+ // Generate invalid cases
38
+ fs.writeFileSync('test-data/invalid_inputs.csv',
39
+ `field,value,reason
40
+ email,invalid-email,invalid_format
41
+ password,123,too_short
42
+ `);
43
+
44
+ console.log('āœ… Test data saved to test-data/');
45
+
46
+ File: test-data/users.json
47
+ [
48
+ {
49
+ "id": "user_101",
50
+ "email": "john@example.test",
51
+ "password": "Pass123!",
52
+ "role": "admin"
53
+ },
54
+ {
55
+ "id": "user_102",
56
+ "email": "jane@example.test",
57
+ "password": "Pass123!",
58
+ "role": "user"
59
+ }
60
+ ]
61
+
62
+ File: test-data/invalid_inputs.csv
63
+ field,value,reason
64
+ email,invalid-email,invalid_format
65
+ password,123,too_short
@@ -0,0 +1,37 @@
1
+ ---
2
+ description: Gather, synthesize, and summarize information from the web and codebase.
3
+ tools: ["codebase", "fetch", "file", "githubRepo", "ls", "search", "usages"]
4
+ ---
5
+
6
+ # Research mode instructions
7
+
8
+ You are in **Research Mode**. Your primary objective is to gather, synthesize, and summarize information to help the user understand a topic, solve a problem, or make a decision. You should not propose direct code edits unless explicitly asked as a follow-up after the research phase.
9
+
10
+ **Core Principles:**
11
+
12
+ 1. **Comprehensive Gathering:** Utilize all relevant tools to collect information:
13
+ * `#fetch`: For specific web pages, articles, or documentation.
14
+ * `#search`: For general web queries.
15
+ * `#githubRepo`: For targeted searches within specific GitHub repositories.
16
+ * `#codebase`, `#file`, `#ls`, `#usages`: For in-depth exploration of the user's project.
17
+ 2. **Synthesis over Raw Data:** Don't just list links or raw text. Analyze and synthesize the information to provide a coherent summary that directly addresses the user's query.
18
+ 3. **Cite Sources:** For information gathered from the web (`#fetch`, `#search`, `#githubRepo`), always provide URLs or clear references to the sources.
19
+ 4. **Neutral and Objective:** Present information factually. If discussing opinions or trade-offs, attribute them appropriately.
20
+
21
+ **Your Process:**
22
+
23
+ 1. **Clarify the Research Goal:**
24
+ * Ensure you understand exactly what information the user is looking for.
25
+ * Ask clarifying questions to narrow the scope if the request is broad (e.g., "Are you interested in a specific aspect of X, or a general overview?").
26
+ 2. **Execute Research:**
27
+ * Strategically use the available tools to find the most relevant information.
28
+ 3. **Summarize Findings:**
29
+ * Present a clear, concise summary of your research.
30
+ * Structure the summary logically (e.g., bullet points, key takeaways, pros/cons).
31
+ * Highlight the most important pieces of information.
32
+ 4. **Offer Further Assistance:**
33
+ * Ask if the user needs more details on any specific point or has follow-up questions.
34
+
35
+ **Example Prompts for You to Start With:**
36
+ * "Okay, I'll research that for you. Are there any particular sources or keywords you think would be most helpful?"
37
+ * "To make sure I find exactly what you need, could you clarify if you're looking for X or Y related to this topic?"
@@ -0,0 +1,22 @@
1
+ {
2
+ "servers": {
3
+ "jira": {
4
+ "name": "Jira Requirements MCP",
5
+ "type": "jira",
6
+ "endpoint": "http://localhost:8080/mcp/jira",
7
+ "description": "Fetch user stories and requirements from Jira"
8
+ },
9
+ "chrome-devtools": {
10
+ "name": "Chrome DevTools MCP",
11
+ "type": "browser",
12
+ "endpoint": "http://localhost:9222/mcp/devtools",
13
+ "description": "Execute and inspect live browser sessions"
14
+ },
15
+ "database": {
16
+ "name": "Database MCP",
17
+ "type": "sql",
18
+ "endpoint": "http://localhost:8081/mcp/db",
19
+ "description": "Query and extract anonymized test data from databases"
20
+ }
21
+ }
22
+ }