xibecode 1.0.3 → 1.0.7

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 (268) hide show
  1. package/dist/commands/chat.d.ts.map +1 -1
  2. package/dist/commands/chat.js +10 -7
  3. package/dist/commands/chat.js.map +1 -1
  4. package/dist/commands/diagnostics.js +1 -1
  5. package/dist/commands/diagnostics.js.map +1 -1
  6. package/dist/commands/mcp.js +1 -1
  7. package/dist/commands/mcp.js.map +1 -1
  8. package/dist/commands/resume.js +1 -1
  9. package/dist/commands/resume.js.map +1 -1
  10. package/dist/commands/run-pr.d.ts.map +1 -1
  11. package/dist/commands/run-pr.js +10 -9
  12. package/dist/commands/run-pr.js.map +1 -1
  13. package/dist/commands/run.d.ts.map +1 -1
  14. package/dist/commands/run.js +14 -13
  15. package/dist/commands/run.js.map +1 -1
  16. package/dist/commands/skills.d.ts.map +1 -1
  17. package/dist/commands/skills.js +3 -2
  18. package/dist/commands/skills.js.map +1 -1
  19. package/dist/components/AssistantMarkdown.js +1 -1
  20. package/dist/components/AssistantMarkdown.js.map +1 -1
  21. package/dist/ui/claude-style-chat.d.ts.map +1 -1
  22. package/dist/ui/claude-style-chat.js +12 -10
  23. package/dist/ui/claude-style-chat.js.map +1 -1
  24. package/dist/utils/built-in-skills-dir.d.ts +7 -0
  25. package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
  26. package/dist/utils/built-in-skills-dir.js +11 -0
  27. package/dist/utils/built-in-skills-dir.js.map +1 -0
  28. package/dist/utils/config.d.ts +2 -119
  29. package/dist/utils/config.d.ts.map +1 -1
  30. package/dist/utils/config.js +3 -88
  31. package/dist/utils/config.js.map +1 -1
  32. package/package.json +11 -17
  33. package/dist/commands/punycode.d.ts +0 -5
  34. package/dist/commands/punycode.d.ts.map +0 -1
  35. package/dist/commands/punycode.js +0 -48
  36. package/dist/commands/punycode.js.map +0 -1
  37. package/dist/commands/tui.d.ts +0 -9
  38. package/dist/commands/tui.d.ts.map +0 -1
  39. package/dist/commands/tui.js +0 -83
  40. package/dist/commands/tui.js.map +0 -1
  41. package/dist/core/agent-tool-policies.d.ts +0 -5
  42. package/dist/core/agent-tool-policies.d.ts.map +0 -1
  43. package/dist/core/agent-tool-policies.js +0 -18
  44. package/dist/core/agent-tool-policies.js.map +0 -1
  45. package/dist/core/agent.d.ts +0 -181
  46. package/dist/core/agent.d.ts.map +0 -1
  47. package/dist/core/agent.js +0 -1777
  48. package/dist/core/agent.js.map +0 -1
  49. package/dist/core/background-agent.d.ts +0 -23
  50. package/dist/core/background-agent.d.ts.map +0 -1
  51. package/dist/core/background-agent.js +0 -175
  52. package/dist/core/background-agent.js.map +0 -1
  53. package/dist/core/code-graph.d.ts +0 -18
  54. package/dist/core/code-graph.d.ts.map +0 -1
  55. package/dist/core/code-graph.js +0 -105
  56. package/dist/core/code-graph.js.map +0 -1
  57. package/dist/core/conflict-solver.d.ts +0 -26
  58. package/dist/core/conflict-solver.d.ts.map +0 -1
  59. package/dist/core/conflict-solver.js +0 -108
  60. package/dist/core/conflict-solver.js.map +0 -1
  61. package/dist/core/context-compactor.d.ts +0 -10
  62. package/dist/core/context-compactor.d.ts.map +0 -1
  63. package/dist/core/context-compactor.js +0 -158
  64. package/dist/core/context-compactor.js.map +0 -1
  65. package/dist/core/context-pruner.d.ts +0 -19
  66. package/dist/core/context-pruner.d.ts.map +0 -1
  67. package/dist/core/context-pruner.js +0 -103
  68. package/dist/core/context-pruner.js.map +0 -1
  69. package/dist/core/context.d.ts +0 -82
  70. package/dist/core/context.d.ts.map +0 -1
  71. package/dist/core/context.js +0 -273
  72. package/dist/core/context.js.map +0 -1
  73. package/dist/core/conversation-recovery.d.ts +0 -9
  74. package/dist/core/conversation-recovery.d.ts.map +0 -1
  75. package/dist/core/conversation-recovery.js +0 -15
  76. package/dist/core/conversation-recovery.js.map +0 -1
  77. package/dist/core/debug-workflow.d.ts +0 -9
  78. package/dist/core/debug-workflow.d.ts.map +0 -1
  79. package/dist/core/debug-workflow.js +0 -19
  80. package/dist/core/debug-workflow.js.map +0 -1
  81. package/dist/core/docs-scraper.d.ts +0 -40
  82. package/dist/core/docs-scraper.d.ts.map +0 -1
  83. package/dist/core/docs-scraper.js +0 -386
  84. package/dist/core/docs-scraper.js.map +0 -1
  85. package/dist/core/editor.d.ts +0 -87
  86. package/dist/core/editor.d.ts.map +0 -1
  87. package/dist/core/editor.js +0 -377
  88. package/dist/core/editor.js.map +0 -1
  89. package/dist/core/export.d.ts +0 -11
  90. package/dist/core/export.d.ts.map +0 -1
  91. package/dist/core/export.js +0 -54
  92. package/dist/core/export.js.map +0 -1
  93. package/dist/core/history-manager.d.ts +0 -75
  94. package/dist/core/history-manager.d.ts.map +0 -1
  95. package/dist/core/history-manager.js +0 -146
  96. package/dist/core/history-manager.js.map +0 -1
  97. package/dist/core/marketplace-client.d.ts +0 -52
  98. package/dist/core/marketplace-client.d.ts.map +0 -1
  99. package/dist/core/marketplace-client.js +0 -71
  100. package/dist/core/marketplace-client.js.map +0 -1
  101. package/dist/core/mcp/mcp-config.d.ts +0 -10
  102. package/dist/core/mcp/mcp-config.d.ts.map +0 -1
  103. package/dist/core/mcp/mcp-config.js +0 -70
  104. package/dist/core/mcp/mcp-config.js.map +0 -1
  105. package/dist/core/mcp/mcp-policy.d.ts +0 -17
  106. package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
  107. package/dist/core/mcp/mcp-policy.js +0 -56
  108. package/dist/core/mcp/mcp-policy.js.map +0 -1
  109. package/dist/core/mcp/oauth-flow.d.ts +0 -30
  110. package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
  111. package/dist/core/mcp/oauth-flow.js +0 -230
  112. package/dist/core/mcp/oauth-flow.js.map +0 -1
  113. package/dist/core/mcp/oauth-store.d.ts +0 -13
  114. package/dist/core/mcp/oauth-store.d.ts.map +0 -1
  115. package/dist/core/mcp/oauth-store.js +0 -68
  116. package/dist/core/mcp/oauth-store.js.map +0 -1
  117. package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
  118. package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
  119. package/dist/core/mcp/resolve-mcp-servers.js +0 -83
  120. package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
  121. package/dist/core/mcp-client.d.ts +0 -99
  122. package/dist/core/mcp-client.d.ts.map +0 -1
  123. package/dist/core/mcp-client.js +0 -317
  124. package/dist/core/mcp-client.js.map +0 -1
  125. package/dist/core/memory-promotions.d.ts +0 -15
  126. package/dist/core/memory-promotions.d.ts.map +0 -1
  127. package/dist/core/memory-promotions.js +0 -38
  128. package/dist/core/memory-promotions.js.map +0 -1
  129. package/dist/core/memory.d.ts +0 -32
  130. package/dist/core/memory.d.ts.map +0 -1
  131. package/dist/core/memory.js +0 -121
  132. package/dist/core/memory.js.map +0 -1
  133. package/dist/core/modes.d.ts +0 -432
  134. package/dist/core/modes.d.ts.map +0 -1
  135. package/dist/core/modes.js +0 -1094
  136. package/dist/core/modes.js.map +0 -1
  137. package/dist/core/pattern-miner.d.ts +0 -43
  138. package/dist/core/pattern-miner.d.ts.map +0 -1
  139. package/dist/core/pattern-miner.js +0 -123
  140. package/dist/core/pattern-miner.js.map +0 -1
  141. package/dist/core/permission-store.d.ts +0 -15
  142. package/dist/core/permission-store.d.ts.map +0 -1
  143. package/dist/core/permission-store.js +0 -30
  144. package/dist/core/permission-store.js.map +0 -1
  145. package/dist/core/permissions.d.ts +0 -33
  146. package/dist/core/permissions.d.ts.map +0 -1
  147. package/dist/core/permissions.js +0 -141
  148. package/dist/core/permissions.js.map +0 -1
  149. package/dist/core/plan-artifacts.d.ts +0 -10
  150. package/dist/core/plan-artifacts.d.ts.map +0 -1
  151. package/dist/core/plan-artifacts.js +0 -60
  152. package/dist/core/plan-artifacts.js.map +0 -1
  153. package/dist/core/plan-session.d.ts +0 -25
  154. package/dist/core/plan-session.d.ts.map +0 -1
  155. package/dist/core/plan-session.js +0 -99
  156. package/dist/core/plan-session.js.map +0 -1
  157. package/dist/core/planMode.d.ts +0 -51
  158. package/dist/core/planMode.d.ts.map +0 -1
  159. package/dist/core/planMode.js +0 -245
  160. package/dist/core/planMode.js.map +0 -1
  161. package/dist/core/plugins.d.ts +0 -96
  162. package/dist/core/plugins.d.ts.map +0 -1
  163. package/dist/core/plugins.js +0 -204
  164. package/dist/core/plugins.js.map +0 -1
  165. package/dist/core/session-bridge.d.ts +0 -128
  166. package/dist/core/session-bridge.d.ts.map +0 -1
  167. package/dist/core/session-bridge.js +0 -328
  168. package/dist/core/session-bridge.js.map +0 -1
  169. package/dist/core/session-manager.d.ts +0 -80
  170. package/dist/core/session-manager.d.ts.map +0 -1
  171. package/dist/core/session-manager.js +0 -166
  172. package/dist/core/session-manager.js.map +0 -1
  173. package/dist/core/session-memory.d.ts +0 -45
  174. package/dist/core/session-memory.d.ts.map +0 -1
  175. package/dist/core/session-memory.js +0 -103
  176. package/dist/core/session-memory.js.map +0 -1
  177. package/dist/core/skill-selection.d.ts +0 -36
  178. package/dist/core/skill-selection.d.ts.map +0 -1
  179. package/dist/core/skill-selection.js +0 -172
  180. package/dist/core/skill-selection.js.map +0 -1
  181. package/dist/core/skills-sh-client.d.ts +0 -19
  182. package/dist/core/skills-sh-client.d.ts.map +0 -1
  183. package/dist/core/skills-sh-client.js +0 -75
  184. package/dist/core/skills-sh-client.js.map +0 -1
  185. package/dist/core/skills.d.ts +0 -97
  186. package/dist/core/skills.d.ts.map +0 -1
  187. package/dist/core/skills.js +0 -339
  188. package/dist/core/skills.js.map +0 -1
  189. package/dist/core/swarm.d.ts +0 -34
  190. package/dist/core/swarm.d.ts.map +0 -1
  191. package/dist/core/swarm.js +0 -111
  192. package/dist/core/swarm.js.map +0 -1
  193. package/dist/core/task-status.d.ts +0 -13
  194. package/dist/core/task-status.d.ts.map +0 -1
  195. package/dist/core/task-status.js +0 -17
  196. package/dist/core/task-status.js.map +0 -1
  197. package/dist/core/tool-orchestrator.d.ts +0 -30
  198. package/dist/core/tool-orchestrator.d.ts.map +0 -1
  199. package/dist/core/tool-orchestrator.js +0 -89
  200. package/dist/core/tool-orchestrator.js.map +0 -1
  201. package/dist/core/tools.d.ts +0 -462
  202. package/dist/core/tools.d.ts.map +0 -1
  203. package/dist/core/tools.js +0 -2916
  204. package/dist/core/tools.js.map +0 -1
  205. package/dist/core/transcript-cleanup.d.ts +0 -8
  206. package/dist/core/transcript-cleanup.d.ts.map +0 -1
  207. package/dist/core/transcript-cleanup.js +0 -52
  208. package/dist/core/transcript-cleanup.js.map +0 -1
  209. package/dist/core/visual-feedback.d.ts +0 -20
  210. package/dist/core/visual-feedback.d.ts.map +0 -1
  211. package/dist/core/visual-feedback.js +0 -117
  212. package/dist/core/visual-feedback.js.map +0 -1
  213. package/dist/tools/browser.d.ts +0 -120
  214. package/dist/tools/browser.d.ts.map +0 -1
  215. package/dist/tools/browser.js +0 -439
  216. package/dist/tools/browser.js.map +0 -1
  217. package/dist/tools/test-generator.d.ts +0 -157
  218. package/dist/tools/test-generator.d.ts.map +0 -1
  219. package/dist/tools/test-generator.js +0 -893
  220. package/dist/tools/test-generator.js.map +0 -1
  221. package/dist/tui/InkApp.d.ts +0 -21
  222. package/dist/tui/InkApp.d.ts.map +0 -1
  223. package/dist/tui/InkApp.js +0 -146
  224. package/dist/tui/InkApp.js.map +0 -1
  225. package/dist/tui/MarkdownMessage.d.ts +0 -16
  226. package/dist/tui/MarkdownMessage.d.ts.map +0 -1
  227. package/dist/tui/MarkdownMessage.js +0 -63
  228. package/dist/tui/MarkdownMessage.js.map +0 -1
  229. package/dist/tui/blessed-chat.d.ts +0 -9
  230. package/dist/tui/blessed-chat.d.ts.map +0 -1
  231. package/dist/tui/blessed-chat.js +0 -887
  232. package/dist/tui/blessed-chat.js.map +0 -1
  233. package/dist/tui/markdown-to-blessed.d.ts +0 -6
  234. package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
  235. package/dist/tui/markdown-to-blessed.js +0 -26
  236. package/dist/tui/markdown-to-blessed.js.map +0 -1
  237. package/dist/ui/ink/App.d.ts +0 -25
  238. package/dist/ui/ink/App.d.ts.map +0 -1
  239. package/dist/ui/ink/App.js +0 -372
  240. package/dist/ui/ink/App.js.map +0 -1
  241. package/dist/utils/at-references.d.ts +0 -14
  242. package/dist/utils/at-references.d.ts.map +0 -1
  243. package/dist/utils/at-references.js +0 -47
  244. package/dist/utils/at-references.js.map +0 -1
  245. package/dist/utils/auto-memory.d.ts +0 -24
  246. package/dist/utils/auto-memory.d.ts.map +0 -1
  247. package/dist/utils/auto-memory.js +0 -153
  248. package/dist/utils/auto-memory.js.map +0 -1
  249. package/dist/utils/git.d.ts +0 -89
  250. package/dist/utils/git.d.ts.map +0 -1
  251. package/dist/utils/git.js +0 -444
  252. package/dist/utils/git.js.map +0 -1
  253. package/dist/utils/mcp-servers-file.d.ts +0 -46
  254. package/dist/utils/mcp-servers-file.d.ts.map +0 -1
  255. package/dist/utils/mcp-servers-file.js +0 -212
  256. package/dist/utils/mcp-servers-file.js.map +0 -1
  257. package/dist/utils/safety.d.ts +0 -60
  258. package/dist/utils/safety.d.ts.map +0 -1
  259. package/dist/utils/safety.js +0 -254
  260. package/dist/utils/safety.js.map +0 -1
  261. package/dist/utils/smithery.d.ts +0 -25
  262. package/dist/utils/smithery.d.ts.map +0 -1
  263. package/dist/utils/smithery.js +0 -50
  264. package/dist/utils/smithery.js.map +0 -1
  265. package/dist/utils/testRunner.d.ts +0 -44
  266. package/dist/utils/testRunner.d.ts.map +0 -1
  267. package/dist/utils/testRunner.js +0 -270
  268. package/dist/utils/testRunner.js.map +0 -1
