@vscode/component-explorer-cli 0.1.1-0 → 0.1.1-2

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 (139) hide show
  1. package/dist/browserPage.js +4 -2
  2. package/dist/browserPage.js.map +1 -1
  3. package/dist/commands/acceptCommand.d.ts +1 -0
  4. package/dist/commands/acceptCommand.d.ts.map +1 -1
  5. package/dist/commands/acceptCommand.js +8 -2
  6. package/dist/commands/acceptCommand.js.map +1 -1
  7. package/dist/commands/compareCommand.d.ts +1 -0
  8. package/dist/commands/compareCommand.d.ts.map +1 -1
  9. package/dist/commands/compareCommand.js +8 -2
  10. package/dist/commands/compareCommand.js.map +1 -1
  11. package/dist/commands/mcpCommand.d.ts +8 -0
  12. package/dist/commands/mcpCommand.d.ts.map +1 -0
  13. package/dist/commands/mcpCommand.js +24 -0
  14. package/dist/commands/mcpCommand.js.map +1 -0
  15. package/dist/commands/screenshotCommand.d.ts +1 -0
  16. package/dist/commands/screenshotCommand.d.ts.map +1 -1
  17. package/dist/commands/screenshotCommand.js +10 -4
  18. package/dist/commands/screenshotCommand.js.map +1 -1
  19. package/dist/commands/serveCommand.d.ts +16 -0
  20. package/dist/commands/serveCommand.d.ts.map +1 -0
  21. package/dist/commands/serveCommand.js +137 -0
  22. package/dist/commands/serveCommand.js.map +1 -0
  23. package/dist/commands/watchCommand.d.ts +1 -0
  24. package/dist/commands/watchCommand.d.ts.map +1 -1
  25. package/dist/commands/watchCommand.js +22 -10
  26. package/dist/commands/watchCommand.js.map +1 -1
  27. package/dist/componentExplorer.js +5 -2
  28. package/dist/componentExplorer.js.map +1 -1
  29. package/dist/daemon/DaemonService.d.ts +131 -0
  30. package/dist/daemon/DaemonService.d.ts.map +1 -0
  31. package/dist/daemon/DaemonService.js +450 -0
  32. package/dist/daemon/DaemonService.js.map +1 -0
  33. package/dist/daemon/approvalStore.d.ts +51 -0
  34. package/dist/daemon/approvalStore.d.ts.map +1 -0
  35. package/dist/daemon/approvalStore.js +58 -0
  36. package/dist/daemon/approvalStore.js.map +1 -0
  37. package/dist/daemon/lifecycle.d.ts +8 -0
  38. package/dist/daemon/lifecycle.d.ts.map +1 -0
  39. package/dist/daemon/lifecycle.js +51 -0
  40. package/dist/daemon/lifecycle.js.map +1 -0
  41. package/dist/daemon/pipeClient.d.ts +4 -0
  42. package/dist/daemon/pipeClient.d.ts.map +1 -0
  43. package/dist/daemon/pipeClient.js +97 -0
  44. package/dist/daemon/pipeClient.js.map +1 -0
  45. package/dist/daemon/pipeName.d.ts +2 -0
  46. package/dist/daemon/pipeName.d.ts.map +1 -0
  47. package/dist/daemon/pipeName.js +14 -0
  48. package/dist/daemon/pipeName.js.map +1 -0
  49. package/dist/daemon/pipeServer.d.ts +4 -0
  50. package/dist/daemon/pipeServer.d.ts.map +1 -0
  51. package/dist/daemon/pipeServer.js +23 -0
  52. package/dist/daemon/pipeServer.js.map +1 -0
  53. package/dist/dependencyInstaller.js +7 -4
  54. package/dist/dependencyInstaller.js.map +1 -1
  55. package/dist/explorerSession.d.ts +5 -3
  56. package/dist/explorerSession.d.ts.map +1 -1
  57. package/dist/explorerSession.js +11 -5
  58. package/dist/explorerSession.js.map +1 -1
  59. package/dist/external/vscode-observables/observables/dist/disposables.js +43 -0
  60. package/dist/external/vscode-observables/observables/dist/disposables.js.map +1 -0
  61. package/dist/external/vscode-observables/observables/dist/observableInternal/base.js +22 -0
  62. package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
  63. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js +40 -0
  64. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
  65. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js +77 -0
  66. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
  67. package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js +114 -0
  68. package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
  69. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js +25 -0
  70. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
  71. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js +332 -0
  72. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
  73. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +79 -0
  74. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
  75. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js +72 -0
  76. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js.map +1 -0
  77. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js +447 -0
  78. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js.map +1 -0
  79. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js +64 -0
  80. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js.map +1 -0
  81. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js +52 -0
  82. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js.map +1 -0
  83. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js +100 -0
  84. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
  85. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js +143 -0
  86. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
  87. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js +17 -0
  88. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
  89. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js +362 -0
  90. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
  91. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js +123 -0
  92. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
  93. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js +81 -0
  94. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
  95. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js +23 -0
  96. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +1 -0
  97. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js +226 -0
  98. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +1 -0
  99. package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js +87 -0
  100. package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
  101. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js +68 -0
  102. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
  103. package/dist/git/gitCommitId.js +4 -2
  104. package/dist/git/gitCommitId.js.map +1 -1
  105. package/dist/git/gitCommitResolver.js +11 -3
  106. package/dist/git/gitCommitResolver.js.map +1 -1
  107. package/dist/git/gitService.js +5 -2
  108. package/dist/git/gitService.js.map +1 -1
  109. package/dist/git/gitUtils.js +9 -6
  110. package/dist/git/gitUtils.js.map +1 -1
  111. package/dist/git/gitWorktreeManager.js +5 -2
  112. package/dist/git/gitWorktreeManager.js.map +1 -1
  113. package/dist/httpServer.d.ts +9 -7
  114. package/dist/httpServer.d.ts.map +1 -1
  115. package/dist/httpServer.js +67 -10
  116. package/dist/httpServer.js.map +1 -1
  117. package/dist/index.js +6 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/logger.d.ts +17 -1
  120. package/dist/logger.d.ts.map +1 -1
  121. package/dist/logger.js +43 -6
  122. package/dist/logger.js.map +1 -1
  123. package/dist/mcp/McpServer.d.ts +28 -0
  124. package/dist/mcp/McpServer.d.ts.map +1 -0
  125. package/dist/mcp/McpServer.js +386 -0
  126. package/dist/mcp/McpServer.js.map +1 -0
  127. package/dist/screenshotCache.js +7 -4
  128. package/dist/screenshotCache.js.map +1 -1
  129. package/dist/sourceTreeId.js +4 -2
  130. package/dist/sourceTreeId.js.map +1 -1
  131. package/dist/storage.js +5 -2
  132. package/dist/storage.js.map +1 -1
  133. package/dist/viteProjectRef.js +5 -2
  134. package/dist/viteProjectRef.js.map +1 -1
  135. package/dist/watchConfig.d.ts +5 -0
  136. package/dist/watchConfig.d.ts.map +1 -1
  137. package/dist/watchConfig.js +22 -7
  138. package/dist/watchConfig.js.map +1 -1
  139. package/package.json +11 -4
