@inerrata-corporation/errata 2.0.2-dev.417 → 2.0.2-dev.437

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 +339 -297
  2. package/package.json +1 -1
package/errata.mjs CHANGED
@@ -18036,6 +18036,207 @@ var init_aggregate = __esm({
18036
18036
  }
18037
18037
  });
18038
18038
 
18039
+ // ../../packages/embedding/src/model.ts
18040
+ import { mkdirSync as mkdirSync3, existsSync as existsSync4 } from "node:fs";
18041
+ import { homedir } from "node:os";
18042
+ import { dirname as dirname3, join as join3 } from "node:path";
18043
+ import { createRequire } from "node:module";
18044
+ function semanticFloorFor(version2) {
18045
+ if (version2 === EMBEDDING_VERSION || version2 === MODEL_EMBEDDING_VERSION) return 0.25;
18046
+ return 0.5;
18047
+ }
18048
+ function noteHashFallback() {
18049
+ if (warnedHashFallback) return;
18050
+ if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") return;
18051
+ warnedHashFallback = true;
18052
+ console.warn(
18053
+ `[errata] embedding model unavailable (${lastError?.message ?? "unknown"}) \u2014 falling back to ${EMBEDDING_VERSION} hash vectors; semantic ranking runs at reduced fidelity`
18054
+ );
18055
+ }
18056
+ function getCacheDir() {
18057
+ return process.env["ERRATA_MODEL_CACHE"] ?? join3(homedir(), ".errata", "models");
18058
+ }
18059
+ async function loadTransformers() {
18060
+ try {
18061
+ return await import("@huggingface/transformers");
18062
+ } catch (err2) {
18063
+ void err2;
18064
+ }
18065
+ try {
18066
+ const seaResourceBase = join3(
18067
+ // execPath dir is where errata.exe lives; resources/ rides alongside.
18068
+ dirname3(process.execPath),
18069
+ "resources",
18070
+ "_resolve.js"
18071
+ );
18072
+ const resourceRequire = createRequire(seaResourceBase);
18073
+ return resourceRequire("@huggingface/transformers");
18074
+ } catch (err2) {
18075
+ lastError = err2 instanceof Error ? err2 : new Error(String(err2));
18076
+ return null;
18077
+ }
18078
+ }
18079
+ async function loadPipeline() {
18080
+ const cacheDir = getCacheDir();
18081
+ if (!existsSync4(cacheDir)) mkdirSync3(cacheDir, { recursive: true });
18082
+ try {
18083
+ const tx = await loadTransformers();
18084
+ if (!tx) {
18085
+ throw lastError ?? new Error("transformers package unavailable");
18086
+ }
18087
+ tx.env.cacheDir = cacheDir;
18088
+ tx.env.useFSCache = true;
18089
+ tx.env.allowLocalModels = true;
18090
+ tx.env.allowRemoteModels = process.env["ERRATA_OFFLINE"] !== "1";
18091
+ const pipe2 = await tx.pipeline("feature-extraction", MODEL_NAME, {
18092
+ // Quantized weights cut size 4x; quality drop is negligible for
18093
+ // short-text similarity. Override via env if you want full
18094
+ // precision.
18095
+ dtype: process.env["ERRATA_MODEL_DTYPE"] ?? "q8"
18096
+ });
18097
+ return pipe2;
18098
+ } catch (err2) {
18099
+ lastError = err2 instanceof Error ? err2 : new Error(String(err2));
18100
+ return null;
18101
+ }
18102
+ }
18103
+ async function ensureModelLoaded() {
18104
+ if (!pipelinePromise) {
18105
+ pipelinePromise = loadPipeline();
18106
+ }
18107
+ return pipelinePromise;
18108
+ }
18109
+ async function embedTextWithModel(text) {
18110
+ const pipe2 = await ensureModelLoaded();
18111
+ if (!pipe2) {
18112
+ throw new Error(
18113
+ `embedding model could not be loaded: ${lastError?.message ?? "unknown"}`
18114
+ );
18115
+ }
18116
+ if (!text) return new Array(MODEL_EMBEDDING_DIM).fill(0);
18117
+ const out2 = await pipe2(text, { pooling: "mean", normalize: true });
18118
+ return Array.from(out2.data);
18119
+ }
18120
+ async function embedBatchWithModelOrHash(texts) {
18121
+ if (texts.length === 0) return [];
18122
+ if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") {
18123
+ return texts.map((t) => {
18124
+ const v = embed(t);
18125
+ return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
18126
+ });
18127
+ }
18128
+ try {
18129
+ const pipe2 = await ensureModelLoaded();
18130
+ if (pipe2) {
18131
+ const out2 = await pipe2(texts, {
18132
+ pooling: "mean",
18133
+ normalize: true
18134
+ });
18135
+ const dim = out2.dims[out2.dims.length - 1] ?? MODEL_EMBEDDING_DIM;
18136
+ const total = texts.length;
18137
+ const results = [];
18138
+ for (let i2 = 0; i2 < total; i2++) {
18139
+ const v = Array.from(out2.data.subarray(i2 * dim, (i2 + 1) * dim));
18140
+ results.push({ vector: v, version: MODEL_EMBEDDING_VERSION, dim });
18141
+ }
18142
+ return results;
18143
+ }
18144
+ } catch {
18145
+ }
18146
+ noteHashFallback();
18147
+ return texts.map((t) => {
18148
+ const v = embed(t);
18149
+ return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
18150
+ });
18151
+ }
18152
+ async function embedTextWithModelOrHash(text) {
18153
+ if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") {
18154
+ const v = embed(text);
18155
+ return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
18156
+ }
18157
+ try {
18158
+ const v = await embedTextWithModel(text);
18159
+ return { vector: v, version: MODEL_EMBEDDING_VERSION, dim: v.length };
18160
+ } catch {
18161
+ noteHashFallback();
18162
+ const v = embed(text);
18163
+ return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
18164
+ }
18165
+ }
18166
+ var MODEL_NAME, MODEL_EMBEDDING_DIM, MODEL_EMBEDDING_VERSION, pipelinePromise, lastError, warnedHashFallback;
18167
+ var init_model = __esm({
18168
+ "../../packages/embedding/src/model.ts"() {
18169
+ "use strict";
18170
+ init_src3();
18171
+ MODEL_NAME = "Xenova/all-MiniLM-L6-v2";
18172
+ MODEL_EMBEDDING_DIM = 384;
18173
+ MODEL_EMBEDDING_VERSION = "minilm-l6-v2";
18174
+ pipelinePromise = null;
18175
+ lastError = null;
18176
+ warnedHashFallback = false;
18177
+ }
18178
+ });
18179
+
18180
+ // ../../packages/embedding/src/index.ts
18181
+ function djb2(s) {
18182
+ let h = 5381;
18183
+ for (let i2 = 0; i2 < s.length; i2++) {
18184
+ h = (h << 5) + h + s.charCodeAt(i2) >>> 0;
18185
+ }
18186
+ return h;
18187
+ }
18188
+ function djb2Signed(s) {
18189
+ let h = 0;
18190
+ for (let i2 = 0; i2 < s.length; i2++) {
18191
+ h = h * 31 + s.charCodeAt(i2) | 0;
18192
+ }
18193
+ return h;
18194
+ }
18195
+ function tokenize(text) {
18196
+ return text.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length > 0 && t.length <= 40);
18197
+ }
18198
+ function* charTrigrams(text) {
18199
+ const s = text.toLowerCase();
18200
+ for (let i2 = 0; i2 <= s.length - 3; i2++) {
18201
+ yield s.slice(i2, i2 + 3);
18202
+ }
18203
+ }
18204
+ function embed(text) {
18205
+ const vec = new Array(EMBEDDING_DIM).fill(0);
18206
+ if (!text) return vec;
18207
+ for (const tok of tokenize(text)) {
18208
+ const idx = djb2(tok) % EMBEDDING_DIM;
18209
+ const sign = djb2Signed(tok) & 1 ? 1 : -1;
18210
+ vec[idx] = vec[idx] + sign;
18211
+ }
18212
+ for (const tri of charTrigrams(text)) {
18213
+ const idx = djb2("3:" + tri) % EMBEDDING_DIM;
18214
+ const sign = djb2Signed("3:" + tri) & 1 ? 1 : -1;
18215
+ vec[idx] = vec[idx] + 0.5 * sign;
18216
+ }
18217
+ let normSq = 0;
18218
+ for (const x of vec) normSq += x * x;
18219
+ if (normSq <= 0) return vec;
18220
+ const inv = 1 / Math.sqrt(normSq);
18221
+ for (let i2 = 0; i2 < vec.length; i2++) vec[i2] = vec[i2] * inv;
18222
+ return vec;
18223
+ }
18224
+ function cosine(a, b) {
18225
+ if (a.length !== b.length || a.length === 0) return 0;
18226
+ let dot = 0;
18227
+ for (let i2 = 0; i2 < a.length; i2++) dot += a[i2] * b[i2];
18228
+ return dot;
18229
+ }
18230
+ var EMBEDDING_DIM, EMBEDDING_VERSION;
18231
+ var init_src3 = __esm({
18232
+ "../../packages/embedding/src/index.ts"() {
18233
+ "use strict";
18234
+ init_model();
18235
+ EMBEDDING_DIM = 256;
18236
+ EMBEDDING_VERSION = "hash-v1";
18237
+ }
18238
+ });
18239
+
18039
18240
  // ../../packages/local-graph/src/problem-package-link.ts
