@hasna/mementos 0.14.21 → 0.14.22

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 (239) hide show
  1. package/LICENSE +3 -189
  2. package/README.md +15 -27
  3. package/dist/agent-setup.d.ts +34 -0
  4. package/dist/agent-setup.d.ts.map +1 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +517 -0
  8. package/dist/index.d.ts +3 -27
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +455 -14652
  11. package/dist/mcp-runtime.d.ts +23 -0
  12. package/dist/mcp-runtime.d.ts.map +1 -0
  13. package/dist/mcp.d.ts +3 -0
  14. package/dist/mcp.d.ts.map +1 -0
  15. package/dist/mcp.js +300 -0
  16. package/dist/remote-client.d.ts +44 -0
  17. package/dist/remote-client.d.ts.map +1 -0
  18. package/package.json +13 -53
  19. package/dashboard/dist/assets/index-DqyMbv89.js +0 -270
  20. package/dashboard/dist/assets/index-UBCddFo_.css +0 -1
  21. package/dashboard/dist/index.html +0 -13
  22. package/dist/cli/brains.d.ts +0 -3
  23. package/dist/cli/brains.d.ts.map +0 -1
  24. package/dist/cli/index.d.ts +0 -3
  25. package/dist/cli/index.d.ts.map +0 -1
  26. package/dist/cli/index.js +0 -25738
  27. package/dist/db/acl.d.ts +0 -34
  28. package/dist/db/acl.d.ts.map +0 -1
  29. package/dist/db/agents.d.ts +0 -15
  30. package/dist/db/agents.d.ts.map +0 -1
  31. package/dist/db/audit.d.ts +0 -39
  32. package/dist/db/audit.d.ts.map +0 -1
  33. package/dist/db/database.d.ts +0 -10
  34. package/dist/db/database.d.ts.map +0 -1
  35. package/dist/db/entities.d.ts +0 -62
  36. package/dist/db/entities.d.ts.map +0 -1
  37. package/dist/db/entity-memories.d.ts +0 -34
  38. package/dist/db/entity-memories.d.ts.map +0 -1
  39. package/dist/db/locks.d.ts +0 -63
  40. package/dist/db/locks.d.ts.map +0 -1
  41. package/dist/db/machines.d.ts +0 -16
  42. package/dist/db/machines.d.ts.map +0 -1
  43. package/dist/db/memories.d.ts +0 -40
  44. package/dist/db/memories.d.ts.map +0 -1
  45. package/dist/db/pg-migrations.d.ts +0 -8
  46. package/dist/db/pg-migrations.d.ts.map +0 -1
  47. package/dist/db/projects.d.ts +0 -6
  48. package/dist/db/projects.d.ts.map +0 -1
  49. package/dist/db/ratings.d.ts +0 -23
  50. package/dist/db/ratings.d.ts.map +0 -1
  51. package/dist/db/relations.d.ts +0 -29
  52. package/dist/db/relations.d.ts.map +0 -1
  53. package/dist/db/session-jobs.d.ts +0 -49
  54. package/dist/db/session-jobs.d.ts.map +0 -1
  55. package/dist/db/synthesis.d.ts +0 -101
  56. package/dist/db/synthesis.d.ts.map +0 -1
  57. package/dist/db/tool-events.d.ts +0 -27
  58. package/dist/db/tool-events.d.ts.map +0 -1
  59. package/dist/db/webhook_hooks.d.ts +0 -25
  60. package/dist/db/webhook_hooks.d.ts.map +0 -1
  61. package/dist/lib/activation-matcher.d.ts +0 -16
  62. package/dist/lib/activation-matcher.d.ts.map +0 -1
  63. package/dist/lib/asmr/categorizer.d.ts +0 -31
  64. package/dist/lib/asmr/categorizer.d.ts.map +0 -1
  65. package/dist/lib/asmr/context-agent.d.ts +0 -4
  66. package/dist/lib/asmr/context-agent.d.ts.map +0 -1
  67. package/dist/lib/asmr/ensemble.d.ts +0 -23
  68. package/dist/lib/asmr/ensemble.d.ts.map +0 -1
  69. package/dist/lib/asmr/fact-agent.d.ts +0 -4
  70. package/dist/lib/asmr/fact-agent.d.ts.map +0 -1
  71. package/dist/lib/asmr/index.d.ts +0 -7
  72. package/dist/lib/asmr/index.d.ts.map +0 -1
  73. package/dist/lib/asmr/orchestrator.d.ts +0 -4
  74. package/dist/lib/asmr/orchestrator.d.ts.map +0 -1
  75. package/dist/lib/asmr/temporal-agent.d.ts +0 -4
  76. package/dist/lib/asmr/temporal-agent.d.ts.map +0 -1
  77. package/dist/lib/asmr/types.d.ts +0 -27
  78. package/dist/lib/asmr/types.d.ts.map +0 -1
  79. package/dist/lib/auto-inject-orchestrator.d.ts +0 -57
  80. package/dist/lib/auto-inject-orchestrator.d.ts.map +0 -1
  81. package/dist/lib/auto-memory-queue.d.ts +0 -46
  82. package/dist/lib/auto-memory-queue.d.ts.map +0 -1
  83. package/dist/lib/auto-memory.d.ts +0 -18
  84. package/dist/lib/auto-memory.d.ts.map +0 -1
  85. package/dist/lib/bench.d.ts +0 -20
  86. package/dist/lib/bench.d.ts.map +0 -1
  87. package/dist/lib/built-in-hooks.d.ts +0 -12
  88. package/dist/lib/built-in-hooks.d.ts.map +0 -1
  89. package/dist/lib/channel-pusher.d.ts +0 -39
  90. package/dist/lib/channel-pusher.d.ts.map +0 -1
  91. package/dist/lib/config.d.ts +0 -9
  92. package/dist/lib/config.d.ts.map +0 -1
  93. package/dist/lib/connectors/files.d.ts +0 -8
  94. package/dist/lib/connectors/files.d.ts.map +0 -1
  95. package/dist/lib/connectors/github.d.ts +0 -7
  96. package/dist/lib/connectors/github.d.ts.map +0 -1
  97. package/dist/lib/connectors/index.d.ts +0 -12
  98. package/dist/lib/connectors/index.d.ts.map +0 -1
  99. package/dist/lib/connectors/notion.d.ts +0 -7
  100. package/dist/lib/connectors/notion.d.ts.map +0 -1
  101. package/dist/lib/connectors/types.d.ts +0 -27
  102. package/dist/lib/connectors/types.d.ts.map +0 -1
  103. package/dist/lib/context-extractor.d.ts +0 -14
  104. package/dist/lib/context-extractor.d.ts.map +0 -1
  105. package/dist/lib/context.d.ts +0 -35
  106. package/dist/lib/context.d.ts.map +0 -1
  107. package/dist/lib/contradiction.d.ts +0 -50
  108. package/dist/lib/contradiction.d.ts.map +0 -1
  109. package/dist/lib/decay.d.ts +0 -35
  110. package/dist/lib/decay.d.ts.map +0 -1
  111. package/dist/lib/dedup.d.ts +0 -33
  112. package/dist/lib/dedup.d.ts.map +0 -1
  113. package/dist/lib/duration.d.ts +0 -28
  114. package/dist/lib/duration.d.ts.map +0 -1
  115. package/dist/lib/embeddings.d.ts +0 -20
  116. package/dist/lib/embeddings.d.ts.map +0 -1
  117. package/dist/lib/export-v1.d.ts +0 -30
  118. package/dist/lib/export-v1.d.ts.map +0 -1
  119. package/dist/lib/extractor.d.ts +0 -9
  120. package/dist/lib/extractor.d.ts.map +0 -1
  121. package/dist/lib/extractors/audio.d.ts +0 -8
  122. package/dist/lib/extractors/audio.d.ts.map +0 -1
  123. package/dist/lib/extractors/index.d.ts +0 -12
  124. package/dist/lib/extractors/index.d.ts.map +0 -1
  125. package/dist/lib/extractors/ocr.d.ts +0 -7
  126. package/dist/lib/extractors/ocr.d.ts.map +0 -1
  127. package/dist/lib/extractors/pdf.d.ts +0 -7
  128. package/dist/lib/extractors/pdf.d.ts.map +0 -1
  129. package/dist/lib/extractors/types.d.ts +0 -12
  130. package/dist/lib/extractors/types.d.ts.map +0 -1
  131. package/dist/lib/file-deps.d.ts +0 -27
  132. package/dist/lib/file-deps.d.ts.map +0 -1
  133. package/dist/lib/focus.d.ts +0 -58
  134. package/dist/lib/focus.d.ts.map +0 -1
  135. package/dist/lib/gatherer.d.ts +0 -16
  136. package/dist/lib/gatherer.d.ts.map +0 -1
  137. package/dist/lib/gdpr.d.ts +0 -24
  138. package/dist/lib/gdpr.d.ts.map +0 -1
  139. package/dist/lib/hooks.d.ts +0 -50
  140. package/dist/lib/hooks.d.ts.map +0 -1
  141. package/dist/lib/importers/index.d.ts +0 -38
  142. package/dist/lib/importers/index.d.ts.map +0 -1
  143. package/dist/lib/injector.d.ts +0 -86
  144. package/dist/lib/injector.d.ts.map +0 -1
  145. package/dist/lib/matryoshka.d.ts +0 -50
  146. package/dist/lib/matryoshka.d.ts.map +0 -1
  147. package/dist/lib/memory-lock.d.ts +0 -58
  148. package/dist/lib/memory-lock.d.ts.map +0 -1
  149. package/dist/lib/model-config.d.ts +0 -14
  150. package/dist/lib/model-config.d.ts.map +0 -1
  151. package/dist/lib/open-sessions-connector.d.ts +0 -60
  152. package/dist/lib/open-sessions-connector.d.ts.map +0 -1
  153. package/dist/lib/poisoning.d.ts +0 -19
  154. package/dist/lib/poisoning.d.ts.map +0 -1
  155. package/dist/lib/poll.d.ts +0 -17
  156. package/dist/lib/poll.d.ts.map +0 -1
  157. package/dist/lib/procedural-extractor.d.ts +0 -21
  158. package/dist/lib/procedural-extractor.d.ts.map +0 -1
  159. package/dist/lib/profile-sync.d.ts +0 -20
  160. package/dist/lib/profile-sync.d.ts.map +0 -1
  161. package/dist/lib/profile-synthesizer.d.ts +0 -20
  162. package/dist/lib/profile-synthesizer.d.ts.map +0 -1
  163. package/dist/lib/project-detect.d.ts +0 -18
  164. package/dist/lib/project-detect.d.ts.map +0 -1
  165. package/dist/lib/providers/anthropic.d.ts +0 -21
  166. package/dist/lib/providers/anthropic.d.ts.map +0 -1
  167. package/dist/lib/providers/base.d.ts +0 -96
  168. package/dist/lib/providers/base.d.ts.map +0 -1
  169. package/dist/lib/providers/cerebras.d.ts +0 -20
  170. package/dist/lib/providers/cerebras.d.ts.map +0 -1
  171. package/dist/lib/providers/grok.d.ts +0 -19
  172. package/dist/lib/providers/grok.d.ts.map +0 -1
  173. package/dist/lib/providers/index.d.ts +0 -7
  174. package/dist/lib/providers/index.d.ts.map +0 -1
  175. package/dist/lib/providers/openai-compat.d.ts +0 -18
  176. package/dist/lib/providers/openai-compat.d.ts.map +0 -1
  177. package/dist/lib/providers/openai.d.ts +0 -20
  178. package/dist/lib/providers/openai.d.ts.map +0 -1
  179. package/dist/lib/providers/registry.d.ts +0 -38
  180. package/dist/lib/providers/registry.d.ts.map +0 -1
  181. package/dist/lib/quality.d.ts +0 -16
  182. package/dist/lib/quality.d.ts.map +0 -1
  183. package/dist/lib/redact.d.ts +0 -10
  184. package/dist/lib/redact.d.ts.map +0 -1
  185. package/dist/lib/remote-sync.d.ts +0 -49
  186. package/dist/lib/remote-sync.d.ts.map +0 -1
  187. package/dist/lib/retention.d.ts +0 -17
  188. package/dist/lib/retention.d.ts.map +0 -1
  189. package/dist/lib/search.d.ts +0 -52
  190. package/dist/lib/search.d.ts.map +0 -1
  191. package/dist/lib/session-auto-resolve.d.ts +0 -28
  192. package/dist/lib/session-auto-resolve.d.ts.map +0 -1
  193. package/dist/lib/session-processor.d.ts +0 -38
  194. package/dist/lib/session-processor.d.ts.map +0 -1
  195. package/dist/lib/session-queue.d.ts +0 -28
  196. package/dist/lib/session-queue.d.ts.map +0 -1
  197. package/dist/lib/session-registry.d.ts +0 -47
  198. package/dist/lib/session-registry.d.ts.map +0 -1
  199. package/dist/lib/session-start-briefing.d.ts +0 -10
  200. package/dist/lib/session-start-briefing.d.ts.map +0 -1
  201. package/dist/lib/session-watcher.d.ts +0 -30
  202. package/dist/lib/session-watcher.d.ts.map +0 -1
  203. package/dist/lib/sync.d.ts +0 -10
  204. package/dist/lib/sync.d.ts.map +0 -1
  205. package/dist/lib/synthesis/corpus-builder.d.ts +0 -30
  206. package/dist/lib/synthesis/corpus-builder.d.ts.map +0 -1
  207. package/dist/lib/synthesis/executor.d.ts +0 -14
  208. package/dist/lib/synthesis/executor.d.ts.map +0 -1
  209. package/dist/lib/synthesis/index.d.ts +0 -37
  210. package/dist/lib/synthesis/index.d.ts.map +0 -1
  211. package/dist/lib/synthesis/llm-analyzer.d.ts +0 -18
  212. package/dist/lib/synthesis/llm-analyzer.d.ts.map +0 -1
  213. package/dist/lib/synthesis/metrics.d.ts +0 -13
  214. package/dist/lib/synthesis/metrics.d.ts.map +0 -1
  215. package/dist/lib/synthesis/scheduler.d.ts +0 -18
  216. package/dist/lib/synthesis/scheduler.d.ts.map +0 -1
  217. package/dist/lib/synthesis/validator.d.ts +0 -19
  218. package/dist/lib/synthesis/validator.d.ts.map +0 -1
  219. package/dist/lib/tool-lesson-extractor.d.ts +0 -24
  220. package/dist/lib/tool-lesson-extractor.d.ts.map +0 -1
  221. package/dist/lib/tool-memory-synthesizer.d.ts +0 -28
  222. package/dist/lib/tool-memory-synthesizer.d.ts.map +0 -1
  223. package/dist/lib/topic-clusterer.d.ts +0 -21
  224. package/dist/lib/topic-clusterer.d.ts.map +0 -1
  225. package/dist/lib/when-to-use-generator.d.ts +0 -22
  226. package/dist/lib/when-to-use-generator.d.ts.map +0 -1
  227. package/dist/mcp/index.d.ts +0 -5
  228. package/dist/mcp/index.d.ts.map +0 -1
  229. package/dist/mcp/index.js +0 -30113
  230. package/dist/mcp/memory-broadcast.d.ts +0 -12
  231. package/dist/mcp/memory-broadcast.d.ts.map +0 -1
  232. package/dist/sdk/index.js +0 -397
  233. package/dist/server/index.d.ts +0 -7
  234. package/dist/server/index.d.ts.map +0 -1
  235. package/dist/server/index.js +0 -18221
  236. package/dist/types/hooks.d.ts +0 -136
  237. package/dist/types/hooks.d.ts.map +0 -1
  238. package/dist/types/index.d.ts +0 -345
  239. package/dist/types/index.d.ts.map +0 -1
