@djolex999/vir-cli 0.28.0 → 0.30.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,uEAAuE;IACvE,oEAAoE;IACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9C,0EAA0E;IAC1E,wDAAwD;IACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,0EAA0E;IAC1E,8DAA8D;IAC9D,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;SACrD,OAAO,CAAC,WAAW,CAAC;IACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,uDAAuD;IACvD,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACtD,qEAAqE;IACrE,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,qEAAqE;IACrE,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;SAClD,OAAO,CAAC,EAAE,CAAC;IACd,wEAAwE;IACxE,6DAA6D;IAC7D,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,wEAAwE;IACxE,qEAAqE;IACrE,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,+CAA+C;IAC/C,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACtE,0EAA0E;IAC1E,2EAA2E;IAC3E,sEAAsE;IACtE,oEAAoE;IACpE,2EAA2E;IAC3E,yEAAyE;IACzE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACnE,wEAAwE;IACxE,wEAAwE;IACxE,4DAA4D;IAC5D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,6FAA6F,CAC9F;IACH,yEAAyE;IACzE,kCAAkC;IAClC,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,kEAAkE,CACnE;IACH,6EAA6E;IAC7E,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,oFAAoF,CACrF;IACH,yEAAyE;IACzE,uBAAuB;IACvB,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,wEAAwE;IACxE,sEAAsE;IACtE,eAAe,EAAE,CAAC;SACf,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;SACvC,OAAO,CAAC,UAAU,CAAC;IACtB,2DAA2D;IAC3D,oEAAoE;IACpE,wEAAwE;IACxE,yCAAyC;IACzC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,uEAAuE;IACvE,qEAAqE;IACrE,yEAAyE;IACzE,oCAAoC;IACpC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjE,yEAAyE;IACzE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,2EAA2E;IAC3E,uEAAuE;IACvE,qEAAqE;IACrE,sEAAsE;IACtE,oDAAoD;IACpD,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CACP,gFAAgF,CACjF;IACH,yEAAyE;IACzE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACxD,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAChD,qEAAqE;QACrE,mEAAmE;QACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAC9C,oEAAoE;QACpE,oEAAoE;QACpE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,oEAAoE;QACpE,kEAAkE;QAClE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACnD,CAAC;SACD,OAAO,CAAC;QACP,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACJ,sEAAsE;IACtE,0EAA0E;IAC1E,wEAAwE;IACxE,sEAAsE;IACtE,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,SAAS,EAAE,CAAC;aACT,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;YACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;YAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;SACjD,CAAC,CACH;aACA,QAAQ,EAAE;QACb,GAAG,EAAE,CAAC;aACH,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;YACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;YAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;SACjD,CAAC,CACH;aACA,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;CACd,CAAC;KACD,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACxB,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,mBAAmB,CAAC;YAC3B,OAAO,EACL,+EAA+E;SAClF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,iBAAiB,CAAC;YACzB,OAAO,EAAE,0DAA0D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,WAAW,CAAC;YACnB,OAAO,EAAE,8CAA8C;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIL,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClD,yEAAyE;AACzE,2EAA2E;AAC3E,wBAAwB;AACxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAE3D,0EAA0E;AAC1E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,yBAAyB;AACzB,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,gEAAgE;IAChE,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,wEAAwE;AACxE,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,gFAAgF;AAChF,wEAAwE;AACxE,kBAAkB;AAClB,MAAM,UAAU,iBAAiB,CAAC,GAA4B;IAI5D,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,IAAI,IAAI,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjE,MAAM,IAAI,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;IACjD,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG;QAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnF,IAAI,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,GAAG,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAChD,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,2BAA2B,CAC9D,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,+DAA+D;IAC/D,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,KAAK;YAAE,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAA4B,CAAC;IACzF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,yEAAyE;YACzE,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;YAC7D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,gBAAgB;YACzB,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,WAAW;YACpB,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,YAAY,EAAE,CAAC;IACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,2DAA2D;IAC3D,eAAe,CAAC,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;AAC7D,CAAC"}
@@ -30,6 +30,22 @@ opts = {}) {
30
30
  }
