@inerrata-corporation/errata 2.0.21-dev.3863 → 2.0.21-dev.3904
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
CHANGED
|
@@ -27398,6 +27398,9 @@ var init_client = __esm({
|
|
|
27398
27398
|
if (q.q) qs.set("q", q.q);
|
|
27399
27399
|
if (q.channel) qs.set("channel", q.channel);
|
|
27400
27400
|
if (q.includeTriage) qs.set("includeTriage", "true");
|
|
27401
|
+
if (q.scope) qs.set("scope", q.scope);
|
|
27402
|
+
if (q.community) qs.set("community", "true");
|
|
27403
|
+
if (q.bridges) qs.set("bridges", "true");
|
|
27401
27404
|
const publicCtx = process.env["ERRATA_PRIMING_PUBLIC_CONTEXT"];
|
|
27402
27405
|
const usePublicCtx = Boolean(publicCtx && publicCtx !== "0" && q.channel === "priming");
|
|
27403
27406
|
const UUID_RE2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -27416,7 +27419,8 @@ var init_client = __esm({
|
|
|
27416
27419
|
nodes,
|
|
27417
27420
|
edges,
|
|
27418
27421
|
generatedAt: res.generatedAt,
|
|
27419
|
-
...res.voidSignal ? { voidSignal: res.voidSignal } : {}
|
|
27422
|
+
...res.voidSignal ? { voidSignal: res.voidSignal } : {},
|
|
27423
|
+
...res.seeds ? { seeds: res.seeds } : {}
|
|
27420
27424
|
};
|
|
27421
27425
|
}
|
|
27422
27426
|
/**
|
|
@@ -27561,6 +27565,15 @@ var init_client = __esm({
|
|
|
27561
27565
|
throw err2;
|
|
27562
27566
|
}
|
|
27563
27567
|
}
|
|
27568
|
+
/** One graph node's detail — label, full description, evidence counters,
|
|
27569
|
+
* §5.4 posterior and causal neighbours in both directions — via the
|
|
27570
|
+
* inspector read of `GET /v2/nodes` (keys on the graph node id, not the
|
|
27571
|
+
* canonicalId). Null when the node is absent or outside the caller's scope. */
|
|
27572
|
+
async getNode(nodeId) {
|
|
27573
|
+
const qs = new URLSearchParams({ ids: nodeId, withRelated: "true", limit: "1" });
|
|
27574
|
+
const res = await this.json("GET", `/v2/nodes?${qs.toString()}`);
|
|
27575
|
+
return res.rows.find((r) => r.id === nodeId) ?? null;
|
|
27576
|
+
}
|
|
27564
27577
|
async sendTelemetry(batch) {
|
|
27565
27578
|
return this.json("POST", "/v2/telemetry", batch);
|
|
27566
27579
|
}
|
|
@@ -34959,6 +34972,7 @@ function mergeDualBurst(local, cloud, opts = {}) {
|
|
|
34959
34972
|
provenance: corroborated ? "corroborated" : "local",
|
|
34960
34973
|
...twin?.usageCount != null ? { usageCount: twin.usageCount } : {},
|
|
34961
34974
|
...twin?.rel ? { rel: twin.rel } : {},
|
|
34975
|
+
...twin?.community ? { community: twin.community } : {},
|
|
34962
34976
|
why: l.components,
|
|
34963
34977
|
...l.via ? { via: l.via } : {}
|
|
34964
34978
|
});
|
|
@@ -34976,7 +34990,8 @@ function mergeDualBurst(local, cloud, opts = {}) {
|
|
|
34976
34990
|
// adapters surface 1-hop neighbors of the seed
|
|
34977
34991
|
provenance: "collective",
|
|
34978
34992
|
...c.usageCount != null ? { usageCount: c.usageCount } : {},
|
|
34979
|
-
...c.rel ? { rel: c.rel } : {}
|
|
34993
|
+
...c.rel ? { rel: c.rel } : {},
|
|
34994
|
+
...c.community ? { community: c.community } : {}
|
|
34980
34995
|
});
|
|
34981
34996
|
}
|
|
34982
34997
|
nodes.sort((a, b) => b.score - a.score);
|
|
@@ -35013,12 +35028,15 @@ function searchResultToCloudHits(result) {
|
|
|
35013
35028
|
const usage = node2.attrs?.["usageCount"];
|
|
35014
35029
|
const s = scores[i2];
|
|
35015
35030
|
const cloudScore = !Number.isNaN(s) && maxScore > 0 ? s / maxScore : n > 0 ? (n - i2) / n : 0;
|
|
35031
|
+
const communityId = node2.attrs?.["community"];
|
|
35032
|
+
const communityLabel = node2.attrs?.["communityLabel"];
|
|
35016
35033
|
return {
|
|
35017
35034
|
id: node2.id,
|
|
35018
35035
|
label: node2.label,
|
|
35019
35036
|
description: node2.description,
|
|
35020
35037
|
cloudScore,
|
|
35021
|
-
...typeof usage === "number" ? { usageCount: usage } : {}
|
|
35038
|
+
...typeof usage === "number" ? { usageCount: usage } : {},
|
|
35039
|
+
...typeof communityId === "number" ? { community: { id: communityId, label: typeof communityLabel === "string" ? communityLabel : null } } : {}
|
|
35022
35040
|
};
|
|
35023
35041
|
});
|
|
35024
35042
|
}
|
|
@@ -35065,7 +35083,7 @@ async function dualAugment(opts) {
|
|
|
35065
35083
|
}
|
|
35066
35084
|
if (hardIds.length > 0 || softQ) {
|
|
35067
35085
|
calls.push(
|
|
35068
|
-
cloud.search({ stack: [], domains: [], kinds: [], seed: hardIds, ...softQ ? { q: softQ } : {}, limit }).then((res) => {
|
|
35086
|
+
cloud.search({ stack: [], domains: [], kinds: [], seed: hardIds, ...softQ ? { q: softQ } : {}, limit, community: true }).then((res) => {
|
|
35069
35087
|
cloudHits.push(...searchResultToCloudHits(res));
|
|
35070
35088
|
})
|
|
35071
35089
|
);
|
|
@@ -35106,29 +35124,121 @@ function federationHint(status) {
|
|
|
35106
35124
|
function hasCloudNodeShape(id) {
|
|
35107
35125
|
return CANONICAL_KNOWLEDGE_ID.test(id) || UUID_ID.test(id) || id.startsWith("pkg:");
|
|
35108
35126
|
}
|
|
35109
|
-
|
|
35127
|
+
function attrsCommunity(attrs) {
|
|
35128
|
+
const id = attrs?.["community"];
|
|
35129
|
+
if (typeof id !== "number") return void 0;
|
|
35130
|
+
const label = attrs?.["communityLabel"];
|
|
35131
|
+
return { id, label: typeof label === "string" ? label : null };
|
|
35132
|
+
}
|
|
35133
|
+
function walkerCommunity(c) {
|
|
35134
|
+
return c ? { id: c.communityId, label: c.label } : null;
|
|
35135
|
+
}
|
|
35136
|
+
async function collectiveDrilldown(cloud, seedId, limit, opts = {}) {
|
|
35137
|
+
let res;
|
|
35110
35138
|
try {
|
|
35111
|
-
|
|
35112
|
-
|
|
35113
|
-
|
|
35114
|
-
|
|
35115
|
-
|
|
35116
|
-
|
|
35117
|
-
|
|
35118
|
-
|
|
35119
|
-
|
|
35120
|
-
|
|
35121
|
-
provenance: "collective"
|
|
35122
|
-
})),
|
|
35123
|
-
edges: res.edges.map((e) => ({ from: e.from, to: e.to, type: e.type }))
|
|
35124
|
-
};
|
|
35139
|
+
res = await cloud.search({
|
|
35140
|
+
stack: [],
|
|
35141
|
+
domains: [],
|
|
35142
|
+
kinds: [],
|
|
35143
|
+
seed: [seedId],
|
|
35144
|
+
limit,
|
|
35145
|
+
community: true,
|
|
35146
|
+
...opts.bridges ? { bridges: true } : {},
|
|
35147
|
+
...opts.scope ? { scope: opts.scope } : {}
|
|
35148
|
+
});
|
|
35125
35149
|
} catch (err2) {
|
|
35150
|
+
if (isQuotaError(err2)) {
|
|
35151
|
+
console.warn("[errata] collectiveDrilldown: collective read QUOTA EXCEEDED \u2014 the id's existence is unknown, not refuted.");
|
|
35152
|
+
return { status: "quota" };
|
|
35153
|
+
}
|
|
35126
35154
|
console.error(
|
|
35127
35155
|
"[errata] collectiveDrilldown: cloud fallback failed \u2014",
|
|
35128
35156
|
err2 instanceof Error ? err2.message : err2
|
|
35129
35157
|
);
|
|
35130
|
-
return
|
|
35158
|
+
return { status: "offline" };
|
|
35159
|
+
}
|
|
35160
|
+
const seedEntry = res.seeds?.find((s) => s.seed === seedId);
|
|
35161
|
+
const resolution = seedEntry?.status;
|
|
35162
|
+
if (resolution === "unresolved") return { status: "no-twin" };
|
|
35163
|
+
if (resolution === "error") return { status: "seed-error" };
|
|
35164
|
+
if (res.nodes.length === 0 && resolution !== "resolved") return { status: "no-twin" };
|
|
35165
|
+
return {
|
|
35166
|
+
status: "resolved",
|
|
35167
|
+
neighborhood: {
|
|
35168
|
+
seed: seedId,
|
|
35169
|
+
...seedEntry?.nodeId ? { nodeId: seedEntry.nodeId } : {},
|
|
35170
|
+
nodes: res.nodes.map((n) => {
|
|
35171
|
+
const score2 = n.attrs["score"];
|
|
35172
|
+
const uncertainty = n.attrs["uncertainty"];
|
|
35173
|
+
const community = attrsCommunity(n.attrs);
|
|
35174
|
+
return {
|
|
35175
|
+
id: n.id,
|
|
35176
|
+
label: n.label,
|
|
35177
|
+
name: n.description,
|
|
35178
|
+
...typeof score2 === "number" ? { score: Number(score2.toFixed(4)) } : {},
|
|
35179
|
+
...typeof uncertainty === "number" ? { uncertainty: Number(uncertainty.toFixed(4)) } : {},
|
|
35180
|
+
...community ? { community } : {},
|
|
35181
|
+
hops: 1,
|
|
35182
|
+
provenance: "collective"
|
|
35183
|
+
};
|
|
35184
|
+
}),
|
|
35185
|
+
edges: res.edges.map((e) => ({ from: e.from, to: e.to, type: e.type })),
|
|
35186
|
+
...seedEntry && "community" in seedEntry ? { seedCommunity: walkerCommunity(seedEntry.community) } : {},
|
|
35187
|
+
...seedEntry?.bridges ? { bridges: seedEntry.bridges } : {}
|
|
35188
|
+
}
|
|
35189
|
+
};
|
|
35190
|
+
}
|
|
35191
|
+
async function collectiveNodeDetail(cloud, id) {
|
|
35192
|
+
const read2 = async (nodeId) => {
|
|
35193
|
+
try {
|
|
35194
|
+
return await cloud.getNode(nodeId);
|
|
35195
|
+
} catch (err2) {
|
|
35196
|
+
if (isQuotaError(err2)) return "quota";
|
|
35197
|
+
console.error("[errata] collectiveNodeDetail: node read failed \u2014", err2 instanceof Error ? err2.message : err2);
|
|
35198
|
+
return "offline";
|
|
35199
|
+
}
|
|
35200
|
+
};
|
|
35201
|
+
let row = await read2(id);
|
|
35202
|
+
if (row === "quota" || row === "offline") return { status: row };
|
|
35203
|
+
if (!row) {
|
|
35204
|
+
const drill = await collectiveDrilldown(cloud, id, 1);
|
|
35205
|
+
if (drill.status !== "resolved") return drill;
|
|
35206
|
+
const nodeId = drill.neighborhood.nodeId;
|
|
35207
|
+
if (nodeId && nodeId !== id) {
|
|
35208
|
+
row = await read2(nodeId);
|
|
35209
|
+
if (row === "quota" || row === "offline") return { status: row };
|
|
35210
|
+
}
|
|
35211
|
+
if (!row) return { status: "found", node: null };
|
|
35131
35212
|
}
|
|
35213
|
+
return {
|
|
35214
|
+
status: "found",
|
|
35215
|
+
node: {
|
|
35216
|
+
id,
|
|
35217
|
+
nodeId: row.id,
|
|
35218
|
+
label: row.label,
|
|
35219
|
+
description: row.description,
|
|
35220
|
+
evidence: {
|
|
35221
|
+
validated: row.validated,
|
|
35222
|
+
acceptedCount: row.accepted,
|
|
35223
|
+
corroborationCount: row.corroborations,
|
|
35224
|
+
failureReportCount: row.refutes,
|
|
35225
|
+
effectivenessScore: row.effectivenessScore ?? null,
|
|
35226
|
+
uncertainty: row.uncertainty?.value ?? null,
|
|
35227
|
+
priorStrength: row.uncertainty?.priorStrength ?? null,
|
|
35228
|
+
trustTier: row.trustTier ?? null
|
|
35229
|
+
},
|
|
35230
|
+
memoryTier: row.memoryTier,
|
|
35231
|
+
reinforcementCount: row.reinforced,
|
|
35232
|
+
hits: row.hits,
|
|
35233
|
+
createdAtMs: row.createdAtMs,
|
|
35234
|
+
lastValidatedAtMs: row.lastValidatedAtMs,
|
|
35235
|
+
visibility: row.visibility,
|
|
35236
|
+
...row.community !== void 0 ? { community: walkerCommunity(row.community) } : {},
|
|
35237
|
+
resolvedBy: row.resolvedBy,
|
|
35238
|
+
causalChain: row.causalChain ?? [],
|
|
35239
|
+
related: row.related
|
|
35240
|
+
}
|
|
35241
|
+
};
|
|
35132
35242
|
}
|
|
35133
35243
|
function formatDualNodes(merged) {
|
|
35134
35244
|
return merged.nodes.map((n) => ({
|
|
@@ -35140,6 +35250,7 @@ function formatDualNodes(merged) {
|
|
|
35140
35250
|
provenance: n.provenance,
|
|
35141
35251
|
...n.usageCount != null ? { usageCount: n.usageCount } : {},
|
|
35142
35252
|
...n.rel ? { rel: n.rel } : {},
|
|
35253
|
+
...n.community ? { community: n.community } : {},
|
|
35143
35254
|
...n.why ? {
|
|
35144
35255
|
why: {
|
|
35145
35256
|
semantic: Number(n.why.semantic.toFixed(3)),
|
|
@@ -44414,11 +44525,37 @@ function cosine3(a, b) {
|
|
|
44414
44525
|
for (let i2 = 0; i2 < a.length; i2++) dot += a[i2] * b[i2];
|
|
44415
44526
|
return dot;
|
|
44416
44527
|
}
|
|
44417
|
-
async function collectiveSeedFallback(args2, ctx, defaultLimit) {
|
|
44528
|
+
async function collectiveSeedFallback(args2, ctx, defaultLimit, opts = {}) {
|
|
44418
44529
|
const seedId = typeof args2["nodeId"] === "string" ? args2["nodeId"] : null;
|
|
44419
44530
|
if (!seedId || !ctx.cloud || !hasCloudNodeShape(seedId)) return null;
|
|
44420
44531
|
const limit = Math.max(1, Math.min(100, Number(args2["limit"] ?? defaultLimit)));
|
|
44421
|
-
|
|
44532
|
+
const scope = args2["scope"];
|
|
44533
|
+
return collectiveDrilldown(ctx.cloud, seedId, limit, {
|
|
44534
|
+
...opts.allowScope && (scope === "community" || scope === "neighborhood" || scope === "global") ? { scope } : {},
|
|
44535
|
+
...opts.allowBridges && args2["bridges"] === true ? { bridges: true } : {}
|
|
44536
|
+
});
|
|
44537
|
+
}
|
|
44538
|
+
function collectiveCommunityFields(cn) {
|
|
44539
|
+
return {
|
|
44540
|
+
...cn.seedCommunity !== void 0 ? { seedCommunity: cn.seedCommunity } : {},
|
|
44541
|
+
...cn.bridges ? { bridges: cn.bridges } : {}
|
|
44542
|
+
};
|
|
44543
|
+
}
|
|
44544
|
+
function collectiveSeedStatus(cn) {
|
|
44545
|
+
return cn.nodes.length > 0 ? "cloud-seed" : "cloud-seed-empty";
|
|
44546
|
+
}
|
|
44547
|
+
function collectiveSeedMiss(args2, outcome) {
|
|
44548
|
+
if (!outcome || outcome.status === "no-twin" || outcome.status === "resolved") return unresolved(args2);
|
|
44549
|
+
const { query } = unresolved(args2);
|
|
44550
|
+
const hint = outcome.status === "seed-error" ? "collective reached, but this id's lookup failed server-side \u2014 its existence is unknown; retry" : federationHint(outcome.status);
|
|
44551
|
+
return {
|
|
44552
|
+
found: false,
|
|
44553
|
+
reason: "collective-unreachable",
|
|
44554
|
+
query,
|
|
44555
|
+
collectiveReachable: outcome.status === "seed-error",
|
|
44556
|
+
collectiveStatus: outcome.status === "seed-error" ? "cloud-seed-error" : outcome.status,
|
|
44557
|
+
...hint ? { collectiveHint: hint } : {}
|
|
44558
|
+
};
|
|
44422
44559
|
}
|
|
44423
44560
|
function resolveSymbol2(store, args2) {
|
|
44424
44561
|
const id = args2["nodeId"];
|
|
@@ -44770,23 +44907,25 @@ var init_mcp = __esm({
|
|
|
44770
44907
|
handler: async (args2, store, ctx) => {
|
|
44771
44908
|
const id = resolveSymbol2(store, args2);
|
|
44772
44909
|
if (!id) {
|
|
44773
|
-
const
|
|
44774
|
-
if (
|
|
44910
|
+
const cs = await collectiveSeedFallback(args2, ctx, 30);
|
|
44911
|
+
if (cs?.status === "resolved") {
|
|
44912
|
+
const cn = cs.neighborhood;
|
|
44775
44913
|
return {
|
|
44776
44914
|
found: true,
|
|
44777
44915
|
node: { id: cn.seed, provenance: "collective" },
|
|
44778
44916
|
collectiveReachable: true,
|
|
44779
|
-
collectiveStatus:
|
|
44917
|
+
collectiveStatus: collectiveSeedStatus(cn),
|
|
44780
44918
|
// Seed-touching edge types aren't on the wire (the server's seed
|
|
44781
44919
|
// burst excludes the seed itself, and edges to nodes outside the
|
|
44782
44920
|
// result set are dropped), so the collective fallback reports the
|
|
44783
44921
|
// 1-hop neighborhood + its internal topology instead of the local
|
|
44784
44922
|
// contract's typed out/in lists.
|
|
44785
44923
|
nearby: cn.nodes,
|
|
44786
|
-
edges: cn.edges
|
|
44924
|
+
edges: cn.edges,
|
|
44925
|
+
...collectiveCommunityFields(cn)
|
|
44787
44926
|
};
|
|
44788
44927
|
}
|
|
44789
|
-
return
|
|
44928
|
+
return collectiveSeedMiss(args2, cs);
|
|
44790
44929
|
}
|
|
44791
44930
|
const limit = Math.max(1, Math.min(200, Number(args2["limit"] ?? 30)));
|
|
44792
44931
|
const node2 = store.getNode(id);
|
|
@@ -44821,32 +44960,44 @@ var init_mcp = __esm({
|
|
|
44821
44960
|
},
|
|
44822
44961
|
{
|
|
44823
44962
|
name: "errata.burst",
|
|
44824
|
-
description: "Burst-grade local retrieval \u2014 the INTELLIGENT, seed-relative neighborhood (not a flat list). Given a SEED (`nodeId` or `qname`), expand its neighborhood and return the RELEVANT scored subset, ranked by burst-style relevance: semantic similarity to the seed \xD7 centrality \xD7 trust, hop-decayed; semantically-unrelated nodes are gated out. Prefer this over errata.neighbors when you want signal-ranked CONTEXT rather than raw edges. When the SEED is a package and the collective is reachable, results BLEND cross-project knowledge \u2014 each carries `provenance` (local | collective | corroborated) and `usageCount` (projects using it); `corroborated` means your graph and the collective agree (trust it most), `collective` is a cross-project prior to verify. Returns {seed, count, results:[{id,label,name,score,hops,provenance,usageCount?,why?,via?}]} \u2014 `via` is the TOPOLOGY: the edge that reached this result in the walk ({edgeType, parentId, forward}; forward: true \u21D2 parent \u2014edgeType\u2192 node), so you can tell 'FIXED_BY your seed' from 'two hops away via a shared package' and choose whether to dig down a causal chain or turn elsewhere.",
|
|
44963
|
+
description: "Burst-grade local retrieval \u2014 the INTELLIGENT, seed-relative neighborhood (not a flat list). Given a SEED (`nodeId` or `qname`), expand its neighborhood and return the RELEVANT scored subset, ranked by burst-style relevance: semantic similarity to the seed \xD7 centrality \xD7 trust, hop-decayed; semantically-unrelated nodes are gated out. Prefer this over errata.neighbors when you want signal-ranked CONTEXT rather than raw edges. When the SEED is a package and the collective is reachable, results BLEND cross-project knowledge \u2014 each carries `provenance` (local | collective | corroborated) and `usageCount` (projects using it); `corroborated` means your graph and the collective agree (trust it most), `collective` is a cross-project prior to verify. Returns {seed, count, results:[{id,label,name,score,hops,provenance,usageCount?,why?,via?}]} \u2014 `via` is the TOPOLOGY: the edge that reached this result in the walk ({edgeType, parentId, forward}; forward: true \u21D2 parent \u2014edgeType\u2192 node), so you can tell 'FIXED_BY your seed' from 'two hops away via a shared package' and choose whether to dig down a causal chain or turn elsewhere. A COLLECTIVE seed (a cloud id not in your graph) also reports `seedCommunity` {id,label} and each result's `community`; ids are tonight's partition (renumbered nightly \u2014 compare within one walk, never store). Pass `scope` to stay in / leave the seed's community and `bridges:true` for the bordering communities and their crossing edges.",
|
|
44825
44964
|
inputSchema: {
|
|
44826
44965
|
type: "object",
|
|
44827
44966
|
properties: {
|
|
44828
44967
|
nodeId: { type: "string" },
|
|
44829
44968
|
qname: { type: "string", description: "Symbol qname (resolved to a node)." },
|
|
44830
44969
|
maxHops: { type: "number", description: "Neighborhood radius (default 2)." },
|
|
44831
|
-
limit: { type: "number", description: "Max results (default 20)." }
|
|
44970
|
+
limit: { type: "number", description: "Max results (default 20)." },
|
|
44971
|
+
scope: {
|
|
44972
|
+
type: "string",
|
|
44973
|
+
enum: ["community", "neighborhood", "global"],
|
|
44974
|
+
description: "Collective seeds only: `community` keeps only the seed's community, `global` ranks cross-community neighbours on par; default `neighborhood`."
|
|
44975
|
+
},
|
|
44976
|
+
bridges: {
|
|
44977
|
+
type: "boolean",
|
|
44978
|
+
description: "Collective seeds only: also return `bridges` \u2014 the communities bordering the seed's, each with its strongest crossing edges (where to go next)."
|
|
44979
|
+
}
|
|
44832
44980
|
}
|
|
44833
44981
|
},
|
|
44834
44982
|
handler: async (args2, store, ctx) => {
|
|
44835
44983
|
const id = resolveSymbol2(store, args2);
|
|
44836
44984
|
if (!id) {
|
|
44837
|
-
const
|
|
44838
|
-
if (
|
|
44985
|
+
const cs = await collectiveSeedFallback(args2, ctx, 20, { allowScope: true, allowBridges: true });
|
|
44986
|
+
if (cs?.status === "resolved") {
|
|
44987
|
+
const cn = cs.neighborhood;
|
|
44839
44988
|
return {
|
|
44989
|
+
found: true,
|
|
44840
44990
|
seed: cn.seed,
|
|
44841
44991
|
seedProvenance: "collective",
|
|
44842
44992
|
collectiveReachable: true,
|
|
44843
|
-
collectiveStatus:
|
|
44993
|
+
collectiveStatus: collectiveSeedStatus(cn),
|
|
44844
44994
|
count: cn.nodes.length,
|
|
44845
44995
|
results: cn.nodes,
|
|
44846
|
-
edges: cn.edges
|
|
44996
|
+
edges: cn.edges,
|
|
44997
|
+
...collectiveCommunityFields(cn)
|
|
44847
44998
|
};
|
|
44848
44999
|
}
|
|
44849
|
-
return
|
|
45000
|
+
return collectiveSeedMiss(args2, cs);
|
|
44850
45001
|
}
|
|
44851
45002
|
const seedForBurst = store.getNode(id);
|
|
44852
45003
|
if (seedForBurst && seedForBurst.embedding.length === 0) {
|
|
@@ -45016,26 +45167,29 @@ var init_mcp = __esm({
|
|
|
45016
45167
|
handler: async (args2, store, ctx) => {
|
|
45017
45168
|
const id = resolveSymbol2(store, args2);
|
|
45018
45169
|
if (!id) {
|
|
45019
|
-
const
|
|
45020
|
-
if (
|
|
45170
|
+
const cs = await collectiveSeedFallback(args2, ctx, 30);
|
|
45171
|
+
if (cs?.status === "resolved") {
|
|
45172
|
+
const cn = cs.neighborhood;
|
|
45021
45173
|
return {
|
|
45022
45174
|
found: true,
|
|
45023
45175
|
seedId: cn.seed,
|
|
45024
45176
|
seedProvenance: "collective",
|
|
45025
45177
|
collectiveReachable: true,
|
|
45026
|
-
collectiveStatus:
|
|
45178
|
+
collectiveStatus: collectiveSeedStatus(cn),
|
|
45027
45179
|
nodes: cn.nodes.map((n) => ({
|
|
45028
45180
|
id: n.id,
|
|
45029
45181
|
label: n.label,
|
|
45030
45182
|
description: n.name,
|
|
45031
45183
|
hops: n.hops,
|
|
45032
45184
|
relevance: n.score,
|
|
45033
|
-
provenance: n.provenance
|
|
45185
|
+
provenance: n.provenance,
|
|
45186
|
+
...n.community ? { community: n.community } : {}
|
|
45034
45187
|
})),
|
|
45035
|
-
edges: cn.edges
|
|
45188
|
+
edges: cn.edges,
|
|
45189
|
+
...collectiveCommunityFields(cn)
|
|
45036
45190
|
};
|
|
45037
45191
|
}
|
|
45038
|
-
return
|
|
45192
|
+
return collectiveSeedMiss(args2, cs);
|
|
45039
45193
|
}
|
|
45040
45194
|
const maxHops = Math.max(1, Math.min(8, Number(args2["maxHops"] ?? 4)));
|
|
45041
45195
|
const limit = Math.max(1, Math.min(100, Number(args2["limit"] ?? 30)));
|
|
@@ -45399,7 +45553,7 @@ var init_mcp = __esm({
|
|
|
45399
45553
|
},
|
|
45400
45554
|
{
|
|
45401
45555
|
name: "errata.show",
|
|
45402
|
-
description: "Print the source code for a node. Uses bodyStartByte/endByte if the node has them (Function/Method/Class), else falls back to startByte/endByte (Const/Comment). File nodes return the whole file content. Returns {found, path, signature, calls (in source order), startLine, endLine, source}.",
|
|
45556
|
+
description: "Print the source code for a node. Uses bodyStartByte/endByte if the node has them (Function/Method/Class), else falls back to startByte/endByte (Const/Comment). File nodes return the whole file content. Returns {found, path, signature, calls (in source order), startLine, endLine, source}. A cloud id from search's collective blend (e.g. projn_\u2026, dprob_\u2026) that isn't in the local graph returns the collective node's own record instead: {found, provenance:'collective', node:{label, description, evidence:{validated, acceptedCount, corroborationCount, failureReportCount, effectivenessScore, uncertainty, priorStrength, trustTier}, causalChain, related (causal neighbours, both directions)}}.",
|
|
45403
45557
|
inputSchema: {
|
|
45404
45558
|
type: "object",
|
|
45405
45559
|
properties: {
|
|
@@ -45409,9 +45563,21 @@ var init_mcp = __esm({
|
|
|
45409
45563
|
maxLines: { type: "number" }
|
|
45410
45564
|
}
|
|
45411
45565
|
},
|
|
45412
|
-
handler: (args2, store) => {
|
|
45566
|
+
handler: async (args2, store, ctx) => {
|
|
45413
45567
|
const id = resolveSymbol2(store, args2);
|
|
45414
|
-
if (!id)
|
|
45568
|
+
if (!id) {
|
|
45569
|
+
const seedId = typeof args2["nodeId"] === "string" ? args2["nodeId"] : null;
|
|
45570
|
+
if (!seedId || !ctx.cloud || !hasCloudNodeShape(seedId)) return unresolved(args2);
|
|
45571
|
+
const shown = await collectiveNodeDetail(ctx.cloud, seedId);
|
|
45572
|
+
if (shown.status !== "found") return collectiveSeedMiss(args2, shown);
|
|
45573
|
+
return {
|
|
45574
|
+
found: true,
|
|
45575
|
+
provenance: "collective",
|
|
45576
|
+
collectiveReachable: true,
|
|
45577
|
+
collectiveStatus: shown.node ? "cloud-node" : "cloud-node-no-detail",
|
|
45578
|
+
...shown.node ? { node: shown.node } : { node: { id: seedId } }
|
|
45579
|
+
};
|
|
45580
|
+
}
|
|
45415
45581
|
const node2 = store.getNode(id);
|
|
45416
45582
|
if (!node2) return { found: false, reason: "not-found" };
|
|
45417
45583
|
const maxLines = Math.max(10, Math.min(2e3, Number(args2["maxLines"] ?? 200)));
|
|
@@ -83013,7 +83179,7 @@ function createWatchBreaker(deps) {
|
|
|
83013
83179
|
}
|
|
83014
83180
|
|
|
83015
83181
|
// src/engine.ts
|
|
83016
|
-
var DAEMON_VERSION = true ? "2.0.21-dev.
|
|
83182
|
+
var DAEMON_VERSION = true ? "2.0.21-dev.3904" : "2.0.0-alpha.0";
|
|
83017
83183
|
var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
|
|
83018
83184
|
var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
|
|
83019
83185
|
var GIT_OP_MUTE_MS = 4e3;
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
80437cb509261f3ab983d93240320f8ef99241c2b0709ccca75d3052035b27a7 .codex-plugin/plugin.json
|
|
2
2
|
a7bebae9fb01c838d6c75fc784129e28be571233fa66ff5ee8039b574f35ccf7 assets/icon.png
|
|
3
3
|
fc38b64e4df1e0b72c35764bef6c4c05430d97c9009ad0ecc8a9e75b4deab232 configure-local.mjs
|
|
4
4
|
73dc6028b3b070257c7c31f252d11e55a9e096f4aed0f187f10cb21716e1e6d7 dist/client.js
|