mcp-probe-kit 3.0.15 → 3.0.17
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 +618 -410
- package/build/index.js +13 -1
- package/build/lib/__tests__/memory-client.unit.test.d.ts +1 -0
- package/build/lib/__tests__/memory-client.unit.test.js +83 -0
- package/build/lib/__tests__/memory-config.unit.test.d.ts +1 -0
- package/build/lib/__tests__/memory-config.unit.test.js +33 -0
- package/build/lib/cursor-history-client.d.ts +54 -0
- package/build/lib/cursor-history-client.js +240 -0
- package/build/lib/gitnexus-bridge.js +6 -8
- package/build/lib/memory-client.d.ts +61 -0
- package/build/lib/memory-client.js +293 -0
- package/build/lib/memory-config.d.ts +14 -0
- package/build/lib/memory-config.js +31 -0
- package/build/lib/memory-orchestration.d.ts +26 -0
- package/build/lib/memory-orchestration.js +65 -0
- package/build/lib/project-detector.js +6 -4
- package/build/lib/skill-bridge.d.ts +31 -0
- package/build/lib/skill-bridge.js +100 -0
- package/build/lib/workspace-root.d.ts +12 -0
- package/build/lib/workspace-root.js +153 -0
- package/build/resources/ui-ux-data/charts.json +302 -0
- package/build/resources/ui-ux-data/colors.json +1058 -0
- package/build/resources/ui-ux-data/icons.json +1102 -0
- package/build/resources/ui-ux-data/landing.json +262 -0
- package/build/resources/ui-ux-data/metadata.json +6 -0
- package/build/resources/ui-ux-data/products.json +1058 -0
- package/build/resources/ui-ux-data/react-performance.json +574 -0
- package/build/resources/ui-ux-data/stacks/astro.json +266 -0
- package/build/resources/ui-ux-data/stacks/flutter.json +626 -0
- package/build/resources/ui-ux-data/stacks/html-tailwind.json +662 -0
- package/build/resources/ui-ux-data/stacks/jetpack-compose.json +626 -0
- package/build/resources/ui-ux-data/stacks/nextjs.json +218 -0
- package/build/resources/ui-ux-data/stacks/nuxt-ui.json +14 -0
- package/build/resources/ui-ux-data/stacks/nuxtjs.json +182 -0
- package/build/resources/ui-ux-data/stacks/react-native.json +350 -0
- package/build/resources/ui-ux-data/stacks/react.json +530 -0
- package/build/resources/ui-ux-data/stacks/shadcn.json +566 -0
- package/build/resources/ui-ux-data/stacks/svelte.json +134 -0
- package/build/resources/ui-ux-data/stacks/swiftui.json +26 -0
- package/build/resources/ui-ux-data/stacks/vue.json +170 -0
- package/build/resources/ui-ux-data/styles.json +1610 -0
- package/build/resources/ui-ux-data/typography.json +743 -0
- package/build/resources/ui-ux-data/ui-reasoning.json +1431 -0
- package/build/resources/ui-ux-data/ux-guidelines.json +1190 -0
- package/build/resources/ui-ux-data/web-interface.json +389 -0
- package/build/schemas/code-analysis-tools.d.ts +1 -1
- package/build/schemas/code-analysis-tools.js +1 -1
- package/build/schemas/index.d.ts +198 -4
- package/build/schemas/index.js +2 -0
- package/build/schemas/memory-tools.d.ts +191 -0
- package/build/schemas/memory-tools.js +106 -0
- package/build/schemas/orchestration-tools.d.ts +3 -3
- package/build/schemas/orchestration-tools.js +3 -3
- package/build/schemas/ui-ux-schemas.d.ts +8 -0
- package/build/schemas/ui-ux-schemas.js +5 -1
- package/build/tools/__tests__/cursor-history.unit.test.d.ts +1 -0
- package/build/tools/__tests__/cursor-history.unit.test.js +87 -0
- package/build/tools/__tests__/memorize_asset.unit.test.d.ts +1 -0
- package/build/tools/__tests__/memorize_asset.unit.test.js +68 -0
- package/build/tools/code_insight.d.ts +20 -0
- package/build/tools/code_insight.js +15 -0
- package/build/tools/cursor_list_conversations.d.ts +7 -0
- package/build/tools/cursor_list_conversations.js +35 -0
- package/build/tools/cursor_read_conversation.d.ts +7 -0
- package/build/tools/cursor_read_conversation.js +36 -0
- package/build/tools/cursor_search_conversations.d.ts +7 -0
- package/build/tools/cursor_search_conversations.js +36 -0
- package/build/tools/index.d.ts +6 -0
- package/build/tools/index.js +7 -0
- package/build/tools/init_project_context.d.ts +20 -1
- package/build/tools/init_project_context.js +114 -99
- package/build/tools/memorize_asset.d.ts +7 -0
- package/build/tools/memorize_asset.js +66 -0
- package/build/tools/read_memory_asset.d.ts +7 -0
- package/build/tools/read_memory_asset.js +26 -0
- package/build/tools/scan_and_extract_patterns.d.ts +27 -0
- package/build/tools/scan_and_extract_patterns.js +346 -0
- package/build/tools/start_bugfix.d.ts +20 -0
- package/build/tools/start_bugfix.js +97 -69
- package/build/tools/start_feature.d.ts +20 -0
- package/build/tools/start_feature.js +61 -31
- package/build/tools/start_onboard.d.ts +20 -0
- package/build/tools/start_onboard.js +15 -0
- package/build/tools/start_product.js +8 -1
- package/build/tools/start_ui.d.ts +20 -0
- package/build/tools/start_ui.js +79 -34
- package/build/tools/ui-ux-tools.js +21 -17
- package/build/utils/ui-data-loader.d.ts +18 -2
- package/build/utils/ui-data-loader.js +74 -12
- package/docs/data/tools.js +472 -373
- package/docs/i18n/all-tools/en.json +38 -5
- package/docs/i18n/all-tools/ja.json +14 -4
- package/docs/i18n/all-tools/ko.json +13 -3
- package/docs/i18n/all-tools/zh-CN.json +38 -5
- package/docs/i18n/en.json +48 -10
- package/docs/i18n/ja.json +47 -9
- package/docs/i18n/ko.json +47 -9
- package/docs/i18n/zh-CN.json +48 -10
- package/docs/pages/all-tools.html +515 -515
- package/docs/pages/examples.html +661 -661
- package/docs/pages/getting-started.html +673 -582
- package/docs/pages/migration.html +291 -291
- package/package.json +83 -81
- package/docs/debug-i18n.html +0 -163
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"No": "1",
|
|
4
|
+
"Category": "Accessibility",
|
|
5
|
+
"Issue": "Icon Button Labels",
|
|
6
|
+
"Keywords": "icon button aria-label",
|
|
7
|
+
"Platform": "Web",
|
|
8
|
+
"Description": "Icon-only buttons must have accessible names",
|
|
9
|
+
"Do": "Add aria-label to icon buttons",
|
|
10
|
+
"Don't": "Icon button without label",
|
|
11
|
+
"Code Example Good": "<button aria-label='Close'><XIcon /></button>",
|
|
12
|
+
"Code Example Bad": "<button><XIcon /></button>",
|
|
13
|
+
"Severity": "Critical"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"No": "2",
|
|
17
|
+
"Category": "Accessibility",
|
|
18
|
+
"Issue": "Form Control Labels",
|
|
19
|
+
"Keywords": "form input label aria",
|
|
20
|
+
"Platform": "Web",
|
|
21
|
+
"Description": "All form controls need labels or aria-label",
|
|
22
|
+
"Do": "Use label element or aria-label",
|
|
23
|
+
"Don't": "Input without accessible name",
|
|
24
|
+
"Code Example Good": "<label for='email'>Email</label><input id='email' />",
|
|
25
|
+
"Code Example Bad": "<input placeholder='Email' />",
|
|
26
|
+
"Severity": "Critical"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"No": "3",
|
|
30
|
+
"Category": "Accessibility",
|
|
31
|
+
"Issue": "Keyboard Handlers",
|
|
32
|
+
"Keywords": "keyboard onclick onkeydown",
|
|
33
|
+
"Platform": "Web",
|
|
34
|
+
"Description": "Interactive elements must support keyboard interaction",
|
|
35
|
+
"Do": "Add onKeyDown alongside onClick",
|
|
36
|
+
"Don't": "Click-only interaction",
|
|
37
|
+
"Code Example Good": "<div onClick={fn} onKeyDown={fn} tabIndex={0}>",
|
|
38
|
+
"Code Example Bad": "<div onClick={fn}>",
|
|
39
|
+
"Severity": "High"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"No": "4",
|
|
43
|
+
"Category": "Accessibility",
|
|
44
|
+
"Issue": "Semantic HTML",
|
|
45
|
+
"Keywords": "semantic button a label",
|
|
46
|
+
"Platform": "Web",
|
|
47
|
+
"Description": "Use semantic HTML before ARIA attributes",
|
|
48
|
+
"Do": "Use button/a/label elements",
|
|
49
|
+
"Don't": "Div with role attribute",
|
|
50
|
+
"Code Example Good": "<button onClick={fn}>Submit</button>",
|
|
51
|
+
"Code Example Bad": "<div role='button' onClick={fn}>Submit</div>",
|
|
52
|
+
"Severity": "High"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"No": "5",
|
|
56
|
+
"Category": "Accessibility",
|
|
57
|
+
"Issue": "Aria Live",
|
|
58
|
+
"Keywords": "aria-live polite async",
|
|
59
|
+
"Platform": "Web",
|
|
60
|
+
"Description": "Async updates need aria-live for screen readers",
|
|
61
|
+
"Do": "Add aria-live='polite' for dynamic content",
|
|
62
|
+
"Don't": "Silent async updates",
|
|
63
|
+
"Code Example Good": "<div aria-live='polite'>{status}</div>",
|
|
64
|
+
"Code Example Bad": "<div>{status}</div> // no announcement",
|
|
65
|
+
"Severity": "Medium"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"No": "6",
|
|
69
|
+
"Category": "Accessibility",
|
|
70
|
+
"Issue": "Decorative Icons",
|
|
71
|
+
"Keywords": "aria-hidden decorative icon",
|
|
72
|
+
"Platform": "Web",
|
|
73
|
+
"Description": "Decorative icons should be hidden from screen readers",
|
|
74
|
+
"Do": "Add aria-hidden='true' to decorative icons",
|
|
75
|
+
"Don't": "Decorative icon announced",
|
|
76
|
+
"Code Example Good": "<Icon aria-hidden='true' />",
|
|
77
|
+
"Code Example Bad": "<Icon /> // announced as 'image'",
|
|
78
|
+
"Severity": "Medium"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"No": "7",
|
|
82
|
+
"Category": "Focus",
|
|
83
|
+
"Issue": "Visible Focus States",
|
|
84
|
+
"Keywords": "focus-visible outline ring",
|
|
85
|
+
"Platform": "Web",
|
|
86
|
+
"Description": "All interactive elements need visible focus states",
|
|
87
|
+
"Do": "Use :focus-visible with ring/outline",
|
|
88
|
+
"Don't": "No focus indication",
|
|
89
|
+
"Code Example Good": "focus-visible:ring-2 focus-visible:ring-blue-500",
|
|
90
|
+
"Code Example Bad": "outline-none // no replacement",
|
|
91
|
+
"Severity": "Critical"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"No": "8",
|
|
95
|
+
"Category": "Focus",
|
|
96
|
+
"Issue": "Never Remove Outline",
|
|
97
|
+
"Keywords": "outline-none focus replacement",
|
|
98
|
+
"Platform": "Web",
|
|
99
|
+
"Description": "Never remove outline without providing replacement",
|
|
100
|
+
"Do": "Replace outline with visible alternative",
|
|
101
|
+
"Don't": "Remove outline completely",
|
|
102
|
+
"Code Example Good": "focus:outline-none focus:ring-2",
|
|
103
|
+
"Code Example Bad": "focus:outline-none // nothing else",
|
|
104
|
+
"Severity": "Critical"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"No": "9",
|
|
108
|
+
"Category": "Focus",
|
|
109
|
+
"Issue": "Checkbox Radio Hit Target",
|
|
110
|
+
"Keywords": "checkbox radio label target",
|
|
111
|
+
"Platform": "Web",
|
|
112
|
+
"Description": "Checkbox/radio must share hit target with label",
|
|
113
|
+
"Do": "Wrap input and label together",
|
|
114
|
+
"Don't": "Separate tiny checkbox",
|
|
115
|
+
"Code Example Good": "<label class='flex gap-2'><input type='checkbox' /><span>Option</span></label>",
|
|
116
|
+
"Code Example Bad": "<input type='checkbox' id='x' /><label for='x'>Option</label>",
|
|
117
|
+
"Severity": "Medium"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"No": "10",
|
|
121
|
+
"Category": "Forms",
|
|
122
|
+
"Issue": "Autocomplete Attribute",
|
|
123
|
+
"Keywords": "autocomplete input form",
|
|
124
|
+
"Platform": "Web",
|
|
125
|
+
"Description": "Inputs need autocomplete attribute for autofill",
|
|
126
|
+
"Do": "Add appropriate autocomplete value",
|
|
127
|
+
"Don't": "Missing autocomplete",
|
|
128
|
+
"Code Example Good": "<input autocomplete='email' type='email' />",
|
|
129
|
+
"Code Example Bad": "<input type='email' />",
|
|
130
|
+
"Severity": "High"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"No": "11",
|
|
134
|
+
"Category": "Forms",
|
|
135
|
+
"Issue": "Semantic Input Types",
|
|
136
|
+
"Keywords": "input type email tel url",
|
|
137
|
+
"Platform": "Web",
|
|
138
|
+
"Description": "Use semantic input type attributes",
|
|
139
|
+
"Do": "Use email/tel/url/number types",
|
|
140
|
+
"Don't": "text type for everything",
|
|
141
|
+
"Code Example Good": "<input type='email' />",
|
|
142
|
+
"Code Example Bad": "<input type='text' /> // for email",
|
|
143
|
+
"Severity": "Medium"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"No": "12",
|
|
147
|
+
"Category": "Forms",
|
|
148
|
+
"Issue": "Never Block Paste",
|
|
149
|
+
"Keywords": "paste onpaste password",
|
|
150
|
+
"Platform": "Web",
|
|
151
|
+
"Description": "Never prevent paste functionality",
|
|
152
|
+
"Do": "Allow paste on all inputs",
|
|
153
|
+
"Don't": "Block paste on password/code",
|
|
154
|
+
"Code Example Good": "<input type='password' />",
|
|
155
|
+
"Code Example Bad": "<input onPaste={e => e.preventDefault()} />",
|
|
156
|
+
"Severity": "High"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"No": "13",
|
|
160
|
+
"Category": "Forms",
|
|
161
|
+
"Issue": "Spellcheck Disable",
|
|
162
|
+
"Keywords": "spellcheck email code",
|
|
163
|
+
"Platform": "Web",
|
|
164
|
+
"Description": "Disable spellcheck on emails and codes",
|
|
165
|
+
"Do": "Set spellcheck='false' on codes",
|
|
166
|
+
"Don't": "Spellcheck on technical input",
|
|
167
|
+
"Code Example Good": "<input spellCheck='false' type='email' />",
|
|
168
|
+
"Code Example Bad": "<input type='email' /> // red squiggles",
|
|
169
|
+
"Severity": "Low"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"No": "14",
|
|
173
|
+
"Category": "Forms",
|
|
174
|
+
"Issue": "Submit Button Enabled",
|
|
175
|
+
"Keywords": "submit button disabled loading",
|
|
176
|
+
"Platform": "Web",
|
|
177
|
+
"Description": "Keep submit enabled and show spinner during requests",
|
|
178
|
+
"Do": "Show loading spinner keep enabled",
|
|
179
|
+
"Don't": "Disable button during submit",
|
|
180
|
+
"Code Example Good": "<button>{loading ? <Spinner /> : 'Submit'}</button>",
|
|
181
|
+
"Code Example Bad": "<button disabled={loading}>Submit</button>",
|
|
182
|
+
"Severity": "Medium"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"No": "15",
|
|
186
|
+
"Category": "Forms",
|
|
187
|
+
"Issue": "Inline Errors",
|
|
188
|
+
"Keywords": "error message inline focus",
|
|
189
|
+
"Platform": "Web",
|
|
190
|
+
"Description": "Show error messages inline near the problem field",
|
|
191
|
+
"Do": "Inline error with focus on first error",
|
|
192
|
+
"Don't": "Single error at top",
|
|
193
|
+
"Code Example Good": "<input /><span class='text-red-500'>{error}</span>",
|
|
194
|
+
"Code Example Bad": "<div class='error'>{allErrors}</div> // at top",
|
|
195
|
+
"Severity": "High"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"No": "16",
|
|
199
|
+
"Category": "Performance",
|
|
200
|
+
"Issue": "Virtualize Lists",
|
|
201
|
+
"Keywords": "virtualize list 50 items",
|
|
202
|
+
"Platform": "Web",
|
|
203
|
+
"Description": "Virtualize lists exceeding 50 items",
|
|
204
|
+
"Do": "Use virtual list for large datasets",
|
|
205
|
+
"Don't": "Render all items",
|
|
206
|
+
"Code Example Good": "<VirtualList items={items} />",
|
|
207
|
+
"Code Example Bad": "items.map(item => <Item />)",
|
|
208
|
+
"Severity": "High"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"No": "17",
|
|
212
|
+
"Category": "Performance",
|
|
213
|
+
"Issue": "Avoid Layout Reads",
|
|
214
|
+
"Keywords": "layout read render getboundingclientrect",
|
|
215
|
+
"Platform": "Web",
|
|
216
|
+
"Description": "Avoid layout reads during render phase",
|
|
217
|
+
"Do": "Read layout in effects or callbacks",
|
|
218
|
+
"Don't": "getBoundingClientRect in render",
|
|
219
|
+
"Code Example Good": "useEffect(() => { el.getBoundingClientRect() })",
|
|
220
|
+
"Code Example Bad": "const rect = el.getBoundingClientRect() // in render",
|
|
221
|
+
"Severity": "Medium"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"No": "18",
|
|
225
|
+
"Category": "Performance",
|
|
226
|
+
"Issue": "Batch DOM Operations",
|
|
227
|
+
"Keywords": "batch dom write read",
|
|
228
|
+
"Platform": "Web",
|
|
229
|
+
"Description": "Group DOM operations to minimize reflows",
|
|
230
|
+
"Do": "Batch writes then reads",
|
|
231
|
+
"Don't": "Interleave reads and writes",
|
|
232
|
+
"Code Example Good": "writes.forEach(w => w()); reads.forEach(r => r())",
|
|
233
|
+
"Code Example Bad": "write(); read(); write(); read(); // thrashing",
|
|
234
|
+
"Severity": "Medium"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"No": "19",
|
|
238
|
+
"Category": "Performance",
|
|
239
|
+
"Issue": "Preconnect CDN",
|
|
240
|
+
"Keywords": "preconnect link cdn",
|
|
241
|
+
"Platform": "Web",
|
|
242
|
+
"Description": "Add preconnect links for CDN domains",
|
|
243
|
+
"Do": "Preconnect to known domains",
|
|
244
|
+
"Don't": "<link rel='preconnect' href='https://cdn.example.com' />",
|
|
245
|
+
"Code Example Good": "// no preconnect hint",
|
|
246
|
+
"Code Example Bad": "Low"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"No": "20",
|
|
250
|
+
"Category": "Performance",
|
|
251
|
+
"Issue": "Lazy Load Images",
|
|
252
|
+
"Keywords": "lazy loading image below-fold",
|
|
253
|
+
"Platform": "Web",
|
|
254
|
+
"Description": "Lazy-load images below the fold",
|
|
255
|
+
"Do": "Use loading='lazy' for below-fold images",
|
|
256
|
+
"Don't": "Load all images eagerly",
|
|
257
|
+
"Code Example Good": "<img loading='lazy' src='...' />",
|
|
258
|
+
"Code Example Bad": "<img src='...' /> // above fold only",
|
|
259
|
+
"Severity": "Medium"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"No": "21",
|
|
263
|
+
"Category": "State",
|
|
264
|
+
"Issue": "URL Reflects State",
|
|
265
|
+
"Keywords": "url state query params",
|
|
266
|
+
"Platform": "Web",
|
|
267
|
+
"Description": "URL should reflect current UI state",
|
|
268
|
+
"Do": "Sync filters/tabs/pagination to URL",
|
|
269
|
+
"Don't": "State only in memory",
|
|
270
|
+
"Code Example Good": "?tab=settings&page=2",
|
|
271
|
+
"Code Example Bad": "useState only // lost on refresh",
|
|
272
|
+
"Severity": "High"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"No": "22",
|
|
276
|
+
"Category": "State",
|
|
277
|
+
"Issue": "Deep Linking",
|
|
278
|
+
"Keywords": "deep link stateful component",
|
|
279
|
+
"Platform": "Web",
|
|
280
|
+
"Description": "Stateful components should support deep-linking",
|
|
281
|
+
"Do": "Enable sharing current view via URL",
|
|
282
|
+
"Don't": "No shareable state",
|
|
283
|
+
"Code Example Good": "router.push({ query: { ...filters } })",
|
|
284
|
+
"Code Example Bad": "setFilters(f) // not in URL",
|
|
285
|
+
"Severity": "Medium"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"No": "23",
|
|
289
|
+
"Category": "State",
|
|
290
|
+
"Issue": "Confirm Destructive Actions",
|
|
291
|
+
"Keywords": "confirm destructive delete modal",
|
|
292
|
+
"Platform": "Web",
|
|
293
|
+
"Description": "Destructive actions require confirmation",
|
|
294
|
+
"Do": "Show confirmation dialog before delete",
|
|
295
|
+
"Don't": "Delete without confirmation",
|
|
296
|
+
"Code Example Good": "if (confirm('Delete?')) delete()",
|
|
297
|
+
"Code Example Bad": "onClick={delete} // no confirmation",
|
|
298
|
+
"Severity": "High"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"No": "24",
|
|
302
|
+
"Category": "Typography",
|
|
303
|
+
"Issue": "Proper Unicode",
|
|
304
|
+
"Keywords": "unicode ellipsis quotes",
|
|
305
|
+
"Platform": "Web",
|
|
306
|
+
"Description": "Use proper Unicode characters",
|
|
307
|
+
"Do": "Use ... curly quotes proper dashes",
|
|
308
|
+
"Don't": "ASCII approximations",
|
|
309
|
+
"Code Example Good": "'Hello...' with proper ellipsis",
|
|
310
|
+
"Code Example Bad": "'Hello...' with three dots",
|
|
311
|
+
"Severity": "Low"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"No": "25",
|
|
315
|
+
"Category": "Typography",
|
|
316
|
+
"Issue": "Text Overflow",
|
|
317
|
+
"Keywords": "truncate line-clamp overflow",
|
|
318
|
+
"Platform": "Web",
|
|
319
|
+
"Description": "Handle text overflow properly",
|
|
320
|
+
"Do": "Use truncate/line-clamp/break-words",
|
|
321
|
+
"Don't": "Text overflows container",
|
|
322
|
+
"Code Example Good": "<p class='truncate'>Long text...</p>",
|
|
323
|
+
"Code Example Bad": "<p>Long text...</p> // overflows",
|
|
324
|
+
"Severity": "Medium"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"No": "26",
|
|
328
|
+
"Category": "Typography",
|
|
329
|
+
"Issue": "Non-Breaking Spaces",
|
|
330
|
+
"Keywords": "nbsp unit brand",
|
|
331
|
+
"Platform": "Web",
|
|
332
|
+
"Description": "Use non-breaking spaces for units and brand names",
|
|
333
|
+
"Do": "Use between number and unit",
|
|
334
|
+
"Don't": "10 kg or Next.js 14",
|
|
335
|
+
"Code Example Good": "10 kg // may wrap",
|
|
336
|
+
"Code Example Bad": "Low"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"No": "27",
|
|
340
|
+
"Category": "Anti-Pattern",
|
|
341
|
+
"Issue": "No Zoom Disable",
|
|
342
|
+
"Keywords": "viewport zoom disable",
|
|
343
|
+
"Platform": "Web",
|
|
344
|
+
"Description": "Never disable zoom in viewport meta",
|
|
345
|
+
"Do": "Allow user zoom",
|
|
346
|
+
"Don't": "<meta name='viewport' content='width=device-width'>",
|
|
347
|
+
"Code Example Good": "<meta name='viewport' content='maximum-scale=1'>",
|
|
348
|
+
"Code Example Bad": "Critical"
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"No": "28",
|
|
352
|
+
"Category": "Anti-Pattern",
|
|
353
|
+
"Issue": "No Transition All",
|
|
354
|
+
"Keywords": "transition all specific",
|
|
355
|
+
"Platform": "Web",
|
|
356
|
+
"Description": "Avoid transition: all - specify properties",
|
|
357
|
+
"Do": "Transition specific properties",
|
|
358
|
+
"Don't": "transition: all",
|
|
359
|
+
"Code Example Good": "transition-colors duration-200",
|
|
360
|
+
"Code Example Bad": "transition-all duration-200",
|
|
361
|
+
"Severity": "Medium"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"No": "29",
|
|
365
|
+
"Category": "Anti-Pattern",
|
|
366
|
+
"Issue": "Outline Replacement",
|
|
367
|
+
"Keywords": "outline-none ring focus",
|
|
368
|
+
"Platform": "Web",
|
|
369
|
+
"Description": "Never use outline-none without replacement",
|
|
370
|
+
"Do": "Provide visible focus replacement",
|
|
371
|
+
"Don't": "Remove outline with nothing",
|
|
372
|
+
"Code Example Good": "focus:outline-none focus:ring-2 focus:ring-blue-500",
|
|
373
|
+
"Code Example Bad": "focus:outline-none // alone",
|
|
374
|
+
"Severity": "Critical"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"No": "30",
|
|
378
|
+
"Category": "Anti-Pattern",
|
|
379
|
+
"Issue": "No Hardcoded Dates",
|
|
380
|
+
"Keywords": "date format intl locale",
|
|
381
|
+
"Platform": "Web",
|
|
382
|
+
"Description": "Use Intl for date/number formatting",
|
|
383
|
+
"Do": "Use Intl.DateTimeFormat",
|
|
384
|
+
"Don't": "Hardcoded date format",
|
|
385
|
+
"Code Example Good": "new Intl.DateTimeFormat('en').format(date)",
|
|
386
|
+
"Code Example Bad": "date.toLocaleDateString() // or manual format",
|
|
387
|
+
"Severity": "Medium"
|
|
388
|
+
}
|
|
389
|
+
]
|
|
@@ -43,7 +43,7 @@ export declare const codeAnalysisToolSchemas: readonly [{
|
|
|
43
43
|
};
|
|
44
44
|
readonly project_root: {
|
|
45
45
|
readonly type: "string";
|
|
46
|
-
readonly description: "
|
|
46
|
+
readonly description: "项目根目录绝对路径。建议显式传入;当调用里还包含相对路径参数时,应统一相对该项目根目录解析,避免依赖客户端 cwd。";
|
|
47
47
|
};
|
|
48
48
|
readonly goal: {
|
|
49
49
|
readonly type: "string";
|
package/build/schemas/index.d.ts
CHANGED
|
@@ -105,7 +105,7 @@ export declare const allToolSchemas: ({
|
|
|
105
105
|
};
|
|
106
106
|
readonly project_root: {
|
|
107
107
|
readonly type: "string";
|
|
108
|
-
readonly description: "
|
|
108
|
+
readonly description: "项目根目录绝对路径。建议显式传入;当调用里还包含相对路径参数时,应统一相对该项目根目录解析,避免依赖客户端 cwd。";
|
|
109
109
|
};
|
|
110
110
|
readonly goal: {
|
|
111
111
|
readonly type: "string";
|
|
@@ -279,7 +279,7 @@ export declare const allToolSchemas: ({
|
|
|
279
279
|
};
|
|
280
280
|
readonly project_root: {
|
|
281
281
|
readonly type: "string";
|
|
282
|
-
readonly description: "
|
|
282
|
+
readonly description: "项目根目录绝对路径。建议显式传入;docs_dir 等相对路径参数应统一相对该项目根目录解析,避免依赖客户端 cwd。";
|
|
283
283
|
};
|
|
284
284
|
readonly template_profile: {
|
|
285
285
|
readonly type: "string";
|
|
@@ -325,7 +325,7 @@ export declare const allToolSchemas: ({
|
|
|
325
325
|
};
|
|
326
326
|
readonly project_root: {
|
|
327
327
|
readonly type: "string";
|
|
328
|
-
readonly description: "
|
|
328
|
+
readonly description: "项目根目录绝对路径。建议显式传入;docs_dir 等相对路径参数应统一相对该项目根目录解析,避免依赖客户端 cwd。";
|
|
329
329
|
};
|
|
330
330
|
readonly analysis_mode: {
|
|
331
331
|
readonly type: "string";
|
|
@@ -363,7 +363,7 @@ export declare const allToolSchemas: ({
|
|
|
363
363
|
readonly properties: {
|
|
364
364
|
readonly project_path: {
|
|
365
365
|
readonly type: "string";
|
|
366
|
-
readonly description: "
|
|
366
|
+
readonly description: "项目根目录绝对路径。建议显式传入;如果还传 docs_dir 等相对路径,应统一相对该项目根目录解析。";
|
|
367
367
|
};
|
|
368
368
|
readonly docs_dir: {
|
|
369
369
|
readonly type: "string";
|
|
@@ -600,6 +600,10 @@ export declare const allToolSchemas: ({
|
|
|
600
600
|
type: string;
|
|
601
601
|
description: string;
|
|
602
602
|
};
|
|
603
|
+
project_root: {
|
|
604
|
+
type: string;
|
|
605
|
+
description: string;
|
|
606
|
+
};
|
|
603
607
|
template_profile: {
|
|
604
608
|
type: string;
|
|
605
609
|
description: string;
|
|
@@ -662,4 +666,194 @@ export declare const allToolSchemas: ({
|
|
|
662
666
|
};
|
|
663
667
|
required: never[];
|
|
664
668
|
};
|
|
669
|
+
} | {
|
|
670
|
+
readonly name: "read_memory_asset";
|
|
671
|
+
readonly description: "当编排阶段已检索到记忆摘要,且 AI 需要查看完整沉淀代码或详细规范时使用。根据 asset_id 读取记忆资产详情。";
|
|
672
|
+
readonly inputSchema: {
|
|
673
|
+
readonly type: "object";
|
|
674
|
+
readonly properties: {
|
|
675
|
+
readonly asset_id: {
|
|
676
|
+
readonly type: "string";
|
|
677
|
+
readonly description: "记忆资产 ID";
|
|
678
|
+
};
|
|
679
|
+
};
|
|
680
|
+
readonly required: readonly ["asset_id"];
|
|
681
|
+
readonly additionalProperties: true;
|
|
682
|
+
};
|
|
683
|
+
} | {
|
|
684
|
+
readonly name: "memorize_asset";
|
|
685
|
+
readonly description: "当 AI 完成开发并确认存在可复用代码、模式或规范时使用。将高价值资产沉淀到记忆系统。";
|
|
686
|
+
readonly inputSchema: {
|
|
687
|
+
readonly type: "object";
|
|
688
|
+
readonly properties: {
|
|
689
|
+
readonly name: {
|
|
690
|
+
readonly type: "string";
|
|
691
|
+
readonly description: "资产名称";
|
|
692
|
+
};
|
|
693
|
+
readonly type: {
|
|
694
|
+
readonly type: "string";
|
|
695
|
+
readonly description: "资产类型,如 code/component/pattern/spec";
|
|
696
|
+
};
|
|
697
|
+
readonly description: {
|
|
698
|
+
readonly type: "string";
|
|
699
|
+
readonly description: "资产描述";
|
|
700
|
+
};
|
|
701
|
+
readonly summary: {
|
|
702
|
+
readonly type: "string";
|
|
703
|
+
readonly description: "用于检索的凝练摘要";
|
|
704
|
+
};
|
|
705
|
+
readonly content: {
|
|
706
|
+
readonly type: "string";
|
|
707
|
+
readonly description: "完整内容";
|
|
708
|
+
};
|
|
709
|
+
readonly code_snippet: {
|
|
710
|
+
readonly type: "string";
|
|
711
|
+
readonly description: "代码片段,content 的别名";
|
|
712
|
+
};
|
|
713
|
+
readonly file_path: {
|
|
714
|
+
readonly type: "string";
|
|
715
|
+
readonly description: "来源文件路径";
|
|
716
|
+
};
|
|
717
|
+
readonly source_project: {
|
|
718
|
+
readonly type: "string";
|
|
719
|
+
readonly description: "来源项目";
|
|
720
|
+
};
|
|
721
|
+
readonly source_path: {
|
|
722
|
+
readonly type: "string";
|
|
723
|
+
readonly description: "来源路径";
|
|
724
|
+
};
|
|
725
|
+
readonly usage: {
|
|
726
|
+
readonly type: "string";
|
|
727
|
+
readonly description: "适用场景/使用方式";
|
|
728
|
+
};
|
|
729
|
+
readonly confidence: {
|
|
730
|
+
readonly type: "number";
|
|
731
|
+
readonly description: "置信度,0-1";
|
|
732
|
+
};
|
|
733
|
+
readonly tags: {
|
|
734
|
+
readonly type: "array";
|
|
735
|
+
readonly items: {
|
|
736
|
+
readonly type: "string";
|
|
737
|
+
};
|
|
738
|
+
readonly description: "标签列表";
|
|
739
|
+
};
|
|
740
|
+
};
|
|
741
|
+
readonly required: readonly ["name", "description", "summary"];
|
|
742
|
+
readonly additionalProperties: true;
|
|
743
|
+
};
|
|
744
|
+
} | {
|
|
745
|
+
readonly name: "scan_and_extract_patterns";
|
|
746
|
+
readonly description: "当需要从单段代码、单文件或整个目录中抽取可复用模式,再决定是否沉淀到记忆系统时使用。目录扫描时,优先传 `project_root` 为项目根目录绝对路径,并让 `directory_path` 传相对项目根的路径,例如 `app/utils`;只有无法确定项目根时,才把 `directory_path` 直接设为绝对路径。不要传带项目名的半相对路径,例如 `font-miniapp-api/app/utils`。";
|
|
747
|
+
readonly inputSchema: {
|
|
748
|
+
readonly type: "object";
|
|
749
|
+
readonly properties: {
|
|
750
|
+
readonly content: {
|
|
751
|
+
readonly type: "string";
|
|
752
|
+
readonly description: "待分析的代码或文本内容。传入该字段时走单段分析模式";
|
|
753
|
+
};
|
|
754
|
+
readonly file_path: {
|
|
755
|
+
readonly type: "string";
|
|
756
|
+
readonly description: "来源文件路径。单段分析时作为来源路径使用";
|
|
757
|
+
};
|
|
758
|
+
readonly project_name: {
|
|
759
|
+
readonly type: "string";
|
|
760
|
+
readonly description: "来源项目名";
|
|
761
|
+
};
|
|
762
|
+
readonly directory_path: {
|
|
763
|
+
readonly type: "string";
|
|
764
|
+
readonly description: "要扫描的目录路径。最佳实践是传相对 `project_root` 的路径,例如 `app/utils`;如果拿不到 `project_root`,才传目录绝对路径。不要传带项目名的半相对路径,例如 `font-miniapp-api/app/utils`。";
|
|
765
|
+
};
|
|
766
|
+
readonly project_root: {
|
|
767
|
+
readonly type: "string";
|
|
768
|
+
readonly description: "项目根目录绝对路径。目录扫描时建议始终传入;传入后,`directory_path` 应写成相对项目根的路径。";
|
|
769
|
+
};
|
|
770
|
+
readonly max_files: {
|
|
771
|
+
readonly type: "number";
|
|
772
|
+
readonly description: "最多扫描多少个文件,默认 30,最大 200";
|
|
773
|
+
};
|
|
774
|
+
readonly max_patterns: {
|
|
775
|
+
readonly type: "number";
|
|
776
|
+
readonly description: "最多返回多少个候选模式,默认 20,最大 100";
|
|
777
|
+
};
|
|
778
|
+
readonly include_extensions: {
|
|
779
|
+
readonly type: "array";
|
|
780
|
+
readonly items: {
|
|
781
|
+
readonly type: "string";
|
|
782
|
+
};
|
|
783
|
+
readonly description: "允许扫描的文件扩展名列表,例如 [\".ts\", \".tsx\", \".py\"]";
|
|
784
|
+
};
|
|
785
|
+
};
|
|
786
|
+
readonly required: readonly [];
|
|
787
|
+
readonly additionalProperties: true;
|
|
788
|
+
};
|
|
789
|
+
} | {
|
|
790
|
+
readonly name: "cursor_list_conversations";
|
|
791
|
+
readonly description: "读取 Cursor 本地历史会话摘要。适合按标题、工作区列出最近会话,用于续接旧上下文。";
|
|
792
|
+
readonly inputSchema: {
|
|
793
|
+
readonly type: "object";
|
|
794
|
+
readonly properties: {
|
|
795
|
+
readonly title_query: {
|
|
796
|
+
readonly type: "string";
|
|
797
|
+
readonly description: "按会话标题过滤,支持部分匹配";
|
|
798
|
+
};
|
|
799
|
+
readonly workspace_query: {
|
|
800
|
+
readonly type: "string";
|
|
801
|
+
readonly description: "按工作区路径过滤,支持部分匹配";
|
|
802
|
+
};
|
|
803
|
+
readonly include_archived: {
|
|
804
|
+
readonly type: "boolean";
|
|
805
|
+
readonly description: "是否包含已归档会话,默认 false";
|
|
806
|
+
};
|
|
807
|
+
readonly limit: {
|
|
808
|
+
readonly type: "number";
|
|
809
|
+
readonly description: "最多返回多少条,默认 20,最大 200";
|
|
810
|
+
};
|
|
811
|
+
};
|
|
812
|
+
readonly required: readonly [];
|
|
813
|
+
readonly additionalProperties: true;
|
|
814
|
+
};
|
|
815
|
+
} | {
|
|
816
|
+
readonly name: "cursor_search_conversations";
|
|
817
|
+
readonly description: "在 Cursor 本地历史消息里按关键词、request id 搜索命中内容,可选限定某个会话。";
|
|
818
|
+
readonly inputSchema: {
|
|
819
|
+
readonly type: "object";
|
|
820
|
+
readonly properties: {
|
|
821
|
+
readonly query: {
|
|
822
|
+
readonly type: "string";
|
|
823
|
+
readonly description: "搜索关键词,可传标题片段、正文片段或 request id";
|
|
824
|
+
};
|
|
825
|
+
readonly composer_id: {
|
|
826
|
+
readonly type: "string";
|
|
827
|
+
readonly description: "可选,限定某个 Cursor 会话 ID";
|
|
828
|
+
};
|
|
829
|
+
readonly limit: {
|
|
830
|
+
readonly type: "number";
|
|
831
|
+
readonly description: "最多返回多少条,默认 20,最大 200";
|
|
832
|
+
};
|
|
833
|
+
};
|
|
834
|
+
readonly required: readonly ["query"];
|
|
835
|
+
readonly additionalProperties: true;
|
|
836
|
+
};
|
|
837
|
+
} | {
|
|
838
|
+
readonly name: "cursor_read_conversation";
|
|
839
|
+
readonly description: "按 composer_id 读取一条 Cursor 本地会话的消息时间线。";
|
|
840
|
+
readonly inputSchema: {
|
|
841
|
+
readonly type: "object";
|
|
842
|
+
readonly properties: {
|
|
843
|
+
readonly composer_id: {
|
|
844
|
+
readonly type: "string";
|
|
845
|
+
readonly description: "Cursor 会话 ID";
|
|
846
|
+
};
|
|
847
|
+
readonly limit: {
|
|
848
|
+
readonly type: "number";
|
|
849
|
+
readonly description: "最多返回多少条消息,默认 200,最大 2000";
|
|
850
|
+
};
|
|
851
|
+
readonly include_empty: {
|
|
852
|
+
readonly type: "boolean";
|
|
853
|
+
readonly description: "是否包含空文本消息,默认 false";
|
|
854
|
+
};
|
|
855
|
+
};
|
|
856
|
+
readonly required: readonly ["composer_id"];
|
|
857
|
+
readonly additionalProperties: true;
|
|
858
|
+
};
|
|
665
859
|
})[];
|
package/build/schemas/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { orchestrationToolSchemas } from "./orchestration-tools.js";
|
|
|
11
11
|
import { interviewToolSchemas } from "./interview-tools.js";
|
|
12
12
|
import { uiUxSchemas } from "./ui-ux-schemas.js";
|
|
13
13
|
import { productDesignSchemas } from "./product-design-schemas.js";
|
|
14
|
+
import { memoryToolSchemas } from "./memory-tools.js";
|
|
14
15
|
// 合并所有工具 schemas
|
|
15
16
|
export const allToolSchemas = [
|
|
16
17
|
...basicToolSchemas,
|
|
@@ -23,4 +24,5 @@ export const allToolSchemas = [
|
|
|
23
24
|
...interviewToolSchemas,
|
|
24
25
|
...uiUxSchemas,
|
|
25
26
|
...productDesignSchemas,
|
|
27
|
+
...memoryToolSchemas,
|
|
26
28
|
];
|