@yhong91/vibetime 0.1.26 → 0.1.27

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 (2) hide show
  1. package/bin/vibetime.mjs +1169 -36
  2. package/package.json +2 -1
package/bin/vibetime.mjs CHANGED
@@ -157,11 +157,736 @@ var init_fs = __esm({
157
157
  }
158
158
  });
159
159
 
160
+ // ../../node_modules/.pnpm/fzstd@0.1.1/node_modules/fzstd/esm/index.mjs
161
+ var esm_exports = {};
162
+ __export(esm_exports, {
163
+ Decompress: () => Decompress,
164
+ ZstdErrorCode: () => ZstdErrorCode,
165
+ decompress: () => decompress
166
+ });
167
+ function decompress(dat, buf) {
168
+ var bufs = [], nb = +!buf;
169
+ var bt = 0, ol = 0;
170
+ for (; dat.length; ) {
171
+ var st = rzfh(dat, nb || buf);
172
+ if (typeof st == "object") {
173
+ if (nb) {
174
+ buf = null;
175
+ if (st.w.length == st.u) {
176
+ bufs.push(buf = st.w);
177
+ ol += st.u;
178
+ }
179
+ } else {
180
+ bufs.push(buf);
181
+ st.e = 0;
182
+ }
183
+ for (; !st.l; ) {
184
+ var blk = rzb(dat, st, buf);
185
+ if (!blk)
186
+ err(5);
187
+ if (buf)
188
+ st.e = st.y;
189
+ else {
190
+ bufs.push(blk);
191
+ ol += blk.length;
192
+ cpw(st.w, 0, blk.length);
193
+ st.w.set(blk, st.w.length - blk.length);
194
+ }
195
+ }
196
+ bt = st.b + st.c * 4;
197
+ } else
198
+ bt = st;
199
+ dat = dat.subarray(bt);
200
+ }
201
+ return cct(bufs, ol);
202
+ }
203
+ var ab, u8, u16, i16, i32, slc, fill, cpw, ZstdErrorCode, ec, err, rb, b4, rzfh, msb, rfse, rhu, dllt, dmlt, doct, b2bl, llb, llbl, mlb, mlbl, dhu, dhu4, rzb, cct, Decompress;
204
+ var init_esm = __esm({
205
+ "../../node_modules/.pnpm/fzstd@0.1.1/node_modules/fzstd/esm/index.mjs"() {
206
+ ab = ArrayBuffer;
207
+ u8 = Uint8Array;
208
+ u16 = Uint16Array;
209
+ i16 = Int16Array;
210
+ i32 = Int32Array;
211
+ slc = function(v, s, e) {
212
+ if (u8.prototype.slice)
213
+ return u8.prototype.slice.call(v, s, e);
214
+ if (s == null || s < 0)
215
+ s = 0;
216
+ if (e == null || e > v.length)
217
+ e = v.length;
218
+ var n = new u8(e - s);
219
+ n.set(v.subarray(s, e));
220
+ return n;
221
+ };
222
+ fill = function(v, n, s, e) {
223
+ if (u8.prototype.fill)
224
+ return u8.prototype.fill.call(v, n, s, e);
225
+ if (s == null || s < 0)
226
+ s = 0;
227
+ if (e == null || e > v.length)
228
+ e = v.length;
229
+ for (; s < e; ++s)
230
+ v[s] = n;
231
+ return v;
232
+ };
233
+ cpw = function(v, t, s, e) {
234
+ if (u8.prototype.copyWithin)
235
+ return u8.prototype.copyWithin.call(v, t, s, e);
236
+ if (s == null || s < 0)
237
+ s = 0;
238
+ if (e == null || e > v.length)
239
+ e = v.length;
240
+ while (s < e) {
241
+ v[t++] = v[s++];
242
+ }
243
+ };
244
+ ZstdErrorCode = {
245
+ InvalidData: 0,
246
+ WindowSizeTooLarge: 1,
247
+ InvalidBlockType: 2,
248
+ FSEAccuracyTooHigh: 3,
249
+ DistanceTooFarBack: 4,
250
+ UnexpectedEOF: 5
251
+ };
252
+ ec = [
253
+ "invalid zstd data",
254
+ "window size too large (>2046MB)",
255
+ "invalid block type",
256
+ "FSE accuracy too high",
257
+ "match distance too far back",
258
+ "unexpected EOF"
259
+ ];
260
+ err = function(ind, msg, nt) {
261
+ var e = new Error(msg || ec[ind]);
262
+ e.code = ind;
263
+ if (Error.captureStackTrace)
264
+ Error.captureStackTrace(e, err);
265
+ if (!nt)
266
+ throw e;
267
+ return e;
268
+ };
269
+ rb = function(d, b, n) {
270
+ var i = 0, o = 0;
271
+ for (; i < n; ++i)
272
+ o |= d[b++] << (i << 3);
273
+ return o;
274
+ };
275
+ b4 = function(d, b) {
276
+ return (d[b] | d[b + 1] << 8 | d[b + 2] << 16 | d[b + 3] << 24) >>> 0;
277
+ };
278
+ rzfh = function(dat, w) {
279
+ var n3 = dat[0] | dat[1] << 8 | dat[2] << 16;
280
+ if (n3 == 3126568 && dat[3] == 253) {
281
+ var flg = dat[4];
282
+ var ss = flg >> 5 & 1, cc = flg >> 2 & 1, df = flg & 3, fcf = flg >> 6;
283
+ if (flg & 8)
284
+ err(0);
285
+ var bt = 6 - ss;
286
+ var db = df == 3 ? 4 : df;
287
+ var di = rb(dat, bt, db);
288
+ bt += db;
289
+ var fsb = fcf ? 1 << fcf : ss;
290
+ var fss = rb(dat, bt, fsb) + (fcf == 1 && 256);
291
+ var ws = fss;
292
+ if (!ss) {
293
+ var wb = 1 << 10 + (dat[5] >> 3);
294
+ ws = wb + (wb >> 3) * (dat[5] & 7);
295
+ }
296
+ if (ws > 2145386496)
297
+ err(1);
298
+ var buf = new u8((w == 1 ? fss || ws : w ? 0 : ws) + 12);
299
+ buf[0] = 1, buf[4] = 4, buf[8] = 8;
300
+ return {
301
+ b: bt + fsb,
302
+ y: 0,
303
+ l: 0,
304
+ d: di,
305
+ w: w && w != 1 ? w : buf.subarray(12),
306
+ e: ws,
307
+ o: new i32(buf.buffer, 0, 3),
308
+ u: fss,
309
+ c: cc,
310
+ m: Math.min(131072, ws)
311
+ };
312
+ } else if ((n3 >> 4 | dat[3] << 20) == 25481893) {
313
+ return b4(dat, 4) + 8;
314
+ }
315
+ err(0);
316
+ };
317
+ msb = function(val) {
318
+ var bits = 0;
319
+ for (; 1 << bits <= val; ++bits)
320
+ ;
321
+ return bits - 1;
322
+ };
323
+ rfse = function(dat, bt, mal) {
324
+ var tpos = (bt << 3) + 4;
325
+ var al = (dat[bt] & 15) + 5;
326
+ if (al > mal)
327
+ err(3);
328
+ var sz = 1 << al;
329
+ var probs = sz, sym = -1, re = -1, i = -1, ht = sz;
330
+ var buf = new ab(512 + (sz << 2));
331
+ var freq = new i16(buf, 0, 256);
332
+ var dstate = new u16(buf, 0, 256);
333
+ var nstate = new u16(buf, 512, sz);
334
+ var bb1 = 512 + (sz << 1);
335
+ var syms = new u8(buf, bb1, sz);
336
+ var nbits = new u8(buf, bb1 + sz);
337
+ while (sym < 255 && probs > 0) {
338
+ var bits = msb(probs + 1);
339
+ var cbt = tpos >> 3;
340
+ var msk = (1 << bits + 1) - 1;
341
+ var val = (dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (tpos & 7) & msk;
342
+ var msk1fb = (1 << bits) - 1;
343
+ var msv = msk - probs - 1;
344
+ var sval = val & msk1fb;
345
+ if (sval < msv)
346
+ tpos += bits, val = sval;
347
+ else {
348
+ tpos += bits + 1;
349
+ if (val > msk1fb)
350
+ val -= msv;
351
+ }
352
+ freq[++sym] = --val;
353
+ if (val == -1) {
354
+ probs += val;
355
+ syms[--ht] = sym;
356
+ } else
357
+ probs -= val;
358
+ if (!val) {
359
+ do {
360
+ var rbt = tpos >> 3;
361
+ re = (dat[rbt] | dat[rbt + 1] << 8) >> (tpos & 7) & 3;
362
+ tpos += 2;
363
+ sym += re;
364
+ } while (re == 3);
365
+ }
366
+ }
367
+ if (sym > 255 || probs)
368
+ err(0);
369
+ var sympos = 0;
370
+ var sstep = (sz >> 1) + (sz >> 3) + 3;
371
+ var smask = sz - 1;
372
+ for (var s = 0; s <= sym; ++s) {
373
+ var sf = freq[s];
374
+ if (sf < 1) {
375
+ dstate[s] = -sf;
376
+ continue;
377
+ }
378
+ for (i = 0; i < sf; ++i) {
379
+ syms[sympos] = s;
380
+ do {
381
+ sympos = sympos + sstep & smask;
382
+ } while (sympos >= ht);
383
+ }
384
+ }
385
+ if (sympos)
386
+ err(0);
387
+ for (i = 0; i < sz; ++i) {
388
+ var ns = dstate[syms[i]]++;
389
+ var nb = nbits[i] = al - msb(ns);
390
+ nstate[i] = (ns << nb) - sz;
391
+ }
392
+ return [tpos + 7 >> 3, {
393
+ b: al,
394
+ s: syms,
395
+ n: nbits,
396
+ t: nstate
397
+ }];
398
+ };
399
+ rhu = function(dat, bt) {
400
+ var i = 0, wc = -1;
401
+ var buf = new u8(292), hb = dat[bt];
402
+ var hw = buf.subarray(0, 256);
403
+ var rc = buf.subarray(256, 268);
404
+ var ri = new u16(buf.buffer, 268);
405
+ if (hb < 128) {
406
+ var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];
407
+ bt += hb;
408
+ var epos = ebt << 3;
409
+ var lb = dat[bt];
410
+ if (!lb)
411
+ err(0);
412
+ var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;
413
+ var fpos = (++bt << 3) - 8 + msb(lb);
414
+ for (; ; ) {
415
+ fpos -= btr1;
416
+ if (fpos < epos)
417
+ break;
418
+ var cbt = fpos >> 3;
419
+ st1 += (dat[cbt] | dat[cbt + 1] << 8) >> (fpos & 7) & (1 << btr1) - 1;
420
+ hw[++wc] = fdt.s[st1];
421
+ fpos -= btr2;
422
+ if (fpos < epos)
423
+ break;
424
+ cbt = fpos >> 3;
425
+ st2 += (dat[cbt] | dat[cbt + 1] << 8) >> (fpos & 7) & (1 << btr2) - 1;
426
+ hw[++wc] = fdt.s[st2];
427
+ btr1 = fdt.n[st1];
428
+ st1 = fdt.t[st1];
429
+ btr2 = fdt.n[st2];
430
+ st2 = fdt.t[st2];
431
+ }
432
+ if (++wc > 255)
433
+ err(0);
434
+ } else {
435
+ wc = hb - 127;
436
+ for (; i < wc; i += 2) {
437
+ var byte = dat[++bt];
438
+ hw[i] = byte >> 4;
439
+ hw[i + 1] = byte & 15;
440
+ }
441
+ ++bt;
442
+ }
443
+ var wes = 0;
444
+ for (i = 0; i < wc; ++i) {
445
+ var wt = hw[i];
446
+ if (wt > 11)
447
+ err(0);
448
+ wes += wt && 1 << wt - 1;
449
+ }
450
+ var mb = msb(wes) + 1;
451
+ var ts = 1 << mb;
452
+ var rem = ts - wes;
453
+ if (rem & rem - 1)
454
+ err(0);
455
+ hw[wc++] = msb(rem) + 1;
456
+ for (i = 0; i < wc; ++i) {
457
+ var wt = hw[i];
458
+ ++rc[hw[i] = wt && mb + 1 - wt];
459
+ }
460
+ var hbuf = new u8(ts << 1);
461
+ var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);
462
+ ri[mb] = 0;
463
+ for (i = mb; i > 0; --i) {
464
+ var pv = ri[i];
465
+ fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << mb - i));
466
+ }
467
+ if (ri[0] != ts)
468
+ err(0);
469
+ for (i = 0; i < wc; ++i) {
470
+ var bits = hw[i];
471
+ if (bits) {
472
+ var code = ri[bits];
473
+ fill(syms, i, code, ri[bits] = code + (1 << mb - bits));
474
+ }
475
+ }
476
+ return [bt, {
477
+ n: nb,
478
+ b: mb,
479
+ s: syms
480
+ }];
481
+ };
482
+ dllt = rfse(/* @__PURE__ */ new u8([
483
+ 81,
484
+ 16,
485
+ 99,
486
+ 140,
487
+ 49,
488
+ 198,
489
+ 24,
490
+ 99,
491
+ 12,
492
+ 33,
493
+ 196,
494
+ 24,
495
+ 99,
496
+ 102,
497
+ 102,
498
+ 134,
499
+ 70,
500
+ 146,
501
+ 4
502
+ ]), 0, 6)[1];
503
+ dmlt = rfse(/* @__PURE__ */ new u8([
504
+ 33,
505
+ 20,
506
+ 196,
507
+ 24,
508
+ 99,
509
+ 140,
510
+ 33,
511
+ 132,
512
+ 16,
513
+ 66,
514
+ 8,
515
+ 33,
516
+ 132,
517
+ 16,
518
+ 66,
519
+ 8,
520
+ 33,
521
+ 68,
522
+ 68,
523
+ 68,
524
+ 68,
525
+ 68,
526
+ 68,
527
+ 68,
528
+ 68,
529
+ 36,
530
+ 9
531
+ ]), 0, 6)[1];
532
+ doct = rfse(/* @__PURE__ */ new u8([
533
+ 32,
534
+ 132,
535
+ 16,
536
+ 66,
537
+ 102,
538
+ 70,
539
+ 68,
540
+ 68,
541
+ 68,
542
+ 68,
543
+ 36,
544
+ 73,
545
+ 2
546
+ ]), 0, 5)[1];
547
+ b2bl = function(b, s) {
548
+ var len = b.length, bl = new i32(len);
549
+ for (var i = 0; i < len; ++i) {
550
+ bl[i] = s;
551
+ s += 1 << b[i];
552
+ }
553
+ return bl;
554
+ };
555
+ llb = /* @__PURE__ */ new u8((/* @__PURE__ */ new i32([
556
+ 0,
557
+ 0,
558
+ 0,
559
+ 0,
560
+ 16843009,
561
+ 50528770,
562
+ 134678020,
563
+ 202050057,
564
+ 269422093
565
+ ])).buffer, 0, 36);
566
+ llbl = /* @__PURE__ */ b2bl(llb, 0);
567
+ mlb = /* @__PURE__ */ new u8((/* @__PURE__ */ new i32([
568
+ 0,
569
+ 0,
570
+ 0,
571
+ 0,
572
+ 0,
573
+ 0,
574
+ 0,
575
+ 0,
576
+ 16843009,
577
+ 50528770,
578
+ 117769220,
579
+ 185207048,
580
+ 252579084,
581
+ 16
582
+ ])).buffer, 0, 53);
583
+ mlbl = /* @__PURE__ */ b2bl(mlb, 3);
584
+ dhu = function(dat, out, hu) {
585
+ var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;
586
+ if (!lb)
587
+ err(0);
588
+ var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;
589
+ for (; pos > eb && i < ss; ) {
590
+ var cbt = pos >> 3;
591
+ var val = (dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (pos & 7);
592
+ st = (st << btr | val) & msk;
593
+ out[++i] = hu.s[st];
594
+ pos -= btr = hu.n[st];
595
+ }
596
+ if (pos != eb || i + 1 != ss)
597
+ err(0);
598
+ };
599
+ dhu4 = function(dat, out, hu) {
600
+ var bt = 6;
601
+ var ss = out.length, sz1 = ss + 3 >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;
602
+ dhu(dat.subarray(bt, bt += dat[0] | dat[1] << 8), out.subarray(0, sz1), hu);
603
+ dhu(dat.subarray(bt, bt += dat[2] | dat[3] << 8), out.subarray(sz1, sz2), hu);
604
+ dhu(dat.subarray(bt, bt += dat[4] | dat[5] << 8), out.subarray(sz2, sz3), hu);
605
+ dhu(dat.subarray(bt), out.subarray(sz3), hu);
606
+ };
607
+ rzb = function(dat, st, out) {
608
+ var _a;
609
+ var bt = st.b;
610
+ var b0 = dat[bt], btype = b0 >> 1 & 3;
611
+ st.l = b0 & 1;
612
+ var sz = b0 >> 3 | dat[bt + 1] << 5 | dat[bt + 2] << 13;
613
+ var ebt = (bt += 3) + sz;
614
+ if (btype == 1) {
615
+ if (bt >= dat.length)
616
+ return;
617
+ st.b = bt + 1;
618
+ if (out) {
619
+ fill(out, dat[bt], st.y, st.y += sz);
620
+ return out;
621
+ }
622
+ return fill(new u8(sz), dat[bt]);
623
+ }
624
+ if (ebt > dat.length)
625
+ return;
626
+ if (btype == 0) {
627
+ st.b = ebt;
628
+ if (out) {
629
+ out.set(dat.subarray(bt, ebt), st.y);
630
+ st.y += sz;
631
+ return out;
632
+ }
633
+ return slc(dat, bt, ebt);
634
+ }
635
+ if (btype == 2) {
636
+ var b3 = dat[bt], lbt = b3 & 3, sf = b3 >> 2 & 3;
637
+ var lss = b3 >> 4, lcs = 0, s4 = 0;
638
+ if (lbt < 2) {
639
+ if (sf & 1)
640
+ lss |= dat[++bt] << 4 | (sf & 2 && dat[++bt] << 12);
641
+ else
642
+ lss = b3 >> 3;
643
+ } else {
644
+ s4 = sf;
645
+ if (sf < 2)
646
+ lss |= (dat[++bt] & 63) << 4, lcs = dat[bt] >> 6 | dat[++bt] << 2;
647
+ else if (sf == 2)
648
+ lss |= dat[++bt] << 4 | (dat[++bt] & 3) << 12, lcs = dat[bt] >> 2 | dat[++bt] << 6;
649
+ else
650
+ lss |= dat[++bt] << 4 | (dat[++bt] & 63) << 12, lcs = dat[bt] >> 6 | dat[++bt] << 2 | dat[++bt] << 10;
651
+ }
652
+ ++bt;
653
+ var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);
654
+ var spl = buf.length - lss;
655
+ if (lbt == 0)
656
+ buf.set(dat.subarray(bt, bt += lss), spl);
657
+ else if (lbt == 1)
658
+ fill(buf, dat[bt++], spl);
659
+ else {
660
+ var hu = st.h;
661
+ if (lbt == 2) {
662
+ var hud = rhu(dat, bt);
663
+ lcs += bt - (bt = hud[0]);
664
+ st.h = hu = hud[1];
665
+ } else if (!hu)
666
+ err(0);
667
+ (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);
668
+ }
669
+ var ns = dat[bt++];
670
+ if (ns) {
671
+ if (ns == 255)
672
+ ns = (dat[bt++] | dat[bt++] << 8) + 32512;
673
+ else if (ns > 127)
674
+ ns = ns - 128 << 8 | dat[bt++];
675
+ var scm = dat[bt++];
676
+ if (scm & 3)
677
+ err(0);
678
+ var dts = [dmlt, doct, dllt];
679
+ for (var i = 2; i > -1; --i) {
680
+ var md = scm >> (i << 1) + 2 & 3;
681
+ if (md == 1) {
682
+ var rbuf = new u8([0, 0, dat[bt++]]);
683
+ dts[i] = {
684
+ s: rbuf.subarray(2, 3),
685
+ n: rbuf.subarray(0, 1),
686
+ t: new u16(rbuf.buffer, 0, 1),
687
+ b: 0
688
+ };
689
+ } else if (md == 2) {
690
+ _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];
691
+ } else if (md == 3) {
692
+ if (!st.t)
693
+ err(0);
694
+ dts[i] = st.t[i];
695
+ }
696
+ }
697
+ var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];
698
+ var lb = dat[ebt - 1];
699
+ if (!lb)
700
+ err(0);
701
+ var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;
702
+ var lst = (dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << llt.b) - 1;
703
+ cbt = (spos -= oct.b) >> 3;
704
+ var ost = (dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << oct.b) - 1;
705
+ cbt = (spos -= mlt.b) >> 3;
706
+ var mst = (dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << mlt.b) - 1;
707
+ for (++ns; --ns; ) {
708
+ var llc = llt.s[lst];
709
+ var lbtr = llt.n[lst];
710
+ var mlc = mlt.s[mst];
711
+ var mbtr = mlt.n[mst];
712
+ var ofc = oct.s[ost];
713
+ var obtr = oct.n[ost];
714
+ cbt = (spos -= ofc) >> 3;
715
+ var ofp = 1 << ofc;
716
+ var off = ofp + ((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16 | dat[cbt + 3] << 24) >>> (spos & 7) & ofp - 1);
717
+ cbt = (spos -= mlb[mlc]) >> 3;
718
+ var ml = mlbl[mlc] + ((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (spos & 7) & (1 << mlb[mlc]) - 1);
719
+ cbt = (spos -= llb[llc]) >> 3;
720
+ var ll = llbl[llc] + ((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (spos & 7) & (1 << llb[llc]) - 1);
721
+ cbt = (spos -= lbtr) >> 3;
722
+ lst = llt.t[lst] + ((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << lbtr) - 1);
723
+ cbt = (spos -= mbtr) >> 3;
724
+ mst = mlt.t[mst] + ((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << mbtr) - 1);
725
+ cbt = (spos -= obtr) >> 3;
726
+ ost = oct.t[ost] + ((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << obtr) - 1);
727
+ if (off > 3) {
728
+ st.o[2] = st.o[1];
729
+ st.o[1] = st.o[0];
730
+ st.o[0] = off -= 3;
731
+ } else {
732
+ var idx = off - (ll != 0);
733
+ if (idx) {
734
+ off = idx == 3 ? st.o[0] - 1 : st.o[idx];
735
+ if (idx > 1)
736
+ st.o[2] = st.o[1];
737
+ st.o[1] = st.o[0];
738
+ st.o[0] = off;
739
+ } else
740
+ off = st.o[0];
741
+ }
742
+ for (var i = 0; i < ll; ++i) {
743
+ buf[oubt + i] = buf[spl + i];
744
+ }
745
+ oubt += ll, spl += ll;
746
+ var stin = oubt - off;
747
+ if (stin < 0) {
748
+ var len = -stin;
749
+ var bs = st.e + stin;
750
+ if (len > ml)
751
+ len = ml;
752
+ for (var i = 0; i < len; ++i) {
753
+ buf[oubt + i] = st.w[bs + i];
754
+ }
755
+ oubt += len, ml -= len, stin = 0;
756
+ }
757
+ for (var i = 0; i < ml; ++i) {
758
+ buf[oubt + i] = buf[stin + i];
759
+ }
760
+ oubt += ml;
761
+ }
762
+ if (oubt != spl) {
763
+ while (spl < buf.length) {
764
+ buf[oubt++] = buf[spl++];
765
+ }
766
+ } else
767
+ oubt = buf.length;
768
+ if (out)
769
+ st.y += oubt;
770
+ else
771
+ buf = slc(buf, 0, oubt);
772
+ } else if (out) {
773
+ st.y += lss;
774
+ if (spl) {
775
+ for (var i = 0; i < lss; ++i) {
776
+ buf[i] = buf[spl + i];
777
+ }
778
+ }
779
+ } else if (spl)
780
+ buf = slc(buf, spl);
781
+ st.b = ebt;
782
+ return buf;
783
+ }
784
+ err(2);
785
+ };
786
+ cct = function(bufs, ol) {
787
+ if (bufs.length == 1)
788
+ return bufs[0];
789
+ var buf = new u8(ol);
790
+ for (var i = 0, b = 0; i < bufs.length; ++i) {
791
+ var chk = bufs[i];
792
+ buf.set(chk, b);
793
+ b += chk.length;
794
+ }
795
+ return buf;
796
+ };
797
+ Decompress = /* @__PURE__ */ (function() {
798
+ function Decompress2(ondata) {
799
+ this.ondata = ondata;
800
+ this.c = [];
801
+ this.l = 0;
802
+ this.z = 0;
803
+ }
804
+ Decompress2.prototype.push = function(chunk, final) {
805
+ if (typeof this.s == "number") {
806
+ var sub = Math.min(chunk.length, this.s);
807
+ chunk = chunk.subarray(sub);
808
+ this.s -= sub;
809
+ }
810
+ var sl = chunk.length;
811
+ var ncs = sl + this.l;
812
+ if (!this.s) {
813
+ if (final) {
814
+ if (!ncs) {
815
+ this.ondata(new u8(0), true);
816
+ return;
817
+ }
818
+ if (ncs < 5)
819
+ err(5);
820
+ } else if (ncs < 18) {
821
+ this.c.push(chunk);
822
+ this.l = ncs;
823
+ return;
824
+ }
825
+ if (this.l) {
826
+ this.c.push(chunk);
827
+ chunk = cct(this.c, ncs);
828
+ this.c = [];
829
+ this.l = 0;
830
+ }
831
+ if (typeof (this.s = rzfh(chunk)) == "number")
832
+ return this.push(chunk, final);
833
+ }
834
+ if (typeof this.s != "number") {
835
+ if (ncs < (this.z || 3)) {
836
+ if (final)
837
+ err(5);
838
+ this.c.push(chunk);
839
+ this.l = ncs;
840
+ return;
841
+ }
842
+ if (this.l) {
843
+ this.c.push(chunk);
844
+ chunk = cct(this.c, ncs);
845
+ this.c = [];
846
+ this.l = 0;
847
+ }
848
+ if (!this.z && ncs < (this.z = chunk[this.s.b] & 2 ? 4 : 3 + (chunk[this.s.b] >> 3 | chunk[this.s.b + 1] << 5 | chunk[this.s.b + 2] << 13))) {
849
+ if (final)
850
+ err(5);
851
+ this.c.push(chunk);
852
+ this.l = ncs;
853
+ return;
854
+ } else
855
+ this.z = 0;
856
+ for (; ; ) {
857
+ var blk = rzb(chunk, this.s);
858
+ if (!blk) {
859
+ if (final)
860
+ err(5);
861
+ var adc = chunk.subarray(this.s.b);
862
+ this.s.b = 0;
863
+ this.c.push(adc), this.l += adc.length;
864
+ return;
865
+ } else {
866
+ this.ondata(blk, false);
867
+ cpw(this.s.w, 0, blk.length);
868
+ this.s.w.set(blk, this.s.w.length - blk.length);
869
+ }
870
+ if (this.s.l) {
871
+ var rest = chunk.subarray(this.s.b);
872
+ this.s = this.s.c * 4;
873
+ this.push(rest, final);
874
+ return;
875
+ }
876
+ }
877
+ } else if (final)
878
+ err(5);
879
+ };
880
+ return Decompress2;
881
+ })();
882
+ }
883
+ });
884
+
160
885
  // src/cli.ts
