getmnemo-migrate 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/adapters/base.d.ts +34 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +7 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/directory.d.ts +9 -0
- package/dist/adapters/directory.d.ts.map +1 -0
- package/dist/adapters/directory.js +69 -0
- package/dist/adapters/directory.js.map +1 -0
- package/dist/adapters/index.d.ts +7 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +47 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/letta.d.ts +12 -0
- package/dist/adapters/letta.d.ts.map +1 -0
- package/dist/adapters/letta.js +91 -0
- package/dist/adapters/letta.js.map +1 -0
- package/dist/adapters/mem0.d.ts +12 -0
- package/dist/adapters/mem0.d.ts.map +1 -0
- package/dist/adapters/mem0.js +62 -0
- package/dist/adapters/mem0.js.map +1 -0
- package/dist/adapters/raw-csv.d.ts +9 -0
- package/dist/adapters/raw-csv.d.ts.map +1 -0
- package/dist/adapters/raw-csv.js +34 -0
- package/dist/adapters/raw-csv.js.map +1 -0
- package/dist/adapters/raw-json.d.ts +10 -0
- package/dist/adapters/raw-json.d.ts.map +1 -0
- package/dist/adapters/raw-json.js +35 -0
- package/dist/adapters/raw-json.js.map +1 -0
- package/dist/adapters/raw-jsonl.d.ts +11 -0
- package/dist/adapters/raw-jsonl.d.ts.map +1 -0
- package/dist/adapters/raw-jsonl.js +52 -0
- package/dist/adapters/raw-jsonl.js.map +1 -0
- package/dist/adapters/record-mapping.d.ts +6 -0
- package/dist/adapters/record-mapping.d.ts.map +1 -0
- package/dist/adapters/record-mapping.js +59 -0
- package/dist/adapters/record-mapping.js.map +1 -0
- package/dist/adapters/supermemory.d.ts +12 -0
- package/dist/adapters/supermemory.d.ts.map +1 -0
- package/dist/adapters/supermemory.js +58 -0
- package/dist/adapters/supermemory.js.map +1 -0
- package/dist/adapters/text-file.d.ts +9 -0
- package/dist/adapters/text-file.d.ts.map +1 -0
- package/dist/adapters/text-file.js +28 -0
- package/dist/adapters/text-file.js.map +1 -0
- package/dist/adapters/zep.d.ts +12 -0
- package/dist/adapters/zep.d.ts.map +1 -0
- package/dist/adapters/zep.js +79 -0
- package/dist/adapters/zep.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +220 -0
- package/dist/cli.js.map +1 -0
- package/dist/lib/jobs.d.ts +44 -0
- package/dist/lib/jobs.d.ts.map +1 -0
- package/dist/lib/jobs.js +146 -0
- package/dist/lib/jobs.js.map +1 -0
- package/dist/lib/migrator.d.ts +24 -0
- package/dist/lib/migrator.d.ts.map +1 -0
- package/dist/lib/migrator.js +188 -0
- package/dist/lib/migrator.js.map +1 -0
- package/dist/lib/mnemo-writer.d.ts +42 -0
- package/dist/lib/mnemo-writer.d.ts.map +1 -0
- package/dist/lib/mnemo-writer.js +155 -0
- package/dist/lib/mnemo-writer.js.map +1 -0
- package/docs/pilot-integration.md +81 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/lib/migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ImportLane, SourceRecord } from "../adapters/index.js";
|
|
2
|
+
export interface WriteOptions {
|
|
3
|
+
lane: ImportLane;
|
|
4
|
+
source: string;
|
|
5
|
+
containerTag: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WriteResult {
|
|
8
|
+
reused: boolean;
|
|
9
|
+
remoteJobIds: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface RemoteJob {
|
|
12
|
+
id: string;
|
|
13
|
+
status: string;
|
|
14
|
+
error?: {
|
|
15
|
+
code?: string | null;
|
|
16
|
+
message?: string | null;
|
|
17
|
+
} | null;
|
|
18
|
+
}
|
|
19
|
+
export interface DestinationWriter {
|
|
20
|
+
write(record: SourceRecord, options: WriteOptions): Promise<WriteResult>;
|
|
21
|
+
getJobs(ids: string[]): Promise<RemoteJob[]>;
|
|
22
|
+
}
|
|
23
|
+
export interface MnemoWriterConfig {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
workspaceId: string;
|
|
26
|
+
apiUrl?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function sourceIdentity(record: SourceRecord): string;
|
|
29
|
+
declare function splitDocument(content: string): string[];
|
|
30
|
+
export declare class MnemoWriter implements DestinationWriter {
|
|
31
|
+
private readonly config;
|
|
32
|
+
private readonly apiUrl;
|
|
33
|
+
constructor(config: MnemoWriterConfig);
|
|
34
|
+
private request;
|
|
35
|
+
write(record: SourceRecord, options: WriteOptions): Promise<WriteResult>;
|
|
36
|
+
private importMetadata;
|
|
37
|
+
private writeMemory;
|
|
38
|
+
private writeDocument;
|
|
39
|
+
getJobs(ids: string[]): Promise<RemoteJob[]>;
|
|
40
|
+
}
|
|
41
|
+
export { splitDocument };
|
|
42
|
+
//# sourceMappingURL=mnemo-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemo-writer.d.ts","sourceRoot":"","sources":["../../src/lib/mnemo-writer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE3D;AAkBD,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD;AAeD,qBAAa,WAAY,YAAW,iBAAiB;IAGvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,MAAM,EAAE,iBAAiB;YAIxC,OAAO;IA8Bf,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAM9E,OAAO,CAAC,cAAc;YAQR,WAAW;YA0BX,aAAa;IA4BrB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAQnD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
const MAX_DOCUMENT_CHARS = 450_000;
|
|
3
|
+
const MAX_MEMORY_CHARS = 3_900;
|
|
4
|
+
const MAX_ATTEMPTS = 5;
|
|
5
|
+
function sha256(value) {
|
|
6
|
+
return createHash("sha256").update(value).digest("hex");
|
|
7
|
+
}
|
|
8
|
+
export function sourceIdentity(record) {
|
|
9
|
+
return record.sourceId ?? `sha256:${sha256(record.content)}`;
|
|
10
|
+
}
|
|
11
|
+
function splitContent(content, maxChars) {
|
|
12
|
+
if (content.length <= maxChars)
|
|
13
|
+
return [content];
|
|
14
|
+
const chunks = [];
|
|
15
|
+
let offset = 0;
|
|
16
|
+
while (offset < content.length) {
|
|
17
|
+
let end = Math.min(offset + maxChars, content.length);
|
|
18
|
+
if (end < content.length) {
|
|
19
|
+
const newline = content.lastIndexOf("\n", end);
|
|
20
|
+
if (newline > offset + maxChars * 0.75)
|
|
21
|
+
end = newline + 1;
|
|
22
|
+
}
|
|
23
|
+
chunks.push(content.slice(offset, end));
|
|
24
|
+
offset = end;
|
|
25
|
+
}
|
|
26
|
+
return chunks;
|
|
27
|
+
}
|
|
28
|
+
function splitDocument(content) {
|
|
29
|
+
return splitContent(content, MAX_DOCUMENT_CHARS);
|
|
30
|
+
}
|
|
31
|
+
function retryDelayMs(response, attempt) {
|
|
32
|
+
const retryAfter = response?.headers.get("retry-after");
|
|
33
|
+
if (retryAfter) {
|
|
34
|
+
const seconds = Number(retryAfter);
|
|
35
|
+
if (Number.isFinite(seconds))
|
|
36
|
+
return Math.max(0, seconds * 1000);
|
|
37
|
+
}
|
|
38
|
+
return Math.min(30_000, 500 * 2 ** attempt);
|
|
39
|
+
}
|
|
40
|
+
async function sleep(ms) {
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
42
|
+
}
|
|
43
|
+
export class MnemoWriter {
|
|
44
|
+
config;
|
|
45
|
+
apiUrl;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
this.config = config;
|
|
48
|
+
this.apiUrl = (config.apiUrl ?? "https://api.mnemohq.com").replace(/\/$/, "");
|
|
49
|
+
}
|
|
50
|
+
async request(path, init = {}) {
|
|
51
|
+
let lastError = null;
|
|
52
|
+
for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt += 1) {
|
|
53
|
+
let response = null;
|
|
54
|
+
try {
|
|
55
|
+
response = await fetch(`${this.apiUrl}${path}`, {
|
|
56
|
+
...init,
|
|
57
|
+
headers: {
|
|
58
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
59
|
+
"x-workspace-id": this.config.workspaceId,
|
|
60
|
+
Accept: "application/json",
|
|
61
|
+
...(init.body ? { "Content-Type": "application/json" } : {}),
|
|
62
|
+
...init.headers,
|
|
63
|
+
},
|
|
64
|
+
signal: AbortSignal.timeout(60_000),
|
|
65
|
+
});
|
|
66
|
+
if (response.ok)
|
|
67
|
+
return (await response.json());
|
|
68
|
+
const body = await response.text();
|
|
69
|
+
lastError = new Error(`Mnemo request failed: ${response.status} ${body.slice(0, 500)}`);
|
|
70
|
+
if (response.status !== 429 && response.status < 500)
|
|
71
|
+
throw lastError;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
75
|
+
if (response && response.status !== 429 && response.status < 500)
|
|
76
|
+
throw lastError;
|
|
77
|
+
}
|
|
78
|
+
if (attempt < MAX_ATTEMPTS - 1)
|
|
79
|
+
await sleep(retryDelayMs(response, attempt));
|
|
80
|
+
}
|
|
81
|
+
throw lastError ?? new Error("Mnemo request failed");
|
|
82
|
+
}
|
|
83
|
+
async write(record, options) {
|
|
84
|
+
return options.lane === "document"
|
|
85
|
+
? this.writeDocument(record, options)
|
|
86
|
+
: this.writeMemory(record, options);
|
|
87
|
+
}
|
|
88
|
+
importMetadata(record, source) {
|
|
89
|
+
return {
|
|
90
|
+
...(record.metadata ?? {}),
|
|
91
|
+
importSource: source,
|
|
92
|
+
importSourceId: sourceIdentity(record),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async writeMemory(record, options) {
|
|
96
|
+
const identity = sourceIdentity(record);
|
|
97
|
+
const chunks = splitContent(record.content, MAX_MEMORY_CHARS);
|
|
98
|
+
for (let index = 0; index < chunks.length; index += 1) {
|
|
99
|
+
const suffix = chunks.length === 1 ? "" : `:part:${index + 1}-of-${chunks.length}`;
|
|
100
|
+
await this.request("/v1/memories", {
|
|
101
|
+
method: "POST",
|
|
102
|
+
body: JSON.stringify({
|
|
103
|
+
containerTag: options.containerTag,
|
|
104
|
+
items: [
|
|
105
|
+
{
|
|
106
|
+
content: chunks[index],
|
|
107
|
+
idempotencyKey: `imp_${sha256(`${options.source}:${identity}${suffix}`)}`,
|
|
108
|
+
metadata: {
|
|
109
|
+
...this.importMetadata(record, options.source),
|
|
110
|
+
...(chunks.length > 1 ? { importPart: index + 1, importParts: chunks.length } : {}),
|
|
111
|
+
},
|
|
112
|
+
source: { provider: options.source, sourceId: identity },
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return { reused: false, remoteJobIds: [] };
|
|
119
|
+
}
|
|
120
|
+
async writeDocument(record, options) {
|
|
121
|
+
const identity = sourceIdentity(record);
|
|
122
|
+
const chunks = splitDocument(record.content);
|
|
123
|
+
const remoteJobIds = [];
|
|
124
|
+
let reused = true;
|
|
125
|
+
for (let index = 0; index < chunks.length; index += 1) {
|
|
126
|
+
const suffix = chunks.length === 1 ? "" : `:part:${index + 1}-of-${chunks.length}`;
|
|
127
|
+
const response = await this.request("/v1/documents", {
|
|
128
|
+
method: "POST",
|
|
129
|
+
body: JSON.stringify({
|
|
130
|
+
containerTag: options.containerTag,
|
|
131
|
+
content: chunks[index],
|
|
132
|
+
contentType: record.contentType ?? "record",
|
|
133
|
+
customId: `imp_${sha256(`${options.source}:${identity}${suffix}`)}`,
|
|
134
|
+
metadata: {
|
|
135
|
+
...this.importMetadata(record, options.source),
|
|
136
|
+
...(chunks.length > 1 ? { importPart: index + 1, importParts: chunks.length } : {}),
|
|
137
|
+
},
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
140
|
+
remoteJobIds.push(response.jobId);
|
|
141
|
+
reused = reused && response.reused === true;
|
|
142
|
+
}
|
|
143
|
+
return { reused, remoteJobIds };
|
|
144
|
+
}
|
|
145
|
+
async getJobs(ids) {
|
|
146
|
+
if (ids.length === 0)
|
|
147
|
+
return [];
|
|
148
|
+
if (ids.length > 50)
|
|
149
|
+
throw new Error("Mnemo job lookup accepts at most 50 ids");
|
|
150
|
+
const response = await this.request(`/v1/jobs?ids=${encodeURIComponent(ids.join(","))}`);
|
|
151
|
+
return response.items;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export { splitDocument };
|
|
155
|
+
//# sourceMappingURL=mnemo-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemo-writer.js","sourceRoot":"","sources":["../../src/lib/mnemo-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Pilot Integration Contract
|
|
2
|
+
|
|
3
|
+
This is the minimum integration surface for the Kira, governance, and Mnemo pilot discussed on 22 July 2026.
|
|
4
|
+
|
|
5
|
+
## Responsibility Boundary
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
customer-approved exports
|
|
9
|
+
|
|
|
10
|
+
v
|
|
11
|
+
Mnemo Migrate -> Mnemo ingestion and isolated memory
|
|
12
|
+
|
|
|
13
|
+
v
|
|
14
|
+
governance and guardrails
|
|
15
|
+
|
|
|
16
|
+
v
|
|
17
|
+
Kira and swarm agents
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Mnemo owns historical import, source provenance, customer isolation, durable memory, and retrieval. The governance layer decides which memories an agent may use and applies business protocols. Kira and swarm agents own user interaction and task execution.
|
|
21
|
+
|
|
22
|
+
The pilot does not require Mnemo to hold HubSpot, Notion, database, or email credentials. The customer exports approved data, the import is reviewed locally, and only the approved export is sent to Mnemo. Native source connectors can be evaluated later from observed pilot demand.
|
|
23
|
+
|
|
24
|
+
## Pilot Inputs
|
|
25
|
+
|
|
26
|
+
Start with a bounded export rather than every available system:
|
|
27
|
+
|
|
28
|
+
- one customer;
|
|
29
|
+
- one source, such as a HubSpot CSV export;
|
|
30
|
+
- one Mnemo workspace and one customer-specific container;
|
|
31
|
+
- a small customer-approved retrieval question set;
|
|
32
|
+
- no secrets, credentials, or fields outside the agreed pilot scope.
|
|
33
|
+
|
|
34
|
+
## Import Procedure
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
getmnemo-migrate plan from raw-csv \
|
|
38
|
+
--file ./hubspot-export.csv \
|
|
39
|
+
--map 'content=*,id=Record ID'
|
|
40
|
+
|
|
41
|
+
getmnemo-migrate from raw-csv \
|
|
42
|
+
--file ./hubspot-export.csv \
|
|
43
|
+
--map 'content=*,id=Record ID' \
|
|
44
|
+
--container pilot:customer-name \
|
|
45
|
+
--concurrency 5
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Record the migration job ID and keep the local migration directory until acceptance is complete. A paused or interrupted import is resumed with `getmnemo-migrate resume <jobId>`; it does not restart successful records.
|
|
49
|
+
|
|
50
|
+
## Runtime API Contract
|
|
51
|
+
|
|
52
|
+
The integrated system needs three Mnemo operations:
|
|
53
|
+
|
|
54
|
+
| Operation | Endpoint | Purpose |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| Add source material | `POST /v1/documents` | Asynchronous ingestion with provenance and deterministic `customId`. |
|
|
57
|
+
| Check ingestion | `GET /v1/jobs?ids=...` | Completion and failure reconciliation in groups of at most 50 job IDs. |
|
|
58
|
+
| Retrieve context | `POST /v1/search` | Scoped retrieval for the governance layer before an agent acts. |
|
|
59
|
+
|
|
60
|
+
Authenticate with a Mnemo API key and `x-workspace-id`. Every document and search request must use the pilot customer container. API credentials stay in the server-side governance service, never in Kira’s browser or prompt.
|
|
61
|
+
|
|
62
|
+
The governance layer should call search with `includeSources: true` so it can retain evidence, then apply its own access rules before returning context to an agent.
|
|
63
|
+
|
|
64
|
+
## Acceptance Evidence
|
|
65
|
+
|
|
66
|
+
The pilot is ready for agent integration when all of the following are true:
|
|
67
|
+
|
|
68
|
+
- the import plan count matches the approved export;
|
|
69
|
+
- the final report has no pending jobs and any failed records are explained or retried;
|
|
70
|
+
- rerunning or resuming does not create duplicate source records;
|
|
71
|
+
- customer-approved test questions retrieve the expected current context and provenance;
|
|
72
|
+
- searches cannot cross the pilot customer’s workspace and container boundary;
|
|
73
|
+
- removing Mnemo access from the governance service prevents further reads and writes.
|
|
74
|
+
|
|
75
|
+
## Deliberately Deferred
|
|
76
|
+
|
|
77
|
+
- direct HubSpot or Notion OAuth connectors;
|
|
78
|
+
- continuous bidirectional synchronization;
|
|
79
|
+
- governance policy authoring inside Mnemo;
|
|
80
|
+
- Kira prompt conversion and swarm construction;
|
|
81
|
+
- broad ingestion of every customer system before pilot retrieval is validated.
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "getmnemo-migrate",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Resumable CLI for importing historical documents and memories into Mnemo.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"getmnemo-migrate": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/cli.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"docs",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"dev": "tsx src/cli.ts",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"lint": "tsc --noEmit",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"cli-progress": "^3.12.0",
|
|
26
|
+
"commander": "^12.1.0",
|
|
27
|
+
"csv-parse": "^6.1.0",
|
|
28
|
+
"kleur": "^4.1.5",
|
|
29
|
+
"ora": "^8.1.1"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/cli-progress": "^3.11.6",
|
|
33
|
+
"@types/node": "^22.10.0",
|
|
34
|
+
"tsx": "^4.19.2",
|
|
35
|
+
"typescript": "^5.7.2",
|
|
36
|
+
"vitest": "^4.1.10"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20"
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"getmnemo",
|
|
43
|
+
"migrate",
|
|
44
|
+
"import",
|
|
45
|
+
"mem0",
|
|
46
|
+
"zep",
|
|
47
|
+
"supermemory",
|
|
48
|
+
"letta"
|
|
49
|
+
],
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/ledgermem/getmnemo-migrate.git"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://github.com/ledgermem/getmnemo-migrate#readme",
|
|
56
|
+
"bugs": {
|
|
57
|
+
"url": "https://github.com/ledgermem/getmnemo-migrate/issues"
|
|
58
|
+
}
|
|
59
|
+
}
|