18040
18241
  function buildPackageIndex(store) {
18041
18242
  const idx = /* @__PURE__ */ new Map();
@@ -18515,14 +18716,51 @@ function ingestDesignProblem(store, flag, opts) {
18515
18716
  const linkedPackages = linkProblemToPackages(store, problemId, linkText, opts.ts).linked;
18516
18717
  return { problemId, created, corroborated, rootCauseId, solutionId, anchored, linkedPackages };
18517
18718
  }
18719
+ function canonicalizePatternText(name2) {
18720
+ const stripped = name2.replace(/^\s*pattern(?:\s*[×x]\s*\d+)?\s*(?:\(exemplar\))?\s*[:—–-]\s*/i, "").replace(/\s+/g, " ").trim();
18721
+ return stripped.length > 0 ? stripped : name2.replace(/\s+/g, " ").trim();
18722
+ }
18518
18723
  function mintPatternNode(store, name2, ts) {
18519
- const display = name2.replace(/\s+/g, " ").trim();
18724
+ const display = canonicalizePatternText(name2);
18520
18725
  const id = `pat_${digest({ pattern: display.toLowerCase() })}`.slice(0, 56);
18521
- if (!store.getNode(id)) {
18522
- store.mergeNode(
18523
- buildNode(id, "Pattern", display, ts, { source: "convo", provisional: true })
18524
- );
18525
- }
18726
+ const exact = store.getNode(id);
18727
+ const reinforce = (node2, variant) => {
18728
+ const aliases = Array.isArray(node2.attrs["aliasTexts"]) ? [...node2.attrs["aliasTexts"]] : [];
18729
+ if (variant && variant !== node2.description && !aliases.includes(variant) && aliases.length < PATTERN_ALIAS_CAP) {
18730
+ aliases.push(variant);
18731
+ }
18732
+ store.updateNode(node2.id, {
18733
+ attrs: {
18734
+ ...node2.attrs,
18735
+ observedCount: (Number(node2.attrs["observedCount"]) || 1) + 1,
18736
+ ...aliases.length > 0 ? { aliasTexts: aliases } : {}
18737
+ },
18738
+ lastUpdatedAt: ts
18739
+ });
18740
+ return node2.id;
18741
+ };
18742
+ if (exact) return reinforce(exact);
18743
+ const emb = embed(display);
18744
+ let best = null;
18745
+ let bestCos = 0;
18746
+ for (const p of store.findNodesByLabel("Pattern")) {
18747
+ const e = p.embedding;
18748
+ if (!e || e.length !== EMBEDDING_DIM) continue;
18749
+ let d = 0;
18750
+ for (let i2 = 0; i2 < EMBEDDING_DIM; i2++) d += e[i2] * emb[i2];
18751
+ if (d > bestCos) {
18752
+ bestCos = d;
18753
+ best = p;
18754
+ }
18755
+ }
18756
+ if (best && bestCos >= PATTERN_DEDUP_COSINE) return reinforce(best, display);
18757
+ store.mergeNode({
18758
+ ...buildNode(id, "Pattern", display, ts, { source: "convo", provisional: true, observedCount: 1 }),
18759
+ // Embedded inline (sync hash) so the node participates in the gate
18760
+ // immediately — buildNode's empty embedding would leave every new pattern
18761
+ // invisible to dedup until the nightly embed pass.
18762
+ embedding: emb
18763
+ });
18526
18764
  return id;
18527
18765
  }
18528
18766
  function titleCaseDomain(name2) {
@@ -18895,15 +19133,18 @@ function markFixCandidates(store, t) {
18895
19133
  }
18896
19134
  return resolved;
18897
19135
  }
18898
- var DESIGN_PROMOTE_AT, DEDUP_STOPWORDS, SAME_ANCHOR_DEDUP_JACCARD, CITABLE_PRIOR_LABELS, MAX_ANCHOR_FILES, AUTO_MINT_PREFIX;
19136
+ var DESIGN_PROMOTE_AT, PATTERN_DEDUP_COSINE, PATTERN_ALIAS_CAP, DEDUP_STOPWORDS, SAME_ANCHOR_DEDUP_JACCARD, CITABLE_PRIOR_LABELS, MAX_ANCHOR_FILES, AUTO_MINT_PREFIX;
18899
19137
  var init_design_problem = __esm({
18900
19138
  "../../packages/local-graph/src/design-problem.ts"() {
18901
19139
  "use strict";
18902
19140
  init_src();
18903
19141
  init_src();
19142
+ init_src3();
18904
19143
  init_src2();
18905
19144
  init_problem_package_link();
18906
19145
  DESIGN_PROMOTE_AT = 1;
19146
+ PATTERN_DEDUP_COSINE = 0.85;
19147
+ PATTERN_ALIAS_CAP = 5;
18907
19148
  DEDUP_STOPWORDS = /* @__PURE__ */ new Set([
18908
19149
  "the",
18909
19150
  "and",
@@ -19961,7 +20202,7 @@ var init_bko = __esm({
19961
20202
  });
19962
20203
 
19963
20204
  // ../../packages/math/src/index.ts
19964
- var init_src3 = __esm({
20205
+ var init_src4 = __esm({
19965
20206
  "../../packages/math/src/index.ts"() {
19966
20207
  "use strict";
19967
20208
  init_constants();
@@ -20508,7 +20749,7 @@ var init_triage2 = __esm({
20508
20749
  init_src();
20509
20750
  init_src();
20510
20751
  init_src();
20511
- init_src3();
20752
+ init_src4();
20512
20753
  init_src2();
20513
20754
  COOCCUR_BONUS = 0.25;
20514
20755
  routeEdgeId = (triageId, causeId) => `edge_rt_${triageId}_${causeId}`;
@@ -20807,7 +21048,7 @@ var init_abstraction = __esm({
20807
21048
  "use strict";
20808
21049
  init_src();
20809
21050
  init_src2();
20810
- init_src3();
21051
+ init_src4();
20811
21052
  init_percolate();
20812
21053
  init_triage2();
20813
21054
  DEFAULT_MIN_CLUSTER_SIZE = 3;
@@ -20956,7 +21197,7 @@ var init_community2 = __esm({
20956
21197
  "../../packages/local-graph/src/community.ts"() {
20957
21198
  "use strict";
20958
21199
  init_src2();
20959
- init_src3();
21200
+ init_src4();
20960
21201
  JOINT_COMMUNITY_LABELS = [
20961
21202
  "Problem",
20962
21203
  "Solution",
@@ -21282,6 +21523,7 @@ __export(src_exports2, {
21282
21523
  JOINT_COMMUNITY_EDGES: () => JOINT_COMMUNITY_EDGES,
21283
21524
  JOINT_COMMUNITY_LABELS: () => JOINT_COMMUNITY_LABELS,
21284
21525
  MAX_ANCHOR_FILES: () => MAX_ANCHOR_FILES,
21526
+ PATTERN_DEDUP_COSINE: () => PATTERN_DEDUP_COSINE,
21285
21527
  PERCOLATING_DRIFT_EDGES: () => PERCOLATING_DRIFT_EDGES,
21286
21528
  PERCOLATING_EDGES: () => PERCOLATING_EDGES,
21287
21529
  PERCOLATING_LABELS: () => PERCOLATING_LABELS,
@@ -21301,6 +21543,7 @@ __export(src_exports2, {
21301
21543
  buildPackageIndex: () => buildPackageIndex,
21302
21544
  buildPrincipleSync: () => buildPrincipleSync,
21303
21545
  buildSymbolIndex: () => buildSymbolIndex,
21546
+ canonicalizePatternText: () => canonicalizePatternText,
21304
21547
  causalChain: () => causalChain,
21305
21548
  claimId: () => claimId,
21306
21549
  clearRevisit: () => clearRevisit,
@@ -21386,7 +21629,7 @@ __export(src_exports2, {
21386
21629
  triageOf: () => triageOf,
21387
21630
  walk: () => walk
21388
21631
  });
21389
- var init_src4 = __esm({
21632
+ var init_src5 = __esm({
21390
21633
  "../../packages/local-graph/src/index.ts"() {
21391
21634
  "use strict";
21392
21635
  init_store();
@@ -21908,7 +22151,7 @@ var RECALL_FIRST_HEADER, RECALL_FIRST_BODY, RECALL_FIRST_BLOCK, SEARCH_IMPERATIV
21908
22151
  var init_render = __esm({
21909
22152
  "../../packages/context-writer/src/render.ts"() {
21910
22153
  "use strict";
21911
- init_src4();
22154
+ init_src5();
21912
22155
  init_src2();
21913
22156
  RECALL_FIRST_HEADER = "## errata \u2014 recall before you work";
21914
22157
  RECALL_FIRST_BODY = "Before investigating any bug or error, your FIRST tool call must be `mcp__errata__errata_search` with a few words describing the problem. This machine's knowledge graph records previously solved problems \u2014 the answer may already be recorded. Read what it returns before touching any files.";
@@ -21986,8 +22229,8 @@ var init_bleed_memory = __esm({
21986
22229
  });
21987
22230
 
21988
22231
  // ../../packages/context-writer/src/bleed-rules.ts
21989
- import { existsSync as existsSync4, mkdirSync as mkdirSync3, readdirSync, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync4 } from "node:fs";
21990
- import { join as join3 } from "node:path";
22232
+ import { existsSync as existsSync5, mkdirSync as mkdirSync4, readdirSync, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync4 } from "node:fs";
22233
+ import { join as join4 } from "node:path";
21991
22234
  function formatRuleFile(item) {
21992
22235
  const frontmatter = item.paths && item.paths.length > 0 ? `---
21993
22236
  paths:
@@ -22000,21 +22243,21 @@ ${item.body.trim()}
22000
22243
  `;
22001
22244
  }
22002
22245
  function bleedRules(rulesDir, items) {
22003
- if (!existsSync4(rulesDir)) mkdirSync3(rulesDir, { recursive: true });
22246
+ if (!existsSync5(rulesDir)) mkdirSync4(rulesDir, { recursive: true });
22004
22247
  const wanted = new Map(items.map((i2) => [fileFor(i2.slug), i2]));
22005
22248
  let written = 0;
22006
22249
  let created = 0;
22007
22250
  for (const [file2, item] of wanted) {
22008
- const path2 = join3(rulesDir, file2);
22009
- if (!existsSync4(path2)) created++;
22251
+ const path2 = join4(rulesDir, file2);
22252
+ if (!existsSync5(path2)) created++;
22010
22253
  writeFileSync4(path2, formatRuleFile(item), "utf8");
22011
22254
  written++;
22012
22255
  }
22013
22256
  let pruned = 0;
22014
22257
  for (const f of readdirSync(rulesDir)) {
22015
22258
  if (!f.startsWith(PREFIX) || !f.endsWith(".md") || wanted.has(f)) continue;
22016
- if (readFileSync3(join3(rulesDir, f), "utf8").includes(MARKER)) {
22017
- rmSync(join3(rulesDir, f));
22259
+ if (readFileSync3(join4(rulesDir, f), "utf8").includes(MARKER)) {
22260
+ rmSync(join4(rulesDir, f));
22018
22261
  pruned++;
22019
22262
  }
22020
22263
  }
@@ -22097,7 +22340,7 @@ var init_select_durable_memory = __esm({
22097
22340
  });
22098
22341
 
22099
22342
  // ../../packages/context-writer/src/index.ts
22100
- var init_src5 = __esm({
22343
+ var init_src6 = __esm({
22101
22344
  "../../packages/context-writer/src/index.ts"() {
22102
22345
  "use strict";
22103
22346
  init_agents_md();
@@ -23052,7 +23295,7 @@ var init_pkce = __esm({
23052
23295
  });
23053
23296
 
23054
23297
  // ../../packages/cloud-client/src/index.ts
23055
- var init_src6 = __esm({
23298
+ var init_src7 = __esm({
23056
23299
  "../../packages/cloud-client/src/index.ts"() {
23057
23300
  "use strict";
23058
23301
  init_client();
@@ -23080,14 +23323,14 @@ function envPaths(name2, { suffix = "nodejs" } = {}) {
23080
23323
  }
23081
23324
  return linux(name2);
23082
23325
  }
23083
- var homedir, tmpdir, env, macos, windows, linux;
23326
+ var homedir2, tmpdir, env, macos, windows, linux;
23084
23327
  var init_env_paths = __esm({
23085
23328
  "../../node_modules/.pnpm/env-paths@3.0.0/node_modules/env-paths/index.js"() {
23086
- homedir = os.homedir();
23329
+ homedir2 = os.homedir();
23087
23330
  tmpdir = os.tmpdir();
23088
23331
  ({ env } = process3);
23089
23332
  macos = (name2) => {
23090
- const library = path.join(homedir, "Library");
23333
+ const library = path.join(homedir2, "Library");
23091
23334
  return {
23092
23335
  data: path.join(library, "Application Support", name2),
23093
23336
  config: path.join(library, "Preferences", name2),
@@ -23097,8 +23340,8 @@ var init_env_paths = __esm({
23097
23340
  };
23098
23341
  };
23099
23342
  windows = (name2) => {
23100
- const appData = env.APPDATA || path.join(homedir, "AppData", "Roaming");
23101
- const localAppData = env.LOCALAPPDATA || path.join(homedir, "AppData", "Local");
23343
+ const appData = env.APPDATA || path.join(homedir2, "AppData", "Roaming");
23344
+ const localAppData = env.LOCALAPPDATA || path.join(homedir2, "AppData", "Local");
23102
23345
  return {
23103
23346
  // Data/config/cache/log are invented by me as Windows isn't opinionated about this
23104
23347
  data: path.join(localAppData, name2, "Data"),
@@ -23109,13 +23352,13 @@ var init_env_paths = __esm({
23109
23352
  };
23110
23353
  };
23111
23354
  linux = (name2) => {
23112
- const username = path.basename(homedir);
23355
+ const username = path.basename(homedir2);
23113
23356
  return {
23114
- data: path.join(env.XDG_DATA_HOME || path.join(homedir, ".local", "share"), name2),
23115
- config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, ".config"), name2),
23116
- cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, ".cache"), name2),
23357
+ data: path.join(env.XDG_DATA_HOME || path.join(homedir2, ".local", "share"), name2),
23358
+ config: path.join(env.XDG_CONFIG_HOME || path.join(homedir2, ".config"), name2),
23359
+ cache: path.join(env.XDG_CACHE_HOME || path.join(homedir2, ".cache"), name2),
23117
23360
  // https://wiki.debian.org/XDGBaseDirectorySpecification#state
23118
- log: path.join(env.XDG_STATE_HOME || path.join(homedir, ".local", "state"), name2),
23361
+ log: path.join(env.XDG_STATE_HOME || path.join(homedir2, ".local", "state"), name2),
23119
23362
  temp: path.join(tmpdir, username, name2)
23120
23363
  };
23121
23364
  };
@@ -23135,34 +23378,34 @@ __export(paths_exports, {
23135
23378
  workspaceDir: () => workspaceDir,
23136
23379
  workspacePaths: () => workspacePaths
23137
23380
  });
23138
- import { mkdirSync as mkdirSync4 } from "node:fs";
23139
- import { dirname as dirname3, join as join4 } from "node:path";
23381
+ import { mkdirSync as mkdirSync5 } from "node:fs";
23382
+ import { dirname as dirname4, join as join5 } from "node:path";
23140
23383
  function globalDir() {
23141
23384
  const p = envPaths("errata", { suffix: "" });
23142
23385
  return p.config;
23143
23386
  }
23144
23387
  function globalConfigPath() {
23145
- return process.env["ERRATA_CONFIG_PATH"] ?? join4(globalDir(), "config.json");
23388
+ return process.env["ERRATA_CONFIG_PATH"] ?? join5(globalDir(), "config.json");
23146
23389
  }
23147
23390
  function daemonLogPath() {
23148
- mkdirSync4(globalDir(), { recursive: true });
23149
- return join4(globalDir(), "daemon.log");
23391
+ mkdirSync5(globalDir(), { recursive: true });
23392
+ return join5(globalDir(), "daemon.log");
23150
23393
  }
23151
23394
  function globalDaemonLock() {
23152
- return process.env["ERRATA_DAEMON_LOCK"] ?? join4(globalDir(), "daemon.lock");
23395
+ return process.env["ERRATA_DAEMON_LOCK"] ?? join5(globalDir(), "daemon.lock");
23153
23396
  }
23154
23397
  function sharedStorePath() {
23155
- return process.env["ERRATA_SHARED_DB"] ?? join4(globalDir(), "shared", "graph.db");
23398
+ return process.env["ERRATA_SHARED_DB"] ?? join5(globalDir(), "shared", "graph.db");
23156
23399
  }
23157
23400
  function workspaceDir(workspaceRoot) {
23158
- return join4(workspaceRoot, ".errata");
23401
+ return join5(workspaceRoot, ".errata");
23159
23402
  }
23160
23403
  function ensureDir(p) {
23161
- mkdirSync4(p, { recursive: true });
23404
+ mkdirSync5(p, { recursive: true });
23162
23405
  return p;
23163
23406
  }
23164
23407
  function ensureParent(p) {
23165
- mkdirSync4(dirname3(p), { recursive: true });
23408
+ mkdirSync5(dirname4(p), { recursive: true });
23166
23409
  return p;
23167
23410
  }
23168
23411
  function workspacePaths(root) {
@@ -23170,15 +23413,15 @@ function workspacePaths(root) {
23170
23413
  return {
23171
23414
  root,
23172
23415
  configDir: dir,
23173
- workspaceJson: join4(dir, "workspace.json"),
23174
- eventLog: join4(dir, "eventlog.sqlite"),
23175
- castalia: join4(dir, "castalia.db"),
23176
- reviewQueue: join4(dir, "review-queue.json"),
23177
- outbox: join4(dir, "outbox"),
23178
- daemonLock: join4(dir, "daemon.lock"),
23179
- identityAudit: join4(dir, "identity-audit.log"),
23180
- skillsDir: join4(dir, "skills"),
23181
- skillsManifest: join4(dir, "skills.json")
23416
+ workspaceJson: join5(dir, "workspace.json"),
23417
+ eventLog: join5(dir, "eventlog.sqlite"),
23418
+ castalia: join5(dir, "castalia.db"),
23419
+ reviewQueue: join5(dir, "review-queue.json"),
23420
+ outbox: join5(dir, "outbox"),
23421
+ daemonLock: join5(dir, "daemon.lock"),
23422
+ identityAudit: join5(dir, "identity-audit.log"),
23423
+ skillsDir: join5(dir, "skills"),
23424
+ skillsManifest: join5(dir, "skills.json")
23182
23425
  };
23183
23426
  }
23184
23427
  var init_paths = __esm({
@@ -23189,7 +23432,7 @@ var init_paths = __esm({
23189
23432
  });
23190
23433
 
23191
23434
  // src/config.ts
23192
- import { existsSync as existsSync5, readFileSync as readFileSync4, writeFileSync as writeFileSync5 } from "node:fs";
23435
+ import { existsSync as existsSync6, readFileSync as readFileSync4, writeFileSync as writeFileSync5 } from "node:fs";
23193
23436
  import { randomUUID as randomUUID2 } from "node:crypto";
23194
23437
  function defaultConfig() {
23195
23438
  return {
@@ -23217,7 +23460,7 @@ function defaultConfig() {
23217
23460
  }
23218
23461
  function loadConfig() {
23219
23462
  const p = globalConfigPath();
23220
- if (!existsSync5(p)) {
23463
+ if (!existsSync6(p)) {
23221
23464
  ensureDir(globalDir());
23222
23465
  const cfg = defaultConfig();
23223
23466
  saveConfig({ ...cfg, cloudUrl: DEFAULT_CLOUD_URL });
@@ -23678,7 +23921,7 @@ function hasCloudCredential(cfg) {
23678
23921
  var init_cloud_auth = __esm({
23679
23922
  "src/cloud-auth.ts"() {
23680
23923
  "use strict";
23681
- init_src6();
23924
+ init_src7();
23682
23925
  init_config();
23683
23926
  init_cloud_endpoint_policy();
23684
23927
  }
@@ -26023,9 +26266,9 @@ var init_agent_signals = __esm({
26023
26266
  });
26024
26267
 
26025
26268
  // src/review.ts
26026
- import { existsSync as existsSync6, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs";
26269
+ import { existsSync as existsSync7, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs";
26027
26270
  function loadReviewQueue(paths) {
26028
- if (!existsSync6(paths.reviewQueue)) return [];
26271
+ if (!existsSync7(paths.reviewQueue)) return [];
26029
26272
  try {
26030
26273
  return JSON.parse(readFileSync5(paths.reviewQueue, "utf8"));
26031
26274
  } catch {
@@ -26320,7 +26563,7 @@ __export(src_exports3, {
26320
26563
  recheck: () => recheck,
26321
26564
  scrub: () => scrub
26322
26565
  });
26323
- var init_src7 = __esm({
26566
+ var init_src8 = __esm({
26324
26567
  "../../packages/canonical/src/index.ts"() {
26325
26568
  "use strict";
26326
26569
  init_scrub();
@@ -26346,7 +26589,7 @@ var TOKEN_RULES;
26346
26589
  var init_generalize = __esm({
26347
26590
  "../../packages/privacy-edge/src/generalize.ts"() {
26348
26591
  "use strict";
26349
- init_src7();
26592
+ init_src8();
26350
26593
  init_date_shapes();
26351
26594
  init_ontology();
26352
26595
  TOKEN_RULES = [
@@ -26364,7 +26607,7 @@ var init_generalize = __esm({
26364
26607
  });
26365
26608
 
26366
26609
  // ../../packages/privacy-edge/src/index.ts
26367
- var init_src8 = __esm({
26610
+ var init_src9 = __esm({
26368
26611
  "../../packages/privacy-edge/src/index.ts"() {
26369
26612
  "use strict";
26370
26613
  init_ontology();
@@ -26427,7 +26670,7 @@ var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, TOKEN_RE3;
26427
26670
  var init_generalize_graph = __esm({
26428
26671
  "src/generalize-graph.ts"() {
26429
26672
  "use strict";
26430
- init_src8();
26673
+ init_src9();
26431
26674
  init_src();
26432
26675
  SYMBOL_LABELS2 = [
26433
26676
  ["Function", "function"],
@@ -26680,207 +26923,6 @@ var init_dual_augment = __esm({
26680
26923
  }
26681
26924
  });
26682
26925
 
26683
- // ../../packages/embedding/src/model.ts
26684
- import { mkdirSync as mkdirSync5, existsSync as existsSync7 } from "node:fs";
26685
- import { homedir as homedir2 } from "node:os";
26686
- import { dirname as dirname4, join as join5 } from "node:path";
26687
- import { createRequire } from "node:module";
26688
- function semanticFloorFor(version2) {
26689
- if (version2 === EMBEDDING_VERSION || version2 === MODEL_EMBEDDING_VERSION) return 0.25;
26690
- return 0.5;
26691
- }
26692
- function noteHashFallback() {
26693
- if (warnedHashFallback) return;
26694
- if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") return;
26695
- warnedHashFallback = true;
26696
- console.warn(
26697
- `[errata] embedding model unavailable (${lastError?.message ?? "unknown"}) \u2014 falling back to ${EMBEDDING_VERSION} hash vectors; semantic ranking runs at reduced fidelity`
26698
- );
26699
- }
26700
- function getCacheDir() {
26701
- return process.env["ERRATA_MODEL_CACHE"] ?? join5(homedir2(), ".errata", "models");
26702
- }
26703
- async function loadTransformers() {
26704
- try {
26705
- return await import("@huggingface/transformers");
26706
- } catch (err2) {
26707
- void err2;
26708
- }
26709
- try {
26710
- const seaResourceBase = join5(
26711
- // execPath dir is where errata.exe lives; resources/ rides alongside.
26712
- dirname4(process.execPath),
26713
- "resources",
26714
- "_resolve.js"
26715
- );
26716
- const resourceRequire = createRequire(seaResourceBase);
26717
- return resourceRequire("@huggingface/transformers");
26718
- } catch (err2) {
26719
- lastError = err2 instanceof Error ? err2 : new Error(String(err2));
26720
- return null;
26721
- }
26722
- }
26723
- async function loadPipeline() {
26724
- const cacheDir = getCacheDir();
26725
- if (!existsSync7(cacheDir)) mkdirSync5(cacheDir, { recursive: true });
26726
- try {
26727
- const tx = await loadTransformers();
26728
- if (!tx) {
26729
- throw lastError ?? new Error("transformers package unavailable");
26730
- }
26731
- tx.env.cacheDir = cacheDir;
26732
- tx.env.useFSCache = true;
26733
- tx.env.allowLocalModels = true;
26734
- tx.env.allowRemoteModels = process.env["ERRATA_OFFLINE"] !== "1";
26735
- const pipe2 = await tx.pipeline("feature-extraction", MODEL_NAME, {
26736
- // Quantized weights cut size 4x; quality drop is negligible for
26737
- // short-text similarity. Override via env if you want full
26738
- // precision.
26739
- dtype: process.env["ERRATA_MODEL_DTYPE"] ?? "q8"
26740
- });
26741
- return pipe2;
26742
- } catch (err2) {
26743
- lastError = err2 instanceof Error ? err2 : new Error(String(err2));
26744
- return null;
26745
- }
26746
- }
26747
- async function ensureModelLoaded() {
26748
- if (!pipelinePromise) {
26749
- pipelinePromise = loadPipeline();
26750
- }
26751
- return pipelinePromise;
26752
- }
26753
- async function embedTextWithModel(text) {
26754
- const pipe2 = await ensureModelLoaded();
26755
- if (!pipe2) {
26756
- throw new Error(
26757
- `embedding model could not be loaded: ${lastError?.message ?? "unknown"}`
26758
- );
26759
- }
26760
- if (!text) return new Array(MODEL_EMBEDDING_DIM).fill(0);
26761
- const out2 = await pipe2(text, { pooling: "mean", normalize: true });
26762
- return Array.from(out2.data);
26763
- }
26764
- async function embedBatchWithModelOrHash(texts) {
26765
- if (texts.length === 0) return [];
26766
- if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") {
26767
- return texts.map((t) => {
26768
- const v = embed(t);
26769
- return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
26770
- });
26771
- }
26772
- try {
26773
- const pipe2 = await ensureModelLoaded();
26774
- if (pipe2) {
26775
- const out2 = await pipe2(texts, {
26776
- pooling: "mean",
26777
- normalize: true
26778
- });
26779
- const dim = out2.dims[out2.dims.length - 1] ?? MODEL_EMBEDDING_DIM;
26780
- const total = texts.length;
26781
- const results = [];
26782
- for (let i2 = 0; i2 < total; i2++) {
26783
- const v = Array.from(out2.data.subarray(i2 * dim, (i2 + 1) * dim));
26784
- results.push({ vector: v, version: MODEL_EMBEDDING_VERSION, dim });
26785
- }
26786
- return results;
26787
- }
26788
- } catch {
26789
- }
26790
- noteHashFallback();
26791
- return texts.map((t) => {
26792
- const v = embed(t);
26793
- return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
26794
- });
26795
- }
26796
- async function embedTextWithModelOrHash(text) {
26797
- if (process.env["ERRATA_EMBED_HASH_ONLY"] === "1") {
26798
- const v = embed(text);
26799
- return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
26800
- }
26801
- try {
26802
- const v = await embedTextWithModel(text);
26803
- return { vector: v, version: MODEL_EMBEDDING_VERSION, dim: v.length };
26804
- } catch {
26805
- noteHashFallback();
26806
- const v = embed(text);
26807
- return { vector: v, version: EMBEDDING_VERSION, dim: v.length };
26808
- }
26809
- }
26810
- var MODEL_NAME, MODEL_EMBEDDING_DIM, MODEL_EMBEDDING_VERSION, pipelinePromise, lastError, warnedHashFallback;
26811
- var init_model = __esm({
26812
- "../../packages/embedding/src/model.ts"() {
26813
- "use strict";
26814
- init_src9();
26815
- MODEL_NAME = "Xenova/all-MiniLM-L6-v2";
26816
- MODEL_EMBEDDING_DIM = 384;
26817
- MODEL_EMBEDDING_VERSION = "minilm-l6-v2";
26818
- pipelinePromise = null;
26819
- lastError = null;
26820
- warnedHashFallback = false;
26821
- }
26822
- });
26823
-
26824
- // ../../packages/embedding/src/index.ts
26825
- function djb2(s) {
26826
- let h = 5381;
26827
- for (let i2 = 0; i2 < s.length; i2++) {
26828
- h = (h << 5) + h + s.charCodeAt(i2) >>> 0;
26829
- }
26830
- return h;
26831
- }
26832
- function djb2Signed(s) {
26833
- let h = 0;
26834
- for (let i2 = 0; i2 < s.length; i2++) {
26835
- h = h * 31 + s.charCodeAt(i2) | 0;
26836
- }
26837
- return h;
26838
- }
26839
- function tokenize(text) {
26840
- return text.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length > 0 && t.length <= 40);
26841
- }
26842
- function* charTrigrams(text) {
26843
- const s = text.toLowerCase();
26844
- for (let i2 = 0; i2 <= s.length - 3; i2++) {
26845
- yield s.slice(i2, i2 + 3);
26846
- }
26847
- }
26848
- function embed(text) {
26849
- const vec = new Array(EMBEDDING_DIM).fill(0);
26850
- if (!text) return vec;
26851
- for (const tok of tokenize(text)) {
26852
- const idx = djb2(tok) % EMBEDDING_DIM;
26853
- const sign = djb2Signed(tok) & 1 ? 1 : -1;
26854
- vec[idx] = vec[idx] + sign;
26855
- }
26856
- for (const tri of charTrigrams(text)) {
26857
- const idx = djb2("3:" + tri) % EMBEDDING_DIM;
26858
- const sign = djb2Signed("3:" + tri) & 1 ? 1 : -1;
26859
- vec[idx] = vec[idx] + 0.5 * sign;
26860
- }
26861
- let normSq = 0;
26862
- for (const x of vec) normSq += x * x;
26863
- if (normSq <= 0) return vec;
26864
- const inv = 1 / Math.sqrt(normSq);
26865
- for (let i2 = 0; i2 < vec.length; i2++) vec[i2] = vec[i2] * inv;
26866
- return vec;
26867
- }
26868
- function cosine(a, b) {
26869
- if (a.length !== b.length || a.length === 0) return 0;
26870
- let dot = 0;
26871
- for (let i2 = 0; i2 < a.length; i2++) dot += a[i2] * b[i2];
26872
- return dot;
26873
- }
26874
- var EMBEDDING_DIM, EMBEDDING_VERSION;
26875
- var init_src9 = __esm({
26876
- "../../packages/embedding/src/index.ts"() {
26877
- "use strict";
26878
- init_model();
26879
- EMBEDDING_DIM = 256;
26880
- EMBEDDING_VERSION = "hash-v1";
26881
- }
26882
- });
26883
-
26884
26926
  // ../../packages/generalizer/src/review-detector.ts
26885
26927
  function evaluateForReview(node2, prevTier) {
26886
26928
  if (node2.cumulativeSurprise >= REVIEW_SURPRISE_THRESHOLD) {
@@ -26897,7 +26939,7 @@ function evaluateForReview(node2, prevTier) {
26897
26939
  var init_review_detector = __esm({
26898
26940
  "../../packages/generalizer/src/review-detector.ts"() {
26899
26941
  "use strict";
26900
- init_src3();
26942
+ init_src4();
26901
26943
  }
26902
26944
  });
26903
26945
 
@@ -26920,7 +26962,7 @@ function nemoriDecide(input) {
26920
26962
  var init_nemori_gate = __esm({
26921
26963
  "../../packages/generalizer/src/nemori-gate.ts"() {
26922
26964
  "use strict";
26923
- init_src3();
26965
+ init_src4();
26924
26966
  }
26925
26967
  });
26926
26968
 
@@ -27953,11 +27995,11 @@ var init_generalizer = __esm({
27953
27995
  "../../packages/generalizer/src/generalizer.ts"() {
27954
27996
  "use strict";
27955
27997
  init_src2();
27998
+ init_src4();
27956
27999
  init_src3();
27957
- init_src9();
27958
28000
  init_src();
27959
28001
  init_src();
27960
- init_src4();
28002
+ init_src5();
27961
28003
  init_review_detector();
27962
28004
  init_nemori_gate();
27963
28005
  init_diagnostic_matcher();
@@ -28082,7 +28124,7 @@ var init_motifs = __esm({
28082
28124
  "../../packages/generalizer/src/motifs.ts"() {
28083
28125
  "use strict";
28084
28126
  init_src2();
28085
- init_src3();
28127
+ init_src4();
28086
28128
  init_src();
28087
28129
  MEMBER_LABELS = ["Problem", "RootCause", "Solution"];
28088
28130
  }
@@ -28219,8 +28261,8 @@ var init_nightly = __esm({
28219
28261
  "../../packages/generalizer/src/nightly.ts"() {
28220
28262
  "use strict";
28221
28263
  init_src2();
28222
- init_src3();
28223
28264
  init_src4();
28265
+ init_src5();
28224
28266
  init_motifs();
28225
28267
  }
28226
28268
  });
@@ -28342,7 +28384,7 @@ var CODE_LABELS, SEMANTIC_LABELS, BATCH_SIZE;
28342
28384
  var init_embed_code = __esm({
28343
28385
  "../../packages/generalizer/src/embed-code.ts"() {
28344
28386
  "use strict";
28345
- init_src9();
28387
+ init_src3();
28346
28388
  CODE_LABELS = ["Function", "Method", "Class", "Const"];
28347
28389
  SEMANTIC_LABELS = ["Problem", "RootCause", "Solution", "Pattern", "Claim"];
28348
28390
  BATCH_SIZE = 32;
@@ -28449,8 +28491,8 @@ function localBurst(store, seedId, opts = {}) {
28449
28491
  var init_relevance_rank = __esm({
28450
28492
  "../../packages/generalizer/src/relevance-rank.ts"() {
28451
28493
  "use strict";
28452
- init_src9();
28453
28494
  init_src3();
28495
+ init_src4();
28454
28496
  }
28455
28497
  });
28456
28498
 
@@ -37923,7 +37965,7 @@ var init_mcp = __esm({
37923
37965
  init_cloud_auth();
37924
37966
  init_config();
37925
37967
  init_dual_augment();
37926
- init_src4();
37968
+ init_src5();
37927
37969
  init_src2();
37928
37970
  init_src10();
37929
37971
  init_dual_burst();
@@ -46879,7 +46921,7 @@ var init_tool_index = __esm({
46879
46921
  "use strict";
46880
46922
  init_src();
46881
46923
  init_src();
46882
- init_src4();
46924
+ init_src5();
46883
46925
  init_tldr_tools_generated();
46884
46926
  PUBLIC_TOOLS = new Set(TLDR_TOOL_NAMES);
46885
46927
  PLUMBING = /* @__PURE__ */ new Set([
@@ -47620,8 +47662,8 @@ var init_webui = __esm({
47620
47662
  "src/webui.ts"() {
47621
47663
  "use strict";
47622
47664
  init_dist();
47665
+ init_src6();
47623
47666
  init_src5();
47624
- init_src4();
47625
47667
  init_agent_signals();
47626
47668
  init_review2();
47627
47669
  init_vfile();
@@ -48092,7 +48134,7 @@ var init_report_render = __esm({
48092
48134
  });
48093
48135
 
48094
48136
  // src/cli.ts
48095
- init_src5();
48137
+ init_src6();
48096
48138
  import { closeSync as closeSync2, existsSync as existsSync27, openSync as openSync2, readFileSync as readFileSync26, renameSync as renameSync4, statSync as statSync6 } from "node:fs";
48097
48139
  import { join as join30 } from "node:path";
48098
48140
  import { spawn as spawn3 } from "node:child_process";
@@ -50375,7 +50417,7 @@ var esm_default = { watch, FSWatcher };
50375
50417
  // src/engine.ts
50376
50418
  init_src();
50377
50419
  init_src2();
50378
- init_src4();
50420
+ init_src5();
50379
50421
 
50380
50422
  // ../../packages/eventlog/src/store.ts
50381
50423
  init_src2();
@@ -50536,7 +50578,7 @@ function openEventLog(opts) {
50536
50578
 
50537
50579
  // src/engine.ts
50538
50580
  init_src11();
50539
- init_src5();
50581
+ init_src6();
50540
50582
  init_src10();
50541
50583
  init_review2();
50542
50584
 
@@ -50779,7 +50821,7 @@ init_src();
50779
50821
  init_src2();
50780
50822
  init_agent_signals();
50781
50823
  init_tool_index();
50782
- init_src4();
50824
+ init_src5();
50783
50825
  import { readFileSync as readFileSync10, writeFileSync as writeFileSync10 } from "node:fs";
50784
50826
  var NEG = /n['']t|\b(?:not|never|no|none|neither|nor|unrelated|irrelevant|would|might|could|if)\b/i;
50785
50827
  var CITE_GROUP_RE = /\(((?:[^()\n]|\([^()\n]*\)){1,200})\)/g;
@@ -51523,7 +51565,7 @@ ${conversation}` }]
51523
51565
  }
51524
51566
 
51525
51567
  // src/constraint-backfill.ts
51526
- init_src4();
51568
+ init_src5();
51527
51569
  init_src2();
51528
51570
  import { existsSync as existsSync13, readFileSync as readFileSync11, readdirSync as readdirSync6, writeFileSync as writeFileSync11 } from "node:fs";
51529
51571
  import { join as join16 } from "node:path";
@@ -51692,7 +51734,7 @@ function backfillConstraintKind(store, opts) {
51692
51734
 
51693
51735
  // src/edge-repair.ts
51694
51736
  init_src();
51695
- init_src4();
51737
+ init_src5();
51696
51738
  import { existsSync as existsSync14, readFileSync as readFileSync12, writeFileSync as writeFileSync12 } from "node:fs";
51697
51739
  import { join as join17 } from "node:path";
51698
51740
  function citeEdgeId(from, type, to) {
@@ -51969,7 +52011,7 @@ var PassWorker = class {
51969
52011
  init_outbox();
51970
52012
 
51971
52013
  // src/claim-sync.ts
51972
- init_src8();
52014
+ init_src9();
51973
52015
  init_src();
51974
52016
  init_src2();
51975
52017
  import { readFileSync as readFileSync13 } from "node:fs";
@@ -53411,7 +53453,7 @@ function startLoopLagMonitor(thresholdMs = 1e3) {
53411
53453
  }
53412
53454
 
53413
53455
  // src/engine.ts
53414
- var DAEMON_VERSION = true ? "2.0.2-dev.417" : "2.0.0-alpha.0";
53456
+ var DAEMON_VERSION = true ? "2.0.2-dev.437" : "2.0.0-alpha.0";
53415
53457
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
53416
53458
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
53417
53459
  var GIT_OP_MUTE_MS = 4e3;
@@ -55122,11 +55164,11 @@ function pidAlive(pid) {
55122
55164
 
55123
55165
  // src/multi.ts
55124
55166
  init_dist();
55125
- init_src4();
55167
+ init_src5();
55126
55168
  import { readFileSync as readFileSync25, unlinkSync as unlinkSync3, writeFileSync as writeFileSync21 } from "node:fs";
55127
55169
 
55128
55170
  // src/principle-sync.ts
55129
- init_src4();
55171
+ init_src5();
55130
55172
  async function syncPrinciples(store, cloud, opts) {
55131
55173
  const mine = buildPrincipleSync(store, opts.machine);
55132
55174
  let pushed = 0;
@@ -55320,12 +55362,12 @@ function runLockfilePass(opts) {
55320
55362
  // src/instance-ingest.ts
55321
55363
  init_src();
55322
55364
  init_src2();
55323
- init_src4();
55324
- init_src8();
55365
+ init_src5();
55366
+ init_src9();
55325
55367
  init_src();
55326
55368
 
55327
55369
  // src/contribution-ready.ts
55328
- init_src3();
55370
+ init_src4();
55329
55371
  function cosine4(a, b) {
55330
55372
  if (a.length === 0 || a.length !== b.length) return 0;
55331
55373
  let dot = 0;
@@ -57080,9 +57122,9 @@ async function startMultiDaemon(opts = {}) {
57080
57122
  }
57081
57123
 
57082
57124
  // src/cli.ts
57083
- init_src4();
57125
+ init_src5();
57084
57126
  init_config();
57085
- init_src6();
57127
+ init_src7();
57086
57128
  init_cloud_auth();
57087
57129
 
57088
57130
  // src/agent-switch.ts
@@ -57195,7 +57237,7 @@ function errText(err2) {
57195
57237
  init_cloud_endpoint_policy();
57196
57238
 
57197
57239
  // src/oauth-login.ts
57198
- init_src6();
57240
+ init_src7();
57199
57241
  init_cloud_auth();
57200
57242
  import { createServer } from "node:http";
57201
57243
  var DEFAULT_OAUTH_SCOPE = "openid profile graph:read graph:write mcp:tools";
@@ -57420,7 +57462,7 @@ async function loginOAuthLoopback(opts) {
57420
57462
  }
57421
57463
 
57422
57464
  // src/device-login.ts
57423
- init_src6();
57465
+ init_src7();
57424
57466
  var DEFAULT_SCOPE = "openid profile graph:read graph:write mcp:tools";
57425
57467
  var BRIDGE_REDIRECT_URI = "http://127.0.0.1:1/device-bridge-callback";
57426
57468
  var strip2 = (u) => u.replace(/\/+$/, "");
@@ -58226,7 +58268,7 @@ async function cmdStatus() {
58226
58268
  console.log(` event log: ${existsSync27(paths.eventLog) ? "yes" : "no"} (${paths.eventLog})`);
58227
58269
  if (existsSync27(paths.castalia)) {
58228
58270
  try {
58229
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
58271
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
58230
58272
  const store = openGraphStore2({ path: paths.castalia });
58231
58273
  try {
58232
58274
  let pending = 0;
@@ -58974,7 +59016,7 @@ async function cmdLocate(relPath) {
58974
59016
  process.exit(2);
58975
59017
  }
58976
59018
  await ensureProfile();
58977
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59019
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
58978
59020
  const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
58979
59021
  const paths = workspacePaths2(ROOT);
58980
59022
  const store = openGraphStore2({ path: paths.castalia });
@@ -59024,7 +59066,7 @@ async function cmdNeighbors(args2) {
59024
59066
  const depthIdx = args2.indexOf("--depth");
59025
59067
  const depth = depthIdx >= 0 && args2[depthIdx + 1] ? Math.max(1, Math.min(5, Number(args2[depthIdx + 1]))) : 2;
59026
59068
  await ensureProfile();
59027
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59069
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
59028
59070
  const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
59029
59071
  const paths = workspacePaths2(ROOT);
59030
59072
  const store = openGraphStore2({ path: paths.castalia });
@@ -59072,7 +59114,7 @@ async function cmdNeighbors(args2) {
59072
59114
  }
59073
59115
  async function cmdTodos() {
59074
59116
  await ensureProfile();
59075
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59117
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
59076
59118
  const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
59077
59119
  const paths = workspacePaths2(ROOT);
59078
59120
  const store = openGraphStore2({ path: paths.castalia });
@@ -59111,7 +59153,7 @@ async function cmdTodos() {
59111
59153
  async function cmdBackfillAnchors() {
59112
59154
  const profile = loadProfile(ROOT);
59113
59155
  await ensureProfile();
59114
- const { anchorSolutionToDiff: anchorSolutionToDiff2, anchorProblemToDiff: anchorProblemToDiff2, deriveContextFromAnchors: deriveContextFromAnchors2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59156
+ const { anchorSolutionToDiff: anchorSolutionToDiff2, anchorProblemToDiff: anchorProblemToDiff2, deriveContextFromAnchors: deriveContextFromAnchors2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
59115
59157
  const { bindCanonicalNeighbors: bindCanonicalNeighbors2 } = await Promise.resolve().then(() => (init_src10(), src_exports4));
59116
59158
  const { digest: digest2 } = await Promise.resolve().then(() => (init_src(), src_exports));
59117
59159
  await withStore(async (store) => {
@@ -59187,7 +59229,7 @@ async function cmdBackfillAnchors() {
59187
59229
  }
59188
59230
  async function withStore(fn) {
59189
59231
  await ensureProfile();
59190
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59232
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
59191
59233
  const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
59192
59234
  const paths = workspacePaths2(ROOT);
59193
59235
  const store = openGraphStore2({ path: paths.castalia });
@@ -59581,7 +59623,7 @@ async function gatherRepo(store, ws) {
59581
59623
  }
59582
59624
  async function gatherReportData(generatedAt) {
59583
59625
  const { existsSync: existsSync28 } = await import("node:fs");
59584
- const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src4(), src_exports2));
59626
+ const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
59585
59627
  const cfg = loadConfig();
59586
59628
  const outbound = cfg.consent.sync ? "auto" : "off";
59587
59629
  const repos = [];
@@ -60381,7 +60423,7 @@ async function cmdFeedback(args2) {
60381
60423
  console.error('usage: errata feedback [up|down] "<message>"');
60382
60424
  process.exit(2);
60383
60425
  }
60384
- const { scrub: scrub2 } = await Promise.resolve().then(() => (init_src7(), src_exports3));
60426
+ const { scrub: scrub2 } = await Promise.resolve().then(() => (init_src8(), src_exports3));
60385
60427
  const scrubbed = scrub2(message).text;
60386
60428
  const c = authedCloudClient(cfg);
60387
60429
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.2-dev.417",
3
+ "version": "2.0.2-dev.437",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {