lemma-mcp 0.7.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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +474 -0
  3. package/README.tr.md +384 -0
  4. package/dist/guides/core.d.ts +33 -0
  5. package/dist/guides/core.d.ts.map +1 -0
  6. package/dist/guides/core.js +424 -0
  7. package/dist/guides/core.js.map +1 -0
  8. package/dist/guides/index.d.ts +2 -0
  9. package/dist/guides/index.d.ts.map +1 -0
  10. package/dist/guides/index.js +2 -0
  11. package/dist/guides/index.js.map +1 -0
  12. package/dist/guides/task-map.d.ts +3 -0
  13. package/dist/guides/task-map.d.ts.map +1 -0
  14. package/dist/guides/task-map.js +107 -0
  15. package/dist/guides/task-map.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +7 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/memory/config.d.ts +6 -0
  21. package/dist/memory/config.d.ts.map +1 -0
  22. package/dist/memory/config.js +69 -0
  23. package/dist/memory/config.js.map +1 -0
  24. package/dist/memory/core.d.ts +27 -0
  25. package/dist/memory/core.d.ts.map +1 -0
  26. package/dist/memory/core.js +415 -0
  27. package/dist/memory/core.js.map +1 -0
  28. package/dist/memory/index.d.ts +2 -0
  29. package/dist/memory/index.d.ts.map +1 -0
  30. package/dist/memory/index.js +2 -0
  31. package/dist/memory/index.js.map +1 -0
  32. package/dist/server/handlers.d.ts +131 -0
  33. package/dist/server/handlers.d.ts.map +1 -0
  34. package/dist/server/handlers.js +694 -0
  35. package/dist/server/handlers.js.map +1 -0
  36. package/dist/server/hooks.d.ts +16 -0
  37. package/dist/server/hooks.d.ts.map +1 -0
  38. package/dist/server/hooks.js +77 -0
  39. package/dist/server/hooks.js.map +1 -0
  40. package/dist/server/index.d.ts +5 -0
  41. package/dist/server/index.d.ts.map +1 -0
  42. package/dist/server/index.js +322 -0
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/system-prompt.d.ts +5 -0
  45. package/dist/server/system-prompt.d.ts.map +1 -0
  46. package/dist/server/system-prompt.js +143 -0
  47. package/dist/server/system-prompt.js.map +1 -0
  48. package/dist/server/tools.d.ts +22 -0
  49. package/dist/server/tools.d.ts.map +1 -0
  50. package/dist/server/tools.js +443 -0
  51. package/dist/server/tools.js.map +1 -0
  52. package/dist/sessions/core.d.ts +17 -0
  53. package/dist/sessions/core.d.ts.map +1 -0
  54. package/dist/sessions/core.js +162 -0
  55. package/dist/sessions/core.js.map +1 -0
  56. package/dist/sessions/index.d.ts +2 -0
  57. package/dist/sessions/index.d.ts.map +1 -0
  58. package/dist/sessions/index.js +2 -0
  59. package/dist/sessions/index.js.map +1 -0
  60. package/dist/sessions/virtual.d.ts +23 -0
  61. package/dist/sessions/virtual.d.ts.map +1 -0
  62. package/dist/sessions/virtual.js +157 -0
  63. package/dist/sessions/virtual.js.map +1 -0
  64. package/dist/types.d.ts +143 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +2 -0
  67. package/dist/types.js.map +1 -0
  68. package/package.json +62 -0