31
31
  return out;
32
32
  }
33
+ // What every path embeds for a rule: accept time, the sweep, and `vir embed`.
34
+ export function insightEmbeddingText(t) {
35
+ return `${t.rule}\n${t.why}`;
36
+ }
37
+ // Accepted rules `vir embed` should (re-)embed under `model`: with force,
38
+ // every accepted rule; otherwise those with no vector or another model's.
39
+ // A model switch through `vir embed --force` previously skipped rules, so they
40
+ // dropped out of search until the next `vir run` sweep.
41
+ export function insightEmbedTargets(db, model, force) {
42
+ if (!force)
43
+ return db.listInsightEmbeddingTargets(model);
44
+ return db
45
+ .listInsights()
46
+ .filter((i) => i.status === "accepted")
47
+ .map((i) => ({ id: i.id, rule: i.rule, why: i.why }));
48
+ }
33
49
  // Self-heal for accepted rules: embedded at accept time, but a provider outage
34
50
  // then, or a later model switch, would leave them out of embedding search.
35
51
  // Best-effort — a failed embed is retried on the next sweep. Returns the count.
@@ -38,7 +54,7 @@ export async function backfillInsightEmbeddings(db, provider) {
38
54
  for (const t of db.listInsightEmbeddingTargets(provider.modelName)) {
39
55
  let vec;
40
56
  try {
41
- vec = (await provider.embedDoc(`${t.rule}\n${t.why}`)).embedding;
57
+ vec = (await provider.embedDoc(insightEmbeddingText(t))).embedding;
42
58
  }
43
59
  catch {
44
60
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/connect/embed.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAiB,EACjB,EAAW,EACX,QAA2B;AAC3B,8DAA8D;AAC9D,OAA4B,EAAE;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5B,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,iCAAkC,GAAa,CAAC,OAAO,EAAE,CACrG,CAAC;QACJ,CAAC;QACD,IAAI,KAAK;YAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnB,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,2EAA2E;AAC3E,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAW,EAAE,QAA2B;IACtF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,2BAA2B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/connect/embed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ const GIT_COMMIT_RE = /\bgit\b[^\n;&|]*\bcommit\b/;
4
+ // `[main a1b2c3d] msg`, `[main (root-commit) a1b2c3d] msg`, `[detached HEAD a1b2c3d] msg`
5
+ const COMMIT_OUTPUT_RE = /^\[(.+?)(?: \(root-commit\))? ([0-9a-f]{7,40})\] (.+)$/gm;
6
+ const STATUSES = new Set(["pending", "in_progress", "completed", "deleted"]);
7
+ // The Claude desktop app's task list. Same snapshot shape as TodoWrite
8
+ // (`items` replaces the list), plus step ops on the current list:
9
+ // `advance`, `done: [n]`, `start: n`, all 1-based.
10
+ const UPDATE_PLAN = "mcp__ccd_turn__update_plan";
11
+ // Its wrap-up checks off the step still in progress.
12
+ const WRAP_UP = "mcp__ccd_turn__wrap_up";
13
+ // A refused call (missing scope, a hook veto) can come back without is_error,
14
+ // so a plan op only counts when the result says it took.
15
+ const PLAN_OK_RE = /^Plan (shown|updated)\b/;
16
+ const WRAP_UP_OK_RE = /^(Shown in the next-step box|Nothing is pending)\b/;
17
+ function isRecord(v) {
18
+ return typeof v === "object" && v !== null && !Array.isArray(v);
19
+ }
20
+ // Transcript text ends up in markdown and on a terminal: one line, no escapes.
21
+ export function cleanLine(s) {
22
+ // eslint-disable-next-line no-control-regex
23
+ return s.replace(/\x1b\[[0-9;]*[A-Za-z]/g, "").replace(/[\x00-\x1f\x7f]+/g, " ").trim();
24
+ }
25
+ function resultText(block) {
26
+ if (typeof block.content === "string")
27
+ return block.content;
28
+ if (!Array.isArray(block.content))
29
+ return "";
30
+ return block.content
31
+ .map((c) => (isRecord(c) && typeof c.text === "string" ? c.text : ""))
32
+ .join("\n");
33
+ }
34
+ function asStatus(v) {
35
+ return typeof v === "string" && STATUSES.has(v) ? v : undefined;
36
+ }
37
+ function todoId(content) {
38
+ return `todo-${createHash("sha256").update(content).digest("hex").slice(0, 8)}`;
39
+ }
40
+ export function parseJournalLines(raw) {
41
+ const events = [];
42
+ const pending = new Map();
43
+ // Older Claude Code sends the whole list on every TodoWrite; diff the
44
+ // snapshots into the same events TaskCreate/TaskUpdate produce.
45
+ const todos = new Map();
46
+ // update_plan's step numbers index the list as last sent.
47
+ let planOrder = [];
48
+ const setStatus = (taskId, status, at) => {
49
+ const t = taskId === undefined ? undefined : todos.get(taskId);
50
+ if (taskId === undefined || !t || t.status === status)
51
+ return;
52
+ events.push({ kind: "task_updated", at, taskId, status });
53
+ t.status = status;
54
+ };
55
+ // Returns the snapshot's task ids in list order.
56
+ const applyTodos = (list, at) => {
57
+ if (!Array.isArray(list))
58
+ return [];
59
+ const order = [];
60
+ const seen = new Set();
61
+ for (const item of list) {
62
+ if (!isRecord(item) || typeof item.content !== "string")
63
+ continue;
64
+ const subject = cleanLine(item.content);
65
+ const taskId = todoId(subject);
66
+ order.push(taskId);
67
+ seen.add(taskId);
68
+ const status = asStatus(item.status) ?? "pending";
69
+ const prev = todos.get(taskId);
70
+ if (!prev) {
71
+ events.push({ kind: "task_created", at, taskId, subject });
72
+ if (status !== "pending")
73
+ events.push({ kind: "task_updated", at, taskId, status });
74
+ todos.set(taskId, { status });
75
+ }
76
+ else if (prev.status !== status) {
77
+ events.push({ kind: "task_updated", at, taskId, status });
78
+ prev.status = status;
79
+ }
80
+ }
81
+ // Finished items leaving the list are normal. Unfinished ones were dropped.
82
+ for (const [taskId, t] of todos) {
83
+ if (seen.has(taskId) || t.status === "completed" || t.status === "deleted")
84
+ continue;
85
+ events.push({ kind: "task_updated", at, taskId, status: "deleted" });
86
+ t.status = "deleted";
87
+ }
88
+ return order;
89
+ };
90
+ const inProgress = () => planOrder.find((id) => todos.get(id)?.status === "in_progress");
91
+ const applyPlan = (input, at) => {
92
+ // A new list replaces the old one; step ops in the same call would index
93
+ // an ambiguous list, so they are not applied.
94
+ if (Array.isArray(input.items)) {
95
+ planOrder = applyTodos(input.items, at);
96
+ return;
97
+ }
98
+ const step = (n) => typeof n === "number" && Number.isInteger(n) && n >= 1 ? planOrder[n - 1] : undefined;
99
+ if (input.advance === true) {
100
+ const current = inProgress();
101
+ setStatus(current, "completed", at);
102
+ const from = current === undefined ? 0 : planOrder.indexOf(current) + 1;
103
+ const next = [...planOrder.slice(from), ...planOrder.slice(0, from)].find((id) => todos.get(id)?.status === "pending");
104
+ setStatus(next, "in_progress", at);
105
+ }
106
+ if (Array.isArray(input.done))
107
+ for (const n of input.done)
108
+ setStatus(step(n), "completed", at);
109
+ if (input.start !== undefined)
110
+ setStatus(step(input.start), "in_progress", at);
111
+ };
112
+ for (const line of raw.split("\n")) {
113
+ if (line.trim().length === 0)
114
+ continue;
115
+ let evt;
116
+ try {
117
+ evt = JSON.parse(line);
118
+ }
119
+ catch {
120
+ continue;
121
+ }
122
+ const at = typeof evt.timestamp === "string" ? evt.timestamp : null;
123
+ const content = evt.message?.content;
124
+ if (at === null || !Array.isArray(content))
125
+ continue;
126
+ for (const block of content) {
127
+ if (!isRecord(block))
128
+ continue;
129
+ if (block.type === "tool_use" && typeof block.id === "string" && typeof block.name === "string") {
130
+ pending.set(block.id, {
131
+ name: block.name,
132
+ input: isRecord(block.input) ? block.input : {},
133
+ });
134
+ continue;
135
+ }
136
+ if (block.type !== "tool_result" || typeof block.tool_use_id !== "string")
137
+ continue;
138
+ const result = block;
139
+ const call = pending.get(result.tool_use_id);
140
+ if (!call || result.is_error === true)
141
+ continue;
142
+ pending.delete(result.tool_use_id);
143
+ const extra = isRecord(evt.toolUseResult) ? evt.toolUseResult : {};
144
+ if (call.name === "Bash") {
145
+ const command = call.input.command;
146
+ if (typeof command !== "string" || !GIT_COMMIT_RE.test(command))
147
+ continue;
148
+ const stdout = typeof extra.stdout === "string" ? extra.stdout : resultText(result);
149
+ for (const m of stdout.matchAll(COMMIT_OUTPUT_RE)) {
150
+ events.push({
151
+ kind: "commit",
152
+ at,
153
+ branch: cleanLine(m[1] ?? ""),
154
+ sha: m[2] ?? "",
155
+ message: cleanLine(m[3] ?? ""),
156
+ });
157
+ }
158
+ }
159
+ else if (call.name === "TaskCreate") {
160
+ const task = isRecord(extra.task) ? extra.task : null;
161
+ const id = task?.id;
162
+ const subject = task?.subject ?? call.input.subject;
163
+ if (typeof id !== "string" || typeof subject !== "string")
164
+ continue;
165
+ events.push({ kind: "task_created", at, taskId: id, subject: cleanLine(subject) });
166
+ }
167
+ else if (call.name === "TaskUpdate") {
168
+ if (extra.success === false || typeof call.input.taskId !== "string")
169
+ continue;
170
+ const status = asStatus(call.input.status);
171
+ const subject = call.input.subject;
172
+ const blockers = call.input.addBlockedBy;
173
+ const addBlockedBy = Array.isArray(blockers)
174
+ ? blockers.filter((b) => typeof b === "string")
175
+ : [];
176
+ if (status === undefined && typeof subject !== "string" && addBlockedBy.length === 0)
177
+ continue;
178
+ events.push({
179
+ kind: "task_updated",
180
+ at,
181
+ taskId: call.input.taskId,
182
+ ...(status !== undefined ? { status } : {}),
183
+ ...(typeof subject === "string" ? { subject: cleanLine(subject) } : {}),
184
+ ...(addBlockedBy.length > 0 ? { addBlockedBy } : {}),
185
+ });
186
+ }
187
+ else if (call.name === "TodoWrite") {
188
+ applyTodos(call.input.todos, at);
189
+ }
190
+ else if (call.name === UPDATE_PLAN) {
191
+ if (PLAN_OK_RE.test(resultText(result).trim()))
192
+ applyPlan(call.input, at);
193
+ }
194
+ else if (call.name === WRAP_UP) {
195
+ if (WRAP_UP_OK_RE.test(resultText(result).trim()))
196
+ setStatus(inProgress(), "completed", at);
197
+ }
198
+ }
199
+ }
200
+ return events;
201
+ }
202
+ // First and last timestamp in the transcript, for session counts per day.
203
+ export function sessionBounds(raw) {
204
+ let startedAt = null;
205
+ let endedAt = null;
206
+ for (const line of raw.split("\n")) {
207
+ if (line.trim().length === 0)
208
+ continue;
209
+ try {
210
+ const ts = JSON.parse(line).timestamp;
211
+ if (typeof ts === "string") {
212
+ startedAt ??= ts;
213
+ endedAt = ts;
214
+ }
215
+ }
216
+ catch {
217
+ // A truncated last line is normal for a live session.
218
+ }
219
+ }
220
+ return { startedAt, endedAt };
221
+ }
222
+ export function parseJournalFile(path) {
223
+ const raw = readFileSync(path, "utf8");
224
+ return { events: parseJournalLines(raw), ...sessionBounds(raw) };
225
+ }
226
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/journal/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { makeSlug, sessionSuffix } from "../pipeline/slug.js";
2
+ // The calendar day an instant falls on in `timeZone`. Never UTC math: a 00:30
3
+ // Belgrade commit belongs to that local day, not the previous UTC one.
4
+ export function dayOf(iso, timeZone) {
5
+ const d = new Date(iso);
6
+ if (Number.isNaN(d.getTime()))
7
+ return null;
8
+ return new Intl.DateTimeFormat("en-CA", {
9
+ timeZone,
10
+ year: "numeric",
11
+ month: "2-digit",
12
+ day: "2-digit",
13
+ }).format(d);
14
+ }
15
+ // One project's tasks as they stood at the end of `day`.
16
+ function replayTasks(session, day, timeZone) {
17
+ const tasks = new Map();
18
+ for (const e of session.events) {
19
+ if (e.kind === "commit")
20
+ continue;
21
+ const eventDay = dayOf(e.at, timeZone);
22
+ if (eventDay === null || eventDay > day)
23
+ continue;
24
+ const today = eventDay === day;
25
+ if (e.kind === "task_created") {
26
+ tasks.set(e.taskId, {
27
+ subject: e.subject,
28
+ status: "pending",
29
+ blockedBy: new Set(),
30
+ touched: today,
31
+ completedToday: false,
32
+ });
33
+ continue;
34
+ }
35
+ const t = tasks.get(e.taskId);
36
+ if (!t)
37
+ continue;
38
+ if (e.subject !== undefined)
39
+ t.subject = e.subject;
40
+ if (e.addBlockedBy)
41
+ for (const b of e.addBlockedBy)
42
+ t.blockedBy.add(b);
43
+ if (e.status !== undefined) {
44
+ t.status = e.status;
45
+ t.completedToday = today && e.status === "completed";
46
+ }
47
+ if (today)
48
+ t.touched = true;
49
+ }
50
+ return tasks;
51
+ }
52
+ export function buildDay(sessions, decisions, day, timeZone) {
53
+ const byProject = new Map();
54
+ const entry = (project) => {
55
+ let p = byProject.get(project);
56
+ if (!p) {
57
+ p = { project, sessions: 0, done: [], inProgress: [], decisions: [], blocked: [], open: [] };
58
+ byProject.set(project, p);
59
+ }
60
+ return p;
61
+ };
62
+ const shas = new Set();
63
+ const notesByPath = new Map();
64
+ for (const d of decisions) {
65
+ notesByPath.set(d.path, [...(notesByPath.get(d.path) ?? []), d.topic]);
66
+ }
67
+ for (const s of sessions) {
68
+ const active = [s.startedAt, s.endedAt, ...s.events.map((e) => e.at)].some((at) => at !== null && dayOf(at, timeZone) === day);
69
+ if (!active)
70
+ continue;
71
+ const p = entry(s.project);
72
+ p.sessions += 1;
73
+ // A resumed session replays its history into a new transcript, so one
74
+ // commit can appear twice. The sha is the identity.
75
+ for (const e of s.events) {
76
+ if (e.kind !== "commit" || dayOf(e.at, timeZone) !== day)
77
+ continue;
78
+ const key = `${s.project}:${e.sha}`;
79
+ if (shas.has(key))
80
+ continue;
81
+ shas.add(key);
82
+ p.done.push(`${e.message} (commit ${e.sha.slice(0, 7)})`);
83
+ }
84
+ const tasks = replayTasks(s, day, timeZone);
85
+ const short = sessionSuffix(s.sessionId);
86
+ for (const [id, t] of tasks) {
87
+ if (!t.touched)
88
+ continue;
89
+ const pointer = `(task ${short}#${id})`;
90
+ if (t.status === "completed") {
91
+ if (t.completedToday)
92
+ p.done.push(`${t.subject} ${pointer}`);
93
+ continue;
94
+ }
95
+ if (t.status === "deleted")
96
+ continue;
97
+ const blockers = [...t.blockedBy].filter((b) => {
98
+ const blocker = tasks.get(b);
99
+ return blocker?.status !== "completed" && blocker?.status !== "deleted";
100
+ });
101
+ if (blockers.length > 0) {
102
+ p.blocked.push(`${t.subject} ${pointer}, waiting on ${blockers.map((b) => `#${b}`).join(", ")}`);
103
+ }
104
+ else if (t.status === "in_progress") {
105
+ p.inProgress.push(`${t.subject} ${pointer}`);
106
+ }
107
+ else {
108
+ p.open.push(`${t.subject} ${pointer}`);
109
+ }
110
+ }
111
+ // A decision belongs to the day its session ended, when the note exists.
112
+ if (s.endedAt !== null && dayOf(s.endedAt, timeZone) === day) {
113
+ for (const topic of notesByPath.get(s.path) ?? []) {
114
+ p.decisions.push(`[[${makeSlug(topic, s.sessionId)}]]`);
115
+ }
116
+ }
117
+ }
118
+ return [...byProject.values()].sort((a, b) => a.project.localeCompare(b.project));
119
+ }
120
+ const SECTIONS = [
121
+ ["Done", "done"],
122
+ ["In progress", "inProgress"],
123
+ ["Decisions", "decisions"],
124
+ ["Blocked", "blocked"],
125
+ ["Open", "open"],
126
+ ];
127
+ export function renderDay(day, projects) {
128
+ const out = [
129
+ "---",
130
+ "type: journal",
131
+ `date: ${day}`,
132
+ "generated: vir journal",
133
+ "---",
134
+ "",
135
+ `# ${day}`,
136
+ "",
137
+ "Generated from session transcripts. Edits here are overwritten.",
138
+ ];
139
+ for (const p of projects) {
140
+ out.push("", `## ${p.project}`, "", `${p.sessions} session${p.sessions === 1 ? "" : "s"}`);
141
+ for (const [title, key] of SECTIONS) {
142
+ const items = p[key];
143
+ if (items.length === 0)
144
+ continue;
145
+ out.push("", `**${title}**`, ...items.map((i) => `- ${i}`));
146
+ }
147
+ }
148
+ return `${out.join("\n")}\n`;
149
+ }
150
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/journal/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { buildSources, resolveSource, scanAll } from "../sources/registry.js";
4
+ import { parseJournalFile } from "./events.js";
5
+ import { buildDay, dayOf, renderDay } from "./render.js";
6
+ export const JOURNAL_SUBDIR = "journal";
7
+ // Bump when parseJournalLines starts reading something new: the stored hash
8
+ // carries it, so transcripts already ingested are parsed again.
9
+ // 2: the desktop app's update_plan and wrap_up.
10
+ const PARSER_VERSION = 2;
11
+ // Copies what transcripts prove into SQLite. Claude Code deletes transcripts
12
+ // after about 30 days, and the journal has to outlive them, so a transcript
13
+ // that vanished keeps its rows. Unchanged files are not parsed again.
14
+ export function ingestJournal(cfg, db) {
15
+ const sources = buildSources(cfg).filter((s) => s.id === "claude-code");
16
+ const summary = { scanned: 0, parsed: 0, failed: 0, skippedExcluded: 0 };
17
+ for (const s of scanAll(sources)) {
18
+ summary.scanned += 1;
19
+ const source = resolveSource(sources, s.path);
20
+ try {
21
+ const project = source.projectName(s.path);
22
+ if (cfg.projects[project] === "exclude") {
23
+ summary.skippedExcluded += 1;
24
+ continue;
25
+ }
26
+ const hash = `v${PARSER_VERSION}:${s.hash}`;
27
+ if (db.journalSessionHash(s.path) === hash)
28
+ continue;
29
+ const parsed = parseJournalFile(s.path);
30
+ // Agent-internal transcripts did real commits, but their tasks are the
31
+ // agent's own bookkeeping, not the user's work items.
32
+ // The same two knobs `vir run` uses decide what counts as agent-internal.
33
+ const human = (cfg.workflowTranscripts === "include" || source.category(s.path) === "session") &&
34
+ (cfg.agentTranscripts === "include" || source.agentEntrypoint(s.path) === null);
35
+ const events = human
36
+ ? parsed.events
37
+ : parsed.events.filter((e) => e.kind === "commit");
38
+ if (!human && events.length === 0)
39
+ continue;
40
+ db.replaceJournalSession({
41
+ path: s.path,
42
+ hash,
43
+ project,
44
+ sessionId: basename(s.path).replace(/\.jsonl$/, ""),
45
+ startedAt: parsed.startedAt,
46
+ endedAt: parsed.endedAt,
47
+ events,
48
+ });
49
+ summary.parsed += 1;
50
+ }
51
+ catch {
52
+ // One bad transcript must never stop the run.
53
+ summary.failed += 1;
54
+ }
55
+ }
56
+ return summary;
57
+ }
58
+ export function loadJournalSessions(cfg, db) {
59
+ return db.listJournalSessions().filter((s) => cfg.projects[s.project] !== "exclude");
60
+ }
61
+ export function journalDays(sessions, timeZone) {
62
+ const days = new Set();
63
+ for (const s of sessions) {
64
+ for (const at of [s.startedAt, s.endedAt, ...s.events.map((e) => e.at)]) {
65
+ const d = at === null ? null : dayOf(at, timeZone);
66
+ if (d !== null)
67
+ days.add(d);
68
+ }
69
+ }
70
+ return [...days].sort();
71
+ }
72
+ export function renderJournalDay(sessions, db, day, timeZone) {
73
+ const projects = buildDay(sessions, db.listJournalDecisions(), day, timeZone);
74
+ return projects.length === 0 ? null : renderDay(day, projects);
75
+ }
76
+ // The journal is a projection: delete the folder and it comes back identical.
77
+ export function writeJournalDay(cfg, day, body) {
78
+ const dir = join(cfg.vaultPath, cfg.outputDir, JOURNAL_SUBDIR);
79
+ mkdirSync(dir, { recursive: true });
80
+ const file = join(dir, `${day}.md`);
81
+ if (existsSync(file) && readFileSync(file, "utf8") === body)
82
+ return "unchanged";
83
+ const tmp = `${file}.tmp`;
84
+ writeFileSync(tmp, body);
85
+ renameSync(tmp, file);
86
+ return "written";
87
+ }
88
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/journal/run.ts"],"names":[],"mappings":"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"}
@@ -236,8 +236,11 @@ function walkVault(dir, acc) {
236
236
  catch {
237
237
  continue;
238
238
  }
239
- if (st.isDirectory())
240
- walkVault(full, acc);
239
+ // Generated daily files are not notes: no index entry, nothing to lint.
240
+ if (st.isDirectory()) {
241
+ if (name !== "journal")
242
+ walkVault(full, acc);
243
+ }
241
244
  else if (st.isFile() && name.endsWith(".md"))
242
245
  acc.push(full);
243
246
  }