vite-plugin-aipanel 1.2.27 → 1.3.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/es/client/vue-devtools-bridge.d.ts +5 -2
- package/es/client/vue-devtools-bridge.mjs +25 -91
- package/es/client/vue-devtools-sanitize.d.ts +23 -0
- package/es/client/vue-devtools-sanitize.mjs +101 -0
- package/es/client/vue-devtools-timeline.d.ts +173 -0
- package/es/client/vue-devtools-timeline.mjs +617 -0
- package/es/core/mcp-tools.d.ts +7 -0
- package/es/core/mcp-tools.mjs +170 -26
- package/es/endpoints/vue-devtools.mjs +15 -1
- package/lib/client/vue-devtools-bridge.cjs +28 -96
- package/lib/client/vue-devtools-bridge.d.ts +5 -2
- package/lib/client/vue-devtools-sanitize.cjs +128 -0
- package/lib/client/vue-devtools-sanitize.d.ts +23 -0
- package/lib/client/vue-devtools-timeline.cjs +636 -0
- package/lib/client/vue-devtools-timeline.d.ts +173 -0
- package/lib/client.js +1263 -1248
- package/lib/core/mcp-tools.cjs +164 -25
- package/lib/core/mcp-tools.d.ts +7 -0
- package/lib/endpoints/vue-devtools.cjs +15 -1
- package/package.json +5 -5
package/lib/core/mcp-tools.cjs
CHANGED
|
@@ -128,17 +128,25 @@ const VUE_DEVTOOLS_TOOLS = [
|
|
|
128
128
|
{
|
|
129
129
|
name: `${VUE_DEVTOOLS_PREFIX}get_apps`,
|
|
130
130
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_APPS,
|
|
131
|
-
description: `\
|
|
131
|
+
description: `\u5217\u51FA\u9875\u9762\u91CC\u7684 Vue \u5E94\u7528\u5B9E\u4F8B\uFF08\u5FAE\u524D\u7AEF / \u591A\u5B9E\u4F8B\u573A\u666F\u7528\uFF09\u3002
|
|
132
132
|
|
|
133
133
|
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
134
|
-
- \
|
|
135
|
-
- \
|
|
134
|
+
- \u9875\u9762\u4E0A\u4E0D\u6B62\u4E00\u4E2A Vue \u5E94\u7528\uFF0C\u5148\u786E\u8BA4\u8981\u67E5\u54EA\u4E2A
|
|
135
|
+
- \u8C03 set_active_app \u524D\u53D6\u53EF\u7528 appId
|
|
136
|
+
|
|
137
|
+
**\u8FD4\u56DE**\uFF1A[{ id, name }]\uFF0Cid \u4F9B set_active_app \u4F7F\u7528\u3002`,
|
|
136
138
|
inputSchema: withPageIdSchema({ type: "object", properties: {} })
|
|
137
139
|
},
|
|
138
140
|
{
|
|
139
141
|
name: `${VUE_DEVTOOLS_PREFIX}set_active_app`,
|
|
140
142
|
action: import_core.VUE_DEVTOOLS_ACTIONS.TOGGLE_APP,
|
|
141
|
-
description: `\u5207\u6362\
|
|
143
|
+
description: `\u5207\u6362\u540E\u7EED vue-devtools_* \u7EC4\u4EF6/\u8DEF\u7531\u5DE5\u5177\u64CD\u4F5C\u7684\u6D3B\u8DC3 Vue \u5E94\u7528\u3002
|
|
144
|
+
|
|
145
|
+
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
146
|
+
- get_apps \u663E\u793A\u591A\u4E2A\u5E94\u7528\uFF0C\u800C\u7EC4\u4EF6\u6811/\u72B6\u6001\u67E5\u7684\u662F\u53E6\u4E00\u4E2A
|
|
147
|
+
- \u5FAE\u524D\u7AEF\u5B50\u5E94\u7528\u91CC\u7EC4\u4EF6\u600E\u4E48\u90FD\u67E5\u4E0D\u5230\uFF08\u5F88\u53EF\u80FD\u6D3B\u8DC3\u5E94\u7528\u4E0D\u662F\u5B83\uFF09
|
|
148
|
+
|
|
149
|
+
**\u6CE8\u610F**\uFF1A\u53EA\u6539\u540E\u7EED\u67E5\u8BE2\u7684\u76EE\u6807\u5E94\u7528\uFF0C\u4E0D\u6539\u9875\u9762\u672C\u8EAB\u3002`,
|
|
142
150
|
inputSchema: withPageIdSchema({
|
|
143
151
|
type: "object",
|
|
144
152
|
properties: {
|
|
@@ -150,32 +158,46 @@ const VUE_DEVTOOLS_TOOLS = [
|
|
|
150
158
|
{
|
|
151
159
|
name: `${VUE_DEVTOOLS_PREFIX}get_component_tree`,
|
|
152
160
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_COMPONENT_TREE,
|
|
153
|
-
description: `\u83B7\u53D6\
|
|
161
|
+
description: `\u83B7\u53D6\u6D3B\u8DC3 Vue \u5E94\u7528\u7684\u7EC4\u4EF6\u6811\uFF08\u6BCF\u4E2A\u8282\u70B9\u5E26 nodeId \u4E0E\u6E90\u7801\u8DEF\u5F84\uFF09\u3002
|
|
154
162
|
|
|
155
163
|
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
156
|
-
- \
|
|
157
|
-
- \
|
|
158
|
-
- \
|
|
159
|
-
- \u53EA\u5173\u5FC3\u67D0\u7C7B\u7EC4\u4EF6\u65F6\u7528 filter \u7F29\u5C0F\u8303\u56F4
|
|
164
|
+
- \u53D6\u7EC4\u4EF6\u7684 nodeId\uFF1Aget_component_state / get_component_render_code \u90FD\u8981\u5B83
|
|
165
|
+
- \u4E86\u89E3\u7EC4\u4EF6\u5C42\u7EA7\uFF1B\u786E\u8BA4\u67D0\u4E2A\u7EC4\u4EF6\u662F\u5426\u6E32\u67D3\u3001\u88AB\u8C01\u6E32\u67D3
|
|
166
|
+
- \u7531 file \u53CD\u67E5\u67D0\u4E2A .vue \u6587\u4EF6\u5BF9\u5E94\u54EA\u4E2A\u7EC4\u4EF6
|
|
160
167
|
|
|
161
|
-
**\u8FD4\u56DE**\uFF1A\u7EC4\u4EF6\
|
|
168
|
+
**\u8FD4\u56DE**\uFF1A\u7EC4\u4EF6\u8282\u70B9\u6570\u7EC4 [{ id, name, uid, file, children, ... }]
|
|
169
|
+
- id \u5C31\u662F nodeId\uFF08\u5F62\u5982 app-1:57\uFF1B\u6839\u8282\u70B9\u4E3A app-1:root\uFF09
|
|
170
|
+
- file \u662F\u6E90\u7801\u8DEF\u5F84\uFF1B\u7A7A\u5B57\u7B26\u4E32\u8868\u793A\u53D6\u4E0D\u5230\uFF08\u6846\u67B6\u5185\u7F6E\u6216\u533F\u540D\u7EC4\u4EF6\uFF09
|
|
171
|
+
|
|
172
|
+
**filter \u7684\u771F\u5B9E\u8BED\u4E49\uFF08\u5BB9\u6613\u8E29\uFF09**\uFF1A
|
|
173
|
+
- **\u5927\u5C0F\u5199\u654F\u611F**\uFF1A\u5185\u90E8\u7528\u5C0F\u5199\u5316\u7684\u7EC4\u4EF6\u540D\uFF08classify / kebabize \u4E24\u79CD\u5F62\u6001\uFF09\u5339\u914D\uFF0C**\u4F20\u5168\u5C0F\u5199\u6700\u7A33**
|
|
174
|
+
\uFF08filter:"App" \u8FD4\u56DE\u7A7A\uFF0Cfilter:"app" \u624D\u6709\u7ED3\u679C\uFF09
|
|
175
|
+
- \u547D\u4E2D\u7EC4\u4EF6\u4F1A\u8FDE\u5E26\u8FD4\u56DE\u5B83\u6574\u4E2A\u5B50\u6811\uFF08\u540E\u4EE3\u4E0D\u8981\u6C42\u5339\u914D\uFF09
|
|
176
|
+
- \u5339\u914D\u7684\u662F\u7EC4\u4EF6\u540D\uFF0C\u4E0D\u662F file \u8DEF\u5F84
|
|
177
|
+
|
|
178
|
+
**\u6CE8\u610F**\uFF1A\u6811\u53EF\u80FD\u5F88\u5927\uFF08UI \u5E93\u5185\u7F6E\u7EC4\u4EF6\u5360\u6BD4\u5F88\u9AD8\uFF09\uFF0C\u62FF\u4E0D\u51C6\u5C31\u5148 filter\u3002`,
|
|
162
179
|
inputSchema: withPageIdSchema({
|
|
163
180
|
type: "object",
|
|
164
181
|
properties: {
|
|
165
|
-
filter: { type: "string", description: "\u6309\u7EC4\u4EF6\u540D\u8FC7\u6EE4\uFF08\u5927\u5C0F\u5199\
|
|
182
|
+
filter: { type: "string", description: "\u6309\u7EC4\u4EF6\u540D\u8FC7\u6EE4\uFF08\u89C1\u63CF\u8FF0\uFF1A\u5927\u5C0F\u5199\u654F\u611F\uFF0C\u4F20\u5168\u5C0F\u5199\u6700\u7A33\uFF09" }
|
|
166
183
|
}
|
|
167
184
|
})
|
|
168
185
|
},
|
|
169
186
|
{
|
|
170
187
|
name: `${VUE_DEVTOOLS_PREFIX}get_component_state`,
|
|
171
188
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_COMPONENT_STATE,
|
|
172
|
-
description: `\u83B7\u53D6\u6307\u5B9A\u7EC4\u4EF6\u7684\
|
|
189
|
+
description: `\u83B7\u53D6\u6307\u5B9A\u7EC4\u4EF6\u7684\u8FD0\u884C\u65F6\u72B6\u6001\u3002
|
|
173
190
|
|
|
174
191
|
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
175
|
-
- \
|
|
176
|
-
- \u67E5\u770B
|
|
177
|
-
|
|
178
|
-
|
|
192
|
+
- \u6838\u5BF9 props \u4F20\u503C\u3001ref/reactive \u5F53\u524D\u503C\u3001computed \u7ED3\u679C
|
|
193
|
+
- \u6392\u67E5"\u503C\u6CA1\u66F4\u65B0"\uFF1A\u5148\u770B\u72B6\u6001\uFF0C\u518D\u7528 get_timeline \u770B\u662F\u54EA\u6B21\u6E32\u67D3/\u66F4\u65B0\u5F15\u8D77\u7684
|
|
194
|
+
|
|
195
|
+
**\u8FD4\u56DE**\uFF1A{ state: { <\u5206\u7C7B>: { <\u5B57\u6BB5>: { value, type? } } } }
|
|
196
|
+
- \u5206\u7C7B\u968F\u7EC4\u4EF6\u800C\u5B9A\uFF0C\u5E38\u89C1\uFF1Aprops / setup / setup (other) / computed / data / attrs\uFF08Vuex \u9879\u76EE\u8FD8\u6709 vuex bindings\uFF09
|
|
197
|
+
- \u503C\u53EF\u80FD\u88AB\u88C1\u526A\u6210**\u5360\u4F4D\u8BB0\u53F7**\uFF0C\u522B\u5F53\u6210\u771F\u5B9E\u503C\uFF1A__undefined__\uFF08\u8BE5\u503C\u662F undefined\uFF0C\u5373\u672A\u4F20/\u672A\u8BBE\u7F6E\uFF09\u3001[Function]\uFF08\u51FD\u6570\uFF09\u3001<max depth>\uFF08\u8D85\u51FA\u88C1\u526A\u6DF1\u5EA6\uFF09\u3001<\u524D\u7F00... (N chars)>\uFF08\u957F\u5B57\u7B26\u4E32\u622A\u65AD\uFF09\uFF1BVue \u5185\u90E8\u5BF9\u8C61\uFF08dep/subs/effect \u7B49\uFF09\u76F4\u63A5\u4E22\u5F03
|
|
198
|
+
|
|
199
|
+
**\u6CE8\u610F\uFF08\u522B\u628A"\u770B\u4E0D\u5230"\u5F53\u6210"\u4E0D\u5B58\u5728"\uFF09**\uFF1Aprovided / injected / event listeners / template refs
|
|
200
|
+
**\u88AB\u523B\u610F\u88C1\u6389\u4EE5\u7701 token**\uFF0C\u6C38\u8FDC\u67E5\u4E0D\u5230\uFF1B\u8981\u786E\u8BA4\u8FD9\u4E9B\u8BF7\u7528 chrome-devtools_evaluate_script\u3002`,
|
|
179
201
|
inputSchema: withPageIdSchema({
|
|
180
202
|
type: "object",
|
|
181
203
|
properties: {
|
|
@@ -190,7 +212,13 @@ const VUE_DEVTOOLS_TOOLS = [
|
|
|
190
212
|
{
|
|
191
213
|
name: `${VUE_DEVTOOLS_PREFIX}get_component_render_code`,
|
|
192
214
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_COMPONENT_RENDER_CODE,
|
|
193
|
-
description: `\u83B7\u53D6\u7EC4\u4EF6\
|
|
215
|
+
description: `\u83B7\u53D6\u7EC4\u4EF6\u6E32\u67D3\u51FD\u6570\u7684\u6E90\u7801\uFF08\u7F16\u8BD1\u4EA7\u7269\uFF0C\u7528\u6765\u770B\u6A21\u677F\u6700\u7EC8\u751F\u6210\u4E86\u4EC0\u4E48\uFF09\u3002
|
|
216
|
+
|
|
217
|
+
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
218
|
+
- \u6A21\u677F\u884C\u4E3A\u53CD\u76F4\u89C9\uFF0C\u9700\u8981\u770B\u7F16\u8BD1\u7ED3\u679C
|
|
219
|
+
- \u914D\u5408 get_component_tree \u7684 file \u4E00\u8D77\u5B9A\u4F4D\u6E90\u7801
|
|
220
|
+
|
|
221
|
+
**\u53C2\u6570**\uFF1AnodeId \u6765\u81EA get_component_tree\uFF08write-\u7C7B\u5DE5\u5177\u6539\u5B8C\u4EE3\u7801\u540E\uFF0CnodeId \u53EF\u80FD\u56E0 HMR \u5931\u6548\uFF0C\u9700\u91CD\u65B0\u53D6\uFF09\u3002`,
|
|
194
222
|
inputSchema: withPageIdSchema({
|
|
195
223
|
type: "object",
|
|
196
224
|
properties: { nodeId: { type: "string", description: "\u7EC4\u4EF6\u8282\u70B9 ID" } },
|
|
@@ -200,23 +228,134 @@ const VUE_DEVTOOLS_TOOLS = [
|
|
|
200
228
|
{
|
|
201
229
|
name: `${VUE_DEVTOOLS_PREFIX}get_current_route`,
|
|
202
230
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_ROUTER_INFO,
|
|
203
|
-
description: `\u83B7\u53D6
|
|
231
|
+
description: `\u83B7\u53D6\u5F53\u524D\u8DEF\u7531\uFF08\u542B path/params/query/hash/matched\uFF09\u3002
|
|
204
232
|
|
|
205
233
|
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
206
|
-
- \u6392\u67E5\u8DEF\u7531\u8DF3\u8F6C\
|
|
207
|
-
- \
|
|
208
|
-
|
|
234
|
+
- \u6392\u67E5\u8DEF\u7531\u8DF3\u8F6C\u662F\u5426\u53D1\u751F\u3001\u8DF3\u5230\u4E86\u54EA\u3001\u53C2\u6570\u5BF9\u4E0D\u5BF9
|
|
235
|
+
- \u770B\u5F53\u524D\u8DEF\u7531\u547D\u4E2D\u4E86\u54EA\u4E9B\u8DEF\u7531\u8BB0\u5F55\uFF08matched\uFF0C\u542B\u5404\u81EA meta\uFF09
|
|
236
|
+
|
|
237
|
+
**\u8FD4\u56DE**\uFF1A\u5F53\u524D\u8DEF\u7531\u5BF9\u8C61\uFF1B\u4E0E get_routes \u7684\u533A\u522B\u662F\u8FD9\u91CC\u53EA\u7ED9\u5F53\u524D\u8FD9\u4E00\u6761\u3002`,
|
|
209
238
|
inputSchema: withPageIdSchema({ type: "object", properties: {} })
|
|
210
239
|
},
|
|
211
240
|
{
|
|
212
241
|
name: `${VUE_DEVTOOLS_PREFIX}get_routes`,
|
|
213
242
|
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_ROUTER_INFO,
|
|
214
|
-
description: `\u83B7\u53D6
|
|
243
|
+
description: `\u83B7\u53D6\u5B8C\u6574\u8DEF\u7531\u8868\uFF08vue-router \u7684 getRoutes() \u8F93\u51FA\uFF0C\u5DF2\u5C55\u5F00\u4E3A**\u6241\u5E73**\u8BB0\u5F55\u5217\u8868\uFF09\u3002
|
|
215
244
|
|
|
216
245
|
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
217
|
-
- \
|
|
218
|
-
- \
|
|
219
|
-
|
|
246
|
+
- \u786E\u8BA4\u8DEF\u7531\u662F\u5426\u6CE8\u518C\u3001path / name / meta \u662F\u5426\u6B63\u786E
|
|
247
|
+
- \u9700\u8981\u8DEF\u7531\u6E05\u5355\u6765\u5224\u65AD\u67D0\u4E2A path \u662F\u5426\u53EF\u8FBE
|
|
248
|
+
|
|
249
|
+
**\u8FD4\u56DE**\uFF1A\u8DEF\u7531\u8BB0\u5F55\u6570\u7EC4 [{ path, name, meta, children, redirect, aliasOf, props, components, ... }]
|
|
250
|
+
- \u5D4C\u5957\u8DEF\u7531\u5DF2\u5C55\u5F00\uFF1Achildren \u901A\u5E38\u4E3A\u7A7A\uFF0C\u6BCF\u5C42\u5404\u5360\u4E00\u6761\u8BB0\u5F55
|
|
251
|
+
- \u5143\u6570\u636E\u5728 meta\uFF08title / lang / prefix \u7B49\uFF09\uFF1B\u503C\u540C\u6837\u4F1A\u51FA\u73B0 __undefined__ \u7B49\u5360\u4F4D\u8BB0\u53F7`,
|
|
252
|
+
inputSchema: withPageIdSchema({ type: "object", properties: {} })
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: `${VUE_DEVTOOLS_PREFIX}get_timeline`,
|
|
256
|
+
action: import_core.VUE_DEVTOOLS_ACTIONS.GET_TIMELINE,
|
|
257
|
+
description: `\u83B7\u53D6\u9875\u9762\u6700\u8FD1\u4E00\u6BB5\u7684 Vue \u8FD0\u884C\u65F6\u4E8B\u4EF6\u65F6\u95F4\u7EBF\uFF1A\u7EC4\u4EF6\u6E32\u67D3\u8017\u65F6\u3001\u7EC4\u4EF6\u4E8B\u4EF6\u3001\u8DEF\u7531\u8DF3\u8F6C\u3001agent \u6807\u8BB0\u3002
|
|
258
|
+
|
|
259
|
+
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
260
|
+
- \u9875\u9762\u5361\u987F/\u767D\u5C4F/\u5185\u5BB9\u4E0D\u66F4\u65B0\uFF0C\u5B9A\u4F4D\u662F\u54EA\u4E2A\u7EC4\u4EF6\u7684\u54EA\u6B21\u6E32\u67D3\u5F15\u8D77
|
|
261
|
+
- \u521A\u505A\u5B8C\u4E00\u6B21\u4EA4\u4E92\uFF0C\u60F3\u770B\u5B83\u5F15\u53D1\u4E86\u54EA\u4E9B\u7EC4\u4EF6\u91CD\u6E32\u67D3\u3001\u5404\u8017\u65F6\u591A\u5C11
|
|
262
|
+
- \u6392\u67E5\u8FC7\u5EA6\u6E32\u67D3\uFF1A\u67D0\u7EC4\u4EF6\u5728\u7A97\u53E3\u5185\u6E32\u67D3/\u66F4\u65B0\u4E86\u51E0\u6B21\u3001\u603B\u8017\u65F6\u591A\u5C11
|
|
263
|
+
|
|
264
|
+
**\u4E24\u6761\u6700\u5E38\u7528\u7684\u8DEF\u5F84**\uFF1A
|
|
265
|
+
- \u73B0\u8C61\u5DF2\u7ECF\u53D1\u751F\uFF08\u7528\u6237\u8BF4"\u521A\u624D\u5F88\u5361"\uFF09\u2192 \u76F4\u63A5 get_timeline
|
|
266
|
+
- \u8981\u7CBE\u786E\u5F52\u56E0\u81EA\u5DF1\u7684\u52A8\u4F5C \u2192 mark_timeline \u2192 \u89E6\u53D1\u52A8\u4F5C \u2192 get_timeline({ sinceMark })
|
|
267
|
+
- \u5168\u7A0B\u5E38\u9A7B\u91C7\u96C6\uFF0C\u4E0D\u9700\u8981 start\uFF1B\u6574\u9875\u5237\u65B0\u4F1A\u6E05\u7A7A\u7F13\u51B2\uFF0CSPA \u8DEF\u7531\u5207\u6362\u4FDD\u7559
|
|
268
|
+
|
|
269
|
+
**\u8FD4\u56DE**\uFF1A
|
|
270
|
+
- summary\uFF1Aperf\uFF08\u6309\u7EC4\u4EF6\u7684\u6B21\u6570/\u603B\u8017\u65F6/\u6700\u6162\u51E0\u6B21\uFF09\u3001lifecycle\uFF08\u7D2F\u8BA1\u589E\u5220\u6539\uFF09\u3001emit\u3001navigate\u3001agent
|
|
271
|
+
- records\uFF1A\u660E\u7EC6\uFF08t \u4E3A\u76F8\u5BF9\u73B0\u5728\u7684\u6BEB\u79D2\u3001\u8D1F\u6570=\u8FC7\u53BB\uFF1Bdur\uFF1BnodeId\uFF1Bfile\uFF09
|
|
272
|
+
- buffer\uFF1A\u5BB9\u91CF\u3001\u4E22\u5F03\u3001\u7A97\u53E3\u5B8C\u6574\u6027\u3001\u8017\u65F6\u7F3A\u5931\u8BA1\u6570
|
|
273
|
+
- omitted + notes\uFF1A\u660E\u7EC6\u88AB\u88C1\u526A\u7684\u53BB\u5411\uFF0C\u4EE5\u53CA"\u4E3A\u4EC0\u4E48\u7F3A\u6570\u636E"\u7684\u81EA\u7136\u8BED\u8A00\u8BF4\u660E
|
|
274
|
+
|
|
275
|
+
**\u8BFB\u6570\u5951\u7EA6\uFF08\u7F3A\u5931 \u2260 \u6CA1\u6709\uFF0C\u66F4 \u2260 0ms\uFF09**\uFF1A
|
|
276
|
+
- \u660E\u7EC6\u4E0D\u662F\u5168\u91CF\uFF1A\u9ED8\u8BA4\u53EA\u7559\u8017\u65F6 \u2265 minDurationMs \u7684\u6E32\u67D3\uFF0C\u518D\u53D7 limit \u4E0E\u4F53\u79EF\u4E0A\u9650\u7EA6\u675F\u3002**\u5224\u65AD"\u660E\u7EC6\u662F\u5426\u5B8C\u6574"\u8BF7\u770B detailComplete**\uFF08= omitted \u4E09\u9879\u5168\u4E3A 0\uFF09\uFF1Btruncated \u53EA\u8868\u793A\u88AB limit/\u4F53\u79EF\u88C1\u526A\u8FC7\uFF0Cslow \u6863\u7684\u9608\u503C\u8FC7\u6EE4\u4E0D\u8BA1\u5165\u5B83\u3002**\u6B21\u6570\u4E0E\u8017\u65F6\u4E00\u5F8B\u4EE5 summary \u4E3A\u51C6**
|
|
277
|
+
- buffer.windowTruncated=true\uFF1A\u7A97\u53E3\u8D77\u70B9\u4E4B\u524D\u7684\u6570\u636E\u5DF2\u88AB\u7F13\u51B2\u6DD8\u6C70\uFF0C\u7A97\u53E3\u5185\u4E0D\u5B8C\u6574
|
|
278
|
+
- buffer.unpaired / prunedStarts > 0\uFF1A\u8FD9\u4E9B\u6E32\u67D3\u6CA1\u914D\u5230\u5B8C\u6574 start/end\uFF0C\u8017\u65F6\u662F**\u7F3A\u5931**\uFF0C\u4E0D\u8981\u8BFB\u6210\u5F88\u5FEB
|
|
279
|
+
- \u6CA1\u6709 nodeId\uFF1A\u89E3\u6790\u4E0D\u51FA\u53EF\u9760\u7EC4\u4EF6 id\uFF0C\u522B\u731C\u4E5F\u522B\u590D\u7528\u522B\u7684 id
|
|
280
|
+
- records.data\uFF08emit \u53C2\u6570\u7B49\uFF09\u4E0E get_component_state \u7528\u540C\u4E00\u5957\u88C1\u526A\uFF0C\u5360\u4F4D\u8BB0\u53F7\u542B\u4E49\u76F8\u540C
|
|
281
|
+
- lifecycle \u7684 added/updated/removed \u662F\u81EA\u9875\u9762\u52A0\u8F7D\u8D77\u7684**\u5168\u9875\u7D2F\u8BA1**\uFF08\u4E0D\u53D7 windowMs\uFF0C\u4E5F\u4E0D\u53D7 component \u8FC7\u6EE4\uFF1B\u53EA\u6709 byComponent \u53D7\u8FC7\u6EE4\uFF09\uFF1BbyComponent \u53EA\u8986\u76D6\u6700\u8FD1\u6D3B\u8DC3\u7684 200 \u4E2A\u7EC4\u4EF6\uFF0CcomponentEvictions > 0 \u8868\u793A\u6709\u7EC4\u4EF6\u88AB\u6DD8\u6C70\u51FA\u8BE5\u8868
|
|
282
|
+
- include: "summary" \u65F6 records \u6309\u8BF7\u6C42\u4E3A\u7A7A\u3001detailComplete \u6052 true\uFF08\u8FD9\u662F"\u6309\u8BF7\u6C42\u53E3\u5F84"\uFF0C\u4E0D\u4EE3\u8868\u7A97\u53E3\u5185\u6CA1\u6709\u4E8B\u4EF6\uFF0C\u6B21\u6570\u770B summary\uFF09
|
|
283
|
+
|
|
284
|
+
**\u4E0B\u4E00\u6B65**\uFF1A\u62FF\u5230 nodeId \u2192 get_component_state\uFF1B\u62FF\u5230 file \u2192 \u76F4\u63A5\u53BB\u6539\u90A3\u4E2A\u6587\u4EF6\u3002
|
|
285
|
+
|
|
286
|
+
**\u4E0D\u8981\u7528\u5B83**\uFF1A\u67E5\u7F51\u7EDC\u8BF7\u6C42\u6216 console\uFF08\u7528 chrome-devtools_*\uFF09\uFF1B\u5F53\u5168\u91CF\u4E8B\u4EF6\u6D41\u7528\uFF08\u660E\u7EC6\u6709\u9608\u503C\u4E0E\u4E0A\u9650\uFF09\u3002`,
|
|
287
|
+
inputSchema: withPageIdSchema({
|
|
288
|
+
type: "object",
|
|
289
|
+
properties: {
|
|
290
|
+
windowMs: {
|
|
291
|
+
type: "number",
|
|
292
|
+
description: `\u56DE\u6EAF\u7A97\u53E3\uFF08\u6BEB\u79D2\uFF09\uFF0C\u9ED8\u8BA4 ${import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.windowMs}`,
|
|
293
|
+
default: import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.windowMs
|
|
294
|
+
},
|
|
295
|
+
sinceMark: {
|
|
296
|
+
type: "string",
|
|
297
|
+
description: "\u4ECE\u6700\u8FD1\u4E00\u6B21 mark_timeline \u7684\u6807\u8BB0\u5F00\u59CB\uFF08\u4F18\u5148\u4E8E windowMs\uFF09"
|
|
298
|
+
},
|
|
299
|
+
layers: {
|
|
300
|
+
type: "array",
|
|
301
|
+
items: { type: "string", enum: [...import_core.VUE_DEVTOOLS_TIMELINE_LAYERS] },
|
|
302
|
+
description: "\u53EA\u770B\u6307\u5B9A\u5C42\uFF0C\u9ED8\u8BA4\u5168\u90E8\uFF08lifecycle \u53EA\u5F71\u54CD\u6458\u8981\uFF09"
|
|
303
|
+
},
|
|
304
|
+
minDurationMs: {
|
|
305
|
+
type: "number",
|
|
306
|
+
description: `\u7EC4\u4EF6\u6E32\u67D3\u660E\u7EC6\u7684\u8017\u65F6\u4E0B\u9650\uFF08\u6BEB\u79D2\uFF09\uFF0C\u9ED8\u8BA4 ${import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.minDurationMs}\uFF1B16 \u7EA6\u7B49\u4E8E\u53EA\u770B\u6389\u5E27`,
|
|
307
|
+
default: import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.minDurationMs
|
|
308
|
+
},
|
|
309
|
+
component: {
|
|
310
|
+
type: "string",
|
|
311
|
+
description: "\u6309\u7EC4\u4EF6\u540D\u5B50\u4E32\u8FC7\u6EE4\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\u660E\u7EC6\u4E0E byComponent\uFF1B\u8DEF\u7531\u4E0E\u6807\u8BB0\u4E0D\u53D7\u5F71\u54CD\uFF0Clifecycle \u7684 added/updated/removed \u4ECD\u662F\u5168\u9875\u7D2F\u8BA1"
|
|
312
|
+
},
|
|
313
|
+
include: {
|
|
314
|
+
type: "string",
|
|
315
|
+
enum: [...import_core.VUE_DEVTOOLS_TIMELINE_INCLUDES],
|
|
316
|
+
description: "summary \u53EA\u7ED9\u6458\u8981\u3001slow \u53EA\u7ED9\u6162\u7684\u660E\u7EC6\uFF08\u9ED8\u8BA4\uFF09\u3001all \u7ED9\u7A97\u53E3\u5185\u5168\u90E8\u660E\u7EC6",
|
|
317
|
+
default: import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.include
|
|
318
|
+
},
|
|
319
|
+
limit: {
|
|
320
|
+
type: "integer",
|
|
321
|
+
description: `\u660E\u7EC6\u6761\u6570\u4E0A\u9650\uFF1Aall \u6863\u662F\u603B\u6761\u6570\u4E0A\u9650\uFF1Bslow \u6863\u662F\u300C\u6700\u6162\u7684 perf\u300D\u4E0E\u300C\u5176\u5B83\u5C42\u300D\u5404\u81EA\u7684\u4E0A\u9650\uFF08\u603B\u6761\u6570\u6700\u591A 2\xD7limit\uFF09\u3002\u9ED8\u8BA4 ${import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.limit}\uFF0C\u6700\u5927 ${import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.maxLimit}`,
|
|
322
|
+
default: import_core.VUE_DEVTOOLS_TIMELINE_DEFAULTS.limit
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
})
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: `${VUE_DEVTOOLS_PREFIX}mark_timeline`,
|
|
329
|
+
action: import_core.VUE_DEVTOOLS_ACTIONS.MARK_TIMELINE,
|
|
330
|
+
description: `\u5728\u65F6\u95F4\u7EBF\u4E0A\u63D2\u4E00\u4E2A\u6807\u8BB0\uFF0C\u628A"\u6211\u63A5\u4E0B\u6765\u8981\u505A\u7684\u52A8\u4F5C"\u548C\u5B83\u5F15\u53D1\u7684\u4E8B\u4EF6\u5BF9\u9F50\uFF08\u4E0D\u6E05\u7A7A\u5386\u53F2\uFF09\u3002
|
|
331
|
+
|
|
332
|
+
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
333
|
+
- \u51C6\u5907\u7528 chrome-devtools_click / fill \u89E6\u53D1\u64CD\u4F5C\uFF0C\u60F3\u53EA\u770B\u8FD9\u6B21\u64CD\u4F5C\u5F15\u8D77\u7684\u53D8\u5316
|
|
334
|
+
- \u4E00\u6B21\u8C03\u67E5\u91CC\u8981\u591A\u4E2A\u68C0\u67E5\u70B9\uFF08"\u70B9\u51FB\u524D""\u63D0\u4EA4\u540E"\uFF09
|
|
335
|
+
|
|
336
|
+
**\u7528\u6CD5**\uFF1Amark_timeline({ label }) \u2192 \u6267\u884C\u52A8\u4F5C \u2192 get_timeline({ sinceMark: \u8FD4\u56DE\u7684 markId })
|
|
337
|
+
|
|
338
|
+
**\u8FD4\u56DE**\uFF1A{ markId, buffered }\u3002markId \u4F20\u7ED9 sinceMark\uFF1Bbuffered \u662F\u5F53\u524D\u7F13\u51B2\u6761\u6570\u3002`,
|
|
339
|
+
inputSchema: withPageIdSchema({
|
|
340
|
+
type: "object",
|
|
341
|
+
properties: {
|
|
342
|
+
label: { type: "string", description: "\u6807\u8BB0\u540D\u79F0\uFF0C\u4F8B\u5982\u201C\u70B9\u51FB\u63D0\u4EA4\u6309\u94AE\u201D" }
|
|
343
|
+
},
|
|
344
|
+
required: ["label"]
|
|
345
|
+
})
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
name: `${VUE_DEVTOOLS_PREFIX}clear_timeline`,
|
|
349
|
+
action: import_core.VUE_DEVTOOLS_ACTIONS.CLEAR_TIMELINE,
|
|
350
|
+
description: `\u6E05\u7A7A\u65F6\u95F4\u7EBF\u7F13\u51B2\u5E76\u91CD\u7F6E\u7D2F\u8BA1\u8BA1\u6570\u2014\u2014\u7B49\u4EF7\u4E8E"\u4ECE\u73B0\u5728\u5F00\u59CB\u5F55"\uFF08\u6CA1\u6709 start/stop \u72B6\u6001\u673A\uFF09\u3002
|
|
351
|
+
|
|
352
|
+
**\u4F55\u65F6\u4F7F\u7528**\uFF1A
|
|
353
|
+
- \u53EA\u60F3\u770B\u672C\u6B21\u64CD\u4F5C\u5F15\u8D77\u7684\u4E8B\u4EF6\uFF0C\u4E0D\u8981\u6DF7\u5165\u9875\u9762\u4E4B\u524D\u7684\u6D3B\u52A8
|
|
354
|
+
- get_timeline \u62A5 buffer.dropped \u5F88\u5927\uFF08\u7F13\u51B2\u88AB\u9AD8\u9891\u6D3B\u52A8\u585E\u6EE1\uFF09\u540E\uFF0C\u91CD\u5F00\u4E00\u4E2A\u5E72\u51C0\u7A97\u53E3
|
|
355
|
+
|
|
356
|
+
**\u8FD4\u56DE**\uFF1A{ cleared, marks }\u3002
|
|
357
|
+
|
|
358
|
+
**\u6CE8\u610F**\uFF1A\u4E0D\u53EF\u64A4\u9500\uFF1B\u6E05\u7A7A\u540E\u6B64\u524D\u7684\u4E8B\u4EF6\u4E0D\u518D\u53EF\u67E5\u3002\u60F3\u4FDD\u7559\u5386\u53F2\u53C8\u8981\u65B0\u8FB9\u754C\uFF0C\u8BF7\u7528 mark_timeline\u3002`,
|
|
220
359
|
inputSchema: withPageIdSchema({ type: "object", properties: {} })
|
|
221
360
|
}
|
|
222
361
|
];
|
package/lib/core/mcp-tools.d.ts
CHANGED
|
@@ -56,6 +56,13 @@ export declare const CUSTOM_TOOLS: CustomTool[];
|
|
|
56
56
|
* 页面桥接工具:描述与输入 schema(模型可见)+ 后端 action(调用分发)单一来源。
|
|
57
57
|
* tools/list 与 tools/call 都取自本定义,避免"清单"与"路由"两份来源各自漂移。
|
|
58
58
|
* 只在注入 Vue DevTools 桥的项目(Vue 项目)暴露。
|
|
59
|
+
*
|
|
60
|
+
* 描述写法(description 是模型唯一能看到的说明书,会随每次请求注入,所以既要准也要省):
|
|
61
|
+
* 1. 第一行一句话说清"给什么";
|
|
62
|
+
* 2. **何时使用**:正向场景 + 与相邻工具的分工;
|
|
63
|
+
* 3. **返回**:字段与形态(够推理即可,不重复 inputSchema 的参数说明);
|
|
64
|
+
* 4. **注意**:会误导判断的边界必须写明"缺失 ≠ 没有 / ≠ 0";
|
|
65
|
+
* 5. 只承诺实现里真有的能力——被裁剪/丢弃的数据要显式说明,不能让模型按描述去查一个永远为空的东西。
|
|
59
66
|
*/
|
|
60
67
|
export interface VueDevtoolsTool extends CustomTool {
|
|
61
68
|
/** 页面桥后端 action(endpoints/vue-devtools.ts executeAction) */
|
|
@@ -89,11 +89,25 @@ function buildCallExpr(action, args) {
|
|
|
89
89
|
case import_core.VUE_DEVTOOLS_ACTIONS.TOGGLE_APP:
|
|
90
90
|
return `async () => { await window.__aipanel_vue.api.toggleApp(${JSON.stringify(args?.appId)}); return "ok" }`;
|
|
91
91
|
case import_core.VUE_DEVTOOLS_ACTIONS.GET_ROUTER_INFO:
|
|
92
|
-
return `async () => { const r = window.__aipanel_vue.router.value;
|
|
92
|
+
return `async () => { const r = window.__aipanel_vue.router.value; const s = window.__aipanel_vue.safeStringify; return { currentRoute: JSON.parse(s(r?.currentRoute?.value ?? null)), routes: JSON.parse(s(r?.getRoutes?.() ?? [])) } }`;
|
|
93
|
+
case import_core.VUE_DEVTOOLS_ACTIONS.GET_TIMELINE:
|
|
94
|
+
return timelineExpr(`timeline.get(${JSON.stringify(withoutPageId(args))})`);
|
|
95
|
+
case import_core.VUE_DEVTOOLS_ACTIONS.MARK_TIMELINE:
|
|
96
|
+
return timelineExpr(`timeline.mark(${JSON.stringify(String(args?.label ?? ""))})`);
|
|
97
|
+
case import_core.VUE_DEVTOOLS_ACTIONS.CLEAR_TIMELINE:
|
|
98
|
+
return timelineExpr("timeline.clear()");
|
|
93
99
|
default:
|
|
94
100
|
throw new Error(`Unknown action: ${action}`);
|
|
95
101
|
}
|
|
96
102
|
}
|
|
103
|
+
function timelineExpr(call) {
|
|
104
|
+
return `async () => { const timeline = window.__aipanel_vue && window.__aipanel_vue.timeline; if (!timeline) return { error: "\u65F6\u95F4\u7EBF\u91C7\u96C6\u5668\u4E0D\u53EF\u7528\uFF1A\u9875\u9762\u6865\u7248\u672C\u8FC7\u65E7\uFF0C\u8BF7\u91CD\u542F dev server \u5E76\u6574\u9875\u5237\u65B0\u540E\u518D\u8BD5" }; return await ${call} }`;
|
|
105
|
+
}
|
|
106
|
+
function withoutPageId(args) {
|
|
107
|
+
const rest = { ...args ?? {} };
|
|
108
|
+
delete rest.pageId;
|
|
109
|
+
return rest;
|
|
110
|
+
}
|
|
97
111
|
function parseEvalResult(result) {
|
|
98
112
|
const r = result;
|
|
99
113
|
const text = r?.result?.content?.[0]?.text;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-aipanel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "Embed OpenCode Web UI in your Vite dev server for real-time code modification and preview",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.cjs",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"author": "",
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@aipanel/core": "1.
|
|
39
|
-
"@aipanel/provider-opencode": "1.
|
|
38
|
+
"@aipanel/core": "1.3.1",
|
|
39
|
+
"@aipanel/provider-opencode": "1.3.1",
|
|
40
40
|
"@code-inspector/core": "^2.0.9",
|
|
41
41
|
"@vue/devtools-kit": "^8.0.0",
|
|
42
42
|
"@vue/language-server": "^3.3.7",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"unplugin-vue-inspector": "^3.0.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@aipanel/provider-deepseek": "1.
|
|
50
|
+
"@aipanel/provider-deepseek": "1.3.1",
|
|
51
51
|
"vite": ">=5.0.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependenciesMeta": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@aipanel/client": "1.
|
|
59
|
+
"@aipanel/client": "1.3.1",
|
|
60
60
|
"@types/picomatch": "^4.0.0",
|
|
61
61
|
"sharp": "^0.34.5"
|
|
62
62
|
},
|