@@ -0,0 +1,23 @@
1
+ import { MementosRemoteClient } from "./remote-client";
2
+ export interface RemoteMcpTool {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: Record<string, unknown>;
6
+ run: (input: Record<string, unknown>, client: MementosRemoteClient) => Promise<unknown>;
7
+ }
8
+ export declare const REMOTE_MCP_TOOLS: RemoteMcpTool[];
9
+ export declare function callRemoteMcpTool(name: string, input?: Record<string, unknown>, client?: MementosRemoteClient): Promise<unknown>;
10
+ export declare function handleMcpMessage(message: any, client?: MementosRemoteClient): Promise<{
11
+ jsonrpc: string;
12
+ id: unknown;
13
+ result: unknown;
14
+ } | {
15
+ jsonrpc: string;
16
+ id: unknown;
17
+ error: {
18
+ code: number;
19
+ message: string;
20
+ };
21
+ }>;
22
+ export declare function startMcpStdio(client?: MementosRemoteClient): void;
23
+ //# sourceMappingURL=mcp-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-runtime.d.ts","sourceRoot":"","sources":["../src/mcp-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzF;AAaD,eAAO,MAAM,gBAAgB,EAAE,aAAa,EA4F3C,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,MAAM,uBAA8B,oBAKrC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAA8B;;;;;;;;;;;GA8BxF;AAED,wBAAgB,aAAa,CAAC,MAAM,uBAA8B,QAUjE"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":""}
package/dist/mcp.js ADDED
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+
4
+ // src/mcp-runtime.ts
5
+ import { createInterface } from "readline";
6
+
7
+ // src/remote-client.ts
8
+ var DEFAULT_API_URL = "https://mementos.md/api/v1";
9
+
10
+ class MementosRemoteError extends Error {
11
+ status;
12
+ response;
13
+ constructor(message, status, response) {
14
+ super(message);
15
+ this.name = "MementosRemoteError";
16
+ this.status = status;
17
+ this.response = response;
18
+ }
19
+ }
20
+
21
+ class MementosRemoteClient {
22
+ apiUrl;
23
+ token;
24
+ fetchImpl;
25
+ constructor(config = {}) {
26
+ this.apiUrl = normalizeApiUrl(config.apiUrl ?? DEFAULT_API_URL);
27
+ this.token = config.token;
28
+ this.fetchImpl = config.fetch ?? fetch;
29
+ }
30
+ listCapabilities() {
31
+ return this.request("/capabilities", { requiresAuth: false });
32
+ }
33
+ listAgents() {
34
+ return this.request("/agents");
35
+ }
36
+ registerAgent(input) {
37
+ return this.request("/agents/register", { method: "POST", body: input });
38
+ }
39
+ heartbeatAgent(input) {
40
+ return this.request("/agents/heartbeat", { method: "POST", body: input });
41
+ }
42
+ saveMemory(input) {
43
+ return this.request("/memories", { method: "POST", body: input });
44
+ }
45
+ searchMemories(input = {}) {
46
+ return this.request("/memories", { query: input });
47
+ }
48
+ injectionContext(input = {}) {
49
+ return this.request("/injections/context", { method: "POST", body: input });
50
+ }
51
+ getMemory(id) {
52
+ return this.request(`/memories/${encodeURIComponent(id)}`);
53
+ }
54
+ updateMemory(id, input) {
55
+ return this.request(`/memories/${encodeURIComponent(id)}`, { method: "PATCH", body: input });
56
+ }
57
+ deleteMemory(id) {
58
+ return this.request(`/memories/${encodeURIComponent(id)}`, { method: "DELETE" });
59
+ }
60
+ memoryUsage() {
61
+ return this.request("/usage");
62
+ }
63
+ listRuns(input = {}) {
64
+ return this.request("/runs", { query: input });
65
+ }
66
+ createRun(slug, input = {}) {
67
+ return this.request(`/runs/${encodeURIComponent(slug)}`, { method: "POST", body: input });
68
+ }
69
+ getRun(id) {
70
+ return this.request(`/runs/${encodeURIComponent(id)}`);
71
+ }
72
+ listApprovals() {
73
+ return this.request("/approvals");
74
+ }
75
+ billingStatus() {
76
+ return this.request("/billing/status");
77
+ }
78
+ async request(path, options = {}) {
79
+ const method = options.method ?? "GET";
80
+ const requiresAuth = options.requiresAuth !== false;
81
+ if (requiresAuth && !this.token) {
82
+ throw new MementosRemoteError("MEMENTOS_API_TOKEN is required for hosted mementos.md requests", 401, null);
83
+ }
84
+ const url = new URL(`${this.apiUrl}${path.startsWith("/") ? path : `/${path}`}`);
85
+ for (const [key, value] of Object.entries(options.query ?? {})) {
86
+ if (value === undefined || value === null || value === "")
87
+ continue;
88
+ url.searchParams.set(key, String(value));
89
+ }
90
+ const headers = new Headers({ accept: "application/json" });
91
+ if (requiresAuth)
92
+ headers.set("authorization", `Bearer ${this.token}`);
93
+ if (options.body !== undefined)
94
+ headers.set("content-type", "application/json");
95
+ const response = await this.fetchImpl(url, {
96
+ method,
97
+ headers,
98
+ body: options.body === undefined ? undefined : JSON.stringify(options.body)
99
+ });
100
+ const payload = await readPayload(response);
101
+ if (!response.ok) {
102
+ throw new MementosRemoteError(readErrorMessage(payload, response.status), response.status, payload);
103
+ }
104
+ return payload;
105
+ }
106
+ }
107
+ function createRemoteClientFromEnv(env = process.env) {
108
+ return new MementosRemoteClient({
109
+ apiUrl: env.MEMENTOS_API_URL,
110
+ token: env.MEMENTOS_API_TOKEN ?? env.MEMENTOS_PLATFORM_TOKEN ?? env.PLATFORM_API_TOKEN ?? env.APP_API_KEY
111
+ });
112
+ }
113
+ function normalizeApiUrl(input) {
114
+ const trimmed = input.trim().replace(/\/+$/, "");
115
+ if (!trimmed)
116
+ return DEFAULT_API_URL;
117
+ return trimmed.endsWith("/api/v1") ? trimmed : `${trimmed}/api/v1`;
118
+ }
119
+ async function readPayload(response) {
120
+ const text = await response.text();
121
+ if (!text)
122
+ return null;
123
+ try {
124
+ return JSON.parse(text);
125
+ } catch {
126
+ return text;
127
+ }
128
+ }
129
+ function readErrorMessage(payload, status) {
130
+ if (typeof payload === "object" && payload !== null && "error" in payload) {
131
+ const value = payload.error;
132
+ if (typeof value === "string" && value.trim())
133
+ return value;
134
+ }
135
+ return `mementos.md request failed with status ${status}`;
136
+ }
137
+
138
+ // src/mcp-runtime.ts
139
+ var AUTHLESS_SCHEMA = {
140
+ type: "object",
141
+ properties: {},
142
+ additionalProperties: false
143
+ };
144
+ var OPEN_SCHEMA = {
145
+ type: "object",
146
+ additionalProperties: true
147
+ };
148
+ var REMOTE_MCP_TOOLS = [
149
+ {
150
+ name: "capabilities.list",
151
+ description: "List hosted mementos.md capabilities.",
152
+ inputSchema: AUTHLESS_SCHEMA,
153
+ run: (_input, client) => client.listCapabilities()
154
+ },
155
+ {
156
+ name: "agent.register",
157
+ description: "Register a hosted mementos.md agent.",
158
+ inputSchema: OPEN_SCHEMA,
159
+ run: (input, client) => client.registerAgent(input)
160
+ },
161
+ {
162
+ name: "agent.heartbeat",
163
+ description: "Record a heartbeat for a hosted mementos.md agent.",
164
+ inputSchema: OPEN_SCHEMA,
165
+ run: (input, client) => client.heartbeatAgent(input)
166
+ },
167
+ {
168
+ name: "memory.save",
169
+ description: "Save a hosted mementos.md memory.",
170
+ inputSchema: OPEN_SCHEMA,
171
+ run: (input, client) => client.saveMemory(input)
172
+ },
173
+ {
174
+ name: "memory.search",
175
+ description: "Search hosted mementos.md memories.",
176
+ inputSchema: OPEN_SCHEMA,
177
+ run: (input, client) => client.searchMemories(input)
178
+ },
179
+ {
180
+ name: "memory.get",
181
+ description: "Read a hosted mementos.md memory by id.",
182
+ inputSchema: OPEN_SCHEMA,
183
+ run: (input, client) => client.getMemory(requiredText(input.id, "memory id is required"))
184
+ },
185
+ {
186
+ name: "memory.update",
187
+ description: "Update a hosted mementos.md memory by id.",
188
+ inputSchema: OPEN_SCHEMA,
189
+ run: (input, client) => {
190
+ const { id, ...body } = input;
191
+ return client.updateMemory(requiredText(id, "memory id is required"), body);
192
+ }
193
+ },
194
+ {
195
+ name: "memory.delete",
196
+ description: "Delete a hosted mementos.md memory by id.",
197
+ inputSchema: OPEN_SCHEMA,
198
+ run: (input, client) => client.deleteMemory(requiredText(input.id, "memory id is required"))
199
+ },
200
+ {
201
+ name: "memory.usage",
202
+ description: "Read hosted mementos.md memory usage.",
203
+ inputSchema: AUTHLESS_SCHEMA,
204
+ run: (_input, client) => client.memoryUsage()
205
+ },
206
+ {
207
+ name: "runs.create",
208
+ description: "Queue a hosted mementos.md run.",
209
+ inputSchema: OPEN_SCHEMA,
210
+ run: (input, client) => {
211
+ const slug = requiredText(input.slug, "run slug is required");
212
+ const body = readObject(input.input) ?? {};
213
+ return client.createRun(slug, body);
214
+ }
215
+ },
216
+ {
217
+ name: "brain.fire",
218
+ description: "Queue hosted mementos.md Cerebras brain workers.",
219
+ inputSchema: OPEN_SCHEMA,
220
+ run: (input, client) => client.createRun("brain.fire", input)
221
+ },
222
+ {
223
+ name: "runs.get",
224
+ description: "Read a hosted mementos.md run by id.",
225
+ inputSchema: OPEN_SCHEMA,
226
+ run: (input, client) => client.getRun(requiredText(input.id, "run id is required"))
227
+ },
228
+ {
229
+ name: "approvals.list",
230
+ description: "List hosted mementos.md approval requests.",
231
+ inputSchema: AUTHLESS_SCHEMA,
232
+ run: (_input, client) => client.listApprovals()
233
+ },
234
+ {
235
+ name: "billing.status",
236
+ description: "Read hosted mementos.md billing status.",
237
+ inputSchema: AUTHLESS_SCHEMA,
238
+ run: (_input, client) => client.billingStatus()
239
+ }
240
+ ];
241
+ async function callRemoteMcpTool(name, input = {}, client = createRemoteClientFromEnv()) {
242
+ const tool = REMOTE_MCP_TOOLS.find((candidate) => candidate.name === name);
243
+ if (!tool)
244
+ throw new Error(`Unknown MCP tool: ${name}`);
245
+ return tool.run(input, client);
246
+ }
247
+ async function handleMcpMessage(message, client = createRemoteClientFromEnv()) {
248
+ const id = message?.id ?? null;
249
+ try {
250
+ if (message?.method === "initialize") {
251
+ return jsonRpcResult(id, {
252
+ protocolVersion: "2024-11-05",
253
+ serverInfo: { name: "mementos", version: "0.14.22" },
254
+ capabilities: { tools: {} }
255
+ });
256
+ }
257
+ if (message?.method === "tools/list") {
258
+ return jsonRpcResult(id, {
259
+ tools: REMOTE_MCP_TOOLS.map(({ run: _run, ...tool }) => tool)
260
+ });
261
+ }
262
+ if (message?.method === "tools/call") {
263
+ const result = await callRemoteMcpTool(String(message.params?.name ?? ""), readObject(message.params?.arguments) ?? {}, client);
264
+ return jsonRpcResult(id, { content: [{ type: "json", json: result }] });
265
+ }
266
+ return jsonRpcError(id, -32601, `Unknown method: ${String(message?.method ?? "")}`);
267
+ } catch (error) {
268
+ return jsonRpcError(id, -32000, error.message);
269
+ }
270
+ }
271
+ function startMcpStdio(client = createRemoteClientFromEnv()) {
272
+ const lines = createInterface({ input: process.stdin });
273
+ lines.on("line", async (line) => {
274
+ try {
275
+ const response = await handleMcpMessage(JSON.parse(line), client);
276
+ process.stdout.write(`${JSON.stringify(response)}
277
+ `);
278
+ } catch (error) {
279
+ process.stdout.write(`${JSON.stringify(jsonRpcError(null, -32700, error.message))}
280
+ `);
281
+ }
282
+ });
283
+ }
284
+ function jsonRpcResult(id, result) {
285
+ return { jsonrpc: "2.0", id, result };
286
+ }
287
+ function jsonRpcError(id, code, message) {
288
+ return { jsonrpc: "2.0", id, error: { code, message } };
289
+ }
290
+ function readObject(input) {
291
+ return typeof input === "object" && input !== null && !Array.isArray(input) ? input : undefined;
292
+ }
293
+ function requiredText(input, message) {
294
+ if (typeof input !== "string" || !input.trim())
295
+ throw new Error(message);
296
+ return input.trim();
297
+ }
298
+
299
+ // src/mcp.ts
300
+ startMcpStdio();
@@ -0,0 +1,44 @@
1
+ export declare const DEFAULT_API_URL = "https://mementos.md/api/v1";
2
+ export interface RemoteClientConfig {
3
+ apiUrl?: string;
4
+ token?: string;
5
+ fetch?: FetchLike;
6
+ }
7
+ export interface RemoteRequestOptions {
8
+ method?: "GET" | "POST" | "PATCH" | "DELETE";
9
+ body?: unknown;
10
+ query?: Record<string, unknown>;
11
+ requiresAuth?: boolean;
12
+ }
13
+ export type FetchLike = (input: URL | RequestInfo, init?: RequestInit) => Promise<Response>;
14
+ export declare class MementosRemoteError extends Error {
15
+ readonly status: number;
16
+ readonly response: unknown;
17
+ constructor(message: string, status: number, response: unknown);
18
+ }
19
+ export declare class MementosRemoteClient {
20
+ readonly apiUrl: string;
21
+ private readonly token?;
22
+ private readonly fetchImpl;
23
+ constructor(config?: RemoteClientConfig);
24
+ listCapabilities(): Promise<unknown>;
25
+ listAgents(): Promise<unknown>;
26
+ registerAgent(input: Record<string, unknown>): Promise<unknown>;
27
+ heartbeatAgent(input: Record<string, unknown>): Promise<unknown>;
28
+ saveMemory(input: Record<string, unknown>): Promise<unknown>;
29
+ searchMemories(input?: Record<string, unknown>): Promise<unknown>;
30
+ injectionContext(input?: Record<string, unknown>): Promise<unknown>;
31
+ getMemory(id: string): Promise<unknown>;
32
+ updateMemory(id: string, input: Record<string, unknown>): Promise<unknown>;
33
+ deleteMemory(id: string): Promise<unknown>;
34
+ memoryUsage(): Promise<unknown>;
35
+ listRuns(input?: Record<string, unknown>): Promise<unknown>;
36
+ createRun(slug: string, input?: Record<string, unknown>): Promise<unknown>;
37
+ getRun(id: string): Promise<unknown>;
38
+ listApprovals(): Promise<unknown>;
39
+ billingStatus(): Promise<unknown>;
40
+ request(path: string, options?: RemoteRequestOptions): Promise<unknown>;
41
+ }
42
+ export declare function createRemoteClientFromEnv(env?: Record<string, string | undefined>): MementosRemoteClient;
43
+ export declare function normalizeApiUrl(input: string): string;
44
+ //# sourceMappingURL=remote-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-client.d.ts","sourceRoot":"","sources":["../src/remote-client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5F,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;CAM/D;AAED,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,MAAM,GAAE,kBAAuB;IAM3C,gBAAgB;IAIhB,UAAU;IAIV,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5C,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,cAAc,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlD,gBAAgB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIpD,SAAS,CAAC,EAAE,EAAE,MAAM;IAIpB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvD,YAAY,CAAC,EAAE,EAAE,MAAM;IAIvB,WAAW;IAIX,QAAQ,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI3D,MAAM,CAAC,EAAE,EAAE,MAAM;IAIjB,aAAa;IAIb,aAAa;IAIP,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;CA4B/D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,oBAAoB,CAKrH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD"}
package/package.json CHANGED
@@ -1,84 +1,44 @@
1
1
  {
2
2
  "name": "@hasna/mementos",
3
- "version": "0.14.21",
4
- "description": "Universal memory system for AI agents - CLI + MCP server + library API",
3
+ "version": "0.14.22",
4
+ "description": "Remote-only mementos.md SaaS CLI and MCP client",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "mementos": "dist/cli/index.js",
10
- "mementos-mcp": "dist/mcp/index.js",
11
- "mementos-serve": "dist/server/index.js"
9
+ "mementos": "dist/cli.js",
10
+ "mementos-mcp": "dist/mcp.js"
12
11
  },
