mneme-ai 2.213.0 β 2.215.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/commands/keryx.d.ts.map +1 -1
- package/dist/commands/keryx.js +112 -1
- package/dist/commands/keryx.js.map +1 -1
- package/dist/commands/keryx_providers.d.ts +31 -0
- package/dist/commands/keryx_providers.d.ts.map +1 -0
- package/dist/commands/keryx_providers.js +102 -0
- package/dist/commands/keryx_providers.js.map +1 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keryx.d.ts","sourceRoot":"","sources":["../../src/commands/keryx.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"keryx.d.ts","sourceRoot":"","sources":["../../src/commands/keryx.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqE5D"}
|
package/dist/commands/keryx.js
CHANGED
|
@@ -1,6 +1,38 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as https from "node:https";
|
|
4
|
+
import * as http from "node:http";
|
|
2
5
|
import { keryx } from "@mneme-ai/core";
|
|
6
|
+
import { sendAsk, clearMessage } from "./keryx_providers.js";
|
|
3
7
|
function out(s) { process.stdout.write(s + "\n"); }
|
|
8
|
+
const provPath = (cwd) => join(cwd, ".mneme", "keryx", "providers.json");
|
|
9
|
+
const bcastPath = (cwd) => join(cwd, ".mneme", "keryx", "broadcasts.json");
|
|
10
|
+
function loadProviders(cwd) { try {
|
|
11
|
+
return existsSync(provPath(cwd)) ? JSON.parse(readFileSync(provPath(cwd), "utf8")) : {};
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return {};
|
|
15
|
+
} }
|
|
16
|
+
function loadBcasts(cwd) { try {
|
|
17
|
+
return existsSync(bcastPath(cwd)) ? JSON.parse(readFileSync(bcastPath(cwd), "utf8")) : [];
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return [];
|
|
21
|
+
} }
|
|
22
|
+
function saveBcasts(cwd, b) { mkdirSync(join(cwd, ".mneme", "keryx"), { recursive: true }); writeFileSync(bcastPath(cwd), JSON.stringify(b, null, 2), "utf8"); }
|
|
23
|
+
const mod = (url) => (url.startsWith("https:") ? https : http);
|
|
24
|
+
function getJson(url) { return new Promise((res) => { mod(url).get(url, (r) => { let s = ""; r.on("data", (d) => (s += d)); r.on("end", () => { try {
|
|
25
|
+
res(JSON.parse(s || "{}"));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
res({});
|
|
29
|
+
} }); }).on("error", () => res({})); }); }
|
|
30
|
+
function postJson(url, body) { return new Promise((res) => { const u = new URL(url); const data = JSON.stringify(body); const r = mod(url).request({ hostname: u.hostname, port: u.port || (u.protocol === "https:" ? 443 : 80), path: u.pathname + u.search, method: "POST", headers: { "content-type": "application/json", "content-length": Buffer.byteLength(data) } }, (x) => { let s = ""; x.on("data", (d) => (s += d)); x.on("end", () => { try {
|
|
31
|
+
res(JSON.parse(s || "{}"));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
res({});
|
|
35
|
+
} }); }); r.on("error", () => res({})); r.write(data); r.end(); }); }
|
|
4
36
|
export function registerKeryxCommands(program) {
|
|
5
37
|
const k = program.command("keryx").description("π KERYX β the herald: a dumb, signed relay so ANY chat (LINE/Slack/Discord/Telegram) can reach your local agent behind NAT. Only a summary+hash crosses; answers are signed + replay-proof.");
|
|
6
38
|
k.command("status", { isDefault: true }).description("Protocol + gauntlet status.").action(() => {
|
|
@@ -19,6 +51,85 @@ export function registerKeryxCommands(program) {
|
|
|
19
51
|
out(" " + JSON.stringify({ kind: ans.kind, payload: ans.payload, boundToAsk: ans.id === ask.id }));
|
|
20
52
|
out(" forged by relay (wrong key)? " + keryx.verifyEnvelope("wrong", ask, now + 100).ok + " β the relay can route but never fabricate");
|
|
21
53
|
});
|
|
54
|
+
k.command("providers").description("List configured chat providers (.mneme/keryx/providers.json).").action(() => {
|
|
55
|
+
const c = loadProviders(process.cwd());
|
|
56
|
+
const on = keryx.ALL_PROVIDERS.filter((p) => c[p]?.token);
|
|
57
|
+
out(on.length ? `π connected providers: ${on.join(", ")}` : "no providers configured β add tokens to .mneme/keryx/providers.json (see docs/KERYX.md)");
|
|
58
|
+
});
|
|
59
|
+
k.command("broadcast").description("Fan an ask out to ALL connected providers at once (one agent β every chat). Pair with `keryx bridge` to receive the answer + auto-clear the others.")
|
|
60
|
+
.requiredOption("--question <q>", "the question").option("--kind <k>", "approve|choice|text", "approve").option("--choices <list>", "comma-separated (choice)")
|
|
61
|
+
.option("--relay <url>", "KERYX relay base URL (to register expectation)").option("--daemon <id>", "daemon id", "default").option("--agent <a>", "agent", "agent")
|
|
62
|
+
.action(async (o) => {
|
|
63
|
+
const cwd = process.cwd();
|
|
64
|
+
const cfg = loadProviders(cwd);
|
|
65
|
+
const connected = keryx.ALL_PROVIDERS.filter((p) => cfg[p]?.token);
|
|
66
|
+
if (!connected.length) {
|
|
67
|
+
out("no providers configured β see `mneme keryx providers`");
|
|
68
|
+
process.exitCode = 2;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const id = Math.abs([...`${o.question}${Date.now()}`].reduce((a, ch) => (a * 31 + ch.charCodeAt(0)) | 0, 7)).toString(36);
|
|
72
|
+
const spec = { id, nonce: id, question: o.question, kind: (["approve", "choice", "text"].includes(o.kind ?? "") ? o.kind : "approve"), choices: o.choices ? o.choices.split(",").map((s) => s.trim()).filter(Boolean) : undefined, agent: o.agent ?? "agent" };
|
|
73
|
+
const sent = [];
|
|
74
|
+
for (const p of connected) {
|
|
75
|
+
const r = await sendAsk(p, cfg[p], spec);
|
|
76
|
+
out(` ${r.ok ? "β" : "β"} ${p}${r.messageId ? " (msg " + r.messageId + ")" : ""}${r.reason ? " β " + r.reason : ""}`);
|
|
77
|
+
if (r.ok)
|
|
78
|
+
sent.push({ provider: p, messageId: r.messageId ?? "" });
|
|
79
|
+
}
|
|
80
|
+
const b = loadBcasts(cwd);
|
|
81
|
+
b.push({ id, nonce: id, sent, answered: null });
|
|
82
|
+
saveBcasts(cwd, b);
|
|
83
|
+
if (o.relay)
|
|
84
|
+
await postJson(`${o.relay.replace(/\/$/, "")}/keryx/expect`, { daemonId: o.daemon ?? "default", askId: id });
|
|
85
|
+
out(`π‘ broadcast id ${id} β ${sent.length}/${connected.length} providers. Run \`mneme keryx bridge --relay ${o.relay ?? "<url>"}\` to receive + auto-clear.`);
|
|
86
|
+
});
|
|
87
|
+
k.command("bridge").description("Poll the relay for answers; FIRST answer wins, then CLEAR the question on every other provider (edit Telegram/Slack/Discord Β· notify LINE/WhatsApp).")
|
|
88
|
+
.requiredOption("--relay <url>", "KERYX relay base URL").option("--daemon <id>", "daemon id", "default").option("--once", "drain once and exit (testing)")
|
|
89
|
+
.action(async (o) => {
|
|
90
|
+
const cwd = process.cwd();
|
|
91
|
+
const base = o.relay.replace(/\/$/, "");
|
|
92
|
+
const daemon = o.daemon ?? "default";
|
|
93
|
+
const drainOnce = async () => {
|
|
94
|
+
const r = await getJson(`${base}/keryx/drain?daemon=${encodeURIComponent(daemon)}`);
|
|
95
|
+
const answers = r.answers ?? [];
|
|
96
|
+
for (const a of answers) {
|
|
97
|
+
const b = loadBcasts(cwd);
|
|
98
|
+
const rec = b.find((x) => x.id === a.id);
|
|
99
|
+
if (!rec) {
|
|
100
|
+
out(`Β· answer for unknown id ${a.id} (ignored)`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (rec.answered) {
|
|
104
|
+
out(`Β· ${a.id} already answered on ${rec.answered} β ignored (first wins)`);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
rec.answered = a.channel;
|
|
108
|
+
rec.answer = a.payload;
|
|
109
|
+
saveBcasts(cwd, b);
|
|
110
|
+
out(`β
${a.id} answered "${a.payload}" on ${a.channel} β clearing othersβ¦`);
|
|
111
|
+
const cfg = loadProviders(cwd);
|
|
112
|
+
for (const act of keryx.clearPlan(rec.sent, a.channel)) {
|
|
113
|
+
await clearMessage(act.provider, cfg[act.provider], act.messageId, a.channel);
|
|
114
|
+
out(` ${act.method === "edit" ? "βοΈ edited" : "π¨ notified"} ${act.provider}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return answers.length;
|
|
118
|
+
};
|
|
119
|
+
if (o.once) {
|
|
120
|
+
const n = await drainOnce();
|
|
121
|
+
out(`drained ${n} answer(s).`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
out(`π KERYX bridge β polling ${base} for daemon ${daemon} (Ctrl-C to stop)β¦`);
|
|
125
|
+
for (;;) {
|
|
126
|
+
try {
|
|
127
|
+
await drainOnce();
|
|
128
|
+
}
|
|
129
|
+
catch { /* keep polling */ }
|
|
130
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
22
133
|
k.command("verify <file>").description("Verify an envelope JSON offline.").requiredOption("--secret <s>", "the daemon shared key")
|
|
23
134
|
.action((file, o) => {
|
|
24
135
|
if (!existsSync(file)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keryx.js","sourceRoot":"","sources":["../../src/commands/keryx.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keryx.js","sourceRoot":"","sources":["../../src/commands/keryx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ProviderCfg {
|
|
2
|
+
token?: string;
|
|
3
|
+
chatId?: string;
|
|
4
|
+
channel?: string;
|
|
5
|
+
to?: string;
|
|
6
|
+
phoneId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ProvidersConfig {
|
|
9
|
+
telegram?: ProviderCfg;
|
|
10
|
+
slack?: ProviderCfg;
|
|
11
|
+
discord?: ProviderCfg;
|
|
12
|
+
line?: ProviderCfg;
|
|
13
|
+
whatsapp?: ProviderCfg;
|
|
14
|
+
}
|
|
15
|
+
export interface AskSpec {
|
|
16
|
+
id: string;
|
|
17
|
+
nonce: string;
|
|
18
|
+
question: string;
|
|
19
|
+
kind: "approve" | "choice" | "text";
|
|
20
|
+
choices?: string[];
|
|
21
|
+
agent: string;
|
|
22
|
+
}
|
|
23
|
+
/** Send the ask to ONE provider. Returns the provider message id (for later clearing). */
|
|
24
|
+
export declare function sendAsk(provider: string, cfg: ProviderCfg, spec: AskSpec): Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
messageId?: string;
|
|
27
|
+
reason?: string;
|
|
28
|
+
}>;
|
|
29
|
+
/** Clear / mark-answered on the providers the human did NOT answer on. Edits where possible. */
|
|
30
|
+
export declare function clearMessage(provider: string, cfg: ProviderCfg, messageId: string, answeredOn: string): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=keryx_providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keryx_providers.d.ts","sourceRoot":"","sources":["../../src/commands/keryx_providers.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AACjH,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;CAAE;AAYnJ,MAAM,WAAW,OAAO;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAShJ,0FAA0F;AAC1F,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC9I;AAED,gGAAgG;AAChG,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3H"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KERYX provider adapters β OUTBOUND send + cross-provider CLEAR for each chat.
|
|
3
|
+
*
|
|
4
|
+
* The agent's ask fans out to EVERY configured provider at once (buttons carry the
|
|
5
|
+
* `keryx:<id>:<answer>` token). When the human answers on one, `clearOthers` edits the
|
|
6
|
+
* message on Telegram/Slack/Discord (buttons vanish) and posts a follow-up on LINE/WhatsApp
|
|
7
|
+
* (no edit API). A late tap anywhere is ignored β the answer is one-time (first wins).
|
|
8
|
+
*
|
|
9
|
+
* β
HONEST: payloads follow each provider's documented API; validate live with YOUR token.
|
|
10
|
+
*/
|
|
11
|
+
import * as https from "node:https";
|
|
12
|
+
function httpsJson(host, path, headers, body) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const data = JSON.stringify(body);
|
|
15
|
+
const req = https.request({ hostname: host, path, method: "POST", headers: { "content-type": "application/json", "content-length": Buffer.byteLength(data), ...headers }, timeout: 15000 }, (res) => { let s = ""; res.on("data", (d) => (s += d)); res.on("end", () => { let j = {}; try {
|
|
16
|
+
j = JSON.parse(s);
|
|
17
|
+
}
|
|
18
|
+
catch { /* */ } resolve({ status: res.statusCode ?? 500, json: j }); }); });
|
|
19
|
+
req.on("error", () => resolve({ status: 0, json: {} }));
|
|
20
|
+
req.on("timeout", () => { req.destroy(); resolve({ status: 0, json: {} }); });
|
|
21
|
+
req.write(data);
|
|
22
|
+
req.end();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** options as [label, answerToken] pairs for buttons. */
|
|
26
|
+
function options(spec) {
|
|
27
|
+
if (spec.kind === "approve")
|
|
28
|
+
return [["β
Yes", `keryx:${spec.id}:allow`], ["β No", `keryx:${spec.id}:deny`]];
|
|
29
|
+
if (spec.kind === "choice")
|
|
30
|
+
return (spec.choices ?? []).map((c) => [c, `keryx:${spec.id}:${c}`]);
|
|
31
|
+
return []; // text β no buttons; the user replies free-text
|
|
32
|
+
}
|
|
33
|
+
const title = (spec) => `β ${spec.agent} asks${spec.kind === "text" ? " (reply with your answer)" : ""}:\n${spec.question}`;
|
|
34
|
+
/** Send the ask to ONE provider. Returns the provider message id (for later clearing). */
|
|
35
|
+
export async function sendAsk(provider, cfg, spec) {
|
|
36
|
+
if (!cfg?.token)
|
|
37
|
+
return { ok: false, reason: "no token" };
|
|
38
|
+
const opts = options(spec);
|
|
39
|
+
try {
|
|
40
|
+
if (provider === "telegram") {
|
|
41
|
+
const kb = spec.kind === "text" ? { force_reply: true } : { inline_keyboard: opts.map(([t, d]) => [{ text: t, callback_data: d }]) };
|
|
42
|
+
const r = await httpsJson("api.telegram.org", `/bot${cfg.token}/sendMessage`, {}, { chat_id: cfg.chatId, text: title(spec), reply_markup: kb });
|
|
43
|
+
return { ok: !!(r.json.ok), messageId: String(r.json.result?.message_id ?? "") };
|
|
44
|
+
}
|
|
45
|
+
if (provider === "slack") {
|
|
46
|
+
const blocks = [{ type: "section", text: { type: "mrkdwn", text: title(spec) } }, ...(opts.length ? [{ type: "actions", elements: opts.map(([t, d]) => ({ type: "button", text: { type: "plain_text", text: t }, value: d, action_id: d })) }] : [])];
|
|
47
|
+
const r = await httpsJson("slack.com", "/api/chat.postMessage", { authorization: `Bearer ${cfg.token}` }, { channel: cfg.channel, text: title(spec), blocks });
|
|
48
|
+
return { ok: !!(r.json.ok), messageId: String(r.json.ts ?? "") };
|
|
49
|
+
}
|
|
50
|
+
if (provider === "discord") {
|
|
51
|
+
const components = opts.length ? [{ type: 1, components: opts.slice(0, 5).map(([t, d]) => ({ type: 2, style: 1, label: t.slice(0, 80), custom_id: d.slice(0, 100) })) }] : [];
|
|
52
|
+
const r = await httpsJson("discord.com", `/api/v10/channels/${cfg.channel}/messages`, { authorization: `Bot ${cfg.token}` }, { content: title(spec), components });
|
|
53
|
+
return { ok: r.status < 300, messageId: String(r.json.id ?? "") };
|
|
54
|
+
}
|
|
55
|
+
if (provider === "line") {
|
|
56
|
+
const actions = opts.length ? opts.slice(0, 4).map(([t, d]) => ({ type: "postback", label: t.slice(0, 20), data: d })) : [{ type: "message", label: "reply", text: "(type your answer)" }];
|
|
57
|
+
const msg = opts.length ? { type: "template", altText: spec.question, template: { type: "buttons", text: spec.question.slice(0, 160), actions } } : { type: "text", text: title(spec) };
|
|
58
|
+
const r = await httpsJson("api.line.me", "/v2/bot/message/push", { authorization: `Bearer ${cfg.token}` }, { to: cfg.to, messages: [msg] });
|
|
59
|
+
return { ok: r.status < 300, messageId: "" }; // LINE push has no editable id
|
|
60
|
+
}
|
|
61
|
+
if (provider === "whatsapp") {
|
|
62
|
+
const interactive = opts.length ? { type: "button", body: { text: spec.question.slice(0, 1024) }, action: { buttons: opts.slice(0, 3).map(([t, d]) => ({ type: "reply", reply: { id: d.slice(0, 256), title: t.slice(0, 20) } })) } } : null;
|
|
63
|
+
const msg = interactive ? { messaging_product: "whatsapp", to: cfg.to, type: "interactive", interactive } : { messaging_product: "whatsapp", to: cfg.to, type: "text", text: { body: title(spec) } };
|
|
64
|
+
const r = await httpsJson("graph.facebook.com", `/v20.0/${cfg.phoneId}/messages`, { authorization: `Bearer ${cfg.token}` }, msg);
|
|
65
|
+
return { ok: r.status < 300, messageId: "" };
|
|
66
|
+
}
|
|
67
|
+
return { ok: false, reason: "unknown provider" };
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return { ok: false, reason: e.message };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Clear / mark-answered on the providers the human did NOT answer on. Edits where possible. */
|
|
74
|
+
export async function clearMessage(provider, cfg, messageId, answeredOn) {
|
|
75
|
+
if (!cfg?.token)
|
|
76
|
+
return;
|
|
77
|
+
const note = `β
answered on ${answeredOn} β this request is closed.`;
|
|
78
|
+
try {
|
|
79
|
+
if (provider === "telegram" && messageId) {
|
|
80
|
+
await httpsJson("api.telegram.org", `/bot${cfg.token}/editMessageText`, {}, { chat_id: cfg.chatId, message_id: Number(messageId), text: note });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (provider === "slack" && messageId) {
|
|
84
|
+
await httpsJson("slack.com", "/api/chat.update", { authorization: `Bearer ${cfg.token}` }, { channel: cfg.channel, ts: messageId, text: note, blocks: [] });
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (provider === "discord" && messageId) {
|
|
88
|
+
await httpsJson("discord.com", `/api/v10/channels/${cfg.channel}/messages/${messageId}`, { authorization: `Bot ${cfg.token}` }, { content: note, components: [] });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (provider === "line") {
|
|
92
|
+
await httpsJson("api.line.me", "/v2/bot/message/push", { authorization: `Bearer ${cfg.token}` }, { to: cfg.to, messages: [{ type: "text", text: note }] });
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (provider === "whatsapp") {
|
|
96
|
+
await httpsJson("graph.facebook.com", `/v20.0/${cfg.phoneId}/messages`, { authorization: `Bearer ${cfg.token}` }, { messaging_product: "whatsapp", to: cfg.to, type: "text", text: { body: note } });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch { /* clearing is best-effort */ }
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=keryx_providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keryx_providers.js","sourceRoot":"","sources":["../../src/commands/keryx_providers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mneme-ai",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.215.0",
|
|
4
4
|
"mcpName": "io.github.patsa2561-art/mneme-ai",
|
|
5
5
|
"description": "Mneme β the memory layer for your codebase. Knows the WHY, the WHAT, the WHERE-IT-BREAKS.",
|
|
6
6
|
"type": "module",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"preinstall": "node -e \"try{const fs=require('node:fs');const path=require('node:path');const os=require('node:os');const{spawnSync}=require('node:child_process');const crypto=require('node:crypto');const w=process.platform==='win32';const home=os.homedir();const organ=path.join(home,'.mneme-global');const trailPath=path.join(organ,'preinstall-trail.jsonl');const trailSecret=process.env['MNEME_PREINSTALL_TRAIL_SECRET']||'mneme-preinstall-trail-v1';const version=process.env['npm_package_version']||'unknown';try{if(!fs.existsSync(organ))fs.mkdirSync(organ,{recursive:true,mode:0o700})}catch(e){}const lastSig=()=>{try{if(!fs.existsSync(trailPath))return'genesis';const lines=fs.readFileSync(trailPath,'utf8').trim().split('\\\\n').filter(Boolean);if(lines.length===0)return'genesis';const last=JSON.parse(lines[lines.length-1]);return typeof last?.sig==='string'?last.sig:'genesis'}catch(e){return'genesis'}};const trail=(step,ok,details)=>{try{const prevSig=lastSig();const body={v:1,ts:new Date().toISOString(),version,step,ok,...(details?{details}:{}),pid:process.pid,prevSig};const sig=crypto.createHmac('sha256',trailSecret).update(prevSig+'::'+JSON.stringify(body)).digest('hex');fs.appendFileSync(trailPath,JSON.stringify({...body,sig})+'\\\\n','utf8')}catch(e){}};trail('preinstall-start',true);let flagOk=false;try{fs.writeFileSync(path.join(organ,'install-incoming.flag'),JSON.stringify({v:1,announcedAt:new Date().toISOString(),announcerPid:process.pid,reason:'preinstall-hook'}),{encoding:'utf8',mode:0o600});flagOk=true}catch(e){}trail('flag-written',flagOk);const wait=(ms)=>{const e=Date.now()+ms;while(Date.now()<e){}};wait(300);let held=[];if(w){const r=spawnSync('taskkill',['/F','/IM','mneme.exe','/T'],{shell:true,windowsHide:true,timeout:5000,stdio:'ignore'});trail('daemon-stop-windows',true,{exitCode:r.status});let reaped=0;try{const beatDir=path.join(organ,'heartbeats');if(fs.existsSync(beatDir)){for(const f of fs.readdirSync(beatDir)){const m=f.match(/^(\\\\d+)\\\\.beat$/);if(m){const pid=parseInt(m[1]);if(pid>0&&pid!==process.pid){try{const bj=JSON.parse(fs.readFileSync(path.join(beatDir,f),'utf8'));if(Array.isArray(bj.holdsPaths))for(const hp of bj.holdsPaths){if(typeof hp==='string'&&hp)held.push(hp)}}catch(e){}spawnSync('taskkill',['/F','/PID',pid.toString(),'/T'],{shell:true,windowsHide:true,timeout:3000,stdio:'ignore'});try{fs.unlinkSync(path.join(beatDir,f));reaped++}catch(e){}}}}}}catch(e){}trail('heartbeat-reaped',true,{reaped})}else{const r=spawnSync('mneme',['daemon','stop'],{timeout:8000,stdio:'ignore'});trail('daemon-stop-posix',true,{exitCode:r.status});let reaped=0;try{const beatDir=path.join(organ,'heartbeats');if(fs.existsSync(beatDir)){for(const f of fs.readdirSync(beatDir)){const m=f.match(/^(\\\\d+)\\\\.beat$/);if(m){const pid=parseInt(m[1]);if(pid>0&&pid!==process.pid){try{const bj=JSON.parse(fs.readFileSync(path.join(beatDir,f),'utf8'));if(Array.isArray(bj.holdsPaths))for(const hp of bj.holdsPaths){if(typeof hp==='string'&&hp)held.push(hp)}}catch(e){}try{process.kill(pid,'SIGTERM')}catch(e){}wait(100);try{process.kill(pid,'SIGKILL')}catch(e){}try{fs.unlinkSync(path.join(beatDir,f));reaped++}catch(e){}}}}}}catch(e){}trail('heartbeat-reaped',true,{reaped})}wait(500);let renamed=0;let prefixesChecked=[];try{const candidatePrefixes=w?[path.join(home,'AppData','Roaming','npm'),path.dirname(process.execPath),'C:\\\\\\\\nvm4w\\\\\\\\nodejs',path.join(home,'AppData','Local','nvm')]:['/usr/local/lib','/usr/lib',path.join(home,'.npm-global'),path.join(home,'.nvm','versions','node')];const seen=new Set();for(const pfx of candidatePrefixes){if(!fs.existsSync(pfx))continue;let nodeModulesBases=[];if(fs.existsSync(path.join(pfx,'node_modules')))nodeModulesBases.push(path.join(pfx,'node_modules'));try{for(const entry of fs.readdirSync(pfx)){const sub=path.join(pfx,entry,'node_modules');if(fs.existsSync(sub))nodeModulesBases.push(sub);const sub2=path.join(pfx,entry,'nodejs','node_modules');if(fs.existsSync(sub2))nodeModulesBases.push(sub2)}}catch(e){}for(const nm of nodeModulesBases){if(seen.has(nm))continue;seen.add(nm);prefixesChecked.push(nm);const npmGlobal=path.join(nm,'mneme-ai');if(!fs.existsSync(npmGlobal))continue;const dllPaths=w?[path.join(npmGlobal,'node_modules','@img','sharp-libvips-win32-x64','lib','libvips-42.dll'),path.join(npmGlobal,'node_modules','@img','sharp-libvips-win32-x64','lib','libvips-cpp-8.17.3.dll'),path.join(npmGlobal,'node_modules','sharp','build','Release','sharp-win32-x64.node')]:[];for(const dll of dllPaths){if(!fs.existsSync(dll))continue;let freed=false;for(let i=0;i<40;i++){try{const fd=fs.openSync(dll,'r+');fs.closeSync(fd);freed=true;break}catch(e2){wait(50)}}if(!freed){try{fs.renameSync(dll,dll+'.locked-'+Date.now()+'-'+process.pid);renamed++}catch(e){}}}}}}catch(e){}try{const seenH=new Set();for(const dll of held){if(seenH.has(dll))continue;seenH.add(dll);if(!fs.existsSync(dll))continue;let freed=false;for(let i=0;i<40;i++){try{const fd=fs.openSync(dll,'r+');fs.closeSync(fd);freed=true;break}catch(e2){wait(50)}}if(!freed){try{fs.renameSync(dll,dll+'.locked-'+Date.now()+'-'+process.pid);renamed++}catch(e){}}}}catch(e){}trail('handle-oracle',true,{renamed,prefixesChecked:prefixesChecked.length,held:held.length});let swept=0;try{const candidates=w?[path.join(home,'AppData','Roaming','npm','node_modules'),path.join(path.dirname(process.execPath),'node_modules')]:['/usr/local/lib/node_modules',path.join(home,'.npm-global','node_modules')];for(const npmParent of candidates){if(!fs.existsSync(npmParent))continue;try{for(const entry of fs.readdirSync(npmParent)){if(entry.startsWith('.mneme-ai-')){try{fs.rmSync(path.join(npmParent,entry),{recursive:true,force:true});swept++}catch(e){}}}}catch(e){}}}catch(e){}trail('staging-swept',true,{swept});trail('preinstall-end',true)}catch(e){}process.exit(0)\""
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@mneme-ai/core": "2.
|
|
36
|
-
"@mneme-ai/correlator": "2.
|
|
37
|
-
"@mneme-ai/embeddings": "2.
|
|
38
|
-
"@mneme-ai/matrix": "2.
|
|
39
|
-
"@mneme-ai/mcp": "2.
|
|
40
|
-
"@mneme-ai/xray": "2.
|
|
35
|
+
"@mneme-ai/core": "2.215.0",
|
|
36
|
+
"@mneme-ai/correlator": "2.215.0",
|
|
37
|
+
"@mneme-ai/embeddings": "2.215.0",
|
|
38
|
+
"@mneme-ai/matrix": "2.215.0",
|
|
39
|
+
"@mneme-ai/mcp": "2.215.0",
|
|
40
|
+
"@mneme-ai/xray": "2.215.0",
|
|
41
41
|
"commander": "^14.0.3",
|
|
42
42
|
"kleur": "^4.1.5"
|
|
43
43
|
},
|