@dimina-kit/devtools 0.4.0-dev.20260828092243 → 0.4.0-dev.20260828161241

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 (54) hide show
  1. package/dist/main/app/app.js +4 -0
  2. package/dist/main/index.bundle.js +99 -11
  3. package/dist/main/ipc/projects.d.ts +1 -1
  4. package/dist/main/ipc/projects.js +25 -1
  5. package/dist/main/services/projects/create-project-service.js +9 -2
  6. package/dist/main/services/projects/local-provider.js +6 -0
  7. package/dist/main/services/projects/project-repository.d.ts +25 -0
  8. package/dist/main/services/projects/project-repository.js +88 -12
  9. package/dist/main/services/projects/types.d.ts +13 -2
  10. package/dist/main/services/workbench-context.d.ts +18 -4
  11. package/dist/main/services/workbench-context.js +1 -0
  12. package/dist/main/services/workspace/workspace-service.d.ts +2 -0
  13. package/dist/main/services/workspace/workspace-service.js +14 -0
  14. package/dist/preload/windows/simulator.cjs.map +1 -1
  15. package/dist/renderer/assets/{button-DsNqZm7o.js → button-D5Q2wkXq.js} +2 -2
  16. package/dist/renderer/assets/{createLucideIcon-CYJeT1ji.js → createLucideIcon-Bqi8hpdi.js} +2 -2
  17. package/dist/renderer/assets/{dialog-pT4qWmka.js → dialog-e1TecTOY.js} +3 -3
  18. package/dist/renderer/assets/{dist-o70xmpc1.js → dist-DKWdE1TK.js} +2 -2
  19. package/dist/renderer/assets/{hostSidebarDefault-NvGZlE9O.js → hostSidebarDefault-B3yLfy8j.js} +2 -2
  20. package/dist/renderer/assets/index-CsPD68N_.js +5 -0
  21. package/dist/renderer/assets/{input-4QxTXMZN.js → input-Ct3alvkq.js} +2 -2
  22. package/dist/renderer/assets/ipc-channels-overlays-LsDzGAtV.js +2 -0
  23. package/dist/renderer/assets/jsx-runtime-2vXHouwr.css +1 -0
  24. package/dist/renderer/assets/{jsx-runtime-CqVdW3eg.js → jsx-runtime-DGLHmmOq.js} +1 -1
  25. package/dist/renderer/assets/{popover-CJiSWwuE.js → popover-Dix5cm_b.js} +2 -2
  26. package/dist/renderer/assets/project-api-k7Oq9iaq.js +2 -0
  27. package/dist/renderer/assets/{projectCreateDialog-DMWNhw_1.js → projectCreateDialog-Bbjz75bP.js} +2 -2
  28. package/dist/renderer/assets/{select-C86pNcsu.js → select-acGb0AmJ.js} +2 -2
  29. package/dist/renderer/assets/{settings-BoI8mLT1.js → settings-CQrTMr43.js} +2 -2
  30. package/dist/renderer/assets/{settings-api-Bs_g4NHs.js → settings-api-CrUQ9rYV.js} +2 -2
  31. package/dist/renderer/assets/{settings-tab-bar-DHLLygqv.js → settings-tab-bar-Cw1kVIf2.js} +2 -2
  32. package/dist/renderer/assets/{tooltip-BhAyY0T4.js → tooltip-B_-_YVbw.js} +2 -2
  33. package/dist/renderer/assets/{types-YYjkvane.js → types-CsEKtFyr.js} +2 -2
  34. package/dist/renderer/assets/{updateDialog-DPum3wx1.js → updateDialog-NsF8223A.js} +2 -2
  35. package/dist/renderer/assets/{view-api-DFhb2R8-.js → view-api-CLn3rcQE.js} +2 -2
  36. package/dist/renderer/assets/{workbenchSettings-DrajRQUk.js → workbenchSettings-CV4LVA9b.js} +2 -2
  37. package/dist/renderer/entries/host-sidebar-default/index.html +5 -5
  38. package/dist/renderer/entries/main/index.html +14 -12
  39. package/dist/renderer/entries/popover/index.html +8 -8
  40. package/dist/renderer/entries/project-create-dialog/index.html +11 -11
  41. package/dist/renderer/entries/settings/index.html +9 -9
  42. package/dist/renderer/entries/tooltip/index.html +5 -5
  43. package/dist/renderer/entries/update-dialog/index.html +9 -9
  44. package/dist/renderer/entries/workbench-settings/index.html +9 -9
  45. package/dist/shared/ipc-channels.d.ts +4 -0
  46. package/dist/shared/ipc-channels.js +4 -0
  47. package/dist/shared/ipc-schemas.d.ts +11 -0
  48. package/dist/shared/ipc-schemas.js +14 -0
  49. package/dist/shared/types.d.ts +61 -0
  50. package/package.json +6 -6
  51. package/dist/renderer/assets/index-zErhG3ta.js +0 -5
  52. package/dist/renderer/assets/ipc-channels-overlays-Blr5TNoB.js +0 -2
  53. package/dist/renderer/assets/jsx-runtime-B-3rq1y5.css +0 -1
  54. package/dist/renderer/assets/project-api-DZ1Zi6EC.js +0 -2
