@grant-vine/wunderkind 0.3.0 → 0.4.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/.claude-plugin/plugin.json +1 -1
- package/README.md +156 -36
- package/agents/brand-builder.md +16 -2
- package/agents/ciso.md +23 -0
- package/agents/creative-director.md +14 -0
- package/agents/fullstack-wunderkind.md +16 -0
- package/agents/marketing-wunderkind.md +14 -0
- package/agents/operations-lead.md +15 -0
- package/agents/product-wunderkind.md +15 -0
- package/agents/qa-specialist.md +14 -0
- package/dist/agents/brand-builder.d.ts.map +1 -1
- package/dist/agents/brand-builder.js +17 -3
- package/dist/agents/brand-builder.js.map +1 -1
- package/dist/agents/ciso.d.ts.map +1 -1
- package/dist/agents/ciso.js +24 -1
- package/dist/agents/ciso.js.map +1 -1
- package/dist/agents/creative-director.d.ts.map +1 -1
- package/dist/agents/creative-director.js +15 -1
- package/dist/agents/creative-director.js.map +1 -1
- package/dist/agents/fullstack-wunderkind.d.ts.map +1 -1
- package/dist/agents/fullstack-wunderkind.js +17 -1
- package/dist/agents/fullstack-wunderkind.js.map +1 -1
- package/dist/agents/marketing-wunderkind.d.ts.map +1 -1
- package/dist/agents/marketing-wunderkind.js +15 -1
- package/dist/agents/marketing-wunderkind.js.map +1 -1
- package/dist/agents/operations-lead.d.ts.map +1 -1
- package/dist/agents/operations-lead.js +16 -1
- package/dist/agents/operations-lead.js.map +1 -1
- package/dist/agents/product-wunderkind.d.ts.map +1 -1
- package/dist/agents/product-wunderkind.js +16 -1
- package/dist/agents/product-wunderkind.js.map +1 -1
- package/dist/agents/qa-specialist.d.ts.map +1 -1
- package/dist/agents/qa-specialist.js +15 -1
- package/dist/agents/qa-specialist.js.map +1 -1
- package/dist/cli/cli-installer.d.ts.map +1 -1
- package/dist/cli/cli-installer.js +48 -4
- package/dist/cli/cli-installer.js.map +1 -1
- package/dist/cli/config-manager/index.d.ts +5 -3
- package/dist/cli/config-manager/index.d.ts.map +1 -1
- package/dist/cli/config-manager/index.js +160 -59
- package/dist/cli/config-manager/index.js.map +1 -1
- package/dist/cli/gitignore-manager.d.ts +8 -0
- package/dist/cli/gitignore-manager.d.ts.map +1 -0
- package/dist/cli/gitignore-manager.js +57 -0
- package/dist/cli/gitignore-manager.js.map +1 -0
- package/dist/cli/index.js +85 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/memory-commands.d.ts +3 -0
- package/dist/cli/memory-commands.d.ts.map +1 -0
- package/dist/cli/memory-commands.js +138 -0
- package/dist/cli/memory-commands.js.map +1 -0
- package/dist/cli/tui-installer.d.ts +2 -1
- package/dist/cli/tui-installer.d.ts.map +1 -1
- package/dist/cli/tui-installer.js +385 -18
- package/dist/cli/tui-installer.js.map +1 -1
- package/dist/cli/types.d.ts +43 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -6
- package/dist/index.js.map +1 -1
- package/dist/memory/adapters/file.d.ts +21 -0
- package/dist/memory/adapters/file.d.ts.map +1 -0
- package/dist/memory/adapters/file.js +232 -0
- package/dist/memory/adapters/file.js.map +1 -0
- package/dist/memory/adapters/mem0.d.ts +37 -0
- package/dist/memory/adapters/mem0.d.ts.map +1 -0
- package/dist/memory/adapters/mem0.js +171 -0
- package/dist/memory/adapters/mem0.js.map +1 -0
- package/dist/memory/adapters/sqlite.d.ts +21 -0
- package/dist/memory/adapters/sqlite.d.ts.map +1 -0
- package/dist/memory/adapters/sqlite.js +198 -0
- package/dist/memory/adapters/sqlite.js.map +1 -0
- package/dist/memory/adapters/stub.d.ts +20 -0
- package/dist/memory/adapters/stub.d.ts.map +1 -0
- package/dist/memory/adapters/stub.js +58 -0
- package/dist/memory/adapters/stub.js.map +1 -0
- package/dist/memory/adapters/types.d.ts +45 -0
- package/dist/memory/adapters/types.d.ts.map +1 -0
- package/dist/memory/adapters/types.js +2 -0
- package/dist/memory/adapters/types.js.map +1 -0
- package/dist/memory/adapters/vector.d.ts +29 -0
- package/dist/memory/adapters/vector.d.ts.map +1 -0
- package/dist/memory/adapters/vector.js +347 -0
- package/dist/memory/adapters/vector.js.map +1 -0
- package/dist/memory/docker.d.ts +9 -0
- package/dist/memory/docker.d.ts.map +1 -0
- package/dist/memory/docker.js +43 -0
- package/dist/memory/docker.js.map +1 -0
- package/dist/memory/format.d.ts +5 -0
- package/dist/memory/format.d.ts.map +1 -0
- package/dist/memory/format.js +41 -0
- package/dist/memory/format.js.map +1 -0
- package/dist/memory/index.d.ts +19 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +183 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/slug.d.ts +2 -0
- package/dist/memory/slug.d.ts.map +1 -0
- package/dist/memory/slug.js +40 -0
- package/dist/memory/slug.js.map +1 -0
- package/dist/memory/tools.d.ts +3 -0
- package/dist/memory/tools.d.ts.map +1 -0
- package/dist/memory/tools.js +84 -0
- package/dist/memory/tools.js.map +1 -0
- package/package.json +13 -3
- package/skills/memory-manager/SKILL.md +48 -0
package/dist/cli/types.d.ts
CHANGED
|
@@ -1,16 +1,48 @@
|
|
|
1
1
|
export type BooleanArg = "no" | "yes";
|
|
2
|
+
export type InstallScope = "global" | "project";
|
|
3
|
+
export type TeamCulture = "formal-strict" | "pragmatic-balanced" | "experimental-informal";
|
|
4
|
+
export type OrgStructure = "flat" | "hierarchical";
|
|
5
|
+
export type CisoPersonality = "paranoid-enforcer" | "pragmatic-risk-manager" | "educator-collaborator";
|
|
6
|
+
export type CtoPersonality = "grizzled-sysadmin" | "startup-bro" | "code-archaeologist";
|
|
7
|
+
export type CmoPersonality = "data-driven" | "brand-storyteller" | "growth-hacker";
|
|
8
|
+
export type QaPersonality = "rule-enforcer" | "risk-based-pragmatist" | "rubber-duck";
|
|
9
|
+
export type ProductPersonality = "user-advocate" | "velocity-optimizer" | "outcome-obsessed";
|
|
10
|
+
export type OpsPersonality = "on-call-veteran" | "efficiency-maximiser" | "process-purist";
|
|
11
|
+
export type CreativePersonality = "perfectionist-craftsperson" | "bold-provocateur" | "pragmatic-problem-solver";
|
|
12
|
+
export type BrandPersonality = "community-evangelist" | "pr-spinner" | "authentic-builder";
|
|
2
13
|
export interface InstallArgs {
|
|
3
14
|
tui: boolean;
|
|
15
|
+
scope: InstallScope;
|
|
4
16
|
region?: string | undefined;
|
|
5
17
|
industry?: string | undefined;
|
|
6
18
|
primaryRegulation?: string | undefined;
|
|
7
19
|
secondaryRegulation?: string | undefined;
|
|
20
|
+
teamCulture?: string | undefined;
|
|
21
|
+
orgStructure?: string | undefined;
|
|
22
|
+
cisoPersonality?: string | undefined;
|
|
23
|
+
ctoPersonality?: string | undefined;
|
|
24
|
+
cmoPersonality?: string | undefined;
|
|
25
|
+
qaPersonality?: string | undefined;
|
|
26
|
+
productPersonality?: string | undefined;
|
|
27
|
+
opsPersonality?: string | undefined;
|
|
28
|
+
creativePersonality?: string | undefined;
|
|
29
|
+
brandPersonality?: string | undefined;
|
|
8
30
|
}
|
|
9
31
|
export interface InstallConfig {
|
|
10
32
|
region: string;
|
|
11
33
|
industry: string;
|
|
12
34
|
primaryRegulation: string;
|
|
13
35
|
secondaryRegulation: string;
|
|
36
|
+
teamCulture: TeamCulture;
|
|
37
|
+
orgStructure: OrgStructure;
|
|
38
|
+
cisoPersonality: CisoPersonality;
|
|
39
|
+
ctoPersonality: CtoPersonality;
|
|
40
|
+
cmoPersonality: CmoPersonality;
|
|
41
|
+
qaPersonality: QaPersonality;
|
|
42
|
+
productPersonality: ProductPersonality;
|
|
43
|
+
opsPersonality: OpsPersonality;
|
|
44
|
+
creativePersonality: CreativePersonality;
|
|
45
|
+
brandPersonality: BrandPersonality;
|
|
14
46
|
}
|
|
15
47
|
export interface ConfigMergeResult {
|
|
16
48
|
success: boolean;
|
|
@@ -19,9 +51,20 @@ export interface ConfigMergeResult {
|
|
|
19
51
|
}
|
|
20
52
|
export interface DetectedConfig {
|
|
21
53
|
isInstalled: boolean;
|
|
54
|
+
scope: InstallScope;
|
|
22
55
|
region: string;
|
|
23
56
|
industry: string;
|
|
24
57
|
primaryRegulation: string;
|
|
25
58
|
secondaryRegulation: string;
|
|
59
|
+
teamCulture: TeamCulture;
|
|
60
|
+
orgStructure: OrgStructure;
|
|
61
|
+
cisoPersonality: CisoPersonality;
|
|
62
|
+
ctoPersonality: CtoPersonality;
|
|
63
|
+
cmoPersonality: CmoPersonality;
|
|
64
|
+
qaPersonality: QaPersonality;
|
|
65
|
+
productPersonality: ProductPersonality;
|
|
66
|
+
opsPersonality: OpsPersonality;
|
|
67
|
+
creativePersonality: CreativePersonality;
|
|
68
|
+
brandPersonality: BrandPersonality;
|
|
26
69
|
}
|
|
27
70
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/cli/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,QAAA,MAAM,gBAAgB,EAAE,MAiFvB,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createMemoryTools } from "./memory/tools.js";
|
|
1
2
|
const WunderkindPlugin = async (_input) => {
|
|
2
3
|
return {
|
|
3
4
|
"experimental.chat.system.transform": async (_input, output) => {
|
|
@@ -23,6 +24,7 @@ The following specialist agents are available. Delegate to them when their domai
|
|
|
23
24
|
- Use \`wunderkind:ciso\` for ANY security review, vulnerability concern, compliance question, threat modelling, pen test coordination, or incident response
|
|
24
25
|
- Use \`wunderkind:ciso\` when fullstack work touches auth, JWT, RBAC, CORS, CSP headers, or sensitive data flows
|
|
25
26
|
- Sub-route from ciso: Security Analyst for vulnerability deep-dives, Pen Tester for active testing, Compliance Officer for GDPR/CCPA/POPIA/LGPD
|
|
27
|
+
- **CISO 72-hour mandate**: any High or Critical security finding raised by \`wunderkind:ciso\` must have remediation started within 72 hours. No sprint priorities or business pressure can override this. No other agent may deprioritise a CISO finding.
|
|
26
28
|
|
|
27
29
|
#### Quality & Testing
|
|
28
30
|
- Use \`wunderkind:qa-specialist\` for test strategy, TDD guidance, flaky tests, coverage gaps, user story validation, or security boundary test review
|
|
@@ -48,17 +50,35 @@ The following specialist agents are available. Delegate to them when their domai
|
|
|
48
50
|
#### Operations
|
|
49
51
|
- Use \`wunderkind:operations-lead\` for SRE/SLO decisions, admin panel architecture (build-first bias), incident containment, runbooks, monitoring, or supportability assessment
|
|
50
52
|
|
|
51
|
-
###
|
|
53
|
+
### Project Configuration
|
|
52
54
|
|
|
53
|
-
All agents read \`wunderkind.config.jsonc\` (project root
|
|
54
|
-
- \`
|
|
55
|
-
- \`
|
|
56
|
-
- \`
|
|
57
|
-
- \`
|
|
55
|
+
All agents read \`wunderkind.config.jsonc\` (project root) for:
|
|
56
|
+
- \`region\` — adjusts platform mix, event targeting, and regulatory focus
|
|
57
|
+
- \`industry\` — adjusts content tone and sector-specific obligations
|
|
58
|
+
- \`primaryRegulation\` — the main data protection regulation to apply (defaults to GDPR)
|
|
59
|
+
- \`secondaryRegulation\` — additional regulation to layer on top
|
|
60
|
+
- \`teamCulture\` — communication style baseline: \`formal-strict\` | \`pragmatic-balanced\` | \`experimental-informal\`
|
|
61
|
+
- \`orgStructure\` — \`flat\` (peer escalation) | \`hierarchical\` (CISO has hard veto on security)
|
|
62
|
+
- \`cisoPersonality\`, \`ctoPersonality\`, \`cmoPersonality\`, \`qaPersonality\`, \`productPersonality\`, \`opsPersonality\`, \`creativePersonality\`, \`brandPersonality\` — character archetypes per agent
|
|
58
63
|
|
|
59
64
|
If the file is absent or fields are blank, agents default to global best practices.
|
|
65
|
+
|
|
66
|
+
### Agent Memory
|
|
67
|
+
|
|
68
|
+
Each agent maintains a memory file at \`.wunderkind/memory/<agent-name>.md\` in the project root. These files accumulate project-specific knowledge over time. Agents read their own memory file at the start of relevant tasks. If the file does not exist, agents begin with a clean slate and may create it as they learn.
|
|
69
|
+
|
|
70
|
+
Memory files:
|
|
71
|
+
- \`.wunderkind/memory/ciso.md\`
|
|
72
|
+
- \`.wunderkind/memory/fullstack-wunderkind.md\`
|
|
73
|
+
- \`.wunderkind/memory/marketing-wunderkind.md\`
|
|
74
|
+
- \`.wunderkind/memory/creative-director.md\`
|
|
75
|
+
- \`.wunderkind/memory/product-wunderkind.md\`
|
|
76
|
+
- \`.wunderkind/memory/brand-builder.md\`
|
|
77
|
+
- \`.wunderkind/memory/qa-specialist.md\`
|
|
78
|
+
- \`.wunderkind/memory/operations-lead.md\`
|
|
60
79
|
`.trim());
|
|
61
80
|
},
|
|
81
|
+
tool: createMemoryTools(),
|
|
62
82
|
};
|
|
63
83
|
};
|
|
64
84
|
export { WunderkindPlugin as default };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,gBAAgB,GAAW,KAAK,EAAE,MAAM,EAAE,EAAE;IAChD,OAAO;QACL,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ExB,CAAC,IAAI,EAAE,CAAC,CAAC;QACN,CAAC;QACD,IAAI,EAAE,iBAAiB,EAAE;KAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HistoryEntry, MemoryAdapter, MemoryCount, MemoryEntry, StaleAnalysis } from "./types.js";
|
|
2
|
+
export declare class FileAdapter implements MemoryAdapter {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(projectDir: string);
|
|
5
|
+
read(agent: string): Promise<MemoryEntry[]>;
|
|
6
|
+
write(agent: string, entry: Omit<MemoryEntry, "id">): Promise<MemoryEntry>;
|
|
7
|
+
update(id: string, content: string): Promise<MemoryEntry>;
|
|
8
|
+
delete(id: string): Promise<void>;
|
|
9
|
+
deleteAll(agent: string): Promise<void>;
|
|
10
|
+
search(agent: string, query: string): Promise<MemoryEntry[]>;
|
|
11
|
+
history(_id: string): Promise<HistoryEntry[]>;
|
|
12
|
+
analyzeStale(agent: string): Promise<StaleAnalysis>;
|
|
13
|
+
prune(agent: string, idsToRemove: string[]): Promise<number>;
|
|
14
|
+
count(agent: string): Promise<MemoryCount>;
|
|
15
|
+
listAgents(): Promise<string[]>;
|
|
16
|
+
status(): Promise<{
|
|
17
|
+
ok: boolean;
|
|
18
|
+
message: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/memory/adapters/file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAItG,qBAAa,WAAY,YAAW,aAAa;;gBAGnC,UAAU,EAAE,MAAM;IAIxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAa3C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B1E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAW5D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI7C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKnD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB1C,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa/B,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAmH3D"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { analyzeStale, generateId, generateSlug } from "../format.js";
|
|
4
|
+
const FRONTMATTER = "---";
|
|
5
|
+
export class FileAdapter {
|
|
6
|
+
#memoryDir;
|
|
7
|
+
constructor(projectDir) {
|
|
8
|
+
this.#memoryDir = path.join(projectDir, ".wunderkind", "memory");
|
|
9
|
+
}
|
|
10
|
+
async read(agent) {
|
|
11
|
+
const filePath = this.#getPath(agent);
|
|
12
|
+
try {
|
|
13
|
+
const content = await readFile(filePath, "utf-8");
|
|
14
|
+
return this.#parseEntries(agent, content);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (isErrnoError(err) && err.code === "ENOENT") {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async write(agent, entry) {
|
|
24
|
+
const filePath = this.#getPath(agent);
|
|
25
|
+
await mkdir(this.#memoryDir, { recursive: true });
|
|
26
|
+
const id = generateId();
|
|
27
|
+
const slug = entry.slug.trim().length > 0 ? entry.slug : generateSlug(entry.content);
|
|
28
|
+
const createdAt = entry.createdAt;
|
|
29
|
+
const date = formatDate(createdAt);
|
|
30
|
+
const section = this.#formatSection({ ...entry, id, slug }, date);
|
|
31
|
+
let existing = "";
|
|
32
|
+
try {
|
|
33
|
+
existing = await readFile(filePath, "utf-8");
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (!isErrnoError(err) || err.code !== "ENOENT") {
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (existing.trim().length === 0) {
|
|
41
|
+
const header = this.#frontmatter(agent);
|
|
42
|
+
await writeFile(filePath, `${header}\n\n${section}`, "utf-8");
|
|
43
|
+
return { ...entry, id, slug };
|
|
44
|
+
}
|
|
45
|
+
await writeFile(filePath, `${existing.trim()}\n\n${section}`, "utf-8");
|
|
46
|
+
return { ...entry, id, slug };
|
|
47
|
+
}
|
|
48
|
+
async update(id, content) {
|
|
49
|
+
const entry = await this.#updateEntry(id, content);
|
|
50
|
+
return entry;
|
|
51
|
+
}
|
|
52
|
+
async delete(id) {
|
|
53
|
+
await this.#removeEntry(id);
|
|
54
|
+
}
|
|
55
|
+
async deleteAll(agent) {
|
|
56
|
+
await mkdir(this.#memoryDir, { recursive: true });
|
|
57
|
+
const filePath = this.#getPath(agent);
|
|
58
|
+
await writeFile(filePath, this.#frontmatter(agent), "utf-8");
|
|
59
|
+
}
|
|
60
|
+
async search(agent, query) {
|
|
61
|
+
const entries = await this.read(agent);
|
|
62
|
+
const needle = query.toLowerCase();
|
|
63
|
+
return entries.filter((entry) => {
|
|
64
|
+
return (entry.content.toLowerCase().includes(needle) ||
|
|
65
|
+
entry.slug.toLowerCase().includes(needle));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async history(_id) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
async analyzeStale(agent) {
|
|
72
|
+
const entries = await this.read(agent);
|
|
73
|
+
return analyzeStale(entries);
|
|
74
|
+
}
|
|
75
|
+
async prune(agent, idsToRemove) {
|
|
76
|
+
const entries = await this.read(agent);
|
|
77
|
+
const ids = new Set(idsToRemove);
|
|
78
|
+
const kept = entries.filter((entry) => !ids.has(entry.id));
|
|
79
|
+
const removed = entries.length - kept.length;
|
|
80
|
+
await this.#writeAll(agent, kept);
|
|
81
|
+
return removed;
|
|
82
|
+
}
|
|
83
|
+
async count(agent) {
|
|
84
|
+
const entries = await this.read(agent);
|
|
85
|
+
if (entries.length === 0) {
|
|
86
|
+
return { total: 0, pinned: 0, oldest: 0, newest: 0 };
|
|
87
|
+
}
|
|
88
|
+
let pinned = 0;
|
|
89
|
+
let oldest = entries[0]?.createdAt ?? 0;
|
|
90
|
+
let newest = entries[0]?.createdAt ?? 0;
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
if (entry.pinned)
|
|
93
|
+
pinned += 1;
|
|
94
|
+
if (entry.createdAt < oldest)
|
|
95
|
+
oldest = entry.createdAt;
|
|
96
|
+
if (entry.createdAt > newest)
|
|
97
|
+
newest = entry.createdAt;
|
|
98
|
+
}
|
|
99
|
+
return { total: entries.length, pinned, oldest, newest };
|
|
100
|
+
}
|
|
101
|
+
async listAgents() {
|
|
102
|
+
let files = [];
|
|
103
|
+
try {
|
|
104
|
+
files = await readdir(this.#memoryDir);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (isErrnoError(err) && err.code === "ENOENT") {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
return files.filter((f) => f.endsWith(".md")).map((f) => f.slice(0, -3)).sort();
|
|
113
|
+
}
|
|
114
|
+
async status() {
|
|
115
|
+
return { ok: true, message: "file adapter ready" };
|
|
116
|
+
}
|
|
117
|
+
#getPath(agent) {
|
|
118
|
+
return path.join(this.#memoryDir, `${agent}.md`);
|
|
119
|
+
}
|
|
120
|
+
#frontmatter(agent) {
|
|
121
|
+
const date = formatDate(Date.now());
|
|
122
|
+
return [FRONTMATTER, `agent: ${agent}`, `compacted: ${date}`, FRONTMATTER].join("\n");
|
|
123
|
+
}
|
|
124
|
+
#formatSection(entry, date) {
|
|
125
|
+
const pinnedLine = entry.pinned ? "\n> pinned" : "";
|
|
126
|
+
return `## [${date}] ${entry.slug}\nid: ${entry.id}\n${entry.content}${pinnedLine}`;
|
|
127
|
+
}
|
|
128
|
+
#parseEntries(agent, content) {
|
|
129
|
+
const sections = content.split(/\n## /).slice(1);
|
|
130
|
+
const entries = [];
|
|
131
|
+
for (const section of sections) {
|
|
132
|
+
const lines = section.split("\n");
|
|
133
|
+
const header = lines[0];
|
|
134
|
+
if (!header)
|
|
135
|
+
continue;
|
|
136
|
+
const headingMatch = header.match(/^\[(\d{4}-\d{2}-\d{2})\]\s+(.+)$/);
|
|
137
|
+
if (!headingMatch)
|
|
138
|
+
continue;
|
|
139
|
+
const [, dateText, slugText] = headingMatch;
|
|
140
|
+
if (!dateText || !slugText)
|
|
141
|
+
continue;
|
|
142
|
+
const idLine = lines.find((line) => line.startsWith("id: "));
|
|
143
|
+
if (!idLine)
|
|
144
|
+
continue;
|
|
145
|
+
const id = idLine.replace("id: ", "").trim();
|
|
146
|
+
const pinned = lines.some((line) => line.trim() === "> pinned");
|
|
147
|
+
const contentLines = lines.filter((line) => {
|
|
148
|
+
return line !== header && !line.startsWith("id: ") && line.trim() !== "> pinned";
|
|
149
|
+
});
|
|
150
|
+
const entryContent = contentLines.join("\n").trim();
|
|
151
|
+
const createdAt = new Date(dateText).getTime();
|
|
152
|
+
entries.push({
|
|
153
|
+
id,
|
|
154
|
+
agent,
|
|
155
|
+
slug: slugText,
|
|
156
|
+
content: entryContent,
|
|
157
|
+
createdAt,
|
|
158
|
+
pinned,
|
|
159
|
+
metadata: {},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return entries;
|
|
163
|
+
}
|
|
164
|
+
async #writeAll(agent, entries) {
|
|
165
|
+
await mkdir(this.#memoryDir, { recursive: true });
|
|
166
|
+
const filePath = this.#getPath(agent);
|
|
167
|
+
if (entries.length === 0) {
|
|
168
|
+
await writeFile(filePath, this.#frontmatter(agent), "utf-8");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const header = this.#frontmatter(agent);
|
|
172
|
+
const body = entries
|
|
173
|
+
.map((entry) => {
|
|
174
|
+
const date = formatDate(entry.createdAt);
|
|
175
|
+
return this.#formatSection(entry, date);
|
|
176
|
+
})
|
|
177
|
+
.join("\n\n");
|
|
178
|
+
await writeFile(filePath, `${header}\n\n${body}`, "utf-8");
|
|
179
|
+
}
|
|
180
|
+
async #updateEntry(id, content) {
|
|
181
|
+
const agent = await this.#findAgent(id);
|
|
182
|
+
if (!agent) {
|
|
183
|
+
throw new Error(`Memory entry not found: ${id}`);
|
|
184
|
+
}
|
|
185
|
+
const entries = await this.read(agent);
|
|
186
|
+
const next = entries.map((entry) => entry.id === id ? { ...entry, content } : entry);
|
|
187
|
+
await this.#writeAll(agent, next);
|
|
188
|
+
const updated = next.find((entry) => entry.id === id);
|
|
189
|
+
if (!updated) {
|
|
190
|
+
throw new Error(`Memory entry not found: ${id}`);
|
|
191
|
+
}
|
|
192
|
+
return updated;
|
|
193
|
+
}
|
|
194
|
+
async #removeEntry(id) {
|
|
195
|
+
const agent = await this.#findAgent(id);
|
|
196
|
+
if (!agent) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const entries = await this.read(agent);
|
|
200
|
+
const filtered = entries.filter((entry) => entry.id !== id);
|
|
201
|
+
await this.#writeAll(agent, filtered);
|
|
202
|
+
}
|
|
203
|
+
async #findAgent(id) {
|
|
204
|
+
let files = [];
|
|
205
|
+
try {
|
|
206
|
+
files = await readdir(this.#memoryDir);
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
if (isErrnoError(err) && err.code === "ENOENT") {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
for (const file of files) {
|
|
215
|
+
if (!file.endsWith(".md"))
|
|
216
|
+
continue;
|
|
217
|
+
const agent = file.slice(0, -3);
|
|
218
|
+
const entries = await this.read(agent);
|
|
219
|
+
if (entries.some((entry) => entry.id === id)) {
|
|
220
|
+
return agent;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function isErrnoError(err) {
|
|
227
|
+
return typeof err === "object" && err !== null && "code" in err;
|
|
228
|
+
}
|
|
229
|
+
function formatDate(timestamp) {
|
|
230
|
+
return new Date(timestamp).toISOString().slice(0, 10);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/memory/adapters/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { HistoryEntry, MemoryAdapter, MemoryCount, MemoryEntry, StaleAnalysis } from "./types.js";
|
|
2
|
+
export interface Mem0AdapterConfig {
|
|
3
|
+
url: string;
|
|
4
|
+
projectSlug: string;
|
|
5
|
+
llmProvider?: string;
|
|
6
|
+
llmModel?: string;
|
|
7
|
+
llmBaseUrl?: string;
|
|
8
|
+
embedProvider?: string;
|
|
9
|
+
embedModel?: string;
|
|
10
|
+
embedDims?: number;
|
|
11
|
+
embedBaseUrl?: string;
|
|
12
|
+
vectorStore?: string;
|
|
13
|
+
vectorStoreHost?: string;
|
|
14
|
+
vectorStorePort?: number;
|
|
15
|
+
vectorStoreCollection?: string;
|
|
16
|
+
graphEnabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class Mem0Adapter implements MemoryAdapter {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(config: Mem0AdapterConfig);
|
|
21
|
+
write(agent: string, entry: Omit<MemoryEntry, "id">): Promise<MemoryEntry>;
|
|
22
|
+
read(agent: string): Promise<MemoryEntry[]>;
|
|
23
|
+
update(id: string, content: string): Promise<MemoryEntry>;
|
|
24
|
+
delete(id: string): Promise<void>;
|
|
25
|
+
deleteAll(agent: string): Promise<void>;
|
|
26
|
+
search(agent: string, query: string): Promise<MemoryEntry[]>;
|
|
27
|
+
history(id: string): Promise<HistoryEntry[]>;
|
|
28
|
+
analyzeStale(agent: string): Promise<StaleAnalysis>;
|
|
29
|
+
prune(_agent: string, idsToRemove: string[]): Promise<number>;
|
|
30
|
+
count(agent: string): Promise<MemoryCount>;
|
|
31
|
+
listAgents(): Promise<string[]>;
|
|
32
|
+
status(): Promise<{
|
|
33
|
+
ok: boolean;
|
|
34
|
+
message: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mem0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0.d.ts","sourceRoot":"","sources":["../../../src/memory/adapters/mem0.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEtG,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAmGD,qBAAa,WAAY,YAAW,aAAa;;gBAMnC,MAAM,EAAE,iBAAiB;IAa/B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB1E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAM3C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK5D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAS5C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKnD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAS7D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB1C,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,MAAM,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAyB1D"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Memory } from "mem0ai/oss";
|
|
2
|
+
import { analyzeStale, generateId, generateSlug } from "../format.js";
|
|
3
|
+
function buildMem0Config(cfg) {
|
|
4
|
+
const result = {};
|
|
5
|
+
if (cfg.llmProvider) {
|
|
6
|
+
const llmConfig = {
|
|
7
|
+
provider: cfg.llmProvider,
|
|
8
|
+
config: { model: cfg.llmModel ?? "llama3.1" },
|
|
9
|
+
};
|
|
10
|
+
if (cfg.llmBaseUrl) {
|
|
11
|
+
llmConfig.config.ollama_base_url = cfg.llmBaseUrl;
|
|
12
|
+
}
|
|
13
|
+
result.llm = llmConfig;
|
|
14
|
+
}
|
|
15
|
+
if (cfg.embedProvider) {
|
|
16
|
+
const embedConfig = {
|
|
17
|
+
provider: cfg.embedProvider,
|
|
18
|
+
config: { model: cfg.embedModel ?? "nomic-embed-text" },
|
|
19
|
+
};
|
|
20
|
+
if (cfg.embedDims) {
|
|
21
|
+
embedConfig.config.embedding_dims = cfg.embedDims;
|
|
22
|
+
}
|
|
23
|
+
if (cfg.embedBaseUrl) {
|
|
24
|
+
embedConfig.config.ollama_base_url = cfg.embedBaseUrl;
|
|
25
|
+
}
|
|
26
|
+
result.embedder = embedConfig;
|
|
27
|
+
}
|
|
28
|
+
if (cfg.vectorStore && cfg.vectorStore !== "memory") {
|
|
29
|
+
const vsConfig = {
|
|
30
|
+
provider: cfg.vectorStore,
|
|
31
|
+
config: {},
|
|
32
|
+
};
|
|
33
|
+
if (cfg.vectorStoreCollection) {
|
|
34
|
+
vsConfig.config.collection_name = cfg.vectorStoreCollection;
|
|
35
|
+
}
|
|
36
|
+
if (cfg.vectorStoreHost) {
|
|
37
|
+
vsConfig.config.host = cfg.vectorStoreHost;
|
|
38
|
+
}
|
|
39
|
+
if (cfg.vectorStorePort) {
|
|
40
|
+
vsConfig.config.port = cfg.vectorStorePort;
|
|
41
|
+
}
|
|
42
|
+
if (cfg.embedDims) {
|
|
43
|
+
vsConfig.config.embedding_model_dims = cfg.embedDims;
|
|
44
|
+
}
|
|
45
|
+
result.vector_store = vsConfig;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
export class Mem0Adapter {
|
|
50
|
+
#memory;
|
|
51
|
+
#url;
|
|
52
|
+
#projectSlug;
|
|
53
|
+
#knownAgents;
|
|
54
|
+
constructor(config) {
|
|
55
|
+
this.#url = config.url;
|
|
56
|
+
this.#projectSlug = config.projectSlug;
|
|
57
|
+
this.#knownAgents = new Set();
|
|
58
|
+
const mem0Config = buildMem0Config(config);
|
|
59
|
+
const hasConfig = Object.keys(mem0Config).length > 0;
|
|
60
|
+
this.#memory = hasConfig ? Memory.fromConfig(mem0Config) : new Memory();
|
|
61
|
+
}
|
|
62
|
+
#scopedAgent(agent) {
|
|
63
|
+
return `${this.#projectSlug}:${agent}`;
|
|
64
|
+
}
|
|
65
|
+
async write(agent, entry) {
|
|
66
|
+
this.#knownAgents.add(agent);
|
|
67
|
+
const result = await this.#memory.add([{ role: "user", content: entry.content }], { agentId: this.#scopedAgent(agent), infer: false, metadata: entry.metadata });
|
|
68
|
+
const item = result.results[0];
|
|
69
|
+
if (!item) {
|
|
70
|
+
return {
|
|
71
|
+
id: generateId(),
|
|
72
|
+
agent,
|
|
73
|
+
slug: entry.slug,
|
|
74
|
+
content: entry.content,
|
|
75
|
+
createdAt: entry.createdAt,
|
|
76
|
+
pinned: entry.pinned,
|
|
77
|
+
metadata: entry.metadata,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return this.#mapItem(item, agent);
|
|
81
|
+
}
|
|
82
|
+
async read(agent) {
|
|
83
|
+
this.#knownAgents.add(agent);
|
|
84
|
+
const result = await this.#memory.getAll({ agentId: this.#scopedAgent(agent) });
|
|
85
|
+
return result.results.map((item) => this.#mapItem(item, agent));
|
|
86
|
+
}
|
|
87
|
+
async update(id, content) {
|
|
88
|
+
await this.#memory.update(id, content);
|
|
89
|
+
const item = await this.#memory.get(id);
|
|
90
|
+
const entry = this.#mapItem(item, "");
|
|
91
|
+
return { ...entry, id };
|
|
92
|
+
}
|
|
93
|
+
async delete(id) {
|
|
94
|
+
await this.#memory.delete(id);
|
|
95
|
+
}
|
|
96
|
+
async deleteAll(agent) {
|
|
97
|
+
await this.#memory.deleteAll({ agentId: this.#scopedAgent(agent) });
|
|
98
|
+
}
|
|
99
|
+
async search(agent, query) {
|
|
100
|
+
const result = await this.#memory.search(query, { agentId: this.#scopedAgent(agent) });
|
|
101
|
+
return result.results.map((item) => this.#mapItem(item, agent));
|
|
102
|
+
}
|
|
103
|
+
async history(id) {
|
|
104
|
+
const result = await this.#memory.history(id);
|
|
105
|
+
return result.map((item) => ({
|
|
106
|
+
action: item.event ?? "",
|
|
107
|
+
value: item.new_memory ?? "",
|
|
108
|
+
timestamp: item.created_at ? new Date(item.created_at).getTime() : Date.now(),
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
async analyzeStale(agent) {
|
|
112
|
+
const entries = await this.read(agent);
|
|
113
|
+
return analyzeStale(entries);
|
|
114
|
+
}
|
|
115
|
+
async prune(_agent, idsToRemove) {
|
|
116
|
+
let removed = 0;
|
|
117
|
+
for (const id of idsToRemove) {
|
|
118
|
+
await this.#memory.delete(id);
|
|
119
|
+
removed += 1;
|
|
120
|
+
}
|
|
121
|
+
return removed;
|
|
122
|
+
}
|
|
123
|
+
async count(agent) {
|
|
124
|
+
const entries = await this.read(agent);
|
|
125
|
+
if (entries.length === 0) {
|
|
126
|
+
return { total: 0, pinned: 0, oldest: 0, newest: 0 };
|
|
127
|
+
}
|
|
128
|
+
let pinned = 0;
|
|
129
|
+
let oldest = entries[0]?.createdAt ?? 0;
|
|
130
|
+
let newest = entries[0]?.createdAt ?? 0;
|
|
131
|
+
for (const entry of entries) {
|
|
132
|
+
if (entry.pinned)
|
|
133
|
+
pinned += 1;
|
|
134
|
+
if (entry.createdAt < oldest)
|
|
135
|
+
oldest = entry.createdAt;
|
|
136
|
+
if (entry.createdAt > newest)
|
|
137
|
+
newest = entry.createdAt;
|
|
138
|
+
}
|
|
139
|
+
return { total: entries.length, pinned, oldest, newest };
|
|
140
|
+
}
|
|
141
|
+
async listAgents() {
|
|
142
|
+
return Array.from(this.#knownAgents).sort();
|
|
143
|
+
}
|
|
144
|
+
async status() {
|
|
145
|
+
try {
|
|
146
|
+
const res = await fetch(`${this.#url}/health`);
|
|
147
|
+
if (res.ok)
|
|
148
|
+
return { ok: true, message: "mem0 adapter ready" };
|
|
149
|
+
return { ok: false, message: `mem0 returned HTTP ${res.status}` };
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
153
|
+
return { ok: false, message };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
#mapItem(item, agent) {
|
|
157
|
+
const id = item.id ?? generateId();
|
|
158
|
+
const content = item.memory ?? "";
|
|
159
|
+
const createdAt = item.createdAt ? new Date(item.createdAt).getTime() : Date.now();
|
|
160
|
+
return {
|
|
161
|
+
id,
|
|
162
|
+
agent,
|
|
163
|
+
slug: generateSlug(content),
|
|
164
|
+
content,
|
|
165
|
+
createdAt,
|
|
166
|
+
pinned: false,
|
|
167
|
+
metadata: item.metadata ?? {},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=mem0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0.js","sourceRoot":"","sources":["../../../src/memory/adapters/mem0.ts"],"names":[],"mappings":"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"}
|