@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.
- package/errata.mjs +339 -297
- 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
|
|
18724
|
+
const display = canonicalizePatternText(name2);
|
|
18520
18725
|
const id = `pat_${digest({ pattern: display.toLowerCase() })}`.slice(0, 56);
|
|
18521
|
-
|
|
18522
|
-
|
|
18523
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
21990
|
-
import { join as
|
|
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 (!
|
|
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 =
|
|
22009
|
-
if (!
|
|
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(
|
|
22017
|
-
rmSync(
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
23329
|
+
homedir2 = os.homedir();
|
|
23087
23330
|
tmpdir = os.tmpdir();
|
|
23088
23331
|
({ env } = process3);
|
|
23089
23332
|
macos = (name2) => {
|
|
23090
|
-
const library = path.join(
|
|
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(
|
|
23101
|
-
const localAppData = env.LOCALAPPDATA || path.join(
|
|
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(
|
|
23355
|
+
const username = path.basename(homedir2);
|
|
23113
23356
|
return {
|
|
23114
|
-
data: path.join(env.XDG_DATA_HOME || path.join(
|
|
23115
|
-
config: path.join(env.XDG_CONFIG_HOME || path.join(
|
|
23116
|
-
cache: path.join(env.XDG_CACHE_HOME || path.join(
|
|
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(
|
|
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
|
|
23139
|
-
import { dirname as
|
|
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"] ??
|
|
23388
|
+
return process.env["ERRATA_CONFIG_PATH"] ?? join5(globalDir(), "config.json");
|
|
23146
23389
|
}
|
|
23147
23390
|
function daemonLogPath() {
|
|
23148
|
-
|
|
23149
|
-
return
|
|
23391
|
+
mkdirSync5(globalDir(), { recursive: true });
|
|
23392
|
+
return join5(globalDir(), "daemon.log");
|
|
23150
23393
|
}
|
|
23151
23394
|
function globalDaemonLock() {
|
|
23152
|
-
return process.env["ERRATA_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"] ??
|
|
23398
|
+
return process.env["ERRATA_SHARED_DB"] ?? join5(globalDir(), "shared", "graph.db");
|
|
23156
23399
|
}
|
|
23157
23400
|
function workspaceDir(workspaceRoot) {
|
|
23158
|
-
return
|
|
23401
|
+
return join5(workspaceRoot, ".errata");
|
|
23159
23402
|
}
|
|
23160
23403
|
function ensureDir(p) {
|
|
23161
|
-
|
|
23404
|
+
mkdirSync5(p, { recursive: true });
|
|
23162
23405
|
return p;
|
|
23163
23406
|
}
|
|
23164
23407
|
function ensureParent(p) {
|
|
23165
|
-
|
|
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:
|
|
23174
|
-
eventLog:
|
|
23175
|
-
castalia:
|
|
23176
|
-
reviewQueue:
|
|
23177
|
-
outbox:
|
|
23178
|
-
daemonLock:
|
|
23179
|
-
identityAudit:
|
|
23180
|
-
skillsDir:
|
|
23181
|
-
skillsManifest:
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
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
|
|
26269
|
+
import { existsSync as existsSync7, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs";
|
|
26027
26270
|
function loadReviewQueue(paths) {
|
|
26028
|
-
if (!
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
55324
|
-
|
|
55365
|
+
init_src5();
|
|
55366
|
+
init_src9();
|
|
55325
55367
|
init_src();
|
|
55326
55368
|
|
|
55327
55369
|
// src/contribution-ready.ts
|
|
55328
|
-
|
|
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
|
-
|
|
57125
|
+
init_src5();
|
|
57084
57126
|
init_config();
|
|
57085
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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 {
|