@@ -0,0 +1,162 @@
1
+ import os from "os";
2
+ import path from "path";
3
+ import fs from "fs";
4
+ import crypto from "crypto";
5
+ let SESSIONS_DIR = path.join(os.homedir(), ".lemma");
6
+ let SESSIONS_FILE = path.join(SESSIONS_DIR, "sessions.jsonl");
7
+ export function setSessionsDir(dir) {
8
+ SESSIONS_DIR = dir;
9
+ SESSIONS_FILE = path.join(SESSIONS_DIR, "sessions.jsonl");
10
+ }
11
+ export function generateSessionId() {
12
+ return "s" + crypto.randomUUID().replace(/-/g, "").substring(0, 12);
13
+ }
14
+ export function generateTraceId() {
15
+ return "t" + crypto.randomUUID().replace(/-/g, "").substring(0, 12);
16
+ }
17
+ export function loadSessions() {
18
+ try {
19
+ if (!fs.existsSync(SESSIONS_FILE)) {
20
+ return [];
21
+ }
22
+ const content = fs.readFileSync(SESSIONS_FILE, "utf-8");
23
+ if (!content.trim()) {
24
+ return [];
25
+ }
26
+ return content
27
+ .trim()
28
+ .split("\n")
29
+ .map(line => JSON.parse(line));
30
+ }
31
+ catch (error) {
32
+ console.error("Error loading sessions:", error.message);
33
+ return [];
34
+ }
35
+ }
36
+ export function saveSessions(sessions, options = {}) {
37
+ try {
38
+ const dir = path.dirname(SESSIONS_FILE);
39
+ if (!fs.existsSync(dir)) {
40
+ fs.mkdirSync(dir, { recursive: true });
41
+ }
42
+ if ((!sessions || sessions.length === 0) && !options.force) {
43
+ console.warn("WARNING: Attempted to save empty sessions array - ABORTED to prevent data loss");
44
+ return;
45
+ }
46
+ const jsonl = sessions && sessions.length > 0 ? sessions.map(s => JSON.stringify(s)).join("\n") : "";
47
+ const backupFile = SESSIONS_FILE + ".bak";
48
+ if (fs.existsSync(backupFile)) {
49
+ try {
50
+ const backupContent = fs.readFileSync(backupFile, "utf-8");
51
+ const backupEntries = backupContent.trim().split("\n").filter(Boolean).map((l) => JSON.parse(l));
52
+ const backupIds = new Set(backupEntries.map((e) => e.id));
53
+ const newEntries = sessions.filter(s => !backupIds.has(s.id));
54
+ if (newEntries.length > 0) {
55
+ const merged = [...backupEntries, ...newEntries];
56
+ fs.writeFileSync(backupFile, merged.map(s => JSON.stringify(s)).join("\n"), "utf-8");
57
+ }
58
+ }
59
+ catch {
60
+ fs.writeFileSync(backupFile, jsonl, "utf-8");
61
+ }
62
+ }
63
+ else {
64
+ fs.writeFileSync(backupFile, jsonl, "utf-8");
65
+ }
66
+ fs.writeFileSync(SESSIONS_FILE, jsonl, "utf-8");
67
+ }
68
+ catch (error) {
69
+ console.error("Error saving sessions:", error.message);
70
+ throw error;
71
+ }
72
+ }
73
+ export function createSession(taskType, technologies = []) {
74
+ const now = new Date();
75
+ return {
76
+ id: generateTraceId(),
77
+ session_id: generateSessionId(),
78
+ timestamp: now.toISOString(),
79
+ task_type: taskType,
80
+ technology: technologies.join(","),
81
+ guides_used: [],
82
+ memories_read: [],
83
+ memories_created: [],
84
+ task_outcome: null,
85
+ refinement_attempts: 0,
86
+ self_critique_count: 0,
87
+ initial_approach: null,
88
+ final_approach: null,
89
+ approach_changed: false,
90
+ lessons: [],
91
+ status: "active"
92
+ };
93
+ }
94
+ export function findSession(sessions, sessionId) {
95
+ return sessions.find(s => s.session_id === sessionId) || null;
96
+ }
97
+ export function findActiveSession(sessions) {
98
+ return sessions.find(s => s.status === "active") || null;
99
+ }
100
+ export function endSession(session, outcome, finalApproach = null, lessons = []) {
101
+ session.status = "completed";
102
+ session.task_outcome = outcome;
103
+ session.final_approach = finalApproach;
104
+ session.lessons = lessons;
105
+ session.completed_at = new Date().toISOString();
106
+ return session;
107
+ }
108
+ export function getRecentSessions(sessions, limit = 10) {
109
+ return [...sessions]
110
+ .filter(s => s.status === "completed")
111
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
112
+ .slice(0, limit);
113
+ }
114
+ export function getSessionsByTechnology(sessions, technology) {
115
+ const lower = technology.toLowerCase();
116
+ return sessions.filter(s => s.technology && s.technology.toLowerCase().includes(lower));
117
+ }
118
+ export function calculateSuccessRate(sessions) {
119
+ const completed = sessions.filter(s => s.status === "completed" && s.task_outcome);
120
+ if (completed.length === 0)
121
+ return null;
122
+ const successes = completed.filter(s => s.task_outcome === "success").length;
123
+ return successes / completed.length;
124
+ }
125
+ export function formatSessionDetail(session) {
126
+ if (!session)
127
+ return "Session not found.";
128
+ let detail = `=== SESSION DETAIL ===\n`;
129
+ detail += `Session ID: ${session.session_id}\n`;
130
+ detail += `Trace ID: ${session.id}\n`;
131
+ detail += `Status: ${session.status}\n`;
132
+ detail += `Task Type: ${session.task_type || "unknown"}\n`;
133
+ detail += `Technology: ${session.technology || "none"}\n`;
134
+ detail += `Started: ${session.timestamp}\n`;
135
+ if (session.completed_at) {
136
+ detail += `Completed: ${session.completed_at}\n`;
137
+ }
138
+ if (session.task_outcome) {
139
+ detail += `Outcome: ${session.task_outcome}\n`;
140
+ }
141
+ if (session.guides_used && session.guides_used.length > 0) {
142
+ detail += `Guides Used: ${session.guides_used.join(", ")}\n`;
143
+ }
144
+ if (session.memories_read && session.memories_read.length > 0) {
145
+ detail += `Memories Read: ${session.memories_read.length}\n`;
146
+ }
147
+ if (session.memories_created && session.memories_created.length > 0) {
148
+ detail += `Memories Created: ${session.memories_created.length}\n`;
149
+ }
150
+ if (session.lessons && session.lessons.length > 0) {
151
+ detail += `Lessons:\n`;
152
+ for (const l of session.lessons) {
153
+ detail += ` - ${l}\n`;
154
+ }
155
+ }
156
+ if (session.final_approach) {
157
+ detail += `Final Approach: ${session.final_approach}\n`;
158
+ }
159
+ detail += `====================`;
160
+ return detail;
161
+ }
162
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/sessions/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { generateSessionId, generateTraceId, setSessionsDir, loadSessions, saveSessions, createSession, findSession, findActiveSession, endSession, getRecentSessions, getSessionsByTechnology, calculateSuccessRate, formatSessionDetail } from "./core.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { generateSessionId, generateTraceId, setSessionsDir, loadSessions, saveSessions, createSession, findSession, findActiveSession, endSession, getRecentSessions, getSessionsByTechnology, calculateSuccessRate, formatSessionDetail } from "./core.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { VirtualSession, ToolCallEntry } from "../types.js";
2
+ interface FinalizedVirtualSession {
3
+ id: string;
4
+ started_at: string;
5
+ tool_calls: ToolCallEntry[];
6
+ project: string | null;
7
+ guides_used: string[];
8
+ memories_accessed: string[];
9
+ memories_created: string[];
10
+ ended_at: string;
11
+ duration_tool_calls: number;
12
+ technologies: string[];
13
+ }
14
+ export declare function setSessionLogDir(dir: string): void;
15
+ export declare function setVirtualSessionConfig(cfg: {
16
+ timeout_minutes: number;
17
+ } | null): void;
18
+ export declare function recordToolCall(toolName: string, args: any, result: any): VirtualSession;
19
+ export declare function finalizeVirtualSession(): FinalizedVirtualSession | null;
20
+ export declare function getCurrentVirtualSession(): VirtualSession | null;
21
+ export declare function getRecentSessions(count?: number): FinalizedVirtualSession[];
22
+ export {};
23
+ //# sourceMappingURL=virtual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../../src/sessions/virtual.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,UAAU,uBAAuB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD;AAkBD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,IAAI,CAErF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,cAAc,CA4BvF;AAoDD,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CA6BvE;AAED,wBAAgB,wBAAwB,IAAI,cAAc,GAAG,IAAI,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,uBAAuB,EAAE,CAmB/E"}
@@ -0,0 +1,157 @@
1
+ import os from "os";
2
+ import path from "path";
3
+ import fs from "fs";
4
+ const SESSION_LOG_DIR = path.join(os.homedir(), ".lemma", "sessions");
5
+ let _logDir = null;
6
+ export function setSessionLogDir(dir) {
7
+ _logDir = dir;
8
+ }
9
+ function getLogDir() {
10
+ return _logDir || SESSION_LOG_DIR;
11
+ }
12
+ function ensureLogDir() {
13
+ const dir = getLogDir();
14
+ if (!fs.existsSync(dir)) {
15
+ fs.mkdirSync(dir, { recursive: true });
16
+ }
17
+ return dir;
18
+ }
19
+ let currentVirtualSession = null;
20
+ let sessionTimeout = null;
21
+ let config = { timeout_minutes: 30 };
22
+ export function setVirtualSessionConfig(cfg) {
23
+ if (cfg)
24
+ config = cfg;
25
+ }
26
+ export function recordToolCall(toolName, args, result) {
27
+ const entry = {
28
+ tool: toolName,
29
+ timestamp: new Date().toISOString(),
30
+ args_summary: summarizeArgs(toolName, args),
31
+ result_summary: summarizeResult(result),
32
+ };
33
+ if (!currentVirtualSession) {
34
+ currentVirtualSession = {
35
+ id: "vs_" + Date.now().toString(36),
36
+ started_at: new Date().toISOString(),
37
+ tool_calls: [],
38
+ project: null,
39
+ technologies_seen: new Set(),
40
+ guides_used: new Set(),
41
+ memories_accessed: [],
42
+ memories_created: [],
43
+ };
44
+ }
45
+ currentVirtualSession.tool_calls.push(entry);
46
+ extractSessionData(toolName, args, result, currentVirtualSession);
47
+ resetTimeout();
48
+ return currentVirtualSession;
49
+ }
50
+ function resetTimeout() {
51
+ if (sessionTimeout)
52
+ clearTimeout(sessionTimeout);
53
+ sessionTimeout = setTimeout(() => {
54
+ finalizeVirtualSession();
55
+ }, config.timeout_minutes * 60 * 1000);
56
+ }
57
+ function summarizeArgs(tool, args) {
58
+ if (!args)
59
+ return null;
60
+ switch (tool) {
61
+ case "memory_read":
62
+ return args.id ? `id=${args.id}` : args.query ? `query=${args.query}` : "list";
63
+ case "memory_add":
64
+ return args.title || args.fragment?.slice(0, 50);
65
+ case "guide_practice":
66
+ return args.guide;
67
+ case "memory_feedback":
68
+ return `${args.id} useful=${args.useful}`;
69
+ default:
70
+ return null;
71
+ }
72
+ }
73
+ function summarizeResult(result) {
74
+ if (!result?.content?.[0]?.text)
75
+ return null;
76
+ const text = result.content[0].text;
77
+ if (text.length > 100)
78
+ return text.slice(0, 100) + "...";
79
+ return text;
80
+ }
81
+ function extractSessionData(tool, args, result, session) {
82
+ switch (tool) {
83
+ case "memory_read":
84
+ if (args?.id)
85
+ session.memories_accessed.push(args.id);
86
+ break;
87
+ case "memory_add":
88
+ if (args?.project)
89
+ session.project = args.project;
90
+ if (args?.title)
91
+ session.memories_created.push(args.title);
92
+ break;
93
+ case "guide_practice":
94
+ if (args?.guide)
95
+ session.guides_used.add(args.guide.toLowerCase());
96
+ if (args?.contexts) {
97
+ for (const c of args.contexts)
98
+ session.technologies_seen.add(c.toLowerCase());
99
+ }
100
+ break;
101
+ case "memory_feedback":
102
+ break;
103
+ }
104
+ }
105
+ export function finalizeVirtualSession() {
106
+ if (!currentVirtualSession || currentVirtualSession.tool_calls.length === 0) {
107
+ currentVirtualSession = null;
108
+ return null;
109
+ }
110
+ const session = {
111
+ ...currentVirtualSession,
112
+ ended_at: new Date().toISOString(),
113
+ duration_tool_calls: currentVirtualSession.tool_calls.length,
114
+ technologies: [...currentVirtualSession.technologies_seen],
115
+ guides_used: [...currentVirtualSession.guides_used],
116
+ };
117
+ delete session.technologies_seen;
118
+ ensureLogDir();
119
+ const filePath = path.join(getLogDir(), `${session.id}.json`);
120
+ try {
121
+ fs.writeFileSync(filePath, JSON.stringify(session, null, 2), "utf-8");
122
+ }
123
+ catch { }
124
+ currentVirtualSession = null;
125
+ if (sessionTimeout) {
126
+ clearTimeout(sessionTimeout);
127
+ sessionTimeout = null;
128
+ }
129
+ return session;
130
+ }
131
+ export function getCurrentVirtualSession() {
132
+ return currentVirtualSession;
133
+ }
134
+ export function getRecentSessions(count = 10) {
135
+ const dir = getLogDir();
136
+ if (!fs.existsSync(dir))
137
+ return [];
138
+ try {
139
+ const files = fs.readdirSync(dir)
140
+ .filter(f => f.startsWith("vs_") && f.endsWith(".json"))
141
+ .sort()
142
+ .reverse()
143
+ .slice(0, count);
144
+ return files.map((f) => {
145
+ try {
146
+ return JSON.parse(fs.readFileSync(path.join(dir, f), "utf-8"));
147
+ }
148
+ catch {
149
+ return null;
150
+ }
151
+ }).filter(Boolean);
152
+ }
153
+ catch {
154
+ return [];
155
+ }
156
+ }
157
+ //# sourceMappingURL=virtual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual.js","sourceRoot":"","sources":["../../src/sessions/virtual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ export interface MemoryFragment {
2
+ id: string;
3
+ title: string;
4
+ description: string;
5
+ fragment: string;
6
+ project: string | null;
7
+ confidence: number;
8
+ source: "user" | "ai";
9
+ created: string;
10
+ lastAccessed: string;
11
+ accessed: number;
12
+ tags: string[];
13
+ associatedWith: string[];
14
+ negativeHits: number;
15
+ quality_score: number | null;
16
+ refinement_count: number;
17
+ parent_id: string | null;
18
+ child_ids: string[];
19
+ session_id: string | null;
20
+ task_type: string | null;
21
+ outcome: string | null;
22
+ positive_feedback: number;
23
+ negative_feedback: number;
24
+ last_refined: string | null;
25
+ }
26
+ export interface Guide {
27
+ id: string;
28
+ guide: string;
29
+ category: string;
30
+ description: string;
31
+ usage_count: number;
32
+ last_used: string;
33
+ contexts: string[];
34
+ learnings: string[];
35
+ success_count: number;
36
+ failure_count: number;
37
+ anti_patterns: string[];
38
+ known_pitfalls: string[];
39
+ last_refined: string | null;
40
+ depends_on: string[];
41
+ enables: string[];
42
+ superseded_by: string | null;
43
+ deprecated: boolean;
44
+ }
45
+ export interface Session {
46
+ id: string;
47
+ session_id: string;
48
+ timestamp: string;
49
+ task_type: string;
50
+ technology: string;
51
+ guides_used: string[];
52
+ memories_read: string[];
53
+ memories_created: string[];
54
+ task_outcome: string | null;
55
+ refinement_attempts: number;
56
+ self_critique_count: number;
57
+ initial_approach: string | null;
58
+ final_approach: string | null;
59
+ approach_changed: boolean;
60
+ lessons: string[];
61
+ status: "active" | "completed" | "abandoned";
62
+ completed_at?: string;
63
+ }
64
+ export interface VirtualSession {
65
+ id: string;
66
+ started_at: string;
67
+ tool_calls: ToolCallEntry[];
68
+ project: string | null;
69
+ technologies_seen: Set<string>;
70
+ guides_used: Set<string>;
71
+ memories_accessed: string[];
72
+ memories_created: string[];
73
+ }
74
+ export interface ToolCallEntry {
75
+ tool: string;
76
+ timestamp: string;
77
+ args_summary: string | null;
78
+ result_summary: string | null;
79
+ }
80
+ export interface MemoryStats {
81
+ total: number;
82
+ avg_confidence: number;
83
+ by_source: Record<string, number>;
84
+ by_project: Record<string, number>;
85
+ low_confidence: number;
86
+ high_confidence: number;
87
+ }
88
+ export interface AuditResult {
89
+ total_fragments: number;
90
+ issues_found: number;
91
+ issues: string[];
92
+ healthy: boolean;
93
+ }
94
+ export interface GuideSuggestion {
95
+ guide: string;
96
+ category: string;
97
+ keywords: string[];
98
+ tracked: boolean;
99
+ usage_count: number;
100
+ last_used: string | null;
101
+ learnings: string[];
102
+ contexts: string[];
103
+ description?: string;
104
+ }
105
+ export interface SuggestResult {
106
+ relevant: GuideSuggestion[];
107
+ missing: GuideSuggestion[];
108
+ suggested: GuideSuggestion[];
109
+ summary: string;
110
+ }
111
+ export interface TaskGuideDef {
112
+ guide: string;
113
+ category: string;
114
+ keywords: string[];
115
+ }
116
+ export interface LemmaConfig {
117
+ token_budget: {
118
+ full_content: number;
119
+ summary_index: number;
120
+ guides_detail: number;
121
+ };
122
+ injection: {
123
+ max_full_content_fragments: number;
124
+ max_summary_fragments: number;
125
+ max_guides: number;
126
+ max_guide_detail: number;
127
+ };
128
+ virtual_session: {
129
+ timeout_minutes: number;
130
+ };
131
+ }
132
+ export interface HookContext {
133
+ project: string | null;
134
+ timestamp: string;
135
+ }
136
+ export interface PromptContext {
137
+ project: string | null;
138
+ fragments: MemoryFragment[];
139
+ globalFragments: MemoryFragment[];
140
+ }
141
+ export type TaskOutcome = "success" | "partial" | "failure" | "abandoned";
142
+ export type TaskType = "debugging" | "implementation" | "refactoring" | "testing" | "research" | "documentation" | "optimization" | "other";
143
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "lemma-mcp",
3
+ "version": "0.7.0",
4
+ "description": "Persistent memory layer for LLMs via MCP",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "lemma": "./dist/index.js"
9
+ },
10
+ "exports": {
11
+ ".": "./dist/index.js",
12
+ "./memory": "./dist/memory/index.js",
13
+ "./guides": "./dist/guides/index.js",
14
+ "./server": "./dist/server/index.js"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "prepare": "npm run build",
24
+ "typecheck": "tsc --noEmit --project tsconfig.test.json",
25
+ "start": "node dist/index.js",
26
+ "prepublishOnly": "npm run build",
27
+ "test": "tsx --test tests/memory/*.test.ts tests/guides/*.test.ts tests/sessions/*.test.ts tests/server/*.test.ts",
28
+ "test:memory": "tsx --test tests/memory/*.test.ts",
29
+ "test:guides": "tsx --test tests/guides/*.test.ts",
30
+ "test:sessions": "tsx --test tests/sessions/*.test.ts",
31
+ "test:server": "tsx --test tests/server/*.test.ts"
32
+ },
33
+ "keywords": [
34
+ "mcp",
35
+ "memory",
36
+ "llm",
37
+ "claude",
38
+ "persistent",
39
+ "guides",
40
+ "context"
41
+ ],
42
+ "author": "",
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.0.0",
46
+ "fuse.js": "^7.1.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/xenitV1/lemma.git"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^25.6.0",
57
+ "tsup": "^8.5.1",
58
+ "tsx": "^4.21.0",
59
+ "typescript": "^6.0.3",
60
+ "vitest": "^4.1.4"
61
+ }
62
+ }