chat-recall 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -18259,23 +18259,57 @@ function commandPreview(cfg) {
18259
18259
  }
18260
18260
  return "";
18261
18261
  }
18262
+ function redactInlineSecrets(value) {
18263
+ let redacted = false;
18264
+ let out = value;
18265
+ out = out.replace(/(\w+:\/\/[^:/@\s]+:)([^@\s]{1,512})(@)/g, (_m, head, _pw, tail) => {
18266
+ redacted = true;
18267
+ return `${head}__SECRET_NOT_SYNCED__${tail}`;
18268
+ });
18269
+ const tokenShapes = [
18270
+ /\bsk-[A-Za-z0-9_-]{16,}\b/g,
18271
+ // OpenAI-style
18272
+ /\bgh[pousr]_[A-Za-z0-9]{16,}\b/g,
18273
+ // GitHub
18274
+ /\bAIza[0-9A-Za-z_-]{20,}\b/g,
18275
+ // Google
18276
+ /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g
18277
+ // Slack
18278
+ ];
18279
+ for (const re of tokenShapes) {
18280
+ out = out.replace(re, () => {
18281
+ redacted = true;
18282
+ return "__SECRET_NOT_SYNCED__";
18283
+ });
18284
+ }
18285
+ return { text: out, redacted };
18286
+ }
18262
18287
  function reconstructionSpec(cfg) {
18263
18288
  const out = {
18264
18289
  type: cfg.type || (cfg.url ? "remote" : "local"),
18265
18290
  enabled: cfg.enabled !== false
18266
18291
  };
18292
+ let hidSecret = false;
18293
+ const clean = (v) => {
18294
+ const r = redactInlineSecrets(v);
18295
+ if (r.redacted)
18296
+ hidSecret = true;
18297
+ return r.text;
18298
+ };
18267
18299
  if (typeof cfg.url === "string" && cfg.url)
18268
- out.url = cfg.url;
18300
+ out.url = clean(cfg.url);
18269
18301
  if (Array.isArray(cfg.command))
18270
- out.command = cfg.command;
18302
+ out.command = cfg.command.map(clean);
18271
18303
  else if (typeof cfg.command === "string")
18272
- out.command = cfg.command;
18304
+ out.command = clean(cfg.command);
18273
18305
  if (Array.isArray(cfg.args))
18274
- out.args = cfg.args;
18306
+ out.args = cfg.args.map((a) => clean(String(a)));
18275
18307
  if (Array.isArray(cfg.alwaysAllow))
18276
18308
  out.alwaysAllow = cfg.alwaysAllow;
18277
18309
  if (cfg.env && typeof cfg.env === "object")
18278
18310
  out.envKeys = Object.keys(cfg.env).sort();
18311
+ if (hidSecret)
18312
+ out.secretsRedacted = true;
18279
18313
  return out;
18280
18314
  }
18281
18315
  var McpsSource;