13
12
  "exports": {
14
13
  ".": {
15
14
  "types": "./dist/index.d.ts",
16
15
  "import": "./dist/index.js"
17
- },
18
- "./sdk": {
19
- "types": "./dist/sdk/index.d.ts",
20
- "import": "./dist/sdk/index.js"
21
16
  }
22
17
  },
23
18
  "files": [
24
19
  "dist",
25
- "dashboard/dist",
26
- "LICENSE",
27
- "README.md"
20
+ "README.md",
21
+ "LICENSE"
28
22
  ],
29
23
  "scripts": {
30
- "build": "bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk && bun build src/server/index.ts --outdir dist/server --target bun && bun build src/index.ts --outdir dist --target bun && bun build src/sdk/index.ts --outdir dist/sdk --target bun",
31
- "prepare": "bun run build",
32
- "typecheck": "tsc --noEmit",
33
- "test": "bun test",
34
- "dev:cli": "bun run src/cli/index.tsx",
35
- "dev:mcp": "bun run src/mcp/index.ts",
36
- "dev:serve": "bun run src/server/index.ts",
37
- "postinstall": "mkdir -p $HOME/.hasna/mementos $HOME/.hasna/mementos/profiles $HOME/.hasna/mementos/agents $HOME/.hasna/mementos/training 2>/dev/null || true"
24
+ "build": "bun build src/index.ts --outfile dist/index.js --target bun && bun build src/cli.ts --outfile dist/cli.js --target bun && bun build src/mcp.ts --outfile dist/mcp.js --target bun && tsc --emitDeclarationOnly -p tsconfig.build.json",
25
+ "typecheck": "tsc --noEmit -p tsconfig.json",
26
+ "test": "bun test"
38
27
  },