@@ -26,21 +26,23 @@
26
26
  overflow: hidden;
27
27
  }
28
28
  </style>
29
- <script type="module" crossorigin src="../../assets/index-zErhG3ta.js"></script>
30
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
29
+ <script type="module" crossorigin src="../../assets/index-CsPD68N_.js"></script>
30
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
31
31
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
32
- <link rel="modulepreload" crossorigin href="../../assets/button-DsNqZm7o.js">
33
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-CYJeT1ji.js">
34
- <link rel="modulepreload" crossorigin href="../../assets/types-YYjkvane.js">
35
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
36
- <link rel="modulepreload" crossorigin href="../../assets/project-api-DZ1Zi6EC.js">
37
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-Bs_g4NHs.js">
38
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
39
- <link rel="modulepreload" crossorigin href="../../assets/input-4QxTXMZN.js">
40
- <link rel="modulepreload" crossorigin href="../../assets/select-C86pNcsu.js">
32
+ <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
33
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
34
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
35
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
36
+ <link rel="modulepreload" crossorigin href="../../assets/types-CsEKtFyr.js">
37
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
38
+ <link rel="modulepreload" crossorigin href="../../assets/project-api-k7Oq9iaq.js">
39
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
40
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
41
+ <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
42
+ <link rel="modulepreload" crossorigin href="../../assets/select-acGb0AmJ.js">
41
43
  <link rel="modulepreload" crossorigin href="../../assets/constants-D8zsejFq.js">
42
44
  <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
43
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
45
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
44
46
  </head>
45
47
  <body>
46
48
  <div id="root"></div>
@@ -8,16 +8,16 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/popover-CJiSWwuE.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
11
+ <script type="module" crossorigin src="../../assets/popover-Dix5cm_b.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
13
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-DsNqZm7o.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/input-4QxTXMZN.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/select-C86pNcsu.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/select-acGb0AmJ.js">
19
19
  <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
20
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
20
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
21
21
  </head>
22
22
  <body>
23
23
  <div id="root"></div>
@@ -8,18 +8,18 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/projectCreateDialog-DMWNhw_1.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
11
+ <script type="module" crossorigin src="../../assets/projectCreateDialog-Bbjz75bP.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
13
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-DsNqZm7o.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/dist-o70xmpc1.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-CYJeT1ji.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/dialog-pT4qWmka.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/project-api-DZ1Zi6EC.js">
20
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
21
- <link rel="modulepreload" crossorigin href="../../assets/input-4QxTXMZN.js">
22
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/project-api-k7Oq9iaq.js">
20
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
21
+ <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
22
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -11,16 +11,16 @@
11
11
  closes the overlay — mirrors the popover entry. */
12
12
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
13
13
  </style>
14
- <script type="module" crossorigin src="../../assets/settings-BoI8mLT1.js"></script>
15
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/dist-o70xmpc1.js">
14
+ <script type="module" crossorigin src="../../assets/settings-CQrTMr43.js"></script>
15
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
17
17
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-DHLLygqv.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
20
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-Bs_g4NHs.js">
21
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
22
- <link rel="modulepreload" crossorigin href="../../assets/input-4QxTXMZN.js">
23
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
18
+ <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-Cw1kVIf2.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
20
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
21
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
22
+ <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
23
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
24
24
  </head>
