@grant-vine/wunderkind 0.4.0 → 0.8.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 (147) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/README.md +185 -90
  3. package/agents/brand-builder.md +52 -5
  4. package/agents/ciso.md +53 -5
  5. package/agents/creative-director.md +37 -4
  6. package/agents/data-analyst.md +208 -0
  7. package/agents/devrel-wunderkind.md +225 -0
  8. package/agents/fullstack-wunderkind.md +51 -3
  9. package/agents/legal-counsel.md +222 -0
  10. package/agents/marketing-wunderkind.md +59 -5
  11. package/agents/operations-lead.md +51 -3
  12. package/agents/product-wunderkind.md +57 -3
  13. package/agents/qa-specialist.md +51 -3
  14. package/agents/support-engineer.md +200 -0
  15. package/dist/agents/brand-builder.d.ts.map +1 -1
  16. package/dist/agents/brand-builder.js +53 -5
  17. package/dist/agents/brand-builder.js.map +1 -1
  18. package/dist/agents/ciso.d.ts.map +1 -1
  19. package/dist/agents/ciso.js +54 -5
  20. package/dist/agents/ciso.js.map +1 -1
  21. package/dist/agents/creative-director.d.ts.map +1 -1
  22. package/dist/agents/creative-director.js +37 -4
  23. package/dist/agents/creative-director.js.map +1 -1
  24. package/dist/agents/data-analyst.d.ts +8 -0
  25. package/dist/agents/data-analyst.d.ts.map +1 -0
  26. package/dist/agents/data-analyst.js +247 -0
  27. package/dist/agents/data-analyst.js.map +1 -0
  28. package/dist/agents/devrel-wunderkind.d.ts +8 -0
  29. package/dist/agents/devrel-wunderkind.d.ts.map +1 -0
  30. package/dist/agents/devrel-wunderkind.js +262 -0
  31. package/dist/agents/devrel-wunderkind.js.map +1 -0
  32. package/dist/agents/docs-config.d.ts +8 -0
  33. package/dist/agents/docs-config.d.ts.map +1 -0
  34. package/dist/agents/docs-config.js +68 -0
  35. package/dist/agents/docs-config.js.map +1 -0
  36. package/dist/agents/fullstack-wunderkind.d.ts.map +1 -1
  37. package/dist/agents/fullstack-wunderkind.js +52 -3
  38. package/dist/agents/fullstack-wunderkind.js.map +1 -1
  39. package/dist/agents/index.d.ts +4 -0
  40. package/dist/agents/index.d.ts.map +1 -1
  41. package/dist/agents/index.js +4 -0
  42. package/dist/agents/index.js.map +1 -1
  43. package/dist/agents/legal-counsel.d.ts +8 -0
  44. package/dist/agents/legal-counsel.d.ts.map +1 -0
  45. package/dist/agents/legal-counsel.js +260 -0
  46. package/dist/agents/legal-counsel.js.map +1 -0
  47. package/dist/agents/marketing-wunderkind.d.ts.map +1 -1
  48. package/dist/agents/marketing-wunderkind.js +61 -5
  49. package/dist/agents/marketing-wunderkind.js.map +1 -1
  50. package/dist/agents/operations-lead.d.ts.map +1 -1
  51. package/dist/agents/operations-lead.js +52 -3
  52. package/dist/agents/operations-lead.js.map +1 -1
  53. package/dist/agents/product-wunderkind.d.ts.map +1 -1
  54. package/dist/agents/product-wunderkind.js +57 -3
  55. package/dist/agents/product-wunderkind.js.map +1 -1
  56. package/dist/agents/qa-specialist.d.ts.map +1 -1
  57. package/dist/agents/qa-specialist.js +52 -3
  58. package/dist/agents/qa-specialist.js.map +1 -1
  59. package/dist/agents/support-engineer.d.ts +8 -0
  60. package/dist/agents/support-engineer.d.ts.map +1 -0
  61. package/dist/agents/support-engineer.js +238 -0
  62. package/dist/agents/support-engineer.js.map +1 -0
  63. package/dist/build-agents.js +5 -1
  64. package/dist/build-agents.js.map +1 -1
  65. package/dist/cli/cli-installer.d.ts.map +1 -1
  66. package/dist/cli/cli-installer.js +13 -24
  67. package/dist/cli/cli-installer.js.map +1 -1
  68. package/dist/cli/config-manager/index.d.ts +1 -1
  69. package/dist/cli/config-manager/index.d.ts.map +1 -1
  70. package/dist/cli/config-manager/index.js +118 -77
  71. package/dist/cli/config-manager/index.js.map +1 -1
  72. package/dist/cli/docs-output-helper.d.ts +11 -0
  73. package/dist/cli/docs-output-helper.d.ts.map +1 -0
  74. package/dist/cli/docs-output-helper.js +36 -0
  75. package/dist/cli/docs-output-helper.js.map +1 -0
  76. package/dist/cli/doctor.d.ts +2 -0
  77. package/dist/cli/doctor.d.ts.map +1 -0
  78. package/dist/cli/doctor.js +85 -0
  79. package/dist/cli/doctor.js.map +1 -0
  80. package/dist/cli/index.js +68 -5
  81. package/dist/cli/index.js.map +1 -1
  82. package/dist/cli/init.d.ts +13 -0
  83. package/dist/cli/init.d.ts.map +1 -0
  84. package/dist/cli/init.js +177 -0
  85. package/dist/cli/init.js.map +1 -0
  86. package/dist/cli/tui-installer.d.ts.map +1 -1
  87. package/dist/cli/tui-installer.js +54 -290
  88. package/dist/cli/tui-installer.js.map +1 -1
  89. package/dist/cli/types.d.ts +26 -0
  90. package/dist/cli/types.d.ts.map +1 -1
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +38 -17
  93. package/dist/index.js.map +1 -1
  94. package/oh-my-opencode.jsonc +58 -13
  95. package/package.json +6 -13
  96. package/skills/experimentation-analyst/SKILL.md +137 -0
  97. package/skills/oss-licensing-advisor/SKILL.md +141 -0
  98. package/skills/technical-writer/SKILL.md +150 -0
  99. package/dist/cli/memory-commands.d.ts +0 -3
  100. package/dist/cli/memory-commands.d.ts.map +0 -1
  101. package/dist/cli/memory-commands.js +0 -138
  102. package/dist/cli/memory-commands.js.map +0 -1
  103. package/dist/memory/adapters/file.d.ts +0 -21
  104. package/dist/memory/adapters/file.d.ts.map +0 -1
  105. package/dist/memory/adapters/file.js +0 -232
  106. package/dist/memory/adapters/file.js.map +0 -1
  107. package/dist/memory/adapters/mem0.d.ts +0 -37
  108. package/dist/memory/adapters/mem0.d.ts.map +0 -1
  109. package/dist/memory/adapters/mem0.js +0 -171
  110. package/dist/memory/adapters/mem0.js.map +0 -1
  111. package/dist/memory/adapters/sqlite.d.ts +0 -21
  112. package/dist/memory/adapters/sqlite.d.ts.map +0 -1
  113. package/dist/memory/adapters/sqlite.js +0 -198
  114. package/dist/memory/adapters/sqlite.js.map +0 -1
  115. package/dist/memory/adapters/stub.d.ts +0 -20
  116. package/dist/memory/adapters/stub.d.ts.map +0 -1
  117. package/dist/memory/adapters/stub.js +0 -58
  118. package/dist/memory/adapters/stub.js.map +0 -1
  119. package/dist/memory/adapters/types.d.ts +0 -45
  120. package/dist/memory/adapters/types.d.ts.map +0 -1
  121. package/dist/memory/adapters/types.js +0 -2
  122. package/dist/memory/adapters/types.js.map +0 -1
  123. package/dist/memory/adapters/vector.d.ts +0 -29
  124. package/dist/memory/adapters/vector.d.ts.map +0 -1
  125. package/dist/memory/adapters/vector.js +0 -347
  126. package/dist/memory/adapters/vector.js.map +0 -1
  127. package/dist/memory/docker.d.ts +0 -9
  128. package/dist/memory/docker.d.ts.map +0 -1
  129. package/dist/memory/docker.js +0 -43
  130. package/dist/memory/docker.js.map +0 -1
  131. package/dist/memory/format.d.ts +0 -5
  132. package/dist/memory/format.d.ts.map +0 -1
  133. package/dist/memory/format.js +0 -41
  134. package/dist/memory/format.js.map +0 -1
  135. package/dist/memory/index.d.ts +0 -19
  136. package/dist/memory/index.d.ts.map +0 -1
  137. package/dist/memory/index.js +0 -183
  138. package/dist/memory/index.js.map +0 -1
  139. package/dist/memory/slug.d.ts +0 -2
  140. package/dist/memory/slug.d.ts.map +0 -1
  141. package/dist/memory/slug.js +0 -40
  142. package/dist/memory/slug.js.map +0 -1
  143. package/dist/memory/tools.d.ts +0 -3
  144. package/dist/memory/tools.d.ts.map +0 -1
  145. package/dist/memory/tools.js +0 -84
  146. package/dist/memory/tools.js.map +0 -1
  147. package/skills/memory-manager/SKILL.md +0 -48
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: technical-writer
3
+ description: >
4
+ USE FOR: technical writing, documentation writing, API documentation, getting started guide,
5
+ quickstart guide, tutorial writing, conceptual guide, how-to guide, reference documentation,
6
+ SDK documentation, integration guide, migration guide, upgrade guide, code examples,
7
+ sample code, README writing, CONTRIBUTING.md, developer onboarding docs, docs architecture,
8
+ documentation structure, docs site copy, Mintlify, Docusaurus, developer portal content,
9
+ technical blog post, changelog writing, release notes, CLI help text, error message copy,
10
+ interactive tutorial, FAQ writing, troubleshooting guide, OpenAPI spec review, webhook docs.
11
+
12
+ ---
13
+
14
+ # Technical Writer
15
+
16
+ You are the Technical Writer — a specialist in producing clear, accurate, and developer-friendly documentation. You are invoked by `devrel-wunderkind` for deep documentation tasks that require dedicated focus.
17
+
18
+ ---
19
+
20
+ ## Regional Configuration
21
+
22
+ **Read `wunderkind.config.jsonc` at the start of any documentation task.**
23
+
24
+ Key fields:
25
+
26
+ | Field | Effect on this skill |
27
+ |---|---|
28
+ | `region` | Adjust code examples and platform references for regional developer norms |
29
+ | `industry` | Adapt terminology and domain-specific examples |
30
+ | `primaryRegulation` | Flag compliance notes where relevant (e.g. GDPR data handling in auth guides) |
31
+ | `teamCulture` | `formal-strict` → precise, structured docs. `experimental-informal` → conversational, example-heavy |
32
+
33
+ ---
34
+
35
+ ## Documentation Principles
36
+
37
+ - **Accuracy first**: every code example must be runnable. Every API call must reflect the actual API.
38
+ - **Progressive disclosure**: overview → concept → how-to → reference. Don't front-load complexity.
39
+ - **Concrete over abstract**: show a working example before explaining the concept.
40
+ - **One thing per page**: a guide that covers everything covers nothing.
41
+ - **Scannable structure**: H2/H3 headings, short paragraphs, code blocks for all technical content.
42
+
43
+ ---
44
+
45
+ ## Document Types
46
+
47
+ ### Getting Started Guide
48
+ Structure: Prerequisites → Install → Configure → First call → Next steps.
49
+ - Prerequisites must be specific (versions, dependencies, accounts needed)
50
+ - Install must be copy-pasteable (one command, not a paragraph)
51
+ - First call must produce visible output the developer can verify
52
+
53
+ ### Conceptual Guide
54
+ Structure: What it is → Why it matters → How it works (diagram if applicable) → When to use it → Related concepts.
55
+ - Use analogies to familiar systems
56
+ - Avoid implementation details — those belong in how-to guides
57
+
58
+ ### How-To Guide
59
+ Structure: Goal statement → Prerequisites → Numbered steps → Verification → Troubleshooting.
60
+ - Each step: one action + one command + expected result
61
+ - Verification: a command that confirms success
62
+
63
+ ### API Reference
64
+ Structure: Endpoint/method → Description → Parameters table → Request example → Response example → Error codes.
65
+ - Parameters table: Name | Type | Required | Description | Example
66
+ - Include both success and error response examples
67
+
68
+ ### Migration Guide
69
+ Structure: What changed → Why it changed → Step-by-step migration → Verification → Rollback if needed.
70
+ - Provide before/after code comparisons
71
+ - Flag breaking changes clearly (use callout/warning blocks)
72
+
73
+ ---
74
+
75
+ ## Slash Commands
76
+
77
+ ### `/write-guide <topic> <type>`
78
+ Write a complete documentation guide.
79
+
80
+ 1. Identify guide type (getting-started / conceptual / how-to / reference / migration)
81
+ 2. Read `wunderkind.config.jsonc` for `industry` and `region` context
82
+ 3. Apply appropriate structure from Document Types above
83
+ 4. Write with working code examples throughout
84
+ 5. End with verification step and "Next Steps" links
85
+
86
+ **Output:** Complete guide in Markdown, ready for the docs site.
87
+
88
+ ---
89
+
90
+ ### `/review-docs <path or content>`
91
+ Review existing documentation for accuracy, clarity, and completeness.
92
+
93
+ **Review checklist:**
94
+ 1. **Accuracy**: do code examples actually work? Are API parameters correct?
95
+ 2. **Completeness**: is there a verification step? Are prerequisites listed?
96
+ 3. **Clarity**: can a developer follow this without prior context?
97
+ 4. **Structure**: does it follow progressive disclosure?
98
+ 5. **Freshness**: are there references to deprecated APIs or old versions?
99
+
100
+ **Output:** Line-by-line review with specific suggested rewrites for each issue.
101
+
102
+ ---
103
+
104
+ ### `/code-example <feature or API>`
105
+ Write runnable code examples for a feature or API endpoint.
106
+
107
+ - Include: imports, setup, the core call, output/assertion
108
+ - Language: match the project's primary language (read `wunderkind.config.jsonc` or ask)
109
+ - Style: production-quality — no TODO comments, no `console.log("hello")` placeholders
110
+ - Variants: basic usage → with options → error handling
111
+
112
+ ---
113
+
114
+ ### `/error-message-copy <error code or scenario>`
115
+ Write clear, actionable error messages for a given error scenario.
116
+
117
+ **Format per error:**
118
+ - **Error code / ID**: machine-readable identifier
119
+ - **User-facing message**: plain English, < 80 characters
120
+ - **Cause**: one sentence
121
+ - **Resolution**: numbered steps (≤ 3 steps)
122
+ - **Docs link**: where to learn more
123
+
124
+ ---
125
+
126
+ ## Delegation Patterns
127
+
128
+ When research is needed for accuracy verification:
129
+
130
+ ```typescript
131
+ task(
132
+ subagent_type="librarian",
133
+ load_skills=[],
134
+ description="Verify [API / library] documentation accuracy for [topic]",
135
+ prompt="Find the current official documentation for [topic]. Return: the exact API signature, required parameters, response shape, and any deprecation notices. Include the documentation URL.",
136
+ run_in_background=false
137
+ )
138
+ ```
139
+
140
+ When code example correctness needs engineering validation, escalate to `devrel-wunderkind` to route to `fullstack-wunderkind`.
141
+
142
+ ---
143
+
144
+ ## Hard Rules
145
+
146
+ 1. **Every code example must be copy-pasteable and runnable** — no `<your-api-key>` without explaining where to get it
147
+ 2. **No passive voice for instructions** — "Click Save" not "Save should be clicked"
148
+ 3. **No undefined pronouns** — "the function" not "it"
149
+ 4. **Verification step is mandatory** for every how-to guide — developer must be able to confirm success
150
+ 5. **Flag all assumptions** — if you assumed a technology or environment, say so explicitly
@@ -1,3 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function createMemoryCommand(): Command;
3
- //# sourceMappingURL=memory-commands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-commands.d.ts","sourceRoot":"","sources":["../../src/cli/memory-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwBnC,wBAAgB,mBAAmB,IAAI,OAAO,CA8H7C"}
@@ -1,138 +0,0 @@
1
- import { Command } from "commander";
2
- import { analyzeStaleMemories, countMemories, exportMemories, importMemories, memoryStatus, pruneMemories, searchMemories, takeNote, } from "../memory/index.js";
3
- import { startMemoryServices } from "../memory/docker.js";
4
- const DEFAULT_AGENTS = [
5
- "marketing-wunderkind",
6
- "creative-director",
7
- "product-wunderkind",
8
- "fullstack-wunderkind",
9
- "brand-builder",
10
- "qa-specialist",
11
- "operations-lead",
12
- "ciso",
13
- ];
14
- export function createMemoryCommand() {
15
- const cmd = new Command("memory").description("Manage agent memories in .wunderkind/memory/");
16
- cmd
17
- .command("take-note")
18
- .description("Save a note to an agent's memory")
19
- .requiredOption("--agent <name>", "Agent name (e.g. ciso, fullstack-wunderkind)")
20
- .requiredOption("--note <text>", "The note content to save")
21
- .option("--pin", "Pin this memory (never pruned)")
22
- .option("--slug <slug>", "Custom slug identifier")
23
- .action(async (opts) => {
24
- const options = {};
25
- if (opts.slug !== undefined)
26
- options.slug = opts.slug;
27
- if (opts.pin !== undefined)
28
- options.pin = opts.pin;
29
- const entry = await takeNote(process.cwd(), opts.agent, opts.note, options);
30
- console.log(`Saved [${entry.slug}] id:${entry.id}`);
31
- });
32
- cmd
33
- .command("search")
34
- .description("Search an agent's memories")
35
- .requiredOption("--agent <name>", "Agent name")
36
- .requiredOption("--query <text>", "Search query")
37
- .action(async (opts) => {
38
- const results = await searchMemories(process.cwd(), opts.agent, opts.query);
39
- if (results.length === 0) {
40
- console.log("No results.");
41
- return;
42
- }
43
- for (const e of results) {
44
- console.log(`[${e.slug}]${e.pinned ? " (pinned)" : ""}\n${e.content}\n`);
45
- }
46
- });
47
- cmd
48
- .command("count")
49
- .description("Show memory count and stats for an agent (or all agents)")
50
- .option("--agent <name>", "Agent name (omit for all agents)")
51
- .action(async (opts) => {
52
- const agents = opts.agent ? [opts.agent] : DEFAULT_AGENTS;
53
- for (const agent of agents) {
54
- const stats = await countMemories(process.cwd(), agent);
55
- const oldest = stats.oldest > 0 ? new Date(stats.oldest).toISOString().split("T")[0] : "—";
56
- const newest = stats.newest > 0 ? new Date(stats.newest).toISOString().split("T")[0] : "—";
57
- console.log(`${agent}: total=${stats.total} pinned=${stats.pinned} oldest=${oldest} newest=${newest}`);
58
- }
59
- });
60
- cmd
61
- .command("reduce-noise")
62
- .description("Analyze and optionally prune stale memories for an agent")
63
- .requiredOption("--agent <name>", "Agent name")
64
- .option("--confirm", "Actually remove stale entries (default: preview only)")
65
- .action(async (opts) => {
66
- const analysis = await analyzeStaleMemories(process.cwd(), opts.agent);
67
- if (analysis.stale === 0) {
68
- console.log(`All ${analysis.toKeep.length} memories are current.`);
69
- return;
70
- }
71
- console.log(`Stale: ${analysis.stale} | Recent: ${analysis.recent} | Pinned: ${analysis.pinned}`);
72
- for (const e of analysis.toDrop) {
73
- console.log(` - [${e.slug}] ${e.content.slice(0, 80)}`);
74
- }
75
- if (!opts.confirm) {
76
- console.log("\nRun with --confirm to remove these entries.");
77
- return;
78
- }
79
- const removed = await pruneMemories(process.cwd(), opts.agent, analysis.toDrop.map((e) => e.id));
80
- console.log(`Removed ${removed} entries.`);
81
- });
82
- cmd
83
- .command("status")
84
- .description("Check the health of the configured memory adapter")
85
- .action(async () => {
86
- const result = await memoryStatus(process.cwd());
87
- console.log(result.ok ? `OK: ${result.message}` : `ERROR: ${result.message}`);
88
- if (!result.ok)
89
- process.exit(1);
90
- });
91
- cmd
92
- .command("start")
93
- .description("Start memory services (Docker Compose for mem0 adapter; no-op for file/sqlite)")
94
- .action(() => {
95
- const result = startMemoryServices(process.cwd());
96
- console.log(result.success ? result.message : `Error: ${result.message}`);
97
- if (!result.success)
98
- process.exit(1);
99
- });
100
- cmd
101
- .command("export")
102
- .description("Export all agent memories to a zip file in .wunderkind/exports/")
103
- .option("--output <path>", "Custom output path for the zip file")
104
- .action(async (opts) => {
105
- try {
106
- const outPath = opts.output !== undefined
107
- ? await exportMemories(process.cwd(), opts.output)
108
- : await exportMemories(process.cwd());
109
- console.log(`Exported memories to: ${outPath}`);
110
- }
111
- catch (err) {
112
- const msg = err instanceof Error ? err.message : String(err);
113
- console.error(`Export failed: ${msg}`);
114
- process.exit(1);
115
- }
116
- });
117
- cmd
118
- .command("import <zip>")
119
- .description("Import memories from a zip file created by 'memory export'")
120
- .option("--strategy <strategy>", "Import strategy: merge or overwrite", "merge")
121
- .action(async (zip, opts) => {
122
- if (opts.strategy !== "merge" && opts.strategy !== "overwrite") {
123
- console.error(`Error: --strategy must be "merge" or "overwrite", got: "${opts.strategy}"`);
124
- process.exit(1);
125
- }
126
- try {
127
- const result = await importMemories(process.cwd(), zip, opts.strategy);
128
- console.log(`Imported: ${result.imported}, Skipped: ${result.skipped}`);
129
- }
130
- catch (err) {
131
- const msg = err instanceof Error ? err.message : String(err);
132
- console.error(`Import failed: ${msg}`);
133
- process.exit(1);
134
- }
135
- });
136
- return cmd;
137
- }
138
- //# sourceMappingURL=memory-commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-commands.js","sourceRoot":"","sources":["../../src/cli/memory-commands.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,232 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/memory/adapters/file.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
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
@@ -1 +0,0 @@
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"}