dashcam 0.8.3 → 1.0.1-beta.10

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 (55) hide show
  1. package/.dashcam/cli-config.json +3 -0
  2. package/.dashcam/recording.log +135 -0
  3. package/.dashcam/web-config.json +11 -0
  4. package/.github/RELEASE.md +59 -0
  5. package/.github/workflows/publish.yml +43 -0
  6. package/BACKWARD_COMPATIBILITY.md +177 -0
  7. package/LOG_TRACKING_GUIDE.md +225 -0
  8. package/README.md +709 -155
  9. package/bin/dashcam-background.js +177 -0
  10. package/bin/dashcam.cjs +8 -0
  11. package/bin/dashcam.js +696 -0
  12. package/bin/index.js +63 -0
  13. package/examples/execute-script.js +152 -0
  14. package/examples/simple-test.js +37 -0
  15. package/lib/applicationTracker.js +311 -0
  16. package/lib/auth.js +222 -0
  17. package/lib/binaries.js +21 -0
  18. package/lib/config.js +34 -0
  19. package/lib/extension-logs/helpers.js +182 -0
  20. package/lib/extension-logs/index.js +347 -0
  21. package/lib/extension-logs/manager.js +344 -0
  22. package/lib/ffmpeg.js +155 -0
  23. package/lib/logTracker.js +23 -0
  24. package/lib/logger.js +118 -0
  25. package/lib/logs/index.js +488 -0
  26. package/lib/permissions.js +85 -0
  27. package/lib/processManager.js +317 -0
  28. package/lib/recorder.js +690 -0
  29. package/lib/store.js +58 -0
  30. package/lib/tracking/FileTracker.js +105 -0
  31. package/lib/tracking/FileTrackerManager.js +62 -0
  32. package/lib/tracking/LogsTracker.js +161 -0
  33. package/lib/tracking/active-win.js +212 -0
  34. package/lib/tracking/icons/darwin.js +39 -0
  35. package/lib/tracking/icons/index.js +167 -0
  36. package/lib/tracking/icons/windows.js +27 -0
  37. package/lib/tracking/idle.js +82 -0
  38. package/lib/tracking.js +23 -0
  39. package/lib/uploader.js +456 -0
  40. package/lib/utilities/jsonl.js +77 -0
  41. package/lib/webLogsDaemon.js +234 -0
  42. package/lib/websocket/server.js +223 -0
  43. package/package.json +53 -21
  44. package/recording.log +814 -0
  45. package/sea-bundle.mjs +34595 -0
  46. package/test-page.html +15 -0
  47. package/test.log +1 -0
  48. package/test_run.log +48 -0
  49. package/test_workflow.sh +154 -0
  50. package/examples/crash-test.js +0 -11
  51. package/examples/github-issue.sh +0 -1
  52. package/examples/protocol.html +0 -22
  53. package/index.js +0 -177
  54. package/lib.js +0 -199
  55. package/recorder.js +0 -85