@@ -18358,7 +18392,7 @@ var init_mcps_source = __esm({
18358
18392
  }
18359
18393
  for (const [name, cfgRaw] of Object.entries(obj)) {
18360
18394
  const cfg = cfgRaw || {};
18361
- const cmd = commandPreview(cfg);
18395
+ const cmd = redactInlineSecrets(commandPreview(cfg)).text;
18362
18396
  const allow = Array.isArray(cfg.alwaysAllow) ? cfg.alwaysAllow.slice(0, 8) : [];
18363
18397
  const spec = reconstructionSpec(cfg);
18364
18398
  yield {
@@ -19589,7 +19623,7 @@ var init_http = __esm({
19589
19623
  CLI_VERSION = JSON.parse(readFileSync33(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
19590
19624
  } catch {
19591
19625
  try {
19592
- if (true) CLI_VERSION = "0.5.7";
19626
+ if (true) CLI_VERSION = "0.5.8";
19593
19627
  } catch {
19594
19628
  }
19595
19629
  }
@@ -20101,7 +20135,7 @@ var init_telemetry = __esm({
20101
20135
  init_sync_client();
20102
20136
  cliVersion2 = () => {
20103
20137
  try {
20104
- return true ? "0.5.7" : "dev";
20138
+ return true ? "0.5.8" : "dev";
20105
20139
  } catch {
20106
20140
  return "dev";
20107
20141
  }
@@ -21869,7 +21903,7 @@ var init_sync_client = __esm({
21869
21903
  ownVersion = JSON.parse(readFileSync36(join44(dir, "../package.json"), "utf-8")).version || ownVersion;
21870
21904
  } catch {
21871
21905
  try {
21872
- if (true) ownVersion = "0.5.7";
21906
+ if (true) ownVersion = "0.5.8";
21873
21907
  } catch {
21874
21908
  }
21875
21909
  }
@@ -23403,6 +23437,16 @@ function executePull(rows, opts = {}) {
23403
23437
  outcomes.push({ type: "mcp", name, tool, status: "present" });
23404
23438
  continue;
23405
23439
  }
23440
+ if (spec.secretsRedacted) {
23441
+ outcomes.push({
23442
+ type: "mcp",
23443
+ name,
23444
+ tool,
23445
+ status: "skipped",
23446
+ reason: "its command contains a secret, which is never uploaded \u2014 register this one by hand"
23447
+ });
23448
+ continue;
23449
+ }
23406
23450
  const entry = { ...built.entry };
23407
23451
  let rewrittenCommand;
23408
23452
  if (!entry.url) {
@@ -25325,7 +25369,7 @@ var init_intent_drain = __esm({
25325
25369
  ownVersion2 = JSON.parse(readFileSync45(join55(dir, "../package.json"), "utf-8")).version || ownVersion2;
25326
25370
  } catch {
25327
25371
  try {
25328
- if (true) ownVersion2 = "0.5.7";
25372
+ if (true) ownVersion2 = "0.5.8";
25329
25373
  } catch {
25330
25374
  }
25331
25375
  }
package/dist/mcp.js CHANGED
@@ -17597,23 +17597,57 @@ function commandPreview(cfg) {
17597
17597
  }
17598
17598
  return "";
17599
17599
  }
17600
+ function redactInlineSecrets(value) {
17601
+ let redacted = false;
17602
+ let out = value;
17603
+ out = out.replace(/(\w+:\/\/[^:/@\s]+:)([^@\s]{1,512})(@)/g, (_m, head, _pw, tail) => {
17604
+ redacted = true;
17605
+ return `${head}__SECRET_NOT_SYNCED__${tail}`;
17606
+ });
17607
+ const tokenShapes = [
17608
+ /\bsk-[A-Za-z0-9_-]{16,}\b/g,
17609
+ // OpenAI-style
17610
+ /\bgh[pousr]_[A-Za-z0-9]{16,}\b/g,
17611
+ // GitHub
17612
+ /\bAIza[0-9A-Za-z_-]{20,}\b/g,
17613
+ // Google
17614
+ /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g
17615
+ // Slack
17616
+ ];
17617
+ for (const re of tokenShapes) {
17618
+ out = out.replace(re, () => {
17619
+ redacted = true;
17620
+ return "__SECRET_NOT_SYNCED__";
17621
+ });
17622
+ }
17623
+ return { text: out, redacted };
17624
+ }
17600
17625
  function reconstructionSpec(cfg) {
17601
17626
  const out = {
17602
17627
  type: cfg.type || (cfg.url ? "remote" : "local"),
17603
17628
  enabled: cfg.enabled !== false
17604
17629
  };
17630
+ let hidSecret = false;
17631
+ const clean = (v) => {
17632
+ const r = redactInlineSecrets(v);
17633
+ if (r.redacted)
17634
+ hidSecret = true;
17635
+ return r.text;
17636
+ };
17605
17637
  if (typeof cfg.url === "string" && cfg.url)
17606
- out.url = cfg.url;
17638
+ out.url = clean(cfg.url);
17607
17639
  if (Array.isArray(cfg.command))
17608
- out.command = cfg.command;
17640
+ out.command = cfg.command.map(clean);
17609
17641
  else if (typeof cfg.command === "string")
17610
- out.command = cfg.command;
17642
+ out.command = clean(cfg.command);
17611
17643
  if (Array.isArray(cfg.args))
17612
- out.args = cfg.args;
17644
+ out.args = cfg.args.map((a) => clean(String(a)));
17613
17645
  if (Array.isArray(cfg.alwaysAllow))
17614
17646
  out.alwaysAllow = cfg.alwaysAllow;
17615
17647
  if (cfg.env && typeof cfg.env === "object")
17616
17648
  out.envKeys = Object.keys(cfg.env).sort();
17649
+ if (hidSecret)
17650
+ out.secretsRedacted = true;
17617
17651
  return out;
17618
17652
  }
17619
17653
  var McpsSource;
@@ -17696,7 +17730,7 @@ var init_mcps_source = __esm({
17696
17730
  }
17697
17731
  for (const [name, cfgRaw] of Object.entries(obj)) {
17698
17732
  const cfg = cfgRaw || {};
17699
- const cmd = commandPreview(cfg);
17733
+ const cmd = redactInlineSecrets(commandPreview(cfg)).text;
17700
17734
  const allow = Array.isArray(cfg.alwaysAllow) ? cfg.alwaysAllow.slice(0, 8) : [];
17701
17735
  const spec = reconstructionSpec(cfg);
17702
17736
  yield {
@@ -18901,7 +18935,7 @@ var init_http = __esm({
18901
18935
  CLI_VERSION = JSON.parse(readFileSync33(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
18902
18936
  } catch {
18903
18937
  try {
18904
- if (true) CLI_VERSION = "0.5.7";
18938
+ if (true) CLI_VERSION = "0.5.8";
18905
18939
  } catch {
18906
18940
  }
18907
18941
  }
@@ -19413,7 +19447,7 @@ var init_telemetry = __esm({
19413
19447
  init_sync_client();
19414
19448
  cliVersion2 = () => {
19415
19449
  try {
19416
- return true ? "0.5.7" : "dev";
19450
+ return true ? "0.5.8" : "dev";
19417
19451
  } catch {
19418
19452
  return "dev";
19419
19453
  }
@@ -21113,7 +21147,7 @@ var init_sync_client = __esm({
21113
21147
  ownVersion = JSON.parse(readFileSync35(join45(dir, "../package.json"), "utf-8")).version || ownVersion;
21114
21148
  } catch {
21115
21149
  try {
21116
- if (true) ownVersion = "0.5.7";
21150
+ if (true) ownVersion = "0.5.8";
21117
21151
  } catch {
21118
21152
  }
21119
21153
  }
package/dist/watch.js CHANGED
@@ -17701,23 +17701,57 @@ function commandPreview(cfg) {
17701
17701
  }
17702
17702
  return "";
17703
17703
  }
17704
+ function redactInlineSecrets(value) {
17705
+ let redacted = false;
17706
+ let out = value;
17707
+ out = out.replace(/(\w+:\/\/[^:/@\s]+:)([^@\s]{1,512})(@)/g, (_m, head, _pw, tail) => {
17708
+ redacted = true;
17709
+ return `${head}__SECRET_NOT_SYNCED__${tail}`;
17710
+ });
17711
+ const tokenShapes = [
17712
+ /\bsk-[A-Za-z0-9_-]{16,}\b/g,
17713
+ // OpenAI-style
17714
+ /\bgh[pousr]_[A-Za-z0-9]{16,}\b/g,
17715
+ // GitHub
17716
+ /\bAIza[0-9A-Za-z_-]{20,}\b/g,
17717
+ // Google
17718
+ /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g
17719
+ // Slack
17720
+ ];
17721
+ for (const re of tokenShapes) {
17722
+ out = out.replace(re, () => {
17723
+ redacted = true;
17724
+ return "__SECRET_NOT_SYNCED__";
17725
+ });
17726
+ }
17727
+ return { text: out, redacted };
17728
+ }
17704
17729
  function reconstructionSpec(cfg) {
17705
17730
  const out = {
17706
17731
  type: cfg.type || (cfg.url ? "remote" : "local"),
17707
17732
  enabled: cfg.enabled !== false
17708
17733
  };
17734
+ let hidSecret = false;
17735
+ const clean = (v) => {
17736
+ const r = redactInlineSecrets(v);
17737
+ if (r.redacted)
17738
+ hidSecret = true;
17739
+ return r.text;
17740
+ };
17709
17741
  if (typeof cfg.url === "string" && cfg.url)
17710
- out.url = cfg.url;
17742
+ out.url = clean(cfg.url);
17711
17743
  if (Array.isArray(cfg.command))
17712
- out.command = cfg.command;
17744
+ out.command = cfg.command.map(clean);
17713
17745
  else if (typeof cfg.command === "string")
17714
- out.command = cfg.command;
17746
+ out.command = clean(cfg.command);
17715
17747
  if (Array.isArray(cfg.args))
17716
- out.args = cfg.args;
17748
+ out.args = cfg.args.map((a) => clean(String(a)));
17717
17749
  if (Array.isArray(cfg.alwaysAllow))
17718
17750
  out.alwaysAllow = cfg.alwaysAllow;
17719
17751
  if (cfg.env && typeof cfg.env === "object")
17720
17752
  out.envKeys = Object.keys(cfg.env).sort();
17753
+ if (hidSecret)
17754
+ out.secretsRedacted = true;
17721
17755
  return out;
17722
17756
  }
17723
17757
  var McpsSource;
@@ -17800,7 +17834,7 @@ var init_mcps_source = __esm({
17800
17834
  }
17801
17835
  for (const [name, cfgRaw] of Object.entries(obj)) {
17802
17836
  const cfg = cfgRaw || {};
17803
- const cmd = commandPreview(cfg);
17837
+ const cmd = redactInlineSecrets(commandPreview(cfg)).text;
17804
17838
  const allow = Array.isArray(cfg.alwaysAllow) ? cfg.alwaysAllow.slice(0, 8) : [];
17805
17839
  const spec = reconstructionSpec(cfg);
17806
17840
  yield {
@@ -19072,7 +19106,7 @@ var init_http = __esm({
19072
19106
  CLI_VERSION = JSON.parse(readFileSync33(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
19073
19107
  } catch {
19074
19108
  try {
19075
- if (true) CLI_VERSION = "0.5.7";
19109
+ if (true) CLI_VERSION = "0.5.8";
19076
19110
  } catch {
19077
19111
  }
19078
19112
  }
@@ -19580,7 +19614,7 @@ var init_telemetry = __esm({
19580
19614
  init_sync_client();
19581
19615
  cliVersion = () => {
19582
19616
  try {
19583
- return true ? "0.5.7" : "dev";
19617
+ return true ? "0.5.8" : "dev";
19584
19618
  } catch {
19585
19619
  return "dev";
19586
19620
  }
@@ -21218,7 +21252,7 @@ var init_sync_client = __esm({
21218
21252
  ownVersion = JSON.parse(readFileSync36(join44(dir, "../package.json"), "utf-8")).version || ownVersion;
21219
21253
  } catch {
21220
21254
  try {
21221
- if (true) ownVersion = "0.5.7";
21255
+ if (true) ownVersion = "0.5.8";
21222
21256
  } catch {
21223
21257
  }
21224
21258
  }
@@ -23571,7 +23605,7 @@ try {
23571
23605
  ownVersion2 = JSON.parse(readFileSync40(join48(dir, "../package.json"), "utf-8")).version || ownVersion2;
23572
23606
  } catch {
23573
23607
  try {
23574
- if (true) ownVersion2 = "0.5.7";
23608
+ if (true) ownVersion2 = "0.5.8";
23575
23609
  } catch {
23576
23610
  }
23577
23611
  }
@@ -23915,7 +23949,7 @@ async function runCollectorMigration(opts) {
23915
23949
  init_sync_ledger();
23916
23950
  init_collector_health();
23917
23951
  import { existsSync as existsSync49, readFileSync as readFileSync45 } from "fs";
23918
- var CLI_VERSION3 = true ? "0.5.7" : "0.0.0";
23952
+ var CLI_VERSION3 = true ? "0.5.8" : "0.0.0";
23919
23953
  var DEBOUNCE_MS = 5e3;
23920
23954
  var CLAUDE_DIR = claudeBackend.projectsDir();
23921
23955
  var PLANS_DIR = claudeBackend.plansDir();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chat-recall",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/munhq/chat-recall.git"