161
886
  import { spawn as spawn2, spawnSync } from "node:child_process";
162
887
  import { mkdir as mkdir5, open, rm, stat as stat13, writeFile as writeFile4 } from "node:fs/promises";
163
- import os9 from "node:os";
164
- import path22 from "node:path";
888
+ import os10 from "node:os";
889
+ import path23 from "node:path";
165
890
  import { fileURLToPath } from "node:url";
166
891
 
167
892
  // ../shared/src/index.ts
@@ -199,7 +924,7 @@ var TELEMETRY_EVENT_TYPES = [
199
924
  "agent.operation"
200
925
  ];
201
926
  var FILE_ACTIVITY_OPERATIONS = ["read", "search", "create", "write", "edit", "delete"];
202
- var BACKFILL_SOURCE_IDS = ["codex", "claude-code", "claude-cowork", "copilot", "opencode", "pi", "agy", "codebuddy", "qoder", "qoder-cn", "workbuddy", "zcode", "grok-build"];
927
+ var BACKFILL_SOURCE_IDS = ["codex", "claude-code", "claude-cowork", "copilot", "opencode", "pi", "agy", "codebuddy", "qoder", "qoder-cn", "workbuddy", "zcode", "grok-build", "zed"];
203
928
  function createWorkspaceId(input) {
204
929
  const basis = input.repoUrl || input.repoRoot || input.projectName || "unknown";
205
930
  return `workspace_${fnv1a(basis)}`;
@@ -1203,7 +1928,7 @@ function countTextLines(text) {
1203
1928
  }
1204
1929
 
1205
1930
  // src/lib/constants.ts
1206
- var PACKAGE_VERSION = true ? "0.1.26" : "0.1.1";
1931
+ var PACKAGE_VERSION = true ? "0.1.27" : "0.1.1";
1207
1932
  var DEFAULT_API_URL = "http://121.196.224.82:3001";
1208
1933
  var DEFAULT_BACKFILL_BATCH_SIZE = 50;
1209
1934
  var DEFAULT_BACKFILL_BATCH_BYTES = 800 * 1024;
@@ -1228,6 +1953,12 @@ function objectField(object, key) {
1228
1953
  }
1229
1954
  return object[key];
1230
1955
  }