package/recording.log ADDED
@@ -0,0 +1,814 @@
1
+ 02:23:44.886 [info] Verbose logging enabled
2
+ Starting recording...
3
+ 02:23:44.983 [info] Started tracking logs for /tmp/test-cli-log.txt
4
+ 02:23:44.987 [debug] IconCache initialized
5
+ {
6
+ "folderPath": "/var/folders/7s/2nhyb0rj2bs_rkswlgqnnhdm0000gn/T/dashcam-cli-icons",
7
+ "cachedIcons": 2
8
+ }
9
+ 02:23:44.988 [info] Starting recording directly
10
+ {
11
+ "options": {
12
+ "fps": 30,
13
+ "includeAudio": false,
14
+ "customOutputPath": null
15
+ }
16
+ }
17
+ 02:23:44.988 [debug] → Entering generateOutputPath
18
+ {
19
+ "args": {}
20
+ }
21
+ 02:23:44.988 [debug] [VERBOSE] Generating output path
22
+ {
23
+ "directory": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings",
24
+ "filepath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
25
+ "directoryExists": true
26
+ }
27
+ 02:23:44.989 [debug] Created recordings directory
28
+ {
29
+ "directory": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings"
30
+ }
31
+ 02:23:44.989 [debug] ← Exiting generateOutputPath
32
+ {
33
+ "result": "undefined"
34
+ }
35
+ 02:23:44.989 [debug] → Entering getPlatformArgs
36
+ {
37
+ "args": {
38
+ "fps": 30,
39
+ "includeAudio": false
40
+ }
41
+ }
42
+ 02:23:44.989 [debug] → Entering detectPrimaryScreenDevice
43
+ {
44
+ "args": {}
45
+ }
46
+ 02:23:45.238 [debug] AVFoundation device list output:
47
+ {
48
+ "totalLines": 21
49
+ }
50
+ 02:23:45.239 [debug] Found screen capture device:
51
+ {
52
+ "deviceIndex": 2,
53
+ "screenNumber": 0
54
+ }
55
+ 02:23:45.239 [info] Detected primary screen device:
56
+ {
57
+ "deviceIndex": 2,
58
+ "screenNumber": 0,
59
+ "screenInput": "2:none",
60
+ "totalScreenDevices": 1
61
+ }
62
+ 02:23:45.239 [debug] ← Exiting detectPrimaryScreenDevice
63
+ {
64
+ "result": "undefined"
65
+ }
66
+ 02:23:45.239 [debug] [VERBOSE] Using platform configuration
67
+ {
68
+ "platform": "darwin",
69
+ "config": {
70
+ "inputFormat": "avfoundation",
71
+ "screenInput": "2:none",
72
+ "audioInput": "0"
73
+ }
74
+ }
75
+ 02:23:45.239 [debug] FFmpeg capture command:
76
+ {
77
+ "args": "-f avfoundation -video_size 1920x1080 -pixel_format uyvy422 -r 30 -framerate 30 -i 2:none"
78
+ }
79
+ 02:23:45.240 [debug] [VERBOSE] Platform-specific arguments added
80
+ {
81
+ "totalArgs": 12,
82
+ "includeAudio": false,
83
+ "fps": 30,
84
+ "screenInput": "2:none"
85
+ }
86
+ 02:23:45.240 [debug] ← Exiting getPlatformArgs
87
+ {
88
+ "result": "undefined"
89
+ }
90
+ 02:23:45.240 [info] Generated temp file path
91
+ {
92
+ "tempFile": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm",
93
+ "tempDir": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings"
94
+ }
95
+ 02:23:45.240 [info] Wrote temp file info to disk
96
+ {
97
+ "path": "/Users/ianjennings/Development/dashcam-cli-minimal/.dashcam/temp-file.json",
98
+ "tempFileInfo": {
99
+ "tempFile": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm",
100
+ "outputPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
101
+ "startTime": 1761722625240
102
+ }
103
+ }
104
+ 02:23:45.240 [info] Starting recording with options:
105
+ {
106
+ "fps": 30,
107
+ "includeAudio": false,
108
+ "platform": "darwin",
109
+ "outputPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
110
+ "tempFile": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm"
111
+ }
112
+ 02:23:45.240 [debug] [VERBOSE] FFmpeg command details
113
+ {
114
+ "ffmpegPath": "/Users/ianjennings/Development/dashcam-cli-minimal/node_modules/ffmpeg-static/ffmpeg",
115
+ "totalArgs": 28,
116
+ "outputArgs": "-c:v libvpx -b:v 1M -r 30 -g 30 -f webm -flush_packets 1 -max_muxing_queue_size 1024",
117
+ "platformArgs": "-f avfoundation -video_size 1920x1080 -pixel_format uyvy422 -r 30 -framerate 30 -i 2:none"
118
+ }
119
+ 02:23:45.240 [silly] [TRACE] Full FFmpeg command
120
+ {
121
+ "command": "/Users/ianjennings/Development/dashcam-cli-minimal/node_modules/ffmpeg-static/ffmpeg -f avfoundation -video_size 1920x1080 -pixel_format uyvy422 -r 30 -framerate 30 -i 2:none -c:v libvpx -b:v 1M -r 30 -g 30 -f webm -flush_packets 1 -max_muxing_queue_size 1024 -y /Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm"
122
+ }
123
+ 02:23:45.240 [debug] Spawning FFmpeg process...
124
+ 02:23:45.243 [info] FFmpeg process spawned
125
+ {
126
+ "pid": 12173,
127
+ "args": [
128
+ "1",
129
+ "-max_muxing_queue_size",
130
+ "1024",
131
+ "-y",
132
+ "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm"
133
+ ],
134
+ "tempFile": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm"
135
+ }
136
+ 02:23:45.243 [debug] Starting application tracking...
137
+ 02:23:45.250 [debug] → Entering ApplicationTracker.start
138
+ {
139
+ "args": {}
140
+ }
141
+ 02:23:45.250 [debug] Starting enhanced application tracking
142
+ {
143
+ "trackingDir": "/var/folders/7s/2nhyb0rj2bs_rkswlgqnnhdm0000gn/T/dashcam-cli-tracking",
144
+ "logFile": "/var/folders/7s/2nhyb0rj2bs_rkswlgqnnhdm0000gn/T/dashcam-cli-tracking/active-win.jsonl"
145
+ }
146
+ 02:23:45.250 [debug] ← Exiting ApplicationTracker.start
147
+ {
148
+ "result": "undefined"
149
+ }
150
+ 02:23:45.250 [debug] Starting log tracking...
151
+ {
152
+ "recorderId": "recording-2025-10-29T07-23-44-988Z"
153
+ }
154
+ 02:23:45.250 [debug] LogsTrackerManager: Starting new logs tracker instance
155
+ {
156
+ "recorderId": "recording-2025-10-29T07-23-44-988Z",
157
+ "screenId": "1",
158
+ "directory": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings"
159
+ }
160
+ 02:23:45.250 [debug] LogsTrackerManager: Ensuring web daemon is running...
161
+ 02:23:45.250 [debug] Checking if daemon process is still running...
162
+ {
163
+ "pid": 6719
164
+ }
165
+ 02:23:45.251 [debug] Daemon process not running or not accessible
166
+ {
167
+ "error": "kill ESRCH"
168
+ }
169
+ 02:23:45.251 [info] Web logs daemon not running, starting it...
170
+ 02:23:45.251 [debug] Spawned daemon process
171
+ {
172
+ "pid": 12176
173
+ }
174
+ 02:23:45.251 [debug] Waiting for daemon to start...
175
+ 02:23:46.364 [silly] Icon already cached
176
+ {
177
+ "name": "code"
178
+ }
179
+ 02:23:46.365 [silly] Tracked active window with icon extraction
180
+ {
181
+ "app": "code",
182
+ "title": "server.js — dashcam-cli-minimal (Workspace)",
183
+ "hasId": true
184
+ }
185
+ 02:23:46.365 [debug] Checking if daemon process is still running...
186
+ {
187
+ "pid": 12176
188
+ }
189
+ 02:23:46.365 [debug] Daemon process is running
190
+ {
191
+ "pid": 12176
192
+ }
193
+ 02:23:46.365 [info] Web logs daemon started successfully
194
+ 02:23:46.365 [info] Started tracking logs for /tmp/test-cli-log.txt
195
+ 02:23:46.365 [info] Started new logs tracker instance
196
+ {
197
+ "recorderId": "recording-2025-10-29T07-23-44-988Z",
198
+ "screenId": "1",
199
+ "directory": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings"
200
+ }
201
+ 02:23:46.365 [info] Recording process started successfully
202
+ {
203
+ "pid": 12173,
204
+ "startTime": 1761722625243
205
+ }
206
+ 02:23:46.366 [info] Recording started successfully
207
+ {
208
+ "outputPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
209
+ "startTime": 1761722625243
210
+ }
211
+ Recording started successfully (PID: 12170)
212
+ Output: /Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm
213
+ Use "dashcam status" to check progress
214
+ Use "dashcam stop" to stop recording and upload
215
+ Recording is running in background...
216
+ 02:23:46.366 [info] FFmpeg output: 2025-10-29 02:23:46.249 ffmpeg[12173:76141] WARNING: AVCaptureDeviceTypeExternal is deprecated for Continuity Cameras. Please use AVCaptureDeviceTypeContinuityCamera and add NSCameraUseContinuityCameraDeviceType to your Info.plist.
217
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
218
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
219
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
220
+ [AVFoundation indev @ 0x14a0048d0] Configuration of video device failed, falling back to default.
221
+ 02:23:46.366 [error] PERMISSION ISSUE DETECTED: Screen recording failed. This happens because the Node.js subprocess doesn't inherit VS Code's screen recording permissions.
222
+ 02:23:46.366 [error] SOLUTION: Add Node.js to screen recording permissions:
223
+ 02:23:46.366 [error] 1. Open System Preferences > Security & Privacy > Privacy > Screen Recording
224
+ 02:23:46.366 [error] 2. Click the lock to unlock
225
+ 02:23:46.366 [error] 3. Click the + button and add: /usr/local/bin/node (or your Node.js installation path)
226
+ 02:23:46.366 [error] 4. Alternatively, find node with: which node
227
+ 02:23:46.367 [error] 5. Restart the terminal after adding permissions
228
+ 02:23:46.367 [debug] FFmpeg: 2025-10-29 02:23:46.249 ffmpeg[12173:76141] WARNING: AVCaptureDeviceTypeExternal is deprecated for Continuity Cameras. Please use AVCaptureDeviceTypeContinuityCamera and add NSCameraUseContinuityCameraDeviceType to your Info.plist.
229
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
230
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
231
+ objc[12173]: class `NSKVONotifying_AVCaptureScreenInput' not linked into application
232
+ [AVFoundation indev @ 0x14a0048d0] Configuration of video device failed, falling back to default.
233
+ 02:23:46.602 [info] FFmpeg output: [avfoundation @ 0x14a004600] Stream #0: not enough frames to estimate rate; consider increasing probesize
234
+ 02:23:46.602 [debug] FFmpeg: [avfoundation @ 0x14a004600] Stream #0: not enough frames to estimate rate; consider increasing probesize
235
+ 02:23:46.603 [info] FFmpeg output: Input #0, avfoundation, from '2:none':
236
+ Duration: N/A, start: 2406.551500, bitrate: N/A
237
+ Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 3456x2234, 1000k tbr, 1000k tbn
238
+ 02:23:46.603 [debug] FFmpeg: Input #0, avfoundation, from '2:none':
239
+ Duration: N/A, start: 2406.551500, bitrate: N/A
240
+ Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 3456x2234, 1000k tbr, 1000k tbn
241
+ 02:23:46.604 [info] FFmpeg output: Stream mapping:
242
+ Stream #0:0 -> #0:0
243
+ 02:23:46.604 [debug] FFmpeg: Stream mapping:
244
+ Stream #0:0 -> #0:0
245
+ 02:23:46.605 [info] FFmpeg output: (rawvideo (native) -> vp8 (libvpx))
246
+ Press [q] to stop, [?] for help
247
+ 02:23:46.605 [debug] FFmpeg: (rawvideo (native) -> vp8 (libvpx))
248
+ Press [q] to stop, [?] for help
249
+ 02:23:46.616 [info] FFmpeg output: [libvpx @ 0x14a2673b0] v1.12.0-251-g7a8052ccd
250
+ 02:23:46.616 [debug] FFmpeg: [libvpx @ 0x14a2673b0] v1.12.0-251-g7a8052ccd
251
+ 02:23:46.674 [info] FFmpeg output: Output #0, webm, to '/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm':
252
+ Metadata:
253
+ encoder : Lavf60.3.100
254
+ 02:23:46.674 [debug] FFmpeg: Output #0, webm, to '/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm':
255
+ Metadata:
256
+ encoder : Lavf60.3.100
257
+ 02:23:46.674 [info] FFmpeg output: Stream #0:0: Video: vp8, yuv420p(tv, progressive), 3456x2234, q=2-31, 1000 kb/s, 30 fps, 1k tbn
258
+ Metadata:
259
+ encoder : Lavc60.3.100 libvpx
260
+ Side data:
261
+ cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
262
+ 02:23:46.675 [debug] FFmpeg: Stream #0:0: Video: vp8, yuv420p(tv, progressive), 3456x2234, q=2-31, 1000 kb/s, 30 fps, 1k tbn
263
+ Metadata:
264
+ encoder : Lavc60.3.100 libvpx
265
+ Side data:
266
+ cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
267
+ 02:23:47.160 [info] FFmpeg output: frame= 0 fps=0.0 q=42.0 size= 0kB time=00:00:00.00 bitrate=N/A speed=N/A
268
+ 02:23:47.160 [debug] [VERBOSE] FFmpeg progress: frame= 0 fps=0.0 q=42.0 size= 0kB time=00:00:00.00 bitrate=N/A speed=N/A
269
+ 02:23:47.222 [info] FFmpeg output: frame= 1 fps=0.0 q=63.0 size= 0kB time=00:00:00.03 bitrate= 113.7kbits/s speed=0.0594x
270
+ 02:23:47.222 [debug] [VERBOSE] FFmpeg progress: frame= 1 fps=0.0 q=63.0 size= 0kB time=00:00:00.03 bitrate= 113.7kbits/s speed=0.0594x
271
+ 02:23:47.450 [silly] Icon already cached
272
+ {
273
+ "name": "code"
274
+ }
275
+ 02:23:47.451 [silly] Tracked active window with icon extraction
276
+ {
277
+ "app": "code",
278
+ "title": "server.js — dashcam-cli-minimal (Workspace)",
279
+ "hasId": true
280
+ }
281
+ 02:23:47.757 [info] FFmpeg output: frame= 8 fps=7.3 q=63.0 size= 0kB time=00:00:00.26 bitrate= 14.1kbits/s speed=0.242x
282
+ 02:23:47.757 [debug] [VERBOSE] FFmpeg progress: frame= 8 fps=7.3 q=63.0 size= 0kB time=00:00:00.26 bitrate= 14.1kbits/s speed=0.242x
283
+
284
+ Received SIGTERM, stopping background recording...
285
+ 02:23:47.913 [debug] → Entering stopRecording
286
+ {
287
+ "args": {}
288
+ }
289
+ 02:23:47.913 [info] Stopping recording
290
+ {
291
+ "pid": 12173,
292
+ "duration": 2670,
293
+ "durationSeconds": "2.7"
294
+ }
295
+ 02:23:47.913 [debug] Sending quit signal to FFmpeg...
296
+ 02:23:48.100 [info] FFmpeg output: frame= 12 fps=8.0 q=63.0 Lsize= 249kB time=00:00:00.36 bitrate=5547.3kbits/s speed=0.245x
297
+ video:248kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.230803%
298
+ 02:23:48.100 [debug] [VERBOSE] FFmpeg progress: frame= 12 fps=8.0 q=63.0 Lsize= 249kB time=00:00:00.36 bitrate=5547.3kbits/s speed=0.245x
299
+ video:248kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.230803%
300
+ 02:23:48.113 [info] FFmpeg output: Exiting normally, received signal 15.
301
+ 02:23:48.113 [debug] FFmpeg: Exiting normally, received signal 15.
302
+ 02:23:48.244 [info] Temp file created successfully
303
+ {
304
+ "path": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm",
305
+ "size": 254482
306
+ }
307
+ 02:23:48.376 [silly] Icon already cached
308
+ {
309
+ "name": "code"
310
+ }
311
+ 02:23:48.376 [silly] Tracked active window with icon extraction
312
+ {
313
+ "app": "code",
314
+ "title": "server.js — dashcam-cli-minimal (Workspace)",
315
+ "hasId": true
316
+ }
317
+ 02:23:49.363 [silly] Icon already cached
318
+ {
319
+ "name": "code"
320
+ }
321
+ 02:23:49.363 [silly] Tracked active window with icon extraction
322
+ {
323
+ "app": "code",
324
+ "title": "server.js — dashcam-cli-minimal (Workspace)",
325
+ "hasId": true
326
+ }
327
+ 02:23:50.392 [silly] Icon already cached
328
+ {
329
+ "name": "code"
330
+ }
331
+ 02:23:50.392 [silly] Tracked active window with icon extraction
332
+ {
333
+ "app": "code",
334
+ "title": "server.js — dashcam-cli-minimal (Workspace)",
335
+ "hasId": true
336
+ }
337
+ 02:23:51.124 [info] Looking for temp file
338
+ {
339
+ "inMemory": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm",
340
+ "infoFileExists": true,
341
+ "infoPath": "/Users/ianjennings/Development/dashcam-cli-minimal/.dashcam/temp-file.json"
342
+ }
343
+ DEBUG: Looking for temp file {
344
+ inMemory: '/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm',
345
+ infoFileExists: true,
346
+ infoPath: '/Users/ianjennings/Development/dashcam-cli-minimal/.dashcam/temp-file.json'
347
+ }
348
+ 02:23:51.128 [info] Debug: temp file check
349
+ {
350
+ "tempFile": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm",
351
+ "exists": true,
352
+ "size": 254482
353
+ }
354
+ 02:23:51.128 [debug] Temp file stats:
355
+ {
356
+ "size": 254482,
357
+ "path": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/temp-1761722625240.webm"
358
+ }
359
+ 02:23:51.128 [debug] Copying temp file to final output...
360
+ 02:23:51.130 [info] Successfully copied temp file to final output
361
+ 02:23:51.130 [debug] Stopping application tracking...
362
+ 02:23:51.131 [debug] → Entering ApplicationTracker.stop
363
+ {
364
+ "args": {}
365
+ }
366
+ 02:23:51.131 [debug] Stopping enhanced application tracking
367
+ 02:23:51.132 [info] Enhanced application tracking stopped
368
+ {
369
+ "uniqueApps": 1,
370
+ "totalEvents": 5,
371
+ "iconsExtracted": 1
372
+ }
373
+ 02:23:51.133 [debug] ← Exiting ApplicationTracker.stop
374
+ {
375
+ "result": "undefined"
376
+ }
377
+ 02:23:51.133 [debug] Stopping log tracking...
378
+ {
379
+ "recorderId": "recording-2025-10-29T07-23-44-988Z"
380
+ }
381
+ 02:23:51.133 [info] Stopped tracking logs for /tmp/test-cli-log.txt
382
+ 02:23:51.133 [info] Destroyed log tracker
383
+ 02:23:51.134 [info] Stopped logs tracker instance
384
+ {
385
+ "recorderId": "recording-2025-10-29T07-23-44-988Z",
386
+ "screenId": "1"
387
+ }
388
+ 02:23:51.134 [debug] Tracking results collected
389
+ {
390
+ "appResults": {
391
+ "apps": 1,
392
+ "icons": 1,
393
+ "events": 5
394
+ },
395
+ "logResults": {
396
+ "trackers": 1,
397
+ "totalEvents": 0
398
+ }
399
+ }
400
+ 02:23:51.134 [debug] Creating GIF
401
+ {
402
+ "inputVideoPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
403
+ "outputGifPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.gif"
404
+ }
405
+ 02:23:51.144 [debug] Creating snapshot
406
+ {
407
+ "inputVideoPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
408
+ "outputSnapshotPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.png",
409
+ "snapshotTimeSeconds": 0
410
+ }
411
+ 02:24:00.151 [debug] → Entering ApplicationTracker.stop
412
+ {
413
+ "args": {}
414
+ }
415
+ 02:24:00.153 [debug] Application tracking not started
416
+ 02:24:00.153 [debug] ← Exiting ApplicationTracker.stop
417
+ {
418
+ "result": "undefined"
419
+ }
420
+ Recording stopped: /Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm
421
+ Starting upload...
422
+ 02:24:00.154 [debug] → Entering upload
423
+ {
424
+ "args": {
425
+ "filePath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm",
426
+ "metadata": {
427
+ "title": "Dashcam Recording",
428
+ "description": "Recorded with Dashcam CLI",
429
+ "duration": 14908,
430
+ "clientStartDate": 1761722625243,
431
+ "apps": [
432
+ "code"
433
+ ],
434
+ "logs": [
435
+ {
436
+ "id": "CLI",
437
+ "name": "CLI",
438
+ "type": "cli",
439
+ "fileLocation": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/dashcam_logs_cli.jsonl",
440
+ "items": [
441
+ {
442
+ "item": 1,
443
+ "count": 0
444
+ }
445
+ ],
446
+ "count": 0
447
+ }
448
+ ],
449
+ "gifPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.gif",
450
+ "snapshotPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.png"
451
+ }
452
+ }
453
+ }
454
+ 02:24:00.182 [info] Starting upload process
455
+ {
456
+ "filePath": "recording-2025-10-29T07-23-44-988Z.webm",
457
+ "fileType": "video",
458
+ "extension": "webm",
459
+ "title": "Dashcam Recording",
460
+ "hasProject": false
461
+ }
462
+ 02:24:00.182 [debug] No project ID provided, fetching user projects...
463
+ 02:24:00.182 [debug] → Entering auth.getProjects
464
+ {
465
+ "args": {}
466
+ }
467
+ 02:24:00.182 [debug] Fetching user projects...
468
+ 02:24:00.524 [debug] [VERBOSE] Projects fetched successfully
469
+ {
470
+ "projectCount": 8
471
+ }
472
+ 02:24:00.525 [debug] ← Exiting auth.getProjects
473
+ {
474
+ "result": "undefined"
475
+ }
476
+ 02:24:00.525 [info] Automatically selected first project
477
+ {
478
+ "projectId": "6387dc1e7c5392006384b0a8",
479
+ "projectName": "Demo Project"
480
+ }
481
+ 02:24:00.525 [debug] [VERBOSE] Creating replay with config
482
+ {
483
+ "duration": 14908,
484
+ "apps": [
485
+ "code"
486
+ ],
487
+ "title": "Dashcam Recording",
488
+ "system": {
489
+ "platform": "darwin",
490
+ "arch": "arm64",
491
+ "nodeVersion": "v22.3.0"
492
+ },
493
+ "clientStartDate": 1761722625243,
494
+ "project": "6387dc1e7c5392006384b0a8",
495
+ "description": "Recorded with Dashcam CLI"
496
+ }
497
+ 02:24:00.526 [info] Creating replay
498
+ {
499
+ "duration": 14908,
500
+ "apps": [
501
+ "code"
502
+ ],
503
+ "title": "Dashcam Recording",
504
+ "system": {
505
+ "platform": "darwin",
506
+ "arch": "arm64",
507
+ "nodeVersion": "v22.3.0"
508
+ },
509
+ "clientStartDate": 1761722625243,
510
+ "project": "6387dc1e7c5392006384b0a8",
511
+ "description": "Recorded with Dashcam CLI"
512
+ }
513
+ 02:24:00.620 [info] Replay created successfully
514
+ {
515
+ "replayId": "6901c11000f26659ed1a91da",
516
+ "shareKey": "QZ4PH5VQI4wpl1xGACI2A",
517
+ "shareLink": "https://app.dashcam.io/replay/6901c11000f26659ed1a91da?share=QZ4PH5VQI4wpl1xGACI2A"
518
+ }
519
+ 02:24:00.621 [debug] [VERBOSE] Getting STS credentials for replay
520
+ {
521
+ "replayId": "6901c11000f26659ed1a91da"
522
+ }
523
+ 02:24:00.621 [debug] → Entering auth.getStsCredentials
524
+ {
525
+ "args": {}
526
+ }
527
+ 02:24:00.621 [debug] Fetching STS credentials for upload...
528
+ 02:24:00.621 [debug] [VERBOSE] Making STS request
529
+ {
530
+ "tokenPrefix": "eyJhbGciOi...",
531
+ "replayData": {
532
+ "id": "6901c11000f26659ed1a91da",
533
+ "duration": 14908,
534
+ "title": "Dashcam Recording",
535
+ "hasApps": true,
536
+ "hasIcons": true,
537
+ "hasProject": true
538
+ }
539
+ }
540
+ 02:24:00.878 [debug] [VERBOSE] STS response received
541
+ {
542
+ "hasVideo": true,
543
+ "hasGif": true,
544
+ "hasImage": true,
545
+ "hasIcons": true
546
+ }
547
+ 02:24:00.878 [debug] ← Exiting auth.getStsCredentials
548
+ {
549
+ "result": "undefined"
550
+ }
551
+ 02:24:00.878 [debug] [VERBOSE] STS credentials received
552
+ {
553
+ "hasVideo": true,
554
+ "hasImage": true,
555
+ "hasGif": true
556
+ }
557
+ 02:24:00.879 [debug] → Entering uploadFile
558
+ {
559
+ "args": {
560
+ "fileType": "video",
561
+ "extension": "mp4",
562
+ "file": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.webm"
563
+ }
564
+ }
565
+ 02:24:00.879 [info] Starting upload of video
566
+ {
567
+ "file": "recording-2025-10-29T07-23-44-988Z.webm",
568
+ "fileType": "video",
569
+ "extension": "mp4",
570
+ "clipId": "1761722640621"
571
+ }
572
+ 02:24:00.879 [debug] → Entering createS3Client
573
+ {
574
+ "args": {}
575
+ }
576
+ 02:24:00.879 [debug] [VERBOSE] Creating S3 client
577
+ {
578
+ "fallbackRegion": "us-east-2",
579
+ "bucket": "replayable-prod",
580
+ "hasAccessKey": true,
581
+ "hasSecretKey": true,
582
+ "hasSessionToken": true
583
+ }
584
+ 02:24:00.882 [debug] S3 client created
585
+ {
586
+ "configuredRegion": "us-east-2",
587
+ "bucket": "replayable-prod"
588
+ }
589
+ 02:24:00.882 [debug] ← Exiting createS3Client
590
+ {
591
+ "result": "undefined"
592
+ }
593
+ 02:24:00.882 [debug] Generating upload params:
594
+ {
595
+ "bucket": "replayable-prod",
596
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.mp4",
597
+ "contentType": "video/mp4"
598
+ }
599
+ 02:24:00.882 [debug] [VERBOSE] File upload details
600
+ {
601
+ "fileSizeBytes": 254482,
602
+ "fileSizeMB": "0.24",
603
+ "bucket": "replayable-prod",
604
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.mp4",
605
+ "contentType": "video/mp4"
606
+ }
607
+ 02:24:00.883 [debug] Adding GIF upload to queue
608
+ {
609
+ "gifPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.gif"
610
+ }
611
+ 02:24:00.883 [debug] → Entering uploadFile
612
+ {
613
+ "args": {
614
+ "fileType": "image",
615
+ "extension": "gif",
616
+ "file": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.gif"
617
+ }
618
+ }
619
+ 02:24:00.883 [info] Starting upload of image
620
+ {
621
+ "file": "recording-2025-10-29T07-23-44-988Z.gif",
622
+ "fileType": "image",
623
+ "extension": "gif",
624
+ "clipId": "1761722640621"
625
+ }
626
+ 02:24:00.883 [debug] → Entering createS3Client
627
+ {
628
+ "args": {}
629
+ }
630
+ 02:24:00.883 [debug] [VERBOSE] Creating S3 client
631
+ {
632
+ "fallbackRegion": "us-east-2",
633
+ "bucket": "replayable-prod",
634
+ "hasAccessKey": true,
635
+ "hasSecretKey": true,
636
+ "hasSessionToken": true
637
+ }
638
+ 02:24:00.889 [debug] S3 client created
639
+ {
640
+ "configuredRegion": "us-east-2",
641
+ "bucket": "replayable-prod"
642
+ }
643
+ 02:24:00.890 [debug] ← Exiting createS3Client
644
+ {
645
+ "result": "undefined"
646
+ }
647
+ 02:24:00.890 [debug] Generating upload params:
648
+ {
649
+ "bucket": "replayable-prod",
650
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.gif",
651
+ "contentType": "image/gif"
652
+ }
653
+ 02:24:00.890 [debug] [VERBOSE] File upload details
654
+ {
655
+ "fileSizeBytes": 119939262,
656
+ "fileSizeMB": "114.38",
657
+ "bucket": "replayable-prod",
658
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.gif",
659
+ "contentType": "image/gif"
660
+ }
661
+ 02:24:00.890 [debug] Adding snapshot upload to queue
662
+ {
663
+ "snapshotPath": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.png"
664
+ }
665
+ 02:24:00.890 [debug] → Entering uploadFile
666
+ {
667
+ "args": {
668
+ "fileType": "image",
669
+ "extension": "png",
670
+ "file": "/Users/ianjennings/Development/dashcam-cli-minimal/tmp/recordings/recording-2025-10-29T07-23-44-988Z.png"
671
+ }
672
+ }
673
+ 02:24:00.890 [info] Starting upload of image
674
+ {
675
+ "file": "recording-2025-10-29T07-23-44-988Z.png",
676
+ "fileType": "image",
677
+ "extension": "png",
678
+ "clipId": "1761722640621"
679
+ }
680
+ 02:24:00.890 [debug] → Entering createS3Client
681
+ {
682
+ "args": {}
683
+ }
684
+ 02:24:00.890 [debug] [VERBOSE] Creating S3 client
685
+ {
686
+ "fallbackRegion": "us-east-2",
687
+ "bucket": "replayable-prod",
688
+ "hasAccessKey": true,
689
+ "hasSecretKey": true,
690
+ "hasSessionToken": true
691
+ }
692
+ 02:24:00.890 [debug] S3 client created
693
+ {
694
+ "configuredRegion": "us-east-2",
695
+ "bucket": "replayable-prod"
696
+ }
697
+ 02:24:00.890 [debug] ← Exiting createS3Client
698
+ {
699
+ "result": "undefined"
700
+ }
701
+ 02:24:00.890 [debug] Generating upload params:
702
+ {
703
+ "bucket": "replayable-prod",
704
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.png",
705
+ "contentType": "image/png"
706
+ }
707
+ 02:24:00.890 [debug] [VERBOSE] File upload details
708
+ {
709
+ "fileSizeBytes": 196908,
710
+ "fileSizeMB": "0.19",
711
+ "bucket": "replayable-prod",
712
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.png",
713
+ "contentType": "image/png"
714
+ }
715
+ 02:24:00.890 [info] Starting asset uploads
716
+ {
717
+ "totalUploads": 3
718
+ }
719
+ 02:24:00.890 [debug] Processing logs for upload
720
+ {
721
+ "logCount": 1
722
+ }
723
+ 02:24:00.890 [debug] Trimming logs
724
+ {
725
+ "startTime": 1761722625243,
726
+ "endTime": 1761722640151,
727
+ "duration": 14908
728
+ }
729
+ 02:24:00.899 [info] Trimming logs
730
+ {
731
+ "count": 1
732
+ }
733
+ 02:24:00.899 [debug] Logs trimmed
734
+ {
735
+ "trimmedCount": 0,
736
+ "logsWithContent": 0
737
+ }
738
+ 02:24:00.899 [info] Added log uploads to queue
739
+ {
740
+ "totalUploads": 3,
741
+ "logUploads": 0
742
+ }
743
+ 02:24:01.244 [debug] [VERBOSE] Upload image progress: 100%
744
+ {
745
+ "loaded": 196908,
746
+ "total": 196908,
747
+ "speedMBps": "0.52"
748
+ }
749
+ 02:24:01.244 [debug] ← Exiting uploadFile
750
+ {
751
+ "result": "undefined"
752
+ }
753
+ 02:24:01.323 [debug] [VERBOSE] Upload video progress: 100%
754
+ {
755
+ "loaded": 254482,
756
+ "total": 254482,
757
+ "speedMBps": "0.55"
758
+ }
759
+ 02:24:01.323 [info] Successfully uploaded video
760
+ {
761
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.mp4",
762
+ "location": "https://replayable-prod.s3.us-east-2.amazonaws.com/uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.mp4",
763
+ "duration": "0.4s",
764
+ "averageSpeed": "0.55 MB/s"
765
+ }
766
+ 02:24:01.323 [debug] ← Exiting uploadFile
767
+ {
768
+ "result": "undefined"
769
+ }
770
+ 02:24:06.039 [debug] [VERBOSE] Upload image progress: 30%
771
+ {
772
+ "loaded": 36053182,
773
+ "total": 119939262,
774
+ "speedMBps": "6.67"
775
+ }
776
+ 02:24:07.751 [debug] [VERBOSE] Upload image progress: 100%
777
+ {
778
+ "loaded": 119939262,
779
+ "total": 119939262,
780
+ "speedMBps": "16.66"
781
+ }
782
+ 02:24:07.904 [info] Successfully uploaded image
783
+ {
784
+ "key": "uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.gif",
785
+ "location": "https://replayable-prod.s3.us-east-2.amazonaws.com/uploads/6387dc1e7c5392006384b0a8/6901c11000f26659ed1a91da/6901c11000f26659ed1a91da.gif",
786
+ "duration": "7.0s",
787
+ "averageSpeed": "16.29 MB/s"
788
+ }
789
+ 02:24:07.905 [debug] ← Exiting uploadFile
790
+ {
791
+ "result": "undefined"
792
+ }
793
+ 02:24:07.905 [debug] Cleaning up uploaded files
794
+ {
795
+ "files": [
796
+ "recording-2025-10-29T07-23-44-988Z.webm",
797
+ "recording-2025-10-29T07-23-44-988Z.gif",
798
+ "recording-2025-10-29T07-23-44-988Z.png"
799
+ ]
800
+ }
801
+ 02:24:07.905 [debug] Deleted uploaded file: recording-2025-10-29T07-23-44-988Z.webm
802
+ 02:24:07.919 [debug] Deleted uploaded file: recording-2025-10-29T07-23-44-988Z.gif
803
+ 02:24:07.920 [debug] Deleted uploaded file: recording-2025-10-29T07-23-44-988Z.png
804
+ 02:24:07.920 [debug] Publishing replay...
805
+ 02:24:08.147 [info] Upload process completed successfully
806
+ {
807
+ "replayId": "6901c11000f26659ed1a91da",
808
+ "shareLink": "https://app.dashcam.io/replay/6901c11000f26659ed1a91da?share=QZ4PH5VQI4wpl1xGACI2A"
809
+ }
810
+ 02:24:08.147 [debug] ← Exiting upload
811
+ {
812
+ "result": "undefined"
813
+ }
814
+ Upload completed successfully!