pinpoints 0.1.4

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 (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +187 -0
  3. package/out/browser/browserSessionManager.d.ts +19 -0
  4. package/out/browser/browserSessionManager.d.ts.map +1 -0
  5. package/out/browser/browserSessionManager.js +169 -0
  6. package/out/browser/browserSessionManager.js.map +1 -0
  7. package/out/cli/index.d.ts +3 -0
  8. package/out/cli/index.d.ts.map +1 -0
  9. package/out/cli/index.js +564 -0
  10. package/out/cli/index.js.map +1 -0
  11. package/out/core/pickerToolbar.d.ts +9 -0
  12. package/out/core/pickerToolbar.d.ts.map +1 -0
  13. package/out/core/pickerToolbar.js +475 -0
  14. package/out/core/pickerToolbar.js.map +1 -0
  15. package/out/export/contextFormatter.d.ts +9 -0
  16. package/out/export/contextFormatter.d.ts.map +1 -0
  17. package/out/export/contextFormatter.js +151 -0
  18. package/out/export/contextFormatter.js.map +1 -0
  19. package/out/extension.d.ts +4 -0
  20. package/out/extension.d.ts.map +1 -0
  21. package/out/extension.js +95 -0
  22. package/out/extension.js.map +1 -0
  23. package/out/extraction/domExtractor.d.ts +10 -0
  24. package/out/extraction/domExtractor.d.ts.map +1 -0
  25. package/out/extraction/domExtractor.js +72 -0
  26. package/out/extraction/domExtractor.js.map +1 -0
  27. package/out/extraction/layoutExtractor.d.ts +11 -0
  28. package/out/extraction/layoutExtractor.d.ts.map +1 -0
  29. package/out/extraction/layoutExtractor.js +107 -0
  30. package/out/extraction/layoutExtractor.js.map +1 -0
  31. package/out/extraction/redactor.d.ts +9 -0
  32. package/out/extraction/redactor.d.ts.map +1 -0
  33. package/out/extraction/redactor.js +78 -0
  34. package/out/extraction/redactor.js.map +1 -0
  35. package/out/extraction/screenshotExtractor.d.ts +7 -0
  36. package/out/extraction/screenshotExtractor.d.ts.map +1 -0
  37. package/out/extraction/screenshotExtractor.js +104 -0
  38. package/out/extraction/screenshotExtractor.js.map +1 -0
  39. package/out/extraction/selectorExtractor.d.ts +16 -0
  40. package/out/extraction/selectorExtractor.d.ts.map +1 -0
  41. package/out/extraction/selectorExtractor.js +172 -0
  42. package/out/extraction/selectorExtractor.js.map +1 -0
  43. package/out/extraction/styleExtractor.d.ts +10 -0
  44. package/out/extraction/styleExtractor.d.ts.map +1 -0
  45. package/out/extraction/styleExtractor.js +96 -0
  46. package/out/extraction/styleExtractor.js.map +1 -0
  47. package/out/picker/pickerController.d.ts +33 -0
  48. package/out/picker/pickerController.d.ts.map +1 -0
  49. package/out/picker/pickerController.js +979 -0
  50. package/out/picker/pickerController.js.map +1 -0
  51. package/out/schemas/index.d.ts +418 -0
  52. package/out/schemas/index.d.ts.map +1 -0
  53. package/out/schemas/index.js +128 -0
  54. package/out/schemas/index.js.map +1 -0
  55. package/out/source/sourceLocator.d.ts +7 -0
  56. package/out/source/sourceLocator.d.ts.map +1 -0
  57. package/out/source/sourceLocator.js +37 -0
  58. package/out/source/sourceLocator.js.map +1 -0
  59. package/out/source/sourceMapResolver.d.ts +17 -0
  60. package/out/source/sourceMapResolver.d.ts.map +1 -0
  61. package/out/source/sourceMapResolver.js +204 -0
  62. package/out/source/sourceMapResolver.js.map +1 -0
  63. package/out/source/workspaceGrep.d.ts +30 -0
  64. package/out/source/workspaceGrep.d.ts.map +1 -0
  65. package/out/source/workspaceGrep.js +237 -0
  66. package/out/source/workspaceGrep.js.map +1 -0
  67. package/out/testPaste.d.ts +1 -0
  68. package/out/testPaste.d.ts.map +1 -0
  69. package/out/testPaste.js +3 -0
  70. package/out/testPaste.js.map +1 -0
  71. package/out/ui/statusBarManager.d.ts +14 -0
  72. package/out/ui/statusBarManager.d.ts.map +1 -0
  73. package/out/ui/statusBarManager.js +89 -0
  74. package/out/ui/statusBarManager.js.map +1 -0
  75. package/package.json +132 -0
  76. package/resources/fonts/icons.css +19 -0
  77. package/resources/fonts/icons.html +69 -0
  78. package/resources/fonts/icons.json +3 -0
  79. package/resources/fonts/icons.ts +13 -0
  80. package/resources/fonts/icons.woff +0 -0
  81. package/resources/icon.png +0 -0
  82. package/resources/icons/pinpoint-logo.svg +4 -0
  83. package/resources/logo.svg +97 -0
@@ -0,0 +1,564 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const os = __importStar(require("os"));
39
+ const path = __importStar(require("path"));
40
+ const net = __importStar(require("net"));
41
+ const readline = __importStar(require("readline"));
42
+ const child_process_1 = require("child_process");
43
+ const browserSessionManager_1 = require("../browser/browserSessionManager");
44
+ const selectorExtractor_1 = require("../extraction/selectorExtractor");
45
+ const domExtractor_1 = require("../extraction/domExtractor");
46
+ const styleExtractor_1 = require("../extraction/styleExtractor");
47
+ const layoutExtractor_1 = require("../extraction/layoutExtractor");
48
+ const screenshotExtractor_1 = require("../extraction/screenshotExtractor");
49
+ const redactor_1 = require("../extraction/redactor");
50
+ const contextFormatter_1 = require("../export/contextFormatter");
51
+ const sourceLocator_1 = require("../source/sourceLocator");
52
+ const pickerToolbar_1 = require("../core/pickerToolbar");
53
+ class PinpointCliRunner {
54
+ constructor(options) {
55
+ this.options = options;
56
+ this.browserSession = null;
57
+ this.capturedElements = [];
58
+ this.isStopping = false;
59
+ this.workspaceRoot = process.cwd();
60
+ this.tempDir = path.join(this.workspaceRoot, '.pinpoint', 'temp');
61
+ this.currentMode = options.mode;
62
+ }
63
+ async start() {
64
+ if (!this.workspaceRoot) {
65
+ throw new Error('Could not determine workspace root (cwd).');
66
+ }
67
+ // Start with a clean temp directory every session
68
+ this.cleanupTempDir();
69
+ fs.mkdirSync(this.tempDir, { recursive: true });
70
+ this.ensureGitignore();
71
+ const url = this.options.url ?? (await this.promptForUrl());
72
+ if (!url) {
73
+ throw new Error('No URL provided.');
74
+ }
75
+ this.browserSession = new browserSessionManager_1.BrowserSessionManager();
76
+ const page = await this.browserSession.launch({ url });
77
+ await this.enableInspectMode(page);
78
+ await this.injectPickerUI(page, this.currentMode);
79
+ this.setupReinjectHandlers(page);
80
+ await new Promise((resolve) => {
81
+ const onProcessExit = () => {
82
+ this.cleanupTempDir();
83
+ };
84
+ process.once('exit', onProcessExit);
85
+ const onSignal = () => {
86
+ // Fallback cleanup first in case async shutdown is interrupted.
87
+ this.cleanupTempDir();
88
+ void finish();
89
+ };
90
+ const finish = async () => {
91
+ if (this.isStopping)
92
+ return;
93
+ this.isStopping = true;
94
+ process.off('SIGINT', onSignal);
95
+ process.off('SIGTERM', onSignal);
96
+ process.off('exit', onProcessExit);
97
+ await this.stop();
98
+ resolve();
99
+ };
100
+ process.once('SIGINT', onSignal);
101
+ process.once('SIGTERM', onSignal);
102
+ const browser = this.browserSession?.getBrowser();
103
+ if (browser) {
104
+ browser.once('disconnected', () => {
105
+ void finish();
106
+ });
107
+ }
108
+ page.once('close', () => {
109
+ void finish();
110
+ });
111
+ });
112
+ }
113
+ setupReinjectHandlers(page) {
114
+ const attemptReinject = async () => {
115
+ if (this.isStopping)
116
+ return;
117
+ try {
118
+ await page.waitForSelector('body', { timeout: 2000 }).catch(() => undefined);
119
+ await this.injectPickerUI(page, this.currentMode);
120
+ }
121
+ catch (error) {
122
+ console.warn('PinPoint: failed to re-inject toolbar after navigation.', error);
123
+ }
124
+ };
125
+ page.on('domcontentloaded', attemptReinject);
126
+ page.on('load', attemptReinject);
127
+ page.on('framenavigated', (frame) => {
128
+ if (frame === page.mainFrame()) {
129
+ void attemptReinject();
130
+ }
131
+ });
132
+ }
133
+ async enableInspectMode(page) {
134
+ page.on('console', (msg) => {
135
+ const text = msg.text();
136
+ if (text.startsWith('PINPOINT_SELECTED:')) {
137
+ void this.captureClickedElement(page);
138
+ return;
139
+ }
140
+ if (text.startsWith('PINPOINT_MODE_CHANGED:')) {
141
+ const mode = text.replace('PINPOINT_MODE_CHANGED:', '').trim();
142
+ if (mode === 'pick' || mode === 'full') {
143
+ this.currentMode = mode;
144
+ }
145
+ return;
146
+ }
147
+ // CLI always outputs to system clipboard; target controls are hidden in toolbar.
148
+ });
149
+ }
150
+ async captureClickedElement(page) {
151
+ try {
152
+ const mode = await page.evaluate(() => {
153
+ return window.pinPointMode || 'pick';
154
+ });
155
+ if (mode === 'pick' || mode === 'full') {
156
+ this.currentMode = mode;
157
+ }
158
+ const selectedHandle = await page.evaluateHandle(() => {
159
+ const win = window;
160
+ const el = win.__pinpoint_clicked;
161
+ if (el) {
162
+ delete win.__pinpoint_clicked;
163
+ return el;
164
+ }
165
+ return document.querySelector('[style*="0ea5e9"]') || document.activeElement;
166
+ });
167
+ const elementHandle = selectedHandle.asElement();
168
+ if (!elementHandle) {
169
+ await selectedHandle.dispose();
170
+ return;
171
+ }
172
+ const tagName = await elementHandle.evaluate((el) => el.tagName.toLowerCase());
173
+ if (tagName === 'body' || tagName === 'html') {
174
+ console.warn('PinPoint: clicked element was too generic (body/html), try again.');
175
+ await elementHandle.dispose();
176
+ return;
177
+ }
178
+ await this.captureElement(page, elementHandle);
179
+ await elementHandle.dispose();
180
+ }
181
+ catch (error) {
182
+ console.error('PinPoint: failed to capture clicked element.', error);
183
+ }
184
+ }
185
+ async captureElement(page, elementHandle) {
186
+ try {
187
+ const selectorExtractor = new selectorExtractor_1.SelectorExtractor();
188
+ const domExtractor = new domExtractor_1.DomExtractor();
189
+ const styleExtractor = new styleExtractor_1.StyleExtractor();
190
+ const layoutExtractor = new layoutExtractor_1.LayoutExtractor();
191
+ const screenshotExtractor = new screenshotExtractor_1.ScreenshotExtractor();
192
+ const redactor = new redactor_1.Redactor();
193
+ const identity = await elementHandle.evaluate((el) => {
194
+ const dataAttributes = {};
195
+ for (const attr of Array.from(el.attributes)) {
196
+ if (attr.name.startsWith('data-')) {
197
+ dataAttributes[attr.name] = attr.value;
198
+ }
199
+ }
200
+ return {
201
+ tag: el.tagName.toLowerCase(),
202
+ id: el.id || undefined,
203
+ classes: Array.from(el.classList),
204
+ role: el.getAttribute('role') || undefined,
205
+ ariaLabel: el.getAttribute('aria-label') || undefined,
206
+ dataAttributes: Object.keys(dataAttributes).length > 0 ? dataAttributes : undefined,
207
+ text: el.textContent?.trim().substring(0, 200) || undefined,
208
+ accessibleName: el.ariaLabel || undefined,
209
+ };
210
+ });
211
+ const selectors = await selectorExtractor.extract(elementHandle);
212
+ const dom = await domExtractor.extract(elementHandle, this.options.contextRadius);
213
+ const styles = await styleExtractor.extract(elementHandle, this.currentMode);
214
+ const layout = await layoutExtractor.extract(elementHandle, page);
215
+ let visual;
216
+ const shouldScreenshot = this.currentMode === 'full' || this.options.screenshot;
217
+ if (shouldScreenshot) {
218
+ try {
219
+ visual = await screenshotExtractor.extract(elementHandle, this.tempDir);
220
+ }
221
+ catch (error) {
222
+ console.warn('PinPoint: screenshot capture failed; continuing without image.', error);
223
+ }
224
+ }
225
+ let sourceLocation;
226
+ try {
227
+ const sourceLocator = new sourceLocator_1.SourceLocator();
228
+ sourceLocation = await sourceLocator.locate(page, identity, dom, this.workspaceRoot);
229
+ }
230
+ catch (error) {
231
+ console.warn('PinPoint: source detection failed.', error);
232
+ }
233
+ let reactComponent;
234
+ try {
235
+ reactComponent = await elementHandle.evaluate((el) => {
236
+ const fiberKey = Object.keys(el).find((k) => k.startsWith('__reactFiber$') || k.startsWith('__reactInternalInstance$'));
237
+ if (!fiberKey)
238
+ return undefined;
239
+ let fiber = el[fiberKey];
240
+ while (fiber) {
241
+ const fiberType = fiber.type;
242
+ if (fiberType && typeof fiberType === 'function') {
243
+ const name = fiberType.displayName || fiberType.name;
244
+ if (name && name !== 'Anonymous') {
245
+ return name;
246
+ }
247
+ }
248
+ fiber = fiber.return;
249
+ }
250
+ return undefined;
251
+ });
252
+ }
253
+ catch {
254
+ // no-op
255
+ }
256
+ let context = {
257
+ meta: {
258
+ url: page.url(),
259
+ timestamp: new Date().toISOString(),
260
+ viewport: layout.viewport || { width: 1920, height: 1080 },
261
+ dpr: layout.devicePixelRatio,
262
+ },
263
+ identity,
264
+ selectors,
265
+ dom,
266
+ layout,
267
+ styles,
268
+ visual,
269
+ sourceLocation,
270
+ reactComponent,
271
+ };
272
+ context = redactor.redact(context);
273
+ this.capturedElements.push(context);
274
+ const formatter = new contextFormatter_1.ContextFormatter();
275
+ const outputText = formatter.formatForChat(this.capturedElements, this.currentMode, this.workspaceRoot);
276
+ this.deliverOutput(outputText, this.capturedElements.length);
277
+ }
278
+ catch (error) {
279
+ console.error('PinPoint: failed to process captured element.', error);
280
+ }
281
+ }
282
+ deliverOutput(text, count) {
283
+ const copied = this.copyToClipboard(text);
284
+ if (copied) {
285
+ console.log(`Captured element #${count} to clipboard.`);
286
+ return;
287
+ }
288
+ console.error('Failed to copy capture to system clipboard. Install xclip/xsel/wl-clipboard on Linux.');
289
+ }
290
+ copyToClipboard(text) {
291
+ try {
292
+ const platform = os.platform();
293
+ if (platform === 'darwin') {
294
+ const result = (0, child_process_1.spawnSync)('pbcopy', [], { input: text, encoding: 'utf-8' });
295
+ return result.status === 0;
296
+ }
297
+ if (platform === 'win32') {
298
+ const result = (0, child_process_1.spawnSync)('clip', [], { input: text, encoding: 'utf-8', shell: true });
299
+ return result.status === 0;
300
+ }
301
+ const xclipResult = (0, child_process_1.spawnSync)('xclip', ['-selection', 'clipboard'], {
302
+ input: text,
303
+ encoding: 'utf-8',
304
+ });
305
+ if (xclipResult.status === 0) {
306
+ return true;
307
+ }
308
+ const xselResult = (0, child_process_1.spawnSync)('xsel', ['--clipboard', '--input'], {
309
+ input: text,
310
+ encoding: 'utf-8',
311
+ });
312
+ if (xselResult.status === 0) {
313
+ return true;
314
+ }
315
+ const wlCopyResult = (0, child_process_1.spawnSync)('wl-copy', [], { input: text, encoding: 'utf-8' });
316
+ return wlCopyResult.status === 0;
317
+ }
318
+ catch {
319
+ return false;
320
+ }
321
+ }
322
+ ensureGitignore() {
323
+ const gitignorePath = path.join(this.workspaceRoot, '.gitignore');
324
+ const ignorePattern = '.pinpoint/';
325
+ try {
326
+ let gitignoreContent = '';
327
+ if (fs.existsSync(gitignorePath)) {
328
+ gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');
329
+ }
330
+ if (!gitignoreContent.includes(ignorePattern)) {
331
+ const nextContent = `${gitignoreContent}${gitignoreContent ? '\n' : ''}${ignorePattern}`;
332
+ fs.writeFileSync(gitignorePath, nextContent, 'utf-8');
333
+ }
334
+ }
335
+ catch {
336
+ // best effort
337
+ }
338
+ }
339
+ async promptForUrl() {
340
+ const CUSTOM_URL = 'Enter custom URL...';
341
+ const recent = this.loadUrlHistory();
342
+ const detectedServers = await this.detectLocalServers();
343
+ const options = [];
344
+ console.log('\nSelect URL to inspect:');
345
+ if (detectedServers.length > 0) {
346
+ console.log('\nDetected servers:');
347
+ for (const server of detectedServers) {
348
+ options.push(server.url);
349
+ console.log(` [${options.length}] ${server.url} (${server.label})`);
350
+ }
351
+ }
352
+ const recentWithoutDuplicates = recent.filter((url) => !detectedServers.some((server) => server.url === url));
353
+ if (recentWithoutDuplicates.length > 0) {
354
+ console.log('\nRecent URLs:');
355
+ for (const historyUrl of recentWithoutDuplicates) {
356
+ options.push(historyUrl);
357
+ console.log(` [${options.length}] ${historyUrl}`);
358
+ }
359
+ }
360
+ options.push(CUSTOM_URL);
361
+ console.log(`\n [${options.length}] ${CUSTOM_URL}`);
362
+ const rl = readline.createInterface({
363
+ input: process.stdin,
364
+ output: process.stdout,
365
+ });
366
+ const selected = await new Promise((resolve) => {
367
+ rl.question('\nChoose an option number (default 1): ', (answer) => {
368
+ const parsed = Number(answer.trim());
369
+ if (!answer.trim()) {
370
+ resolve(options[0] || CUSTOM_URL);
371
+ return;
372
+ }
373
+ if (Number.isFinite(parsed) && parsed >= 1 && parsed <= options.length) {
374
+ resolve(options[parsed - 1]);
375
+ return;
376
+ }
377
+ resolve(CUSTOM_URL);
378
+ });
379
+ });
380
+ let url;
381
+ if (selected === CUSTOM_URL) {
382
+ url = await new Promise((resolve) => {
383
+ rl.question('Enter URL to inspect (default http://localhost:3000): ', (answer) => {
384
+ resolve(answer.trim() || 'http://localhost:3000');
385
+ });
386
+ });
387
+ }
388
+ else {
389
+ url = selected;
390
+ }
391
+ rl.close();
392
+ this.saveUrlToHistory(url, recent);
393
+ return url;
394
+ }
395
+ async detectLocalServers() {
396
+ const commonPorts = [
397
+ { port: 3000, label: 'React / Express' },
398
+ { port: 3001, label: 'React (alt)' },
399
+ { port: 4200, label: 'Angular' },
400
+ { port: 4321, label: 'Astro' },
401
+ { port: 5000, label: 'Flask / .NET' },
402
+ { port: 5173, label: 'Vite' },
403
+ { port: 5174, label: 'Vite (alt)' },
404
+ { port: 5500, label: 'Live Server' },
405
+ { port: 8000, label: 'Django / Python' },
406
+ { port: 8080, label: 'General dev server' },
407
+ { port: 8081, label: 'General dev server' },
408
+ { port: 8888, label: 'Jupyter / dev server' },
409
+ { port: 3333, label: 'Dev server' },
410
+ { port: 4000, label: 'Phoenix / Gatsby' },
411
+ { port: 1234, label: 'Parcel' },
412
+ { port: 9000, label: 'Webpack / PHP' },
413
+ ];
414
+ const results = [];
415
+ await Promise.all(commonPorts.map(async ({ port, label }) => {
416
+ const open = await this.isPortOpen(port, 150);
417
+ if (open) {
418
+ results.push({ url: `http://localhost:${port}`, label: `Port ${port} · ${label}` });
419
+ }
420
+ }));
421
+ return results.sort((a, b) => {
422
+ const portA = Number(a.url.split(':').pop());
423
+ const portB = Number(b.url.split(':').pop());
424
+ return portA - portB;
425
+ });
426
+ }
427
+ async isPortOpen(port, timeout) {
428
+ return await new Promise((resolve) => {
429
+ const socket = new net.Socket();
430
+ socket.setTimeout(timeout);
431
+ socket.once('connect', () => {
432
+ socket.destroy();
433
+ resolve(true);
434
+ });
435
+ socket.once('timeout', () => {
436
+ socket.destroy();
437
+ resolve(false);
438
+ });
439
+ socket.once('error', () => {
440
+ socket.destroy();
441
+ resolve(false);
442
+ });
443
+ socket.connect(port, '127.0.0.1');
444
+ });
445
+ }
446
+ loadUrlHistory() {
447
+ const historyPath = path.join(this.workspaceRoot, '.pinpoint', 'url-history.json');
448
+ try {
449
+ if (!fs.existsSync(historyPath)) {
450
+ return [];
451
+ }
452
+ const parsed = JSON.parse(fs.readFileSync(historyPath, 'utf-8'));
453
+ if (!Array.isArray(parsed)) {
454
+ return [];
455
+ }
456
+ return parsed.filter((item) => typeof item === 'string').slice(0, 10);
457
+ }
458
+ catch {
459
+ return [];
460
+ }
461
+ }
462
+ saveUrlToHistory(url, existingHistory) {
463
+ const historyPath = path.join(this.workspaceRoot, '.pinpoint', 'url-history.json');
464
+ const maxHistory = 10;
465
+ const updated = [url, ...existingHistory.filter((item) => item !== url)].slice(0, maxHistory);
466
+ try {
467
+ fs.writeFileSync(historyPath, JSON.stringify(updated, null, 2), 'utf-8');
468
+ }
469
+ catch {
470
+ // best effort only
471
+ }
472
+ }
473
+ async injectPickerUI(page, initialMode) {
474
+ const logoSvgPath = path.resolve(__dirname, '../../resources/logo.svg');
475
+ const logoSvg = fs.readFileSync(logoSvgPath, 'utf-8');
476
+ const initialTarget = 'clipboard';
477
+ await (0, pickerToolbar_1.injectPickerToolbar)(page, {
478
+ logoSvg,
479
+ initialMode,
480
+ initialTarget,
481
+ showTargets: false,
482
+ });
483
+ }
484
+ async stop() {
485
+ try {
486
+ if (this.browserSession) {
487
+ await this.browserSession.close();
488
+ this.browserSession = null;
489
+ }
490
+ }
491
+ finally {
492
+ this.cleanupTempDir();
493
+ }
494
+ }
495
+ cleanupTempDir() {
496
+ try {
497
+ if (fs.existsSync(this.tempDir)) {
498
+ fs.rmSync(this.tempDir, { recursive: true, force: true });
499
+ }
500
+ }
501
+ catch {
502
+ // best effort cleanup
503
+ }
504
+ }
505
+ }
506
+ function parseArgs(argv) {
507
+ const options = {
508
+ mode: 'pick',
509
+ contextRadius: 1,
510
+ screenshot: false,
511
+ };
512
+ for (let i = 0; i < argv.length; i++) {
513
+ const arg = argv[i];
514
+ if (arg === '--url') {
515
+ options.url = argv[++i];
516
+ continue;
517
+ }
518
+ if (arg === '--mode') {
519
+ const value = argv[++i];
520
+ if (value === 'pick' || value === 'full') {
521
+ options.mode = value;
522
+ }
523
+ continue;
524
+ }
525
+ if (arg === '--context-radius') {
526
+ const parsed = Number(argv[++i]);
527
+ if (Number.isFinite(parsed) && parsed >= 0 && parsed <= 3) {
528
+ options.contextRadius = parsed;
529
+ }
530
+ continue;
531
+ }
532
+ if (arg === '--screenshot') {
533
+ options.screenshot = true;
534
+ continue;
535
+ }
536
+ }
537
+ return options;
538
+ }
539
+ function printUsage() {
540
+ console.log('PinPoint CLI');
541
+ console.log('Usage: pinpoint start [--url <url>] [--mode pick|full] [--context-radius <n>] [--screenshot]');
542
+ }
543
+ async function main() {
544
+ const args = process.argv.slice(2);
545
+ const subcommand = args[0];
546
+ if (!subcommand || subcommand === '--help' || subcommand === '-h') {
547
+ printUsage();
548
+ return;
549
+ }
550
+ if (subcommand !== 'start') {
551
+ console.error(`Unknown command: ${subcommand}`);
552
+ printUsage();
553
+ process.exitCode = 1;
554
+ return;
555
+ }
556
+ const options = parseArgs(args.slice(1));
557
+ const runner = new PinpointCliRunner(options);
558
+ await runner.start();
559
+ }
560
+ main().catch((error) => {
561
+ console.error('PinPoint CLI failed to start.', error);
562
+ process.exitCode = 1;
563
+ });
564
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type * as puppeteer from 'puppeteer-core';
2
+ export interface PickerToolbarOptions {
3
+ logoSvg: string;
4
+ initialMode: string;
5
+ initialTarget: string;
6
+ showTargets?: boolean;
7
+ }
8
+ export declare function injectPickerToolbar(page: puppeteer.Page, options: PickerToolbarOptions): Promise<void>;
9
+ //# sourceMappingURL=pickerToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickerToolbar.d.ts","sourceRoot":"","sources":["../../src/core/pickerToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,SAAS,CAAC,IAAI,EACpB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA8ff"}