1956
+ function arrayField(object, key) {
1957
+ if (!isPlainObject(object) || !Array.isArray(object[key])) {
1958
+ return [];
1959
+ }
1960
+ return object[key];
1961
+ }
1231
1962
  function isPlainObject(value) {
1232
1963
  return value !== null && typeof value === "object" && !Array.isArray(value);
1233
1964
  }
@@ -2907,7 +3638,7 @@ function fileActivitiesFromClaudeToolUse(tool, input, ts, cwd) {
2907
3638
  const metrics = fileMetricsFromClaudeToolInput(tool, input);
2908
3639
  addResolvedPathActivity(changes, filePath, operation, ts, cwd, workdir, metrics);
2909
3640
  }
2910
- for (const edit of arrayField(input, "edits")) {
3641
+ for (const edit of arrayField2(input, "edits")) {
2911
3642
  if (!isPlainObject(edit)) {
2912
3643
  continue;
2913
3644
  }
@@ -2951,17 +3682,17 @@ function fileMetricsFromClaudeToolInput(tool, input) {
2951
3682
  }
2952
3683
  return {};
2953
3684
  }
2954
- function arrayField(object, key) {
3685
+ function arrayField2(object, key) {
2955
3686
  if (!isPlainObject(object) || !Array.isArray(object[key])) {
2956
3687
  return [];
2957
3688
  }
2958
3689
  return object[key];
2959
3690
  }
2960
3691
  function claudeToolUseItems(message) {
2961
- return arrayField(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
3692
+ return arrayField2(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
2962
3693
  }
2963
3694
  function claudeToolResultItems(message) {
2964
- return arrayField(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
3695
+ return arrayField2(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
2965
3696
  }
2966
3697
  function isClaudeToolResultMessage(message) {
2967
3698
  return claudeToolResultItems(message).length > 0;
@@ -4617,7 +5348,7 @@ function fileActivitiesFromFunctionCall(payload, payloadType, ts, cwd) {
4617
5348
  for (const key of ["file_path", "path", "notebook_path"]) {
4618
5349
  addResolvedPathActivity(changes, stringField(args, key), operation, ts, cwd, workdir);
4619
5350
  }
4620
- for (const file of arrayField2(args, "files")) {
5351
+ for (const file of arrayField3(args, "files")) {
4621
5352
  if (typeof file === "string") {
4622
5353
  addResolvedPathActivity(changes, file, operation, ts, cwd, workdir);
4623
5354
  }
@@ -4630,7 +5361,7 @@ function fileActivitiesFromFunctionCall(payload, payloadType, ts, cwd) {
4630
5361
  }
4631
5362
  return [...changes.values()];
4632
5363
  }
4633
- function arrayField2(object, key) {
5364
+ function arrayField3(object, key) {
4634
5365
  if (!isPlainObject(object) || !Array.isArray(object[key])) {
4635
5366
  return [];
4636
5367
  }
@@ -6972,7 +7703,7 @@ function fileActivitiesFromQoderCnToolUse(tool, input, ts, cwd) {
6972
7703
  const metrics = fileMetricsFromQoderCnToolInput(tool, input);
6973
7704
  addResolvedPathActivity(changes, filePath, operation, ts, cwd, workdir, metrics);
6974
7705
  }
6975
- for (const edit of arrayField3(input, "edits")) {
7706
+ for (const edit of arrayField4(input, "edits")) {
6976
7707
  if (!isPlainObject(edit)) {
6977
7708
  continue;
6978
7709
  }
@@ -7016,17 +7747,17 @@ function fileMetricsFromQoderCnToolInput(tool, input) {
7016
7747
  }
7017
7748
  return {};
7018
7749
  }
7019
- function arrayField3(object, key) {
7750
+ function arrayField4(object, key) {
7020
7751
  if (!isPlainObject(object) || !Array.isArray(object[key])) {
7021
7752
  return [];
7022
7753
  }
7023
7754
  return object[key];
7024
7755
  }
7025
7756
  function qoderCnToolUseItems(message) {
7026
- return arrayField3(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
7757
+ return arrayField4(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
7027
7758
  }
7028
7759
  function qoderCnToolResultItems(message) {
7029
- return arrayField3(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
7760
+ return arrayField4(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
7030
7761
  }
7031
7762
  function isQoderCnToolResultMessage(message) {
7032
7763
  return qoderCnToolResultItems(message).length > 0;
@@ -7715,7 +8446,7 @@ function fileActivitiesFromQoderToolUse(tool, input, ts, cwd) {
7715
8446
  const metrics = fileMetricsFromQoderToolInput(tool, input);
7716
8447
  addResolvedPathActivity(changes, filePath, operation, ts, cwd, workdir, metrics);
7717
8448
  }
7718
- for (const edit of arrayField4(input, "edits")) {
8449
+ for (const edit of arrayField5(input, "edits")) {
7719
8450
  if (!isPlainObject(edit)) {
7720
8451
  continue;
7721
8452
  }
@@ -7759,17 +8490,17 @@ function fileMetricsFromQoderToolInput(tool, input) {
7759
8490
  }
7760
8491
  return {};
7761
8492
  }
7762
- function arrayField4(object, key) {
8493
+ function arrayField5(object, key) {
7763
8494
  if (!isPlainObject(object) || !Array.isArray(object[key])) {
7764
8495
  return [];
7765
8496
  }
7766
8497
  return object[key];
7767
8498
  }
7768
8499
  function qoderToolUseItems(message) {
7769
- return arrayField4(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
8500
+ return arrayField5(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_use");
7770
8501
  }
7771
8502
  function qoderToolResultItems(message) {
7772
- return arrayField4(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
8503
+ return arrayField5(message, "content").filter((item) => isPlainObject(item) && item.type === "tool_result");
7773
8504
  }
7774
8505
  function isQoderToolResultMessage(message) {
7775
8506
  return qoderToolResultItems(message).length > 0;
@@ -8842,6 +9573,404 @@ function createZCodeAdapter() {
8842
9573
  };
8843
9574
  }
8844
9575
 
9576
+ // src/adapters/zed.ts
9577
+ import os9 from "node:os";
9578
+ import path20 from "node:path";
9579
+ function zedThreadsCandidates(home, env) {
9580
+ const candidates = [];
9581
+ const platform2 = process.platform;
9582
+ if (platform2 === "darwin") {
9583
+ candidates.push(path20.join(home, "Library", "Application Support", "Zed", "threads", "threads.db"));
9584
+ } else if (platform2 === "win32") {
9585
+ const appdata = env?.APPDATA;
9586
+ if (appdata && appdata.trim()) {
9587
+ candidates.push(path20.join(path20.resolve(appdata), "Zed", "threads", "threads.db"));
9588
+ }
9589
+ candidates.push(path20.join(home, "AppData", "Roaming", "Zed", "threads", "threads.db"));
9590
+ } else {
9591
+ const xdgData = env?.XDG_DATA_HOME;
9592
+ if (xdgData && xdgData.trim()) {
9593
+ candidates.push(path20.join(path20.resolve(xdgData), "zed", "threads", "threads.db"));
9594
+ }
9595
+ candidates.push(path20.join(home, ".local", "share", "zed", "threads", "threads.db"));
9596
+ const xdgConfig = env?.XDG_CONFIG_HOME;
9597
+ if (xdgConfig && xdgConfig.trim()) {
9598
+ candidates.push(path20.join(path20.resolve(xdgConfig), "zed", "threads", "threads.db"));
9599
+ }
9600
+ candidates.push(path20.join(home, ".config", "zed", "threads", "threads.db"));
9601
+ }
9602
+ return candidates;
9603
+ }
9604
+ function zedConfigDir(home, env) {
9605
+ const platform2 = process.platform;
9606
+ if (platform2 === "darwin") {
9607
+ return path20.join(home, "Library", "Application Support", "Zed");
9608
+ }
9609
+ if (platform2 === "win32") {
9610
+ const appdata = env?.APPDATA;
9611
+ if (appdata && appdata.trim()) {
9612
+ return path20.join(path20.resolve(appdata), "Zed");
9613
+ }
9614
+ return path20.join(home, "AppData", "Roaming", "Zed");
9615
+ }
9616
+ const xdgConfig = env?.XDG_CONFIG_HOME;
9617
+ if (xdgConfig && xdgConfig.trim()) {
9618
+ return path20.join(path20.resolve(xdgConfig), "zed");
9619
+ }
9620
+ return path20.join(home, ".config", "zed");
9621
+ }
9622
+ function baseZedEvent(event) {
9623
+ return {
9624
+ schemaVersion: AGENT_TIME_SCHEMA_VERSION,
9625
+ source: "zed",
9626
+ agent: "zed",
9627
+ workspaceId: createWorkspaceId({ projectName: event.project, repoRoot: event.cwd }),
9628
+ ...event
9629
+ };
9630
+ }
9631
+ function zedUsageFromRequest(entry) {
9632
+ const input = Math.max(0, numberField(entry, "input_tokens") || 0);
9633
+ const output = Math.max(0, numberField(entry, "output_tokens") || 0);
9634
+ if (input <= 0 && output <= 0) {
9635
+ return void 0;
9636
+ }
9637
+ return {
9638
+ tokensInput: input || void 0,
9639
+ tokensOutput: output || void 0,
9640
+ tokensTotal: input + output
9641
+ };
9642
+ }
9643
+ function filePathFromToolInput(tool, input) {
9644
+ if (!isPlainObject(input)) {
9645
+ return void 0;
9646
+ }
9647
+ const direct = stringField(input, "path") || stringField(input, "file_path") || stringField(input, "filePath");
9648
+ if (direct) {
9649
+ return direct;
9650
+ }
9651
+ if (tool === "save_file") {
9652
+ const paths = arrayField(input, "paths");
9653
+ if (paths && paths.length > 0) {
9654
+ const first = paths[0];
9655
+ if (typeof first === "string") {
9656
+ return first;
9657
+ }
9658
+ }
9659
+ }
9660
+ return void 0;
9661
+ }
9662
+ async function parseZedSessionFile(dbPath, options) {
9663
+ const { DatabaseSync } = await import("node:sqlite");
9664
+ const fzstd = await Promise.resolve().then(() => (init_esm(), esm_exports));
9665
+ const decompress2 = fzstd.decompress;
9666
+ if (!dbPath.endsWith(".db")) {
9667
+ return [];
9668
+ }
9669
+ const db = new DatabaseSync(dbPath, { readOnly: true });
9670
+ const events = [];
9671
+ try {
9672
+ const rows = db.prepare(
9673
+ "SELECT id, data, data_type, updated_at, created_at, summary, folder_paths FROM threads ORDER BY updated_at"
9674
+ ).all();
9675
+ for (const row of rows) {
9676
+ const sessionId = row.id;
9677
+ const threadTs = row.updated_at;
9678
+ if (!threadTs) {
9679
+ continue;
9680
+ }
9681
+ const folderRaw = row.folder_paths || "";
9682
+ const folder = folderRaw.split(/[\n,]/).map((s) => s.trim()).find(Boolean);
9683
+ const cwd = folder || void 0;
9684
+ const project = cwd ? path20.basename(cwd) : row.summary ? row.summary.slice(0, 40) : void 0;
9685
+ let json;
9686
+ try {
9687
+ const bytes = row.data_type === "zstd" ? decompress2(new Uint8Array(row.data)) : new Uint8Array(row.data);
9688
+ json = JSON.parse(new TextDecoder().decode(bytes));
9689
+ } catch {
9690
+ continue;
9691
+ }
9692
+ if (!isPlainObject(json)) {
9693
+ continue;
9694
+ }
9695
+ const modelObj = objectField(json, "model");
9696
+ const model = modelObj ? stringField(modelObj, "model") : void 0;
9697
+ const provider = modelObj ? stringField(modelObj, "provider") : void 0;
9698
+ const requestUsage = objectField(json, "request_token_usage");
9699
+ const messages = arrayField(json, "messages") || [];
9700
+ events.push(baseZedEvent({
9701
+ ts: row.created_at || threadTs,
9702
+ type: "session.started",
9703
+ sessionId,
9704
+ cwd,
9705
+ project,
9706
+ model,
9707
+ provider,
9708
+ operation: "session start",
9709
+ confidence: "partial"
9710
+ }));
9711
+ let currentTurnId;
9712
+ let turnStarted = false;
9713
+ let msgIndex = 0;
9714
+ for (const msg of messages) {
9715
+ msgIndex++;
9716
+ if (!isPlainObject(msg)) {
9717
+ continue;
9718
+ }
9719
+ const userPayload = objectField(msg, "User");
9720
+ const agentPayload = objectField(msg, "Agent");
9721
+ if (userPayload) {
9722
+ if (turnStarted && currentTurnId) {
9723
+ events.push(baseZedEvent({
9724
+ ts: threadTs,
9725
+ type: "turn.completed",
9726
+ sessionId,
9727
+ turnId: currentTurnId,
9728
+ cwd,
9729
+ project,
9730
+ model,
9731
+ provider,
9732
+ operation: "turn completed",
9733
+ confidence: "partial"
9734
+ }));
9735
+ }
9736
+ const requestId = stringField(userPayload, "id") || `${sessionId}:${msgIndex}`;
9737
+ currentTurnId = `turn_${createStableHash([sessionId, requestId]).slice(0, 24)}`;
9738
+ turnStarted = true;
9739
+ events.push(baseZedEvent({
9740
+ ts: threadTs,
9741
+ type: "turn.started",
9742
+ sessionId,
9743
+ turnId: currentTurnId,
9744
+ cwd,
9745
+ project,
9746
+ model,
9747
+ provider,
9748
+ operation: "turn start",
9749
+ confidence: "partial"
9750
+ }));
9751
+ const content = arrayField(userPayload, "content") || [];
9752
+ let promptText = "";
9753
+ for (const part of content) {
9754
+ if (!isPlainObject(part)) {
9755
+ continue;
9756
+ }
9757
+ const text = stringField(part, "Text");
9758
+ if (text) {
9759
+ promptText += text;
9760
+ }
9761
+ }
9762
+ if (promptText) {
9763
+ events.push(baseZedEvent({
9764
+ ts: threadTs,
9765
+ type: "prompt.submitted",
9766
+ sessionId,
9767
+ turnId: currentTurnId,
9768
+ cwd,
9769
+ project,
9770
+ model,
9771
+ provider,
9772
+ operation: "prompt submitted",
9773
+ confidence: "partial",
9774
+ metrics: { prompts: 1, promptChars: promptText.length },
9775
+ refs: stringRefs({ promptHash: `sha256:${createStableHash(promptText)}` })
9776
+ }));
9777
+ }
9778
+ const usageEntry = requestUsage ? objectField(requestUsage, requestId) : void 0;
9779
+ if (usageEntry) {
9780
+ const usage = zedUsageFromRequest(usageEntry);
9781
+ if (usage) {
9782
+ const metrics = {
9783
+ tokensInput: usage.tokensInput,
9784
+ tokensOutput: usage.tokensOutput,
9785
+ tokensTotal: usage.tokensTotal
9786
+ };
9787
+ events.push(baseZedEvent({
9788
+ ts: threadTs,
9789
+ type: "model.usage",
9790
+ sessionId,
9791
+ turnId: currentTurnId,
9792
+ cwd,
9793
+ project,
9794
+ model,
9795
+ provider,
9796
+ operation: "model usage",
9797
+ confidence: "partial",
9798
+ metrics
9799
+ }));
9800
+ }
9801
+ }
9802
+ }
9803
+ if (agentPayload) {
9804
+ const content = arrayField(agentPayload, "content") || [];
9805
+ for (const part of content) {
9806
+ if (!isPlainObject(part)) {
9807
+ continue;
9808
+ }
9809
+ const toolUse = objectField(part, "ToolUse");
9810
+ if (!toolUse) {
9811
+ continue;
9812
+ }
9813
+ const tool = stringField(toolUse, "name") || "unknown";
9814
+ const callId = stringField(toolUse, "id") || `call_${createStableHash([sessionId, currentTurnId || "", tool, msgIndex]).slice(0, 16)}`;
9815
+ const input = objectField(toolUse, "input");
9816
+ events.push(baseZedEvent({
9817
+ ts: threadTs,
9818
+ type: "tool.started",
9819
+ sessionId,
9820
+ turnId: currentTurnId,
9821
+ cwd,
9822
+ project,
9823
+ model,
9824
+ provider,
9825
+ tool,
9826
+ operation: `${tool} started`,
9827
+ metrics: { toolCalls: 1 },
9828
+ refs: stringRefs({ sourceId: callId }),
9829
+ confidence: "exact"
9830
+ }));
9831
+ const toolResults = objectField(agentPayload, "tool_results");
9832
+ const resultEntry = toolResults ? objectField(toolResults, callId) : void 0;
9833
+ const isError = resultEntry ? Boolean(numberField(resultEntry, "is_error")) : false;
9834
+ const success = !isError;
9835
+ events.push(baseZedEvent({
9836
+ ts: threadTs,
9837
+ type: success ? "tool.completed" : "tool.failed",
9838
+ sessionId,
9839
+ turnId: currentTurnId,
9840
+ cwd,
9841
+ project,
9842
+ model,
9843
+ provider,
9844
+ tool,
9845
+ success,
9846
+ operation: success ? `${tool} completed` : `${tool} failed`,
9847
+ refs: stringRefs({ sourceId: callId }),
9848
+ confidence: "exact"
9849
+ }));
9850
+ if (tool === "terminal") {
9851
+ const command = input ? stringField(input, "command") : void 0;
9852
+ events.push(baseZedEvent({
9853
+ ts: threadTs,
9854
+ type: success ? "command.completed" : "command.failed",
9855
+ sessionId,
9856
+ turnId: currentTurnId,
9857
+ cwd,
9858
+ project,
9859
+ model,
9860
+ provider,
9861
+ tool: "terminal",
9862
+ success,
9863
+ operation: success ? "command completed" : "command failed",
9864
+ metrics: { commandCalls: 1 },
9865
+ refs: stringRefs({
9866
+ sourceId: callId,
9867
+ commandHash: command ? `sha256:${createStableHash(String(command))}` : void 0
9868
+ }),
9869
+ confidence: "partial"
9870
+ }));
9871
+ }
9872
+ const filePath = filePathFromToolInput(tool, input);
9873
+ if (filePath) {
9874
+ events.push(baseZedEvent({
9875
+ ts: threadTs,
9876
+ type: toolFileActivityType(tool),
9877
+ sessionId,
9878
+ turnId: currentTurnId,
9879
+ cwd,
9880
+ project,
9881
+ model,
9882
+ provider,
9883
+ tool,
9884
+ success,
9885
+ operation: `${tool} file activity`,
9886
+ fileActivities: [{
9887
+ ts: threadTs,
9888
+ path: filePath,
9889
+ operation: operationForTool(tool)
9890
+ }],
9891
+ refs: stringRefs({ sourceId: callId }),
9892
+ confidence: "partial"
9893
+ }));
9894
+ }
9895
+ }
9896
+ }
9897
+ }
9898
+ if (turnStarted && currentTurnId) {
9899
+ events.push(baseZedEvent({
9900
+ ts: threadTs,
9901
+ type: "turn.completed",
9902
+ sessionId,
9903
+ turnId: currentTurnId,
9904
+ cwd,
9905
+ project,
9906
+ model,
9907
+ provider,
9908
+ operation: "turn completed",
9909
+ confidence: "partial"
9910
+ }));
9911
+ }
9912
+ events.push(baseZedEvent({
9913
+ ts: threadTs,
9914
+ type: "session.ended",
9915
+ sessionId,
9916
+ cwd,
9917
+ project,
9918
+ model,
9919
+ provider,
9920
+ operation: "session end",
9921
+ confidence: "partial"
9922
+ }));
9923
+ }
9924
+ } finally {
9925
+ db.close();
9926
+ }
9927
+ return events.filter((event) => matchesBackfillFilters(event, options));
9928
+ }
9929
+ async function zedBackfillFiles(sourceRoot, home = os9.homedir(), env) {
9930
+ const { stat: stat14 } = await import("node:fs/promises");
9931
+ if (sourceRoot) {
9932
+ if (!sourceRoot.endsWith(".db")) {
9933
+ return [];
9934
+ }
9935
+ const info = await stat14(sourceRoot).catch(() => null);
9936
+ if (!info) {
9937
+ return [];
9938
+ }
9939
+ return [{ path: sourceRoot, modifiedAt: info.mtime.toISOString() }];
9940
+ }
9941
+ for (const candidatePath of zedThreadsCandidates(home, env)) {
9942
+ const info = await stat14(candidatePath).catch(() => null);
9943
+ if (info) {
9944
+ return [{ path: candidatePath, modifiedAt: info.mtime.toISOString() }];
9945
+ }
9946
+ }
9947
+ return [];
9948
+ }
9949
+ function createZedAdapter() {
9950
+ return {
9951
+ id: "zed",
9952
+ label: "Zed",
9953
+ agentName: "zed",
9954
+ kind: "ide",
9955
+ detectPath(home, env) {
9956
+ return zedConfigDir(home, env);
9957
+ },
9958
+ installedPath(home, env) {
9959
+ return path20.join(zedConfigDir(home, env), "vibetime-marker");
9960
+ },
9961
+ async isInstalled() {
9962
+ return false;
9963
+ },
9964
+ installEntries(_home, _env) {
9965
+ return [];
9966
+ },
9967
+ sourcePaths(home, env) {
9968
+ return zedThreadsCandidates(home, env);
9969
+ },
9970
+ parseSessionFile: parseZedSessionFile
9971
+ };
9972
+ }
9973
+
8845
9974
  // src/lib/pricing.ts
8846
9975
  function estimateEventCostUsd(event) {
8847
9976
  if (event.type !== "model.usage") {
@@ -9286,15 +10415,15 @@ function hookCommandFromGroup(group) {
9286
10415
  import { randomUUID } from "node:crypto";
9287
10416
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
9288
10417
  import { homedir, hostname } from "node:os";
9289
- import path20 from "node:path";
10418
+ import path21 from "node:path";
9290
10419
  function configDir(home = homedir()) {
9291
- return path20.join(home, ".vibetime");
10420
+ return path21.join(home, ".vibetime");
9292
10421
  }
9293
10422
  function configPath(home = homedir()) {
9294
- return path20.join(configDir(home), "config.json");
10423
+ return path21.join(configDir(home), "config.json");
9295
10424
  }
9296
10425
  function machineIdPath(home = homedir()) {
9297
- return path20.join(configDir(home), "machine-id");
10426
+ return path21.join(configDir(home), "machine-id");
9298
10427
  }
9299
10428
  function readConfig(home = homedir()) {
9300
10429
  const file = configPath(home);
@@ -9343,13 +10472,13 @@ init_fs();
9343
10472
  // src/lib/logger.ts
9344
10473
  import { appendFile, mkdir as mkdir4, rename, stat as stat12 } from "node:fs/promises";
9345
10474
  import { homedir as homedir2 } from "node:os";
9346
- import path21 from "node:path";
10475
+ import path22 from "node:path";
9347
10476
  var MAX_BYTES = 1 * 1024 * 1024;
9348
10477
  function logDir(home = homedir2()) {
9349
- return path21.join(home, ".vibetime", "logs");
10478
+ return path22.join(home, ".vibetime", "logs");
9350
10479
  }
9351
10480
  function logPath(home = homedir2(), name = "cli.log") {
9352
- return path21.join(logDir(home), name);
10481
+ return path22.join(logDir(home), name);
9353
10482
  }
9354
10483
  function serializeError(error) {
9355
10484
  if (error instanceof Error) {
@@ -9524,8 +10653,8 @@ function buildHeaders(token, machine) {
9524
10653
  ...machine?.platform ? { "x-machine-platform": machine.platform } : {}
9525
10654
  };
9526
10655
  }
9527
- function joinUrl(base, path23) {
9528
- return new URL(path23, base.endsWith("/") ? base : `${base}/`).toString();
10656
+ function joinUrl(base, path24) {
10657
+ return new URL(path24, base.endsWith("/") ? base : `${base}/`).toString();
9529
10658
  }
9530
10659
  async function postRollupBatch(remote, rollups, options = {}) {
9531
10660
  const response = await remote.fetchImpl(joinUrl(remote.baseUrl, "/v3/agent/ingest"), {
@@ -9608,6 +10737,7 @@ function createRegistry() {
9608
10737
  registry.register(createWorkbuddyAdapter());
9609
10738
  registry.register(createZCodeAdapter());
9610
10739
  registry.register(createGrokBuildAdapter());
10740
+ registry.register(createZedAdapter());
9611
10741
  return registry;
9612
10742
  }
9613
10743
  var defaultContext = {
@@ -10123,6 +11253,9 @@ async function listBackfillSourceFiles(source, options, ctx) {
10123
11253
  if (source.id === "grok-build") {
10124
11254
  return grokBackfillFiles(stringOption(options["source-root"]), resolveHome3(options, ctx), ctx.env);
10125
11255
  }
11256
+ if (source.id === "zed") {
11257
+ return zedBackfillFiles(stringOption(options["source-root"]), resolveHome3(options, ctx), ctx.env);
11258
+ }
10126
11259
  const roots = stringOption(options["source-root"]) ? [requiredOption(options, "source-root")] : source.paths;
10127
11260
  const fileLists = await Promise.all(roots.map((r) => listJsonlFiles(r)));
10128
11261
  const files = fileLists.flat().sort().slice(0, numberOption(options.limit) || void 0);
@@ -10440,13 +11573,13 @@ function selectBackfillFilesForImport(files, watermarkTs) {
10440
11573
  });
10441
11574
  }
10442
11575
  function backfillIncrementalStatePath(home) {
10443
- return path22.join(home, ".vibetime", "backfill-state.json");
11576
+ return path23.join(home, ".vibetime", "backfill-state.json");
10444
11577
  }
10445
11578
  function syncLocalTriggerStatePath(home) {
10446
- return path22.join(home, ".vibetime", "sync-local-trigger.json");
11579
+ return path23.join(home, ".vibetime", "sync-local-trigger.json");
10447
11580
  }
10448
11581
  function syncLocalTriggerLockPath(home) {
10449
- return path22.join(home, ".vibetime", "sync-local-trigger.lock");
11582
+ return path23.join(home, ".vibetime", "sync-local-trigger.lock");
10450
11583
  }
10451
11584
  function backfillRemoteKey(baseUrl) {
10452
11585
  try {
@@ -10508,7 +11641,7 @@ async function readBackfillIncrementalStateFile(home, ctx) {
10508
11641
  }
10509
11642
  async function writeBackfillIncrementalStateFile(home, file) {
10510
11643
  const statePath = backfillIncrementalStatePath(home);
10511
- await mkdir5(path22.dirname(statePath), { recursive: true });
11644
+ await mkdir5(path23.dirname(statePath), { recursive: true });
10512
11645
  await writeFile4(statePath, `${JSON.stringify(file, null, 2)}
10513
11646
  `, "utf8");
10514
11647
  }
@@ -10557,7 +11690,7 @@ async function readSyncLocalTriggerState(statePath) {
10557
11690
  return nextState;
10558
11691
  }
10559
11692
  async function writeSyncLocalTriggerState(statePath, state) {
10560
- await mkdir5(path22.dirname(statePath), { recursive: true });
11693
+ await mkdir5(path23.dirname(statePath), { recursive: true });
10561
11694
  await writeFile4(statePath, `${JSON.stringify(state, null, 2)}
10562
11695
  `, "utf8");
10563
11696
  }
@@ -10572,12 +11705,12 @@ async function readSyncLocalLock(lockPath) {
10572
11705
  return { pid: lock.pid, startedAt: lock.startedAt };
10573
11706
  }
10574
11707
  async function writeSyncLocalLock(lockPath, lock) {
10575
- await mkdir5(path22.dirname(lockPath), { recursive: true });
11708
+ await mkdir5(path23.dirname(lockPath), { recursive: true });
10576
11709
  await writeFile4(lockPath, `${JSON.stringify(lock, null, 2)}
10577
11710
  `, "utf8");
10578
11711
  }
10579
11712
  async function acquireSyncLocalLock(lockPath, lock) {
10580
- await mkdir5(path22.dirname(lockPath), { recursive: true });
11713
+ await mkdir5(path23.dirname(lockPath), { recursive: true });
10581
11714
  try {
10582
11715
  const handle = await open(lockPath, "wx");
10583
11716
  try {
@@ -10657,10 +11790,10 @@ function syncLocalRunnerEntryArgs(cliPath) {
10657
11790
  if (cliPath.endsWith(".ts")) {
10658
11791
  return ["--import", "tsx", cliPath];
10659
11792
  }
10660
- return [path22.resolve(path22.dirname(cliPath), "../bin/vibetime.mjs")];
11793
+ return [path23.resolve(path23.dirname(cliPath), "../bin/vibetime.mjs")];
10661
11794
  }
10662
11795
  function resolveHome3(options, ctx) {
10663
- return path22.resolve(stringOption(options.home) || ctx.env.HOME || os9.homedir());
11796
+ return path23.resolve(stringOption(options.home) || ctx.env.HOME || os10.homedir());
10664
11797
  }
10665
11798
  function requestedTargets(options) {
10666
11799
  const value = options.target || options.targets;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yhong91/vibetime",
3
3
  "type": "module",
4
- "version": "0.1.26",
4
+ "version": "0.1.27",
5
5
  "description": "vibetime CLI — install AI-agent hooks (Claude Code, Codex, OpenCode, Pi) and report activity to vibetime.",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -35,6 +35,7 @@
35
35
  "devDependencies": {
36
36
  "cac": "^7.0.0",
37
37
  "esbuild": "^0.28.0",
38
+ "fzstd": "^0.1.1",
38
39
  "@codetime/shared": "0.4.0"
39
40
  },
40
41
  "scripts": {