@mneme-ai/core 2.39.0 → 2.41.0
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/dist/agent_manifest.d.ts +1 -1
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +7 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/argus10/bloom_prefilter.d.ts +40 -0
- package/dist/argus10/bloom_prefilter.d.ts.map +1 -0
- package/dist/argus10/bloom_prefilter.js +95 -0
- package/dist/argus10/bloom_prefilter.js.map +1 -0
- package/dist/argus10/engine.d.ts +30 -0
- package/dist/argus10/engine.d.ts.map +1 -0
- package/dist/argus10/engine.js +139 -0
- package/dist/argus10/engine.js.map +1 -0
- package/dist/argus10/engine_multimodal.d.ts +34 -0
- package/dist/argus10/engine_multimodal.d.ts.map +1 -0
- package/dist/argus10/engine_multimodal.js +165 -0
- package/dist/argus10/engine_multimodal.js.map +1 -0
- package/dist/argus10/eyes_multimodal.d.ts +28 -0
- package/dist/argus10/eyes_multimodal.d.ts.map +1 -0
- package/dist/argus10/eyes_multimodal.js +162 -0
- package/dist/argus10/eyes_multimodal.js.map +1 -0
- package/dist/argus10/eyes_surface.d.ts +18 -0
- package/dist/argus10/eyes_surface.d.ts.map +1 -0
- package/dist/argus10/eyes_surface.js +251 -0
- package/dist/argus10/eyes_surface.js.map +1 -0
- package/dist/argus10/eyes_truth.d.ts +24 -0
- package/dist/argus10/eyes_truth.d.ts.map +1 -0
- package/dist/argus10/eyes_truth.js +254 -0
- package/dist/argus10/eyes_truth.js.map +1 -0
- package/dist/argus10/guardian.d.ts +35 -0
- package/dist/argus10/guardian.d.ts.map +1 -0
- package/dist/argus10/guardian.js +51 -0
- package/dist/argus10/guardian.js.map +1 -0
- package/dist/argus10/hydra.d.ts +45 -0
- package/dist/argus10/hydra.d.ts.map +1 -0
- package/dist/argus10/hydra.js +72 -0
- package/dist/argus10/hydra.js.map +1 -0
- package/dist/argus10/index.d.ts +25 -0
- package/dist/argus10/index.d.ts.map +1 -0
- package/dist/argus10/index.js +25 -0
- package/dist/argus10/index.js.map +1 -0
- package/dist/argus10/phantom_eye.d.ts +70 -0
- package/dist/argus10/phantom_eye.d.ts.map +1 -0
- package/dist/argus10/phantom_eye.js +105 -0
- package/dist/argus10/phantom_eye.js.map +1 -0
- package/dist/argus10/types.d.ts +128 -0
- package/dist/argus10/types.d.ts.map +1 -0
- package/dist/argus10/types.js +39 -0
- package/dist/argus10/types.js.map +1 -0
- package/dist/argus10/vendor_adapters.d.ts +42 -0
- package/dist/argus10/vendor_adapters.d.ts.map +1 -0
- package/dist/argus10/vendor_adapters.js +165 -0
- package/dist/argus10/vendor_adapters.js.map +1 -0
- package/dist/diaspora/http_bridge.d.ts +14 -0
- package/dist/diaspora/http_bridge.d.ts.map +1 -1
- package/dist/diaspora/http_bridge.js +22 -0
- package/dist/diaspora/http_bridge.js.map +1 -1
- package/dist/flywheel/controller.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/pulse.js +1 -1
- package/dist/pulse.js.map +1 -1
- package/dist/rewind/engine.js.map +1 -1
- package/dist/squadron/acgv.d.ts.map +1 -1
- package/dist/squadron/acgv.js +106 -3
- package/dist/squadron/acgv.js.map +1 -1
- package/dist/squadron/acgv_explain.d.ts.map +1 -1
- package/dist/squadron/acgv_explain.js +14 -0
- package/dist/squadron/acgv_explain.js.map +1 -1
- package/dist/squadron/acgv_input_hygiene.d.ts +63 -0
- package/dist/squadron/acgv_input_hygiene.d.ts.map +1 -0
- package/dist/squadron/acgv_input_hygiene.js +302 -0
- package/dist/squadron/acgv_input_hygiene.js.map +1 -0
- package/dist/squadron/acgv_number_bridge.d.ts +71 -0
- package/dist/squadron/acgv_number_bridge.d.ts.map +1 -0
- package/dist/squadron/acgv_number_bridge.js +524 -0
- package/dist/squadron/acgv_number_bridge.js.map +1 -0
- package/dist/squadron/vaccine_numeric_guard.d.ts +4 -0
- package/dist/squadron/vaccine_numeric_guard.d.ts.map +1 -1
- package/dist/squadron/vaccine_numeric_guard.js +32 -17
- package/dist/squadron/vaccine_numeric_guard.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +16 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +94 -4
- package/dist/truth_gate/probes.js.map +1 -1
- package/dist/zzzzz_probe/anti_entropy.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.40.0 — ARGUS-10 ENGINE: fusion formula + HMAC-signed result.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. Probe every eye → Guardian rebalances open ones via softmax
|
|
6
|
+
* 2. For each candidate: collect raw signals from every live eye
|
|
7
|
+
* 3. Fuse: score = Σ(weight × signal) × hydraBonus × recencyBoost × honestMirrorMultiplier
|
|
8
|
+
* 4. Sort + HMAC-sign the result frame (offline-verifiable)
|
|
9
|
+
*
|
|
10
|
+
* Fusion details:
|
|
11
|
+
* - Surface + truth eyes contribute via weighted sum (post-softmax weights)
|
|
12
|
+
* - HYDRA eyes contribute via the bonus multiplier only (not the sum)
|
|
13
|
+
* - recencyBoost = 1 + log10(1 + 1/recencyDays) ; clamped [1.0, 1.5]
|
|
14
|
+
* - honestMirrorMultiplier clamps to [0.5, 1.5] (penalty + reward)
|
|
15
|
+
*
|
|
16
|
+
* Why this fusion shape:
|
|
17
|
+
* - Eye sum keeps all signals comparable in [0, 1]
|
|
18
|
+
* - Multipliers move score by AT MOST 2.25× total — strong signal but
|
|
19
|
+
* bounded so a single eye can't overwhelm consensus
|
|
20
|
+
* - All multipliers are MULTIPLICATIVE (independent), not additive,
|
|
21
|
+
* so a vendor with TERRIBLE honest-mirror score can't be rescued by
|
|
22
|
+
* recency alone
|
|
23
|
+
*/
|
|
24
|
+
import { createHmac } from "node:crypto";
|
|
25
|
+
import { SURFACE_EYES } from "./eyes_surface.js";
|
|
26
|
+
import { TRUTH_EYES, honestMirrorMultiplier } from "./eyes_truth.js";
|
|
27
|
+
import { rebalanceEyeWeights } from "./guardian.js";
|
|
28
|
+
import { hydraBonus } from "./hydra.js";
|
|
29
|
+
const ARGUS_HMAC_KEY = process.env.MNEME_ARGUS_KEY ?? "MNEME-ARGUS-10-DEFAULT-KEY-v2.40";
|
|
30
|
+
export async function argusSearch(input) {
|
|
31
|
+
const t0 = Date.now();
|
|
32
|
+
const ctx = {
|
|
33
|
+
repoRoot: input.repoRoot,
|
|
34
|
+
embedder: input.embedder ?? null,
|
|
35
|
+
};
|
|
36
|
+
// Build the eye bundle (surface + truth + optional hydra).
|
|
37
|
+
const baseEyes = [...SURFACE_EYES, ...TRUTH_EYES];
|
|
38
|
+
const hydraEyes = input.hydraEyes ?? [];
|
|
39
|
+
const allEyes = [...baseEyes, ...hydraEyes];
|
|
40
|
+
// EYE_8 (embedder) needs special probe — if no embedder supplied, force CLOSED.
|
|
41
|
+
const probeOverride = new Map();
|
|
42
|
+
if (!input.embedder)
|
|
43
|
+
probeOverride.set("EYE_8_embedding_cosine", "CLOSED");
|
|
44
|
+
const reb = rebalanceEyeWeights(baseEyes, probeOverride);
|
|
45
|
+
const scored = [];
|
|
46
|
+
for (const cand of input.candidates) {
|
|
47
|
+
const breakdown = [];
|
|
48
|
+
let weightedSum = 0;
|
|
49
|
+
// 1) Run live base eyes
|
|
50
|
+
for (const e of reb.liveEyes) {
|
|
51
|
+
const w = reb.newWeights.get(e.id) ?? 0;
|
|
52
|
+
let raw = 0;
|
|
53
|
+
let reason = "";
|
|
54
|
+
try {
|
|
55
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
56
|
+
raw = Math.max(0, Math.min(1, r.raw));
|
|
57
|
+
reason = r.reason;
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
raw = 0;
|
|
61
|
+
reason = `eye error: ${err.message?.slice(0, 60) ?? "err"}`;
|
|
62
|
+
}
|
|
63
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: w, raw, reason });
|
|
64
|
+
weightedSum += w * raw;
|
|
65
|
+
}
|
|
66
|
+
// 2) Closed base eyes — surface them with raw=null
|
|
67
|
+
for (const id of reb.closedIds) {
|
|
68
|
+
const e = baseEyes.find((x) => x.id === id);
|
|
69
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: 0, raw: null, reason: "CLOSED — no probe / no dep" });
|
|
70
|
+
}
|
|
71
|
+
// 3) Run hydra eyes; count lit ones for bonus
|
|
72
|
+
let litHydra = 0;
|
|
73
|
+
for (const e of hydraEyes) {
|
|
74
|
+
let raw = 0;
|
|
75
|
+
let reason = "";
|
|
76
|
+
try {
|
|
77
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
78
|
+
raw = Math.max(0, Math.min(1, r.raw));
|
|
79
|
+
reason = r.reason;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
raw = 0;
|
|
83
|
+
reason = `hydra error: ${err.message?.slice(0, 60) ?? "err"}`;
|
|
84
|
+
}
|
|
85
|
+
if (raw >= 0.5)
|
|
86
|
+
litHydra += 1;
|
|
87
|
+
breakdown.push({ id: e.id, layer: "hydra", weight: 0, raw, reason });
|
|
88
|
+
}
|
|
89
|
+
// 4) Multipliers
|
|
90
|
+
const hb = hydraBonus(litHydra);
|
|
91
|
+
const days = Math.max(0.5, cand.meta?.recencyDays ?? 365);
|
|
92
|
+
const recencyBoost = Math.max(1.0, Math.min(1.5, 1 + Math.log10(1 + 1 / days)));
|
|
93
|
+
const hm = honestMirrorMultiplier(input.repoRoot, cand.meta?.vendor);
|
|
94
|
+
const honestM = Math.max(0.5, Math.min(1.5, hm));
|
|
95
|
+
const score = weightedSum * hb * recencyBoost * honestM;
|
|
96
|
+
scored.push({
|
|
97
|
+
candidate: cand,
|
|
98
|
+
score,
|
|
99
|
+
eyes: breakdown,
|
|
100
|
+
multipliers: { hydraBonus: hb, recencyBoost, honestMirrorMultiplier: honestM },
|
|
101
|
+
closedEyes: reb.closedIds,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// Sort + truncate
|
|
105
|
+
scored.sort((a, b) => b.score - a.score);
|
|
106
|
+
const topK = input.topK ?? scored.length;
|
|
107
|
+
const top = scored.slice(0, topK);
|
|
108
|
+
// HMAC-sign the result frame.
|
|
109
|
+
const canonical = JSON.stringify({
|
|
110
|
+
q: input.query,
|
|
111
|
+
cands: input.candidates.map((c) => c.text),
|
|
112
|
+
scores: top.map((s) => ({ t: s.candidate.text, score: Number(s.score.toFixed(6)) })),
|
|
113
|
+
});
|
|
114
|
+
const hmac = createHmac("sha256", ARGUS_HMAC_KEY).update(canonical).digest("hex").slice(0, 32);
|
|
115
|
+
return {
|
|
116
|
+
query: input.query,
|
|
117
|
+
scored: top,
|
|
118
|
+
health: {
|
|
119
|
+
total: baseEyes.length + hydraEyes.length,
|
|
120
|
+
open: reb.liveEyes.length + hydraEyes.length,
|
|
121
|
+
closed: reb.closedIds.length,
|
|
122
|
+
},
|
|
123
|
+
hmac,
|
|
124
|
+
durationMs: Date.now() - t0,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Verify an ArgusSearchResult by recomputing its HMAC over the input.
|
|
129
|
+
*/
|
|
130
|
+
export function verifyArgusResult(input, result) {
|
|
131
|
+
const canonical = JSON.stringify({
|
|
132
|
+
q: input.query,
|
|
133
|
+
cands: input.candidates.map((c) => c.text),
|
|
134
|
+
scores: result.scored.map((s) => ({ t: s.candidate.text, score: Number(s.score.toFixed(6)) })),
|
|
135
|
+
});
|
|
136
|
+
const expected = createHmac("sha256", ARGUS_HMAC_KEY).update(canonical).digest("hex").slice(0, 32);
|
|
137
|
+
return expected === result.hmac;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/argus10/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 multimodal engine.
|
|
3
|
+
*
|
|
4
|
+
* 1. BLOOM PRE-FILTER → cuts candidate set by ~90% on large corpora
|
|
5
|
+
* 2. PARALLEL EYE FAN-OUT → all candidates scored concurrently via
|
|
6
|
+
* Promise.all (engine.ts's loop was sequential)
|
|
7
|
+
* 3. PHANTOM EYE → expensive eyes only fire when cheap eyes
|
|
8
|
+
* leave verdict ambiguous (≥3× wall-time reduction on real workloads)
|
|
9
|
+
* 4. MULTIMODAL FUSION → text/image/code candidates ranked in ONE call
|
|
10
|
+
*
|
|
11
|
+
* Same HMAC-signed result shape as ArgusSearchResult so callers don't
|
|
12
|
+
* need to know which engine ran.
|
|
13
|
+
*/
|
|
14
|
+
import type { ArgusSearchInput, ArgusSearchResult } from "./types.js";
|
|
15
|
+
export interface ArgusMultimodalOptions {
|
|
16
|
+
/** Skip the bloom pre-filter (useful for tiny candidate sets / testing). */
|
|
17
|
+
skipBloom?: boolean;
|
|
18
|
+
/** Skip phantom-eye optimization (always run all eyes). */
|
|
19
|
+
skipPhantom?: boolean;
|
|
20
|
+
/** Include multimodal eyes (EYE_11 image + EYE_12 code). Default true. */
|
|
21
|
+
multimodal?: boolean;
|
|
22
|
+
/** Bloom keep threshold (default 0.05). */
|
|
23
|
+
bloomKeep?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ArgusMultimodalResult extends ArgusSearchResult {
|
|
26
|
+
/** Bloom pruning report. */
|
|
27
|
+
bloomPruned: number;
|
|
28
|
+
/** How many candidates were resolved via cheap eyes only (phantom). */
|
|
29
|
+
phantomCheapOnly: number;
|
|
30
|
+
/** Engine variant. */
|
|
31
|
+
engineVariant: "multimodal-v11";
|
|
32
|
+
}
|
|
33
|
+
export declare function argusSearchMultimodal(input: ArgusSearchInput, opts?: ArgusMultimodalOptions): Promise<ArgusMultimodalResult>;
|
|
34
|
+
//# sourceMappingURL=engine_multimodal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_multimodal.d.ts","sourceRoot":"","sources":["../../src/argus10/engine_multimodal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAAE,iBAAiB,EACpC,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,aAAa,EAAE,gBAAgB,CAAC;CACjC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAoJhC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 multimodal engine.
|
|
3
|
+
*
|
|
4
|
+
* 1. BLOOM PRE-FILTER → cuts candidate set by ~90% on large corpora
|
|
5
|
+
* 2. PARALLEL EYE FAN-OUT → all candidates scored concurrently via
|
|
6
|
+
* Promise.all (engine.ts's loop was sequential)
|
|
7
|
+
* 3. PHANTOM EYE → expensive eyes only fire when cheap eyes
|
|
8
|
+
* leave verdict ambiguous (≥3× wall-time reduction on real workloads)
|
|
9
|
+
* 4. MULTIMODAL FUSION → text/image/code candidates ranked in ONE call
|
|
10
|
+
*
|
|
11
|
+
* Same HMAC-signed result shape as ArgusSearchResult so callers don't
|
|
12
|
+
* need to know which engine ran.
|
|
13
|
+
*/
|
|
14
|
+
import { createHmac } from "node:crypto";
|
|
15
|
+
import { SURFACE_EYES } from "./eyes_surface.js";
|
|
16
|
+
import { TRUTH_EYES, honestMirrorMultiplier } from "./eyes_truth.js";
|
|
17
|
+
import { MULTIMODAL_EYES } from "./eyes_multimodal.js";
|
|
18
|
+
import { rebalanceEyeWeights } from "./guardian.js";
|
|
19
|
+
import { hydraBonus } from "./hydra.js";
|
|
20
|
+
import { prefilterCandidates } from "./bloom_prefilter.js";
|
|
21
|
+
import { phantomDecide, partitionEyes } from "./phantom_eye.js";
|
|
22
|
+
const ARGUS_HMAC_KEY = process.env["MNEME_ARGUS_KEY"] ?? "MNEME-ARGUS-10-DEFAULT-KEY-v2.40";
|
|
23
|
+
export async function argusSearchMultimodal(input, opts = {}) {
|
|
24
|
+
const t0 = Date.now();
|
|
25
|
+
const ctx = {
|
|
26
|
+
repoRoot: input.repoRoot,
|
|
27
|
+
embedder: input.embedder ?? null,
|
|
28
|
+
};
|
|
29
|
+
// ── Build the eye bundle ────────────────────────────────────────────
|
|
30
|
+
const multimodal = opts.multimodal ?? true;
|
|
31
|
+
const baseEyes = [
|
|
32
|
+
...SURFACE_EYES,
|
|
33
|
+
...TRUTH_EYES,
|
|
34
|
+
...(multimodal ? MULTIMODAL_EYES : []),
|
|
35
|
+
];
|
|
36
|
+
const hydraEyes = input.hydraEyes ?? [];
|
|
37
|
+
const allEyes = [...baseEyes, ...hydraEyes];
|
|
38
|
+
void allEyes;
|
|
39
|
+
// EYE_8 closes when no embedder.
|
|
40
|
+
const probeOverride = new Map();
|
|
41
|
+
if (!input.embedder)
|
|
42
|
+
probeOverride.set("EYE_8_embedding_cosine", "CLOSED");
|
|
43
|
+
const reb = rebalanceEyeWeights(baseEyes, probeOverride);
|
|
44
|
+
// ── BLOOM pre-filter ────────────────────────────────────────────────
|
|
45
|
+
const cands = input.candidates;
|
|
46
|
+
let workingCands = cands;
|
|
47
|
+
let workingIndices = cands.map((_, i) => i);
|
|
48
|
+
let bloomPruned = 0;
|
|
49
|
+
if (!opts.skipBloom && cands.length > 8) {
|
|
50
|
+
const r = prefilterCandidates(input.query, cands, opts.bloomKeep ?? 0.05);
|
|
51
|
+
workingCands = r.kept;
|
|
52
|
+
workingIndices = r.keptIndices;
|
|
53
|
+
bloomPruned = r.pruned;
|
|
54
|
+
}
|
|
55
|
+
// ── PHANTOM partition ───────────────────────────────────────────────
|
|
56
|
+
const { cheap: cheapEyes, expensive: expensiveEyes } = partitionEyes(reb.liveEyes);
|
|
57
|
+
// ── PARALLEL fan-out over candidates ────────────────────────────────
|
|
58
|
+
let phantomCheapOnly = 0;
|
|
59
|
+
const scored = await Promise.all(workingCands.map(async (cand) => {
|
|
60
|
+
const breakdown = [];
|
|
61
|
+
// 1. Cheap eyes — always run, in parallel
|
|
62
|
+
const cheapResults = await Promise.all(cheapEyes.map(async (e) => {
|
|
63
|
+
try {
|
|
64
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
65
|
+
return { id: e.id, layer: e.layer, raw: Math.max(0, Math.min(1, r.raw)), reason: r.reason, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `eye error: ${err.message?.slice(0, 60) ?? "err"}`, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
breakdown.push(...cheapResults);
|
|
72
|
+
// 2. PHANTOM decide
|
|
73
|
+
const cheapRaws = cheapResults.map((r) => r.raw);
|
|
74
|
+
const decision = opts.skipPhantom ? { cheapOnly: false, reason: "phantom skipped", cheapConfidence: 0 } : phantomDecide(cheapRaws);
|
|
75
|
+
if (decision.cheapOnly)
|
|
76
|
+
phantomCheapOnly++;
|
|
77
|
+
// 3. Expensive eyes — only fire when summoned
|
|
78
|
+
if (!decision.cheapOnly) {
|
|
79
|
+
const expensiveResults = await Promise.all(expensiveEyes.map(async (e) => {
|
|
80
|
+
try {
|
|
81
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
82
|
+
return { id: e.id, layer: e.layer, raw: Math.max(0, Math.min(1, r.raw)), reason: r.reason, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `eye error: ${err.message?.slice(0, 60) ?? "err"}`, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
breakdown.push(...expensiveResults);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Mark expensive eyes as PHANTOM-skipped so the report explains why.
|
|
92
|
+
for (const e of expensiveEyes) {
|
|
93
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: 0, raw: null, reason: `PHANTOM: ${decision.reason}` });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 4. Closed-eye breadcrumbs
|
|
97
|
+
for (const id of reb.closedIds) {
|
|
98
|
+
const e = baseEyes.find((x) => x.id === id);
|
|
99
|
+
if (!breakdown.find((b) => b.id === id)) {
|
|
100
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: 0, raw: null, reason: "CLOSED — no probe / no dep" });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// 5. HYDRA eyes (parallel)
|
|
104
|
+
let litHydra = 0;
|
|
105
|
+
const hydraResults = await Promise.all(hydraEyes.map(async (e) => {
|
|
106
|
+
try {
|
|
107
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
108
|
+
const raw = Math.max(0, Math.min(1, r.raw));
|
|
109
|
+
if (raw >= 0.5)
|
|
110
|
+
litHydra++;
|
|
111
|
+
return { id: e.id, layer: e.layer, raw, reason: r.reason, weight: 0 };
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `hydra error: ${err.message?.slice(0, 60) ?? "err"}`, weight: 0 };
|
|
115
|
+
}
|
|
116
|
+
}));
|
|
117
|
+
breakdown.push(...hydraResults);
|
|
118
|
+
// 6. Fusion (weighted sum + multipliers)
|
|
119
|
+
let weightedSum = 0;
|
|
120
|
+
for (const b of breakdown) {
|
|
121
|
+
if (b.raw !== null && b.weight > 0)
|
|
122
|
+
weightedSum += b.weight * b.raw;
|
|
123
|
+
}
|
|
124
|
+
const hb = hydraBonus(litHydra);
|
|
125
|
+
const days = Math.max(0.5, cand.meta?.recencyDays ?? 365);
|
|
126
|
+
const recencyBoost = Math.max(1.0, Math.min(1.5, 1 + Math.log10(1 + 1 / days)));
|
|
127
|
+
const hm = honestMirrorMultiplier(input.repoRoot, cand.meta?.vendor);
|
|
128
|
+
const honestM = Math.max(0.5, Math.min(1.5, hm));
|
|
129
|
+
const score = weightedSum * hb * recencyBoost * honestM;
|
|
130
|
+
return {
|
|
131
|
+
candidate: cand,
|
|
132
|
+
score,
|
|
133
|
+
eyes: breakdown,
|
|
134
|
+
multipliers: { hydraBonus: hb, recencyBoost, honestMirrorMultiplier: honestM },
|
|
135
|
+
closedEyes: reb.closedIds,
|
|
136
|
+
};
|
|
137
|
+
}));
|
|
138
|
+
// Sort + truncate
|
|
139
|
+
scored.sort((a, b) => b.score - a.score);
|
|
140
|
+
const topK = input.topK ?? scored.length;
|
|
141
|
+
const top = scored.slice(0, topK);
|
|
142
|
+
// HMAC frame — same canonical shape as v2.40 ARGUS-10.
|
|
143
|
+
const canonical = JSON.stringify({
|
|
144
|
+
q: input.query,
|
|
145
|
+
cands: input.candidates.map((c) => c.text),
|
|
146
|
+
scores: top.map((s) => ({ t: s.candidate.text, score: Number(s.score.toFixed(6)) })),
|
|
147
|
+
});
|
|
148
|
+
const hmac = createHmac("sha256", ARGUS_HMAC_KEY).update(canonical).digest("hex").slice(0, 32);
|
|
149
|
+
void workingIndices;
|
|
150
|
+
return {
|
|
151
|
+
query: input.query,
|
|
152
|
+
scored: top,
|
|
153
|
+
health: {
|
|
154
|
+
total: baseEyes.length + hydraEyes.length,
|
|
155
|
+
open: reb.liveEyes.length + hydraEyes.length,
|
|
156
|
+
closed: reb.closedIds.length,
|
|
157
|
+
},
|
|
158
|
+
hmac,
|
|
159
|
+
durationMs: Date.now() - t0,
|
|
160
|
+
bloomPruned,
|
|
161
|
+
phantomCheapOnly,
|
|
162
|
+
engineVariant: "multimodal-v11",
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=engine_multimodal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_multimodal.js","sourceRoot":"","sources":["../../src/argus10/engine_multimodal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 MULTIMODAL EYES (EYE_11, EYE_12).
|
|
3
|
+
*
|
|
4
|
+
* Extend ARGUS-10 (10 surface+truth eyes for text) into a true
|
|
5
|
+
* multimodal system. EYE_11 compares IMAGE bytes (any candidate.meta
|
|
6
|
+
* carrying `imageBytes` or `imagePath`) using the v2.39 Zzzzz-PROBE
|
|
7
|
+
* signals (perceptual hash + Laplacian variance + color-histogram
|
|
8
|
+
* entropy). EYE_12 compares CODE blobs via AST-shape + symbol-overlap
|
|
9
|
+
* (Mneme-unique: we use the existing codegraph normalizer when present;
|
|
10
|
+
* otherwise fall back to token n-gram on identifier-bearing lines).
|
|
11
|
+
*
|
|
12
|
+
* These eyes:
|
|
13
|
+
* - close gracefully when the candidate has no image/code metadata
|
|
14
|
+
* - never throw (any analyzer error → raw=0 with a reason)
|
|
15
|
+
* - are pure functions; no I/O beyond reading the bytes supplied
|
|
16
|
+
*
|
|
17
|
+
* Composability: callers attach modality info via Candidate.meta:
|
|
18
|
+
* meta: { imageBytes?: Uint8Array, codeText?: string, language?: string }
|
|
19
|
+
*/
|
|
20
|
+
import type { Eye } from "./types.js";
|
|
21
|
+
declare function popcount64(a: string, b: string): number;
|
|
22
|
+
export declare const EYE_11_image_modality: Eye;
|
|
23
|
+
declare function lexCode(s: string): Map<string, number>;
|
|
24
|
+
declare function diceMultiset(a: Map<string, number>, b: Map<string, number>): number;
|
|
25
|
+
export declare const EYE_12_code_modality: Eye;
|
|
26
|
+
export declare const MULTIMODAL_EYES: Eye[];
|
|
27
|
+
export { lexCode, diceMultiset, popcount64 };
|
|
28
|
+
//# sourceMappingURL=eyes_multimodal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes_multimodal.d.ts","sourceRoot":"","sources":["../../src/argus10/eyes_multimodal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAa,GAAG,EAAqB,MAAM,YAAY,CAAC;AAwBpE,iBAAS,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAShD;AAED,eAAO,MAAM,qBAAqB,EAAE,GAuCnC,CAAC;AAoBF,iBAAS,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB/C;AAED,iBAAS,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAY5E;AAED,eAAO,MAAM,oBAAoB,EAAE,GAiBlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,GAAG,EAGhC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 MULTIMODAL EYES (EYE_11, EYE_12).
|
|
3
|
+
*
|
|
4
|
+
* Extend ARGUS-10 (10 surface+truth eyes for text) into a true
|
|
5
|
+
* multimodal system. EYE_11 compares IMAGE bytes (any candidate.meta
|
|
6
|
+
* carrying `imageBytes` or `imagePath`) using the v2.39 Zzzzz-PROBE
|
|
7
|
+
* signals (perceptual hash + Laplacian variance + color-histogram
|
|
8
|
+
* entropy). EYE_12 compares CODE blobs via AST-shape + symbol-overlap
|
|
9
|
+
* (Mneme-unique: we use the existing codegraph normalizer when present;
|
|
10
|
+
* otherwise fall back to token n-gram on identifier-bearing lines).
|
|
11
|
+
*
|
|
12
|
+
* These eyes:
|
|
13
|
+
* - close gracefully when the candidate has no image/code metadata
|
|
14
|
+
* - never throw (any analyzer error → raw=0 with a reason)
|
|
15
|
+
* - are pure functions; no I/O beyond reading the bytes supplied
|
|
16
|
+
*
|
|
17
|
+
* Composability: callers attach modality info via Candidate.meta:
|
|
18
|
+
* meta: { imageBytes?: Uint8Array, codeText?: string, language?: string }
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
21
|
+
function getImageBytesFromMeta(meta) {
|
|
22
|
+
if (!meta)
|
|
23
|
+
return null;
|
|
24
|
+
if (meta.imageBytes instanceof Uint8Array)
|
|
25
|
+
return meta.imageBytes;
|
|
26
|
+
if (typeof meta.imagePath === "string" && existsSync(meta.imagePath)) {
|
|
27
|
+
try {
|
|
28
|
+
return new Uint8Array(readFileSync(meta.imagePath));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function popcount64(a, b) {
|
|
37
|
+
// Both expected hex of equal length (16 chars for 64-bit pHash).
|
|
38
|
+
if (a.length !== b.length)
|
|
39
|
+
return 64;
|
|
40
|
+
let dist = 0;
|
|
41
|
+
for (let i = 0; i < a.length; i++) {
|
|
42
|
+
const x = parseInt(a[i], 16) ^ parseInt(b[i], 16);
|
|
43
|
+
dist += [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4][x];
|
|
44
|
+
}
|
|
45
|
+
return dist;
|
|
46
|
+
}
|
|
47
|
+
export const EYE_11_image_modality = {
|
|
48
|
+
id: "EYE_HYDRA_image_modality",
|
|
49
|
+
layer: "truth",
|
|
50
|
+
weight: 0.08,
|
|
51
|
+
probe: () => "OPEN", // closes per-call when no image data
|
|
52
|
+
async signal(_q, c, _ctx) {
|
|
53
|
+
const qBytes = getImageBytesFromMeta(c.meta?.queryImageBytes ?? undefined);
|
|
54
|
+
const cBytes = getImageBytesFromMeta(c.meta);
|
|
55
|
+
if (!qBytes && !cBytes)
|
|
56
|
+
return { raw: 0, reason: "no image data on either side" };
|
|
57
|
+
if (!qBytes || !cBytes)
|
|
58
|
+
return { raw: 0, reason: "asymmetric image data" };
|
|
59
|
+
try {
|
|
60
|
+
const mod = (await import("../zzzzz_probe/image_provenance.js"));
|
|
61
|
+
const qa = mod.analyzeImage(qBytes);
|
|
62
|
+
const ca = mod.analyzeImage(cBytes);
|
|
63
|
+
// 1. Perceptual hash similarity (Hamming distance over 64 bits)
|
|
64
|
+
const dist = popcount64(qa.perceptualHash, ca.perceptualHash);
|
|
65
|
+
const phashSim = 1 - dist / 64;
|
|
66
|
+
// 2. Histogram entropy proximity
|
|
67
|
+
const entDelta = Math.abs(qa.colorHistogramEntropy - ca.colorHistogramEntropy);
|
|
68
|
+
const entSim = Math.max(0, 1 - entDelta / 9);
|
|
69
|
+
// 3. JPEG quant table match (when applicable)
|
|
70
|
+
let jpegSim = 0.5;
|
|
71
|
+
if (qa.jpegQuantFingerprint && ca.jpegQuantFingerprint) {
|
|
72
|
+
jpegSim = qa.jpegQuantFingerprint === ca.jpegQuantFingerprint ? 1.0 : 0.3;
|
|
73
|
+
}
|
|
74
|
+
const raw = phashSim * 0.6 + entSim * 0.25 + jpegSim * 0.15;
|
|
75
|
+
return { raw, reason: `pHash=${phashSim.toFixed(2)} ent=${entSim.toFixed(2)} jpeg=${jpegSim.toFixed(2)}` };
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
return { raw: 0, reason: `image-analysis failed: ${e.message?.slice(0, 60) ?? "err"}` };
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
// ─── EYE_12 — code-modality similarity ─────────────────────────────────
|
|
83
|
+
//
|
|
84
|
+
// Mneme-unique: we lex the query + candidate as code (extract identifiers,
|
|
85
|
+
// keywords, string literals), build a multiset, and Dice-coefficient them.
|
|
86
|
+
// For higher-quality matching we ALSO normalize: strip comments, collapse
|
|
87
|
+
// whitespace, hash literals into placeholders so renamed code still
|
|
88
|
+
// matches structurally.
|
|
89
|
+
const KEYWORDS = new Set([
|
|
90
|
+
// common subset across TS/JS/Python/Go/Rust/Java/C# — keep top by frequency
|
|
91
|
+
"function", "const", "let", "var", "if", "else", "for", "while", "return", "true",
|
|
92
|
+
"false", "null", "undefined", "this", "class", "import", "export", "from", "default",
|
|
93
|
+
"def", "lambda", "elif", "and", "or", "not", "is", "in", "as", "with", "try", "except",
|
|
94
|
+
"raise", "func", "package", "type", "struct", "interface", "go", "chan", "select",
|
|
95
|
+
"fn", "pub", "mut", "use", "mod", "impl", "trait", "where",
|
|
96
|
+
"public", "private", "protected", "static", "abstract", "final", "void", "int", "string", "bool",
|
|
97
|
+
]);
|
|
98
|
+
function lexCode(s) {
|
|
99
|
+
const out = new Map();
|
|
100
|
+
if (!s)
|
|
101
|
+
return out;
|
|
102
|
+
// Strip line comments and block comments (loose; works across //, #, /* */).
|
|
103
|
+
let t = s
|
|
104
|
+
.replace(/\/\*[\s\S]*?\*\//g, " ")
|
|
105
|
+
.replace(/(^|[^:])\/\/[^\n]*/g, "$1 ")
|
|
106
|
+
.replace(/(^|\s)#[^\n]*/g, "$1 ");
|
|
107
|
+
// Replace string literals with placeholder
|
|
108
|
+
t = t.replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`/g, "STR_LIT");
|
|
109
|
+
// Replace numeric literals
|
|
110
|
+
t = t.replace(/\b\d+(?:\.\d+)?\b/g, "NUM_LIT");
|
|
111
|
+
// Match identifiers + the placeholder tokens we inserted
|
|
112
|
+
for (const m of t.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)) {
|
|
113
|
+
const tok = m[0];
|
|
114
|
+
if (!tok || tok.length < 2)
|
|
115
|
+
continue;
|
|
116
|
+
const weight = KEYWORDS.has(tok) ? 1 : 2;
|
|
117
|
+
out.set(tok, (out.get(tok) ?? 0) + weight);
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
function diceMultiset(a, b) {
|
|
122
|
+
if (a.size === 0 || b.size === 0)
|
|
123
|
+
return 0;
|
|
124
|
+
let inter = 0;
|
|
125
|
+
let sumA = 0;
|
|
126
|
+
let sumB = 0;
|
|
127
|
+
for (const v of a.values())
|
|
128
|
+
sumA += v;
|
|
129
|
+
for (const v of b.values())
|
|
130
|
+
sumB += v;
|
|
131
|
+
for (const [k, va] of a) {
|
|
132
|
+
const vb = b.get(k);
|
|
133
|
+
if (vb !== undefined)
|
|
134
|
+
inter += Math.min(va, vb);
|
|
135
|
+
}
|
|
136
|
+
return (2 * inter) / (sumA + sumB);
|
|
137
|
+
}
|
|
138
|
+
export const EYE_12_code_modality = {
|
|
139
|
+
id: "EYE_HYDRA_code_modality",
|
|
140
|
+
layer: "truth",
|
|
141
|
+
weight: 0.08,
|
|
142
|
+
probe: () => "OPEN",
|
|
143
|
+
signal(q, c) {
|
|
144
|
+
const candMeta = c.meta;
|
|
145
|
+
const candCode = candMeta?.codeText ?? c.text;
|
|
146
|
+
// Heuristic: only fire when the candidate looks like code (has braces /
|
|
147
|
+
// semicolons / function keywords / indented blocks).
|
|
148
|
+
const looksLikeCode = /\b(function|const|let|class|def|fn|func|pub|return)\b|[{};]/.test(candCode);
|
|
149
|
+
if (!looksLikeCode)
|
|
150
|
+
return { raw: 0, reason: "candidate not code-shaped" };
|
|
151
|
+
const A = lexCode(q);
|
|
152
|
+
const B = lexCode(candCode);
|
|
153
|
+
const raw = diceMultiset(A, B);
|
|
154
|
+
return { raw, reason: `code-dice=${raw.toFixed(2)} (q:${A.size}, c:${B.size})` };
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
export const MULTIMODAL_EYES = [
|
|
158
|
+
EYE_11_image_modality,
|
|
159
|
+
EYE_12_code_modality,
|
|
160
|
+
];
|
|
161
|
+
export { lexCode, diceMultiset, popcount64 };
|
|
162
|
+
//# sourceMappingURL=eyes_multimodal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes_multimodal.js","sourceRoot":"","sources":["../../src/argus10/eyes_multimodal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.40.0 — ARGUS-10 SURFACE LAYER (EYE_1..EYE_5).
|
|
3
|
+
*
|
|
4
|
+
* Lexical / phonetic / shape signals. All pure functions, no I/O,
|
|
5
|
+
* always healthy (OPEN) — they can't be closed by environment.
|
|
6
|
+
*/
|
|
7
|
+
import type { Eye } from "./types.js";
|
|
8
|
+
declare function bigrams(s: string): Set<string>;
|
|
9
|
+
export declare const EYE_1_bigram_dice: Eye;
|
|
10
|
+
declare function damerauLevThai(a: string, b: string): number;
|
|
11
|
+
export declare const EYE_2_damerau_lev_thai: Eye;
|
|
12
|
+
declare function thaiMetaphone(s: string): string;
|
|
13
|
+
export declare const EYE_3_thai_metaphone: Eye;
|
|
14
|
+
export declare const EYE_4_length_ratio: Eye;
|
|
15
|
+
export declare const EYE_5_sliding_window: Eye;
|
|
16
|
+
export declare const SURFACE_EYES: Eye[];
|
|
17
|
+
export { bigrams, damerauLevThai, thaiMetaphone };
|
|
18
|
+
//# sourceMappingURL=eyes_surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes_surface.d.ts","sourceRoot":"","sources":["../../src/argus10/eyes_surface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAa,GAAG,EAAa,MAAM,YAAY,CAAC;AAQ5D,iBAAS,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAavC;AAED,eAAO,MAAM,iBAAiB,EAAE,GAc/B,CAAC;AA2CF,iBAAS,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBpD;AAED,eAAO,MAAM,sBAAsB,EAAE,GAYpC,CAAC;AAmBF,iBAAS,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BxC;AAED,eAAO,MAAM,oBAAoB,EAAE,GAgBlC,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,GAYhC,CAAC;AAQF,eAAO,MAAM,oBAAoB,EAAE,GAsBlC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,GAAG,EAM7B,CAAC;AAGF,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
|