25
25
  <body>
26
26
  <div id="root"></div>
@@ -9,11 +9,11 @@
9
9
  html, body { margin: 0; padding: 0; width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; overflow: hidden; background: transparent !important; }
10
10
  #root { width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; display: block; overflow: visible; }
11
11
  </style>
12
- <script type="module" crossorigin src="../../assets/tooltip-BhAyY0T4.js"></script>
13
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
16
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
12
+ <script type="module" crossorigin src="../../assets/tooltip-B_-_YVbw.js"></script>
13
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
16
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -8,16 +8,16 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/updateDialog-DPum3wx1.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
11
+ <script type="module" crossorigin src="../../assets/updateDialog-NsF8223A.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
13
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-DsNqZm7o.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/dist-o70xmpc1.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-CYJeT1ji.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/dialog-pT4qWmka.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/view-api-DFhb2R8-.js">
20
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
20
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
21
21
  </head>
22
22
  <body>
23
23
  <div id="root"></div>
@@ -6,17 +6,17 @@
6
6
  <!-- See entries/main/index.html for CSP rationale. -->
7
7
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http: https:; font-src 'self' data:; media-src 'self' blob: http: https:; connect-src 'self' http: https: ws: wss:;" />
8
8
  <title>开发工具设置</title>
9
- <script type="module" crossorigin src="../../assets/workbenchSettings-DrajRQUk.js"></script>
10
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-CqVdW3eg.js">
11
- <link rel="modulepreload" crossorigin href="../../assets/dist-o70xmpc1.js">
9
+ <script type="module" crossorigin src="../../assets/workbenchSettings-CV4LVA9b.js"></script>
10
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
11
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
12
12
  <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
13
- <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-DHLLygqv.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-DsNqZm7o.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-Blr5TNoB.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-Bs_g4NHs.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/input-4QxTXMZN.js">
13
+ <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-Cw1kVIf2.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
18
18
  <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
19
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-B-3rq1y5.css">
19
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
20
20
  </head>
21
21
  <body>
22
22
  <div id="root"></div>
