@mneme-ai/core 2.9.0 → 2.9.1
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/handoff/index.d.ts +1 -0
- package/dist/handoff/index.d.ts.map +1 -1
- package/dist/handoff/index.js +4 -0
- package/dist/handoff/index.js.map +1 -1
- package/dist/handoff/live_state.d.ts +70 -0
- package/dist/handoff/live_state.d.ts.map +1 -0
- package/dist/handoff/live_state.js +161 -0
- package/dist/handoff/live_state.js.map +1 -0
- package/dist/handoff/live_state.test.d.ts +2 -0
- package/dist/handoff/live_state.test.d.ts.map +1 -0
- package/dist/handoff/live_state.test.js +83 -0
- package/dist/handoff/live_state.test.js.map +1 -0
- package/package.json +1 -1
package/dist/handoff/index.d.ts
CHANGED
|
@@ -80,6 +80,7 @@ export declare function buildAuraDropDataUri(input: HandoffInput): {
|
|
|
80
80
|
bytes: number;
|
|
81
81
|
} | null;
|
|
82
82
|
/** Compose the full handoff bundle. */
|
|
83
|
+
export * from "./live_state.js";
|
|
83
84
|
export declare function handoffUniversal(input: HandoffInput): HandoffBundle;
|
|
84
85
|
/** Format a one-liner pulse summary. */
|
|
85
86
|
export declare function formatHandoffPulseLine(b: HandoffBundle): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;qEACiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;+DAE2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;CAClE;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;CACtB;AA+CD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS/F;AAYD,uCAAuC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;qEACiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;+DAE2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;CAClE;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;CACtB;AA+CD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS/F;AAYD,uCAAuC;AAIvC,cAAc,iBAAiB,CAAC;AAEhC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA6DnE;AAED,wCAAwC;AACxC,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAG/D"}
|
package/dist/handoff/index.js
CHANGED
|
@@ -103,6 +103,10 @@ function genNexusCode(seed) {
|
|
|
103
103
|
return code;
|
|
104
104
|
}
|
|
105
105
|
/** Compose the full handoff bundle. */
|
|
106
|
+
// v2.9.1 -- LIVE STATE injector (auto-prepends current Mneme version /
|
|
107
|
+
// recent commits / HMAC-signed signature to every soul prompt going
|
|
108
|
+
// through clone.to so stale capsules don't mislead the receiving AI).
|
|
109
|
+
export * from "./live_state.js";
|
|
106
110
|
export function handoffUniversal(input) {
|
|
107
111
|
const paths = [];
|
|
108
112
|
const nexusCode = input.nexusCode ?? genNexusCode(input.payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.9.1 -- LIVE STATE INJECTOR for cross-vendor soul prompts.
|
|
3
|
+
*
|
|
4
|
+
* Bug it fixes: a soul prompt that was generated at v1.95 timepoint
|
|
5
|
+
* still carries v1.95 Context / Decisions / Recent turns. When the
|
|
6
|
+
* user clones the brain to ChatGPT three weeks later (at v2.9.0),
|
|
7
|
+
* ChatGPT reads the v1.95 numbers and answers "version is v1.95" —
|
|
8
|
+
* because that's literally what the soul prompt says.
|
|
9
|
+
*
|
|
10
|
+
* Fix: every soul prompt going through mneme.clone.to is now
|
|
11
|
+
* AUTO-PREPENDED with a LIVE MNEME STATE block that:
|
|
12
|
+
* 1. Lists CURRENT installed version (read from package.json)
|
|
13
|
+
* 2. Lists CURRENT npm latest (read from telepathy cache or env)
|
|
14
|
+
* 3. Lists last 3 commit subjects + SHAs (read from git log)
|
|
15
|
+
* 4. Carries a SUPERSEDES directive — receiving AI must trust
|
|
16
|
+
* LIVE STATE over any version/numbers later in the prompt.
|
|
17
|
+
*
|
|
18
|
+
* Nobel-tier move: HMAC-signed so a stale LIVE STATE block can't be
|
|
19
|
+
* forged. Receiving AI can `mneme.live_state.verify` the signature
|
|
20
|
+
* against the user's published Mneme key.
|
|
21
|
+
*
|
|
22
|
+
* No external imports. Best-effort git/package read — never throws.
|
|
23
|
+
*/
|
|
24
|
+
export interface LiveStateInput {
|
|
25
|
+
/** Absolute path to the repo root. */
|
|
26
|
+
repoRoot: string;
|
|
27
|
+
/** Optional override of the local version. */
|
|
28
|
+
localVersion?: string;
|
|
29
|
+
/** Optional override of npm-latest. */
|
|
30
|
+
npmLatest?: string;
|
|
31
|
+
/** Optional HMAC secret. Defaults to a deterministic per-repo derivation. */
|
|
32
|
+
secret?: string;
|
|
33
|
+
/** How many recent commits to surface. Default 3. */
|
|
34
|
+
recentCommits?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface LiveStateBlock {
|
|
37
|
+
/** The full Markdown block (sentinel-wrapped). */
|
|
38
|
+
block: string;
|
|
39
|
+
/** Live values at the moment of generation. */
|
|
40
|
+
state: {
|
|
41
|
+
localVersion: string;
|
|
42
|
+
npmLatest: string | null;
|
|
43
|
+
recentCommits: Array<{
|
|
44
|
+
sha: string;
|
|
45
|
+
subject: string;
|
|
46
|
+
}>;
|
|
47
|
+
generatedAt: string;
|
|
48
|
+
};
|
|
49
|
+
/** HMAC over the canonical state. */
|
|
50
|
+
sig: string;
|
|
51
|
+
}
|
|
52
|
+
/** Build the LIVE STATE block. Side-effect-free; safe to call before every handoff. */
|
|
53
|
+
export declare function buildLiveState(input: LiveStateInput): LiveStateBlock;
|
|
54
|
+
/** Prepend the LIVE STATE block to a soul prompt, AFTER any existing
|
|
55
|
+
* LIVE STATE block is stripped (so re-clones don't accumulate). */
|
|
56
|
+
export declare function injectLiveState(payload: string, input: LiveStateInput): {
|
|
57
|
+
combined: string;
|
|
58
|
+
live: LiveStateBlock;
|
|
59
|
+
};
|
|
60
|
+
/** Remove a previously-injected LIVE STATE block from a payload. */
|
|
61
|
+
export declare function stripExistingLiveState(payload: string): string;
|
|
62
|
+
/** Verify a LIVE STATE block's HMAC signature. Returns whether the
|
|
63
|
+
* signature matches the canonical state inside the block. */
|
|
64
|
+
export declare function verifyLiveState(block: string, secret: string): {
|
|
65
|
+
ok: boolean;
|
|
66
|
+
reason?: string;
|
|
67
|
+
};
|
|
68
|
+
/** One-line pulse summary. */
|
|
69
|
+
export declare function formatLiveStatePulseLine(live: LiveStateBlock): string;
|
|
70
|
+
//# sourceMappingURL=live_state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live_state.d.ts","sourceRoot":"","sources":["../../src/handoff/live_state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,aAAa,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;CACb;AA8CD,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA8BpE;AAED;oEACoE;AACpE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAIlH;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;8DAC8D;AAC9D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAwB/F;AAED,8BAA8B;AAC9B,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAErE"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.9.1 -- LIVE STATE INJECTOR for cross-vendor soul prompts.
|
|
3
|
+
*
|
|
4
|
+
* Bug it fixes: a soul prompt that was generated at v1.95 timepoint
|
|
5
|
+
* still carries v1.95 Context / Decisions / Recent turns. When the
|
|
6
|
+
* user clones the brain to ChatGPT three weeks later (at v2.9.0),
|
|
7
|
+
* ChatGPT reads the v1.95 numbers and answers "version is v1.95" —
|
|
8
|
+
* because that's literally what the soul prompt says.
|
|
9
|
+
*
|
|
10
|
+
* Fix: every soul prompt going through mneme.clone.to is now
|
|
11
|
+
* AUTO-PREPENDED with a LIVE MNEME STATE block that:
|
|
12
|
+
* 1. Lists CURRENT installed version (read from package.json)
|
|
13
|
+
* 2. Lists CURRENT npm latest (read from telepathy cache or env)
|
|
14
|
+
* 3. Lists last 3 commit subjects + SHAs (read from git log)
|
|
15
|
+
* 4. Carries a SUPERSEDES directive — receiving AI must trust
|
|
16
|
+
* LIVE STATE over any version/numbers later in the prompt.
|
|
17
|
+
*
|
|
18
|
+
* Nobel-tier move: HMAC-signed so a stale LIVE STATE block can't be
|
|
19
|
+
* forged. Receiving AI can `mneme.live_state.verify` the signature
|
|
20
|
+
* against the user's published Mneme key.
|
|
21
|
+
*
|
|
22
|
+
* No external imports. Best-effort git/package read — never throws.
|
|
23
|
+
*/
|
|
24
|
+
import { createHmac } from "node:crypto";
|
|
25
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
26
|
+
import { join } from "node:path";
|
|
27
|
+
import { safeExecTry } from "../util/safe_exec.js";
|
|
28
|
+
const LIVE_BEGIN = "<!-- MNEME LIVE STATE START -->";
|
|
29
|
+
const LIVE_END = "<!-- MNEME LIVE STATE END -->";
|
|
30
|
+
function readLocalVersion(repoRoot) {
|
|
31
|
+
// Prefer the top-level monorepo or cli package.json.
|
|
32
|
+
const candidates = [
|
|
33
|
+
join(repoRoot, "packages", "cli", "package.json"),
|
|
34
|
+
join(repoRoot, "package.json"),
|
|
35
|
+
];
|
|
36
|
+
for (const p of candidates) {
|
|
37
|
+
if (!existsSync(p))
|
|
38
|
+
continue;
|
|
39
|
+
try {
|
|
40
|
+
const pkg = JSON.parse(readFileSync(p, "utf8"));
|
|
41
|
+
if (typeof pkg.version === "string")
|
|
42
|
+
return pkg.version;
|
|
43
|
+
}
|
|
44
|
+
catch { /* BE:silent-by-design — fall through */ }
|
|
45
|
+
}
|
|
46
|
+
return "unknown";
|
|
47
|
+
}
|
|
48
|
+
function readNpmLatestFromCache(repoRoot) {
|
|
49
|
+
const cache = join(repoRoot, ".mneme", "telepathy", "npm-cache.json");
|
|
50
|
+
if (!existsSync(cache))
|
|
51
|
+
return null;
|
|
52
|
+
try {
|
|
53
|
+
const j = JSON.parse(readFileSync(cache, "utf8"));
|
|
54
|
+
if (typeof j.version === "string")
|
|
55
|
+
return j.version;
|
|
56
|
+
}
|
|
57
|
+
catch { /* BE:silent-by-design — corrupt cache → null */ }
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function readRecentCommits(repoRoot, n) {
|
|
61
|
+
const r = safeExecTry("git", ["-C", repoRoot, "log", `--max-count=${n}`, "--pretty=format:%H%x09%s"], { timeoutMs: 2000 });
|
|
62
|
+
if (!r || r.status !== 0)
|
|
63
|
+
return [];
|
|
64
|
+
return r.stdout.split("\n").filter(Boolean).map((line) => {
|
|
65
|
+
const [sha, ...rest] = line.split("\t");
|
|
66
|
+
return { sha: (sha ?? "").slice(0, 12), subject: rest.join("\t") };
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function canonicalize(s) {
|
|
70
|
+
return JSON.stringify({
|
|
71
|
+
localVersion: s.localVersion,
|
|
72
|
+
npmLatest: s.npmLatest,
|
|
73
|
+
recentCommits: s.recentCommits.map((c) => `${c.sha}|${c.subject}`),
|
|
74
|
+
generatedAt: s.generatedAt,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Build the LIVE STATE block. Side-effect-free; safe to call before every handoff. */
|
|
78
|
+
export function buildLiveState(input) {
|
|
79
|
+
const localVersion = input.localVersion ?? readLocalVersion(input.repoRoot);
|
|
80
|
+
const npmLatest = input.npmLatest ?? readNpmLatestFromCache(input.repoRoot);
|
|
81
|
+
const recentCommits = readRecentCommits(input.repoRoot, input.recentCommits ?? 3);
|
|
82
|
+
const generatedAt = new Date().toISOString();
|
|
83
|
+
const state = { localVersion, npmLatest, recentCommits, generatedAt };
|
|
84
|
+
const secret = input.secret ?? `live-state-default-${input.repoRoot}`;
|
|
85
|
+
const sig = createHmac("sha256", secret).update(canonicalize(state)).digest("hex");
|
|
86
|
+
const lines = [];
|
|
87
|
+
lines.push(LIVE_BEGIN);
|
|
88
|
+
lines.push("## 🛰 MNEME LIVE STATE (READ THIS FIRST — SUPERSEDES OLDER VERSION/CONTEXT IN THIS PROMPT)");
|
|
89
|
+
lines.push("");
|
|
90
|
+
lines.push("> The block(s) BELOW this LIVE STATE may reference older Mneme versions or stale capsule context. **Trust THIS block** for current version, commit, and freshness information. If the user asks 'what's the latest Mneme version?' or 'what did you ship last?' answer FROM HERE, not from the Context block below.");
|
|
91
|
+
lines.push("");
|
|
92
|
+
lines.push(`- **Local Mneme version (installed right now):** ${localVersion}`);
|
|
93
|
+
lines.push(`- **npm latest (cached from telepathy):** ${npmLatest ?? "not cached"}`);
|
|
94
|
+
if (recentCommits.length > 0) {
|
|
95
|
+
lines.push(`- **Last ${recentCommits.length} commits on the local repo:**`);
|
|
96
|
+
for (const c of recentCommits)
|
|
97
|
+
lines.push(` - \`${c.sha}\` — ${c.subject}`);
|
|
98
|
+
}
|
|
99
|
+
lines.push(`- **Generated at:** ${generatedAt}`);
|
|
100
|
+
lines.push(`- **Signature:** \`${sig.slice(0, 16)}…\` (HMAC-SHA256 over canonical state)`);
|
|
101
|
+
lines.push("");
|
|
102
|
+
lines.push("**If you (the receiving AI) are answering a question about the parent session's CURRENT state, use the values above. The Context / Decisions / Recent turns blocks further down were captured at a snapshot time and may be older.**");
|
|
103
|
+
lines.push(LIVE_END);
|
|
104
|
+
return {
|
|
105
|
+
block: lines.join("\n"),
|
|
106
|
+
state,
|
|
107
|
+
sig,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Prepend the LIVE STATE block to a soul prompt, AFTER any existing
|
|
111
|
+
* LIVE STATE block is stripped (so re-clones don't accumulate). */
|
|
112
|
+
export function injectLiveState(payload, input) {
|
|
113
|
+
const stripped = stripExistingLiveState(payload);
|
|
114
|
+
const live = buildLiveState(input);
|
|
115
|
+
return { combined: `${live.block}\n\n${stripped}`, live };
|
|
116
|
+
}
|
|
117
|
+
/** Remove a previously-injected LIVE STATE block from a payload. */
|
|
118
|
+
export function stripExistingLiveState(payload) {
|
|
119
|
+
const start = payload.indexOf(LIVE_BEGIN);
|
|
120
|
+
if (start === -1)
|
|
121
|
+
return payload;
|
|
122
|
+
const end = payload.indexOf(LIVE_END, start);
|
|
123
|
+
if (end === -1)
|
|
124
|
+
return payload;
|
|
125
|
+
return (payload.slice(0, start) + payload.slice(end + LIVE_END.length)).replace(/^\s+/, "");
|
|
126
|
+
}
|
|
127
|
+
/** Verify a LIVE STATE block's HMAC signature. Returns whether the
|
|
128
|
+
* signature matches the canonical state inside the block. */
|
|
129
|
+
export function verifyLiveState(block, secret) {
|
|
130
|
+
if (!block.includes(LIVE_BEGIN) || !block.includes(LIVE_END))
|
|
131
|
+
return { ok: false, reason: "no live-state markers" };
|
|
132
|
+
const m = block.match(/Local Mneme version \(installed right now\):\*\*\s+([^\n]+)/);
|
|
133
|
+
const np = block.match(/npm latest \(cached from telepathy\):\*\*\s+([^\n]+)/);
|
|
134
|
+
const gen = block.match(/Generated at:\*\*\s+([^\n]+)/);
|
|
135
|
+
const sigM = block.match(/Signature:\*\*\s+`([0-9a-f]+)…`/);
|
|
136
|
+
if (!m || !gen || !sigM)
|
|
137
|
+
return { ok: false, reason: "could not parse fields from block" };
|
|
138
|
+
const localVersion = m[1].trim();
|
|
139
|
+
const npmLatest = np && np[1].trim() !== "not cached" ? np[1].trim() : null;
|
|
140
|
+
const generatedAt = gen[1].trim();
|
|
141
|
+
// Extract recent commits
|
|
142
|
+
const commits = [];
|
|
143
|
+
const commitRe = /- `([0-9a-f]{6,12})` — (.+)/g;
|
|
144
|
+
let cm;
|
|
145
|
+
while ((cm = commitRe.exec(block)) !== null)
|
|
146
|
+
commits.push({ sha: cm[1], subject: cm[2] });
|
|
147
|
+
const canon = JSON.stringify({
|
|
148
|
+
localVersion,
|
|
149
|
+
npmLatest,
|
|
150
|
+
recentCommits: commits.map((c) => `${c.sha}|${c.subject}`),
|
|
151
|
+
generatedAt,
|
|
152
|
+
});
|
|
153
|
+
const expected = createHmac("sha256", secret).update(canon).digest("hex");
|
|
154
|
+
const got16 = sigM[1];
|
|
155
|
+
return expected.startsWith(got16) ? { ok: true } : { ok: false, reason: "signature mismatch" };
|
|
156
|
+
}
|
|
157
|
+
/** One-line pulse summary. */
|
|
158
|
+
export function formatLiveStatePulseLine(live) {
|
|
159
|
+
return `LIVE-STATE · v=${live.state.localVersion} · npm=${live.state.npmLatest ?? "?"} · commits=${live.state.recentCommits.length} · sig=${live.sig.slice(0, 8)}`;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=live_state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live_state.js","sourceRoot":"","sources":["../../src/handoff/live_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live_state.test.d.ts","sourceRoot":"","sources":["../../src/handoff/live_state.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mkdtempSync, writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { buildLiveState, injectLiveState, stripExistingLiveState, verifyLiveState, formatLiveStatePulseLine } from "./live_state.js";
|
|
6
|
+
function fakeRepo(version = "2.9.1") {
|
|
7
|
+
const root = mkdtempSync(join(tmpdir(), "mneme-livestate-test-"));
|
|
8
|
+
mkdirSync(join(root, "packages", "cli"), { recursive: true });
|
|
9
|
+
writeFileSync(join(root, "packages", "cli", "package.json"), JSON.stringify({ version }));
|
|
10
|
+
mkdirSync(join(root, ".mneme", "telepathy"), { recursive: true });
|
|
11
|
+
writeFileSync(join(root, ".mneme", "telepathy", "npm-cache.json"), JSON.stringify({ version: "2.9.0", savedAt: Date.now() }));
|
|
12
|
+
return root;
|
|
13
|
+
}
|
|
14
|
+
describe("v2.9.1 LIVE STATE injector", () => {
|
|
15
|
+
it("reads the local version from packages/cli/package.json", () => {
|
|
16
|
+
const r = fakeRepo("9.9.9");
|
|
17
|
+
const live = buildLiveState({ repoRoot: r });
|
|
18
|
+
expect(live.state.localVersion).toBe("9.9.9");
|
|
19
|
+
});
|
|
20
|
+
it("reads npm-latest from telepathy cache", () => {
|
|
21
|
+
const r = fakeRepo();
|
|
22
|
+
const live = buildLiveState({ repoRoot: r });
|
|
23
|
+
expect(live.state.npmLatest).toBe("2.9.0");
|
|
24
|
+
});
|
|
25
|
+
it("renders a SUPERSEDES directive in the block", () => {
|
|
26
|
+
const r = fakeRepo();
|
|
27
|
+
const live = buildLiveState({ repoRoot: r });
|
|
28
|
+
expect(live.block).toContain("SUPERSEDES OLDER VERSION");
|
|
29
|
+
expect(live.block).toContain("MNEME LIVE STATE");
|
|
30
|
+
expect(live.block).toContain("trust THIS block");
|
|
31
|
+
});
|
|
32
|
+
it("injectLiveState prepends to a stale soul prompt", () => {
|
|
33
|
+
const r = fakeRepo("2.9.1");
|
|
34
|
+
const stale = "## Context\nMneme v1.95 — 27/29 findings fixed.";
|
|
35
|
+
const { combined } = injectLiveState(stale, { repoRoot: r });
|
|
36
|
+
expect(combined.indexOf("MNEME LIVE STATE")).toBeLessThan(combined.indexOf("Mneme v1.95"));
|
|
37
|
+
expect(combined).toContain("2.9.1");
|
|
38
|
+
expect(combined).toContain("v1.95"); // stale text preserved BUT below the LIVE STATE override
|
|
39
|
+
});
|
|
40
|
+
it("stripExistingLiveState removes a previously-injected block", () => {
|
|
41
|
+
const r = fakeRepo();
|
|
42
|
+
const stale = "## Context\nstuff";
|
|
43
|
+
const { combined } = injectLiveState(stale, { repoRoot: r });
|
|
44
|
+
const stripped = stripExistingLiveState(combined);
|
|
45
|
+
expect(stripped).not.toContain("MNEME LIVE STATE");
|
|
46
|
+
expect(stripped).toContain("## Context");
|
|
47
|
+
});
|
|
48
|
+
it("re-injecting doesn't accumulate blocks", () => {
|
|
49
|
+
const r = fakeRepo();
|
|
50
|
+
const a = injectLiveState("payload", { repoRoot: r }).combined;
|
|
51
|
+
const b = injectLiveState(a, { repoRoot: r }).combined;
|
|
52
|
+
const count = (b.match(/MNEME LIVE STATE START/g) ?? []).length;
|
|
53
|
+
expect(count).toBe(1);
|
|
54
|
+
});
|
|
55
|
+
it("verifyLiveState passes for an untampered block", () => {
|
|
56
|
+
const r = fakeRepo();
|
|
57
|
+
const live = buildLiveState({ repoRoot: r, secret: "x" });
|
|
58
|
+
const v = verifyLiveState(live.block, "x");
|
|
59
|
+
expect(v.ok).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
it("verifyLiveState catches a tampered version field", () => {
|
|
62
|
+
const r = fakeRepo("2.9.1");
|
|
63
|
+
const live = buildLiveState({ repoRoot: r, secret: "x" });
|
|
64
|
+
const tampered = live.block.replace("2.9.1", "9.9.9");
|
|
65
|
+
const v = verifyLiveState(tampered, "x");
|
|
66
|
+
expect(v.ok).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it("verifyLiveState catches the wrong secret", () => {
|
|
69
|
+
const r = fakeRepo();
|
|
70
|
+
const live = buildLiveState({ repoRoot: r, secret: "right" });
|
|
71
|
+
const v = verifyLiveState(live.block, "wrong");
|
|
72
|
+
expect(v.ok).toBe(false);
|
|
73
|
+
});
|
|
74
|
+
it("formatLiveStatePulseLine emits a compact summary", () => {
|
|
75
|
+
const r = fakeRepo();
|
|
76
|
+
const live = buildLiveState({ repoRoot: r });
|
|
77
|
+
const line = formatLiveStatePulseLine(live);
|
|
78
|
+
expect(line).toContain("LIVE-STATE");
|
|
79
|
+
expect(line).toContain("v=");
|
|
80
|
+
expect(line).toContain("sig=");
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=live_state.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live_state.test.js","sourceRoot":"","sources":["../../src/handoff/live_state.test.ts"],"names":[],"mappings":"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"}
|