@inerrata-corporation/errata 2.0.14-dev.3162 → 2.0.14-dev.3165

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/errata.mjs +10 -50
  2. package/package.json +1 -1
package/errata.mjs CHANGED
@@ -15493,8 +15493,6 @@ function looksLikeSecretValue(raw2, quoted) {
15493
15493
  if (raw2.includes("${") || raw2.includes("{{") || raw2.includes("%(")) return false;
15494
15494
  if (raw2.startsWith("[redacted:")) return false;
15495
15495
  if (quoted) return raw2.length > 0;
15496
- const lower = raw2.toLowerCase();
15497
- if (ASSIGNMENT_STOPWORDS.has(lower)) return false;
15498
15496
  if (/^(?:process\.env\.|os\.environ(?:\[|\.)|(?:request|response|config|settings|options)\.)/.test(raw2)) return false;
15499
15497
  if (/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\(/.test(raw2)) return false;
15500
15498
  return raw2.length > 0;
@@ -15559,75 +15557,36 @@ function scrubHistoryValue(value) {
15559
15557
  const clear = (input) => typeof input === "string" ? input.replace(literals, REDACTED_CREDENTIAL) : Array.isArray(input) ? input.map(clear) : input && typeof input === "object" ? Object.fromEntries(Object.entries(input).map(([k, v]) => [k, clear(v)])) : input;
15560
15558
  return clear(safe);
15561
15559
  }
15562
- var HISTORY_SCRUBBER_VERSION, REDACTED_CREDENTIAL, REDACTED_EMAIL, cred, ASSIGNMENT_STOPWORDS, CREDENTIAL_RULES, EMAIL_RE;
15560
+ var HISTORY_SCRUBBER_VERSION, REDACTED_CREDENTIAL, REDACTED_EMAIL, cred, PASSWORD_PROSE_DESCRIPTORS, CREDENTIAL_RULES, EMAIL_RE;
15563
15561
  var init_history_text = __esm({
15564
15562
  "../../packages/shared/src/history-text.ts"() {
15565
15563
  "use strict";
15566
- HISTORY_SCRUBBER_VERSION = "history-scrub-4";
15564
+ HISTORY_SCRUBBER_VERSION = "history-scrub-5";
15567
15565
  REDACTED_CREDENTIAL = "[redacted:credential]";
15568
15566
  REDACTED_EMAIL = "[redacted:email]";
15569
15567
  cred = () => REDACTED_CREDENTIAL;
15570
- ASSIGNMENT_STOPWORDS = /* @__PURE__ */ new Set([
15571
- "string",
15572
- "boolean",
15573
- "number",
15568
+ PASSWORD_PROSE_DESCRIPTORS = /* @__PURE__ */ new Set([
15574
15569
  "required",
15575
15570
  "optional",
15576
15571
  "undefined",
15577
15572
  "unknown",
15578
- "function",
15579
- "process",
15580
- "request",
15581
- "response",
15582
- "password",
15583
- "secret",
15584
- "token",
15585
- "tokens",
15586
- "credential",
15587
- "credentials",
15588
- "bearer",
15589
- "basic",
15590
- "example",
15591
15573
  "redacted",
15592
15574
  "nullable",
15593
- "readonly",
15594
- "override",
15595
- "abstract",
15596
- "interface",
15597
- "constant",
15598
- "variable",
15599
- "property",
15600
- "parameter",
15601
- "argument",
15602
- "callback",
15603
- "promise",
15604
- "settings",
15605
- "options",
15606
- "default",
15607
15575
  "disabled",
15608
15576
  "enabled",
15609
- "internal",
15610
- "external",
15611
- "protected",
15612
15577
  "provided",
15613
- "resolved",
15614
15578
  "rejected",
15615
- "expected",
15616
- "received",
15617
15579
  "salt",
15618
15580
  "hash",
15619
15581
  "hashed",
15620
- "hashing",
15621
- "authentication",
15622
- "field",
15623
- "format"
15582
+ "hashing"
15624
15583
  ]);
15625
15584
  CREDENTIAL_RULES = [
15626
15585
  // Human-written seed/reset notes omit assignment punctuation: password `…`
15627
15586
  // or password (…). Preserve names of fields and hash components.
15628
15587
  {
15629
15588
  re: /\b((?:password|passwd|passphrase|pwd)\s+)(["'`(])([^\s"'`,;)}\]]+)(["'`)])/gi,
15630
- replace: (m) => !ASSIGNMENT_STOPWORDS.has((m[3] ?? "").toLowerCase()) && looksLikeSecretValue(m[3] ?? "", true) ? `${m[1]}${m[2]}${REDACTED_CREDENTIAL}${m[4]}` : null
15589
+ replace: (m) => !(m[2] === "(" && PASSWORD_PROSE_DESCRIPTORS.has((m[3] ?? "").toLowerCase())) && looksLikeSecretValue(m[3] ?? "", true) ? `${m[1]}${m[2]}${REDACTED_CREDENTIAL}${m[4]}` : null
15631
15590
  },
15632
15591
  // "with SeedValue42! credentials" and "with SeedValue42!/seeded account".
15633
15592
  // Require mixed-case letters plus a digit, or a password-like special char;
@@ -15657,7 +15616,7 @@ var init_history_text = __esm({
15657
15616
  re: /\b((?:password|passwd|passphrase|pwd)\s+(?:is|was|of)\s+)(["'\x60]?)([^\s"'\x60,;)}\]]+)/gi,
15658
15617
  replace: (m) => {
15659
15618
  const value = m[3] ?? "";
15660
- if (ASSIGNMENT_STOPWORDS.has(value.toLowerCase()) || value.startsWith("[redacted:") || /\$\{|\{\{|process\./.test(value)) return null;
15619
+ if (!m[2] && PASSWORD_PROSE_DESCRIPTORS.has(value.toLowerCase()) || value.startsWith("[redacted:") || /\$\{|\{\{|process\./.test(value)) return null;
15661
15620
  return `${m[1]}${m[2]}${REDACTED_CREDENTIAL}`;
15662
15621
  }
15663
15622
  },
@@ -15693,8 +15652,9 @@ var init_history_text = __esm({
15693
15652
  },
15694
15653
  // Assignments after key-ish names: `password=...`, `API_KEY: "..."`,
15695
15654
  // `"client_secret": "..."`, `AWS_SECRET_ACCESS_KEY=...`, 32+ hex/base64 after
15696
- // any of them. The value heuristic keeps `token: string` and
15697
- // `password = process.env.X` intact.
15655
+ // any of them. Recognizable expressions such as `process.env.X` survive.
15656
+ // Bare `password: string` is ambiguous with YAML containing a literal weak
15657
+ // password, so it is redacted. A stopword is never proof of safe code.
15698
15658
  {
15699
15659
  re: /((?:[A-Za-z0-9_.-]*?)(?:password|passwd|passphrase|pwd|secret|token|api[_-]?key|apikey|access[_-]?key|private[_-]?key|auth[_-]?key|credential)(?:[A-Za-z0-9_-]*))(["']?\s*(?:=>|=|:)\s*)(["'`]?)([^\s"'`,;)}\]]+)/gi,
15700
15660
  replace: (m) => {
@@ -81266,7 +81226,7 @@ function createWatchBreaker(deps) {
81266
81226
  }
81267
81227
 
81268
81228
  // src/engine.ts
81269
- var DAEMON_VERSION = true ? "2.0.14-dev.3162" : "2.0.0-alpha.0";
81229
+ var DAEMON_VERSION = true ? "2.0.14-dev.3165" : "2.0.0-alpha.0";
81270
81230
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
81271
81231
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
81272
81232
  var GIT_OP_MUTE_MS = 4e3;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.14-dev.3162",
3
+ "version": "2.0.14-dev.3165",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {