@phren/cli 0.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.
Files changed (185) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +590 -0
  3. package/mcp/dist/capabilities/cli.js +61 -0
  4. package/mcp/dist/capabilities/index.js +15 -0
  5. package/mcp/dist/capabilities/mcp.js +61 -0
  6. package/mcp/dist/capabilities/types.js +57 -0
  7. package/mcp/dist/capabilities/vscode.js +61 -0
  8. package/mcp/dist/capabilities/web-ui.js +61 -0
  9. package/mcp/dist/cli-actions.js +302 -0
  10. package/mcp/dist/cli-config.js +580 -0
  11. package/mcp/dist/cli-extract.js +305 -0
  12. package/mcp/dist/cli-govern.js +371 -0
  13. package/mcp/dist/cli-graph.js +169 -0
  14. package/mcp/dist/cli-hooks-citations.js +44 -0
  15. package/mcp/dist/cli-hooks-context.js +56 -0
  16. package/mcp/dist/cli-hooks-globs.js +83 -0
  17. package/mcp/dist/cli-hooks-output.js +130 -0
  18. package/mcp/dist/cli-hooks-retrieval.js +2 -0
  19. package/mcp/dist/cli-hooks-session.js +1402 -0
  20. package/mcp/dist/cli-hooks.js +350 -0
  21. package/mcp/dist/cli-namespaces.js +989 -0
  22. package/mcp/dist/cli-ops.js +253 -0
  23. package/mcp/dist/cli-search.js +407 -0
  24. package/mcp/dist/cli.js +108 -0
  25. package/mcp/dist/content-archive.js +278 -0
  26. package/mcp/dist/content-citation.js +391 -0
  27. package/mcp/dist/content-dedup.js +622 -0
  28. package/mcp/dist/content-learning.js +472 -0
  29. package/mcp/dist/content-metadata.js +186 -0
  30. package/mcp/dist/content-validate.js +462 -0
  31. package/mcp/dist/core-finding.js +54 -0
  32. package/mcp/dist/core-project.js +36 -0
  33. package/mcp/dist/core-search.js +50 -0
  34. package/mcp/dist/data-access.js +400 -0
  35. package/mcp/dist/data-tasks.js +821 -0
  36. package/mcp/dist/embedding.js +344 -0
  37. package/mcp/dist/entrypoint.js +387 -0
  38. package/mcp/dist/finding-context.js +172 -0
  39. package/mcp/dist/finding-impact.js +181 -0
  40. package/mcp/dist/finding-journal.js +122 -0
  41. package/mcp/dist/finding-lifecycle.js +259 -0
  42. package/mcp/dist/governance-audit.js +22 -0
  43. package/mcp/dist/governance-locks.js +96 -0
  44. package/mcp/dist/governance-policy.js +648 -0
  45. package/mcp/dist/governance-scores.js +355 -0
  46. package/mcp/dist/hooks.js +449 -0
  47. package/mcp/dist/impact-scoring.js +22 -0
  48. package/mcp/dist/index-query.js +168 -0
  49. package/mcp/dist/index.js +205 -0
  50. package/mcp/dist/init-config.js +336 -0
  51. package/mcp/dist/init-preferences.js +62 -0
  52. package/mcp/dist/init-setup.js +1305 -0
  53. package/mcp/dist/init-shared.js +29 -0
  54. package/mcp/dist/init.js +1730 -0
  55. package/mcp/dist/link-checksums.js +62 -0
  56. package/mcp/dist/link-context.js +257 -0
  57. package/mcp/dist/link-doctor.js +591 -0
  58. package/mcp/dist/link-skills.js +212 -0
  59. package/mcp/dist/link.js +596 -0
  60. package/mcp/dist/logger.js +15 -0
  61. package/mcp/dist/machine-identity.js +38 -0
  62. package/mcp/dist/mcp-config.js +254 -0
  63. package/mcp/dist/mcp-data.js +315 -0
  64. package/mcp/dist/mcp-extract-facts.js +78 -0
  65. package/mcp/dist/mcp-extract.js +133 -0
  66. package/mcp/dist/mcp-finding.js +557 -0
  67. package/mcp/dist/mcp-graph.js +339 -0
  68. package/mcp/dist/mcp-hooks.js +256 -0
  69. package/mcp/dist/mcp-memory.js +58 -0
  70. package/mcp/dist/mcp-ops.js +328 -0
  71. package/mcp/dist/mcp-search.js +628 -0
  72. package/mcp/dist/mcp-session.js +651 -0
  73. package/mcp/dist/mcp-skills.js +189 -0
  74. package/mcp/dist/mcp-tasks.js +551 -0
  75. package/mcp/dist/mcp-types.js +7 -0
  76. package/mcp/dist/memory-ui-assets.js +6 -0
  77. package/mcp/dist/memory-ui-data.js +513 -0
  78. package/mcp/dist/memory-ui-graph.js +1910 -0
  79. package/mcp/dist/memory-ui-page.js +353 -0
  80. package/mcp/dist/memory-ui-scripts.js +1387 -0
  81. package/mcp/dist/memory-ui-server.js +1218 -0
  82. package/mcp/dist/memory-ui-styles.js +555 -0
  83. package/mcp/dist/memory-ui.js +9 -0
  84. package/mcp/dist/package-metadata.js +13 -0
  85. package/mcp/dist/phren-art.js +52 -0
  86. package/mcp/dist/phren-core.js +108 -0
  87. package/mcp/dist/phren-dotenv.js +67 -0
  88. package/mcp/dist/phren-paths.js +476 -0
  89. package/mcp/dist/proactivity.js +172 -0
  90. package/mcp/dist/profile-store.js +228 -0
  91. package/mcp/dist/project-config.js +85 -0
  92. package/mcp/dist/project-locator.js +25 -0
  93. package/mcp/dist/project-topics.js +1134 -0
  94. package/mcp/dist/provider-adapters.js +176 -0
  95. package/mcp/dist/runtime-profile.js +18 -0
  96. package/mcp/dist/session-checkpoints.js +131 -0
  97. package/mcp/dist/session-utils.js +68 -0
  98. package/mcp/dist/shared-content.js +8 -0
  99. package/mcp/dist/shared-embedding-cache.js +143 -0
  100. package/mcp/dist/shared-fragment-graph.js +456 -0
  101. package/mcp/dist/shared-governance.js +4 -0
  102. package/mcp/dist/shared-index.js +1334 -0
  103. package/mcp/dist/shared-ollama.js +192 -0
  104. package/mcp/dist/shared-paths.js +1 -0
  105. package/mcp/dist/shared-retrieval.js +796 -0
  106. package/mcp/dist/shared-search-fallback.js +375 -0
  107. package/mcp/dist/shared-sqljs.js +42 -0
  108. package/mcp/dist/shared-stemmer.js +171 -0
  109. package/mcp/dist/shared-vector-index.js +199 -0
  110. package/mcp/dist/shared.js +114 -0
  111. package/mcp/dist/shell-entry.js +209 -0
  112. package/mcp/dist/shell-input.js +943 -0
  113. package/mcp/dist/shell-palette.js +119 -0
  114. package/mcp/dist/shell-render.js +252 -0
  115. package/mcp/dist/shell-state-store.js +81 -0
  116. package/mcp/dist/shell-types.js +13 -0
  117. package/mcp/dist/shell-view-list.js +14 -0
  118. package/mcp/dist/shell-view.js +707 -0
  119. package/mcp/dist/shell.js +352 -0
  120. package/mcp/dist/skill-files.js +117 -0
  121. package/mcp/dist/skill-registry.js +279 -0
  122. package/mcp/dist/skill-state.js +28 -0
  123. package/mcp/dist/startup-embedding.js +57 -0
  124. package/mcp/dist/status.js +323 -0
  125. package/mcp/dist/synonyms.json +670 -0
  126. package/mcp/dist/task-hygiene.js +251 -0
  127. package/mcp/dist/task-lifecycle.js +347 -0
  128. package/mcp/dist/tasks-github.js +76 -0
  129. package/mcp/dist/telemetry.js +165 -0
  130. package/mcp/dist/test-global-setup.js +37 -0
  131. package/mcp/dist/tool-registry.js +104 -0
  132. package/mcp/dist/update.js +97 -0
  133. package/mcp/dist/utils.js +543 -0
  134. package/package.json +67 -0
  135. package/skills/README.md +7 -0
  136. package/skills/consolidate/SKILL.md +152 -0
  137. package/skills/discover/SKILL.md +175 -0
  138. package/skills/init/SKILL.md +216 -0
  139. package/skills/profiles/SKILL.md +121 -0
  140. package/skills/sync/SKILL.md +261 -0
  141. package/starter/README.md +74 -0
  142. package/starter/global/CLAUDE.md +89 -0
  143. package/starter/global/skills/humanize.md +30 -0
  144. package/starter/global/skills/pipeline.md +35 -0
  145. package/starter/global/skills/release.md +35 -0
  146. package/starter/machines.yaml +8 -0
  147. package/starter/my-api/.claude/skills/README.md +7 -0
  148. package/starter/my-api/CLAUDE.md +33 -0
  149. package/starter/my-api/FINDINGS.md +9 -0
  150. package/starter/my-api/summary.md +7 -0
  151. package/starter/my-api/tasks.md +7 -0
  152. package/starter/my-first-project/.claude/skills/README.md +7 -0
  153. package/starter/my-first-project/CLAUDE.md +49 -0
  154. package/starter/my-first-project/FINDINGS.md +24 -0
  155. package/starter/my-first-project/summary.md +11 -0
  156. package/starter/my-first-project/tasks.md +25 -0
  157. package/starter/my-frontend/.claude/skills/README.md +7 -0
  158. package/starter/my-frontend/CLAUDE.md +33 -0
  159. package/starter/my-frontend/FINDINGS.md +9 -0
  160. package/starter/my-frontend/summary.md +7 -0
  161. package/starter/my-frontend/tasks.md +7 -0
  162. package/starter/profiles/default.yaml +4 -0
  163. package/starter/profiles/personal.yaml +4 -0
  164. package/starter/profiles/work.yaml +4 -0
  165. package/starter/templates/README.md +7 -0
  166. package/starter/templates/frontend/CLAUDE.md +23 -0
  167. package/starter/templates/frontend/FINDINGS.md +7 -0
  168. package/starter/templates/frontend/reference/README.md +4 -0
  169. package/starter/templates/frontend/summary.md +7 -0
  170. package/starter/templates/frontend/tasks.md +11 -0
  171. package/starter/templates/library/CLAUDE.md +22 -0
  172. package/starter/templates/library/FINDINGS.md +7 -0
  173. package/starter/templates/library/reference/README.md +4 -0
  174. package/starter/templates/library/summary.md +7 -0
  175. package/starter/templates/library/tasks.md +11 -0
  176. package/starter/templates/monorepo/CLAUDE.md +21 -0
  177. package/starter/templates/monorepo/FINDINGS.md +7 -0
  178. package/starter/templates/monorepo/reference/README.md +4 -0
  179. package/starter/templates/monorepo/summary.md +7 -0
  180. package/starter/templates/monorepo/tasks.md +11 -0
  181. package/starter/templates/python-project/CLAUDE.md +21 -0
  182. package/starter/templates/python-project/FINDINGS.md +7 -0
  183. package/starter/templates/python-project/reference/README.md +4 -0
  184. package/starter/templates/python-project/summary.md +7 -0
  185. package/starter/templates/python-project/tasks.md +10 -0
