@inerrata-corporation/errata 2.0.2-dev.417 → 2.0.2-dev.455
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/consolidate-worker.mjs +4 -4
- package/errata.mjs +485 -398
- package/package.json +1 -1
- package/pass-worker.mjs +91 -91
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();
|
|
@@ -18361,6 +18562,132 @@ var init_problem_package_link = __esm({
|
|
|
18361
18562
|
}
|
|
18362
18563
|
});
|
|
18363
18564
|
|
|
18565
|
+
// ../../packages/local-graph/src/problem-dedup.ts
|
|
18566
|
+
function corroborations(n) {
|
|
18567
|
+
return Number(n.attrs["corroborations"] ?? 0);
|
|
18568
|
+
}
|
|
18569
|
+
function overlap(a, b) {
|
|
18570
|
+
if (a.size === 0 || b.size === 0) return 0;
|
|
18571
|
+
let inter = 0;
|
|
18572
|
+
for (const x of a) if (b.has(x)) inter++;
|
|
18573
|
+
return inter / Math.min(a.size, b.size);
|
|
18574
|
+
}
|
|
18575
|
+
function mergeDuplicateProblems(store, opts) {
|
|
18576
|
+
const minOverlap = opts.minOverlap ?? 0.85;
|
|
18577
|
+
const minTokens = opts.minTokens ?? 4;
|
|
18578
|
+
const report = { clusters: 0, merged: 0 };
|
|
18579
|
+
const open2 = store.findNodesByLabel("Problem").filter((p) => p.attrs["resolvedAt"] == null && p.attrs["mergedInto"] === void 0);
|
|
18580
|
+
const tokens = /* @__PURE__ */ new Map();
|
|
18581
|
+
for (const p of open2) tokens.set(p.id, new Set(conceptTokens(p.description)));
|
|
18582
|
+
const consumed = /* @__PURE__ */ new Set();
|
|
18583
|
+
store.transaction(() => {
|
|
18584
|
+
for (let i2 = 0; i2 < open2.length; i2++) {
|
|
18585
|
+
const a = open2[i2];
|
|
18586
|
+
if (consumed.has(a.id)) continue;
|
|
18587
|
+
const cluster = [a];
|
|
18588
|
+
const ta = tokens.get(a.id);
|
|
18589
|
+
for (let j = i2 + 1; j < open2.length; j++) {
|
|
18590
|
+
const b = open2[j];
|
|
18591
|
+
if (consumed.has(b.id)) continue;
|
|
18592
|
+
const tb = tokens.get(b.id);
|
|
18593
|
+
if (Math.min(ta.size, tb.size) < minTokens) continue;
|
|
18594
|
+
if (isConstraintProblem(a) !== isConstraintProblem(b)) continue;
|
|
18595
|
+
if (overlap(ta, tb) >= minOverlap) {
|
|
18596
|
+
cluster.push(b);
|
|
18597
|
+
consumed.add(b.id);
|
|
18598
|
+
}
|
|
18599
|
+
}
|
|
18600
|
+
if (cluster.length < 2) continue;
|
|
18601
|
+
report.clusters++;
|
|
18602
|
+
cluster.sort((x, y) => corroborations(y) - corroborations(x) || x.createdAt - y.createdAt);
|
|
18603
|
+
const survivor = cluster[0];
|
|
18604
|
+
for (const dup of cluster.slice(1)) {
|
|
18605
|
+
foldDuplicateProblem(store, dup, survivor, opts.ts);
|
|
18606
|
+
report.merged++;
|
|
18607
|
+
}
|
|
18608
|
+
}
|
|
18609
|
+
});
|
|
18610
|
+
return report;
|
|
18611
|
+
}
|
|
18612
|
+
function foldDuplicateProblem(store, dup, survivor, ts) {
|
|
18613
|
+
const surv = store.getNode(survivor.id);
|
|
18614
|
+
if (!surv) return;
|
|
18615
|
+
const sources = new Set(surv.attrs["sources"] ?? []);
|
|
18616
|
+
for (const s of dup.attrs["sources"] ?? []) sources.add(s);
|
|
18617
|
+
store.updateNode(survivor.id, {
|
|
18618
|
+
attrs: {
|
|
18619
|
+
...surv.attrs,
|
|
18620
|
+
sources: [...sources],
|
|
18621
|
+
corroborations: corroborations(surv) + corroborations(dup) + 1
|
|
18622
|
+
},
|
|
18623
|
+
cumulativeHits: (surv.cumulativeHits ?? 0) + (dup.cumulativeHits ?? 0),
|
|
18624
|
+
lastUpdatedAt: ts
|
|
18625
|
+
});
|
|
18626
|
+
for (const e of store.outEdges(dup.id, REDIRECT_EDGES)) {
|
|
18627
|
+
if (e.to === survivor.id) continue;
|
|
18628
|
+
const id = `edge_${digest({ from: survivor.id, type: e.type, to: e.to })}`.slice(0, 24);
|
|
18629
|
+
if (store.getEdge(id)) continue;
|
|
18630
|
+
const redirected = {
|
|
18631
|
+
...e,
|
|
18632
|
+
id,
|
|
18633
|
+
from: survivor.id,
|
|
18634
|
+
createdAt: ts,
|
|
18635
|
+
lastSeenAt: ts
|
|
18636
|
+
};
|
|
18637
|
+
store.mergeEdge(redirected);
|
|
18638
|
+
}
|
|
18639
|
+
store.updateNode(dup.id, {
|
|
18640
|
+
attrs: { ...dup.attrs, mergedInto: survivor.id, resolvedAs: "duplicate", resolvedAt: ts },
|
|
18641
|
+
lastUpdatedAt: ts
|
|
18642
|
+
});
|
|
18643
|
+
store.closeNode(dup.id, ts);
|
|
18644
|
+
}
|
|
18645
|
+
function statementIdentityKey(statement) {
|
|
18646
|
+
return statement.toLowerCase().replace(/[`"'“”‘’*_]/g, "").replace(/[—–]/g, "-").replace(/\s+/g, " ").trim().replace(/[.,;:!?]+$/, "");
|
|
18647
|
+
}
|
|
18648
|
+
function findMintTimeDuplicate(store, statement, kind, opts) {
|
|
18649
|
+
const minOverlap = opts?.minOverlap ?? 0.85;
|
|
18650
|
+
const minTokens = opts?.minTokens ?? 4;
|
|
18651
|
+
const incomingIsConstraint = kind === "constraint";
|
|
18652
|
+
const open2 = store.findNodesByLabel("Problem").filter((p) => p.attrs["resolvedAt"] == null && p.attrs["mergedInto"] === void 0);
|
|
18653
|
+
if (open2.length === 0) return null;
|
|
18654
|
+
const key = statementIdentityKey(statement);
|
|
18655
|
+
for (const p of open2) {
|
|
18656
|
+
if (isConstraintProblem(p) !== incomingIsConstraint) continue;
|
|
18657
|
+
if (statementIdentityKey(p.description) === key) return p.id;
|
|
18658
|
+
}
|
|
18659
|
+
const ta = new Set(conceptTokens(statement));
|
|
18660
|
+
if (ta.size < minTokens) return null;
|
|
18661
|
+
let best = null;
|
|
18662
|
+
for (const p of open2) {
|
|
18663
|
+
if (isConstraintProblem(p) !== incomingIsConstraint) continue;
|
|
18664
|
+
const tb = new Set(conceptTokens(p.description));
|
|
18665
|
+
if (Math.min(ta.size, tb.size) < minTokens) continue;
|
|
18666
|
+
const score2 = overlap(ta, tb);
|
|
18667
|
+
if (score2 >= minOverlap && (best === null || score2 > best.score)) {
|
|
18668
|
+
best = { id: p.id, score: score2 };
|
|
18669
|
+
}
|
|
18670
|
+
}
|
|
18671
|
+
return best?.id ?? null;
|
|
18672
|
+
}
|
|
18673
|
+
var REDIRECT_EDGES;
|
|
18674
|
+
var init_problem_dedup = __esm({
|
|
18675
|
+
"../../packages/local-graph/src/problem-dedup.ts"() {
|
|
18676
|
+
"use strict";
|
|
18677
|
+
init_src();
|
|
18678
|
+
init_src();
|
|
18679
|
+
init_design_problem();
|
|
18680
|
+
REDIRECT_EDGES = [
|
|
18681
|
+
"CAUSED_BY",
|
|
18682
|
+
"SOLVED_BY",
|
|
18683
|
+
"FIXED_BY",
|
|
18684
|
+
"ANCHORED_AT",
|
|
18685
|
+
"MANIFESTED_IN",
|
|
18686
|
+
"EVIDENCED_BY"
|
|
18687
|
+
];
|
|
18688
|
+
}
|
|
18689
|
+
});
|
|
18690
|
+
|
|
18364
18691
|
// ../../packages/local-graph/src/design-problem.ts
|
|
18365
18692
|
function isConstraintProblem(node2) {
|
|
18366
18693
|
return node2.attrs["kind"] === "constraint";
|
|
@@ -18443,7 +18770,9 @@ function ingestDesignProblem(store, flag, opts) {
|
|
|
18443
18770
|
rejected: true
|
|
18444
18771
|
};
|
|
18445
18772
|
}
|
|
18446
|
-
const
|
|
18773
|
+
const rawId = identityId({ kind: "DesignProblem", statement });
|
|
18774
|
+
const dupId = store.getNode(rawId) ? null : findMintTimeDuplicate(store, statement, flag.kind);
|
|
18775
|
+
const problemId = dupId ?? rawId;
|
|
18447
18776
|
const existing = store.getNode(problemId);
|
|
18448
18777
|
let created = false;
|
|
18449
18778
|
let corroborated = false;
|
|
@@ -18458,7 +18787,18 @@ function ingestDesignProblem(store, flag, opts) {
|
|
|
18458
18787
|
...existing.attrs,
|
|
18459
18788
|
sources: [...sources, opts.source],
|
|
18460
18789
|
corroborations: corroborations2,
|
|
18461
|
-
...promoted ? { provisional: false } : {}
|
|
18790
|
+
...promoted ? { provisional: false } : {},
|
|
18791
|
+
// Keep the variant wording when a restatement resolved here rather
|
|
18792
|
+
// than minting — audit trail, and input for a future judge tier.
|
|
18793
|
+
...dupId && statement !== existing.description ? {
|
|
18794
|
+
statementAliases: [
|
|
18795
|
+
...(existing.attrs["statementAliases"] ?? []).slice(
|
|
18796
|
+
0,
|
|
18797
|
+
STATEMENT_ALIAS_CAP - 1
|
|
18798
|
+
),
|
|
18799
|
+
statement
|
|
18800
|
+
]
|
|
18801
|
+
} : {}
|
|
18462
18802
|
},
|
|
18463
18803
|
cumulativeHits: (existing.cumulativeHits ?? 0) + 1,
|
|
18464
18804
|
...promoted ? { extractionConfidence: 0.65 } : {},
|
|
@@ -18515,14 +18855,51 @@ function ingestDesignProblem(store, flag, opts) {
|
|
|
18515
18855
|
const linkedPackages = linkProblemToPackages(store, problemId, linkText, opts.ts).linked;
|
|
18516
18856
|
return { problemId, created, corroborated, rootCauseId, solutionId, anchored, linkedPackages };
|
|
18517
18857
|
}
|
|
18858
|
+
function canonicalizePatternText(name2) {
|
|
18859
|
+
const stripped = name2.replace(/^\s*pattern(?:\s*[×x]\s*\d+)?\s*(?:\(exemplar\))?\s*[:—–-]\s*/i, "").replace(/\s+/g, " ").trim();
|
|
18860
|
+
return stripped.length > 0 ? stripped : name2.replace(/\s+/g, " ").trim();
|
|
18861
|
+
}
|
|
18518
18862
|
function mintPatternNode(store, name2, ts) {
|
|
18519
|
-
const display = name2
|
|
18863
|
+
const display = canonicalizePatternText(name2);
|
|
18520
18864
|
const id = `pat_${digest({ pattern: display.toLowerCase() })}`.slice(0, 56);
|
|
18521
|
-
|
|
18522
|
-
|
|
18523
|
-
|
|
18524
|
-
)
|
|
18525
|
-
|
|
18865
|
+
const exact = store.getNode(id);
|
|
18866
|
+
const reinforce = (node2, variant) => {
|
|
18867
|
+
const aliases = Array.isArray(node2.attrs["aliasTexts"]) ? [...node2.attrs["aliasTexts"]] : [];
|
|
18868
|
+
if (variant && variant !== node2.description && !aliases.includes(variant) && aliases.length < PATTERN_ALIAS_CAP) {
|
|
18869
|
+
aliases.push(variant);
|
|
18870
|
+
}
|
|
18871
|
+
store.updateNode(node2.id, {
|
|
18872
|
+
attrs: {
|
|
18873
|
+
...node2.attrs,
|
|
18874
|
+
observedCount: (Number(node2.attrs["observedCount"]) || 1) + 1,
|
|
18875
|
+
...aliases.length > 0 ? { aliasTexts: aliases } : {}
|
|
18876
|
+
},
|
|
18877
|
+
lastUpdatedAt: ts
|
|
18878
|
+
});
|
|
18879
|
+
return node2.id;
|
|
18880
|
+
};
|
|
18881
|
+
if (exact) return reinforce(exact);
|
|
18882
|
+
const emb = embed(display);
|
|
18883
|
+
let best = null;
|
|
18884
|
+
let bestCos = 0;
|
|
18885
|
+
for (const p of store.findNodesByLabel("Pattern")) {
|
|
18886
|
+
const e = p.embedding;
|
|
18887
|
+
if (!e || e.length !== EMBEDDING_DIM) continue;
|
|
18888
|
+
let d = 0;
|
|
18889
|
+
for (let i2 = 0; i2 < EMBEDDING_DIM; i2++) d += e[i2] * emb[i2];
|
|
18890
|
+
if (d > bestCos) {
|
|
18891
|
+
bestCos = d;
|
|
18892
|
+
best = p;
|
|
18893
|
+
}
|
|
18894
|
+
}
|
|
18895
|
+
if (best && bestCos >= PATTERN_DEDUP_COSINE) return reinforce(best, display);
|
|
18896
|
+
store.mergeNode({
|
|
18897
|
+
...buildNode(id, "Pattern", display, ts, { source: "convo", provisional: true, observedCount: 1 }),
|
|
18898
|
+
// Embedded inline (sync hash) so the node participates in the gate
|
|
18899
|
+
// immediately — buildNode's empty embedding would leave every new pattern
|
|
18900
|
+
// invisible to dedup until the nightly embed pass.
|
|
18901
|
+
embedding: emb
|
|
18902
|
+
});
|
|
18526
18903
|
return id;
|
|
18527
18904
|
}
|
|
18528
18905
|
function titleCaseDomain(name2) {
|
|
@@ -18895,15 +19272,20 @@ function markFixCandidates(store, t) {
|
|
|
18895
19272
|
}
|
|
18896
19273
|
return resolved;
|
|
18897
19274
|
}
|
|
18898
|
-
var DESIGN_PROMOTE_AT, DEDUP_STOPWORDS, SAME_ANCHOR_DEDUP_JACCARD, CITABLE_PRIOR_LABELS, MAX_ANCHOR_FILES, AUTO_MINT_PREFIX;
|
|
19275
|
+
var DESIGN_PROMOTE_AT, STATEMENT_ALIAS_CAP, PATTERN_DEDUP_COSINE, PATTERN_ALIAS_CAP, DEDUP_STOPWORDS, SAME_ANCHOR_DEDUP_JACCARD, CITABLE_PRIOR_LABELS, MAX_ANCHOR_FILES, AUTO_MINT_PREFIX;
|
|
18899
19276
|
var init_design_problem = __esm({
|
|
18900
19277
|
"../../packages/local-graph/src/design-problem.ts"() {
|
|
18901
19278
|
"use strict";
|
|
18902
19279
|
init_src();
|
|
18903
19280
|
init_src();
|
|
19281
|
+
init_src3();
|
|
18904
19282
|
init_src2();
|
|
18905
19283
|
init_problem_package_link();
|
|
19284
|
+
init_problem_dedup();
|
|
18906
19285
|
DESIGN_PROMOTE_AT = 1;
|
|
19286
|
+
STATEMENT_ALIAS_CAP = 5;
|
|
19287
|
+
PATTERN_DEDUP_COSINE = 0.85;
|
|
19288
|
+
PATTERN_ALIAS_CAP = 5;
|
|
18907
19289
|
DEDUP_STOPWORDS = /* @__PURE__ */ new Set([
|
|
18908
19290
|
"the",
|
|
18909
19291
|
"and",
|
|
@@ -19961,7 +20343,7 @@ var init_bko = __esm({
|
|
|
19961
20343
|
});
|
|
19962
20344
|
|
|
19963
20345
|
// ../../packages/math/src/index.ts
|
|
19964
|
-
var
|
|
20346
|
+
var init_src4 = __esm({
|
|
19965
20347
|
"../../packages/math/src/index.ts"() {
|
|
19966
20348
|
"use strict";
|
|
19967
20349
|
init_constants();
|
|
@@ -20508,7 +20890,7 @@ var init_triage2 = __esm({
|
|
|
20508
20890
|
init_src();
|
|
20509
20891
|
init_src();
|
|
20510
20892
|
init_src();
|
|
20511
|
-
|
|
20893
|
+
init_src4();
|
|
20512
20894
|
init_src2();
|
|
20513
20895
|
COOCCUR_BONUS = 0.25;
|
|
20514
20896
|
routeEdgeId = (triageId, causeId) => `edge_rt_${triageId}_${causeId}`;
|
|
@@ -20807,7 +21189,7 @@ var init_abstraction = __esm({
|
|
|
20807
21189
|
"use strict";
|
|
20808
21190
|
init_src();
|
|
20809
21191
|
init_src2();
|
|
20810
|
-
|
|
21192
|
+
init_src4();
|
|
20811
21193
|
init_percolate();
|
|
20812
21194
|
init_triage2();
|
|
20813
21195
|
DEFAULT_MIN_CLUSTER_SIZE = 3;
|
|
@@ -20956,7 +21338,7 @@ var init_community2 = __esm({
|
|
|
20956
21338
|
"../../packages/local-graph/src/community.ts"() {
|
|
20957
21339
|
"use strict";
|
|
20958
21340
|
init_src2();
|
|
20959
|
-
|
|
21341
|
+
init_src4();
|
|
20960
21342
|
JOINT_COMMUNITY_LABELS = [
|
|
20961
21343
|
"Problem",
|
|
20962
21344
|
"Solution",
|
|
@@ -20981,104 +21363,6 @@ var init_community2 = __esm({
|
|
|
20981
21363
|
}
|
|
20982
21364
|
});
|
|
20983
21365
|
|
|
20984
|
-
// ../../packages/local-graph/src/problem-dedup.ts
|
|
20985
|
-
function corroborations(n) {
|
|
20986
|
-
return Number(n.attrs["corroborations"] ?? 0);
|
|
20987
|
-
}
|
|
20988
|
-
function overlap(a, b) {
|
|
20989
|
-
if (a.size === 0 || b.size === 0) return 0;
|
|
20990
|
-
let inter = 0;
|
|
20991
|
-
for (const x of a) if (b.has(x)) inter++;
|
|
20992
|
-
return inter / Math.min(a.size, b.size);
|
|
20993
|
-
}
|
|
20994
|
-
function mergeDuplicateProblems(store, opts) {
|
|
20995
|
-
const minOverlap = opts.minOverlap ?? 0.85;
|
|
20996
|
-
const minTokens = opts.minTokens ?? 4;
|
|
20997
|
-
const report = { clusters: 0, merged: 0 };
|
|
20998
|
-
const open2 = store.findNodesByLabel("Problem").filter((p) => p.attrs["resolvedAt"] == null && p.attrs["mergedInto"] === void 0);
|
|
20999
|
-
const tokens = /* @__PURE__ */ new Map();
|
|
21000
|
-
for (const p of open2) tokens.set(p.id, new Set(conceptTokens(p.description)));
|
|
21001
|
-
const consumed = /* @__PURE__ */ new Set();
|
|
21002
|
-
store.transaction(() => {
|
|
21003
|
-
for (let i2 = 0; i2 < open2.length; i2++) {
|
|
21004
|
-
const a = open2[i2];
|
|
21005
|
-
if (consumed.has(a.id)) continue;
|
|
21006
|
-
const cluster = [a];
|
|
21007
|
-
const ta = tokens.get(a.id);
|
|
21008
|
-
for (let j = i2 + 1; j < open2.length; j++) {
|
|
21009
|
-
const b = open2[j];
|
|
21010
|
-
if (consumed.has(b.id)) continue;
|
|
21011
|
-
const tb = tokens.get(b.id);
|
|
21012
|
-
if (Math.min(ta.size, tb.size) < minTokens) continue;
|
|
21013
|
-
if (isConstraintProblem(a) !== isConstraintProblem(b)) continue;
|
|
21014
|
-
if (overlap(ta, tb) >= minOverlap) {
|
|
21015
|
-
cluster.push(b);
|
|
21016
|
-
consumed.add(b.id);
|
|
21017
|
-
}
|
|
21018
|
-
}
|
|
21019
|
-
if (cluster.length < 2) continue;
|
|
21020
|
-
report.clusters++;
|
|
21021
|
-
cluster.sort((x, y) => corroborations(y) - corroborations(x) || x.createdAt - y.createdAt);
|
|
21022
|
-
const survivor = cluster[0];
|
|
21023
|
-
for (const dup of cluster.slice(1)) {
|
|
21024
|
-
foldDuplicateProblem(store, dup, survivor, opts.ts);
|
|
21025
|
-
report.merged++;
|
|
21026
|
-
}
|
|
21027
|
-
}
|
|
21028
|
-
});
|
|
21029
|
-
return report;
|
|
21030
|
-
}
|
|
21031
|
-
function foldDuplicateProblem(store, dup, survivor, ts) {
|
|
21032
|
-
const surv = store.getNode(survivor.id);
|
|
21033
|
-
if (!surv) return;
|
|
21034
|
-
const sources = new Set(surv.attrs["sources"] ?? []);
|
|
21035
|
-
for (const s of dup.attrs["sources"] ?? []) sources.add(s);
|
|
21036
|
-
store.updateNode(survivor.id, {
|
|
21037
|
-
attrs: {
|
|
21038
|
-
...surv.attrs,
|
|
21039
|
-
sources: [...sources],
|
|
21040
|
-
corroborations: corroborations(surv) + corroborations(dup) + 1
|
|
21041
|
-
},
|
|
21042
|
-
cumulativeHits: (surv.cumulativeHits ?? 0) + (dup.cumulativeHits ?? 0),
|
|
21043
|
-
lastUpdatedAt: ts
|
|
21044
|
-
});
|
|
21045
|
-
for (const e of store.outEdges(dup.id, REDIRECT_EDGES)) {
|
|
21046
|
-
if (e.to === survivor.id) continue;
|
|
21047
|
-
const id = `edge_${digest({ from: survivor.id, type: e.type, to: e.to })}`.slice(0, 24);
|
|
21048
|
-
if (store.getEdge(id)) continue;
|
|
21049
|
-
const redirected = {
|
|
21050
|
-
...e,
|
|
21051
|
-
id,
|
|
21052
|
-
from: survivor.id,
|
|
21053
|
-
createdAt: ts,
|
|
21054
|
-
lastSeenAt: ts
|
|
21055
|
-
};
|
|
21056
|
-
store.mergeEdge(redirected);
|
|
21057
|
-
}
|
|
21058
|
-
store.updateNode(dup.id, {
|
|
21059
|
-
attrs: { ...dup.attrs, mergedInto: survivor.id, resolvedAs: "duplicate", resolvedAt: ts },
|
|
21060
|
-
lastUpdatedAt: ts
|
|
21061
|
-
});
|
|
21062
|
-
store.closeNode(dup.id, ts);
|
|
21063
|
-
}
|
|
21064
|
-
var REDIRECT_EDGES;
|
|
21065
|
-
var init_problem_dedup = __esm({
|
|
21066
|
-
"../../packages/local-graph/src/problem-dedup.ts"() {
|
|
21067
|
-
"use strict";
|
|
21068
|
-
init_src();
|
|
21069
|
-
init_src();
|
|
21070
|
-
init_design_problem();
|
|
21071
|
-
REDIRECT_EDGES = [
|
|
21072
|
-
"CAUSED_BY",
|
|
21073
|
-
"SOLVED_BY",
|
|
21074
|
-
"FIXED_BY",
|
|
21075
|
-
"ANCHORED_AT",
|
|
21076
|
-
"MANIFESTED_IN",
|
|
21077
|
-
"EVIDENCED_BY"
|
|
21078
|
-
];
|
|
21079
|
-
}
|
|
21080
|
-
});
|
|
21081
|
-
|
|
21082
21366
|
// ../../packages/local-graph/src/tools.ts
|
|
21083
21367
|
function toolNodeId(name2) {
|
|
21084
21368
|
return `tool:${name2}`;
|
|
@@ -21282,6 +21566,7 @@ __export(src_exports2, {
|
|
|
21282
21566
|
JOINT_COMMUNITY_EDGES: () => JOINT_COMMUNITY_EDGES,
|
|
21283
21567
|
JOINT_COMMUNITY_LABELS: () => JOINT_COMMUNITY_LABELS,
|
|
21284
21568
|
MAX_ANCHOR_FILES: () => MAX_ANCHOR_FILES,
|
|
21569
|
+
PATTERN_DEDUP_COSINE: () => PATTERN_DEDUP_COSINE,
|
|
21285
21570
|
PERCOLATING_DRIFT_EDGES: () => PERCOLATING_DRIFT_EDGES,
|
|
21286
21571
|
PERCOLATING_EDGES: () => PERCOLATING_EDGES,
|
|
21287
21572
|
PERCOLATING_LABELS: () => PERCOLATING_LABELS,
|
|
@@ -21301,6 +21586,7 @@ __export(src_exports2, {
|
|
|
21301
21586
|
buildPackageIndex: () => buildPackageIndex,
|
|
21302
21587
|
buildPrincipleSync: () => buildPrincipleSync,
|
|
21303
21588
|
buildSymbolIndex: () => buildSymbolIndex,
|
|
21589
|
+
canonicalizePatternText: () => canonicalizePatternText,
|
|
21304
21590
|
causalChain: () => causalChain,
|
|
21305
21591
|
claimId: () => claimId,
|
|
21306
21592
|
clearRevisit: () => clearRevisit,
|
|
@@ -21316,6 +21602,7 @@ __export(src_exports2, {
|
|
|
21316
21602
|
detectLocalCommunities: () => detectLocalCommunities,
|
|
21317
21603
|
edgeConductance: () => edgeConductance,
|
|
21318
21604
|
evaluateDependency: () => evaluateDependency,
|
|
21605
|
+
findMintTimeDuplicate: () => findMintTimeDuplicate,
|
|
21319
21606
|
findOrCreatePackage: () => findOrCreatePackage,
|
|
21320
21607
|
findPath: () => findPath,
|
|
21321
21608
|
flattenCloudCounts: () => flattenCloudCounts,
|
|
@@ -21380,13 +21667,14 @@ __export(src_exports2, {
|
|
|
21380
21667
|
solutionForProblem: () => solutionForProblem,
|
|
21381
21668
|
splittingAxis: () => splittingAxis,
|
|
21382
21669
|
stampObservedOs: () => stampObservedOs,
|
|
21670
|
+
statementIdentityKey: () => statementIdentityKey,
|
|
21383
21671
|
staticConductance: () => staticConductance,
|
|
21384
21672
|
toolNodeId: () => toolNodeId,
|
|
21385
21673
|
toolPriorsFor: () => toolPriorsFor,
|
|
21386
21674
|
triageOf: () => triageOf,
|
|
21387
21675
|
walk: () => walk
|
|
21388
21676
|
});
|
|
21389
|
-
var
|
|
21677
|
+
var init_src5 = __esm({
|
|
21390
21678
|
"../../packages/local-graph/src/index.ts"() {
|
|
21391
21679
|
"use strict";
|
|
21392
21680
|
init_store();
|
|
@@ -21908,7 +22196,7 @@ var RECALL_FIRST_HEADER, RECALL_FIRST_BODY, RECALL_FIRST_BLOCK, SEARCH_IMPERATIV
|
|
|
21908
22196
|
var init_render = __esm({
|
|
21909
22197
|
"../../packages/context-writer/src/render.ts"() {
|
|
21910
22198
|
"use strict";
|
|
21911
|
-
|
|
22199
|
+
init_src5();
|
|
21912
22200
|
init_src2();
|
|
21913
22201
|
RECALL_FIRST_HEADER = "## errata \u2014 recall before you work";
|
|
21914
22202
|
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 +22274,8 @@ var init_bleed_memory = __esm({
|
|
|
21986
22274
|
});
|
|
21987
22275
|
|
|
21988
22276
|
// ../../packages/context-writer/src/bleed-rules.ts
|
|
21989
|
-
import { existsSync as
|
|
21990
|
-
import { join as
|
|
22277
|
+
import { existsSync as existsSync5, mkdirSync as mkdirSync4, readdirSync, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync4 } from "node:fs";
|
|
22278
|
+
import { join as join4 } from "node:path";
|
|
21991
22279
|
function formatRuleFile(item) {
|
|
21992
22280
|
const frontmatter = item.paths && item.paths.length > 0 ? `---
|
|
21993
22281
|
paths:
|
|
@@ -22000,21 +22288,21 @@ ${item.body.trim()}
|
|
|
22000
22288
|
`;
|
|
22001
22289
|
}
|
|
22002
22290
|
function bleedRules(rulesDir, items) {
|
|
22003
|
-
if (!
|
|
22291
|
+
if (!existsSync5(rulesDir)) mkdirSync4(rulesDir, { recursive: true });
|
|
22004
22292
|
const wanted = new Map(items.map((i2) => [fileFor(i2.slug), i2]));
|
|
22005
22293
|
let written = 0;
|
|
22006
22294
|
let created = 0;
|
|
22007
22295
|
for (const [file2, item] of wanted) {
|
|
22008
|
-
const path2 =
|
|
22009
|
-
if (!
|
|
22296
|
+
const path2 = join4(rulesDir, file2);
|
|
22297
|
+
if (!existsSync5(path2)) created++;
|
|
22010
22298
|
writeFileSync4(path2, formatRuleFile(item), "utf8");
|
|
22011
22299
|
written++;
|
|
22012
22300
|
}
|
|
22013
22301
|
let pruned = 0;
|
|
22014
22302
|
for (const f of readdirSync(rulesDir)) {
|
|
22015
22303
|
if (!f.startsWith(PREFIX) || !f.endsWith(".md") || wanted.has(f)) continue;
|
|
22016
|
-
if (readFileSync3(
|
|
22017
|
-
rmSync(
|
|
22304
|
+
if (readFileSync3(join4(rulesDir, f), "utf8").includes(MARKER)) {
|
|
22305
|
+
rmSync(join4(rulesDir, f));
|
|
22018
22306
|
pruned++;
|
|
22019
22307
|
}
|
|
22020
22308
|
}
|
|
@@ -22097,7 +22385,7 @@ var init_select_durable_memory = __esm({
|
|
|
22097
22385
|
});
|
|
22098
22386
|
|
|
22099
22387
|
// ../../packages/context-writer/src/index.ts
|
|
22100
|
-
var
|
|
22388
|
+
var init_src6 = __esm({
|
|
22101
22389
|
"../../packages/context-writer/src/index.ts"() {
|
|
22102
22390
|
"use strict";
|
|
22103
22391
|
init_agents_md();
|
|
@@ -23052,7 +23340,7 @@ var init_pkce = __esm({
|
|
|
23052
23340
|
});
|
|
23053
23341
|
|
|
23054
23342
|
// ../../packages/cloud-client/src/index.ts
|
|
23055
|
-
var
|
|
23343
|
+
var init_src7 = __esm({
|
|
23056
23344
|
"../../packages/cloud-client/src/index.ts"() {
|
|
23057
23345
|
"use strict";
|
|
23058
23346
|
init_client();
|
|
@@ -23080,14 +23368,14 @@ function envPaths(name2, { suffix = "nodejs" } = {}) {
|
|
|
23080
23368
|
}
|
|
23081
23369
|
return linux(name2);
|
|
23082
23370
|
}
|
|
23083
|
-
var
|
|
23371
|
+
var homedir2, tmpdir, env, macos, windows, linux;
|
|
23084
23372
|
var init_env_paths = __esm({
|
|
23085
23373
|
"../../node_modules/.pnpm/env-paths@3.0.0/node_modules/env-paths/index.js"() {
|
|
23086
|
-
|
|
23374
|
+
homedir2 = os.homedir();
|
|
23087
23375
|
tmpdir = os.tmpdir();
|
|
23088
23376
|
({ env } = process3);
|
|
23089
23377
|
macos = (name2) => {
|
|
23090
|
-
const library = path.join(
|
|
23378
|
+
const library = path.join(homedir2, "Library");
|
|
23091
23379
|
return {
|
|
23092
23380
|
data: path.join(library, "Application Support", name2),
|
|
23093
23381
|
config: path.join(library, "Preferences", name2),
|
|
@@ -23097,8 +23385,8 @@ var init_env_paths = __esm({
|
|
|
23097
23385
|
};
|
|
23098
23386
|
};
|
|
23099
23387
|
windows = (name2) => {
|
|
23100
|
-
const appData = env.APPDATA || path.join(
|
|
23101
|
-
const localAppData = env.LOCALAPPDATA || path.join(
|
|
23388
|
+
const appData = env.APPDATA || path.join(homedir2, "AppData", "Roaming");
|
|
23389
|
+
const localAppData = env.LOCALAPPDATA || path.join(homedir2, "AppData", "Local");
|
|
23102
23390
|
return {
|
|
23103
23391
|
// Data/config/cache/log are invented by me as Windows isn't opinionated about this
|
|
23104
23392
|
data: path.join(localAppData, name2, "Data"),
|
|
@@ -23109,13 +23397,13 @@ var init_env_paths = __esm({
|
|
|
23109
23397
|
};
|
|
23110
23398
|
};
|
|
23111
23399
|
linux = (name2) => {
|
|
23112
|
-
const username = path.basename(
|
|
23400
|
+
const username = path.basename(homedir2);
|
|
23113
23401
|
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(
|
|
23402
|
+
data: path.join(env.XDG_DATA_HOME || path.join(homedir2, ".local", "share"), name2),
|
|
23403
|
+
config: path.join(env.XDG_CONFIG_HOME || path.join(homedir2, ".config"), name2),
|
|
23404
|
+
cache: path.join(env.XDG_CACHE_HOME || path.join(homedir2, ".cache"), name2),
|
|
23117
23405
|
// https://wiki.debian.org/XDGBaseDirectorySpecification#state
|
|
23118
|
-
log: path.join(env.XDG_STATE_HOME || path.join(
|
|
23406
|
+
log: path.join(env.XDG_STATE_HOME || path.join(homedir2, ".local", "state"), name2),
|
|
23119
23407
|
temp: path.join(tmpdir, username, name2)
|
|
23120
23408
|
};
|
|
23121
23409
|
};
|
|
@@ -23135,34 +23423,34 @@ __export(paths_exports, {
|
|
|
23135
23423
|
workspaceDir: () => workspaceDir,
|
|
23136
23424
|
workspacePaths: () => workspacePaths
|
|
23137
23425
|
});
|
|
23138
|
-
import { mkdirSync as
|
|
23139
|
-
import { dirname as
|
|
23426
|
+
import { mkdirSync as mkdirSync5 } from "node:fs";
|
|
23427
|
+
import { dirname as dirname4, join as join5 } from "node:path";
|
|
23140
23428
|
function globalDir() {
|
|
23141
23429
|
const p = envPaths("errata", { suffix: "" });
|
|
23142
23430
|
return p.config;
|
|
23143
23431
|
}
|
|
23144
23432
|
function globalConfigPath() {
|
|
23145
|
-
return process.env["ERRATA_CONFIG_PATH"] ??
|
|
23433
|
+
return process.env["ERRATA_CONFIG_PATH"] ?? join5(globalDir(), "config.json");
|
|
23146
23434
|
}
|
|
23147
23435
|
function daemonLogPath() {
|
|
23148
|
-
|
|
23149
|
-
return
|
|
23436
|
+
mkdirSync5(globalDir(), { recursive: true });
|
|
23437
|
+
return join5(globalDir(), "daemon.log");
|
|
23150
23438
|
}
|
|
23151
23439
|
function globalDaemonLock() {
|
|
23152
|
-
return process.env["ERRATA_DAEMON_LOCK"] ??
|
|
23440
|
+
return process.env["ERRATA_DAEMON_LOCK"] ?? join5(globalDir(), "daemon.lock");
|
|
23153
23441
|
}
|
|
23154
23442
|
function sharedStorePath() {
|
|
23155
|
-
return process.env["ERRATA_SHARED_DB"] ??
|
|
23443
|
+
return process.env["ERRATA_SHARED_DB"] ?? join5(globalDir(), "shared", "graph.db");
|
|
23156
23444
|
}
|
|
23157
23445
|
function workspaceDir(workspaceRoot) {
|
|
23158
|
-
return
|
|
23446
|
+
return join5(workspaceRoot, ".errata");
|
|
23159
23447
|
}
|
|
23160
23448
|
function ensureDir(p) {
|
|
23161
|
-
|
|
23449
|
+
mkdirSync5(p, { recursive: true });
|
|
23162
23450
|
return p;
|
|
23163
23451
|
}
|
|
23164
23452
|
function ensureParent(p) {
|
|
23165
|
-
|
|
23453
|
+
mkdirSync5(dirname4(p), { recursive: true });
|
|
23166
23454
|
return p;
|
|
23167
23455
|
}
|
|
23168
23456
|
function workspacePaths(root) {
|
|
@@ -23170,15 +23458,15 @@ function workspacePaths(root) {
|
|
|
23170
23458
|
return {
|
|
23171
23459
|
root,
|
|
23172
23460
|
configDir: dir,
|
|
23173
|
-
workspaceJson:
|
|
23174
|
-
eventLog:
|
|
23175
|
-
castalia:
|
|
23176
|
-
reviewQueue:
|
|
23177
|
-
outbox:
|
|
23178
|
-
daemonLock:
|
|
23179
|
-
identityAudit:
|
|
23180
|
-
skillsDir:
|
|
23181
|
-
skillsManifest:
|
|
23461
|
+
workspaceJson: join5(dir, "workspace.json"),
|
|
23462
|
+
eventLog: join5(dir, "eventlog.sqlite"),
|
|
23463
|
+
castalia: join5(dir, "castalia.db"),
|
|
23464
|
+
reviewQueue: join5(dir, "review-queue.json"),
|
|
23465
|
+
outbox: join5(dir, "outbox"),
|
|
23466
|
+
daemonLock: join5(dir, "daemon.lock"),
|
|
23467
|
+
identityAudit: join5(dir, "identity-audit.log"),
|
|
23468
|
+
skillsDir: join5(dir, "skills"),
|
|
23469
|
+
skillsManifest: join5(dir, "skills.json")
|
|
23182
23470
|
};
|
|
23183
23471
|
}
|
|
23184
23472
|
var init_paths = __esm({
|
|
@@ -23189,7 +23477,7 @@ var init_paths = __esm({
|
|
|
23189
23477
|
});
|
|
23190
23478
|
|
|
23191
23479
|
// src/config.ts
|
|
23192
|
-
import { existsSync as
|
|
23480
|
+
import { existsSync as existsSync6, readFileSync as readFileSync4, writeFileSync as writeFileSync5 } from "node:fs";
|
|
23193
23481
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
23194
23482
|
function defaultConfig() {
|
|
23195
23483
|
return {
|
|
@@ -23217,7 +23505,7 @@ function defaultConfig() {
|
|
|
23217
23505
|
}
|
|
23218
23506
|
function loadConfig() {
|
|
23219
23507
|
const p = globalConfigPath();
|
|
23220
|
-
if (!
|
|
23508
|
+
if (!existsSync6(p)) {
|
|
23221
23509
|
ensureDir(globalDir());
|
|
23222
23510
|
const cfg = defaultConfig();
|
|
23223
23511
|
saveConfig({ ...cfg, cloudUrl: DEFAULT_CLOUD_URL });
|
|
@@ -23678,7 +23966,7 @@ function hasCloudCredential(cfg) {
|
|
|
23678
23966
|
var init_cloud_auth = __esm({
|
|
23679
23967
|
"src/cloud-auth.ts"() {
|
|
23680
23968
|
"use strict";
|
|
23681
|
-
|
|
23969
|
+
init_src7();
|
|
23682
23970
|
init_config();
|
|
23683
23971
|
init_cloud_endpoint_policy();
|
|
23684
23972
|
}
|
|
@@ -25934,7 +26222,7 @@ function buildAgentInstruction(opts = {}) {
|
|
|
25934
26222
|
const ref = opts.referent ?? "its-handle";
|
|
25935
26223
|
const token = (s) => s === "problem" ? TAG_EXAMPLE.problem() : s === "constraint" ? TAG_EXAMPLE.constraint() : s === "attempt" ? TAG_EXAMPLE.tried() : s === "domain" ? TAG_EXAMPLE.domain() : s === "link" ? TAG_EXAMPLE.pattern() : TAG_EXAMPLE[s](ref);
|
|
25936
26224
|
const head2 = `We tag the priors we show you with a short handle like [${opts.handleExample ?? "chokidar-glob"}]. Tags are the ONLY signal recorded \u2014 anything you state but don't tag is silently lost. Weave each tag inline in your prose as you state it (no fences or backticks, no extra calls); tag everything, we filter downstream:`;
|
|
25937
|
-
const tail = "Mid-turn text (between tool calls) can be dropped by the harness \u2014 RESTATE every tag in your turn-final message; the final message is what reliably survives.";
|
|
26225
|
+
const tail = "Mid-turn text (between tool calls) can be dropped by the harness \u2014 RESTATE every tag in your turn-final message; the final message is what reliably survives \u2014 EXCEPT one already shown above with an id: that is captured, so cite `[its-handle]` rather than retyping it (drift mints a duplicate).";
|
|
25938
26226
|
return [
|
|
25939
26227
|
head2,
|
|
25940
26228
|
...signals.map(
|
|
@@ -26023,9 +26311,9 @@ var init_agent_signals = __esm({
|
|
|
26023
26311
|
});
|
|
26024
26312
|
|
|
26025
26313
|
// src/review.ts
|
|
26026
|
-
import { existsSync as
|
|
26314
|
+
import { existsSync as existsSync7, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs";
|
|
26027
26315
|
function loadReviewQueue(paths) {
|
|
26028
|
-
if (!
|
|
26316
|
+
if (!existsSync7(paths.reviewQueue)) return [];
|
|
26029
26317
|
try {
|
|
26030
26318
|
return JSON.parse(readFileSync5(paths.reviewQueue, "utf8"));
|
|
26031
26319
|
} catch {
|
|
@@ -26320,7 +26608,7 @@ __export(src_exports3, {
|
|
|
26320
26608
|
recheck: () => recheck,
|
|
26321
26609
|
scrub: () => scrub
|
|
26322
26610
|
});
|
|
26323
|
-
var
|
|
26611
|
+
var init_src8 = __esm({
|
|
26324
26612
|
"../../packages/canonical/src/index.ts"() {
|
|
26325
26613
|
"use strict";
|
|
26326
26614
|
init_scrub();
|
|
@@ -26346,7 +26634,7 @@ var TOKEN_RULES;
|
|
|
26346
26634
|
var init_generalize = __esm({
|
|
26347
26635
|
"../../packages/privacy-edge/src/generalize.ts"() {
|
|
26348
26636
|
"use strict";
|
|
26349
|
-
|
|
26637
|
+
init_src8();
|
|
26350
26638
|
init_date_shapes();
|
|
26351
26639
|
init_ontology();
|
|
26352
26640
|
TOKEN_RULES = [
|
|
@@ -26364,7 +26652,7 @@ var init_generalize = __esm({
|
|
|
26364
26652
|
});
|
|
26365
26653
|
|
|
26366
26654
|
// ../../packages/privacy-edge/src/index.ts
|
|
26367
|
-
var
|
|
26655
|
+
var init_src9 = __esm({
|
|
26368
26656
|
"../../packages/privacy-edge/src/index.ts"() {
|
|
26369
26657
|
"use strict";
|
|
26370
26658
|
init_ontology();
|
|
@@ -26427,7 +26715,7 @@ var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, TOKEN_RE3;
|
|
|
26427
26715
|
var init_generalize_graph = __esm({
|
|
26428
26716
|
"src/generalize-graph.ts"() {
|
|
26429
26717
|
"use strict";
|
|
26430
|
-
|
|
26718
|
+
init_src9();
|
|
26431
26719
|
init_src();
|
|
26432
26720
|
SYMBOL_LABELS2 = [
|
|
26433
26721
|
["Function", "function"],
|
|
@@ -26680,207 +26968,6 @@ var init_dual_augment = __esm({
|
|
|
26680
26968
|
}
|
|
26681
26969
|
});
|
|
26682
26970
|
|
|
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
26971
|
// ../../packages/generalizer/src/review-detector.ts
|
|
26885
26972
|
function evaluateForReview(node2, prevTier) {
|
|
26886
26973
|
if (node2.cumulativeSurprise >= REVIEW_SURPRISE_THRESHOLD) {
|
|
@@ -26897,7 +26984,7 @@ function evaluateForReview(node2, prevTier) {
|
|
|
26897
26984
|
var init_review_detector = __esm({
|
|
26898
26985
|
"../../packages/generalizer/src/review-detector.ts"() {
|
|
26899
26986
|
"use strict";
|
|
26900
|
-
|
|
26987
|
+
init_src4();
|
|
26901
26988
|
}
|
|
26902
26989
|
});
|
|
26903
26990
|
|
|
@@ -26920,7 +27007,7 @@ function nemoriDecide(input) {
|
|
|
26920
27007
|
var init_nemori_gate = __esm({
|
|
26921
27008
|
"../../packages/generalizer/src/nemori-gate.ts"() {
|
|
26922
27009
|
"use strict";
|
|
26923
|
-
|
|
27010
|
+
init_src4();
|
|
26924
27011
|
}
|
|
26925
27012
|
});
|
|
26926
27013
|
|
|
@@ -27953,11 +28040,11 @@ var init_generalizer = __esm({
|
|
|
27953
28040
|
"../../packages/generalizer/src/generalizer.ts"() {
|
|
27954
28041
|
"use strict";
|
|
27955
28042
|
init_src2();
|
|
28043
|
+
init_src4();
|
|
27956
28044
|
init_src3();
|
|
27957
|
-
init_src9();
|
|
27958
28045
|
init_src();
|
|
27959
28046
|
init_src();
|
|
27960
|
-
|
|
28047
|
+
init_src5();
|
|
27961
28048
|
init_review_detector();
|
|
27962
28049
|
init_nemori_gate();
|
|
27963
28050
|
init_diagnostic_matcher();
|
|
@@ -28082,7 +28169,7 @@ var init_motifs = __esm({
|
|
|
28082
28169
|
"../../packages/generalizer/src/motifs.ts"() {
|
|
28083
28170
|
"use strict";
|
|
28084
28171
|
init_src2();
|
|
28085
|
-
|
|
28172
|
+
init_src4();
|
|
28086
28173
|
init_src();
|
|
28087
28174
|
MEMBER_LABELS = ["Problem", "RootCause", "Solution"];
|
|
28088
28175
|
}
|
|
@@ -28219,8 +28306,8 @@ var init_nightly = __esm({
|
|
|
28219
28306
|
"../../packages/generalizer/src/nightly.ts"() {
|
|
28220
28307
|
"use strict";
|
|
28221
28308
|
init_src2();
|
|
28222
|
-
init_src3();
|
|
28223
28309
|
init_src4();
|
|
28310
|
+
init_src5();
|
|
28224
28311
|
init_motifs();
|
|
28225
28312
|
}
|
|
28226
28313
|
});
|
|
@@ -28342,7 +28429,7 @@ var CODE_LABELS, SEMANTIC_LABELS, BATCH_SIZE;
|
|
|
28342
28429
|
var init_embed_code = __esm({
|
|
28343
28430
|
"../../packages/generalizer/src/embed-code.ts"() {
|
|
28344
28431
|
"use strict";
|
|
28345
|
-
|
|
28432
|
+
init_src3();
|
|
28346
28433
|
CODE_LABELS = ["Function", "Method", "Class", "Const"];
|
|
28347
28434
|
SEMANTIC_LABELS = ["Problem", "RootCause", "Solution", "Pattern", "Claim"];
|
|
28348
28435
|
BATCH_SIZE = 32;
|
|
@@ -28449,8 +28536,8 @@ function localBurst(store, seedId, opts = {}) {
|
|
|
28449
28536
|
var init_relevance_rank = __esm({
|
|
28450
28537
|
"../../packages/generalizer/src/relevance-rank.ts"() {
|
|
28451
28538
|
"use strict";
|
|
28452
|
-
init_src9();
|
|
28453
28539
|
init_src3();
|
|
28540
|
+
init_src4();
|
|
28454
28541
|
}
|
|
28455
28542
|
});
|
|
28456
28543
|
|
|
@@ -37923,7 +38010,7 @@ var init_mcp = __esm({
|
|
|
37923
38010
|
init_cloud_auth();
|
|
37924
38011
|
init_config();
|
|
37925
38012
|
init_dual_augment();
|
|
37926
|
-
|
|
38013
|
+
init_src5();
|
|
37927
38014
|
init_src2();
|
|
37928
38015
|
init_src10();
|
|
37929
38016
|
init_dual_burst();
|
|
@@ -46879,7 +46966,7 @@ var init_tool_index = __esm({
|
|
|
46879
46966
|
"use strict";
|
|
46880
46967
|
init_src();
|
|
46881
46968
|
init_src();
|
|
46882
|
-
|
|
46969
|
+
init_src5();
|
|
46883
46970
|
init_tldr_tools_generated();
|
|
46884
46971
|
PUBLIC_TOOLS = new Set(TLDR_TOOL_NAMES);
|
|
46885
46972
|
PLUMBING = /* @__PURE__ */ new Set([
|
|
@@ -47620,8 +47707,8 @@ var init_webui = __esm({
|
|
|
47620
47707
|
"src/webui.ts"() {
|
|
47621
47708
|
"use strict";
|
|
47622
47709
|
init_dist();
|
|
47710
|
+
init_src6();
|
|
47623
47711
|
init_src5();
|
|
47624
|
-
init_src4();
|
|
47625
47712
|
init_agent_signals();
|
|
47626
47713
|
init_review2();
|
|
47627
47714
|
init_vfile();
|
|
@@ -48092,7 +48179,7 @@ var init_report_render = __esm({
|
|
|
48092
48179
|
});
|
|
48093
48180
|
|
|
48094
48181
|
// src/cli.ts
|
|
48095
|
-
|
|
48182
|
+
init_src6();
|
|
48096
48183
|
import { closeSync as closeSync2, existsSync as existsSync27, openSync as openSync2, readFileSync as readFileSync26, renameSync as renameSync4, statSync as statSync6 } from "node:fs";
|
|
48097
48184
|
import { join as join30 } from "node:path";
|
|
48098
48185
|
import { spawn as spawn3 } from "node:child_process";
|
|
@@ -50375,7 +50462,7 @@ var esm_default = { watch, FSWatcher };
|
|
|
50375
50462
|
// src/engine.ts
|
|
50376
50463
|
init_src();
|
|
50377
50464
|
init_src2();
|
|
50378
|
-
|
|
50465
|
+
init_src5();
|
|
50379
50466
|
|
|
50380
50467
|
// ../../packages/eventlog/src/store.ts
|
|
50381
50468
|
init_src2();
|
|
@@ -50536,7 +50623,7 @@ function openEventLog(opts) {
|
|
|
50536
50623
|
|
|
50537
50624
|
// src/engine.ts
|
|
50538
50625
|
init_src11();
|
|
50539
|
-
|
|
50626
|
+
init_src6();
|
|
50540
50627
|
init_src10();
|
|
50541
50628
|
init_review2();
|
|
50542
50629
|
|
|
@@ -50779,7 +50866,7 @@ init_src();
|
|
|
50779
50866
|
init_src2();
|
|
50780
50867
|
init_agent_signals();
|
|
50781
50868
|
init_tool_index();
|
|
50782
|
-
|
|
50869
|
+
init_src5();
|
|
50783
50870
|
import { readFileSync as readFileSync10, writeFileSync as writeFileSync10 } from "node:fs";
|
|
50784
50871
|
var NEG = /n['']t|\b(?:not|never|no|none|neither|nor|unrelated|irrelevant|would|might|could|if)\b/i;
|
|
50785
50872
|
var CITE_GROUP_RE = /\(((?:[^()\n]|\([^()\n]*\)){1,200})\)/g;
|
|
@@ -51523,7 +51610,7 @@ ${conversation}` }]
|
|
|
51523
51610
|
}
|
|
51524
51611
|
|
|
51525
51612
|
// src/constraint-backfill.ts
|
|
51526
|
-
|
|
51613
|
+
init_src5();
|
|
51527
51614
|
init_src2();
|
|
51528
51615
|
import { existsSync as existsSync13, readFileSync as readFileSync11, readdirSync as readdirSync6, writeFileSync as writeFileSync11 } from "node:fs";
|
|
51529
51616
|
import { join as join16 } from "node:path";
|
|
@@ -51692,7 +51779,7 @@ function backfillConstraintKind(store, opts) {
|
|
|
51692
51779
|
|
|
51693
51780
|
// src/edge-repair.ts
|
|
51694
51781
|
init_src();
|
|
51695
|
-
|
|
51782
|
+
init_src5();
|
|
51696
51783
|
import { existsSync as existsSync14, readFileSync as readFileSync12, writeFileSync as writeFileSync12 } from "node:fs";
|
|
51697
51784
|
import { join as join17 } from "node:path";
|
|
51698
51785
|
function citeEdgeId(from, type, to) {
|
|
@@ -51969,7 +52056,7 @@ var PassWorker = class {
|
|
|
51969
52056
|
init_outbox();
|
|
51970
52057
|
|
|
51971
52058
|
// src/claim-sync.ts
|
|
51972
|
-
|
|
52059
|
+
init_src9();
|
|
51973
52060
|
init_src();
|
|
51974
52061
|
init_src2();
|
|
51975
52062
|
import { readFileSync as readFileSync13 } from "node:fs";
|
|
@@ -53411,7 +53498,7 @@ function startLoopLagMonitor(thresholdMs = 1e3) {
|
|
|
53411
53498
|
}
|
|
53412
53499
|
|
|
53413
53500
|
// src/engine.ts
|
|
53414
|
-
var DAEMON_VERSION = true ? "2.0.2-dev.
|
|
53501
|
+
var DAEMON_VERSION = true ? "2.0.2-dev.455" : "2.0.0-alpha.0";
|
|
53415
53502
|
var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
|
|
53416
53503
|
var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
|
|
53417
53504
|
var GIT_OP_MUTE_MS = 4e3;
|
|
@@ -55122,11 +55209,11 @@ function pidAlive(pid) {
|
|
|
55122
55209
|
|
|
55123
55210
|
// src/multi.ts
|
|
55124
55211
|
init_dist();
|
|
55125
|
-
|
|
55212
|
+
init_src5();
|
|
55126
55213
|
import { readFileSync as readFileSync25, unlinkSync as unlinkSync3, writeFileSync as writeFileSync21 } from "node:fs";
|
|
55127
55214
|
|
|
55128
55215
|
// src/principle-sync.ts
|
|
55129
|
-
|
|
55216
|
+
init_src5();
|
|
55130
55217
|
async function syncPrinciples(store, cloud, opts) {
|
|
55131
55218
|
const mine = buildPrincipleSync(store, opts.machine);
|
|
55132
55219
|
let pushed = 0;
|
|
@@ -55320,12 +55407,12 @@ function runLockfilePass(opts) {
|
|
|
55320
55407
|
// src/instance-ingest.ts
|
|
55321
55408
|
init_src();
|
|
55322
55409
|
init_src2();
|
|
55323
|
-
|
|
55324
|
-
|
|
55410
|
+
init_src5();
|
|
55411
|
+
init_src9();
|
|
55325
55412
|
init_src();
|
|
55326
55413
|
|
|
55327
55414
|
// src/contribution-ready.ts
|
|
55328
|
-
|
|
55415
|
+
init_src4();
|
|
55329
55416
|
function cosine4(a, b) {
|
|
55330
55417
|
if (a.length === 0 || a.length !== b.length) return 0;
|
|
55331
55418
|
let dot = 0;
|
|
@@ -57080,9 +57167,9 @@ async function startMultiDaemon(opts = {}) {
|
|
|
57080
57167
|
}
|
|
57081
57168
|
|
|
57082
57169
|
// src/cli.ts
|
|
57083
|
-
|
|
57170
|
+
init_src5();
|
|
57084
57171
|
init_config();
|
|
57085
|
-
|
|
57172
|
+
init_src7();
|
|
57086
57173
|
init_cloud_auth();
|
|
57087
57174
|
|
|
57088
57175
|
// src/agent-switch.ts
|
|
@@ -57195,7 +57282,7 @@ function errText(err2) {
|
|
|
57195
57282
|
init_cloud_endpoint_policy();
|
|
57196
57283
|
|
|
57197
57284
|
// src/oauth-login.ts
|
|
57198
|
-
|
|
57285
|
+
init_src7();
|
|
57199
57286
|
init_cloud_auth();
|
|
57200
57287
|
import { createServer } from "node:http";
|
|
57201
57288
|
var DEFAULT_OAUTH_SCOPE = "openid profile graph:read graph:write mcp:tools";
|
|
@@ -57420,7 +57507,7 @@ async function loginOAuthLoopback(opts) {
|
|
|
57420
57507
|
}
|
|
57421
57508
|
|
|
57422
57509
|
// src/device-login.ts
|
|
57423
|
-
|
|
57510
|
+
init_src7();
|
|
57424
57511
|
var DEFAULT_SCOPE = "openid profile graph:read graph:write mcp:tools";
|
|
57425
57512
|
var BRIDGE_REDIRECT_URI = "http://127.0.0.1:1/device-bridge-callback";
|
|
57426
57513
|
var strip2 = (u) => u.replace(/\/+$/, "");
|
|
@@ -58226,7 +58313,7 @@ async function cmdStatus() {
|
|
|
58226
58313
|
console.log(` event log: ${existsSync27(paths.eventLog) ? "yes" : "no"} (${paths.eventLog})`);
|
|
58227
58314
|
if (existsSync27(paths.castalia)) {
|
|
58228
58315
|
try {
|
|
58229
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
58316
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
58230
58317
|
const store = openGraphStore2({ path: paths.castalia });
|
|
58231
58318
|
try {
|
|
58232
58319
|
let pending = 0;
|
|
@@ -58974,7 +59061,7 @@ async function cmdLocate(relPath) {
|
|
|
58974
59061
|
process.exit(2);
|
|
58975
59062
|
}
|
|
58976
59063
|
await ensureProfile();
|
|
58977
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
59064
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
58978
59065
|
const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
|
|
58979
59066
|
const paths = workspacePaths2(ROOT);
|
|
58980
59067
|
const store = openGraphStore2({ path: paths.castalia });
|
|
@@ -59024,7 +59111,7 @@ async function cmdNeighbors(args2) {
|
|
|
59024
59111
|
const depthIdx = args2.indexOf("--depth");
|
|
59025
59112
|
const depth = depthIdx >= 0 && args2[depthIdx + 1] ? Math.max(1, Math.min(5, Number(args2[depthIdx + 1]))) : 2;
|
|
59026
59113
|
await ensureProfile();
|
|
59027
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
59114
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
59028
59115
|
const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
|
|
59029
59116
|
const paths = workspacePaths2(ROOT);
|
|
59030
59117
|
const store = openGraphStore2({ path: paths.castalia });
|
|
@@ -59072,7 +59159,7 @@ async function cmdNeighbors(args2) {
|
|
|
59072
59159
|
}
|
|
59073
59160
|
async function cmdTodos() {
|
|
59074
59161
|
await ensureProfile();
|
|
59075
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
59162
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
59076
59163
|
const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
|
|
59077
59164
|
const paths = workspacePaths2(ROOT);
|
|
59078
59165
|
const store = openGraphStore2({ path: paths.castalia });
|
|
@@ -59111,7 +59198,7 @@ async function cmdTodos() {
|
|
|
59111
59198
|
async function cmdBackfillAnchors() {
|
|
59112
59199
|
const profile = loadProfile(ROOT);
|
|
59113
59200
|
await ensureProfile();
|
|
59114
|
-
const { anchorSolutionToDiff: anchorSolutionToDiff2, anchorProblemToDiff: anchorProblemToDiff2, deriveContextFromAnchors: deriveContextFromAnchors2 } = await Promise.resolve().then(() => (
|
|
59201
|
+
const { anchorSolutionToDiff: anchorSolutionToDiff2, anchorProblemToDiff: anchorProblemToDiff2, deriveContextFromAnchors: deriveContextFromAnchors2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
59115
59202
|
const { bindCanonicalNeighbors: bindCanonicalNeighbors2 } = await Promise.resolve().then(() => (init_src10(), src_exports4));
|
|
59116
59203
|
const { digest: digest2 } = await Promise.resolve().then(() => (init_src(), src_exports));
|
|
59117
59204
|
await withStore(async (store) => {
|
|
@@ -59187,7 +59274,7 @@ async function cmdBackfillAnchors() {
|
|
|
59187
59274
|
}
|
|
59188
59275
|
async function withStore(fn) {
|
|
59189
59276
|
await ensureProfile();
|
|
59190
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
59277
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
59191
59278
|
const { workspacePaths: workspacePaths2 } = await Promise.resolve().then(() => (init_paths(), paths_exports));
|
|
59192
59279
|
const paths = workspacePaths2(ROOT);
|
|
59193
59280
|
const store = openGraphStore2({ path: paths.castalia });
|
|
@@ -59581,7 +59668,7 @@ async function gatherRepo(store, ws) {
|
|
|
59581
59668
|
}
|
|
59582
59669
|
async function gatherReportData(generatedAt) {
|
|
59583
59670
|
const { existsSync: existsSync28 } = await import("node:fs");
|
|
59584
|
-
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (
|
|
59671
|
+
const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
|
|
59585
59672
|
const cfg = loadConfig();
|
|
59586
59673
|
const outbound = cfg.consent.sync ? "auto" : "off";
|
|
59587
59674
|
const repos = [];
|
|
@@ -60381,7 +60468,7 @@ async function cmdFeedback(args2) {
|
|
|
60381
60468
|
console.error('usage: errata feedback [up|down] "<message>"');
|
|
60382
60469
|
process.exit(2);
|
|
60383
60470
|
}
|
|
60384
|
-
const { scrub: scrub2 } = await Promise.resolve().then(() => (
|
|
60471
|
+
const { scrub: scrub2 } = await Promise.resolve().then(() => (init_src8(), src_exports3));
|
|
60385
60472
|
const scrubbed = scrub2(message).text;
|
|
60386
60473
|
const c = authedCloudClient(cfg);
|
|
60387
60474
|
try {
|