@wipal/agent-team 1.0.3 → 1.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/.claude/commands/skills/discover.md +127 -0
- package/.claude/commands/skills/install.md +225 -0
- package/.claude/commands/skills/review.md +234 -0
- package/.claude/commands/utils/learn.md +142 -0
- package/.claude/commands/utils/retrospect.md +62 -0
- package/.claude/commands/utils/switch.md +113 -0
- package/.claude/commands/utils/sync.md +183 -0
- package/.claude/rules/common/general-rules.md +6 -0
- package/.claude/rules/role-rules/dev-be-rules.md +241 -0
- package/.claude/rules/role-rules/dev-fe-rules.md +76 -0
- package/.claude/skills/SKILL-INDEX.md +24 -5
- package/.claude/skills/core/knowledge-graph/SKILL.md +214 -0
- package/.claude/skills/core/sequential-thinking/SKILL.md +112 -0
- package/.claude/skills/core/sequential-thinking/references/advanced.md +122 -0
- package/.claude/skills/core/sequential-thinking/references/examples.md +274 -0
- package/.claude/skills/domain/architecture/c4-architecture/SKILL.md +314 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/advanced-patterns.md +552 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/c4-syntax.md +492 -0
- package/.claude/skills/domain/architecture/c4-architecture/references/common-mistakes.md +437 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/SKILL.md +238 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/advanced-features.md +556 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/flowcharts.md +450 -0
- package/.claude/skills/domain/architecture/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/.claude/skills/domain/backend/testing-be/SKILL.md +121 -17
- package/.claude/skills/domain/design/design-system/SKILL.md +169 -0
- package/.claude/skills/domain/design/html-css-output/SKILL.md +253 -0
- package/.claude/skills/domain/design/mockup-creation/SKILL.md +230 -0
- package/.claude/skills/domain/design/responsive-design/SKILL.md +207 -0
- package/.claude/skills/domain/design/ui-design/SKILL.md +124 -0
- package/.claude/skills/domain/frontend/testing-fe/SKILL.md +143 -38
- package/.claude/skills/domain/frontend/ui-ux-pro-max/README.md +45 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/SKILL.md +404 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/charts.csv +26 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/colors.csv +97 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/icons.csv +101 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/landing.csv +31 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/products.csv +97 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/styles.csv +68 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/typography.csv +58 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/core.py +253 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.claude/skills/domain/frontend/ui-ux-pro-max/scripts/search.py +114 -0
- package/.claude/skills/domain/product/requirements-clarity/SKILL.md +340 -0
- package/.claude/skills/skills-registry.yaml +103 -8
- package/README.md +107 -33
- package/README.npm.md +252 -0
- package/TUTORIAL.md +256 -0
- package/bin/agent-team.js +26 -7
- package/config/roles.yaml +107 -0
- package/docs/01-architecture.md +699 -0
- package/docs/02-setup-guide.md +634 -0
- package/docs/03-skills-guide.md +628 -0
- package/docs/04-workflows.md +792 -0
- package/docs/05-model-strategy.md +550 -0
- package/docs/06-extend-guide.md +1226 -0
- package/docs/07-quick-reference.md +578 -0
- package/docs/08-skills-discovery.md +342 -0
- package/docs/README.md +134 -0
- package/docs/rqm.md +560 -0
- package/package.json +10 -4
- package/scripts/postinstall.js +46 -0
- package/src/commands/add.js +131 -67
- package/src/commands/init.js +419 -9
- package/src/commands/list.js +20 -16
- package/src/commands/projects.js +127 -0
- package/src/commands/setup-hooks.js +261 -0
- package/src/index.js +0 -1
- package/src/utils/file-utils.js +147 -50
- package/src/utils/global-registry.js +224 -0
- package/templates/CLAUDE.md.tmpl +128 -20
- package/templates/MEMORY.md.tmpl +119 -0
- package/templates/agent.md.tmpl +205 -0
- package/templates/code/nestjs-controller.ts.tmpl +49 -0
- package/templates/code/nestjs-dto.ts.tmpl +63 -0
- package/templates/code/nestjs-service.ts.tmpl +45 -0
- package/templates/code/react-component.tsx.tmpl +24 -0
- package/templates/code/react-hook.ts.tmpl +54 -0
- package/templates/code/test.spec.ts.tmpl +50 -0
- package/templates/code/vue-component.vue.tmpl +49 -0
- package/templates/code/vue-composable.ts.tmpl +54 -0
- package/templates/knowledge.md.tmpl +152 -17
- package/templates/meeting-notes.md.tmpl +110 -0
- package/templates/memory/hooks.memory.json +50 -0
- package/templates/memory/settings.memory.json +16 -0
- package/templates/reports/bug-report.md.tmpl +164 -0
- package/templates/reports/code-review.md.tmpl +201 -0
- package/templates/reports/sprint-report.md.tmpl +218 -0
- package/templates/roles/ba.md +53 -0
- package/templates/roles/designer.md +82 -0
- package/templates/roles/dev-be.md +49 -0
- package/templates/roles/dev-fe.md +49 -0
- package/templates/roles/devops.md +53 -0
- package/templates/roles/pm.md +49 -0
- package/templates/roles/qa.md +53 -0
- package/templates/roles/sa.md +49 -0
- package/templates/roles/tech-lead.md +132 -0
- package/templates/skills/memory/memory-status.md +78 -0
- package/templates/skills/memory/recall.md +160 -0
- package/templates/skills/memory/reflect.md +168 -0
- package/templates/skills/memory/remember.md +105 -0
- package/templates/tasks/lessons.md.tmpl +77 -0
- package/templates/tasks/todo.md.tmpl +53 -0
- package/src/commands/switch.js +0 -53
package/src/commands/add.js
CHANGED
|
@@ -8,11 +8,14 @@ import path from 'path';
|
|
|
8
8
|
import {
|
|
9
9
|
getClaudeDir,
|
|
10
10
|
getAgentDir,
|
|
11
|
+
getAgentFilePath,
|
|
12
|
+
getAgentMemoryDir,
|
|
11
13
|
isInitialized,
|
|
12
14
|
agentExists,
|
|
13
15
|
readTemplate,
|
|
14
16
|
processTemplate,
|
|
15
|
-
|
|
17
|
+
readRoleTemplate,
|
|
18
|
+
copyRoleRules
|
|
16
19
|
} from '../utils/file-utils.js';
|
|
17
20
|
import {
|
|
18
21
|
resolveSkills,
|
|
@@ -22,6 +25,66 @@ import {
|
|
|
22
25
|
} from '../utils/skill-resolver.js';
|
|
23
26
|
import { runInteractiveAdd } from '../interactive/prompts.js';
|
|
24
27
|
|
|
28
|
+
// Role configurations
|
|
29
|
+
const ROLE_CONFIGS = {
|
|
30
|
+
'dev-fe': {
|
|
31
|
+
displayName: 'Frontend Developer',
|
|
32
|
+
description: 'Frontend development specialist. Use for React/Vue/Angular tasks, UI implementation, component design.',
|
|
33
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
34
|
+
model: 'inherit',
|
|
35
|
+
verificationChecklist: '- [ ] Code runs, tests pass'
|
|
36
|
+
},
|
|
37
|
+
'dev-be': {
|
|
38
|
+
displayName: 'Backend Developer',
|
|
39
|
+
description: 'Backend development specialist. Use for API design, database work, server-side logic.',
|
|
40
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
41
|
+
model: 'inherit',
|
|
42
|
+
verificationChecklist: '- [ ] Code runs, tests pass'
|
|
43
|
+
},
|
|
44
|
+
'sa': {
|
|
45
|
+
displayName: 'Solution Architect',
|
|
46
|
+
description: 'Solution Architect specialist. Use for system design, architecture decisions, tech selection.',
|
|
47
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
48
|
+
model: 'inherit',
|
|
49
|
+
verificationChecklist: '- [ ] Architecture validated, ADRs complete'
|
|
50
|
+
},
|
|
51
|
+
'tech-lead': {
|
|
52
|
+
displayName: 'Tech Lead',
|
|
53
|
+
description: 'Technical leadership specialist. Use for code review, mentoring, technical decisions.',
|
|
54
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
55
|
+
model: 'inherit',
|
|
56
|
+
verificationChecklist: '- [ ] Code reviewed, tests pass'
|
|
57
|
+
},
|
|
58
|
+
'devops': {
|
|
59
|
+
displayName: 'DevOps Engineer',
|
|
60
|
+
description: 'DevOps specialist. Use for CI/CD, deployment, infrastructure.',
|
|
61
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
62
|
+
model: 'inherit',
|
|
63
|
+
verificationChecklist: '- [ ] Deployment verified'
|
|
64
|
+
},
|
|
65
|
+
'pm': {
|
|
66
|
+
displayName: 'Product Manager',
|
|
67
|
+
description: 'Product management specialist. Use for requirements, user stories, sprint planning.',
|
|
68
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
69
|
+
model: 'inherit',
|
|
70
|
+
verificationChecklist: '- [ ] Requirements traceable, stakeholders aligned'
|
|
71
|
+
},
|
|
72
|
+
'ba': {
|
|
73
|
+
displayName: 'Business Analyst',
|
|
74
|
+
description: 'Business analysis specialist. Use for requirements analysis, PRD creation, stakeholder communication.',
|
|
75
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
76
|
+
model: 'inherit',
|
|
77
|
+
verificationChecklist: '- [ ] Documentation accurate, acceptance criteria met'
|
|
78
|
+
},
|
|
79
|
+
'qa': {
|
|
80
|
+
displayName: 'QA Engineer',
|
|
81
|
+
description: 'Quality assurance specialist. Use for testing, bug reporting, test automation.',
|
|
82
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
83
|
+
model: 'inherit',
|
|
84
|
+
verificationChecklist: '- [ ] Tests pass, bugs documented'
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
25
88
|
/**
|
|
26
89
|
* Add a new agent
|
|
27
90
|
*/
|
|
@@ -84,7 +147,8 @@ export async function addCommand(name, role, options) {
|
|
|
84
147
|
* Create agent with given configuration
|
|
85
148
|
*/
|
|
86
149
|
export async function createAgent(name, role, variants, projectRoot) {
|
|
87
|
-
const
|
|
150
|
+
const agentFilePath = getAgentFilePath(name, projectRoot);
|
|
151
|
+
const agentMemoryDir = getAgentMemoryDir(name, projectRoot);
|
|
88
152
|
const projectName = path.basename(projectRoot);
|
|
89
153
|
|
|
90
154
|
console.log(chalk.blue('🚀 Creating agent...'));
|
|
@@ -98,9 +162,14 @@ export async function createAgent(name, role, variants, projectRoot) {
|
|
|
98
162
|
}
|
|
99
163
|
console.log('');
|
|
100
164
|
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
165
|
+
// Get role config
|
|
166
|
+
const roleConfig = ROLE_CONFIGS[role] || {
|
|
167
|
+
displayName: role,
|
|
168
|
+
description: `${role} specialist.`,
|
|
169
|
+
tools: 'Read, Write, Edit, Bash, Grep, Glob',
|
|
170
|
+
model: 'inherit',
|
|
171
|
+
verificationChecklist: ''
|
|
172
|
+
};
|
|
104
173
|
|
|
105
174
|
// Resolve skills
|
|
106
175
|
console.log(chalk.blue(' Resolving skills...'));
|
|
@@ -113,46 +182,53 @@ export async function createAgent(name, role, variants, projectRoot) {
|
|
|
113
182
|
console.log(chalk.gray(` Variant skills: ${skills.variants.join(', ')}`));
|
|
114
183
|
}
|
|
115
184
|
|
|
116
|
-
//
|
|
117
|
-
console.log(chalk.blue('
|
|
118
|
-
|
|
119
|
-
|
|
185
|
+
// Create agent memory directory
|
|
186
|
+
console.log(chalk.blue(' Creating agent memory directory...'));
|
|
187
|
+
await fs.ensureDir(agentMemoryDir);
|
|
188
|
+
|
|
189
|
+
// Ensure agents directory exists
|
|
190
|
+
await fs.ensureDir(path.dirname(agentFilePath));
|
|
191
|
+
|
|
192
|
+
// Copy role-specific rules
|
|
193
|
+
console.log(chalk.blue(' Copying role rules...'));
|
|
194
|
+
const copiedRule = await copyRoleRules(role, projectRoot);
|
|
195
|
+
if (copiedRule) {
|
|
196
|
+
console.log(chalk.green(` ✓ Copied role rules: ${copiedRule}`));
|
|
197
|
+
} else {
|
|
198
|
+
console.log(chalk.gray(' ℹ No additional role rules needed'));
|
|
199
|
+
}
|
|
120
200
|
|
|
121
|
-
// Create
|
|
122
|
-
console.log(chalk.blue(' Creating
|
|
123
|
-
await
|
|
124
|
-
console.log(chalk.green(
|
|
201
|
+
// Create agent .md file
|
|
202
|
+
console.log(chalk.blue(' Creating agent file...'));
|
|
203
|
+
await createAgentMd(name, role, variants, skills, roleConfig, projectName, agentFilePath);
|
|
204
|
+
console.log(chalk.green(` ✓ Created ${name}.md`));
|
|
125
205
|
|
|
126
|
-
// Create knowledge.md
|
|
206
|
+
// Create knowledge.md in agent-memory
|
|
127
207
|
console.log(chalk.blue(' Creating knowledge.md...'));
|
|
128
|
-
await createKnowledgeMd(name, role,
|
|
208
|
+
await createKnowledgeMd(name, role, agentMemoryDir);
|
|
129
209
|
console.log(chalk.green(' ✓ Created knowledge.md'));
|
|
130
210
|
|
|
131
|
-
// Create variants.json
|
|
132
|
-
console.log(chalk.blue(' Creating variants.json...'));
|
|
133
|
-
await createVariantsJson(name, role, variants, skills, agentDir);
|
|
134
|
-
console.log(chalk.green(' ✓ Created variants.json'));
|
|
135
|
-
|
|
136
211
|
// Summary
|
|
137
212
|
console.log('');
|
|
138
213
|
console.log(chalk.green('✅ Agent created successfully!'));
|
|
139
214
|
console.log('');
|
|
140
|
-
console.log(chalk.blue('Agent
|
|
141
|
-
console.log(chalk.gray(` ${
|
|
215
|
+
console.log(chalk.blue('Agent files:'));
|
|
216
|
+
console.log(chalk.gray(` ${agentFilePath}`));
|
|
217
|
+
console.log(chalk.gray(` ${agentMemoryDir}/knowledge.md`));
|
|
142
218
|
console.log('');
|
|
143
|
-
console.log(chalk.blue('To use this agent
|
|
144
|
-
console.log(chalk.cyan(`
|
|
219
|
+
console.log(chalk.blue('To use this agent:'));
|
|
220
|
+
console.log(chalk.cyan(` /${name} <task>`));
|
|
221
|
+
console.log(chalk.gray(' or Claude will auto-delegate based on task description'));
|
|
145
222
|
console.log('');
|
|
146
223
|
}
|
|
147
224
|
|
|
148
225
|
/**
|
|
149
|
-
* Create
|
|
226
|
+
* Create agent .md file with frontmatter
|
|
150
227
|
*/
|
|
151
|
-
async function
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const roleSkillsList = skills.role.map(s => ` - ${s}`).join('\n');
|
|
228
|
+
async function createAgentMd(name, role, variants, skills, roleConfig, projectName, agentFilePath) {
|
|
229
|
+
// Build skills YAML
|
|
230
|
+
const allSkillsList = [...skills.core, ...skills.role, ...skills.variants];
|
|
231
|
+
const skillsYaml = allSkillsList.map(s => ` - ${s}`).join('\n');
|
|
156
232
|
|
|
157
233
|
// Build tech stack from variants
|
|
158
234
|
const techStack = Object.entries(variants)
|
|
@@ -166,27 +242,42 @@ async function createClaudeMd(name, role, variants, skills, projectName, agentDi
|
|
|
166
242
|
.map(([k, v]) => `- ${k}: ${v}`)
|
|
167
243
|
.join('\n');
|
|
168
244
|
|
|
169
|
-
// Build skills list
|
|
170
|
-
const skillsList =
|
|
245
|
+
// Build skills list for display
|
|
246
|
+
const skillsList = allSkillsList.map(s => `- ${s}`).join('\n');
|
|
247
|
+
|
|
248
|
+
// Get role behavioral template
|
|
249
|
+
let roleBehavioralTemplate = '';
|
|
250
|
+
const roleTemplate = await readRoleTemplate(role);
|
|
251
|
+
if (roleTemplate) {
|
|
252
|
+
roleBehavioralTemplate = roleTemplate;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Build role skills description
|
|
256
|
+
const roleSkillsDesc = skills.role.map(s => `- ${s}`).join('\n');
|
|
171
257
|
|
|
172
|
-
const template = await readTemplate('
|
|
258
|
+
const template = await readTemplate('agent.md.tmpl');
|
|
173
259
|
const content = processTemplate(template, {
|
|
174
|
-
PROJECT_NAME: projectName,
|
|
175
260
|
AGENT_NAME: name,
|
|
176
|
-
|
|
177
|
-
|
|
261
|
+
AGENT_DESCRIPTION: roleConfig.description,
|
|
262
|
+
AGENT_TOOLS: roleConfig.tools,
|
|
263
|
+
AGENT_MODEL: roleConfig.model,
|
|
264
|
+
AGENT_SKILLS_YAML: skillsYaml,
|
|
265
|
+
ROLE_DISPLAY_NAME: roleConfig.displayName,
|
|
266
|
+
ROLE_SKILLS: roleSkillsDesc || `- ${role} tasks`,
|
|
267
|
+
ROLE_BEHAVIORAL_TEMPLATE: roleBehavioralTemplate,
|
|
268
|
+
ROLE_VERIFICATION_CHECKLIST: roleConfig.verificationChecklist,
|
|
178
269
|
TECH_STACK: techStack || '- [Configure your tech stack]',
|
|
179
270
|
VARIANTS_LIST: variantsList || '- [No variants selected]',
|
|
180
|
-
SKILLS_LIST: skillsList
|
|
271
|
+
SKILLS_LIST: skillsList || '- [No skills]'
|
|
181
272
|
});
|
|
182
273
|
|
|
183
|
-
await fs.writeFile(
|
|
274
|
+
await fs.writeFile(agentFilePath, content);
|
|
184
275
|
}
|
|
185
276
|
|
|
186
277
|
/**
|
|
187
278
|
* Create knowledge.md for agent
|
|
188
279
|
*/
|
|
189
|
-
async function createKnowledgeMd(name, role,
|
|
280
|
+
async function createKnowledgeMd(name, role, agentMemoryDir) {
|
|
190
281
|
const now = new Date().toISOString();
|
|
191
282
|
const template = await readTemplate('knowledge.md.tmpl');
|
|
192
283
|
const content = processTemplate(template, {
|
|
@@ -196,32 +287,5 @@ async function createKnowledgeMd(name, role, agentDir) {
|
|
|
196
287
|
DATE: now.split('T')[0]
|
|
197
288
|
});
|
|
198
289
|
|
|
199
|
-
await fs.writeFile(path.join(
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Create variants.json for agent
|
|
204
|
-
*/
|
|
205
|
-
async function createVariantsJson(name, role, variants, skills, agentDir) {
|
|
206
|
-
const now = new Date().toISOString();
|
|
207
|
-
|
|
208
|
-
const content = {
|
|
209
|
-
agent_name: name,
|
|
210
|
-
base_role: role,
|
|
211
|
-
created_at: now,
|
|
212
|
-
updated_at: now,
|
|
213
|
-
installed_variants: variants,
|
|
214
|
-
skills: {
|
|
215
|
-
core: skills.core,
|
|
216
|
-
role: skills.role,
|
|
217
|
-
variants: skills.variants
|
|
218
|
-
},
|
|
219
|
-
skill_status: {
|
|
220
|
-
last_checked: now,
|
|
221
|
-
all_available: true,
|
|
222
|
-
missing_skills: []
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
await fs.writeJson(path.join(agentDir, 'variants.json'), content, { spaces: 2 });
|
|
290
|
+
await fs.writeFile(path.join(agentMemoryDir, 'knowledge.md'), content);
|
|
227
291
|
}
|