@@ -138,10 +138,14 @@ export declare const ProjectsChannel: {
138
138
  readonly List: "projects:list";
139
139
  readonly Add: "projects:add";
140
140
  readonly Remove: "projects:remove";
141
+ /** Edit an existing record's name / icon; its path stays the identity. */
142
+ readonly Update: "projects:update";
141
143
  /** Merged + sanitized template catalog for the create-project dialog. */
142
144
  readonly ListTemplates: "projects:listTemplates";
143
145
  /** Host-supplied create-project dialog hook (returns input or null). */
144
146
  readonly OpenCreateDialog: "projects:openCreateDialog";
147
+ /** Host-supplied edit-project dialog hook; `null` means no hook is configured. */
148
+ readonly OpenEditDialog: "projects:openEditDialog";
145
149
  /** Server-side scaffold + register (delegates to create-project-service). */
146
150
  readonly Create: "projects:create";
147
151
  /** Default values used to pre-fill the create-project dialog (baseDir). */
@@ -193,10 +193,14 @@ export const ProjectsChannel = {
193
193
  List: 'projects:list',
194
194
  Add: 'projects:add',
195
195
  Remove: 'projects:remove',
196
+ /** Edit an existing record's name / icon; its path stays the identity. */
197
+ Update: 'projects:update',
196
198
  /** Merged + sanitized template catalog for the create-project dialog. */
197
199
  ListTemplates: 'projects:listTemplates',
198
200
  /** Host-supplied create-project dialog hook (returns input or null). */
199
201
  OpenCreateDialog: 'projects:openCreateDialog',
202
+ /** Host-supplied edit-project dialog hook; `null` means no hook is configured. */
203
+ OpenEditDialog: 'projects:openEditDialog',
200
204
  /** Server-side scaffold + register (delegates to create-project-service). */
201
205
  Create: 'projects:create',
202
206
  /** Default values used to pre-fill the create-project dialog (baseDir). */
@@ -158,8 +158,19 @@ export declare const SimulatorCustomApiInvokeSchema: z.ZodTuple<[z.ZodString, z.
158
158
  export declare const ProjectGetPagesSchema: z.ZodTuple<[z.ZodString], null>;
159
159
  /** project:getCompileConfig — absolute project path. */
160
160
  export declare const ProjectGetCompileConfigSchema: z.ZodTuple<[z.ZodString], null>;
161
+ /**
162
+ * projects:update — absolute project directory path + the editable subset of
163
+ * its record. The path is the identity of the record being edited, never a
164
+ * field of the patch.
165
+ */
166
+ export declare const ProjectsUpdateSchema: z.ZodTuple<[z.ZodString, z.ZodObject<{
167
+ name: z.ZodOptional<z.ZodString>;
168
+ iconUrl: z.ZodOptional<z.ZodString>;
169
+ }, z.core.$strip>], null>;
161
170
  /** projects:remove — absolute project directory path. */
162
171
  export declare const ProjectsRemoveSchema: z.ZodTuple<[z.ZodString], null>;
172
+ /** projects:openEditDialog — absolute project directory path. */
173
+ export declare const ProjectsOpenEditDialogSchema: z.ZodTuple<[z.ZodString], null>;
163
174
  /**
164
175
  * workbenchSettings:save — full WorkbenchSettings object.
165
176
  *
@@ -222,8 +222,22 @@ export const SimulatorCustomApiInvokeSchema = z.tuple([
222
222
  export const ProjectGetPagesSchema = z.tuple([AbsolutePath]);
223
223
  /** project:getCompileConfig — absolute project path. */
224
224
  export const ProjectGetCompileConfigSchema = z.tuple([AbsolutePath]);
225
+ /**
226
+ * projects:update — absolute project directory path + the editable subset of
227
+ * its record. The path is the identity of the record being edited, never a
228
+ * field of the patch.
229
+ */
230
+ export const ProjectsUpdateSchema = z.tuple([
231
+ AbsolutePath,
232
+ z.object({
233
+ name: z.string().min(1).max(200).optional(),
234
+ iconUrl: z.string().max(2048).optional(),
235
+ }),
236
+ ]);
225
237
  /** projects:remove — absolute project directory path. */
226
238
  export const ProjectsRemoveSchema = z.tuple([AbsolutePath]);
239
+ /** projects:openEditDialog — absolute project directory path. */
240
+ export const ProjectsOpenEditDialogSchema = z.tuple([AbsolutePath]);
227
241
  /**
228
242
  * workbenchSettings:save — full WorkbenchSettings object.
229
243
  *
@@ -222,6 +222,7 @@ export interface ProjectsProvider {
222
222
  validateProjectDir?(dirPath: string): string | null;
223
223
  addProject(dirPath: string): unknown;
224
224
  removeProject(dirPath: string): void | Promise<void>;
225
+ updateProject?(dirPath: string, patch: unknown): unknown;
225
226
  updateLastOpened?(dirPath: string): void | Promise<void>;
226
227
  getCompileConfig?(dirPath: string): unknown;
227
228
  saveCompileConfig?(dirPath: string, cfg: unknown): void | Promise<void>;
@@ -355,6 +356,32 @@ export interface WorkbenchAppConfig extends WorkbenchConfig {
355
356
  parentWindow: import('electron').BrowserWindow;
356
357
  templates: ProjectTemplate[];
357
358
  }) => Promise<CustomCreateProjectDialogResult>;
359
+ /**
360
+ * Host-supplied "编辑项目" dialog. When provided, the renderer routes the
361
+ * project card's edit action through IPC into this main-process hook
362
+ * instead of showing the built-in dialog. `project` is read from the
363
+ * current project-list record (not whatever the renderer happened to have
364
+ * in state), so the host always sees devtools' own authoritative record.
365
+ *
366
+ * Return either:
367
+ * - `null` — user cancelled; devtools does nothing.
368
+ * - `{ name?, iconUrl? }` — the host collected an edit; devtools applies
369
+ * it via `workspace.updateProject`, the same path the built-in dialog's
370
+ * submit uses.
371
+ * - `{ updated: EditableProject }` — the host has ALREADY persisted the
372
+ * change itself; devtools just refreshes the list.
373
+ *
374
+ * Unlike `customCreateProjectDialog`, "no hook configured" and "user
375
+ * cancelled" are NOT both collapsed to `null` on the wire: the create flow
376
+ * does that and it means a cancelled host dialog falls through into the
377
+ * built-in one right after. The `projects:openEditDialog` IPC instead
378
+ * returns `null` only when no hook is configured, and wraps the hook's
379
+ * result as `{ result }` otherwise — see `OpenEditProjectDialogReply`.
380
+ */
381
+ customEditProjectDialog?: (ctx: {
382
+ parentWindow: import('electron').BrowserWindow;
383
+ project: EditableProject;
384
+ }) => Promise<CustomEditProjectDialogResult>;
358
385
  }
359
386
  /**
360
387
  * Discriminated return of `customCreateProjectDialog`. `null` = cancelled.
@@ -372,4 +399,38 @@ export type CustomCreateProjectDialogResult = null | {
372
399
  lastOpened?: string | null;
373
400
  };
374
401
  } | CreateProjectInput;
402
+ /**
403
+ * Structural minimum devtools needs to render a project-list card, passed to
404
+ * `customEditProjectDialog` and returned as its `updated` variant. Mirrors
405
+ * `Project` in `./projects-provider`.
406
+ */
407
+ export interface EditableProject {
408
+ name: string;
409
+ path: string;
410
+ iconUrl?: string;
411
+ lastOpened?: string | null;
412
+ }
413
+ /**
414
+ * Discriminated return of `customEditProjectDialog`. `null` = cancelled.
415
+ * `{ updated }` = the host already persisted the edit; devtools just
416
+ * refreshes. Otherwise a `{ name?, iconUrl? }` patch devtools applies via
417
+ * `workspace.updateProject`.
418
+ */
419
+ export type CustomEditProjectDialogResult = null | {
420
+ updated: EditableProject;
421
+ } | {
422
+ name?: string;
423
+ iconUrl?: string;
424
+ };
425
+ /**
426
+ * Wire reply for `projects:openEditDialog`. `null` means the host configured
427
+ * no `customEditProjectDialog` hook at all — the renderer should show the
428
+ * built-in dialog. When a hook IS configured, the IPC always resolves
429
+ * `{ result }` even if `result` is `null` (user cancelled the host dialog),
430
+ * so the renderer can tell "no hook" apart from "hook ran, user cancelled"
431
+ * and skip the built-in fallback in the latter case.
432
+ */
433
+ export type OpenEditProjectDialogReply = null | {
434
+ result: CustomEditProjectDialogResult;
435
+ };
375
436
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dimina-kit/devtools",
3
- "version": "0.4.0-dev.20260828092243",
3
+ "version": "0.4.0-dev.20260828161241",
4
4
  "description": "Dimina DevTools - modular developer tools for mini app debugging",
5
5
  "keywords": [
6
6
  "dimina",
@@ -90,11 +90,11 @@
90
90
  "chrome-remote-interface": "^0.34.0",
91
91
  "ws": "^8.20.0",
92
92
  "zod": "^4.3.6",
93
- "@dimina-kit/electron-deck": "0.1.0-dev.20260828092243",
94
- "@dimina-kit/view-anchor": "0.1.0-dev.20260828092243",
95
- "@dimina-kit/inspect": "0.4.0-dev.20260828092243",
96
- "@dimina-kit/electron-runtime": "0.1.0-dev.20260828092243",
97
- "@dimina-kit/devkit": "0.1.2-dev.20260828092243"
93
+ "@dimina-kit/devkit": "0.1.2-dev.20260828161241",
94
+ "@dimina-kit/electron-runtime": "0.1.0-dev.20260828161241",
95
+ "@dimina-kit/inspect": "0.4.0-dev.20260828161241",
96
+ "@dimina-kit/electron-deck": "0.1.0-dev.20260828161241",
97
+ "@dimina-kit/view-anchor": "0.1.0-dev.20260828161241"
98
98
  },
99
99
  "devDependencies": {
100
100
  "@playwright/test": "^1.59.1",