@inerrata-corporation/errata 2.0.2-dev.714 → 2.0.2-dev.720

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 +63 -8
  2. package/package.json +1 -1
package/errata.mjs CHANGED
@@ -15479,15 +15479,18 @@ function summaryRejectionReason(summary, isKnownToken) {
15479
15479
  return null;
15480
15480
  }
15481
15481
  function substituteSymbolSummaries(text, summaryByToken) {
15482
- if (summaryByToken.size === 0) return text;
15482
+ if (summaryByToken.size === 0) return { text, substituted: 0, offered: 0 };
15483
15483
  const present = extractIdentifierTokens(text).filter((t) => summaryByToken.has(t));
15484
15484
  present.sort((a, b) => b.length - a.length);
15485
15485
  let out2 = text;
15486
+ let substituted = 0;
15486
15487
  for (const key of present) {
15487
15488
  const re = new RegExp(`(?<![A-Za-z0-9_$.])${escapeRe2(key)}(?![A-Za-z0-9_$])`, "g");
15489
+ const before = out2;
15488
15490
  out2 = out2.replace(re, summaryByToken.get(key));
15491
+ if (out2 !== before) substituted++;
15489
15492
  }
15490
- return out2;
15493
+ return { text: out2, substituted, offered: summaryByToken.size };
15491
15494
  }
