universal-agent-memory 0.5.0 ā 0.5.1
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/README.md +106 -289
- package/dist/cli/generate.d.ts +7 -0
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +89 -2
- package/dist/cli/generate.js.map +1 -1
- package/dist/generators/claude-md.js +18 -5
- package/dist/generators/claude-md.js.map +1 -1
- package/dist/utils/merge-claude-md.d.ts +20 -7
- package/dist/utils/merge-claude-md.d.ts.map +1 -1
- package/dist/utils/merge-claude-md.js +252 -59
- package/dist/utils/merge-claude-md.js.map +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.template.md +91 -130
package/README.md
CHANGED
|
@@ -3,404 +3,221 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/universal-agent-memory)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
**Give your AI coding assistant persistent memory and autonomous workflows.**
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
UAM transforms AI coding assistants (Claude Code, Factory.AI, etc.) into autonomous agents that remember context across sessions, coordinate with other agents, and follow consistent workflows.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## How It Works
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **Deploy Batching** - Batch commits/pushes to save CI minutes
|
|
16
|
-
- **Git Worktree Automation** - Isolated development branches with PR workflows
|
|
17
|
-
- **CLAUDE.md Generation** - Auto-generated project context files
|
|
12
|
+
1. **Install UAM** in your project
|
|
13
|
+
2. **Generate CLAUDE.md** - a context file your AI reads automatically
|
|
14
|
+
3. **The AI handles everything** - memory, tasks, worktrees, coordination
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
**You don't manage memory manually.** The AI agent reads CLAUDE.md and autonomously uses the memory system, creates worktrees, tracks tasks, and coordinates with other agents.
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
## Quick Start
|
|
22
19
|
|
|
23
20
|
```bash
|
|
24
|
-
# Install
|
|
21
|
+
# Install
|
|
25
22
|
npm install -g universal-agent-memory
|
|
26
23
|
|
|
27
24
|
# Initialize in your project
|
|
28
25
|
cd your-project
|
|
29
|
-
uam init --interactive
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### One-Line Installers
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# Desktop (with Docker for Qdrant)
|
|
36
|
-
bash <(curl -fsSL https://raw.githubusercontent.com/DammianMiller/universal-agent-memory/main/scripts/install-desktop.sh)
|
|
37
|
-
|
|
38
|
-
# Web browsers (claude.ai, factory.ai)
|
|
39
|
-
bash <(curl -fsSL https://raw.githubusercontent.com/DammianMiller/universal-agent-memory/main/scripts/install-web.sh)
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Using npx (No Install)
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npx universal-agent-memory init --interactive
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Quick Start
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
# 1. Initialize project
|
|
52
26
|
uam init --with-memory --with-worktrees
|
|
53
27
|
|
|
54
|
-
#
|
|
28
|
+
# Start memory services (optional, for persistent semantic memory)
|
|
55
29
|
uam memory start
|
|
56
30
|
|
|
57
|
-
#
|
|
31
|
+
# Generate the CLAUDE.md context file
|
|
58
32
|
uam generate
|
|
59
|
-
|
|
60
|
-
# 4. Create your first task
|
|
61
|
-
uam task create --title "My first task" --type task
|
|
62
|
-
|
|
63
|
-
# 5. Start working
|
|
64
|
-
uam task claim <task-id>
|
|
65
|
-
uam worktree create my-feature
|
|
66
33
|
```
|
|
67
34
|
|
|
68
|
-
|
|
35
|
+
That's it! Your AI assistant now has:
|
|
36
|
+
- **Persistent memory** across sessions
|
|
37
|
+
- **Task tracking** with dependencies
|
|
38
|
+
- **Git worktree workflows** (never commits to main)
|
|
39
|
+
- **Multi-agent coordination** (prevents merge conflicts)
|
|
69
40
|
|
|
70
|
-
|
|
41
|
+
## Example: Working With an AI Agent
|
|
71
42
|
|
|
72
|
-
|
|
43
|
+
After setup, just talk to your AI assistant normally:
|
|
73
44
|
|
|
74
|
-
```bash
|
|
75
|
-
# Create tasks
|
|
76
|
-
uam task create --title "Fix auth bug" --type bug --priority 0
|
|
77
|
-
uam task create --title "Add dark mode" --type feature --priority 2
|
|
78
|
-
|
|
79
|
-
# View tasks
|
|
80
|
-
uam task list # All open tasks
|
|
81
|
-
uam task ready # Tasks with no blockers
|
|
82
|
-
uam task blocked # Blocked tasks
|
|
83
|
-
uam task stats # Statistics
|
|
84
|
-
|
|
85
|
-
# Work on tasks
|
|
86
|
-
uam task claim <id> # Claim task (announces to other agents)
|
|
87
|
-
uam task show <id> # View details
|
|
88
|
-
uam task release <id> --reason "Fixed" # Complete task
|
|
89
|
-
|
|
90
|
-
# Dependencies
|
|
91
|
-
uam task dep --from <child> --to <parent> # Add blocker
|
|
92
|
-
uam task undep --from <child> --to <parent># Remove blocker
|
|
93
|
-
|
|
94
|
-
# Git sync (version control your tasks)
|
|
95
|
-
uam task sync # Export to JSONL
|
|
96
|
-
uam task compact --days 90 # Archive old tasks
|
|
97
45
|
```
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# Start services
|
|
109
|
-
uam memory start # Start Qdrant (Docker)
|
|
110
|
-
uam memory status # Check status
|
|
111
|
-
uam memory stop # Stop services
|
|
112
|
-
|
|
113
|
-
# Query memories
|
|
114
|
-
uam memory query "authentication JWT" # Semantic search
|
|
115
|
-
|
|
116
|
-
# Store learnings
|
|
117
|
-
uam memory store "lesson learned" --tags "auth,security" --importance 8
|
|
46
|
+
You: "Fix the authentication bug in the login handler"
|
|
47
|
+
|
|
48
|
+
AI: *Automatically:*
|
|
49
|
+
1. Checks memory for past context on auth/login
|
|
50
|
+
2. Creates task: "Fix auth bug in login handler"
|
|
51
|
+
3. Creates worktree: feature/fix-auth-bug
|
|
52
|
+
4. Makes changes, runs tests
|
|
53
|
+
5. Creates PR
|
|
54
|
+
6. Stores learnings in memory for next time
|
|
118
55
|
```
|
|
119
56
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
| Layer | Storage | Purpose | Speed |
|
|
123
|
-
|-------|---------|---------|-------|
|
|
124
|
-
| L1: Working | SQLite | Recent actions (last 50) | ~0.15ms |
|
|
125
|
-
| L2: Session | SQLite | Session decisions | ~0.2ms |
|
|
126
|
-
| L3: Semantic | Qdrant | Reusable learnings | ~1-2ms |
|
|
127
|
-
| L4: Knowledge Graph | SQLite | Entity relationships | ~0.17ms |
|
|
128
|
-
|
|
129
|
-
### Agent Coordination
|
|
57
|
+
The AI follows the workflow defined in CLAUDE.md without you managing any of it.
|
|
130
58
|
|
|
131
|
-
|
|
59
|
+
## What Gets Generated
|
|
132
60
|
|
|
133
|
-
|
|
134
|
-
# Register agent
|
|
135
|
-
uam agent register --name "feature-agent" --capabilities "coding,review"
|
|
136
|
-
|
|
137
|
-
# Announce work (enables overlap detection)
|
|
138
|
-
uam agent announce --id <agent-id> --resource "src/auth/" --intent editing
|
|
139
|
-
|
|
140
|
-
# Check for conflicts
|
|
141
|
-
uam agent overlaps --resource "src/auth/"
|
|
61
|
+
`uam generate` creates a `CLAUDE.md` file that includes:
|
|
142
62
|
|
|
143
|
-
|
|
144
|
-
|
|
63
|
+
- **Project structure** auto-detected from your codebase
|
|
64
|
+
- **Memory system** configuration (SQLite + Qdrant)
|
|
65
|
+
- **Workflow rules** (worktrees, testing, PR creation)
|
|
66
|
+
- **Agent coordination** protocols
|
|
67
|
+
- **Troubleshooting** from git history
|
|
145
68
|
|
|
146
|
-
|
|
147
|
-
uam agent status # View all agents
|
|
148
|
-
uam coord status # Coordination overview
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
**Conflict Risk Levels**: `none`, `low`, `medium`, `high`, `critical`
|
|
69
|
+
The AI reads this file and follows the instructions autonomously.
|
|
152
70
|
|
|
153
|
-
|
|
71
|
+
## Installation Options
|
|
154
72
|
|
|
155
|
-
|
|
73
|
+
### npm (Recommended)
|
|
156
74
|
|
|
157
75
|
```bash
|
|
158
|
-
|
|
159
|
-
uam deploy queue --agent-id <id> --action-type commit \
|
|
160
|
-
--message "feat: add feature" --files "src/feature.ts"
|
|
161
|
-
|
|
162
|
-
# View queue
|
|
163
|
-
uam deploy status
|
|
164
|
-
|
|
165
|
-
# Execute batched deploys
|
|
166
|
-
uam deploy flush # Squashes commits, single push
|
|
76
|
+
npm install -g universal-agent-memory
|
|
167
77
|
```
|
|
168
78
|
|
|
169
|
-
###
|
|
170
|
-
|
|
171
|
-
Isolated development branches with automated PR workflow.
|
|
79
|
+
### One-Line Installers
|
|
172
80
|
|
|
173
81
|
```bash
|
|
174
|
-
#
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
# List worktrees
|
|
178
|
-
uam worktree list
|
|
179
|
-
|
|
180
|
-
# Create PR
|
|
181
|
-
uam worktree pr <id> # Push + create PR
|
|
82
|
+
# Desktop (includes Docker for Qdrant)
|
|
83
|
+
bash <(curl -fsSL https://raw.githubusercontent.com/DammianMiller/universal-agent-memory/main/scripts/install-desktop.sh)
|
|
182
84
|
|
|
183
|
-
#
|
|
184
|
-
|
|
85
|
+
# Web browsers (claude.ai, factory.ai)
|
|
86
|
+
bash <(curl -fsSL https://raw.githubusercontent.com/DammianMiller/universal-agent-memory/main/scripts/install-web.sh)
|
|
185
87
|
```
|
|
186
88
|
|
|
187
|
-
###
|
|
188
|
-
|
|
189
|
-
Auto-generate context files for AI assistants.
|
|
89
|
+
### npx (No Install)
|
|
190
90
|
|
|
191
91
|
```bash
|
|
192
|
-
|
|
193
|
-
uam analyze --output json
|
|
194
|
-
|
|
195
|
-
# Generate CLAUDE.md
|
|
196
|
-
uam generate # Interactive merge with existing
|
|
197
|
-
uam generate --force # Overwrite
|
|
198
|
-
uam generate --dry-run # Preview only
|
|
92
|
+
npx universal-agent-memory init --interactive
|
|
199
93
|
```
|
|
200
94
|
|
|
201
|
-
##
|
|
95
|
+
## Commands
|
|
202
96
|
|
|
203
|
-
###
|
|
97
|
+
### Essential Commands
|
|
204
98
|
|
|
205
99
|
| Command | Description |
|
|
206
100
|
|---------|-------------|
|
|
207
101
|
| `uam init` | Initialize UAM in a project |
|
|
208
|
-
| `uam
|
|
209
|
-
| `uam
|
|
210
|
-
| `uam
|
|
102
|
+
| `uam generate` | Generate/update CLAUDE.md |
|
|
103
|
+
| `uam memory start` | Start Qdrant (for semantic memory) |
|
|
104
|
+
| `uam memory status` | Check if services are running |
|
|
211
105
|
|
|
212
|
-
### Task Commands
|
|
106
|
+
### Task Commands (Used by AI)
|
|
213
107
|
|
|
214
108
|
| Command | Description |
|
|
215
109
|
|---------|-------------|
|
|
216
110
|
| `uam task create` | Create a new task |
|
|
217
|
-
| `uam task list` | List tasks
|
|
218
|
-
| `uam task
|
|
219
|
-
| `uam task claim <id>` | Claim task for work |
|
|
220
|
-
| `uam task release <id>` | Complete and release task |
|
|
221
|
-
| `uam task ready` | Show unblocked tasks |
|
|
222
|
-
| `uam task blocked` | Show blocked tasks |
|
|
223
|
-
| `uam task dep` | Add dependency |
|
|
224
|
-
| `uam task stats` | Show statistics |
|
|
225
|
-
| `uam task sync` | Sync with JSONL |
|
|
226
|
-
|
|
227
|
-
### Memory Commands
|
|
228
|
-
|
|
229
|
-
| Command | Description |
|
|
230
|
-
|---------|-------------|
|
|
231
|
-
| `uam memory start` | Start Qdrant (Docker) |
|
|
232
|
-
| `uam memory stop` | Stop memory services |
|
|
233
|
-
| `uam memory status` | Check service status |
|
|
234
|
-
| `uam memory query` | Semantic search |
|
|
235
|
-
| `uam memory store` | Store a learning |
|
|
236
|
-
|
|
237
|
-
### Agent Commands
|
|
111
|
+
| `uam task list` | List all tasks |
|
|
112
|
+
| `uam task ready` | Show tasks with no blockers |
|
|
113
|
+
| `uam task claim <id>` | Claim a task for work |
|
|
238
114
|
|
|
239
|
-
|
|
240
|
-
|---------|-------------|
|
|
241
|
-
| `uam agent register` | Register new agent |
|
|
242
|
-
| `uam agent announce` | Announce work on resource |
|
|
243
|
-
| `uam agent overlaps` | Check for conflicts |
|
|
244
|
-
| `uam agent complete` | Mark work complete |
|
|
245
|
-
| `uam agent status` | Show agent status |
|
|
246
|
-
| `uam agent broadcast` | Send to all agents |
|
|
247
|
-
| `uam agent send` | Direct message |
|
|
248
|
-
| `uam agent receive` | Get pending messages |
|
|
249
|
-
|
|
250
|
-
### Coordination Commands
|
|
115
|
+
### Worktree Commands (Used by AI)
|
|
251
116
|
|
|
252
117
|
| Command | Description |
|
|
253
118
|
|---------|-------------|
|
|
254
|
-
| `uam
|
|
255
|
-
| `uam
|
|
256
|
-
| `uam
|
|
119
|
+
| `uam worktree create <name>` | Create isolated branch |
|
|
120
|
+
| `uam worktree pr <id>` | Create PR from worktree |
|
|
121
|
+
| `uam worktree cleanup <id>` | Remove worktree |
|
|
257
122
|
|
|
258
|
-
###
|
|
123
|
+
### Agent Coordination (Used by AI)
|
|
259
124
|
|
|
260
125
|
| Command | Description |
|
|
261
126
|
|---------|-------------|
|
|
262
|
-
| `uam
|
|
263
|
-
| `uam
|
|
264
|
-
| `uam
|
|
265
|
-
| `uam deploy execute` | Execute a batch |
|
|
266
|
-
| `uam deploy flush` | Batch and execute all |
|
|
127
|
+
| `uam agent overlaps` | Check for file conflicts |
|
|
128
|
+
| `uam agent announce` | Announce work on files |
|
|
129
|
+
| `uam agent status` | View active agents |
|
|
267
130
|
|
|
268
|
-
|
|
131
|
+
## Memory Architecture
|
|
269
132
|
|
|
270
|
-
|
|
271
|
-
|---------|-------------|
|
|
272
|
-
| `uam worktree create` | Create feature worktree |
|
|
273
|
-
| `uam worktree list` | List all worktrees |
|
|
274
|
-
| `uam worktree pr` | Create PR from worktree |
|
|
275
|
-
| `uam worktree cleanup` | Remove worktree |
|
|
133
|
+
UAM uses a 4-layer memory system, all managed automatically by the AI:
|
|
276
134
|
|
|
277
|
-
|
|
135
|
+
| Layer | Purpose | Storage |
|
|
136
|
+
|-------|---------|---------|
|
|
137
|
+
| Working | Recent actions (last 50) | SQLite |
|
|
138
|
+
| Session | Current session context | SQLite |
|
|
139
|
+
| Semantic | Reusable learnings | Qdrant |
|
|
140
|
+
| Knowledge Graph | Entity relationships | SQLite |
|
|
278
141
|
|
|
279
|
-
|
|
280
|
-
|---------|-------------|
|
|
281
|
-
| `uam droids list` | List available droids |
|
|
282
|
-
| `uam droids add` | Add a new droid |
|
|
283
|
-
| `uam droids import` | Import from path |
|
|
142
|
+
**You don't need to understand this** - the AI handles memory storage and retrieval automatically based on the CLAUDE.md instructions.
|
|
284
143
|
|
|
285
144
|
## Configuration
|
|
286
145
|
|
|
287
|
-
|
|
146
|
+
After `uam init`, configuration is in `.uam.json`:
|
|
288
147
|
|
|
289
148
|
```json
|
|
290
149
|
{
|
|
291
|
-
"version": "1.0.0",
|
|
292
150
|
"project": {
|
|
293
151
|
"name": "my-project",
|
|
294
152
|
"defaultBranch": "main"
|
|
295
153
|
},
|
|
296
154
|
"memory": {
|
|
297
|
-
"shortTerm": {
|
|
298
|
-
|
|
299
|
-
"path": "./agents/data/memory/short_term.db",
|
|
300
|
-
"maxEntries": 50
|
|
301
|
-
},
|
|
302
|
-
"longTerm": {
|
|
303
|
-
"enabled": true,
|
|
304
|
-
"provider": "qdrant",
|
|
305
|
-
"endpoint": "localhost:6333",
|
|
306
|
-
"collection": "agent_memory"
|
|
307
|
-
}
|
|
155
|
+
"shortTerm": { "enabled": true },
|
|
156
|
+
"longTerm": { "enabled": true, "provider": "qdrant" }
|
|
308
157
|
},
|
|
309
158
|
"worktrees": {
|
|
310
159
|
"enabled": true,
|
|
311
|
-
"directory": ".worktrees"
|
|
312
|
-
"branchPrefix": "feature/"
|
|
160
|
+
"directory": ".worktrees"
|
|
313
161
|
}
|
|
314
162
|
}
|
|
315
163
|
```
|
|
316
164
|
|
|
317
165
|
## Platform Support
|
|
318
166
|
|
|
319
|
-
| Platform |
|
|
320
|
-
|
|
321
|
-
| Claude Code |
|
|
322
|
-
|
|
|
323
|
-
|
|
|
324
|
-
|
|
|
325
|
-
| VSCode | Desktop | `CLAUDE.md` | Extension-based |
|
|
326
|
-
| OpenCode | Desktop | `opencode.json` | `.opencode/agent/` |
|
|
327
|
-
|
|
328
|
-
## Workflow Engine
|
|
329
|
-
|
|
330
|
-
UAM enforces a 5-phase workflow for every agent action:
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
START ā TASK ā CONTEXT ā WORK ā COMPLETE
|
|
334
|
-
```
|
|
167
|
+
| Platform | Context File | Works With |
|
|
168
|
+
|----------|--------------|------------|
|
|
169
|
+
| Claude Code | `CLAUDE.md` | Desktop app |
|
|
170
|
+
| Factory.AI | `CLAUDE.md` | Desktop/web |
|
|
171
|
+
| claude.ai | `CLAUDE.md` | Web browser |
|
|
172
|
+
| VSCode + Extensions | `CLAUDE.md` | Desktop |
|
|
335
173
|
|
|
336
|
-
|
|
337
|
-
2. **TASK**: Create/claim task before any work
|
|
338
|
-
3. **CONTEXT**: Query memory, check skills
|
|
339
|
-
4. **WORK**: Create worktree, make changes, test, PR
|
|
340
|
-
5. **COMPLETE**: Update memory, release task
|
|
174
|
+
## Built-in Droids
|
|
341
175
|
|
|
342
|
-
|
|
176
|
+
Quality review agents that run automatically before PRs:
|
|
343
177
|
|
|
344
|
-
|
|
178
|
+
| Droid | Purpose |
|
|
179
|
+
|-------|---------|
|
|
180
|
+
| `code-quality-guardian` | Code review, SOLID principles |
|
|
181
|
+
| `security-auditor` | OWASP, secrets detection |
|
|
182
|
+
| `performance-optimizer` | Algorithm efficiency |
|
|
183
|
+
| `documentation-expert` | Docs completeness |
|
|
345
184
|
|
|
346
|
-
|
|
185
|
+
## Requirements
|
|
347
186
|
|
|
348
|
-
-
|
|
349
|
-
-
|
|
187
|
+
- Node.js 18+
|
|
188
|
+
- Docker (optional, for persistent semantic memory)
|
|
189
|
+
- Git
|
|
350
190
|
|
|
351
|
-
|
|
191
|
+
## FAQ
|
|
352
192
|
|
|
353
|
-
|
|
354
|
-
|
|
193
|
+
**Q: Do I need to run memory commands manually?**
|
|
194
|
+
A: No. The AI reads CLAUDE.md and manages memory automatically.
|
|
355
195
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
export QDRANT_API_KEY=your_key
|
|
359
|
-
export QDRANT_URL=https://xxx.aws.cloud.qdrant.io:6333
|
|
360
|
-
export GITHUB_TOKEN=your_token
|
|
361
|
-
```
|
|
196
|
+
**Q: What if I don't have Docker?**
|
|
197
|
+
A: UAM works without Docker. You lose semantic (long-term) memory, but short-term and session memory still work via SQLite.
|
|
362
198
|
|
|
363
|
-
|
|
199
|
+
**Q: Can multiple AI agents work on the same project?**
|
|
200
|
+
A: Yes. UAM includes coordination protocols to prevent merge conflicts.
|
|
364
201
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
| `code-quality-guardian` | Code review, complexity, SOLID |
|
|
368
|
-
| `security-auditor` | OWASP, secrets, injection |
|
|
369
|
-
| `performance-optimizer` | Algorithms, memory, caching |
|
|
370
|
-
| `documentation-expert` | JSDoc, README, accuracy |
|
|
202
|
+
**Q: How do I update CLAUDE.md after project changes?**
|
|
203
|
+
A: Run `uam generate` again. It will intelligently merge with your existing file.
|
|
371
204
|
|
|
372
205
|
## Development
|
|
373
206
|
|
|
374
207
|
```bash
|
|
375
|
-
# Clone
|
|
376
208
|
git clone https://github.com/DammianMiller/universal-agent-memory.git
|
|
377
209
|
cd universal-agent-memory
|
|
378
|
-
|
|
379
|
-
# Install
|
|
380
210
|
npm install
|
|
381
|
-
|
|
382
|
-
# Build
|
|
383
211
|
npm run build
|
|
384
|
-
|
|
385
|
-
# Test
|
|
386
212
|
npm test
|
|
387
|
-
|
|
388
|
-
# Run locally
|
|
389
|
-
npm start -- init --interactive
|
|
390
213
|
```
|
|
391
214
|
|
|
392
|
-
## Requirements
|
|
393
|
-
|
|
394
|
-
- Node.js 18+
|
|
395
|
-
- Docker (for local Qdrant)
|
|
396
|
-
- Git
|
|
397
|
-
|
|
398
215
|
## License
|
|
399
216
|
|
|
400
217
|
MIT
|
|
401
218
|
|
|
402
219
|
## Links
|
|
403
220
|
|
|
404
|
-
- [GitHub
|
|
405
|
-
- [npm
|
|
406
|
-
- [
|
|
221
|
+
- [GitHub](https://github.com/DammianMiller/universal-agent-memory)
|
|
222
|
+
- [npm](https://www.npmjs.com/package/universal-agent-memory)
|
|
223
|
+
- [Issues](https://github.com/DammianMiller/universal-agent-memory/issues)
|
package/dist/cli/generate.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ interface GenerateOptions {
|
|
|
4
4
|
platform?: string;
|
|
5
5
|
web?: boolean;
|
|
6
6
|
}
|
|
7
|
+
interface DependencyStatus {
|
|
8
|
+
git: boolean;
|
|
9
|
+
docker: boolean;
|
|
10
|
+
node: boolean;
|
|
11
|
+
qdrant: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function printDependencyHelp(deps: DependencyStatus): void;
|
|
7
14
|
export declare function generateCommand(options: GenerateOptions): Promise<void>;
|
|
8
15
|
export {};
|
|
9
16
|
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAYA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAoCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAqBhE;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoN7E"}
|
package/dist/cli/generate.js
CHANGED
|
@@ -3,13 +3,72 @@ import ora from 'ora';
|
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
5
5
|
import { join } from 'path';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
6
7
|
import { analyzeProject } from '../analyzers/index.js';
|
|
7
8
|
import { generateClaudeMd } from '../generators/claude-md.js';
|
|
8
9
|
import { AgentContextConfigSchema } from '../types/index.js';
|
|
9
|
-
import { mergeClaudeMd } from '../utils/merge-claude-md.js';
|
|
10
|
+
import { mergeClaudeMd, validateMerge } from '../utils/merge-claude-md.js';
|
|
11
|
+
function checkDependencies() {
|
|
12
|
+
const status = {
|
|
13
|
+
git: false,
|
|
14
|
+
docker: false,
|
|
15
|
+
node: true, // We're running, so Node exists
|
|
16
|
+
qdrant: false,
|
|
17
|
+
};
|
|
18
|
+
try {
|
|
19
|
+
execSync('git --version', { stdio: 'pipe' });
|
|
20
|
+
status.git = true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// git not found
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
execSync('docker --version', { stdio: 'pipe' });
|
|
27
|
+
status.docker = true;
|
|
28
|
+
// Check if Qdrant container is running
|
|
29
|
+
try {
|
|
30
|
+
const output = execSync('docker ps --filter "name=qdrant" --format "{{.Names}}"', { stdio: 'pipe' }).toString();
|
|
31
|
+
status.qdrant = output.includes('qdrant');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// docker ps failed
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// docker not found
|
|
39
|
+
}
|
|
40
|
+
return status;
|
|
41
|
+
}
|
|
42
|
+
// Print dependency status - used when verbose flag is enabled
|
|
43
|
+
export function printDependencyHelp(deps) {
|
|
44
|
+
console.log(chalk.bold('\nš¦ Dependency Status:\n'));
|
|
45
|
+
console.log(` ${deps.git ? 'ā
' : 'ā'} Git: ${deps.git ? 'Available' : 'Not found'}`);
|
|
46
|
+
if (!deps.git) {
|
|
47
|
+
console.log(chalk.dim(' Install: https://git-scm.com/downloads'));
|
|
48
|
+
}
|
|
49
|
+
console.log(` ${deps.docker ? 'ā
' : 'ā ļø '} Docker: ${deps.docker ? 'Available' : 'Not found (optional)'}`);
|
|
50
|
+
if (!deps.docker) {
|
|
51
|
+
console.log(chalk.dim(' Install for semantic memory: https://docs.docker.com/get-docker/'));
|
|
52
|
+
}
|
|
53
|
+
console.log(` ${deps.qdrant ? 'ā
' : 'ā ļø '} Qdrant: ${deps.qdrant ? 'Running' : 'Not running (optional)'}`);
|
|
54
|
+
if (deps.docker && !deps.qdrant) {
|
|
55
|
+
console.log(chalk.dim(' Start with: uam memory start'));
|
|
56
|
+
}
|
|
57
|
+
else if (!deps.docker) {
|
|
58
|
+
console.log(chalk.dim(' Requires Docker - UAM works without it (no semantic memory)'));
|
|
59
|
+
}
|
|
60
|
+
console.log('');
|
|
61
|
+
}
|
|
10
62
|
export async function generateCommand(options) {
|
|
11
63
|
const cwd = process.cwd();
|
|
12
64
|
const configPath = join(cwd, '.uam.json');
|
|
65
|
+
// Check dependencies
|
|
66
|
+
const deps = checkDependencies();
|
|
67
|
+
if (!deps.git) {
|
|
68
|
+
console.error(chalk.red('\nā Git is required but not found.'));
|
|
69
|
+
console.log(chalk.dim(' Install Git: https://git-scm.com/downloads\n'));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
13
72
|
console.log(chalk.bold('\nš Generate Agent Context Files\n'));
|
|
14
73
|
// Load config if exists
|
|
15
74
|
let config;
|
|
@@ -129,6 +188,18 @@ export async function generateCommand(options) {
|
|
|
129
188
|
try {
|
|
130
189
|
const newClaudeMd = await generateClaudeMd(analysis, effectiveConfig);
|
|
131
190
|
const claudeMd = existingContent ? mergeClaudeMd(existingContent, newClaudeMd) : newClaudeMd;
|
|
191
|
+
// Validate merge if we merged existing content
|
|
192
|
+
if (existingContent) {
|
|
193
|
+
const validation = validateMerge(existingContent, claudeMd);
|
|
194
|
+
if (!validation.valid) {
|
|
195
|
+
genSpinner.warn(`Merged with warnings`);
|
|
196
|
+
console.log(chalk.yellow('\n Merge validation warnings:'));
|
|
197
|
+
for (const warning of validation.warnings) {
|
|
198
|
+
console.log(chalk.dim(` - ${warning}`));
|
|
199
|
+
}
|
|
200
|
+
console.log('');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
132
203
|
if (options.dryRun) {
|
|
133
204
|
genSpinner.succeed(`${existingContent ? 'Merged' : 'Generated'} (dry run)`);
|
|
134
205
|
console.log(chalk.dim(`\n--- ${targetFileName} Preview ---\n`));
|
|
@@ -139,7 +210,7 @@ export async function generateCommand(options) {
|
|
|
139
210
|
writeFileSync(targetPath, claudeMd);
|
|
140
211
|
genSpinner.succeed(`${existingContent ? 'Merged and updated' : 'Generated'} ${targetFileName}`);
|
|
141
212
|
if (existingContent) {
|
|
142
|
-
console.log(chalk.dim(' Preserved custom sections from existing file'));
|
|
213
|
+
console.log(chalk.dim(' Preserved custom sections and extracted valuable content from existing file'));
|
|
143
214
|
}
|
|
144
215
|
}
|
|
145
216
|
}
|
|
@@ -169,6 +240,22 @@ export async function generateCommand(options) {
|
|
|
169
240
|
}
|
|
170
241
|
if (!options.dryRun) {
|
|
171
242
|
console.log(chalk.green('\nā
Generation complete!\n'));
|
|
243
|
+
// Print helpful next steps
|
|
244
|
+
console.log(chalk.bold('Next Steps:\n'));
|
|
245
|
+
console.log(' 1. Your AI assistant will now read CLAUDE.md automatically');
|
|
246
|
+
console.log(' 2. The AI handles memory, tasks, and workflows autonomously');
|
|
247
|
+
console.log(' 3. Just talk to your AI naturally - it follows the CLAUDE.md instructions\n');
|
|
248
|
+
// Show optional enhancements
|
|
249
|
+
if (!deps.docker || !deps.qdrant) {
|
|
250
|
+
console.log(chalk.dim('Optional: For persistent semantic memory across sessions:'));
|
|
251
|
+
if (!deps.docker) {
|
|
252
|
+
console.log(chalk.dim(' - Install Docker: https://docs.docker.com/get-docker/'));
|
|
253
|
+
}
|
|
254
|
+
if (deps.docker && !deps.qdrant) {
|
|
255
|
+
console.log(chalk.dim(' - Start Qdrant: uam memory start'));
|
|
256
|
+
}
|
|
257
|
+
console.log('');
|
|
258
|
+
}
|
|
172
259
|
}
|
|
173
260
|
}
|
|
174
261
|
async function generatePlatformFiles(_cwd, platform, _analysis, _config, dryRun) {
|