vite-plugin-aipanel 1.2.28 → 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.
@@ -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: `\u83B7\u53D6\u6307\u5B9A\u9875\u9762\u6240\u6709 Vue \u5E94\u7528\u5B9E\u4F8B\u5217\u8868\u3002
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
- - \u6392\u67E5\u5FAE\u524D\u7AEF/\u591A\u5B9E\u4F8B\u573A\u666F\u4E0B\u64CD\u4F5C\u7684\u662F\u54EA\u4E2A\u5E94\u7528
135
- - \u5207\u6362\u6D3B\u8DC3\u5E94\u7528\u524D\u67E5\u770B\u6709\u54EA\u4E9B\u53EF\u7528`,
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\u6307\u5B9A\u9875\u9762\u7684\u6D3B\u8DC3 Vue \u5E94\u7528\u5B9E\u4F8B\u3002\u540E\u7EED\u6240\u6709 vue-devtools_* \u5DE5\u5177\u90FD\u64CD\u4F5C\u8FD9\u4E2A\u5E94\u7528\u3002`,
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\u6307\u5B9A\u9875\u9762\u5F53\u524D\u6D3B\u8DC3 Vue \u5E94\u7528\u7684\u7EC4\u4EF6\u6811\u3002
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
- - \u4E86\u89E3\u9875\u9762\u7EC4\u4EF6\u5C42\u7EA7\u7ED3\u6784
157
- - \u627E\u5230\u76EE\u6807\u7EC4\u4EF6\u7684 nodeId\uFF08\u540E\u7EED\u67E5\u72B6\u6001\u7528\uFF09
158
- - \u6392\u67E5\u7EC4\u4EF6\u672A\u6E32\u67D3\u95EE\u9898
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\u6811 [{ id, name, children, file, ... }]`,
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\u4E0D\u654F\u611F\u7684\u5B50\u4E32\u5339\u914D\uFF09\uFF0C\u53EF\u9009" }
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\u5B8C\u6574\u8FD0\u884C\u65F6\u72B6\u6001\u3002
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
- - \u6392\u67E5 props \u4F20\u503C\u662F\u5426\u6B63\u786E
176
- - \u67E5\u770B ref/reactive \u54CD\u5E94\u5F0F\u6570\u636E\u7684\u5F53\u524D\u503C
177
- - \u68C0\u67E5 computed \u8BA1\u7B97\u7ED3\u679C
178
- - \u67E5\u770B attrs / events / inject / provide / template refs`,
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\u7684\u6E32\u67D3\u51FD\u6570\u6E90\u7801\u3002`,
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 Vue Router \u7684\u5F53\u524D\u8DEF\u7531\u4FE1\u606F\u3002
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\u95EE\u9898
207
- - \u67E5\u770B\u5F53\u524D\u8DEF\u7531 path/params/query/hash
208
- - \u786E\u8BA4\u8DEF\u7531\u5B88\u536B\u548C matched \u8BB0\u5F55`,
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 Vue Router \u7684\u5B8C\u6574\u8DEF\u7531\u8868\u3002
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
- - \u67E5\u770B\u6240\u6709\u5DF2\u6CE8\u518C\u8DEF\u7531
218
- - \u786E\u8BA4\u8DEF\u7531\u914D\u7F6E\u662F\u5426\u6B63\u786E
219
- - \u67E5\u770B\u8DEF\u7531\u5D4C\u5957\u5173\u7CFB`,
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
  ];
@@ -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; return window.__aipanel_vue.safeStringify({ currentRoute: r?.currentRoute?.value ?? null, routes: r?.getRoutes?.() ?? [] }) }`;
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.2.28",
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.2.28",
39
- "@aipanel/provider-opencode": "1.2.28",
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.2.28",
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.2.28",
59
+ "@aipanel/client": "1.3.1",
60
60
  "@types/picomatch": "^4.0.0",
61
61
  "sharp": "^0.34.5"
62
62
  },