15492
15495
  function vetSidecarSummaries(sidecar) {
15493
15496
  if (!sidecar) return null;
@@ -27844,8 +27847,15 @@ function fileRolePhrase(relPath, level = 1) {
27844
27847
  if (/\.(json|ya?ml|toml|env)$/i.test(relPath)) return "a config file";
27845
27848
  return "a source file";
27846
27849
  }
27850
+ function isSourceFileToken(token) {
27851
+ const basename5 = token.split(/[/\\]/).pop() ?? token;
27852
+ if (CONVENTION_FILENAMES.has(basename5)) return false;
27853
+ const ext = basename5.split(".").pop();
27854
+ return ext !== void 0 && SOURCE_EXTENSIONS.has(ext.toLowerCase());
27855
+ }
27847
27856
  function generalizeFileRefs(text, fileLexicon, level = 1) {
27848
27857
  let out2 = text;
27858
+ let lexiconMisses = 0;
27849
27859
  const files = [];
27850
27860
  const seenFiles = /* @__PURE__ */ new Set();
27851
27861
  for (const m of out2.matchAll(FILE_TOKEN_RE)) {
@@ -27854,6 +27864,7 @@ function generalizeFileRefs(text, fileLexicon, level = 1) {
27854
27864
  seenFiles.add(tok);
27855
27865
  const entry = resolveFileToken(tok, fileLexicon);
27856
27866
  if (entry) files.push([tok, entry]);
27867
+ else if (isSourceFileToken(tok)) lexiconMisses++;
27857
27868
  }
27858
27869
  files.sort((a, b) => b[0].length - a[0].length);
27859
27870
  for (const [tok, entry] of files) {
@@ -27874,10 +27885,10 @@ function generalizeFileRefs(text, fileLexicon, level = 1) {
27874
27885
  const re = new RegExp(`(?<![\\w$/\\\\.-])${escapeRe4(tok)}(?![\\w$/\\\\.-])`, "g");
27875
27886
  out2 = out2.replace(re, fileRolePhrase(entry.relPath, level));
27876
27887
  }
27877
- return out2;
27888
+ return { text: out2, substitutions: files.length + stems.length, lexiconMisses };
27878
27889
  }
27879
27890
  function generalizeSymbols(text, lexicon, level = 1, fileLexicon) {
27880
- let out2 = fileLexicon ? generalizeFileRefs(text, fileLexicon, level) : text;
27891
+ let out2 = fileLexicon ? generalizeFileRefs(text, fileLexicon, level).text : text;
27881
27892
  const present = [];
27882
27893
  const seen = /* @__PURE__ */ new Set();
27883
27894
  for (const m of out2.matchAll(TOKEN_RE3)) {
@@ -27896,7 +27907,7 @@ function generalizeSymbols(text, lexicon, level = 1, fileLexicon) {
27896
27907
  }
27897
27908
  return generalize(out2, { level }).text;
27898
27909
  }
27899
- var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, CONVENTION_FILENAMES, CONVENTION_BASENAME_MIN_FILES, CONVENTION_STEMS, FILE_TOKEN_RE, STEM_TOKEN_RE, TOKEN_RE3;
27910
+ var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, CONVENTION_FILENAMES, CONVENTION_BASENAME_MIN_FILES, CONVENTION_STEMS, FILE_TOKEN_RE, STEM_TOKEN_RE, SOURCE_EXTENSIONS, TOKEN_RE3;
27900
27911
  var init_generalize_graph = __esm({
27901
27912
  "src/generalize-graph.ts"() {
27902
27913
  "use strict";
@@ -27966,6 +27977,45 @@ var init_generalize_graph = __esm({
27966
27977
  ]);
27967
27978
  FILE_TOKEN_RE = /(?:[A-Za-z0-9_.-]+\/)*[A-Za-z0-9_-][A-Za-z0-9_.-]*\.[A-Za-z0-9]+/g;
27968
27979
  STEM_TOKEN_RE = /[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)+/g;
27980
+ SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
27981
+ "ts",
27982
+ "tsx",
27983
+ "js",
27984
+ "jsx",
27985
+ "mjs",
27986
+ "cjs",
27987
+ "py",
27988
+ "go",
27989
+ "rs",
27990
+ "java",
27991
+ "kt",
27992
+ "rb",
27993
+ "c",
27994
+ "h",
27995
+ "cc",
27996
+ "cpp",
27997
+ "hpp",
27998
+ "cs",
27999
+ "php",
28000
+ "swift",
28001
+ "scala",
28002
+ "sh",
28003
+ "ps1",
28004
+ "sql",
28005
+ "css",
28006
+ "scss",
28007
+ "html",
28008
+ "vue",
28009
+ "svelte",
28010
+ "md",
28011
+ "json",
28012
+ "yaml",
28013
+ "yml",
28014
+ "toml",
28015
+ "ini",
28016
+ "env",
28017
+ "cypher"
28018
+ ]);
27969
28019
  TOKEN_RE3 = /[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*/g;
27970
28020
  }
27971
28021
  });
@@ -55561,7 +55611,7 @@ function startLoopLagMonitor(thresholdMs = 1e3) {
55561
55611
  }
55562
55612
 
55563
55613
  // src/engine.ts
55564
- var DAEMON_VERSION = true ? "2.0.2-dev.714" : "2.0.0-alpha.0";
55614
+ var DAEMON_VERSION = true ? "2.0.2-dev.720" : "2.0.0-alpha.0";
55565
55615
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
55566
55616
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
55567
55617
  var GIT_OP_MUTE_MS = 4e3;
@@ -58029,7 +58079,10 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
58029
58079
  const fileLexicon = buildFileLexicon(store);
58030
58080
  const shareable = (n) => {
58031
58081
  const preserved = symbolIndex ? preservedSymbolsFor(n.description, symbolIndex) : [];
58032
- const fileScrubbed = generalizeFileRefs(n.description, fileLexicon, level);
58082
+ const fileRefs = generalizeFileRefs(n.description, fileLexicon, level);
58083
+ const fileScrubbed = fileRefs.text;
58084
+ composition.fileRefsSubstituted += fileRefs.substitutions;
58085
+ composition.fileRefLexiconMisses += fileRefs.lexiconMisses;
58033
58086
  const generalized = generalize(fileScrubbed, { level, project: projectIdentity });
58034
58087
  const shippedText = generalized.text;
58035
58088
  if (generalized.report.classes.length > 0) composition.privacyRewritten++;
@@ -58073,7 +58126,9 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
58073
58126
  privacyRewritten: 0,
58074
58127
  sidecarDropped: 0,
58075
58128
  sidecarDropReasons: {},
58076
- sidecarTruncatedAtCap: 0
58129
+ sidecarTruncatedAtCap: 0,
58130
+ fileRefsSubstituted: 0,
58131
+ fileRefLexiconMisses: 0
58077
58132
  };
58078
58133
  for (const label of INSTANCE_LABELS) {
58079
58134
  const ref = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.2-dev.714",
3
+ "version": "2.0.2-dev.720",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {