chat-recall 0.7.11 → 0.7.13

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":"scan-worker.d.ts","sourceRoot":"","sources":["../src/scan-worker.ts"],"names":[],"mappings":"AA8BA,OAAO,EAEL,KAAK,cAAc,EAAE,KAAK,eAAe,EAC1C,MAAM,6CAA6C,CAAC;AAErD,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAChJ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2EAA2E;IAC3E,SAAS,EAAE;QAAE,CAAC,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"scan-worker.d.ts","sourceRoot":"","sources":["../src/scan-worker.ts"],"names":[],"mappings":"AA8BA,OAAO,EAEL,KAAK,cAAc,EAAE,KAAK,eAAe,EAC1C,MAAM,6CAA6C,CAAC;AAGrD,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAChJ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2EAA2E;IAC3E,SAAS,EAAE;QAAE,CAAC,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -4964,7 +4964,13 @@ function redactSecrets(text, opts = {}) {
4964
4964
  return whole;
4965
4965
  if (opts.count)
4966
4966
  opts.count.redactions++;
4967
- return whole.slice(0, whole.length - secret.length) + `[REDACTED:${r.label}]`;
4967
+ let last = args.length - 1;
4968
+ if (typeof args[last] === "object")
4969
+ last--;
4970
+ const source = args[last];
4971
+ const secretStart = args[last - 1] + whole.length - secret.length;
4972
+ const head = escapeHead(source, secretStart, secret.length);
4973
+ return whole.slice(0, whole.length - secret.length + head) + `[REDACTED:${r.label}]` + escapeKept(whole, whole.length);
4968
4974
  });
4969
4975
  }
4970
4976
  const ctx = findContextualSecrets(out);
@@ -4972,10 +4978,25 @@ function redactSecrets(text, opts = {}) {
4972
4978
  const { start, end } = ctx[i];
4973
4979
  if (opts.count)
4974
4980
  opts.count.redactions++;
4975
- out = out.slice(0, start) + "[REDACTED:secret-context]" + out.slice(end);
4981
+ const head = escapeHead(out, start, end - start);
4982
+ out = out.slice(0, start + head) + "[REDACTED:secret-context]" + escapeKept(out, end) + out.slice(end);
4976
4983
  }
4977
4984
  return out;
4978
4985
  }