@@ -0,0 +1,386 @@
1
+ import { z } from 'zod';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // Client-local state
7
+ // ---------------------------------------------------------------------------
8
+ class WatchList {
9
+ _fixtureIds = new Set();
10
+ _hashes = new Map();
11
+ get fixtureIds() { return this._fixtureIds; }
12
+ add(ids) {
13
+ for (const id of ids) {
14
+ this._fixtureIds.add(id);
15
+ }
16
+ }
17
+ remove(ids) {
18
+ for (const id of ids) {
19
+ this._fixtureIds.delete(id);
20
+ this._hashes.delete(id);
21
+ }
22
+ }
23
+ set(ids) {
24
+ this._fixtureIds.clear();
25
+ this._hashes.clear();
26
+ for (const id of ids) {
27
+ this._fixtureIds.add(id);
28
+ }
29
+ }
30
+ getHash(fixtureId) {
31
+ return this._hashes.get(fixtureId);
32
+ }
33
+ setHash(fixtureId, hash) {
34
+ this._hashes.set(fixtureId, hash);
35
+ }
36
+ toJSON() {
37
+ return {
38
+ fixtureIds: [...this._fixtureIds],
39
+ hashes: Object.fromEntries(this._hashes),
40
+ };
41
+ }
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // ComponentExplorerMcpServer
45
+ // ---------------------------------------------------------------------------
46
+ class ComponentExplorerMcpServer {
47
+ _daemon;
48
+ _mcp;
49
+ _watchList = new WatchList();
50
+ _sessions = [];
51
+ constructor(_daemon) {
52
+ this._daemon = _daemon;
53
+ this._mcp = new McpServer({
54
+ name: 'component-explorer',
55
+ version: '0.1.0',
56
+ });
57
+ this._registerTools();
58
+ }
59
+ async connect() {
60
+ this._sessions = await this._daemon.methods.sessions();
61
+ const transport = new StdioServerTransport();
62
+ await this._mcp.connect(transport);
63
+ }
64
+ // -- Helpers --------------------------------------------------------------
65
+ _defaultSessionName() {
66
+ return this._sessions[0]?.name ?? 'current';
67
+ }
68
+ _defaultBaselineSessionName() {
69
+ const worktree = this._sessions.find(s => s.sourceKind === 'worktree');
70
+ return worktree?.name ?? this._sessions[1]?.name ?? this._defaultSessionName();
71
+ }
72
+ _defaultCurrentSessionName() {
73
+ const current = this._sessions.find(s => s.sourceKind === 'current');
74
+ return current?.name ?? this._defaultSessionName();
75
+ }
76
+ _sourceTreeId(sessionName) {
77
+ const s = this._sessions.find(s => s.name === sessionName);
78
+ return s?.sourceTreeId ?? '';
79
+ }
80
+ _updateSessionSourceTreeId(sessionName, sourceTreeId) {
81
+ const s = this._sessions.find(s => s.name === sessionName);
82
+ if (s) {
83
+ s.sourceTreeId = sourceTreeId;
84
+ }
85
+ }
86
+ async _refreshSessions() {
87
+ this._sessions = await this._daemon.methods.sessions();
88
+ }
89
+ // -- Tool registration ---------------------------------------------------
90
+ _registerTools() {
91
+ this._registerListFixtures();
92
+ this._registerScreenshot();
93
+ this._registerCompareScreenshot();
94
+ this._registerApproveDiff();
95
+ this._registerWatchAdd();
96
+ this._registerWatchRemove();
97
+ this._registerWatchSet();
98
+ this._registerWatchCompare();
99
+ this._registerWaitForUpdate();
100
+ this._registerSessions();
101
+ }
102
+ _registerListFixtures() {
103
+ this._mcp.registerTool('list_fixtures', {
104
+ description: 'List all fixtures from a session',
105
+ inputSchema: {
106
+ sessionName: z.string().optional().describe('Session name (defaults to first session)'),
107
+ sourceTreeId: z.string().optional().describe('Source tree ID (defaults to latest known)'),
108
+ },
109
+ }, async (args) => {
110
+ const sessionName = args.sessionName ?? this._defaultSessionName();
111
+ const sourceTreeId = args.sourceTreeId ?? this._sourceTreeId(sessionName);
112
+ const fixtures = await this._daemon.methods.fixtures.list({ sessionName, sourceTreeId });
113
+ return {
114
+ content: [{ type: 'text', text: JSON.stringify(fixtures, null, 2) }],
115
+ };
116
+ });
117
+ }
118
+ _registerScreenshot() {
119
+ this._mcp.registerTool('screenshot', {
120
+ description: 'Take a screenshot of a single fixture',
121
+ inputSchema: {
122
+ fixtureId: z.string().describe('The fixture ID'),
123
+ sessionName: z.string().optional().describe('Session name (defaults to first session)'),
124
+ sourceTreeId: z.string().optional().describe('Source tree ID (defaults to latest known)'),
125
+ },
126
+ }, async (args) => {
127
+ const sessionName = args.sessionName ?? this._defaultSessionName();
128
+ const sourceTreeId = args.sourceTreeId ?? this._sourceTreeId(sessionName);
129
+ const result = await this._daemon.methods.screenshots.take({
130
+ fixtureId: args.fixtureId,
131
+ sessionName,
132
+ sourceTreeId,
133
+ includeImage: true,
134
+ });
135
+ const r = result;
136
+ this._updateSessionSourceTreeId(sessionName, r.sourceTreeId);
137
+ const content = [
138
+ { type: 'text', text: `hash: ${r.hash}\nsourceTreeId: ${r.sourceTreeId}` },
139
+ ];
140
+ if (r.image) {
141
+ content.push({ type: 'image', data: r.image, mimeType: 'image/png' });
142
+ }
143
+ return { content };
144
+ });
145
+ }
146
+ _registerCompareScreenshot() {
147
+ this._mcp.registerTool('compare_screenshot', {
148
+ description: 'Compare a fixture\'s screenshot across two sessions (e.g. baseline vs current)',
149
+ inputSchema: {
150
+ fixtureId: z.string().describe('The fixture ID'),
151
+ baselineSessionName: z.string().optional().describe('Baseline session name (defaults to worktree session)'),
152
+ currentSessionName: z.string().optional().describe('Current session name (defaults to current session)'),
153
+ baselineSourceTreeId: z.string().optional().describe('Baseline source tree ID (defaults to latest known)'),
154
+ currentSourceTreeId: z.string().optional().describe('Current source tree ID (defaults to latest known)'),
155
+ },
156
+ }, async (args) => {
157
+ const baselineSessionName = args.baselineSessionName ?? this._defaultBaselineSessionName();
158
+ const currentSessionName = args.currentSessionName ?? this._defaultCurrentSessionName();
159
+ const baselineSourceTreeId = args.baselineSourceTreeId ?? this._sourceTreeId(baselineSessionName);
160
+ const currentSourceTreeId = args.currentSourceTreeId ?? this._sourceTreeId(currentSessionName);
161
+ const result = await this._daemon.methods.screenshots.compare({
162
+ fixtureId: args.fixtureId,
163
+ baselineSessionName,
164
+ baselineSourceTreeId,
165
+ currentSessionName,
166
+ currentSourceTreeId,
167
+ includeImages: true,
168
+ });
169
+ const r = result;
170
+ const info = {
171
+ match: r.match,
172
+ baselineHash: r.baselineHash,
173
+ currentHash: r.currentHash,
174
+ };
175
+ if (r.approval) {
176
+ info.approval = r.approval;
177
+ }
178
+ const content = [
179
+ { type: 'text', text: JSON.stringify(info, null, 2) },
180
+ ];
181
+ if (r.baselineImage) {
182
+ content.push({ type: 'image', data: r.baselineImage, mimeType: 'image/png' });
183
+ }
184
+ if (r.currentImage) {
185
+ content.push({ type: 'image', data: r.currentImage, mimeType: 'image/png' });
186
+ }
187
+ return { content };
188
+ });
189
+ }
190
+ _registerApproveDiff() {
191
+ this._mcp.registerTool('approve_diff', {
192
+ description: 'Approve a visual diff so it won\'t require re-inspection next time',
193
+ inputSchema: {
194
+ fixtureId: z.string(),
195
+ originalHash: z.string(),
196
+ modifiedHash: z.string(),
197
+ comment: z.string().describe('Reason for approving this diff'),
198
+ },
199
+ }, async (args) => {
200
+ await this._daemon.methods.approvals.approve(args);
201
+ return {
202
+ content: [{
203
+ type: 'text',
204
+ text: `Approved diff for ${args.fixtureId}: ${args.originalHash} → ${args.modifiedHash}`,
205
+ }],
206
+ };
207
+ });
208
+ }
209
+ _registerWatchAdd() {
210
+ this._mcp.registerTool('watch_add', {
211
+ description: 'Add fixtures to the watch list. Watched fixtures are automatically re-screenshotted when source changes.',
212
+ inputSchema: {
213
+ fixtureIds: z.array(z.string()).describe('Fixture IDs to add'),
214
+ },
215
+ }, async (args) => {
216
+ this._watchList.add(args.fixtureIds);
217
+ return {
218
+ content: [{
219
+ type: 'text',
220
+ text: `Watch list: ${[...this._watchList.fixtureIds].join(', ') || '(empty)'}`,
221
+ }],
222
+ };
223
+ });
224
+ }
225
+ _registerWatchRemove() {
226
+ this._mcp.registerTool('watch_remove', {
227
+ description: 'Remove fixtures from the watch list',
228
+ inputSchema: {
229
+ fixtureIds: z.array(z.string()).describe('Fixture IDs to remove'),
230
+ },
231
+ }, async (args) => {
232
+ this._watchList.remove(args.fixtureIds);
233
+ return {
234
+ content: [{
235
+ type: 'text',
236
+ text: `Watch list: ${[...this._watchList.fixtureIds].join(', ') || '(empty)'}`,
237
+ }],
238
+ };
239
+ });
240
+ }
241
+ _registerWatchSet() {
242
+ this._mcp.registerTool('watch_set', {
243
+ description: 'Replace the watch list entirely',
244
+ inputSchema: {
245
+ fixtureIds: z.array(z.string()).describe('Fixture IDs to watch'),
246
+ },
247
+ }, async (args) => {
248
+ this._watchList.set(args.fixtureIds);
249
+ return {
250
+ content: [{
251
+ type: 'text',
252
+ text: `Watch list: ${[...this._watchList.fixtureIds].join(', ') || '(empty)'}`,
253
+ }],
254
+ };
255
+ });
256
+ }
257
+ _registerWatchCompare() {
258
+ this._mcp.registerTool('watch_compare', {
259
+ description: 'Compare all watched fixtures across two sessions. Takes fresh screenshots from both sessions and reports which fixtures differ.',
260
+ inputSchema: {
261
+ baselineSessionName: z.string().optional().describe('Baseline session name (defaults to worktree session)'),
262
+ currentSessionName: z.string().optional().describe('Current session name (defaults to current session)'),
263
+ baselineSourceTreeId: z.string().optional().describe('Baseline source tree ID (defaults to latest known)'),
264
+ currentSourceTreeId: z.string().optional().describe('Current source tree ID (defaults to latest known)'),
265
+ },
266
+ }, async (args) => {
267
+ const ids = [...this._watchList.fixtureIds];
268
+ if (ids.length === 0) {
269
+ return { content: [{ type: 'text', text: 'Watch list is empty. Use watch_add or watch_set first.' }] };
270
+ }
271
+ const baselineSessionName = args.baselineSessionName ?? this._defaultBaselineSessionName();
272
+ const currentSessionName = args.currentSessionName ?? this._defaultCurrentSessionName();
273
+ const baselineSourceTreeId = args.baselineSourceTreeId ?? this._sourceTreeId(baselineSessionName);
274
+ const currentSourceTreeId = args.currentSourceTreeId ?? this._sourceTreeId(currentSessionName);
275
+ const [baselineResult, currentResult] = await Promise.all([
276
+ this._daemon.methods.screenshots.takeBatch({
277
+ fixtureIds: ids,
278
+ sessionName: baselineSessionName,
279
+ sourceTreeId: baselineSourceTreeId,
280
+ }),
281
+ this._daemon.methods.screenshots.takeBatch({
282
+ fixtureIds: ids,
283
+ sessionName: currentSessionName,
284
+ sourceTreeId: currentSourceTreeId,
285
+ }),
286
+ ]);
287
+ const br = baselineResult;
288
+ const cr = currentResult;
289
+ const baselineMap = new Map(br.screenshots.map(s => [s.fixtureId, s.hash]));
290
+ const currentMap = new Map(cr.screenshots.map(s => [s.fixtureId, s.hash]));
291
+ const entries = ids.map(id => {
292
+ const bHash = baselineMap.get(id) ?? '';
293
+ const cHash = currentMap.get(id) ?? '';
294
+ return {
295
+ fixtureId: id,
296
+ match: bHash === cHash,
297
+ baselineHash: bHash,
298
+ currentHash: cHash,
299
+ };
300
+ });
301
+ // Look up approvals for changed fixtures
302
+ const results = [];
303
+ for (const entry of entries) {
304
+ let approval = undefined;
305
+ if (!entry.match && entry.baselineHash && entry.currentHash) {
306
+ approval = await this._daemon.methods.approvals.lookup({
307
+ fixtureId: entry.fixtureId,
308
+ originalHash: entry.baselineHash,
309
+ modifiedHash: entry.currentHash,
310
+ }) ?? undefined;
311
+ }
312
+ results.push({ ...entry, approval });
313
+ }
314
+ return {
315
+ content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
316
+ };
317
+ });
318
+ }
319
+ _registerWaitForUpdate() {
320
+ this._mcp.registerTool('wait_for_update', {
321
+ description: 'Block until the next source change or ref change event. If fixtures are on the watch list, automatically re-screenshots them and reports which changed.',
322
+ }, async () => {
323
+ const events = await this._daemon.methods.events();
324
+ const iterator = events[Symbol.asyncIterator]();
325
+ const { value: event, done } = await iterator.next();
326
+ // Close the stream after consuming one event
327
+ await iterator.return?.();
328
+ if (done || !event) {
329
+ return { content: [{ type: 'text', text: 'Event stream ended.' }] };
330
+ }
331
+ const ev = event;
332
+ // Update cached session info
333
+ if (ev.type === 'source-change' && ev.sourceTreeId) {
334
+ this._updateSessionSourceTreeId(ev.sessionName, ev.sourceTreeId);
335
+ }
336
+ if (ev.type === 'ref-change') {
337
+ await this._refreshSessions();
338
+ }
339
+ // If there are watched fixtures and this is a source-change, re-screenshot them
340
+ const watchedIds = [...this._watchList.fixtureIds];
341
+ if (ev.type === 'source-change' && watchedIds.length > 0 && ev.sourceTreeId) {
342
+ const batchResult = await this._daemon.methods.screenshots.takeBatch({
343
+ fixtureIds: watchedIds,
344
+ sessionName: ev.sessionName,
345
+ sourceTreeId: ev.sourceTreeId,
346
+ });
347
+ const br = batchResult;
348
+ const changes = [];
349
+ for (const s of br.screenshots) {
350
+ const prevHash = this._watchList.getHash(s.fixtureId);
351
+ const changed = prevHash !== undefined && prevHash !== s.hash;
352
+ this._watchList.setHash(s.fixtureId, s.hash);
353
+ if (changed) {
354
+ changes.push({ fixtureId: s.fixtureId, previousHash: prevHash, hash: s.hash });
355
+ }
356
+ }
357
+ return {
358
+ content: [{
359
+ type: 'text',
360
+ text: JSON.stringify({
361
+ event: ev,
362
+ watchedFixtures: br.screenshots.length,
363
+ changed: changes,
364
+ }, null, 2),
365
+ }],
366
+ };
367
+ }
368
+ return {
369
+ content: [{ type: 'text', text: JSON.stringify(ev, null, 2) }],
370
+ };
371
+ });
372
+ }
373
+ _registerSessions() {
374
+ this._mcp.registerTool('sessions', {
375
+ description: 'List active sessions with their names, URLs, and current sourceTreeIds',
376
+ }, async () => {
377
+ await this._refreshSessions();
378
+ return {
379
+ content: [{ type: 'text', text: JSON.stringify(this._sessions, null, 2) }],
380
+ };
381
+ });
382
+ }
383
+ }
384
+
385
+ export { ComponentExplorerMcpServer };
386
+ //# sourceMappingURL=McpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpServer.js","sources":["../../src/mcp/McpServer.ts"],"sourcesContent":[null],"names":["SdkMcpServer"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
- export class ScreenshotCache {
2
+
3
+ class ScreenshotCache {
3
4
  _screenshots = new Map();
4
5
  _fixtureIds = [];
5
6
  replaceAll(screenshots) {
@@ -13,7 +14,7 @@ export class ScreenshotCache {
13
14
  return this._fixtureIds;
14
15
  }
15
16
  }
16
- export function compareScreenshots(baseline, current) {
17
+ function compareScreenshots(baseline, current) {
17
18
  const added = [];
18
19
  const removed = [];
19
20
  const changed = [];
@@ -42,7 +43,7 @@ export function compareScreenshots(baseline, current) {
42
43
  }
43
44
  return { added, removed, changed, unchanged };
44
45
  }
45
- export function contentHash(data) {
46
+ function contentHash(data) {
46
47
  return createHash('sha256').update(data).digest('hex').slice(0, 12);
47
48
  }
48
49
  function buffersEqual(a, b) {
@@ -56,4 +57,6 @@ function buffersEqual(a, b) {
56
57
  }
57
58
  return true;
58
59
  }
59
- //# sourceMappingURL=screenshotCache.js.map
60
+
61
+ export { ScreenshotCache, compareScreenshots, contentHash };
62
+ //# sourceMappingURL=screenshotCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshotCache.js","sourceRoot":"","sources":["../src/screenshotCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,eAAe;IACnB,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,WAAW,GAAsB,EAAE,CAAC;IAE5C,UAAU,CAAC,WAA4C;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAC,SAAiB;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;CACD;AASD,MAAM,UAAU,kBAAkB,CACjC,QAAyB,EACzB,OAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/C,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACpC,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC3C,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,CAAa,EAAE,CAAa;IACjD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"screenshotCache.js","sources":["../src/screenshotCache.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAEa,eAAe,CAAA;AACnB,IAAA,YAAY,GAAG,IAAI,GAAG,EAAsB;IAC5C,WAAW,GAAsB,EAAE;AAE3C,IAAA,UAAU,CAAC,WAA4C,EAAA;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3C;AAEA,IAAA,GAAG,CAAC,SAAiB,EAAA;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;IACxC;AAEA,IAAA,IAAI,UAAU,GAAA;QACb,OAAO,IAAI,CAAC,WAAW;IACxB;AACA;AASK,SAAU,kBAAkB,CACjC,QAAyB,EACzB,OAAwB,EAAA;IAExB,MAAM,KAAK,GAAa,EAAE;IAC1B,MAAM,OAAO,GAAa,EAAE;IAC5B,MAAM,OAAO,GAAa,EAAE;IAC5B,MAAM,SAAS,GAAa,EAAE;IAE9B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;AAE9C,IAAA,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACzB,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACf;aAAO;YACN,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE;AACnC,YAAA,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE;AAC1C,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB;iBAAO;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB;QACD;IACD;AAEA,IAAA,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB;IACD;IAEA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;AAC9C;AAEM,SAAU,WAAW,CAAC,IAAgB,EAAA;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACpE;AAEA,SAAS,YAAY,CAAC,CAAa,EAAE,CAAa,EAAA;IACjD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AAAE,QAAA,OAAO,KAAK;IAAE;AAC3C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;QAAE;IACpC;AACA,IAAA,OAAO,IAAI;AACZ;;;;"}
@@ -1,7 +1,9 @@
1
- export class SourceTreeId {
1
+ class SourceTreeId {
2
2
  value;
3
3
  constructor(value) {
4
4
  this.value = value;
5
5
  }
6
6
  }
7
- //# sourceMappingURL=sourceTreeId.js.map
7
+
8
+ export { SourceTreeId };
9
+ //# sourceMappingURL=sourceTreeId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sourceTreeId.js","sourceRoot":"","sources":["../src/sourceTreeId.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IACH;IAArB,YAAqB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;CACtC"}
1
+ {"version":3,"file":"sourceTreeId.js","sources":["../src/sourceTreeId.ts"],"sourcesContent":[null],"names":[],"mappings":"MAAa,YAAY,CAAA;AACH,IAAA,KAAA;AAArB,IAAA,WAAA,CAAqB,KAAa,EAAA;QAAb,IAAA,CAAA,KAAK,GAAL,KAAK;IAAW;AACrC;;;;"}
package/dist/storage.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as fs from 'node:fs/promises';
2
2
  import * as path from 'node:path';
3
- export class FileSystemStorage {
3
+
4
+ class FileSystemStorage {
4
5
  _rootDir;
5
6
  constructor(_rootDir) {
6
7
  this._rootDir = _rootDir;
@@ -52,4 +53,6 @@ export class FileSystemStorage {
52
53
  }
53
54
  }
54
55
  }
55
- //# sourceMappingURL=storage.js.map
56
+
57
+ export { FileSystemStorage };
58
+ //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAUlC,MAAM,OAAO,iBAAiB;IACA;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,QAAQ,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,IAAgB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QAC1B,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC5B,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC5B,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACR,sBAAsB;QACvB,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"storage.js","sources":["../src/storage.ts"],"sourcesContent":[null],"names":[],"mappings":";;;MAWa,iBAAiB,CAAA;AACA,IAAA,QAAA;AAA7B,IAAA,WAAA,CAA6B,QAAgB,EAAA;QAAhB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAW;AAExC,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD;AAEA,IAAA,MAAM,KAAK,CAAC,QAAgB,EAAE,IAAgB,EAAA;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,QAAA,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;IACnC;IAEA,MAAM,IAAI,CAAC,QAAgB,EAAA;AAC1B,QAAA,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE;IAEA,MAAM,MAAM,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,OAAO,IAAI;QACZ;AAAE,QAAA,MAAM;AACP,YAAA,OAAO,KAAK;QACb;IACD;IAEA,MAAM,IAAI,CAAC,MAAc,EAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI;AACH,YAAA,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAa,EAAE;AAC5B,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7D;YACD;AACA,YAAA,OAAO,OAAO;QACf;AAAE,QAAA,MAAM;AACP,YAAA,OAAO,EAAE;QACV;IACD;IAEA,MAAM,MAAM,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC;AAAE,QAAA,MAAM;;QAER;IACD;AACA;;;;"}
@@ -1,9 +1,10 @@
1
1
  import * as path from 'node:path';
2
+
2
3
  /**
3
4
  * Immutable reference to a Vite-based component explorer project.
4
5
  * Encapsulates how to locate the project for Vite's `createServer`.
5
6
  */
6
- export class ViteProjectRef {
7
+ class ViteProjectRef {
7
8
  cwd;
8
9
  configFile;
9
10
  constructor(
@@ -30,4 +31,6 @@ export class ViteProjectRef {
30
31
  return new ViteProjectRef(path.dirname(absConfigPath), absConfigPath);
31
32
  }
32
33
  }
33
- //# sourceMappingURL=viteProjectRef.js.map
34
+
35
+ export { ViteProjectRef };
36
+ //# sourceMappingURL=viteProjectRef.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"viteProjectRef.js","sourceRoot":"","sources":["../src/viteProjectRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;GAGG;AACH,MAAM,OAAO,cAAc;IAGhB;IAKA;IAPV;IACC,2DAA2D;IAClD,GAAW;IACpB;;;OAGG;IACM,UAA8B;QAL9B,QAAG,GAAH,GAAG,CAAQ;QAKX,eAAU,GAAV,UAAU,CAAoB;IACrC,CAAC;IAEJ,iFAAiF;IACjF,MAAM,CAAC,iBAAiB,CAAC,aAAqB;QAC7C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAsB;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC;IACvE,CAAC;CACD"}
1
+ {"version":3,"file":"viteProjectRef.js","sources":["../src/viteProjectRef.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;AAGG;MACU,cAAc,CAAA;AAGhB,IAAA,GAAA;AAKA,IAAA,UAAA;AAPV,IAAA,WAAA;;IAEU,GAAW;AACpB;;;AAGG;IACM,UAA8B,EAAA;QAL9B,IAAA,CAAA,GAAG,GAAH,GAAG;QAKH,IAAA,CAAA,UAAU,GAAV,UAAU;IACjB;;IAGH,OAAO,iBAAiB,CAAC,aAAqB,EAAA;AAC7C,QAAA,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAClE;AAEA;;;AAGG;IACH,OAAO,kBAAkB,CAAC,cAAsB,EAAA;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAClD,QAAA,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACtE;AACA;;;;"}
@@ -37,11 +37,16 @@ export declare class ResolvedCompareConfig {
37
37
  readonly current: string;
38
38
  constructor(baseline: string, current: string);
39
39
  }
40
+ export interface ResolvedViteHmrConfig {
41
+ /** Glob patterns for files that keep HMR. Everything else triggers a full reload. */
42
+ readonly allowedPaths: readonly string[];
43
+ }
40
44
  export declare class ResolvedWatchConfig {
41
45
  readonly screenshotDir: string;
42
46
  readonly sessions: readonly ResolvedSessionConfig[];
43
47
  readonly compare: ResolvedCompareConfig | undefined;
44
48
  readonly repo: IGitRepo;
49
+ readonly viteHmr: ResolvedViteHmrConfig | undefined;
45
50
  private constructor();
46
51
  static fromFile(configPath: string): Promise<ResolvedWatchConfig>;
47
52
  static fromData(data: unknown, configDir: string, repo: IGitRepo): ResolvedWatchConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"watchConfig.d.ts","sourceRoot":"","sources":["../src/watchConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA4CrD,MAAM,MAAM,qBAAqB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7B,qBAAa,sBAAsB;IAEjC,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,OAAO,EAAE,qBAAqB;gBAF9B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,qBAAqB;CAExC;AAED,MAAM,MAAM,oBAAoB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE5E,qBAAa,qBAAqB;IAEhC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB;IACrC,QAAQ,CAAC,WAAW,EAAE,cAAc;gBAF3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,cAAc;CAErC;AAED,qBAAa,qBAAqB;IAEhC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;gBADf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM;CAEzB;AAED,qBAAa,mBAAmB;IAE9B,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE;IACnD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAJxB,OAAO;WAOM,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IASvE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,mBAAmB;CAkDtF"}
1
+ {"version":3,"file":"watchConfig.d.ts","sourceRoot":"","sources":["../src/watchConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqDrD,MAAM,MAAM,qBAAqB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7B,qBAAa,sBAAsB;IAEjC,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,OAAO,EAAE,qBAAqB;gBAF9B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,qBAAqB;CAExC;AAED,MAAM,MAAM,oBAAoB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE5E,qBAAa,qBAAqB;IAEhC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB;IACrC,QAAQ,CAAC,WAAW,EAAE,cAAc;gBAF3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,cAAc;CAErC;AAED,qBAAa,qBAAqB;IAEhC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;gBADf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM;CAEzB;AAED,MAAM,WAAW,qBAAqB;IACrC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,qBAAa,mBAAmB;IAE9B,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE;IACnD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS;IALpD,OAAO;WAQM,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IASvE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,mBAAmB;CAsDtF"}
@@ -3,6 +3,7 @@ import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
4
  import { GitService } from './git/gitService.js';
5
5
  import { ViteProjectRef } from './viteProjectRef.js';
6
+
6
7
  // --- Zod schemas ---
7
8
  const worktreeInstallSchema = z.union([
8
9
  z.literal('auto'),
@@ -30,13 +31,20 @@ const compareConfigSchema = z.object({
30
31
  baseline: z.string(),
31
32
  current: z.string(),
32
33
  });
34
+ const viteHmrConfigSchema = z.object({
35
+ allowedPaths: z.array(z.string()),
36
+ });
37
+ const viteConfigOverridesSchema = z.object({
38
+ hmr: viteHmrConfigSchema.optional(),
39
+ });
33
40
  const watchConfigSchema = z.object({
34
41
  screenshotDir: z.string().optional(),
35
42
  sessions: z.array(sessionConfigSchema).min(1),
36
43
  compare: compareConfigSchema.optional(),
37
44
  viteConfig: z.string().optional(),
45
+ vite: viteConfigOverridesSchema.optional(),
38
46
  });
39
- export class ResolvedWorktreeConfig {
47
+ class ResolvedWorktreeConfig {
40
48
  ref;
41
49
  worktreePath;
42
50
  install;
@@ -46,7 +54,7 @@ export class ResolvedWorktreeConfig {
46
54
  this.install = install;
47
55
  }
48
56
  }
49
- export class ResolvedSessionConfig {
57
+ class ResolvedSessionConfig {
50
58
  name;
51
59
  source;
52
60
  viteProject;
@@ -56,7 +64,7 @@ export class ResolvedSessionConfig {
56
64
  this.viteProject = viteProject;
57
65
  }
58
66
  }
59
- export class ResolvedCompareConfig {
67
+ class ResolvedCompareConfig {
60
68
  baseline;
61
69
  current;
62
70
  constructor(baseline, current) {
@@ -64,16 +72,18 @@ export class ResolvedCompareConfig {
64
72
  this.current = current;
65
73
  }
66
74
  }
67
- export class ResolvedWatchConfig {
75
+ class ResolvedWatchConfig {
68
76
  screenshotDir;
69
77
  sessions;
70
78
  compare;
71
79
  repo;
72
- constructor(screenshotDir, sessions, compare, repo) {
80
+ viteHmr;
81
+ constructor(screenshotDir, sessions, compare, repo, viteHmr) {
73
82
  this.screenshotDir = screenshotDir;
74
83
  this.sessions = sessions;
75
84
  this.compare = compare;
76
85
  this.repo = repo;
86
+ this.viteHmr = viteHmr;
77
87
  }
78
88
  static async fromFile(configPath) {
79
89
  const absConfigPath = path.resolve(configPath);
@@ -124,7 +134,10 @@ export class ResolvedWatchConfig {
124
134
  }
125
135
  compare = new ResolvedCompareConfig(parsed.compare.baseline, parsed.compare.current);
126
136
  }
127
- return new ResolvedWatchConfig(screenshotDir, sessions, compare, repo);
137
+ const viteHmr = parsed.vite?.hmr
138
+ ? { allowedPaths: parsed.vite.hmr.allowedPaths }
139
+ : undefined;
140
+ return new ResolvedWatchConfig(screenshotDir, sessions, compare, repo, viteHmr);
128
141
  }
129
142
  }
130
143
  function resolveInstallConfig(raw) {
@@ -145,4 +158,6 @@ function resolveInstallConfig(raw) {
145
158
  }
146
159
  return { kind: 'custom', command: raw.command };
147
160
  }
148
- //# sourceMappingURL=watchConfig.js.map
161
+
162
+ export { ResolvedCompareConfig, ResolvedSessionConfig, ResolvedWatchConfig, ResolvedWorktreeConfig };
163
+ //# sourceMappingURL=watchConfig.js.map