39
28
  "keywords": [
40
- "memory",
41
29
  "mementos",
42
30
  "mcp",
43
- "ai",
44
- "coding-agent",
45
- "claude",
46
- "codex",
47
- "gemini",
48
- "cli",
49
- "sqlite"
31
+ "saas",
32
+ "remote",
33
+ "agents"
50
34
  ],
51
35
  "publishConfig": {
52
36
  "registry": "https://registry.npmjs.org",
53
37
  "access": "public"
54
38
  },
55
- "repository": {
56
- "type": "git",
57
- "url": "git+https://github.com/hasna/mementos.git"
58
- },
59
- "homepage": "https://github.com/hasna/mementos",
60
- "bugs": {
61
- "url": "https://github.com/hasna/mementos/issues"
62
- },
63
39
  "engines": {
64
40
  "bun": ">=1.0.0"
65
41
  },
66
42
  "author": "Andrei Hasna <andrei@hasna.com>",
67
- "license": "Apache-2.0",
68
- "dependencies": {
69
- "@hasna/cloud": "^0.1.24",
70
- "@modelcontextprotocol/sdk": "^1.12.1",
71
- "chalk": "^5.4.1",
72
- "commander": "^13.1.0",
73
- "ink": "^5.2.0",
74
- "pdf-parse": "^1.1.1",
75
- "react": "^18.3.1",
76
- "tesseract.js": "^5.1.1",
77
- "zod": "^3.24.2"
78
- },
79
- "devDependencies": {
80
- "@types/bun": "^1.2.4",
81
- "@types/react": "^18.3.18",
82
- "typescript": "^5.7.3"
83
- }
43
+ "license": "Apache-2.0"
84
44
  }