@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.
- package/dist/browserPage.js +4 -2
- package/dist/browserPage.js.map +1 -1
- package/dist/commands/acceptCommand.d.ts +1 -0
- package/dist/commands/acceptCommand.d.ts.map +1 -1
- package/dist/commands/acceptCommand.js +8 -2
- package/dist/commands/acceptCommand.js.map +1 -1
- package/dist/commands/compareCommand.d.ts +1 -0
- package/dist/commands/compareCommand.d.ts.map +1 -1
- package/dist/commands/compareCommand.js +8 -2
- package/dist/commands/compareCommand.js.map +1 -1
- package/dist/commands/mcpCommand.d.ts +8 -0
- package/dist/commands/mcpCommand.d.ts.map +1 -0
- package/dist/commands/mcpCommand.js +24 -0
- package/dist/commands/mcpCommand.js.map +1 -0
- package/dist/commands/screenshotCommand.d.ts +1 -0
- package/dist/commands/screenshotCommand.d.ts.map +1 -1
- package/dist/commands/screenshotCommand.js +10 -4
- package/dist/commands/screenshotCommand.js.map +1 -1
- package/dist/commands/serveCommand.d.ts +16 -0
- package/dist/commands/serveCommand.d.ts.map +1 -0
- package/dist/commands/serveCommand.js +137 -0
- package/dist/commands/serveCommand.js.map +1 -0
- package/dist/commands/watchCommand.d.ts +1 -0
- package/dist/commands/watchCommand.d.ts.map +1 -1
- package/dist/commands/watchCommand.js +22 -10
- package/dist/commands/watchCommand.js.map +1 -1
- package/dist/componentExplorer.js +5 -2
- package/dist/componentExplorer.js.map +1 -1
- package/dist/daemon/DaemonService.d.ts +131 -0
- package/dist/daemon/DaemonService.d.ts.map +1 -0
- package/dist/daemon/DaemonService.js +450 -0
- package/dist/daemon/DaemonService.js.map +1 -0
- package/dist/daemon/approvalStore.d.ts +51 -0
- package/dist/daemon/approvalStore.d.ts.map +1 -0
- package/dist/daemon/approvalStore.js +58 -0
- package/dist/daemon/approvalStore.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +8 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +51 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/pipeClient.d.ts +4 -0
- package/dist/daemon/pipeClient.d.ts.map +1 -0
- package/dist/daemon/pipeClient.js +97 -0
- package/dist/daemon/pipeClient.js.map +1 -0
- package/dist/daemon/pipeName.d.ts +2 -0
- package/dist/daemon/pipeName.d.ts.map +1 -0
- package/dist/daemon/pipeName.js +14 -0
- package/dist/daemon/pipeName.js.map +1 -0
- package/dist/daemon/pipeServer.d.ts +4 -0
- package/dist/daemon/pipeServer.d.ts.map +1 -0
- package/dist/daemon/pipeServer.js +23 -0
- package/dist/daemon/pipeServer.js.map +1 -0
- package/dist/dependencyInstaller.js +7 -4
- package/dist/dependencyInstaller.js.map +1 -1
- package/dist/explorerSession.d.ts +5 -3
- package/dist/explorerSession.d.ts.map +1 -1
- package/dist/explorerSession.js +11 -5
- package/dist/explorerSession.js.map +1 -1
- package/dist/external/vscode-observables/observables/dist/disposables.js +43 -0
- package/dist/external/vscode-observables/observables/dist/disposables.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/base.js +22 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js +40 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js +77 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js +114 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/index.js +25 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js +332 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +79 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js +72 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js +447 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js +64 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js +52 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js +100 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js +143 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js +17 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js +362 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js +123 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js +81 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js +23 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js +226 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js +87 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js +68 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
- package/dist/git/gitCommitId.js +4 -2
- package/dist/git/gitCommitId.js.map +1 -1
- package/dist/git/gitCommitResolver.js +11 -3
- package/dist/git/gitCommitResolver.js.map +1 -1
- package/dist/git/gitService.js +5 -2
- package/dist/git/gitService.js.map +1 -1
- package/dist/git/gitUtils.js +9 -6
- package/dist/git/gitUtils.js.map +1 -1
- package/dist/git/gitWorktreeManager.js +5 -2
- package/dist/git/gitWorktreeManager.js.map +1 -1
- package/dist/httpServer.d.ts +9 -7
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +67 -10
- package/dist/httpServer.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +17 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +43 -6
- package/dist/logger.js.map +1 -1
- package/dist/mcp/McpServer.d.ts +28 -0
- package/dist/mcp/McpServer.d.ts.map +1 -0
- package/dist/mcp/McpServer.js +386 -0
- package/dist/mcp/McpServer.js.map +1 -0
- package/dist/screenshotCache.js +7 -4
- package/dist/screenshotCache.js.map +1 -1
- package/dist/sourceTreeId.js +4 -2
- package/dist/sourceTreeId.js.map +1 -1
- package/dist/storage.js +5 -2
- package/dist/storage.js.map +1 -1
- package/dist/viteProjectRef.js +5 -2
- package/dist/viteProjectRef.js.map +1 -1
- package/dist/watchConfig.d.ts +5 -0
- package/dist/watchConfig.d.ts.map +1 -1
- package/dist/watchConfig.js +22 -7
- package/dist/watchConfig.js.map +1 -1
- 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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"}
|
package/dist/screenshotCache.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
60
|
+
|
|
61
|
+
export { ScreenshotCache, compareScreenshots, contentHash };
|
|
62
|
+
//# sourceMappingURL=screenshotCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshotCache.js","
|
|
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;;;;"}
|
package/dist/sourceTreeId.js
CHANGED
package/dist/sourceTreeId.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceTreeId.js","
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
|
|
57
|
+
export { FileSystemStorage };
|
|
58
|
+
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","
|
|
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;;;;"}
|
package/dist/viteProjectRef.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
34
|
+
|
|
35
|
+
export { ViteProjectRef };
|
|
36
|
+
//# sourceMappingURL=viteProjectRef.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viteProjectRef.js","
|
|
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;;;;"}
|
package/dist/watchConfig.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/watchConfig.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
75
|
+
class ResolvedWatchConfig {
|
|
68
76
|
screenshotDir;
|
|
69
77
|
sessions;
|
|
70
78
|
compare;
|
|
71
79
|
repo;
|
|
72
|
-
|
|
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
|
-
|
|
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
|
-
|
|
161
|
+
|
|
162
|
+
export { ResolvedCompareConfig, ResolvedSessionConfig, ResolvedWatchConfig, ResolvedWorktreeConfig };
|
|
163
|
+
//# sourceMappingURL=watchConfig.js.map
|