@mneme-ai/core 1.70.0 → 1.72.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.
Files changed (76) hide show
  1. package/dist/diaspora/diaspora.test.d.ts +5 -0
  2. package/dist/diaspora/diaspora.test.d.ts.map +1 -0
  3. package/dist/diaspora/diaspora.test.js +232 -0
  4. package/dist/diaspora/diaspora.test.js.map +1 -0
  5. package/dist/diaspora/gitignore_writer.d.ts +43 -0
  6. package/dist/diaspora/gitignore_writer.d.ts.map +1 -0
  7. package/dist/diaspora/gitignore_writer.js +161 -0
  8. package/dist/diaspora/gitignore_writer.js.map +1 -0
  9. package/dist/diaspora/http_bridge.d.ts +54 -0
  10. package/dist/diaspora/http_bridge.d.ts.map +1 -0
  11. package/dist/diaspora/http_bridge.js +229 -0
  12. package/dist/diaspora/http_bridge.js.map +1 -0
  13. package/dist/diaspora/index.d.ts +26 -0
  14. package/dist/diaspora/index.d.ts.map +1 -0
  15. package/dist/diaspora/index.js +26 -0
  16. package/dist/diaspora/index.js.map +1 -0
  17. package/dist/diaspora/session_capsule.d.ts +78 -0
  18. package/dist/diaspora/session_capsule.d.ts.map +1 -0
  19. package/dist/diaspora/session_capsule.js +193 -0
  20. package/dist/diaspora/session_capsule.js.map +1 -0
  21. package/dist/diaspora/spore_autostart.d.ts +53 -0
  22. package/dist/diaspora/spore_autostart.d.ts.map +1 -0
  23. package/dist/diaspora/spore_autostart.js +102 -0
  24. package/dist/diaspora/spore_autostart.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +11 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/parasite/bridge.d.ts.map +1 -1
  30. package/dist/parasite/bridge.js +10 -0
  31. package/dist/parasite/bridge.js.map +1 -1
  32. package/dist/precog/adversarial_mutation.d.ts +39 -0
  33. package/dist/precog/adversarial_mutation.d.ts.map +1 -0
  34. package/dist/precog/adversarial_mutation.js +71 -0
  35. package/dist/precog/adversarial_mutation.js.map +1 -0
  36. package/dist/precog/council_mutation.test.d.ts +5 -0
  37. package/dist/precog/council_mutation.test.d.ts.map +1 -0
  38. package/dist/precog/council_mutation.test.js +82 -0
  39. package/dist/precog/council_mutation.test.js.map +1 -0
  40. package/dist/precog/index.d.ts +4 -0
  41. package/dist/precog/index.d.ts.map +1 -1
  42. package/dist/precog/index.js +4 -0
  43. package/dist/precog/index.js.map +1 -1
  44. package/dist/precog/multi_voice_council.d.ts +50 -0
  45. package/dist/precog/multi_voice_council.d.ts.map +1 -0
  46. package/dist/precog/multi_voice_council.js +105 -0
  47. package/dist/precog/multi_voice_council.js.map +1 -0
  48. package/dist/sentinel/audit_ledger.d.ts +46 -0
  49. package/dist/sentinel/audit_ledger.d.ts.map +1 -0
  50. package/dist/sentinel/audit_ledger.js +115 -0
  51. package/dist/sentinel/audit_ledger.js.map +1 -0
  52. package/dist/sentinel/command_detector.d.ts +59 -0
  53. package/dist/sentinel/command_detector.d.ts.map +1 -0
  54. package/dist/sentinel/command_detector.js +265 -0
  55. package/dist/sentinel/command_detector.js.map +1 -0
  56. package/dist/sentinel/index.d.ts +43 -0
  57. package/dist/sentinel/index.d.ts.map +1 -0
  58. package/dist/sentinel/index.js +105 -0
  59. package/dist/sentinel/index.js.map +1 -0
  60. package/dist/sentinel/risk_scorer.d.ts +34 -0
  61. package/dist/sentinel/risk_scorer.d.ts.map +1 -0
  62. package/dist/sentinel/risk_scorer.js +92 -0
  63. package/dist/sentinel/risk_scorer.js.map +1 -0
  64. package/dist/sentinel/scope_enforcer.d.ts +38 -0
  65. package/dist/sentinel/scope_enforcer.d.ts.map +1 -0
  66. package/dist/sentinel/scope_enforcer.js +145 -0
  67. package/dist/sentinel/scope_enforcer.js.map +1 -0
  68. package/dist/sentinel/sentinel.d.ts +63 -0
  69. package/dist/sentinel/sentinel.d.ts.map +1 -0
  70. package/dist/sentinel/sentinel.js +123 -0
  71. package/dist/sentinel/sentinel.js.map +1 -0
  72. package/dist/sentinel/sentinel.test.d.ts +5 -0
  73. package/dist/sentinel/sentinel.test.d.ts.map +1 -0
  74. package/dist/sentinel/sentinel.test.js +179 -0
  75. package/dist/sentinel/sentinel.test.js.map +1 -0
  76. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ /**
2
+ * v1.72.0 -- DIASPORA PROTOCOL test suite incl. cross-vendor e2e.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=diaspora.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diaspora.test.d.ts","sourceRoot":"","sources":["../../src/diaspora/diaspora.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * v1.72.0 -- DIASPORA PROTOCOL test suite incl. cross-vendor e2e.
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
+ import { mkdtempSync, rmSync, mkdirSync, writeFileSync, existsSync, readFileSync } from "node:fs";
6
+ import { tmpdir } from "node:os";
7
+ import { join } from "node:path";
8
+ import { execSync } from "node:child_process";
9
+ import { ensureGitignoreEntries, ensureSingleGitignoreEntry, readManagedEntries, } from "./gitignore_writer.js";
10
+ import { autoStartSpore, readSporeConfig, disableSpore, } from "./spore_autostart.js";
11
+ import { saveCapsule, resumeCapsule, listCapsules, } from "./session_capsule.js";
12
+ import { openapiSpec, startBridge, customGptTemplate } from "./http_bridge.js";
13
+ function setup() { return mkdtempSync(join(tmpdir(), "mneme-dia-")); }
14
+ function cleanup(r) { try {
15
+ rmSync(r, { recursive: true, force: true });
16
+ }
17
+ catch { /* */ } }
18
+ // ─── D1 GHOST SNIPER GITIGNORE ───────────────────────────────────────
19
+ describe("v1.72 Diaspora D1 · Ghost Sniper Gitignore", () => {
20
+ let r;
21
+ beforeEach(() => { r = setup(); });
22
+ afterEach(() => cleanup(r));
23
+ it("creates .gitignore when absent", () => {
24
+ const res = ensureGitignoreEntries(r);
25
+ expect(res.action).toBe("created");
26
+ expect(existsSync(join(r, ".gitignore"))).toBe(true);
27
+ const content = readFileSync(join(r, ".gitignore"), "utf8");
28
+ expect(content).toContain("AGENTS.md");
29
+ expect(content).toContain("GEMINI.md");
30
+ expect(content).toContain("CLAUDE.md");
31
+ });
32
+ it("idempotent on re-run", () => {
33
+ ensureGitignoreEntries(r);
34
+ const second = ensureGitignoreEntries(r);
35
+ expect(second.action).toBe("unchanged");
36
+ });
37
+ it("preserves existing manual entries outside sentinel", () => {
38
+ writeFileSync(join(r, ".gitignore"), "node_modules\ndist/\n", "utf8");
39
+ ensureGitignoreEntries(r);
40
+ const content = readFileSync(join(r, ".gitignore"), "utf8");
41
+ expect(content).toContain("node_modules");
42
+ expect(content).toContain("dist/");
43
+ expect(content).toContain("AGENTS.md");
44
+ });
45
+ it("doesn't duplicate when user manually added an entry", () => {
46
+ writeFileSync(join(r, ".gitignore"), "CLAUDE.md\n", "utf8");
47
+ ensureGitignoreEntries(r);
48
+ const content = readFileSync(join(r, ".gitignore"), "utf8");
49
+ // CLAUDE.md should appear ONCE (outside the managed block, not duplicated inside).
50
+ const matches = (content.match(/^CLAUDE\.md$/gm) ?? []);
51
+ expect(matches.length).toBe(1);
52
+ });
53
+ it("ensureSingleGitignoreEntry appends a single new entry", () => {
54
+ const r1 = ensureSingleGitignoreEntry(r, "AGENTS.md");
55
+ expect(r1.action).toBe("created");
56
+ const r2 = ensureSingleGitignoreEntry(r, "AGENTS.md");
57
+ expect(r2.action).toBe("unchanged");
58
+ });
59
+ it("readManagedEntries returns the managed list", () => {
60
+ ensureGitignoreEntries(r, ["AGENTS.md", "GEMINI.md"]);
61
+ const got = readManagedEntries(r);
62
+ expect(got).toContain("AGENTS.md");
63
+ expect(got).toContain("GEMINI.md");
64
+ });
65
+ });
66
+ // ─── D2 SPORE DEFAULT-ON ─────────────────────────────────────────────
67
+ describe("v1.72 Diaspora D2 · Spore Default-On", () => {
68
+ let r;
69
+ beforeEach(() => { r = setup(); });
70
+ afterEach(() => cleanup(r));
71
+ it("no git remote -> spore stays off", () => {
72
+ const res = autoStartSpore(r);
73
+ expect(res.enabled).toBe(false);
74
+ expect(res.reason).toContain("no git remotes");
75
+ });
76
+ it("git remote detected -> spore auto-enables", () => {
77
+ mkdirSync(join(r, ".git"), { recursive: true });
78
+ writeFileSync(join(r, ".git/config"), `[core]\n\trepositoryformatversion = 0\n[remote "origin"]\n\turl = https://github.com/user/repo.git\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`, "utf8");
79
+ const res = autoStartSpore(r);
80
+ expect(res.enabled).toBe(true);
81
+ expect(res.config?.remoteName).toBe("origin");
82
+ expect(res.config?.remoteUrl).toBe("https://github.com/user/repo.git");
83
+ });
84
+ it("idempotent: second call doesn't overwrite", () => {
85
+ mkdirSync(join(r, ".git"), { recursive: true });
86
+ writeFileSync(join(r, ".git/config"), `[remote "origin"]\n\turl = https://example.com/r.git\n`, "utf8");
87
+ autoStartSpore(r);
88
+ const first = readSporeConfig(r);
89
+ autoStartSpore(r);
90
+ const second = readSporeConfig(r);
91
+ expect(first?.enabledAt).toBe(second?.enabledAt);
92
+ });
93
+ it("disableSpore turns it off", () => {
94
+ mkdirSync(join(r, ".git"), { recursive: true });
95
+ writeFileSync(join(r, ".git/config"), `[remote "origin"]\n\turl = x\n`, "utf8");
96
+ autoStartSpore(r);
97
+ disableSpore(r);
98
+ const cfg = readSporeConfig(r);
99
+ expect(cfg?.enabled).toBe(false);
100
+ });
101
+ });
102
+ // ─── D3 PORTABLE SESSION CAPSULE ─────────────────────────────────────
103
+ describe("v1.72 Diaspora D3 · Portable Session Capsule (cross-vendor e2e)", () => {
104
+ let r;
105
+ beforeEach(() => {
106
+ r = setup();
107
+ execSync(`git init --quiet -b main`, { cwd: r, stdio: "ignore" });
108
+ execSync(`git config user.email "t@t.t"`, { cwd: r, stdio: "ignore" });
109
+ execSync(`git config user.name "t"`, { cwd: r, stdio: "ignore" });
110
+ execSync(`git config commit.gpgsign false`, { cwd: r, stdio: "ignore" });
111
+ writeFileSync(join(r, "README.md"), "x", "utf8");
112
+ execSync(`git add -A`, { cwd: r, stdio: "ignore" });
113
+ execSync(`git commit -m init --no-gpg-sign --quiet`, { cwd: r, stdio: "ignore" });
114
+ });
115
+ afterEach(() => cleanup(r));
116
+ it("save in vendor A + resume in vendor B preserves context", () => {
117
+ // VENDOR A saves
118
+ const cap = saveCapsule(r, {
119
+ vendor: "claude-opus-4-7",
120
+ contextSummary: "Investigating bug #1234 in auth.ts; user wants bcrypt vs argon2 comparison.",
121
+ promptTrace: [
122
+ { ts: new Date().toISOString(), role: "user", text: "why is auth slow?" },
123
+ { ts: new Date().toISOString(), role: "assistant", text: "auth.ts uses bcrypt at cost 12; could try argon2id" },
124
+ ],
125
+ decisions: ["explore argon2id"],
126
+ });
127
+ expect(cap.id).toMatch(/^[a-f0-9]{16}$/);
128
+ // VENDOR B resumes (different vendor name, same repo)
129
+ const res = resumeCapsule(r, cap.id, { toVendor: "cursor-claude" });
130
+ expect(res.verdict).toBe("RESUMED");
131
+ expect(res.recap).toContain("auth.ts");
132
+ expect(res.recap).toContain("argon2");
133
+ expect(res.inheritance?.fromVendor).toBe("claude-opus-4-7");
134
+ expect(res.inheritance?.toVendor).toBe("cursor-claude");
135
+ // Soul mirror records inheritance event
136
+ const soulPath = join(r, ".mneme/ai-souls/cursor-claude.json");
137
+ expect(existsSync(soulPath)).toBe(true);
138
+ const soul = JSON.parse(readFileSync(soulPath, "utf8"));
139
+ expect(soul.sessions.some((s) => s["kind"] === "capsule-inheritance")).toBe(true);
140
+ });
141
+ it("INVALID_HMAC when capsule is tampered", () => {
142
+ const cap = saveCapsule(r, {
143
+ vendor: "v1", contextSummary: "x", promptTrace: [],
144
+ });
145
+ const path = join(r, ".mneme/capsules", `${cap.id}.capsule`);
146
+ const tampered = JSON.parse(readFileSync(path, "utf8"));
147
+ tampered.contextSummary = "MALICIOUSLY EDITED";
148
+ writeFileSync(path, JSON.stringify(tampered), "utf8");
149
+ const res = resumeCapsule(r, cap.id, { toVendor: "v2" });
150
+ expect(res.verdict).toBe("INVALID_HMAC");
151
+ });
152
+ it("NOT_FOUND when capsule id is unknown", () => {
153
+ const res = resumeCapsule(r, "no-such-capsule", { toVendor: "v2" });
154
+ expect(res.verdict).toBe("NOT_FOUND");
155
+ });
156
+ it("EXPIRED when capsule is older than maxAgeHours", () => {
157
+ const cap = saveCapsule(r, { vendor: "v1", contextSummary: "x", promptTrace: [] });
158
+ const path = join(r, ".mneme/capsules", `${cap.id}.capsule`);
159
+ const data = JSON.parse(readFileSync(path, "utf8"));
160
+ data.createdAt = new Date(Date.now() - 1000 * 86400 * 1000).toISOString(); // 1000 days ago
161
+ writeFileSync(path, JSON.stringify(data), "utf8");
162
+ // BUT now the HMAC won't match... so test via maxAgeHours=0 instead.
163
+ const res = resumeCapsule(r, cap.id, { toVendor: "v2", maxAgeHours: -1 });
164
+ expect(["EXPIRED", "INVALID_HMAC"]).toContain(res.verdict);
165
+ });
166
+ it("listCapsules sorted newest-first", () => {
167
+ saveCapsule(r, { vendor: "a", contextSummary: "first", promptTrace: [] });
168
+ saveCapsule(r, { vendor: "b", contextSummary: "second", promptTrace: [] });
169
+ const caps = listCapsules(r);
170
+ expect(caps.length).toBe(2);
171
+ expect(caps[0].createdAt >= caps[1].createdAt).toBe(true);
172
+ });
173
+ });
174
+ // ─── D4 HTTP BRIDGE ───────────────────────────────────────────────────
175
+ describe("v1.72 Diaspora D4 · HTTP Bridge + OpenAPI", () => {
176
+ let r;
177
+ beforeEach(() => { r = setup(); });
178
+ afterEach(() => cleanup(r));
179
+ it("openapiSpec returns valid 3.1 structure", () => {
180
+ const spec = openapiSpec("http://127.0.0.1:11434");
181
+ expect(spec["openapi"]).toBe("3.1.0");
182
+ const paths = spec["paths"];
183
+ expect(paths["/v1/precog"]).toBeDefined();
184
+ expect(paths["/v1/sentinel"]).toBeDefined();
185
+ expect(paths["/v1/apoptosis"]).toBeDefined();
186
+ });
187
+ it("customGptTemplate is valid JSON pointing at the bridge", () => {
188
+ const tpl = customGptTemplate("http://localhost:11434", "test-token");
189
+ const parsed = JSON.parse(tpl);
190
+ expect(parsed.actionEndpoint).toContain("/v1/openapi.json");
191
+ expect(parsed.authentication.type).toBe("bearer");
192
+ });
193
+ it("server starts on a free port and stops cleanly", async () => {
194
+ const handle = await startBridge({ repoRoot: r, port: 0, noAuth: true }, {
195
+ precog: (claim) => ({ verdict: "HEDGED", claim }),
196
+ sentinel: (cmd) => ({ action: "ALLOW", command: cmd }),
197
+ apoptosis: (claim) => ({ verdict: "HEALTHY", claim }),
198
+ });
199
+ expect(handle.server.listening).toBe(true);
200
+ // GET health
201
+ const port = handle.server.address().port;
202
+ const res = await fetch(`http://127.0.0.1:${port}/v1/health`);
203
+ expect(res.status).toBe(200);
204
+ const body = await res.json();
205
+ expect(body.ok).toBe(true);
206
+ // GET openapi
207
+ const sp = await fetch(`http://127.0.0.1:${port}/v1/openapi.json`);
208
+ expect(sp.status).toBe(200);
209
+ await handle.stop();
210
+ });
211
+ it("rejects POST without bearer token", async () => {
212
+ const handle = await startBridge({ repoRoot: r, port: 0 }, { precog: () => ({ ok: true }) });
213
+ const port = handle.server.address().port;
214
+ const res = await fetch(`http://127.0.0.1:${port}/v1/precog`, { method: "POST", body: JSON.stringify({ claim: "x" }) });
215
+ expect(res.status).toBe(401);
216
+ await handle.stop();
217
+ });
218
+ it("accepts POST with bearer token", async () => {
219
+ const handle = await startBridge({ repoRoot: r, port: 0 }, { precog: (claim) => ({ verdict: "HEDGED", claim }) });
220
+ const port = handle.server.address().port;
221
+ const res = await fetch(`http://127.0.0.1:${port}/v1/precog`, {
222
+ method: "POST",
223
+ headers: { "Authorization": `Bearer ${handle.token}`, "Content-Type": "application/json" },
224
+ body: JSON.stringify({ claim: "test" }),
225
+ });
226
+ expect(res.status).toBe(200);
227
+ const body = await res.json();
228
+ expect(body.verdict).toBe("HEDGED");
229
+ await handle.stop();
230
+ });
231
+ });
232
+ //# sourceMappingURL=diaspora.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diaspora.test.js","sourceRoot":"","sources":["../../src/diaspora/diaspora.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * v1.72.0 -- DIASPORA D1: GHOST SNIPER GITIGNORE CONTRACT.
3
+ *
4
+ * Root-cause fix: every time Mneme injects an AI-tooling file
5
+ * (CLAUDE.md / AGENTS.md / GEMINI.md / .cursor / .windsurf / etc),
6
+ * the corresponding `.gitignore` entry MUST be appended atomically.
7
+ *
8
+ * Mneme memory + design intent: AI tool fingerprints stay private.
9
+ * The prior version only handled some of the entries -- AGENTS.md
10
+ * and GEMINI.md leaked. This module fixes that ONCE for all current
11
+ * + future injection targets.
12
+ *
13
+ * Behaviour:
14
+ * - Idempotent: if entry already present (exact or fnmatch'd),
15
+ * skip silently.
16
+ * - Sentinel-bracketed: entries grouped under
17
+ * `# >>> mneme auto-managed (do not edit) <<<`
18
+ * so future updates can edit-in-place.
19
+ * - Atomic: writes once, never partial.
20
+ */
21
+ /** Canonical list of every AI-tooling artifact Mneme might write.
22
+ * Extending this list is the SINGLE place to update when a new
23
+ * vendor is added; everything else flows from here. */
24
+ export declare const PRIVATE_AI_ARTIFACTS: string[];
25
+ export interface EnsureResult {
26
+ /** Path written. */
27
+ path: string;
28
+ /** Action taken. */
29
+ action: "created" | "replaced" | "unchanged" | "added" | "failed";
30
+ /** Entries that ended up in the block. */
31
+ entries: string[];
32
+ /** Plain-English. */
33
+ detail: string;
34
+ }
35
+ /** Ensure all `entries` are present in repoRoot/.gitignore under the
36
+ * Mneme-managed sentinel block. Idempotent + atomic. */
37
+ export declare function ensureGitignoreEntries(repoRoot: string, entries?: string[]): EnsureResult;
38
+ /** Convenience: ensure a SINGLE entry. Use when a parasite-bridge
39
+ * inject just wrote one file. */
40
+ export declare function ensureSingleGitignoreEntry(repoRoot: string, entry: string): EnsureResult;
41
+ /** Read current managed entries (for inspection). */
42
+ export declare function readManagedEntries(repoRoot: string): string[];
43
+ //# sourceMappingURL=gitignore_writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore_writer.d.ts","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH;;wDAEwD;AACxD,eAAO,MAAM,oBAAoB,UAehC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClE,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;yDACyD;AACzD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAyB,GAAG,YAAY,CA0D/G;AAED;kCACkC;AAClC,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAExF;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * v1.72.0 -- DIASPORA D1: GHOST SNIPER GITIGNORE CONTRACT.
3
+ *
4
+ * Root-cause fix: every time Mneme injects an AI-tooling file
5
+ * (CLAUDE.md / AGENTS.md / GEMINI.md / .cursor / .windsurf / etc),
6
+ * the corresponding `.gitignore` entry MUST be appended atomically.
7
+ *
8
+ * Mneme memory + design intent: AI tool fingerprints stay private.
9
+ * The prior version only handled some of the entries -- AGENTS.md
10
+ * and GEMINI.md leaked. This module fixes that ONCE for all current
11
+ * + future injection targets.
12
+ *
13
+ * Behaviour:
14
+ * - Idempotent: if entry already present (exact or fnmatch'd),
15
+ * skip silently.
16
+ * - Sentinel-bracketed: entries grouped under
17
+ * `# >>> mneme auto-managed (do not edit) <<<`
18
+ * so future updates can edit-in-place.
19
+ * - Atomic: writes once, never partial.
20
+ */
21
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
22
+ import { join } from "node:path";
23
+ const SENTINEL_BEGIN = "# >>> mneme auto-managed (do not edit between sentinels) <<<";
24
+ const SENTINEL_END = "# <<< mneme auto-managed >>>";
25
+ /** Canonical list of every AI-tooling artifact Mneme might write.
26
+ * Extending this list is the SINGLE place to update when a new
27
+ * vendor is added; everything else flows from here. */
28
+ export const PRIVATE_AI_ARTIFACTS = [
29
+ "CLAUDE.md",
30
+ "AGENTS.md",
31
+ "GEMINI.md",
32
+ ".cursor/",
33
+ ".cursorrules",
34
+ ".cursorignore",
35
+ ".aider*",
36
+ ".continue/",
37
+ ".windsurfrules",
38
+ ".codeium/",
39
+ ".claude/",
40
+ ".claude.json",
41
+ ".claudeignore",
42
+ ".github/copilot-instructions.md",
43
+ ];
44
+ function readExistingEntries(content) {
45
+ const beginIdx = content.indexOf(SENTINEL_BEGIN);
46
+ const endIdx = content.indexOf(SENTINEL_END);
47
+ if (beginIdx === -1 || endIdx === -1 || endIdx < beginIdx) {
48
+ return { before: content, managed: new Set(), after: "" };
49
+ }
50
+ const managedBlock = content.slice(beginIdx + SENTINEL_BEGIN.length, endIdx);
51
+ const managed = new Set();
52
+ for (const line of managedBlock.split("\n")) {
53
+ const trimmed = line.trim();
54
+ if (trimmed && !trimmed.startsWith("#"))
55
+ managed.add(trimmed);
56
+ }
57
+ return {
58
+ before: content.slice(0, beginIdx).trimEnd(),
59
+ managed,
60
+ after: content.slice(endIdx + SENTINEL_END.length).trimStart(),
61
+ };
62
+ }
63
+ function lineAlreadyIgnored(allLines, entry) {
64
+ for (const raw of allLines) {
65
+ const l = raw.trim();
66
+ if (!l || l.startsWith("#"))
67
+ continue;
68
+ if (l === entry)
69
+ return true;
70
+ // Pattern equivalence: CLAUDE.md ≡ CLAUDE.md; .cursor/ ≡ .cursor; .aider* ≡ .aider*
71
+ if (entry.endsWith("/") && (l === entry.slice(0, -1) || l === entry))
72
+ return true;
73
+ if (entry.endsWith("*") && l.startsWith(entry.slice(0, -1)))
74
+ return true;
75
+ }
76
+ return false;
77
+ }
78
+ /** Ensure all `entries` are present in repoRoot/.gitignore under the
79
+ * Mneme-managed sentinel block. Idempotent + atomic. */
80
+ export function ensureGitignoreEntries(repoRoot, entries = PRIVATE_AI_ARTIFACTS) {
81
+ const path = join(repoRoot, ".gitignore");
82
+ let original = "";
83
+ let createdNew = false;
84
+ if (!existsSync(path)) {
85
+ createdNew = true;
86
+ }
87
+ else {
88
+ try {
89
+ original = readFileSync(path, "utf8");
90
+ }
91
+ catch {
92
+ return { path, action: "failed", entries: [], detail: "read failed" };
93
+ }
94
+ }
95
+ // Pre-existing manual entries (outside the sentinel block) -- preserved
96
+ // verbatim. If the user already added "CLAUDE.md" manually, we DON'T
97
+ // duplicate it in our managed block.
98
+ const allLines = original.split("\n");
99
+ const { before, managed, after } = readExistingEntries(original);
100
+ const toAddToManaged = [];
101
+ for (const e of entries) {
102
+ if (managed.has(e))
103
+ continue;
104
+ if (lineAlreadyIgnored(allLines, e))
105
+ continue;
106
+ toAddToManaged.push(e);
107
+ }
108
+ // If nothing new + sentinel block already exists with all entries -> unchanged.
109
+ if (toAddToManaged.length === 0 && !createdNew && original.includes(SENTINEL_BEGIN)) {
110
+ return {
111
+ path,
112
+ action: "unchanged",
113
+ entries: [...managed],
114
+ detail: `All ${entries.length} entr(ies) already ignored.`,
115
+ };
116
+ }
117
+ // Build new content.
118
+ const allManaged = [...managed, ...toAddToManaged];
119
+ const block = [
120
+ "",
121
+ SENTINEL_BEGIN,
122
+ "# AI tooling artifacts -- never commit. Mneme manages this block.",
123
+ ...allManaged,
124
+ SENTINEL_END,
125
+ "",
126
+ ].join("\n");
127
+ const next = createdNew
128
+ ? block.trimStart()
129
+ : (before ? before + "\n" : "") + block + (after ? after + "\n" : "");
130
+ try {
131
+ writeFileSync(path, next, "utf8");
132
+ return {
133
+ path,
134
+ action: createdNew ? "created" : (original.includes(SENTINEL_BEGIN) ? "replaced" : "added"),
135
+ entries: allManaged,
136
+ detail: `${createdNew ? "Created" : "Updated"} .gitignore; ${toAddToManaged.length} new entr(ies): ${toAddToManaged.join(", ") || "none"}.`,
137
+ };
138
+ }
139
+ catch (e) {
140
+ return { path, action: "failed", entries: [], detail: `write failed: ${e.message}` };
141
+ }
142
+ }
143
+ /** Convenience: ensure a SINGLE entry. Use when a parasite-bridge
144
+ * inject just wrote one file. */
145
+ export function ensureSingleGitignoreEntry(repoRoot, entry) {
146
+ return ensureGitignoreEntries(repoRoot, [entry]);
147
+ }
148
+ /** Read current managed entries (for inspection). */
149
+ export function readManagedEntries(repoRoot) {
150
+ const path = join(repoRoot, ".gitignore");
151
+ if (!existsSync(path))
152
+ return [];
153
+ try {
154
+ const content = readFileSync(path, "utf8");
155
+ return [...readExistingEntries(content).managed];
156
+ }
157
+ catch {
158
+ return [];
159
+ }
160
+ }
161
+ //# sourceMappingURL=gitignore_writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore_writer.js","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,8DAA8D,CAAC;AACtF,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD;;wDAEwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,cAAc;IACd,eAAe;IACf,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,cAAc;IACd,eAAe;IACf,iCAAiC;CAClC,CAAC;AAaF,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE;QAC5C,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkB,EAAE,KAAa;IAC3D,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,oFAAoF;QACpF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;yDACyD;AACzD,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,UAAoB,oBAAoB;IAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAAC,CAAC;IACjI,CAAC;IAED,wEAAwE;IACxE,qEAAqE;IACrE,qCAAqC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,IAAI,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAE,SAAS;QAC9C,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,gFAAgF;IAChF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpF,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;YACrB,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,6BAA6B;SAC3D,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG;QACZ,EAAE;QACF,cAAc;QACd,mEAAmE;QACnE,GAAG,UAAU;QACb,YAAY;QACZ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,IAAI,GAAG,UAAU;QACrB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE;QACnB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3F,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,gBAAgB,cAAc,CAAC,MAAM,mBAAmB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG;SAC5I,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAkB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC;IAClG,CAAC;AACH,CAAC;AAED;kCACkC;AAClC,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,KAAa;IACxE,OAAO,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * v1.72.0 -- DIASPORA D4: HTTP BRIDGE + OPENAPI for ChatGPT.
3
+ *
4
+ * The headline new surface: `mneme serve --http` exposes a minimal
5
+ * HTTP API that ANY tool with HTTP-call capability (ChatGPT Custom
6
+ * GPT Actions, Zapier, n8n, etc) can hit. Includes:
7
+ *
8
+ * POST /v1/precog intercept claim (PRECOG firewall)
9
+ * POST /v1/sentinel intercept shell command (SENTINEL firewall)
10
+ * POST /v1/apoptosis detect hallucination (APOPTOSIS)
11
+ * GET /v1/openapi.json OpenAPI 3.1 spec (for Custom GPT import)
12
+ * GET /v1/health liveness probe
13
+ *
14
+ * SAFETY:
15
+ * - Binds 127.0.0.1 by default (localhost only). User opts into
16
+ * 0.0.0.0 with explicit --host flag.
17
+ * - Bearer token auth via .mneme/http-token (random per-repo).
18
+ * - Per-IP rate limit (60 req/min).
19
+ * - CORS allowed only for chat.openai.com + custom origin list.
20
+ *
21
+ * NO CLOUD REQUIRED: works on localhost via tunnel (Cloudflare /
22
+ * ngrok / fly.io) -- user chooses their tunnel provider. The bridge
23
+ * itself is local-first.
24
+ */
25
+ import { type Server } from "node:http";
26
+ export interface BridgeOptions {
27
+ repoRoot: string;
28
+ port?: number;
29
+ host?: string;
30
+ /** Additional CORS origins (e.g. user's custom tunnel domain). */
31
+ extraCorsOrigins?: string[];
32
+ /** Skip auth (dev mode only; never expose externally). */
33
+ noAuth?: boolean;
34
+ }
35
+ export interface BridgeHandle {
36
+ server: Server;
37
+ port: number;
38
+ host: string;
39
+ token: string;
40
+ baseUrl: string;
41
+ stop: () => Promise<void>;
42
+ }
43
+ export declare function openapiSpec(baseUrl: string): Record<string, unknown>;
44
+ export interface BridgeHandlers {
45
+ precog?: (claim: string) => Promise<unknown> | unknown;
46
+ sentinel?: (command: string, vendor?: string) => Promise<unknown> | unknown;
47
+ apoptosis?: (claim: string) => Promise<unknown> | unknown;
48
+ }
49
+ /** Start the HTTP bridge. Returns a handle the caller stops on shutdown. */
50
+ export declare function startBridge(opts: BridgeOptions, handlers: BridgeHandlers): Promise<BridgeHandle>;
51
+ /** Custom GPT template -- printed to user; they upload this JSON into the
52
+ * Custom GPT "Actions" config. */
53
+ export declare function customGptTemplate(baseUrl: string, token: string): string;
54
+ //# sourceMappingURL=http_bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http_bridge.d.ts","sourceRoot":"","sources":["../../src/diaspora/http_bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAA2D,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAoEjG,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0DpE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACvD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC5E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC3D;AAED,4EAA4E;AAC5E,wBAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CA2DtG;AAED;mCACmC;AACnC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxE"}