cursor-buddy 0.0.2 → 0.0.3
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/{client-DKZY5bI1.d.mts → client-CPQnk2_x.d.mts} +80 -109
- package/dist/client-CPQnk2_x.d.mts.map +1 -0
- package/dist/{client-Bd33JD8T.mjs → client-DAa4L2fE.mjs} +995 -481
- package/dist/client-DAa4L2fE.mjs.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/react/index.d.mts +21 -21
- package/dist/react/index.d.mts.map +1 -1
- package/dist/react/index.mjs +98 -83
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.mjs +24 -11
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
- package/README.md +0 -344
- package/dist/client-Bd33JD8T.mjs.map +0 -1
- package/dist/client-DKZY5bI1.d.mts.map +0 -1
|
@@ -1,53 +1,25 @@
|
|
|
1
|
-
//#region src/core/
|
|
1
|
+
//#region src/core/utils/elements.d.ts
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Element discovery for annotated screenshots.
|
|
4
|
+
* Finds visible interactive elements and assigns marker IDs.
|
|
4
5
|
*/
|
|
5
|
-
declare class VoiceCaptureService {
|
|
6
|
-
private audioContext;
|
|
7
|
-
private workletNode;
|
|
8
|
-
private stream;
|
|
9
|
-
private chunks;
|
|
10
|
-
private levelCallback;
|
|
11
|
-
/**
|
|
12
|
-
* Register a callback to receive audio level updates (0-1).
|
|
13
|
-
* Called at ~60fps during recording for waveform visualization.
|
|
14
|
-
*/
|
|
15
|
-
onLevel(callback: (level: number) => void): void;
|
|
16
|
-
/**
|
|
17
|
-
* Start recording audio from the microphone.
|
|
18
|
-
* @throws Error if microphone access is denied
|
|
19
|
-
*/
|
|
20
|
-
start(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Stop recording and return the captured audio as a WAV blob.
|
|
23
|
-
*/
|
|
24
|
-
stop(): Promise<Blob>;
|
|
25
|
-
/**
|
|
26
|
-
* Clean up all resources.
|
|
27
|
-
*/
|
|
28
|
-
dispose(): void;
|
|
29
|
-
}
|
|
30
|
-
//#endregion
|
|
31
|
-
//#region src/core/services/audio-playback.d.ts
|
|
32
6
|
/**
|
|
33
|
-
*
|
|
7
|
+
* Element marker with reference to actual DOM element.
|
|
34
8
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
play(blob: Blob, signal?: AbortSignal): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Stop any currently playing audio.
|
|
47
|
-
*/
|
|
48
|
-
stop(): void;
|
|
49
|
-
private cleanup;
|
|
9
|
+
interface ElementMarker {
|
|
10
|
+
/** Sequential marker ID (1, 2, 3...) */
|
|
11
|
+
id: number;
|
|
12
|
+
/** Reference to the actual DOM element */
|
|
13
|
+
element: Element;
|
|
14
|
+
/** Bounding rect at time of capture */
|
|
15
|
+
rect: DOMRect;
|
|
16
|
+
/** Brief description for AI context */
|
|
17
|
+
description: string;
|
|
50
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Map of marker ID to element marker.
|
|
21
|
+
*/
|
|
22
|
+
type MarkerMap = Map<number, ElementMarker>;
|
|
51
23
|
//#endregion
|
|
52
24
|
//#region src/core/types.d.ts
|
|
53
25
|
/**
|
|
@@ -74,7 +46,10 @@ type VoiceEvent = {
|
|
|
74
46
|
error: Error;
|
|
75
47
|
};
|
|
76
48
|
/**
|
|
77
|
-
* Point coordinates parsed from AI response
|
|
49
|
+
* Point coordinates parsed from AI response.
|
|
50
|
+
* Supports two formats:
|
|
51
|
+
* - Marker-based: [POINT:5:label] - references a numbered marker
|
|
52
|
+
* - Coordinate-based: [POINT:640,360:label] - raw pixel coordinates
|
|
78
53
|
*/
|
|
79
54
|
interface PointingTarget {
|
|
80
55
|
/** X coordinate in viewport pixels (top-left origin) */
|
|
@@ -106,6 +81,57 @@ interface ScreenshotResult {
|
|
|
106
81
|
/** Live browser viewport height in CSS pixels */
|
|
107
82
|
viewportHeight: number;
|
|
108
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Annotated screenshot result with marker map.
|
|
86
|
+
*/
|
|
87
|
+
interface AnnotatedScreenshotResult extends ScreenshotResult {
|
|
88
|
+
/** Map of marker ID to element reference */
|
|
89
|
+
markerMap: MarkerMap;
|
|
90
|
+
/** Text description of markers for AI context */
|
|
91
|
+
markerContext: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Public contract for voice capture used by the core client.
|
|
95
|
+
*/
|
|
96
|
+
interface VoiceCapturePort {
|
|
97
|
+
start(): Promise<void>;
|
|
98
|
+
stop(): Promise<Blob>;
|
|
99
|
+
onLevel(callback: (level: number) => void): void;
|
|
100
|
+
dispose(): void;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Public contract for audio playback used by the core client.
|
|
104
|
+
*/
|
|
105
|
+
interface AudioPlaybackPort {
|
|
106
|
+
play(blob: Blob, signal?: AbortSignal): Promise<void>;
|
|
107
|
+
stop(): void;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Public contract for screenshot capture used by the core client.
|
|
111
|
+
*/
|
|
112
|
+
interface ScreenCapturePort {
|
|
113
|
+
capture(): Promise<ScreenshotResult>;
|
|
114
|
+
captureAnnotated(): Promise<AnnotatedScreenshotResult>;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Public contract for pointer control used by the core client.
|
|
118
|
+
*/
|
|
119
|
+
interface PointerControllerPort {
|
|
120
|
+
pointAt(target: PointingTarget): void;
|
|
121
|
+
release(): void;
|
|
122
|
+
isPointing(): boolean;
|
|
123
|
+
subscribe(listener: () => void): () => void;
|
|
124
|
+
updateFollowPosition(): void;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Internal services interface for dependency injection.
|
|
128
|
+
*/
|
|
129
|
+
interface CursorBuddyServices {
|
|
130
|
+
voiceCapture?: VoiceCapturePort;
|
|
131
|
+
audioPlayback?: AudioPlaybackPort;
|
|
132
|
+
screenCapture?: ScreenCapturePort;
|
|
133
|
+
pointerController?: PointerControllerPort;
|
|
134
|
+
}
|
|
109
135
|
/**
|
|
110
136
|
* Cursor render props passed to custom cursor components
|
|
111
137
|
*/
|
|
@@ -172,69 +198,7 @@ interface CursorBuddySnapshot {
|
|
|
172
198
|
isEnabled: boolean;
|
|
173
199
|
}
|
|
174
200
|
//#endregion
|
|
175
|
-
//#region src/core/services/screen-capture.d.ts
|
|
176
|
-
/**
|
|
177
|
-
* Framework-agnostic service for capturing viewport screenshots.
|
|
178
|
-
*/
|
|
179
|
-
declare class ScreenCaptureService {
|
|
180
|
-
/**
|
|
181
|
-
* Capture a screenshot of the current viewport.
|
|
182
|
-
* @returns Screenshot result with image data and dimensions
|
|
183
|
-
*/
|
|
184
|
-
capture(): Promise<ScreenshotResult>;
|
|
185
|
-
}
|
|
186
|
-
//#endregion
|
|
187
|
-
//#region src/core/services/pointer-controller.d.ts
|
|
188
|
-
type PointerMode = "follow" | "flying" | "anchored";
|
|
189
|
-
/**
|
|
190
|
-
* Controller for cursor pointing behavior.
|
|
191
|
-
* Manages the pointer state machine (follow -> flying -> anchored -> follow)
|
|
192
|
-
* and cursor animation.
|
|
193
|
-
*/
|
|
194
|
-
declare class PointerController {
|
|
195
|
-
private mode;
|
|
196
|
-
private cancelAnimation;
|
|
197
|
-
private releaseTimeout;
|
|
198
|
-
private listeners;
|
|
199
|
-
/**
|
|
200
|
-
* Animate cursor to point at a target.
|
|
201
|
-
*/
|
|
202
|
-
pointAt(target: PointingTarget): void;
|
|
203
|
-
/**
|
|
204
|
-
* Release the cursor from pointing mode back to follow mode.
|
|
205
|
-
*/
|
|
206
|
-
release(): void;
|
|
207
|
-
/**
|
|
208
|
-
* Check if cursor is currently pointing (flying or anchored).
|
|
209
|
-
*/
|
|
210
|
-
isPointing(): boolean;
|
|
211
|
-
/**
|
|
212
|
-
* Get current pointer mode.
|
|
213
|
-
*/
|
|
214
|
-
getMode(): PointerMode;
|
|
215
|
-
/**
|
|
216
|
-
* Subscribe to pointer state changes.
|
|
217
|
-
*/
|
|
218
|
-
subscribe(listener: () => void): () => void;
|
|
219
|
-
/**
|
|
220
|
-
* Update buddy position to follow cursor when in follow mode.
|
|
221
|
-
* Call this on cursor position changes.
|
|
222
|
-
*/
|
|
223
|
-
updateFollowPosition(): void;
|
|
224
|
-
private scheduleRelease;
|
|
225
|
-
private notify;
|
|
226
|
-
}
|
|
227
|
-
//#endregion
|
|
228
201
|
//#region src/core/client.d.ts
|
|
229
|
-
/**
|
|
230
|
-
* Internal services interface for dependency injection (testing).
|
|
231
|
-
*/
|
|
232
|
-
interface CursorBuddyServices {
|
|
233
|
-
voiceCapture?: VoiceCaptureService;
|
|
234
|
-
audioPlayback?: AudioPlaybackService;
|
|
235
|
-
screenCapture?: ScreenCaptureService;
|
|
236
|
-
pointerController?: PointerController;
|
|
237
|
-
}
|
|
238
202
|
/**
|
|
239
203
|
* Framework-agnostic client for cursor buddy voice interactions.
|
|
240
204
|
*
|
|
@@ -256,6 +220,7 @@ declare class CursorBuddyClient {
|
|
|
256
220
|
private response;
|
|
257
221
|
private error;
|
|
258
222
|
private abortController;
|
|
223
|
+
private historyCommittedForTurn;
|
|
259
224
|
private cachedSnapshot;
|
|
260
225
|
private listeners;
|
|
261
226
|
constructor(endpoint: string, options?: CursorBuddyClientOptions, services?: CursorBuddyServices);
|
|
@@ -303,6 +268,12 @@ declare class CursorBuddyClient {
|
|
|
303
268
|
*/
|
|
304
269
|
private buildSnapshot;
|
|
305
270
|
private abort;
|
|
271
|
+
/**
|
|
272
|
+
* Commit partial turn to history when interrupted.
|
|
273
|
+
* Only commits if we have both transcript and response,
|
|
274
|
+
* and haven't already committed for this turn.
|
|
275
|
+
*/
|
|
276
|
+
private commitPartialHistory;
|
|
306
277
|
private transcribe;
|
|
307
278
|
private chat;
|
|
308
279
|
private speak;
|
|
@@ -311,4 +282,4 @@ declare class CursorBuddyClient {
|
|
|
311
282
|
}
|
|
312
283
|
//#endregion
|
|
313
284
|
export { Point as a, VoiceEvent as c, CursorRenderProps as i, VoiceState as l, CursorBuddyClientOptions as n, PointingTarget as o, CursorBuddySnapshot as r, SpeechBubbleRenderProps as s, CursorBuddyClient as t, WaveformRenderProps as u };
|
|
314
|
-
//# sourceMappingURL=client-
|
|
285
|
+
//# sourceMappingURL=client-CPQnk2_x.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-CPQnk2_x.d.mts","names":[],"sources":["../src/core/utils/elements.ts","../src/core/types.ts","../src/core/client.ts"],"mappings":"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"}
|