@@ -1,439 +0,0 @@
1
- import { chromium } from 'playwright';
2
- import * as fs from 'fs/promises';
3
- import * as path from 'path';
4
- /**
5
- * Default viewports for responsive testing
6
- */
7
- export const DEFAULT_VIEWPORTS = [
8
- { name: 'mobile', width: 375, height: 667 },
9
- { name: 'tablet', width: 768, height: 1024 },
10
- { name: 'desktop', width: 1280, height: 800 },
11
- { name: 'desktop-large', width: 1920, height: 1080 },
12
- ];
13
- /**
14
- * BrowserManager - Playwright-based browser automation for XibeCode
15
- *
16
- * Provides tools for:
17
- * - Screenshot capture
18
- * - Console log collection
19
- * - Visual regression testing
20
- * - Performance metrics (Core Web Vitals)
21
- * - Accessibility auditing
22
- * - Responsive testing
23
- * - Network monitoring
24
- */
25
- export class BrowserManager {
26
- browser = null;
27
- context = null;
28
- async getBrowser() {
29
- if (!this.browser) {
30
- this.browser = await chromium.launch({
31
- headless: true,
32
- args: ['--no-sandbox', '--disable-setuid-sandbox'],
33
- });
34
- this.context = await this.browser.newContext();
35
- }
36
- if (!this.context) {
37
- this.context = await this.browser.newContext();
38
- }
39
- return this.context;
40
- }
41
- async close() {
42
- if (this.context) {
43
- await this.context.close();
44
- this.context = null;
45
- }
46
- if (this.browser) {
47
- await this.browser.close();
48
- this.browser = null;
49
- }
50
- }
51
- /**
52
- * Take a screenshot of a webpage
53
- */
54
- async takeScreenshot(url, outputPath, fullPage = true) {
55
- const context = await this.getBrowser();
56
- const page = await context.newPage();
57
- try {
58
- await page.setViewportSize({ width: 1280, height: 800 });
59
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
60
- await page.screenshot({ path: outputPath, fullPage });
61
- return `Screenshot saved to ${outputPath}`;
62
- }
63
- catch (error) {
64
- throw new Error(`Failed to take screenshot: ${error.message}`);
65
- }
66
- finally {
67
- await page.close();
68
- }
69
- }
70
- /**
71
- * Get console logs from a webpage
72
- */
73
- async getConsoleLogs(url, timeout = 5000) {
74
- const context = await this.getBrowser();
75
- const page = await context.newPage();
76
- const logs = [];
77
- page.on('console', (msg) => logs.push(`[${msg.type()}] ${msg.text()}`));
78
- page.on('pageerror', (err) => logs.push(`[error] ${err.message}`));
79
- try {
80
- await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
81
- await page.waitForTimeout(timeout);
82
- return logs;
83
- }
84
- catch (error) {
85
- return [`Error loading page: ${error.message}`];
86
- }
87
- finally {
88
- await page.close();
89
- }
90
- }
91
- /**
92
- * Run a visual regression test by comparing screenshots
93
- */
94
- async runVisualTest(url, baselinePath, outputDir = '.playwright-baselines') {
95
- const context = await this.getBrowser();
96
- const page = await context.newPage();
97
- try {
98
- await page.setViewportSize({ width: 1280, height: 800 });
99
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
100
- // Ensure output directory exists
101
- await fs.mkdir(outputDir, { recursive: true });
102
- const screenshotPath = path.join(outputDir, 'current.png');
103
- await page.screenshot({ path: screenshotPath, fullPage: true });
104
- // Check if baseline exists
105
- let baselineExists = false;
106
- try {
107
- await fs.access(baselinePath);
108
- baselineExists = true;
109
- }
110
- catch {
111
- // Baseline doesn't exist, create it
112
- await fs.copyFile(screenshotPath, baselinePath);
113
- return {
114
- match: true,
115
- diffPercentage: 0,
116
- baselineExists: false,
117
- screenshotPath,
118
- };
119
- }
120
- // Simple pixel comparison (for basic visual testing)
121
- const currentBuffer = await fs.readFile(screenshotPath);
122
- const baselineBuffer = await fs.readFile(baselinePath);
123
- const match = currentBuffer.equals(baselineBuffer);
124
- return {
125
- match,
126
- diffPercentage: match ? 0 : 100, // Simplified - would need pixelmatch for accurate diff
127
- baselineExists: true,
128
- screenshotPath,
129
- };
130
- }
131
- catch (error) {
132
- throw new Error(`Visual test failed: ${error.message}`);
133
- }
134
- finally {
135
- await page.close();
136
- }
137
- }
138
- /**
139
- * Check basic accessibility issues on a page
140
- */
141
- async checkAccessibility(url) {
142
- const context = await this.getBrowser();
143
- const page = await context.newPage();
144
- const issues = [];
145
- try {
146
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
147
- // Check for common accessibility issues
148
- const checks = await page.evaluate(() => {
149
- const issues = [];
150
- // Check images without alt text
151
- document.querySelectorAll('img').forEach((img, i) => {
152
- if (!img.alt && !img.getAttribute('aria-label')) {
153
- issues.push({
154
- type: 'error',
155
- message: 'Image missing alt text',
156
- selector: `img:nth-of-type(${i + 1})`,
157
- context: img.src?.substring(0, 50),
158
- });
159
- }
160
- });
161
- // Check form inputs without labels
162
- document.querySelectorAll('input, select, textarea').forEach((input, i) => {
163
- const id = input.id;
164
- const hasLabel = id && document.querySelector(`label[for="${id}"]`);
165
- const hasAriaLabel = input.getAttribute('aria-label') || input.getAttribute('aria-labelledby');
166
- if (!hasLabel && !hasAriaLabel) {
167
- issues.push({
168
- type: 'error',
169
- message: 'Form input missing label',
170
- selector: `${input.tagName.toLowerCase()}:nth-of-type(${i + 1})`,
171
- context: input.getAttribute('name') || input.getAttribute('placeholder') || undefined,
172
- });
173
- }
174
- });
175
- // Check for empty links
176
- document.querySelectorAll('a').forEach((link, i) => {
177
- const hasText = link.textContent?.trim();
178
- const hasAriaLabel = link.getAttribute('aria-label');
179
- const hasTitle = link.getAttribute('title');
180
- if (!hasText && !hasAriaLabel && !hasTitle) {
181
- issues.push({
182
- type: 'warning',
183
- message: 'Link has no accessible text',
184
- selector: `a:nth-of-type(${i + 1})`,
185
- context: link.href?.substring(0, 50),
186
- });
187
- }
188
- });
189
- // Check for missing document language
190
- if (!document.documentElement.lang) {
191
- issues.push({
192
- type: 'warning',
193
- message: 'Document missing lang attribute',
194
- selector: 'html',
195
- });
196
- }
197
- // Check for missing page title
198
- if (!document.title) {
199
- issues.push({
200
- type: 'error',
201
- message: 'Page missing title',
202
- selector: 'head',
203
- });
204
- }
205
- // Check heading hierarchy
206
- const headings = Array.from(document.querySelectorAll('h1, h2, h3, h4, h5, h6'));
207
- let lastLevel = 0;
208
- headings.forEach((heading, i) => {
209
- const level = parseInt(heading.tagName[1]);
210
- if (level > lastLevel + 1 && lastLevel !== 0) {
211
- issues.push({
212
- type: 'warning',
213
- message: `Heading level skipped from h${lastLevel} to h${level}`,
214
- selector: `${heading.tagName.toLowerCase()}:nth-of-type(${i + 1})`,
215
- context: heading.textContent?.substring(0, 30),
216
- });
217
- }
218
- lastLevel = level;
219
- });
220
- // Check for sufficient color contrast (basic check)
221
- const buttons = document.querySelectorAll('button, [role="button"]');
222
- buttons.forEach((button, i) => {
223
- const styles = window.getComputedStyle(button);
224
- if (styles.backgroundColor === 'transparent' && !button.querySelector('img, svg')) {
225
- issues.push({
226
- type: 'notice',
227
- message: 'Button may have contrast issues',
228
- selector: `button:nth-of-type(${i + 1})`,
229
- context: button.textContent?.substring(0, 30),
230
- });
231
- }
232
- });
233
- return issues;
234
- });
235
- return checks.map(c => ({
236
- type: c.type,
237
- message: c.message,
238
- selector: c.selector,
239
- context: c.context,
240
- }));
241
- }
242
- catch (error) {
243
- throw new Error(`Accessibility check failed: ${error.message}`);
244
- }
245
- finally {
246
- await page.close();
247
- }
248
- }
249
- /**
250
- * Measure Core Web Vitals and performance metrics
251
- */
252
- async measurePerformance(url) {
253
- const context = await this.getBrowser();
254
- const page = await context.newPage();
255
- try {
256
- const startTime = Date.now();
257
- // Navigate and measure timing
258
- await page.goto(url, { waitUntil: 'load', timeout: 30000 });
259
- const loadTime = Date.now() - startTime;
260
- // Get performance metrics from browser
261
- const metrics = await page.evaluate(() => {
262
- const perf = performance;
263
- const navigation = perf.getEntriesByType('navigation')[0];
264
- const paint = perf.getEntriesByType('paint');
265
- // Get First Contentful Paint
266
- const fcp = paint.find(p => p.name === 'first-contentful-paint');
267
- // Get Largest Contentful Paint (if available)
268
- let lcp = null;
269
- try {
270
- const lcpEntries = perf.getEntriesByType('largest-contentful-paint');
271
- if (lcpEntries.length > 0) {
272
- lcp = lcpEntries[lcpEntries.length - 1].startTime;
273
- }
274
- }
275
- catch {
276
- // LCP not available
277
- }
278
- // Get Cumulative Layout Shift (if available)
279
- let cls = null;
280
- try {
281
- const layoutShiftEntries = perf.getEntriesByType('layout-shift');
282
- cls = layoutShiftEntries
283
- .filter(entry => !entry.hadRecentInput)
284
- .reduce((sum, entry) => sum + entry.value, 0);
285
- }
286
- catch {
287
- // CLS not available
288
- }
289
- return {
290
- domContentLoaded: navigation?.domContentLoadedEventEnd - navigation?.startTime || 0,
291
- firstContentfulPaint: fcp?.startTime || null,
292
- largestContentfulPaint: lcp,
293
- cumulativeLayoutShift: cls,
294
- timeToInteractive: navigation?.domInteractive - navigation?.startTime || null,
295
- };
296
- });
297
- return {
298
- url,
299
- loadTime,
300
- domContentLoaded: metrics.domContentLoaded,
301
- firstContentfulPaint: metrics.firstContentfulPaint,
302
- largestContentfulPaint: metrics.largestContentfulPaint,
303
- cumulativeLayoutShift: metrics.cumulativeLayoutShift,
304
- timeToInteractive: metrics.timeToInteractive,
305
- };
306
- }
307
- catch (error) {
308
- throw new Error(`Performance measurement failed: ${error.message}`);
309
- }
310
- finally {
311
- await page.close();
312
- }
313
- }
314
- /**
315
- * Test a page across multiple viewport sizes
316
- */
317
- async testResponsive(url, outputDir, viewports = DEFAULT_VIEWPORTS) {
318
- const context = await this.getBrowser();
319
- const results = [];
320
- // Ensure output directory exists
321
- await fs.mkdir(outputDir, { recursive: true });
322
- for (const viewport of viewports) {
323
- const page = await context.newPage();
324
- const errors = [];
325
- page.on('pageerror', (err) => errors.push(err.message));
326
- page.on('console', (msg) => {
327
- if (msg.type() === 'error') {
328
- errors.push(msg.text());
329
- }
330
- });
331
- try {
332
- await page.setViewportSize({ width: viewport.width, height: viewport.height });
333
- const startTime = Date.now();
334
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
335
- const loadTime = Date.now() - startTime;
336
- const screenshotPath = path.join(outputDir, `${viewport.name}-${viewport.width}x${viewport.height}.png`);
337
- await page.screenshot({ path: screenshotPath, fullPage: true });
338
- results.push({
339
- viewport,
340
- screenshotPath,
341
- loadTime,
342
- errors,
343
- });
344
- }
345
- catch (error) {
346
- results.push({
347
- viewport,
348
- screenshotPath: '',
349
- loadTime: 0,
350
- errors: [error.message],
351
- });
352
- }
353
- finally {
354
- await page.close();
355
- }
356
- }
357
- return results;
358
- }
359
- /**
360
- * Capture all network requests made during page load
361
- */
362
- async captureNetworkRequests(url) {
363
- const context = await this.getBrowser();
364
- const page = await context.newPage();
365
- const requests = [];
366
- const requestTimings = new Map();
367
- page.on('request', (request) => {
368
- requestTimings.set(request.url(), Date.now());
369
- });
370
- page.on('response', (response) => {
371
- const request = response.request();
372
- const startTime = requestTimings.get(request.url());
373
- const duration = startTime ? Date.now() - startTime : null;
374
- requests.push({
375
- url: request.url(),
376
- method: request.method(),
377
- status: response.status(),
378
- resourceType: request.resourceType(),
379
- duration,
380
- });
381
- });
382
- page.on('requestfailed', (request) => {
383
- const startTime = requestTimings.get(request.url());
384
- const duration = startTime ? Date.now() - startTime : null;
385
- requests.push({
386
- url: request.url(),
387
- method: request.method(),
388
- status: null,
389
- resourceType: request.resourceType(),
390
- duration,
391
- });
392
- });
393
- try {
394
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
395
- return requests;
396
- }
397
- catch (error) {
398
- // Return what we captured even on error
399
- return requests;
400
- }
401
- finally {
402
- await page.close();
403
- }
404
- }
405
- /**
406
- * Run a Playwright test file
407
- */
408
- async runPlaywrightTest(testPath, options) {
409
- const { exec } = await import('child_process');
410
- const { promisify } = await import('util');
411
- const execAsync = promisify(exec);
412
- const args = ['npx', 'playwright', 'test', testPath];
413
- if (options?.headed) {
414
- args.push('--headed');
415
- }
416
- if (options?.browser) {
417
- args.push('--project=' + options.browser);
418
- }
419
- if (options?.timeout) {
420
- args.push('--timeout=' + options.timeout);
421
- }
422
- try {
423
- const { stdout, stderr } = await execAsync(args.join(' '), {
424
- timeout: options?.timeout || 120000,
425
- });
426
- return {
427
- success: true,
428
- output: stdout + (stderr ? '\n' + stderr : ''),
429
- };
430
- }
431
- catch (error) {
432
- return {
433
- success: false,
434
- output: error.stdout + (error.stderr ? '\n' + error.stderr : ''),
435
- };
436
- }
437
- }
438
- }
439
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"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"}
@@ -1,157 +0,0 @@
1
- /**
2
- * AI Test Generator
3
- *
4
- * Automatically generates test cases for functions, classes, and modules.
5
- * Supports multiple testing frameworks: Vitest, Jest, Mocha, pytest, Go test.
6
- *
7
- * @module tools/test-generator
8
- * @since 0.4.0
9
- */
10
- export interface TestCase {
11
- name: string;
12
- description: string;
13
- type: 'unit' | 'integration' | 'edge' | 'boundary' | 'error';
14
- input?: any;
15
- expectedOutput?: any;
16
- assertion?: string;
17
- }
18
- export interface FunctionAnalysis {
19
- name: string;
20
- params: Array<{
21
- name: string;
22
- type?: string;
23
- optional?: boolean;
24
- }>;
25
- returnType?: string;
26
- isAsync: boolean;
27
- isExported: boolean;
28
- complexity: 'low' | 'medium' | 'high';
29
- dependencies: string[];
30
- sideEffects: string[];
31
- }
32
- export interface ClassAnalysis {
33
- name: string;
34
- methods: FunctionAnalysis[];
35
- properties: Array<{
36
- name: string;
37
- type?: string;
38
- visibility: 'public' | 'private' | 'protected';
39
- }>;
40
- constructorMethod?: FunctionAnalysis;
41
- isExported: boolean;
42
- }
43
- export interface ModuleAnalysis {
44
- filePath: string;
45
- language: 'typescript' | 'javascript' | 'python' | 'go';
46
- functions: FunctionAnalysis[];
47
- classes: ClassAnalysis[];
48
- exports: string[];
49
- imports: Array<{
50
- module: string;
51
- imports: string[];
52
- }>;
53
- }
54
- export interface GeneratedTest {
55
- testFilePath: string;
56
- framework: string;
57
- content: string;
58
- testCases: TestCase[];
59
- coverage: {
60
- functions: number;
61
- branches: number;
62
- lines: number;
63
- };
64
- }
65
- export interface TestGeneratorConfig {
66
- framework?: 'vitest' | 'jest' | 'mocha' | 'pytest' | 'go';
67
- outputDir?: string;
68
- includeEdgeCases?: boolean;
69
- includeMocks?: boolean;
70
- includeTypeChecks?: boolean;
71
- maxTestsPerFunction?: number;
72
- style?: 'describe-it' | 'test' | 'flat';
73
- }
74
- /**
75
- * AI-powered test generator that analyzes code and generates comprehensive test suites
76
- */
77
- export declare class TestGenerator {
78
- private workingDir;
79
- private testDetector;
80
- constructor(workingDir?: string);
81
- /**
82
- * Analyze a source file to extract testable components
83
- */
84
- analyzeFile(filePath: string): Promise<ModuleAnalysis>;
85
- /**
86
- * Analyze JavaScript/TypeScript code
87
- */
88
- private analyzeJSTS;
89
- /**
90
- * Analyze Python code
91
- */
92
- private analyzePython;
93
- /**
94
- * Analyze Go code
95
- */
96
- private analyzeGo;
97
- /**
98
- * Generate test cases for analyzed code
99
- */
100
- generateTests(analysis: ModuleAnalysis, config?: TestGeneratorConfig): Promise<GeneratedTest>;
101
- /**
102
- * Generate test cases for a function
103
- */
104
- private generateFunctionTests;
105
- /**
106
- * Generate test cases for a class
107
- */
108
- private generateClassTests;
109
- /**
110
- * Generate test file content based on framework
111
- */
112
- private generateTestFileContent;
113
- /**
114
- * Generate Vitest test content
115
- */
116
- private generateVitestContent;
117
- /**
118
- * Generate Jest test content
119
- */
120
- private generateJestContent;
121
- /**
122
- * Generate Mocha test content
123
- */
124
- private generateMochaContent;
125
- /**
126
- * Generate pytest test content
127
- */
128
- private generatePytestContent;
129
- /**
130
- * Generate Go test content
131
- */
132
- private generateGoTestContent;
133
- private parseJSTSParams;
134
- private parsePythonParams;
135
- private parseGoParams;
136
- private extractClassBody;
137
- private estimateComplexity;
138
- private detectDependencies;
139
- private detectSideEffects;
140
- private detectFramework;
141
- private getRelativeImportPath;
142
- private groupTestCases;
143
- private generateDefaultArgs;
144
- private generateInvalidArgs;
145
- private generateTypeAssertion;
146
- private generateEdgeCases;
147
- private convertToPytestAssertion;
148
- }
149
- /**
150
- * Write generated tests to file
151
- */
152
- export declare function writeTestFile(generatedTest: GeneratedTest): Promise<void>;
153
- /**
154
- * Quick function to generate and optionally write tests
155
- */
156
- export declare function generateTestsForFile(filePath: string, config?: TestGeneratorConfig, writeToFile?: boolean): Promise<GeneratedTest>;
157
- //# sourceMappingURL=test-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-generator.d.ts","sourceRoot":"","sources":["../../src/tools/test-generator.ts"],"names":[],"mappings":"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"}