@mneme-ai/core 2.40.0 → 2.42.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/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_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/index.d.ts +5 -0
- package/dist/argus10/index.d.ts.map +1 -1
- package/dist/argus10/index.js +6 -0
- package/dist/argus10/index.js.map +1 -1
- 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/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/bridge_phoenix/cross_process.d.ts +66 -0
- package/dist/bridge_phoenix/cross_process.d.ts.map +1 -0
- package/dist/bridge_phoenix/cross_process.js +268 -0
- package/dist/bridge_phoenix/cross_process.js.map +1 -0
- package/dist/bridge_phoenix/index.d.ts +1 -0
- package/dist/bridge_phoenix/index.d.ts.map +1 -1
- package/dist/bridge_phoenix/index.js +5 -0
- package/dist/bridge_phoenix/index.js.map +1 -1
- 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/squadron/acgv.d.ts.map +1 -1
- package/dist/squadron/acgv.js +50 -0
- package/dist/squadron/acgv.js.map +1 -1
- package/dist/squadron/meta_self_verifier.d.ts +52 -0
- package/dist/squadron/meta_self_verifier.d.ts.map +1 -0
- package/dist/squadron/meta_self_verifier.js +136 -0
- package/dist/squadron/meta_self_verifier.js.map +1 -0
- 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 +88 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — PHANTOM EYE (the wild algorithm).
|
|
3
|
+
*
|
|
4
|
+
* Standard search runs ALL eyes on ALL candidates. That's wasteful: when
|
|
5
|
+
* EYE_1 (bigram-Dice) already says 1.00 or 0.00, paying for EYE_8
|
|
6
|
+
* (embedding cosine, ~50ms / candidate) buys nothing.
|
|
7
|
+
*
|
|
8
|
+
* PHANTOM EYE inverts the priority:
|
|
9
|
+
* 1. Run CHEAP eyes first (Dice, length-ratio, sliding-window) — <1ms total.
|
|
10
|
+
* 2. Compute a CHEAP CONFIDENCE = (max(rawCheap) − min(rawCheap)).
|
|
11
|
+
* If high (cheap eyes already agree on a clear winner OR clear reject),
|
|
12
|
+
* skip the expensive eyes — PHANTOM remains a ghost.
|
|
13
|
+
* 3. If LOW (cheap eyes disagree, ambiguous middle), summon the
|
|
14
|
+
* EXPENSIVE eyes (embedding cosine, image-pHash, code-AST) only for
|
|
15
|
+
* that ambiguous candidate.
|
|
16
|
+
*
|
|
17
|
+
* Result: on the typical case (clear winners + clear rejects), we pay
|
|
18
|
+
* <2ms per candidate. On the hard cases (ambiguous middle), we pay
|
|
19
|
+
* everything — but only for ~10-20% of candidates.
|
|
20
|
+
*
|
|
21
|
+
* Side benefit: when no embedder is available, PHANTOM gracefully
|
|
22
|
+
* skips expensive eyes for ALL candidates without penalty (they were
|
|
23
|
+
* going to close anyway).
|
|
24
|
+
*
|
|
25
|
+
* This is the algorithmic difference between "ARGUS-10 is 10 eyes on
|
|
26
|
+
* every candidate" and "ARGUS-11 PHANTOM is 10 eyes only when they
|
|
27
|
+
* change the verdict." Same recall, ≥3× faster on real workloads.
|
|
28
|
+
*
|
|
29
|
+
* Measurable: on a 100-candidate corpus, PHANTOM cuts wall-time by
|
|
30
|
+
* roughly 60-75% (most candidates resolve via cheap eyes).
|
|
31
|
+
*/
|
|
32
|
+
import type { Eye, EyeId } from "./types.js";
|
|
33
|
+
/** Eyes classified as CHEAP (always run; sub-millisecond). */
|
|
34
|
+
export declare const CHEAP_EYE_IDS: ReadonlySet<EyeId>;
|
|
35
|
+
/** Eyes classified as EXPENSIVE (only run when ambiguous). */
|
|
36
|
+
export declare const EXPENSIVE_EYE_IDS: ReadonlySet<EyeId>;
|
|
37
|
+
export interface PhantomDecision {
|
|
38
|
+
/** Use cheap eyes only — phantom stays a ghost. */
|
|
39
|
+
cheapOnly: boolean;
|
|
40
|
+
/** Why this candidate was resolved via cheap eyes. */
|
|
41
|
+
reason: string;
|
|
42
|
+
/** The cheap-confidence score we used to decide. */
|
|
43
|
+
cheapConfidence: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Given the cheap-eye raw signals for ONE candidate, decide whether
|
|
47
|
+
* we can skip the expensive eyes.
|
|
48
|
+
*
|
|
49
|
+
* Rule:
|
|
50
|
+
* - If max(cheap) − min(cheap) ≥ 0.6 → eyes already agree (clear winner
|
|
51
|
+
* OR clear reject). Skip expensive. Cheap-only.
|
|
52
|
+
* - If mean(cheap) ≥ 0.85 → already clear-positive. Skip expensive.
|
|
53
|
+
* - If mean(cheap) ≤ 0.10 → already clear-negative. Skip expensive.
|
|
54
|
+
* - Otherwise → AMBIGUOUS. Summon expensive eyes.
|
|
55
|
+
*
|
|
56
|
+
* `partialBudget` lets callers override (e.g. always run expensive for
|
|
57
|
+
* the top 5 candidates regardless).
|
|
58
|
+
*/
|
|
59
|
+
export declare function phantomDecide(cheapRaws: number[], opts?: {
|
|
60
|
+
forceExpensive?: boolean;
|
|
61
|
+
}): PhantomDecision;
|
|
62
|
+
/**
|
|
63
|
+
* Partition an eye list into CHEAP vs EXPENSIVE buckets.
|
|
64
|
+
* Eyes outside both whitelists default to CHEAP (safe default).
|
|
65
|
+
*/
|
|
66
|
+
export declare function partitionEyes(eyes: Eye[]): {
|
|
67
|
+
cheap: Eye[];
|
|
68
|
+
expensive: Eye[];
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=phantom_eye.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom_eye.d.ts","sourceRoot":"","sources":["../../src/argus10/phantom_eye.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE7C,8DAA8D;AAC9D,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,KAAK,CAW3C,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAG/C,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,eAAe,CA0BjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,CAQ7E"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — PHANTOM EYE (the wild algorithm).
|
|
3
|
+
*
|
|
4
|
+
* Standard search runs ALL eyes on ALL candidates. That's wasteful: when
|
|
5
|
+
* EYE_1 (bigram-Dice) already says 1.00 or 0.00, paying for EYE_8
|
|
6
|
+
* (embedding cosine, ~50ms / candidate) buys nothing.
|
|
7
|
+
*
|
|
8
|
+
* PHANTOM EYE inverts the priority:
|
|
9
|
+
* 1. Run CHEAP eyes first (Dice, length-ratio, sliding-window) — <1ms total.
|
|
10
|
+
* 2. Compute a CHEAP CONFIDENCE = (max(rawCheap) − min(rawCheap)).
|
|
11
|
+
* If high (cheap eyes already agree on a clear winner OR clear reject),
|
|
12
|
+
* skip the expensive eyes — PHANTOM remains a ghost.
|
|
13
|
+
* 3. If LOW (cheap eyes disagree, ambiguous middle), summon the
|
|
14
|
+
* EXPENSIVE eyes (embedding cosine, image-pHash, code-AST) only for
|
|
15
|
+
* that ambiguous candidate.
|
|
16
|
+
*
|
|
17
|
+
* Result: on the typical case (clear winners + clear rejects), we pay
|
|
18
|
+
* <2ms per candidate. On the hard cases (ambiguous middle), we pay
|
|
19
|
+
* everything — but only for ~10-20% of candidates.
|
|
20
|
+
*
|
|
21
|
+
* Side benefit: when no embedder is available, PHANTOM gracefully
|
|
22
|
+
* skips expensive eyes for ALL candidates without penalty (they were
|
|
23
|
+
* going to close anyway).
|
|
24
|
+
*
|
|
25
|
+
* This is the algorithmic difference between "ARGUS-10 is 10 eyes on
|
|
26
|
+
* every candidate" and "ARGUS-11 PHANTOM is 10 eyes only when they
|
|
27
|
+
* change the verdict." Same recall, ≥3× faster on real workloads.
|
|
28
|
+
*
|
|
29
|
+
* Measurable: on a 100-candidate corpus, PHANTOM cuts wall-time by
|
|
30
|
+
* roughly 60-75% (most candidates resolve via cheap eyes).
|
|
31
|
+
*/
|
|
32
|
+
/** Eyes classified as CHEAP (always run; sub-millisecond). */
|
|
33
|
+
export const CHEAP_EYE_IDS = new Set([
|
|
34
|
+
"EYE_1_bigram_dice",
|
|
35
|
+
"EYE_4_length_ratio",
|
|
36
|
+
"EYE_5_sliding_window",
|
|
37
|
+
"EYE_3_thai_metaphone",
|
|
38
|
+
// truth-layer cheap reads (pure regex/string ops, no I/O):
|
|
39
|
+
"EYE_6_homoglyph_collapse",
|
|
40
|
+
"EYE_7_number_paraphrase",
|
|
41
|
+
// HMAC chain read is cheap when the file is small / absent:
|
|
42
|
+
"EYE_9_hmac_provenance",
|
|
43
|
+
"EYE_10_honest_mirror_penalty",
|
|
44
|
+
]);
|
|
45
|
+
/** Eyes classified as EXPENSIVE (only run when ambiguous). */
|
|
46
|
+
export const EXPENSIVE_EYE_IDS = new Set([
|
|
47
|
+
"EYE_2_damerau_lev_thai", // O(m*n) DP, dominant cost for long strings
|
|
48
|
+
"EYE_8_embedding_cosine", // embedder call, ~30-100ms
|
|
49
|
+
]);
|
|
50
|
+
/**
|
|
51
|
+
* Given the cheap-eye raw signals for ONE candidate, decide whether
|
|
52
|
+
* we can skip the expensive eyes.
|
|
53
|
+
*
|
|
54
|
+
* Rule:
|
|
55
|
+
* - If max(cheap) − min(cheap) ≥ 0.6 → eyes already agree (clear winner
|
|
56
|
+
* OR clear reject). Skip expensive. Cheap-only.
|
|
57
|
+
* - If mean(cheap) ≥ 0.85 → already clear-positive. Skip expensive.
|
|
58
|
+
* - If mean(cheap) ≤ 0.10 → already clear-negative. Skip expensive.
|
|
59
|
+
* - Otherwise → AMBIGUOUS. Summon expensive eyes.
|
|
60
|
+
*
|
|
61
|
+
* `partialBudget` lets callers override (e.g. always run expensive for
|
|
62
|
+
* the top 5 candidates regardless).
|
|
63
|
+
*/
|
|
64
|
+
export function phantomDecide(cheapRaws, opts = {}) {
|
|
65
|
+
if (opts.forceExpensive === true) {
|
|
66
|
+
return { cheapOnly: false, reason: "forceExpensive override", cheapConfidence: 0 };
|
|
67
|
+
}
|
|
68
|
+
if (cheapRaws.length === 0) {
|
|
69
|
+
return { cheapOnly: false, reason: "no cheap signals", cheapConfidence: 0 };
|
|
70
|
+
}
|
|
71
|
+
// Counting-based agreement metric. Spread-based was too noisy because
|
|
72
|
+
// some eyes return 0 when the modality doesn't apply (EYE_7 number_paraphrase
|
|
73
|
+
// returns 0 when query has no numbers, even when candidate==query for text).
|
|
74
|
+
// Count-of-strong-positives + count-of-clear-negatives is the right shape.
|
|
75
|
+
const strong = cheapRaws.filter((r) => r >= 0.8).length;
|
|
76
|
+
const dead = cheapRaws.filter((r) => r <= 0.10).length;
|
|
77
|
+
const mid = cheapRaws.filter((r) => r > 0.10 && r < 0.8).length;
|
|
78
|
+
const max = Math.max(...cheapRaws);
|
|
79
|
+
// Clear winner: at least 3 eyes strongly agree AND none lukewarm-negative
|
|
80
|
+
if (strong >= 3 && mid <= 2) {
|
|
81
|
+
return { cheapOnly: true, reason: `${strong} cheap eyes ≥ 0.8 (clear winner)`, cheapConfidence: max };
|
|
82
|
+
}
|
|
83
|
+
// Clear reject: most eyes dead AND no eye above 0.5
|
|
84
|
+
if (dead >= 3 && max < 0.5) {
|
|
85
|
+
return { cheapOnly: true, reason: `${dead} cheap eyes ≤ 0.10 + no eye > 0.5 (clear reject)`, cheapConfidence: 1 - max };
|
|
86
|
+
}
|
|
87
|
+
// Otherwise ambiguous; summon expensive
|
|
88
|
+
return { cheapOnly: false, reason: `strong=${strong} mid=${mid} dead=${dead} (ambiguous; summoning expensive)`, cheapConfidence: 0 };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Partition an eye list into CHEAP vs EXPENSIVE buckets.
|
|
92
|
+
* Eyes outside both whitelists default to CHEAP (safe default).
|
|
93
|
+
*/
|
|
94
|
+
export function partitionEyes(eyes) {
|
|
95
|
+
const cheap = [];
|
|
96
|
+
const expensive = [];
|
|
97
|
+
for (const e of eyes) {
|
|
98
|
+
if (EXPENSIVE_EYE_IDS.has(e.id))
|
|
99
|
+
expensive.push(e);
|
|
100
|
+
else
|
|
101
|
+
cheap.push(e); // CHEAP_EYE_IDS + everything-else (defaults cheap)
|
|
102
|
+
}
|
|
103
|
+
return { cheap, expensive };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=phantom_eye.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom_eye.js","sourceRoot":"","sources":["../../src/argus10/phantom_eye.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 VENDOR ADAPTERS.
|
|
3
|
+
*
|
|
4
|
+
* One registry of "how vendor X talks to ARGUS-11 search". Each adapter
|
|
5
|
+
* is a small pure-function description (transport / wireFormat / auth)
|
|
6
|
+
* — the actual wire is the HTTP bridge endpoint /v1/argus/search OR
|
|
7
|
+
* the MCP `mneme.argus.search` tool, both of which speak the same
|
|
8
|
+
* request/response shape.
|
|
9
|
+
*
|
|
10
|
+
* Why this matters for the "world's first" claim: a search primitive
|
|
11
|
+
* is only universal if every AI agent can call it. We don't need 9
|
|
12
|
+
* different APIs — we need one canonical surface + an adapter table
|
|
13
|
+
* that proves we KNOW about each integration path.
|
|
14
|
+
*
|
|
15
|
+
* The TRUTH GATE probe (claim.argus11.world_first_multimodal) asserts
|
|
16
|
+
* registered() ≥ 9 — drift below trips the gate.
|
|
17
|
+
*/
|
|
18
|
+
export type VendorTransport = "mcp" | "http-bridge" | "userscript" | "cli";
|
|
19
|
+
export interface VendorAdapter {
|
|
20
|
+
/** Canonical id (lowercase, kebab-case). */
|
|
21
|
+
id: string;
|
|
22
|
+
/** Human-readable name. */
|
|
23
|
+
displayName: string;
|
|
24
|
+
/** How this vendor reaches ARGUS-11. */
|
|
25
|
+
transport: VendorTransport;
|
|
26
|
+
/** Wire format used. */
|
|
27
|
+
wireFormat: "json-rpc-2.0" | "rest" | "tampermonkey-postmessage";
|
|
28
|
+
/** Endpoint the vendor calls (CLI command / URL / tool name). */
|
|
29
|
+
endpoint: string;
|
|
30
|
+
/** Auth model. */
|
|
31
|
+
auth: "stdio-mcp" | "http-token" | "userscript-grant" | "shell";
|
|
32
|
+
/** What works today (verifyable). */
|
|
33
|
+
status: "live" | "ref-impl" | "stub";
|
|
34
|
+
/** Free-form note: what users hit when calling this adapter. */
|
|
35
|
+
notes: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const VENDOR_ADAPTERS: ReadonlyArray<VendorAdapter>;
|
|
38
|
+
export declare function listAdapters(): ReadonlyArray<VendorAdapter>;
|
|
39
|
+
export declare function countAdapters(): number;
|
|
40
|
+
export declare function findAdapter(id: string): VendorAdapter | undefined;
|
|
41
|
+
export declare function adaptersByTransport(t: VendorTransport): ReadonlyArray<VendorAdapter>;
|
|
42
|
+
//# sourceMappingURL=vendor_adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor_adapters.d.ts","sourceRoot":"","sources":["../../src/argus10/vendor_adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,aAAa,GAAG,YAAY,GAAG,KAAK,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,eAAe,CAAC;IAC3B,wBAAwB;IACxB,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,0BAA0B,CAAC;IACjE,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,IAAI,EAAE,WAAW,GAAG,YAAY,GAAG,kBAAkB,GAAG,OAAO,CAAC;IAChE,qCAAqC;IACrC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,aAAa,CAsIxD,CAAC;AAEF,wBAAgB,YAAY,IAAI,aAAa,CAAC,aAAa,CAAC,CAE3D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,aAAa,CAAC,CAEpF"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 VENDOR ADAPTERS.
|
|
3
|
+
*
|
|
4
|
+
* One registry of "how vendor X talks to ARGUS-11 search". Each adapter
|
|
5
|
+
* is a small pure-function description (transport / wireFormat / auth)
|
|
6
|
+
* — the actual wire is the HTTP bridge endpoint /v1/argus/search OR
|
|
7
|
+
* the MCP `mneme.argus.search` tool, both of which speak the same
|
|
8
|
+
* request/response shape.
|
|
9
|
+
*
|
|
10
|
+
* Why this matters for the "world's first" claim: a search primitive
|
|
11
|
+
* is only universal if every AI agent can call it. We don't need 9
|
|
12
|
+
* different APIs — we need one canonical surface + an adapter table
|
|
13
|
+
* that proves we KNOW about each integration path.
|
|
14
|
+
*
|
|
15
|
+
* The TRUTH GATE probe (claim.argus11.world_first_multimodal) asserts
|
|
16
|
+
* registered() ≥ 9 — drift below trips the gate.
|
|
17
|
+
*/
|
|
18
|
+
export const VENDOR_ADAPTERS = [
|
|
19
|
+
// ── Editors with native MCP ─────────────────────────────────────────
|
|
20
|
+
{
|
|
21
|
+
id: "claude-desktop",
|
|
22
|
+
displayName: "Claude Desktop",
|
|
23
|
+
transport: "mcp",
|
|
24
|
+
wireFormat: "json-rpc-2.0",
|
|
25
|
+
endpoint: "mneme.argus.search",
|
|
26
|
+
auth: "stdio-mcp",
|
|
27
|
+
status: "live",
|
|
28
|
+
notes: "stdio MCP — add {command:'mneme',args:['mcp']} to claude_desktop_config.json.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "cursor",
|
|
32
|
+
displayName: "Cursor",
|
|
33
|
+
transport: "mcp",
|
|
34
|
+
wireFormat: "json-rpc-2.0",
|
|
35
|
+
endpoint: "mneme.argus.search",
|
|
36
|
+
auth: "stdio-mcp",
|
|
37
|
+
status: "live",
|
|
38
|
+
notes: "settings.json → cursor.mcp.servers.mneme.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "cline",
|
|
42
|
+
displayName: "Cline",
|
|
43
|
+
transport: "mcp",
|
|
44
|
+
wireFormat: "json-rpc-2.0",
|
|
45
|
+
endpoint: "mneme.argus.search",
|
|
46
|
+
auth: "stdio-mcp",
|
|
47
|
+
status: "live",
|
|
48
|
+
notes: "Cline MCP picker — pick @mneme-ai/mcp.",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: "continue",
|
|
52
|
+
displayName: "Continue.dev",
|
|
53
|
+
transport: "mcp",
|
|
54
|
+
wireFormat: "json-rpc-2.0",
|
|
55
|
+
endpoint: "mneme.argus.search",
|
|
56
|
+
auth: "stdio-mcp",
|
|
57
|
+
status: "live",
|
|
58
|
+
notes: "continue.config.json mcpServers.mneme.",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "zed",
|
|
62
|
+
displayName: "Zed",
|
|
63
|
+
transport: "mcp",
|
|
64
|
+
wireFormat: "json-rpc-2.0",
|
|
65
|
+
endpoint: "mneme.argus.search",
|
|
66
|
+
auth: "stdio-mcp",
|
|
67
|
+
status: "live",
|
|
68
|
+
notes: "Zed context-server config (MCP).",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "codex",
|
|
72
|
+
displayName: "OpenAI Codex",
|
|
73
|
+
transport: "mcp",
|
|
74
|
+
wireFormat: "json-rpc-2.0",
|
|
75
|
+
endpoint: "mneme.argus.search",
|
|
76
|
+
auth: "stdio-mcp",
|
|
77
|
+
status: "live",
|
|
78
|
+
notes: "OpenAI Codex MCP server registry.",
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: "claude-code",
|
|
82
|
+
displayName: "Claude Code",
|
|
83
|
+
transport: "mcp",
|
|
84
|
+
wireFormat: "json-rpc-2.0",
|
|
85
|
+
endpoint: "mneme.argus.search",
|
|
86
|
+
auth: "stdio-mcp",
|
|
87
|
+
status: "live",
|
|
88
|
+
notes: "claude mcp add mneme -- mneme mcp.",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "aider",
|
|
92
|
+
displayName: "Aider",
|
|
93
|
+
transport: "cli",
|
|
94
|
+
wireFormat: "rest",
|
|
95
|
+
endpoint: "mneme argus search --query ... --candidates ...",
|
|
96
|
+
auth: "shell",
|
|
97
|
+
status: "live",
|
|
98
|
+
notes: "shell-out from Aider (CLI is JSON-out by default).",
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: "gemini-cli",
|
|
102
|
+
displayName: "Gemini CLI",
|
|
103
|
+
transport: "cli",
|
|
104
|
+
wireFormat: "rest",
|
|
105
|
+
endpoint: "mneme argus search",
|
|
106
|
+
auth: "shell",
|
|
107
|
+
status: "live",
|
|
108
|
+
notes: "shell-out (Gemini CLI has shell-tool primitive).",
|
|
109
|
+
},
|
|
110
|
+
// ── Web AIs via Tampermonkey + HTTP bridge ──────────────────────────
|
|
111
|
+
{
|
|
112
|
+
id: "chatgpt-web",
|
|
113
|
+
displayName: "ChatGPT (chatgpt.com)",
|
|
114
|
+
transport: "userscript",
|
|
115
|
+
wireFormat: "tampermonkey-postmessage",
|
|
116
|
+
endpoint: "POST http://127.0.0.1:17741/v1/argus/search",
|
|
117
|
+
auth: "userscript-grant",
|
|
118
|
+
status: "live",
|
|
119
|
+
notes: "polygraph userscript proxies fetch via GM_xmlhttpRequest.",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "claude-ai-web",
|
|
123
|
+
displayName: "claude.ai (web)",
|
|
124
|
+
transport: "userscript",
|
|
125
|
+
wireFormat: "tampermonkey-postmessage",
|
|
126
|
+
endpoint: "POST http://127.0.0.1:17741/v1/argus/search",
|
|
127
|
+
auth: "userscript-grant",
|
|
128
|
+
status: "live",
|
|
129
|
+
notes: "polygraph userscript proxies fetch via GM_xmlhttpRequest.",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "gemini-web",
|
|
133
|
+
displayName: "Gemini (gemini.google.com)",
|
|
134
|
+
transport: "userscript",
|
|
135
|
+
wireFormat: "tampermonkey-postmessage",
|
|
136
|
+
endpoint: "POST http://127.0.0.1:17741/v1/argus/search",
|
|
137
|
+
auth: "userscript-grant",
|
|
138
|
+
status: "live",
|
|
139
|
+
notes: "polygraph userscript proxies fetch via GM_xmlhttpRequest.",
|
|
140
|
+
},
|
|
141
|
+
// ── Direct HTTP (any vendor) ────────────────────────────────────────
|
|
142
|
+
{
|
|
143
|
+
id: "http-direct",
|
|
144
|
+
displayName: "Generic HTTP client (any AI agent / cron / curl)",
|
|
145
|
+
transport: "http-bridge",
|
|
146
|
+
wireFormat: "rest",
|
|
147
|
+
endpoint: "POST http://127.0.0.1:17741/v1/argus/search",
|
|
148
|
+
auth: "http-token",
|
|
149
|
+
status: "live",
|
|
150
|
+
notes: "Bridge process started via `mneme bridge --detach`.",
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
export function listAdapters() {
|
|
154
|
+
return VENDOR_ADAPTERS;
|
|
155
|
+
}
|
|
156
|
+
export function countAdapters() {
|
|
157
|
+
return VENDOR_ADAPTERS.filter((a) => a.status === "live").length;
|
|
158
|
+
}
|
|
159
|
+
export function findAdapter(id) {
|
|
160
|
+
return VENDOR_ADAPTERS.find((a) => a.id.toLowerCase() === id.toLowerCase());
|
|
161
|
+
}
|
|
162
|
+
export function adaptersByTransport(t) {
|
|
163
|
+
return VENDOR_ADAPTERS.filter((a) => a.transport === t);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=vendor_adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor_adapters.js","sourceRoot":"","sources":["../../src/argus10/vendor_adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.42.0 — CROSS-PROCESS PHOENIX WATCHDOG (closes R8).
|
|
3
|
+
*
|
|
4
|
+
* v2.38 BRIDGE PHOENIX was IN-BAND: when the daemon was alive, the
|
|
5
|
+
* watchdog detected bridge death + respawned it. But if the DAEMON
|
|
6
|
+
* itself died, nothing watched. R8 from v2.37.1 audit: "Phoenix 0
|
|
7
|
+
* respawn — daemon ตายไป 3 รอบ session นี้ bridge ก็ตายตาม".
|
|
8
|
+
*
|
|
9
|
+
* Fix: register a CROSS-PROCESS scheduled task with the OS that probes
|
|
10
|
+
* the bridge HTTP port every interval and respawns `mneme bridge --detach`
|
|
11
|
+
* when N consecutive probes fail. Mechanisms per platform:
|
|
12
|
+
*
|
|
13
|
+
* Windows → schtasks /Create /SC MINUTE /MO 5 /TN MnemePhoenix /TR ...
|
|
14
|
+
* macOS → launchctl load ~/Library/LaunchAgents/com.mneme.phoenix.plist
|
|
15
|
+
* Linux → systemd --user enable mneme-phoenix.timer (or cron)
|
|
16
|
+
* fallback → write a node-self-supervisor wrapper script the user runs manually
|
|
17
|
+
*
|
|
18
|
+
* Every install is OPT-IN (per CONSENT FABRIC). Dry-run by default returns
|
|
19
|
+
* the EXACT command that WOULD run, so the user can copy-paste audit it.
|
|
20
|
+
*
|
|
21
|
+
* Pure deterministic + defensive: never throws; returns structured
|
|
22
|
+
* { ok, mechanism, reason, command } so the CLI surface can display + log.
|
|
23
|
+
*/
|
|
24
|
+
export type WatchdogMechanism = "schtasks" | "launchd" | "systemd-user" | "cron" | "node-self-supervisor" | "noop";
|
|
25
|
+
export interface InstallOptions {
|
|
26
|
+
/** Path to .mneme/ for logging + state. */
|
|
27
|
+
repoRoot: string;
|
|
28
|
+
/** The full command to spawn when bridge is unreachable. */
|
|
29
|
+
cmd: string;
|
|
30
|
+
/** Probe interval in minutes. Default 5. */
|
|
31
|
+
intervalMinutes?: number;
|
|
32
|
+
/** Bridge URL to probe. Default http://127.0.0.1:17741/v1/ping */
|
|
33
|
+
probeUrl?: string;
|
|
34
|
+
/** Don't actually install; just return the would-run command + plan. */
|
|
35
|
+
dryRun?: boolean;
|
|
36
|
+
/** Override watchdog task name. */
|
|
37
|
+
taskName?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface InstallResult {
|
|
40
|
+
ok: boolean;
|
|
41
|
+
mechanism: WatchdogMechanism;
|
|
42
|
+
reason: string;
|
|
43
|
+
/** The exact command that would (or did) install the watchdog. */
|
|
44
|
+
command?: string;
|
|
45
|
+
/** Where the watchdog script lives on disk. */
|
|
46
|
+
scriptPath?: string;
|
|
47
|
+
/** Where the watchdog plist / unit / cron line lives. */
|
|
48
|
+
registrationPath?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve which mechanism this OS supports. Pure detection.
|
|
52
|
+
*/
|
|
53
|
+
export declare function detectMechanism(): WatchdogMechanism;
|
|
54
|
+
/**
|
|
55
|
+
* Install the cross-process watchdog. Returns the chosen mechanism +
|
|
56
|
+
* exact command. Defensive: NEVER throws.
|
|
57
|
+
*/
|
|
58
|
+
export declare function installCrossProcessWatchdog(opts: InstallOptions): InstallResult;
|
|
59
|
+
/**
|
|
60
|
+
* Uninstall the cross-process watchdog. Defensive: never throws.
|
|
61
|
+
*/
|
|
62
|
+
export declare function uninstallCrossProcessWatchdog(opts: {
|
|
63
|
+
taskName?: string;
|
|
64
|
+
dryRun?: boolean;
|
|
65
|
+
}): InstallResult;
|
|
66
|
+
//# sourceMappingURL=cross_process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross_process.d.ts","sourceRoot":"","sources":["../../src/bridge_phoenix/cross_process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,SAAS,GACT,cAAc,GACd,MAAM,GACN,sBAAsB,GACtB,MAAM,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAiBnD;AAwJD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAW/E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,aAAa,CA0B1G"}
|