4986
+ function escapeKept(text, end) {
4987
+ let run = 0;
4988
+ while (run < end && text.charCodeAt(end - 1 - run) === 92)
4989
+ run++;
4990
+ return run % 2 === 1 ? "\\" : "";
4991
+ }
4992
+ function escapeHead(text, start, length) {
4993
+ let run = 0;
4994
+ while (run < start && text.charCodeAt(start - 1 - run) === 92)
4995
+ run++;
4996
+ if (run % 2 === 0)
4997
+ return 0;
4998
+ return Math.min(text[start] === "u" ? 5 : 1, length);
4999
+ }
4979
5000
  function maskSecret(s) {
4980
5001
  if (!s)
4981
5002
  return "";
@@ -5082,7 +5103,12 @@ var init_secret_redactor = __esm({
5082
5103
  // userinfo URL walked through in cleartext — and a `jdbc:postgresql://…`
5083
5104
  // prefix broke the \b anchor for the one family it did cover. Any scheme
5084
5105
  // followed by userinfo is a credential, so match the shape, not a list.
5085
- { label: "url-password", secret: 1, pattern: /\b[a-zA-Z][a-zA-Z0-9+.-]{1,31}:\/\/[^:@\s/]{1,64}:([^@\s/]{1,256})(?=@)/g },
5106
+ //
5107
+ // A quote in userinfo is percent-encoded, so neither part takes a `"`. The
5108
+ // sync redacts JSONL text, and a match that ran on through `","is_error":`
5109
+ // to a later `@` replaced JSON structure: 4 lines on one machine stopped
5110
+ // parsing, and their records were dropped.
5111
+ { label: "url-password", secret: 1, pattern: /\b[a-zA-Z][a-zA-Z0-9+.-]{1,31}:\/\/[^:@\s/"]{1,64}:([^@\s/"]{1,256})(?=@)/g },
5086
5112
  // Bare AWS secret-access-key VALUE: EXACTLY 40 base64 chars, word-bounded,
5087
5113
  // containing upper+lower+digit. This is the gitleaks heuristic — the mixed-case
5088
5114
  // requirement excludes 40-char lowercase-hex git SHAs, and the exact-40 bound
@@ -5196,10 +5222,47 @@ var init_secret_redactor = __esm({
5196
5222
  }
5197
5223
  });
5198
5224
 
5199
- // ../engine/dist/parsers/banners.js
5200
- var init_banners = __esm({
5201
- "../engine/dist/parsers/banners.js"() {
5225
+ // ../engine/dist/core/tool-backend.js
5226
+ function isMultiFileDelta(d) {
5227
+ return !!d && "perFile" in d;
5228
+ }
5229
+ function registerBackend(backend) {
5230
+ REGISTRY.set(backend.id, backend);
5231
+ }
5232
+ function getBackendForId(id) {
5233
+ ensureBootstrapped();
5234
+ for (const b of REGISTRY.values()) {
5235
+ if (b.idPrefix && b.matchesId(id))
5236
+ return b;
5237
+ }
5238
+ for (const b of REGISTRY.values()) {
5239
+ if (b.idPrefix === "" && b.matchesId(id))
5240
+ return b;
5241
+ }
5242
+ return null;
5243
+ }
5244
+ function _setRegistryBootstrapper(fn) {
5245
+ _bootstrapper = fn;
5246
+ }
5247
+ function ensureBootstrapped() {
5248
+ if (_bootstrapped || REGISTRY.size > 0)
5249
+ return;
5250
+ if (_bootstrapper) {
5251
+ _bootstrapped = true;
5252
+ _bootstrapper();
5253
+ }
5254
+ }
5255
+ function listAvailableBackends() {
5256
+ ensureBootstrapped();
5257
+ return [...REGISTRY.values()].filter((b) => b.isAvailable());
5258
+ }
5259
+ var REGISTRY, _bootstrapper, _bootstrapped;
5260
+ var init_tool_backend = __esm({
5261
+ "../engine/dist/core/tool-backend.js"() {
5202
5262
  "use strict";
5263
+ REGISTRY = /* @__PURE__ */ new Map();
5264
+ _bootstrapper = null;
5265
+ _bootstrapped = false;
5203
5266
  }
5204
5267
  });
5205
5268
 
@@ -5260,12 +5323,130 @@ var init_claude_prompt_origin = __esm({
5260
5323
  INJECTED_PREFIXES = [
5261
5324
  ["<task-notification", "task-notification"],
5262
5325
  ["<agent-message", "peer"],
5326
+ ["<cross-session-message", "peer"],
5327
+ ["[Cross-session delivery notice]", "peer"],
5263
5328
  ["Another Claude session sent a message:", "peer"],
5264
- ["Stop hook feedback:", "hook"]
5329
+ ["Stop hook feedback:", "hook"],
5330
+ ["<bash-stdout>", "command-output"],
5331
+ ["<bash-stderr>", "command-output"],
5332
+ ["<local-command-stdout>", "command-output"],
5333
+ ["<local-command-stderr>", "command-output"],
5334
+ ["<<autonomous-loop", "meta"]
5265
5335
  ];
5266
5336
  }
5267
5337
  });
5268
5338
 
5339
+ // ../engine/dist/transcript/claude.js
5340
+ var log2;
5341
+ var init_claude = __esm({
5342
+ "../engine/dist/transcript/claude.js"() {
5343
+ "use strict";
5344
+ init_logger();
5345
+ init_claude_prompt_origin();
5346
+ log2 = createLogger("transcript-claude");
5347
+ }
5348
+ });
5349
+
5350
+ // ../engine/dist/transcript/codex.js
5351
+ var log3;
5352
+ var init_codex = __esm({
5353
+ "../engine/dist/transcript/codex.js"() {
5354
+ "use strict";
5355
+ init_logger();
5356
+ log3 = createLogger("transcript-codex");
5357
+ }
5358
+ });
5359
+
5360
+ // ../engine/dist/transcript/from-events.js
5361
+ var init_from_events = __esm({
5362
+ "../engine/dist/transcript/from-events.js"() {
5363
+ "use strict";
5364
+ }
5365
+ });
5366
+
5367
+ // ../engine/dist/transcript/raw.js
5368
+ function redactJsonLine(line, redact) {
5369
+ if (!line.includes('"'))
5370
+ return redact(line);
5371
+ try {
5372
+ JSON.parse(line);
5373
+ } catch {
5374
+ return redact(line);
5375
+ }
5376
+ const decoded = mapJsonStrings(line, redact, true);
5377
+ const out = redact(decoded);
5378
+ try {
5379
+ JSON.parse(out);
5380
+ return out;
5381
+ } catch {
5382
+ return mapJsonStrings(decoded, redact, false);
5383
+ }
5384
+ }
5385
+ function mapJsonStrings(line, fn, escapedOnly) {
5386
+ let out = "";
5387
+ let i = 0;
5388
+ for (; ; ) {
5389
+ const q = line.indexOf('"', i);
5390
+ if (q < 0)
5391
+ return out + line.slice(i);
5392
+ let j = q + 1;
5393
+ while (j < line.length) {
5394
+ const c = line.charCodeAt(j);
5395
+ if (c === 92)
5396
+ j += 2;
5397
+ else if (c === 34)
5398
+ break;
5399
+ else
5400
+ j++;
5401
+ }
5402
+ const token = line.slice(q, j + 1);
5403
+ out += line.slice(i, q);
5404
+ i = j + 1;
5405
+ const body = token.slice(1, -1);
5406
+ const escaped = body.includes("\\");
5407
+ if (escapedOnly && !escaped) {
5408
+ out += token;
5409
+ continue;
5410
+ }
5411
+ let value = body;
5412
+ if (escaped) {
5413
+ try {
5414
+ value = JSON.parse(token);
5415
+ } catch {
5416
+ out += token;
5417
+ continue;
5418
+ }
5419
+ }
5420
+ const next = fn(value);
5421
+ out += next === value ? token : JSON.stringify(next);
5422
+ }
5423
+ }
5424
+ function redactContainer(c, redact) {
5425
+ return {
5426
+ ...c,
5427
+ files: c.files.map((f) => ({
5428
+ name: f.name,
5429
+ text: f.name.endsWith(".jsonl") ? f.text.split("\n").map((l) => l ? redactJsonLine(l, redact) : l).join("\n") : redact(f.text)
5430
+ }))
5431
+ };
5432
+ }
5433
+ var init_raw = __esm({
5434
+ "../engine/dist/transcript/raw.js"() {
5435
+ "use strict";
5436
+ init_tool_backend();
5437
+ init_claude();
5438
+ init_codex();
5439
+ init_from_events();
5440
+ }
5441
+ });
5442
+
5443
+ // ../engine/dist/parsers/banners.js
5444
+ var init_banners = __esm({
5445
+ "../engine/dist/parsers/banners.js"() {
5446
+ "use strict";
5447
+ }
5448
+ });
5449
+
5269
5450
  // ../engine/dist/core/home-approval.js
5270
5451
  import { existsSync as existsSync2, readdirSync, realpathSync } from "fs";
5271
5452
  import { homedir as homedir2 } from "os";
@@ -5648,7 +5829,7 @@ function markersFromTurns(sessionId, turns) {
5648
5829
  const prompts = turns.filter((t) => t.kind === "user" && t.text).map((t) => ({ line: t.line, ts: t.ts, tsIso: t.tsIso, ...markPrompt(t.text) }));
5649
5830
  return { v: MARKERS_VERSION, sessionId, prompts, summary: summarizeMarkers(prompts) };
5650
5831
  }
5651
- var PROFANITY, PROFANITY_LOOSE, APPROVAL_HEAD, NEG_HEAD, QUESTION_HEAD, DIRECTIVE_HEAD, CLARIFY_PHRASES, FRUSTRATED_PHRASES, MARKERS_VERSION;
5832
+ var PROFANITY, PROFANITY_LOOSE, APPROVAL_HEAD, NEG_HEAD, QUESTION_HEAD, DIRECTIVE_HEAD, CLARIFY_PHRASES, FRUSTRATED_PHRASES, MARKERS_VERSION, MARKERS_TURN_OPTS;
5652
5833
  var init_session_sentiment = __esm({
5653
5834
  "../engine/dist/core/session-sentiment.js"() {
5654
5835
  "use strict";
@@ -5661,7 +5842,8 @@ var init_session_sentiment = __esm({
5661
5842
  DIRECTIVE_HEAD = /^(?:please\s+)?(?:use|implement|build|make|add|create|fix|remove|delete|update|refactor|run|deploy|push|merge|test|check|investigate|find|search|show|list|generate|set\s+up|ensure)\b/i;
5662
5843
  CLARIFY_PHRASES = /\b(?:wdym|what do you mean|explain|clarify|what is|what's|huh\??|i don'?t understand)\b/i;
5663
5844
  FRUSTRATED_PHRASES = /\b(?:why (?:the )?(?:fuck|hell)|wtf|are you (?:kidding|serious)|stop slacking|stop making|why did you|why didn'?t you|i (?:fucking )?(?:asked|told you)|are you (?:listening|even)|come\s*on|just\s+do)\b/i;
5664
- MARKERS_VERSION = 2;
5845
+ MARKERS_VERSION = 3;
5846
+ MARKERS_TURN_OPTS = { maxTurns: 5e4, userMax: Number.POSITIVE_INFINITY };
5665
5847
  }
5666
5848
  });
5667
5849
 
@@ -5832,50 +6014,6 @@ var init_session_git = __esm({
5832
6014
  }
5833
6015
  });
5834
6016
 
5835
- // ../engine/dist/core/tool-backend.js
5836
- function isMultiFileDelta(d) {
5837
- return !!d && "perFile" in d;
5838
- }
5839
- function registerBackend(backend) {
5840
- REGISTRY.set(backend.id, backend);
5841
- }
5842
- function getBackendForId(id) {
5843
- ensureBootstrapped();
5844
- for (const b of REGISTRY.values()) {
5845
- if (b.idPrefix && b.matchesId(id))
5846
- return b;
5847
- }
5848
- for (const b of REGISTRY.values()) {
5849
- if (b.idPrefix === "" && b.matchesId(id))
5850
- return b;
5851
- }
5852
- return null;
5853
- }
5854
- function _setRegistryBootstrapper(fn) {
5855
- _bootstrapper = fn;
5856
- }
5857
- function ensureBootstrapped() {
5858
- if (_bootstrapped || REGISTRY.size > 0)
5859
- return;
5860
- if (_bootstrapper) {
5861
- _bootstrapped = true;
5862
- _bootstrapper();
5863
- }
5864
- }
5865
- function listAvailableBackends() {
5866
- ensureBootstrapped();
5867
- return [...REGISTRY.values()].filter((b) => b.isAvailable());
5868
- }
5869
- var REGISTRY, _bootstrapper, _bootstrapped;
5870
- var init_tool_backend = __esm({
5871
- "../engine/dist/core/tool-backend.js"() {
5872
- "use strict";
5873
- REGISTRY = /* @__PURE__ */ new Map();
5874
- _bootstrapper = null;
5875
- _bootstrapped = false;
5876
- }
5877
- });
5878
-
5879
6017
  // ../engine/dist/core/sqlite-reader.js
5880
6018
  import { createRequire as createRequire2 } from "node:module";
5881
6019
  function filterExperimentalWarning() {
@@ -5931,6 +6069,7 @@ function shorten(text, max) {
5931
6069
  function extractTurnsFromEvents(sessionId, events, opts = {}) {
5932
6070
  const maxTurns = opts.maxTurns ?? DEFAULT_MAX_TURNS;
5933
6071
  const assistantMax = opts.assistantMax ?? DEFAULT_ASSISTANT_MAX;
6072
+ const userMax = opts.userMax ?? DEFAULT_USER_MAX;
5934
6073
  const turns = [];
5935
6074
  let startMs = 0, endMs = 0;
5936
6075
  let found = false;
@@ -5948,7 +6087,7 @@ function extractTurnsFromEvents(sessionId, events, opts = {}) {
5948
6087
  ts: e.ts,
5949
6088
  tsIso: e.tsIso,
5950
6089
  line: e.line,
5951
- text: shorten(e.text, DEFAULT_USER_MAX)
6090
+ text: shorten(e.text, userMax)
5952
6091
  });
5953
6092
  } else if (e.kind === "assistant_text" && e.text) {
5954
6093
  turns.push({
@@ -6967,7 +7106,7 @@ function readFirstLine(path) {
6967
7106
  }
6968
7107
  }
6969
7108
  var PREFIX2, CodexBackend, codexBackend;
6970
- var init_codex = __esm({
7109
+ var init_codex2 = __esm({
6971
7110
  "../engine/dist/core/backends/codex.js"() {
6972
7111
  "use strict";
6973
7112
  init_tool_paths();
@@ -9292,9 +9431,9 @@ var init_backends = __esm({
9292
9431
  "../engine/dist/core/backends/index.js"() {
9293
9432
  "use strict";
9294
9433
  init_tool_backend();
9295
- init_claude();
9434
+ init_claude2();
9296
9435
  init_opencode();
9297
- init_codex();
9436
+ init_codex2();
9298
9437
  init_agy();
9299
9438
  init_cursor();
9300
9439
  init_tool_backend();
@@ -9307,7 +9446,7 @@ function extractTurnsAny(sessionId, opts = {}) {
9307
9446
  const backend = getBackendForId(sessionId);
9308
9447
  if (!backend)
9309
9448
  return { sessionId, found: false, turns: [], startMs: 0, endMs: 0 };
9310
- return memoInSessionScope(`turns:${sessionId}:${opts.maxTurns ?? ""}:${opts.assistantMax ?? ""}`, () => backend.extractTurns(sessionId, opts));
9449
+ return memoInSessionScope(`turns:${sessionId}:${opts.maxTurns ?? ""}:${opts.assistantMax ?? ""}:${opts.userMax ?? ""}`, () => backend.extractTurns(sessionId, opts));
9311
9450
  }
9312
9451
  function replaySessionAny(sessionId) {
9313
9452
  const backend = getBackendForId(sessionId);
@@ -9688,7 +9827,7 @@ function parseExitCode(text) {
9688
9827
  return m ? Number(m[1]) : void 0;
9689
9828
  }
9690
9829
  var UUID_RE, ClaudeBackend, claudeBackend;
9691
- var init_claude = __esm({
9830
+ var init_claude2 = __esm({
9692
9831
  "../engine/dist/core/backends/claude.js"() {
9693
9832
  "use strict";
9694
9833
  init_live_session_scan();
@@ -10340,52 +10479,13 @@ var init_session = __esm({
10340
10479
  "use strict";
10341
10480
  init_banners();
10342
10481
  init_claude_prompt_origin();
10343
- init_claude();
10482
+ init_claude2();
10344
10483
  init_tool_paths();
10345
10484
  init_project_dir_name();
10346
10485
  init_model_pricing();
10347
10486
  }
10348
10487
  });
10349
10488
 
10350
- // ../engine/dist/transcript/claude.js
10351
- var log2;
10352
- var init_claude2 = __esm({
10353
- "../engine/dist/transcript/claude.js"() {
10354
- "use strict";
10355
- init_logger();
10356
- init_claude_prompt_origin();
10357
- log2 = createLogger("transcript-claude");
10358
- }
10359
- });
10360
-
10361
- // ../engine/dist/transcript/codex.js
10362
- var log3;
10363
- var init_codex2 = __esm({
10364
- "../engine/dist/transcript/codex.js"() {
10365
- "use strict";
10366
- init_logger();
10367
- log3 = createLogger("transcript-codex");
10368
- }
10369
- });
10370
-
10371
- // ../engine/dist/transcript/from-events.js
10372
- var init_from_events = __esm({
10373
- "../engine/dist/transcript/from-events.js"() {
10374
- "use strict";
10375
- }
10376
- });
10377
-
10378
- // ../engine/dist/transcript/raw.js
10379
- var init_raw = __esm({
10380
- "../engine/dist/transcript/raw.js"() {
10381
- "use strict";
10382
- init_tool_backend();
10383
- init_claude2();
10384
- init_codex2();
10385
- init_from_events();
10386
- }
10387
- });
10388
-
10389
10489
  // ../engine/dist/transcript/shadow.js
10390
10490
  import { createHash } from "crypto";
10391
10491
  function sha1(s) {
@@ -11016,7 +11116,7 @@ function collectDerivedRows(ref, mtime, count, maxRowBytes) {
11016
11116
  if (!fullOutcome) fullOutcome = computeOutcome(id);
11017
11117
  if (fullOutcome.found) data = fullOutcome.commits;
11018
11118
  } else if (kind === "markers") {
11019
- const turns = extractTurnsAny(id, { maxTurns: 5e4 });
11119
+ const turns = extractTurnsAny(id, MARKERS_TURN_OPTS);
11020
11120
  data = markersFromTurns(id, turns.turns);
11021
11121
  }
11022
11122
  } catch {
@@ -11069,6 +11169,7 @@ var init_derived = __esm({
11069
11169
 
11070
11170
  // src/scan-worker.ts
11071
11171
  init_secret_redactor();
11172
+ init_raw();
11072
11173
  import { parentPort } from "node:worker_threads";
11073
11174
  import { gzipSync } from "node:zlib";
11074
11175
  var installedPackVersion = "";
@@ -11086,10 +11187,10 @@ function runTask(task) {
11086
11187
  const count = { redactions: 0 };
11087
11188
  let rawB64;
11088
11189
  let rawSize;
11089
- const redacted = task.files.map((f) => ({
11090
- name: f.name,
11091
- text: redactSecrets(f.text, { force: true, count })
11092
- }));
11190
+ const redacted = redactContainer(
11191
+ { v: 1, tool: task.container.tool, mtime: task.container.mtime, files: task.files },
11192
+ (t) => redactSecrets(t, { force: true, count })
11193
+ ).files;
11093
11194
  if (task.includeRaw) {
11094
11195
  try {
11095
11196
  const json = JSON.stringify({ ...task.container, files: redacted });
@@ -1 +1 @@
1
- {"version":3,"file":"scan-worker.js","sourceRoot":"","sources":["../src/scan-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan-worker.js","sourceRoot":"","sources":["../src/scan-worker.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ import { dropFuzzyFindings } from '@chat-recall/engine/core/secret-precision.js'
46
46
  import { loadSettings, saveSettings, isProjectSyncable } from '@chat-recall/engine/core/settings.js';
47
47
  import { getDataDir } from '@chat-recall/engine/core/paths.js';
48
48
  import { listAvailableBackends } from '@chat-recall/engine/core/tool-backend.js';
49
- import { parseTranscript, trimTranscriptForSync, TRANSCRIPT_VERSION, gzipContainer, mapContainerText, buildRawContainer, containerSrcHash, parseTranscriptFromContainer, updateShadow, shadowUncompressedBytes } from '@chat-recall/engine/transcript/index.js';
49
+ import { parseTranscript, trimTranscriptForSync, TRANSCRIPT_VERSION, gzipContainer, redactContainer, buildRawContainer, containerSrcHash, parseTranscriptFromContainer, updateShadow, shadowUncompressedBytes } from '@chat-recall/engine/transcript/index.js';
50
50
  import { parseClaudeTranscriptText } from '@chat-recall/engine/transcript/claude.js';
51
51
  import { parseCodexTranscriptText } from '@chat-recall/engine/transcript/codex.js';
52
52
  import { getBackendForId, getBackend } from '@chat-recall/engine/core/tool-backend.js';
@@ -2657,7 +2657,7 @@ export async function buildConversationSync(ref, mtime, opts = {}) {
2657
2657
  else {
2658
2658
  try {
2659
2659
  const count2 = { redactions: 0 };
2660
- const redacted = mapContainerText(container, (t) => redactSecrets(t, { force: true, count: count2 }));
2660
+ const redacted = redactContainer(container, (t) => redactSecrets(t, { force: true, count: count2 }));
2661
2661
  count.redactions += count2.redactions;
2662
2662
  const { gz, size } = gzipContainer(redacted);
2663
2663
  if (gz.length <= 8 * 1024 * 1024) {