@@ -0,0 +1,670 @@
1
+ {
2
+ "429": [
3
+ "rate limit",
4
+ "throttle",
5
+ "throttling",
6
+ "too many requests"
7
+ ],
8
+ "rate limit": [
9
+ "throttle",
10
+ "throttling",
11
+ "429",
12
+ "too many requests"
13
+ ],
14
+ "throttle": [
15
+ "rate limit",
16
+ "throttling",
17
+ "429",
18
+ "debounce"
19
+ ],
20
+ "throttling": [
21
+ "rate limit",
22
+ "throttle",
23
+ "429"
24
+ ],
25
+ "error": [
26
+ "exception",
27
+ "failure",
28
+ "crash",
29
+ "bug"
30
+ ],
31
+ "exception": [
32
+ "error",
33
+ "failure",
34
+ "crash"
35
+ ],
36
+ "bug": [
37
+ "error",
38
+ "failure",
39
+ "crash"
40
+ ],
41
+ "auth": [
42
+ "authentication",
43
+ "authorization",
44
+ "login",
45
+ "oauth",
46
+ "jwt"
47
+ ],
48
+ "authentication": [
49
+ "auth",
50
+ "login",
51
+ "oauth"
52
+ ],
53
+ "authorization": [
54
+ "auth",
55
+ "login",
56
+ "oauth"
57
+ ],
58
+ "login": [
59
+ "auth",
60
+ "authentication",
61
+ "oauth"
62
+ ],
63
+ "cache": [
64
+ "caching",
65
+ "memoize",
66
+ "memoization"
67
+ ],
68
+ "caching": [
69
+ "cache",
70
+ "memoize",
71
+ "memoization"
72
+ ],
73
+ "deploy": [
74
+ "deployment",
75
+ "release",
76
+ "publish",
77
+ "ship"
78
+ ],
79
+ "deployment": [
80
+ "deploy",
81
+ "release",
82
+ "publish"
83
+ ],
84
+ "test": [
85
+ "testing",
86
+ "spec",
87
+ "jest",
88
+ "vitest",
89
+ "pytest"
90
+ ],
91
+ "testing": [
92
+ "test",
93
+ "spec",
94
+ "jest",
95
+ "vitest"
96
+ ],
97
+ "api": [
98
+ "endpoint",
99
+ "route",
100
+ "handler"
101
+ ],
102
+ "endpoint": [
103
+ "api",
104
+ "route",
105
+ "handler"
106
+ ],
107
+ "database": [
108
+ "db",
109
+ "sqlite",
110
+ "postgres",
111
+ "sql"
112
+ ],
113
+ "db": [
114
+ "database",
115
+ "sqlite",
116
+ "postgres",
117
+ "sql"
118
+ ],
119
+ "env": [
120
+ "environment",
121
+ "dotenv",
122
+ "config"
123
+ ],
124
+ "environment": [
125
+ "env",
126
+ "dotenv",
127
+ "config"
128
+ ],
129
+ "ci": [
130
+ "pipeline",
131
+ "github actions",
132
+ "workflow"
133
+ ],
134
+ "pipeline": [
135
+ "ci",
136
+ "github actions",
137
+ "workflow"
138
+ ],
139
+ "websocket": [
140
+ "ws",
141
+ "socket",
142
+ "real-time"
143
+ ],
144
+ "hook": [
145
+ "hooks",
146
+ "lifecycle",
147
+ "callback"
148
+ ],
149
+ "hooks": [
150
+ "hook",
151
+ "lifecycle",
152
+ "callback"
153
+ ],
154
+ "middleware": [
155
+ "interceptor",
156
+ "handler",
157
+ "filter"
158
+ ],
159
+ "queue": [
160
+ "job",
161
+ "worker",
162
+ "background"
163
+ ],
164
+ "docker": [
165
+ "container",
166
+ "dockerfile",
167
+ "compose"
168
+ ],
169
+ "container": [
170
+ "docker",
171
+ "dockerfile",
172
+ "compose"
173
+ ],
174
+ "flexbox": [
175
+ "flex",
176
+ "css",
177
+ "layout"
178
+ ],
179
+ "grid": [
180
+ "css grid",
181
+ "layout",
182
+ "display"
183
+ ],
184
+ "css": [
185
+ "stylesheet",
186
+ "style",
187
+ "sass",
188
+ "scss",
189
+ "tailwind"
190
+ ],
191
+ "stylesheet": [
192
+ "css",
193
+ "sass",
194
+ "scss"
195
+ ],
196
+ "selector": [
197
+ "css",
198
+ "querySelector",
199
+ "specificity"
200
+ ],
201
+ "animation": [
202
+ "transition",
203
+ "keyframes",
204
+ "css"
205
+ ],
206
+ "transition": [
207
+ "animation",
208
+ "keyframes",
209
+ "css"
210
+ ],
211
+ "responsive": [
212
+ "media query",
213
+ "breakpoint",
214
+ "viewport"
215
+ ],
216
+ "media query": [
217
+ "responsive",
218
+ "breakpoint",
219
+ "viewport"
220
+ ],
221
+ "tailwind": [
222
+ "css",
223
+ "utility classes",
224
+ "postcss"
225
+ ],
226
+ "sass": [
227
+ "scss",
228
+ "css",
229
+ "preprocessor"
230
+ ],
231
+ "scss": [
232
+ "sass",
233
+ "css",
234
+ "preprocessor"
235
+ ],
236
+ "cors": [
237
+ "cross-origin",
238
+ "origin",
239
+ "preflight"
240
+ ],
241
+ "xss": [
242
+ "cross-site scripting",
243
+ "sanitize",
244
+ "escape"
245
+ ],
246
+ "csrf": [
247
+ "cross-site request forgery",
248
+ "token",
249
+ "security"
250
+ ],
251
+ "injection": [
252
+ "sql injection",
253
+ "xss",
254
+ "sanitize"
255
+ ],
256
+ "sanitize": [
257
+ "escape",
258
+ "xss",
259
+ "injection",
260
+ "validate"
261
+ ],
262
+ "escape": [
263
+ "sanitize",
264
+ "xss",
265
+ "encode"
266
+ ],
267
+ "oauth": [
268
+ "auth",
269
+ "jwt",
270
+ "token",
271
+ "openid"
272
+ ],
273
+ "jwt": [
274
+ "token",
275
+ "auth",
276
+ "oauth",
277
+ "bearer"
278
+ ],
279
+ "rbac": [
280
+ "role",
281
+ "permission",
282
+ "access control"
283
+ ],
284
+ "permission": [
285
+ "rbac",
286
+ "role",
287
+ "access control",
288
+ "authorization"
289
+ ],
290
+ "rate-limit": [
291
+ "throttle",
292
+ "429",
293
+ "rate limit"
294
+ ],
295
+ "csp": [
296
+ "content security policy",
297
+ "security",
298
+ "header"
299
+ ],
300
+ "redux": [
301
+ "store",
302
+ "dispatch",
303
+ "reducer",
304
+ "action"
305
+ ],
306
+ "zustand": [
307
+ "store",
308
+ "state",
309
+ "react"
310
+ ],
311
+ "context": [
312
+ "provider",
313
+ "consumer",
314
+ "react"
315
+ ],
316
+ "store": [
317
+ "state",
318
+ "redux",
319
+ "zustand"
320
+ ],
321
+ "dispatch": [
322
+ "action",
323
+ "redux",
324
+ "event"
325
+ ],
326
+ "reducer": [
327
+ "redux",
328
+ "action",
329
+ "state"
330
+ ],
331
+ "action": [
332
+ "dispatch",
333
+ "reducer",
334
+ "redux"
335
+ ],
336
+ "recoil": [
337
+ "atom",
338
+ "selector",
339
+ "state"
340
+ ],
341
+ "jotai": [
342
+ "atom",
343
+ "state",
344
+ "react"
345
+ ],
346
+ "signal": [
347
+ "reactive",
348
+ "state",
349
+ "observable"
350
+ ],
351
+ "profiler": [
352
+ "benchmark",
353
+ "performance",
354
+ "flame graph"
355
+ ],
356
+ "benchmark": [
357
+ "profiler",
358
+ "performance",
359
+ "latency"
360
+ ],
361
+ "latency": [
362
+ "performance",
363
+ "throughput",
364
+ "response time"
365
+ ],
366
+ "throughput": [
367
+ "performance",
368
+ "latency",
369
+ "bandwidth"
370
+ ],
371
+ "memory leak": [
372
+ "gc",
373
+ "heap",
374
+ "memory"
375
+ ],
376
+ "memory-leak": [
377
+ "gc",
378
+ "heap",
379
+ "memory"
380
+ ],
381
+ "gc": [
382
+ "garbage collection",
383
+ "memory",
384
+ "heap"
385
+ ],
386
+ "memoize": [
387
+ "cache",
388
+ "memoization",
389
+ "useMemo"
390
+ ],
391
+ "memoization": [
392
+ "memoize",
393
+ "cache",
394
+ "useMemo"
395
+ ],
396
+ "debounce": [
397
+ "throttle",
398
+ "rate limit",
399
+ "delay"
400
+ ],
401
+ "lazy-load": [
402
+ "code splitting",
403
+ "dynamic import",
404
+ "lazy"
405
+ ],
406
+ "lazy load": [
407
+ "code splitting",
408
+ "dynamic import",
409
+ "lazy"
410
+ ],
411
+ "kubernetes": [
412
+ "k8s",
413
+ "helm",
414
+ "pod",
415
+ "deployment"
416
+ ],
417
+ "k8s": [
418
+ "kubernetes",
419
+ "helm",
420
+ "pod",
421
+ "deployment"
422
+ ],
423
+ "helm": [
424
+ "kubernetes",
425
+ "k8s",
426
+ "chart"
427
+ ],
428
+ "pod": [
429
+ "kubernetes",
430
+ "k8s",
431
+ "container"
432
+ ],
433
+ "ingress": [
434
+ "kubernetes",
435
+ "k8s",
436
+ "routing",
437
+ "service"
438
+ ],
439
+ "namespace": [
440
+ "kubernetes",
441
+ "k8s",
442
+ "scope"
443
+ ],
444
+ "dockerfile": [
445
+ "docker",
446
+ "container",
447
+ "build"
448
+ ],
449
+ "compose": [
450
+ "docker",
451
+ "docker-compose",
452
+ "container"
453
+ ],
454
+ "embedding": [
455
+ "vector",
456
+ "cosine",
457
+ "similarity"
458
+ ],
459
+ "vector": [
460
+ "embedding",
461
+ "cosine",
462
+ "similarity"
463
+ ],
464
+ "cosine": [
465
+ "similarity",
466
+ "vector",
467
+ "embedding"
468
+ ],
469
+ "similarity": [
470
+ "cosine",
471
+ "vector",
472
+ "distance"
473
+ ],
474
+ "model": [
475
+ "inference",
476
+ "training",
477
+ "ml"
478
+ ],
479
+ "inference": [
480
+ "model",
481
+ "prediction",
482
+ "ml"
483
+ ],
484
+ "training": [
485
+ "model",
486
+ "dataset",
487
+ "ml"
488
+ ],
489
+ "dataset": [
490
+ "data",
491
+ "training",
492
+ "pipeline"
493
+ ],
494
+ "feature": [
495
+ "label",
496
+ "dataset",
497
+ "ml"
498
+ ],
499
+ "label": [
500
+ "feature",
501
+ "annotation",
502
+ "dataset"
503
+ ],
504
+ "tokenize": [
505
+ "tokenizer",
506
+ "nlp",
507
+ "parse"
508
+ ],
509
+ "rn": [
510
+ "react-native",
511
+ "expo",
512
+ "mobile"
513
+ ],
514
+ "react-native": [
515
+ "rn",
516
+ "expo",
517
+ "mobile"
518
+ ],
519
+ "expo": [
520
+ "react-native",
521
+ "rn",
522
+ "mobile"
523
+ ],
524
+ "ios": [
525
+ "apple",
526
+ "swift",
527
+ "xcode",
528
+ "mobile"
529
+ ],
530
+ "android": [
531
+ "kotlin",
532
+ "gradle",
533
+ "mobile"
534
+ ],
535
+ "native": [
536
+ "ios",
537
+ "android",
538
+ "platform"
539
+ ],
540
+ "gesture": [
541
+ "touch",
542
+ "swipe",
543
+ "pan"
544
+ ],
545
+ "navigation": [
546
+ "router",
547
+ "screen",
548
+ "stack"
549
+ ],
550
+ "deep-link": [
551
+ "universal link",
552
+ "app link",
553
+ "url scheme"
554
+ ],
555
+ "deep link": [
556
+ "universal link",
557
+ "app link",
558
+ "url scheme"
559
+ ],
560
+ "a11y": [
561
+ "accessibility",
562
+ "aria",
563
+ "wcag"
564
+ ],
565
+ "aria": [
566
+ "a11y",
567
+ "accessibility",
568
+ "role"
569
+ ],
570
+ "wcag": [
571
+ "a11y",
572
+ "accessibility",
573
+ "contrast"
574
+ ],
575
+ "screen-reader": [
576
+ "a11y",
577
+ "aria",
578
+ "voiceover"
579
+ ],
580
+ "screen reader": [
581
+ "a11y",
582
+ "aria",
583
+ "voiceover"
584
+ ],
585
+ "focus": [
586
+ "keyboard-nav",
587
+ "tabindex",
588
+ "a11y"
589
+ ],
590
+ "keyboard-nav": [
591
+ "focus",
592
+ "tabindex",
593
+ "a11y"
594
+ ],
595
+ "contrast": [
596
+ "wcag",
597
+ "a11y",
598
+ "color"
599
+ ],
600
+ "semantic": [
601
+ "html",
602
+ "a11y",
603
+ "landmark"
604
+ ],
605
+ "jest": [
606
+ "test",
607
+ "vitest",
608
+ "testing"
609
+ ],
610
+ "vitest": [
611
+ "test",
612
+ "jest",
613
+ "testing"
614
+ ],
615
+ "mocha": [
616
+ "test",
617
+ "chai",
618
+ "testing"
619
+ ],
620
+ "pytest": [
621
+ "test",
622
+ "python",
623
+ "testing"
624
+ ],
625
+ "cypress": [
626
+ "e2e",
627
+ "testing",
628
+ "browser"
629
+ ],
630
+ "playwright": [
631
+ "e2e",
632
+ "testing",
633
+ "browser"
634
+ ],
635
+ "e2e": [
636
+ "end-to-end",
637
+ "cypress",
638
+ "playwright"
639
+ ],
640
+ "unit": [
641
+ "test",
642
+ "testing",
643
+ "spec"
644
+ ],
645
+ "integration": [
646
+ "test",
647
+ "testing",
648
+ "e2e"
649
+ ],
650
+ "mock": [
651
+ "stub",
652
+ "spy",
653
+ "fake"
654
+ ],
655
+ "stub": [
656
+ "mock",
657
+ "spy",
658
+ "fake"
659
+ ],
660
+ "fixture": [
661
+ "test data",
662
+ "factory",
663
+ "seed"
664
+ ],
665
+ "snapshot": [
666
+ "test",
667
+ "jest",
668
+ "vitest"
669
+ ]
670
+ }