robrain 0.2.0 → 0.2.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.
@@ -0,0 +1,8 @@
1
+ interface ExportOptions {
2
+ dryRun?: boolean;
3
+ includeUnreviewed?: boolean;
4
+ to?: string;
5
+ }
6
+ export declare function exportMemoryCommand(opts: ExportOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=export-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-memory.d.ts","sourceRoot":"","sources":["../../src/commands/export-memory.ts"],"names":[],"mappings":"AA2CA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAa,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,EAAE,CAAC,EAAiB,MAAM,CAAA;CAC3B;AA6BD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH5E"}
@@ -0,0 +1,416 @@
1
+ // packages/cli/src/commands/export-memory.ts
2
+ // ─────────────────────────────────────────────────────────────
3
+ // robrain export-memory [--dry-run] [--include-unreviewed] [--to DIR]
4
+ //
5
+ // Projects RoBrain's approved decision corpus into Claude Code's
6
+ // auto-memory directory so decisions surface automatically in
7
+ // every session — without the manual `inject` paste step.
8
+ //
9
+ // Default behaviour:
10
+ // • Fetches active + approved decisions from Perception
11
+ // (reviewed_at IS NOT NULL AND invalidated_at IS NULL)
12
+ // • Clusters them by file-path overlap into topics
13
+ // • Writes one ~/.claude/projects/<slug>/memory/decision_<topic>.md
14
+ // per cluster, marked `source: robrain` in frontmatter
15
+ // • Maintains a managed block in MEMORY.md between
16
+ // <!-- ROBRAIN:START --> and <!-- ROBRAIN:END --> markers,
17
+ // leaving user-authored entries untouched
18
+ //
19
+ // Idempotent. Re-running rebuilds RoBrain-owned files from the DB
20
+ // and never overwrites a memory file lacking `source: robrain`.
21
+ // ─────────────────────────────────────────────────────────────
22
+ import chalk from 'chalk';
23
+ import ora from 'ora';
24
+ import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync, } from 'fs';
25
+ import { join } from 'path';
26
+ import { cwd } from 'process';
27
+ import { readConfig } from '../lib/config.js';
28
+ import { gatherProjectInfo } from '../lib/project.js';
29
+ import { defaultMemoryDir, memoryIndexPath, } from '../lib/memory-paths.js';
30
+ const ROBRAIN_START = '<!-- ROBRAIN:START — auto-managed by `robrain export-memory`, do not edit by hand -->';
31
+ const ROBRAIN_END = '<!-- ROBRAIN:END -->';
32
+ const FRONTMATTER_SOURCE = 'source: robrain';
33
+ // ── Entry point ───────────────────────────────────────────────
34
+ export async function exportMemoryCommand(opts) {
35
+ console.log();
36
+ const config = readConfig();
37
+ const info = gatherProjectInfo(cwd());
38
+ const percUrl = config.perceptionUrl ?? 'http://localhost:3001';
39
+ const percKey = config.perceptionKey ?? '';
40
+ const memoryDir = opts.to ?? defaultMemoryDir(cwd());
41
+ const indexPath = memoryIndexPath(memoryDir);
42
+ // ── 1. Fetch decisions ──────────────────────────────────────
43
+ const spinner = ora({ text: 'Fetching decisions from Perception...', color: 'green' }).start();
44
+ let decisions = [];
45
+ try {
46
+ const params = new URLSearchParams({
47
+ project_id: info.id,
48
+ history: 'true', // returns full lifecycle so we can pick approved ones
49
+ limit: '100', // server caps at 100; pagination is a follow-up
50
+ });
51
+ const res = await fetch(`${percUrl}/decisions?${params}`, {
52
+ headers: percKey ? { 'Authorization': `Bearer ${percKey}` } : {},
53
+ });
54
+ if (!res.ok) {
55
+ spinner.fail(`Could not fetch decisions (${res.status}). Is Perception running?`);
56
+ console.log(chalk.dim(` Expected at: ${percUrl}`));
57
+ console.log(chalk.dim(' Start with: pnpm docker:up\n'));
58
+ process.exit(1);
59
+ }
60
+ const data = await res.json();
61
+ decisions = data.decisions ?? [];
62
+ }
63
+ catch {
64
+ spinner.fail('Could not reach Perception API');
65
+ console.log(chalk.dim(`\n Expected at: ${percUrl}`));
66
+ console.log(chalk.dim(' Start with: pnpm docker:up\n'));
67
+ process.exit(1);
68
+ }
69
+ spinner.stop();
70
+ // ── 2. Filter ───────────────────────────────────────────────
71
+ const totalFetched = decisions.length;
72
+ const active = decisions.filter(d => !d.invalidated_at);
73
+ const exportable = opts.includeUnreviewed
74
+ ? active
75
+ : active.filter(d => !!d.reviewed_at);
76
+ if (exportable.length === 0) {
77
+ console.log(chalk.bold(` Export memory — ${info.name}`));
78
+ console.log();
79
+ if (totalFetched === 0) {
80
+ console.log(chalk.dim(' No decisions captured yet for this project.'));
81
+ console.log(chalk.dim(' Run a Claude Code session with Sensing first.\n'));
82
+ }
83
+ else if (active.length === 0) {
84
+ console.log(chalk.dim(` All ${totalFetched} captured decisions are invalidated/superseded.\n`));
85
+ }
86
+ else {
87
+ console.log(chalk.dim(` ${active.length} active decision${active.length === 1 ? '' : 's'} found, but none are approved yet.`));
88
+ console.log(chalk.dim(' Approve them first: ') + chalk.cyan('robrain review') + chalk.dim('\n'));
89
+ console.log(chalk.dim(' Or include unreviewed (not recommended): ') + chalk.cyan('robrain export-memory --include-unreviewed\n'));
90
+ }
91
+ return;
92
+ }
93
+ // ── 3. Cluster by file-path overlap ─────────────────────────
94
+ const clusters = clusterByFileOverlap(exportable);
95
+ // ── 4. Plan the writes (don't touch disk yet) ───────────────
96
+ const plan = planWrites(clusters, memoryDir, indexPath, opts.dryRun ?? false);
97
+ // ── 5. Display preview ──────────────────────────────────────
98
+ console.log(chalk.bold(` Export memory — ${info.name}`));
99
+ const exportLabel = opts.includeUnreviewed ? 'decision' : 'approved decision';
100
+ console.log(chalk.dim(` ${exportable.length} ${exportLabel}${exportable.length === 1 ? '' : 's'} → ${clusters.length} topic${clusters.length === 1 ? '' : 's'}`));
101
+ console.log(chalk.dim(` Target: ${memoryDir}\n`));
102
+ for (const action of plan.actions) {
103
+ const tag = action.kind === 'write' ? chalk.green(' + write ')
104
+ : action.kind === 'rewrite' ? chalk.yellow(' ↺ rewrite')
105
+ : action.kind === 'skip' ? chalk.dim(' · skip ')
106
+ : action.kind === 'delete' ? chalk.red(' − delete ')
107
+ : chalk.cyan(' ↻ index ');
108
+ console.log(`${tag} ${action.path.replace(memoryDir + '/', '')}${action.note ? chalk.dim(` (${action.note})`) : ''}`);
109
+ }
110
+ // ── 6. Execute (or stop, if dry-run) ────────────────────────
111
+ if (opts.dryRun) {
112
+ console.log();
113
+ console.log(chalk.dim(' Dry run — no files written. Drop --dry-run to apply.\n'));
114
+ return;
115
+ }
116
+ if (!existsSync(memoryDir)) {
117
+ mkdirSync(memoryDir, { recursive: true });
118
+ }
119
+ let writes = 0, deleted = 0, unchanged = 0, userOwned = 0;
120
+ for (const action of plan.actions) {
121
+ if (action.kind === 'write' || action.kind === 'rewrite') {
122
+ writeFileSync(action.path, action.content);
123
+ writes++;
124
+ }
125
+ else if (action.kind === 'delete') {
126
+ try {
127
+ unlinkSync(action.path);
128
+ deleted++;
129
+ }
130
+ catch { /* missing is fine */ }
131
+ }
132
+ else if (action.kind === 'index') {
133
+ writeFileSync(action.path, action.content);
134
+ }
135
+ else if (action.kind === 'skip') {
136
+ if (action.note === 'unchanged')
137
+ unchanged++;
138
+ else
139
+ userOwned++;
140
+ }
141
+ }
142
+ console.log();
143
+ console.log(chalk.green(` ✓ Wrote ${writes} memory file${writes === 1 ? '' : 's'}, updated MEMORY.md index.`));
144
+ if (unchanged > 0)
145
+ console.log(chalk.dim(` ${unchanged} file${unchanged === 1 ? '' : 's'} unchanged.`));
146
+ if (deleted > 0)
147
+ console.log(chalk.dim(` Deleted ${deleted} stale RoBrain-owned file${deleted === 1 ? '' : 's'}.`));
148
+ if (userOwned > 0)
149
+ console.log(chalk.dim(` Skipped ${userOwned} user-authored file${userOwned === 1 ? '' : 's'} (not marked source: robrain).`));
150
+ console.log();
151
+ }
152
+ // ── Clustering ────────────────────────────────────────────────
153
+ // Simple Union-Find over decisions sharing ≥1 file path.
154
+ // Decisions with no files form a single "general" cluster.
155
+ function clusterByFileOverlap(decisions) {
156
+ const parent = new Map();
157
+ decisions.forEach(d => parent.set(d.id, d.id));
158
+ const find = (x) => {
159
+ let p = parent.get(x);
160
+ while (p !== parent.get(p))
161
+ p = parent.get(p);
162
+ parent.set(x, p);
163
+ return p;
164
+ };
165
+ const union = (a, b) => {
166
+ const ra = find(a), rb = find(b);
167
+ if (ra !== rb)
168
+ parent.set(ra, rb);
169
+ };
170
+ // Index files → first-seen decision id, then union pairs that share any file.
171
+ const fileToFirstId = new Map();
172
+ const noFileBucket = [];
173
+ for (const d of decisions) {
174
+ if (d.files_affected.length === 0) {
175
+ noFileBucket.push(d);
176
+ continue;
177
+ }
178
+ for (const f of d.files_affected) {
179
+ const prev = fileToFirstId.get(f);
180
+ if (prev)
181
+ union(prev, d.id);
182
+ else
183
+ fileToFirstId.set(f, d.id);
184
+ }
185
+ }
186
+ // Group by root
187
+ const groups = new Map();
188
+ for (const d of decisions) {
189
+ if (d.files_affected.length === 0)
190
+ continue;
191
+ const root = find(d.id);
192
+ const arr = groups.get(root) ?? [];
193
+ arr.push(d);
194
+ groups.set(root, arr);
195
+ }
196
+ const clusters = [];
197
+ for (const [, ds] of groups) {
198
+ const files = new Set();
199
+ ds.forEach(d => d.files_affected.forEach(f => files.add(f)));
200
+ const topic = topicNameFor(ds, files);
201
+ clusters.push({
202
+ topic: topic.display,
203
+ slug: topic.slug,
204
+ decisions: ds.sort((a, b) => +new Date(a.created_at) - +new Date(b.created_at)),
205
+ files,
206
+ });
207
+ }
208
+ if (noFileBucket.length > 0) {
209
+ clusters.push({
210
+ topic: 'General decisions',
211
+ slug: 'general',
212
+ decisions: noFileBucket.sort((a, b) => +new Date(a.created_at) - +new Date(b.created_at)),
213
+ files: new Set(),
214
+ });
215
+ }
216
+ // Stable order: largest cluster first, then by topic
217
+ clusters.sort((a, b) => b.decisions.length - a.decisions.length || a.topic.localeCompare(b.topic));
218
+ return clusters;
219
+ }
220
+ function topicNameFor(decisions, files) {
221
+ // Pick the directory or file path most commonly mentioned.
222
+ const counts = new Map();
223
+ for (const f of files) {
224
+ const segs = f.split('/').filter(Boolean);
225
+ // Count both the immediate dir and the file basename
226
+ if (segs.length >= 2) {
227
+ const dir = segs.slice(0, -1).join('/');
228
+ counts.set(dir, (counts.get(dir) ?? 0) + 1);
229
+ }
230
+ counts.set(f, (counts.get(f) ?? 0) + 1);
231
+ }
232
+ let best = '';
233
+ let bestCount = 0;
234
+ for (const [k, v] of counts) {
235
+ if (v > bestCount || (v === bestCount && k.length < best.length)) {
236
+ best = k;
237
+ bestCount = v;
238
+ }
239
+ }
240
+ if (!best) {
241
+ // Fallback: first decision's first word
242
+ best = decisions[0]?.decision.split(/\s+/).slice(0, 4).join(' ') ?? 'topic';
243
+ }
244
+ const display = best;
245
+ const slug = best
246
+ .toLowerCase()
247
+ .replace(/[^a-z0-9]+/g, '-')
248
+ .replace(/^-+|-+$/g, '')
249
+ .slice(0, 40)
250
+ || 'topic';
251
+ return { display, slug };
252
+ }
253
+ function planWrites(clusters, memoryDir, indexPath, _dryRun) {
254
+ const actions = [];
255
+ const desiredFiles = new Set();
256
+ // ── Per-cluster files ──
257
+ for (const cluster of clusters) {
258
+ const filename = `decision_${cluster.slug}.md`;
259
+ const fullPath = join(memoryDir, filename);
260
+ desiredFiles.add(fullPath);
261
+ const content = renderClusterFile(cluster);
262
+ if (!existsSync(fullPath)) {
263
+ actions.push({ kind: 'write', path: fullPath, content, note: `${cluster.decisions.length} decision${cluster.decisions.length === 1 ? '' : 's'}` });
264
+ }
265
+ else {
266
+ const existing = readFileSync(fullPath, 'utf8');
267
+ if (isRoBrainOwned(existing)) {
268
+ // Strip last_exported from both sides — that line regenerates on every
269
+ // run and would otherwise force a rewrite even when nothing else changed.
270
+ if (stripVolatile(existing) === stripVolatile(content)) {
271
+ actions.push({ kind: 'skip', path: fullPath, note: 'unchanged' });
272
+ }
273
+ else {
274
+ actions.push({ kind: 'rewrite', path: fullPath, content, note: 'updated' });
275
+ }
276
+ }
277
+ else {
278
+ actions.push({ kind: 'skip', path: fullPath, note: 'user-authored, leaving alone' });
279
+ }
280
+ }
281
+ }
282
+ // ── Sweep stale RoBrain-owned files (decisions removed from corpus) ──
283
+ if (existsSync(memoryDir)) {
284
+ for (const name of readdirSync(memoryDir)) {
285
+ if (!name.startsWith('decision_') || !name.endsWith('.md'))
286
+ continue;
287
+ const full = join(memoryDir, name);
288
+ if (desiredFiles.has(full))
289
+ continue;
290
+ try {
291
+ const existing = readFileSync(full, 'utf8');
292
+ if (isRoBrainOwned(existing)) {
293
+ actions.push({ kind: 'delete', path: full, note: 'no longer in corpus' });
294
+ }
295
+ }
296
+ catch { /* ignore */ }
297
+ }
298
+ }
299
+ // ── Index update ──
300
+ const indexContent = renderIndex(clusters, existsSync(indexPath) ? readFileSync(indexPath, 'utf8') : '');
301
+ actions.push({ kind: 'index', path: indexPath, content: indexContent, note: 'MEMORY.md (managed block only)' });
302
+ return { actions };
303
+ }
304
+ // ── Renderers ─────────────────────────────────────────────────
305
+ function renderClusterFile(cluster) {
306
+ const last = cluster.decisions[cluster.decisions.length - 1];
307
+ const ids = cluster.decisions.map(d => ` - ${d.id}`).join('\n');
308
+ // Frontmatter
309
+ const fm = [
310
+ '---',
311
+ 'source: robrain',
312
+ 'type: project',
313
+ `name: ${quoteYaml(cluster.topic)}`,
314
+ 'decision_ids:',
315
+ ids,
316
+ `last_exported: ${new Date().toISOString()}`,
317
+ '---',
318
+ '',
319
+ ].join('\n');
320
+ // Body
321
+ const body = [];
322
+ body.push(`# ${cluster.topic}`);
323
+ body.push('');
324
+ // Current stance (the latest reviewed decision in the cluster)
325
+ body.push('## Current stance');
326
+ body.push('');
327
+ body.push(formatDecisionLine(last));
328
+ body.push('');
329
+ // All vetos across the cluster (deduped)
330
+ const vetoes = new Map();
331
+ for (const d of cluster.decisions) {
332
+ for (const r of (d.rejected ?? [])) {
333
+ if (!vetoes.has(r.option))
334
+ vetoes.set(r.option, r.reason);
335
+ }
336
+ }
337
+ if (vetoes.size > 0) {
338
+ body.push('## Considered and rejected');
339
+ body.push('');
340
+ for (const [opt, reason] of vetoes) {
341
+ body.push(`- **${opt}** — ${reason}`);
342
+ }
343
+ body.push('');
344
+ }
345
+ // Files affected
346
+ if (cluster.files.size > 0) {
347
+ body.push('## Files affected');
348
+ body.push('');
349
+ for (const f of [...cluster.files].sort())
350
+ body.push(`- \`${f}\``);
351
+ body.push('');
352
+ }
353
+ // History (older approved decisions)
354
+ if (cluster.decisions.length > 1) {
355
+ body.push('## History');
356
+ body.push('');
357
+ for (const d of cluster.decisions.slice(0, -1)) {
358
+ body.push(`- ${formatDecisionLine(d)}`);
359
+ }
360
+ body.push('');
361
+ }
362
+ return fm + body.join('\n');
363
+ }
364
+ function formatDecisionLine(d) {
365
+ const date = new Date(d.created_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
366
+ const conf = d.confidence >= 0.9 ? 'high' : d.confidence >= 0.6 ? 'medium' : 'low';
367
+ const rationale = d.rationale ? ` — ${d.rationale}` : '';
368
+ return `Chose ${d.decision}${rationale} _[${date}, ${conf} confidence]_`;
369
+ }
370
+ function renderIndex(clusters, existing) {
371
+ const managed = [
372
+ ROBRAIN_START,
373
+ ...clusters.map(c => {
374
+ const filename = `decision_${c.slug}.md`;
375
+ const summary = c.decisions[c.decisions.length - 1]?.decision.slice(0, 70) ?? c.topic;
376
+ return `- [${c.topic}](${filename}) — ${summary}`;
377
+ }),
378
+ ROBRAIN_END,
379
+ ].join('\n');
380
+ if (!existing) {
381
+ // New index: just our managed block
382
+ return `# Project memory\n\n${managed}\n`;
383
+ }
384
+ // Existing index: replace our managed block in place, or append if absent
385
+ const startIdx = existing.indexOf(ROBRAIN_START);
386
+ const endIdx = existing.indexOf(ROBRAIN_END);
387
+ if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
388
+ const before = existing.slice(0, startIdx);
389
+ const after = existing.slice(endIdx + ROBRAIN_END.length);
390
+ return `${before}${managed}${after}`;
391
+ }
392
+ // Markers missing — append at end, preserving everything user wrote
393
+ const sep = existing.endsWith('\n') ? '' : '\n';
394
+ return `${existing}${sep}\n${managed}\n`;
395
+ }
396
+ /** Drop fields that change on every run so equality compares only substantive content. */
397
+ function stripVolatile(content) {
398
+ return content.replace(/^last_exported:.*$/m, '').trim();
399
+ }
400
+ function isRoBrainOwned(fileContent) {
401
+ // Only treat the first frontmatter block as authoritative
402
+ if (!fileContent.startsWith('---'))
403
+ return false;
404
+ const close = fileContent.indexOf('\n---', 3);
405
+ if (close === -1)
406
+ return false;
407
+ const fm = fileContent.slice(0, close);
408
+ return fm.includes(FRONTMATTER_SOURCE);
409
+ }
410
+ function quoteYaml(s) {
411
+ // Quote if it contains characters YAML would otherwise misread
412
+ if (/^[A-Za-z0-9 _\-\/\.]+$/.test(s))
413
+ return s;
414
+ return `"${s.replace(/"/g, '\\"')}"`;
415
+ }
416
+ //# sourceMappingURL=export-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-memory.js","sourceRoot":"","sources":["../../src/commands/export-memory.ts"],"names":[],"mappings":"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"}
@@ -212,7 +212,7 @@ export async function installCommand(opts) {
212
212
  planningKey: provisioned.planningKey,
213
213
  embeddingProvider: embeddingProvider ?? 'openai',
214
214
  installedAt: new Date().toISOString(),
215
- version: '0.2.0',
215
+ version: '0.2.1',
216
216
  });
217
217
  spinner.succeed('MCP servers configured');
218
218
  // ── Done ───────────────────────────────────────────────────
@@ -300,7 +300,7 @@ async function installSelfHosted(opts) {
300
300
  perceptionUrl,
301
301
  embeddingProvider: provider,
302
302
  installedAt: new Date().toISOString(),
303
- version: '0.2.0',
303
+ version: '0.2.1',
304
304
  selfHosted: true,
305
305
  });
306
306
  spinner.succeed('MCP servers configured for self-hosted mode');
@@ -2,6 +2,7 @@ interface ReviewOptions {
2
2
  session?: string;
3
3
  all?: boolean;
4
4
  history?: boolean;
5
+ approveAll?: boolean;
5
6
  limit?: number;
6
7
  }
7
8
  export declare function reviewCommand(opts: ReviewOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAM,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAI,MAAM,CAAA;CACjB;AAkBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKtE"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAM,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAI,MAAM,CAAA;CACjB;AAmBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuNtE"}
@@ -61,18 +61,44 @@ export async function reviewCommand(opts) {
61
61
  }
62
62
  spinner.stop();
63
63
  if (decisions.length === 0) {
64
- console.log(chalk.dim(` No decisions stored yet for ${chalk.bold(info.name)}.`));
65
- console.log(chalk.dim(' Run a Claude Code session to start capturing memory.\n'));
64
+ if (opts.history) {
65
+ console.log(chalk.dim(` No decisions stored yet for ${chalk.bold(info.name)}.`));
66
+ console.log(chalk.dim(' Run a Claude Code session to start capturing memory.\n'));
67
+ }
68
+ else {
69
+ console.log(chalk.green(` ✓ All caught up — no decisions need review for ${chalk.bold(info.name)}.`));
70
+ console.log(chalk.dim(' Run a Claude Code session to capture more, or use --history to see all decisions.\n'));
71
+ }
72
+ return;
73
+ }
74
+ if (opts.approveAll) {
75
+ const reviewable = decisions.filter(d => !d.invalidated_at && !d.reviewed_at);
76
+ if (reviewable.length === 0) {
77
+ console.log(chalk.green(` ✓ No reviewable decisions to approve for ${chalk.bold(info.name)}.\n`));
78
+ return;
79
+ }
80
+ const { confirmApproveAll } = await prompts({
81
+ type: 'confirm',
82
+ name: 'confirmApproveAll',
83
+ message: `Approve ${reviewable.length} decision${reviewable.length === 1 ? '' : 's'} in bulk?`,
84
+ initial: false,
85
+ });
86
+ if (!confirmApproveAll) {
87
+ console.log(chalk.dim(' Cancelled.\n'));
88
+ return;
89
+ }
90
+ await approveManyDecisionsInline(reviewable, percUrl, percKey);
91
+ console.log(chalk.green(' ✓ Bulk approval complete\n'));
66
92
  return;
67
93
  }
68
94
  // ── Display header ─────────────────────────────────────────
69
95
  console.log(chalk.bold(` Memory review — ${info.name}`));
70
96
  console.log(chalk.dim(` ${decisions.length} decision${decisions.length === 1 ? '' : 's'} · Project ID: ${info.id}`));
71
97
  if (opts.history) {
72
- console.log(chalk.dim(' Showing full history including superseded decisions\n'));
98
+ console.log(chalk.dim(' Showing full history including approved and superseded decisions\n'));
73
99
  }
74
100
  else {
75
- console.log(chalk.dim(' Showing active decisions only · use --history to see full lifecycle\n'));
101
+ console.log(chalk.dim(' Showing decisions that still need review · use --history to see full lifecycle\n'));
76
102
  }
77
103
  // ── Display each decision ──────────────────────────────────
78
104
  for (const [i, d] of decisions.entries()) {
@@ -83,11 +109,17 @@ export async function reviewCommand(opts) {
83
109
  : chalk.red('low');
84
110
  // Lifecycle state
85
111
  const isSuperseded = !!d.invalidated_at;
112
+ const isApproved = !isSuperseded && !!d.reviewed_at;
113
+ const reviewedDate = isApproved && d.reviewed_at
114
+ ? new Date(d.reviewed_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
115
+ : null;
86
116
  const statusLabel = isSuperseded
87
117
  ? chalk.dim(' ↩ SUPERSEDED')
88
- : d.conflict_flag
89
- ? chalk.yellow(' ⚠ CONFLICT — needs resolution')
90
- : null;
118
+ : isApproved
119
+ ? chalk.green(` ✓ APPROVED — ${reviewedDate}`)
120
+ : d.conflict_flag
121
+ ? chalk.yellow(' ⚠ CONFLICT — needs resolution')
122
+ : null;
91
123
  if (statusLabel)
92
124
  console.log(statusLabel);
93
125
  // Decision text — dim if superseded
@@ -114,18 +146,27 @@ export async function reviewCommand(opts) {
114
146
  console.log(chalk.dim(` ↪ superseded: ${supersededDate}`));
115
147
  }
116
148
  console.log(chalk.dim(` ${date} · confidence: `) + conf + chalk.dim(` · scope: ${d.scope}`));
117
- // Skip per-decision prompt for superseded decisions in history mode
149
+ // Superseded rows are read-only in the UI (history only).
118
150
  if (isSuperseded) {
119
151
  console.log();
120
152
  continue;
121
153
  }
122
154
  // ── Per-decision inline action ─────────────────────────
155
+ // Default review (unreviewed only from API): Accept / Edit / Reject …
156
+ // `--history`: already-approved rows stay visible with a ✓ badge; keep
157
+ // Edit / Reject / Skip so users can change their mind without repeating Accept.
123
158
  const { action } = await prompts({
124
159
  type: 'select',
125
160
  name: 'action',
126
- message: 'Action:',
161
+ message: isApproved ? 'Action (already approved — edit or reject if needed):' : 'Action:',
127
162
  choices: [
128
- { title: '✔ Accept — looks correct', value: 'accept' },
163
+ ...(!isApproved
164
+ ? [
165
+ { title: '✔ Accept — looks correct', value: 'accept' },
166
+ ]
167
+ : [
168
+ { title: '✓ Already approved (no change)', value: 'noop_approved' },
169
+ ]),
129
170
  { title: '✏️ Edit — fix decision text', value: 'edit' },
130
171
  { title: '❌ Reject — delete this', value: 'reject' },
131
172
  ...(d.conflict_flag
@@ -137,6 +178,10 @@ export async function reviewCommand(opts) {
137
178
  console.log();
138
179
  if (!action || action === 'skip_all')
139
180
  break;
181
+ if (action === 'noop_approved') {
182
+ console.log();
183
+ continue;
184
+ }
140
185
  if (action === 'edit') {
141
186
  await editDecisionInline(d, percUrl, percKey, info.id);
142
187
  }
@@ -146,7 +191,9 @@ export async function reviewCommand(opts) {
146
191
  if (action === 'resolve') {
147
192
  await resolveConflictInline(d, percUrl, percKey, info.id);
148
193
  }
149
- // 'accept' — no action needed, move to next
194
+ if (action === 'accept') {
195
+ await approveDecisionInline(d, percUrl, percKey);
196
+ }
150
197
  }
151
198
  console.log(chalk.green(' ✓ Review complete\n'));
152
199
  }
@@ -223,6 +270,64 @@ async function editDecisionInline(d, percUrl, percKey, projectId) {
223
270
  spinner.fail('Could not reach Perception API');
224
271
  }
225
272
  }
273
+ // ── Inline: approve (mark as reviewed) a single decision ──────
274
+ async function approveDecisionInline(d, percUrl, percKey) {
275
+ const spinner = ora('Recording approval...').start();
276
+ try {
277
+ const res = await fetch(`${percUrl}/corrections`, {
278
+ method: 'POST',
279
+ headers: {
280
+ 'Content-Type': 'application/json',
281
+ ...(percKey ? { 'Authorization': `Bearer ${percKey}` } : {}),
282
+ },
283
+ body: JSON.stringify({
284
+ decision_id: d.id,
285
+ approve: true,
286
+ source: 'user_correction',
287
+ }),
288
+ });
289
+ res.ok
290
+ ? spinner.succeed(chalk.green('✔ Approved — won\'t show in default review until edited'))
291
+ : spinner.fail(chalk.yellow(`Could not record approval (${res.status}) — decision will reappear.`));
292
+ }
293
+ catch {
294
+ spinner.fail(chalk.yellow('Could not reach Perception API — approval not recorded; decision will reappear.'));
295
+ }
296
+ }
297
+ async function approveManyDecisionsInline(decisions, percUrl, percKey) {
298
+ const spinner = ora(`Recording approvals for ${decisions.length} decision${decisions.length === 1 ? '' : 's'}...`).start();
299
+ let approvedCount = 0;
300
+ for (const d of decisions) {
301
+ try {
302
+ const res = await fetch(`${percUrl}/corrections`, {
303
+ method: 'POST',
304
+ headers: {
305
+ 'Content-Type': 'application/json',
306
+ ...(percKey ? { 'Authorization': `Bearer ${percKey}` } : {}),
307
+ },
308
+ body: JSON.stringify({
309
+ decision_id: d.id,
310
+ approve: true,
311
+ source: 'user_correction',
312
+ }),
313
+ });
314
+ if (res.ok)
315
+ approvedCount++;
316
+ }
317
+ catch {
318
+ // Continue best-effort and report final count.
319
+ }
320
+ }
321
+ if (approvedCount === decisions.length) {
322
+ spinner.succeed(chalk.green(`✔ Approved ${approvedCount} decision${approvedCount === 1 ? '' : 's'}`));
323
+ return;
324
+ }
325
+ if (approvedCount === 0) {
326
+ spinner.fail(chalk.yellow('Could not record approvals — no decisions were approved'));
327
+ return;
328
+ }
329
+ spinner.warn(chalk.yellow(`Partially approved ${approvedCount}/${decisions.length}. Re-run review to approve remaining decisions.`));
330
+ }
226
331
  // ── Inline: reject (invalidate) a single decision ─────────────
227
332
  async function rejectDecisionInline(d, percUrl, percKey) {
228
333
  const { confirm } = await prompts({
@@ -283,6 +388,7 @@ async function resolveConflictInline(d, percUrl, percKey, projectId) {
283
388
  body: JSON.stringify({
284
389
  decision_id: d.id,
285
390
  invalidate: resolution === 'invalidate',
391
+ resolved_conflict_keep: resolution === 'keep',
286
392
  source: 'user_correction',
287
393
  }),
288
394
  });
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,9 +18,10 @@ import { initProjectCommand } from './commands/init-project.js';
18
18
  import { statusCommand, ruleCommand, logoutCommand } from './commands/status.js';
19
19
  import { reviewCommand } from './commands/review.js';
20
20
  import { injectCommand } from './commands/inject.js';
21
+ import { exportMemoryCommand } from './commands/export-memory.js';
21
22
  import { explainCommand } from './commands/explain.js';
22
23
  import { projectsListCommand, projectsMergeCommand } from './commands/projects.js';
23
- const VERSION = '0.2.0';
24
+ const VERSION = '0.2.1';
24
25
  program
25
26
  .name('robrain')
26
27
  .description('Institutional memory for AI coding agents — by Rory Plans')
@@ -32,12 +33,14 @@ program
32
33
  .option('-s, --session <id>', 'Review a specific session ID (default: last session)')
33
34
  .option('-a, --all', 'Show all active decisions, not just the last session')
34
35
  .option('--history', 'Show full lifecycle including superseded decisions')
36
+ .option('--approve-all', 'Bulk-approve every reviewable decision in the current result set')
35
37
  .option('-l, --limit <n>', 'Max decisions to show (default: 20)', parseInt)
36
38
  .action(async (opts) => {
37
39
  await reviewCommand({
38
40
  session: opts.session ?? 'last',
39
41
  all: opts.all,
40
42
  history: opts.history,
43
+ approveAll: opts.approveAll,
41
44
  limit: opts.limit,
42
45
  });
43
46
  });
@@ -62,6 +65,16 @@ program
62
65
  .action(async (opts) => {
63
66
  await injectCommand(opts);
64
67
  });
68
+ // ── export-memory ─────────────────────────────────────────────
69
+ program
70
+ .command('export-memory')
71
+ .description('Project approved decisions into Claude Code\'s auto-memory directory (no paste needed)')
72
+ .option('--dry-run', 'Preview what would be written without touching disk')
73
+ .option('--include-unreviewed', 'Also export decisions that haven\'t been approved (not recommended)')
74
+ .option('--to <dir>', 'Write to a custom memory dir (default: ~/.claude/projects/<slug>/memory)')
75
+ .action(async (opts) => {
76
+ await exportMemoryCommand(opts);
77
+ });
65
78
  // ── install ───────────────────────────────────────────────────
66
79
  program
67
80
  .command('install')
@@ -149,6 +162,7 @@ program.addHelpText('afterAll', `
149
162
  npx robrain init-project Warm-start memory from codebase
150
163
  npx robrain review Review captured decisions
151
164
  npx robrain inject --query "..." --copy Get context to paste into Claude Code
165
+ npx robrain export-memory Project approved decisions into Claude Code auto-memory
152
166
  npx robrain explain src/store/cart.ts Why does this file look this way?
153
167
 
154
168
  Cloud quick start (automatic injection, no paste):
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,eAAe;AACf,gEAAgE;AAChE,4BAA4B;AAC5B,kCAAkC;AAClC,EAAE;AACF,YAAY;AACZ,qEAAqE;AACrE,4DAA4D;AAC5D,qDAAqD;AACrD,+DAA+D;AAC/D,2CAA2C;AAC3C,gEAAgE;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAkC,mBAAmB,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAU,uBAAuB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAO,4BAA4B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAY,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAY,sBAAsB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAW,uBAAuB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElF,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,oBAAoB,EAAE,sDAAsD,CAAC;KACpF,MAAM,CAAC,WAAW,EAAW,sDAAsD,CAAC;KACpF,MAAM,CAAC,WAAW,EAAW,oDAAoD,CAAC;KAClF,MAAM,CAAC,iBAAiB,EAAK,qCAAqC,EAAE,QAAQ,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,IAA4E,EAAE,EAAE;IAC7F,MAAM,aAAa,CAAC;QAClB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,MAAM;QAC/B,GAAG,EAAM,IAAI,CAAC,GAAG;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAI,IAAI,CAAC,KAAK;KACpB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAG,+CAA+C,CAAC;KACrE,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAuC,EAAE,EAAE;IACtE,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,MAAM,CAAC,oBAAoB,EAAI,8CAA8C,CAAC;KAC9E,MAAM,CAAC,qBAAqB,EAAG,oEAAoE,CAAC;KACpG,MAAM,CAAC,YAAY,EAAY,mCAAmC,CAAC;KACnE,MAAM,CAAC,iBAAiB,EAAO,uCAAuC,EAAE,QAAQ,CAAC;KACjF,MAAM,CAAC,WAAW,EAAa,qDAAqD,CAAC;KACrF,MAAM,CAAC,KAAK,EAAE,IAAuF,EAAE,EAAE;IACxG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,qBAAqB,EAAO,kDAAkD,CAAC;KACtF,MAAM,CAAC,uBAAuB,EAAK,+CAA+C,CAAC;KACnF,MAAM,CAAC,eAAe,EAAa,yCAAyC,CAAC;KAC7E,MAAM,CAAC,wBAAwB,EAAI,sEAAsE,CAAC;KAC1G,MAAM,CACL,oBAAoB,EACpB,oGAAoG,CACrG;KACA,MAAM,CAAC,qBAAqB,EAAE,gEAAgE,CAAC;KAC/F,MAAM,CAAC,KAAK,EAAE,IAOd,EAAE,EAAE;IACH,MAAM,cAAc,CAAC;QACnB,KAAK,EAAa,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QACtD,MAAM,EAAY,IAAI,CAAC,MAAM;QAC7B,UAAU,EAAQ,IAAI,CAAC,UAAU;QACjC,aAAa,EAAK,IAAI,CAAC,aAAa;QACpC,QAAQ,EAAU,IAAI,CAAC,QAAQ;QAC/B,eAAe,EAAG,IAAI,CAAC,eAAe;KACvC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAA4B,EAAE,EAAE;IAC7C,MAAM,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;AACzD,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,MAAM,WAAW,GAAG,OAAO;KACxB,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qFAAqF,CAAC,CAAA;AAErG,WAAW;KACR,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,mBAAmB,EAAE,CAAA;AAC7B,CAAC,CAAC,CAAA;AAEJ,WAAW;KACR,OAAO,CAAC,yBAAyB,CAAC;KAClC,WAAW,CAAC,mGAAmG,CAAC;KAChH,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;IAC7C,MAAM,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,aAAa,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAK,kCAAkC,CAAC;KAC7D,MAAM,CAAC,QAAQ,EAAW,oCAAoC,CAAC;KAC/D,MAAM,CAAC,eAAe,EAAI,qBAAqB,CAAC;KAChD,MAAM,CAAC,eAAe,EAAI,+EAA+E,CAAC;KAC1G,MAAM,CAAC,KAAK,EAAE,IAAsE,EAAE,EAAE;IACvF,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ,iEAAiE;AAEjE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,aAAa,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA;AAEJ,kEAAkE;AAElE,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;aACpB,OAAO;;CAEnB,CAAC,CAAA;AAEF,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAA2B,CAAA;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAC1D,UAAU,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE;;;;;;;;;;;;;CAa/B,CAAC,CAAA;AAEF,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Slugify an absolute cwd the same way Claude Code does. */
2
+ export declare function slugifyCwd(cwd: string): string;
3
+ /** Default auto-memory directory for a given project cwd. */
4
+ export declare function defaultMemoryDir(cwd: string): string;
5
+ /** Path to the always-loaded index file inside the memory dir. */
6
+ export declare function memoryIndexPath(memoryDir: string): string;
7
+ //# sourceMappingURL=memory-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-paths.d.ts","sourceRoot":"","sources":["../../src/lib/memory-paths.ts"],"names":[],"mappings":"AAYA,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,23 @@
1
+ // src/lib/memory-paths.ts
2
+ // ─────────────────────────────────────────────────────────────
3
+ // Resolve Claude Code's auto-memory directory for the current
4
+ // project. Auto-memory keys by a path-derived slug:
5
+ // /Users/foo/bar → -Users-foo-bar
6
+ // and lives at:
7
+ // ~/.claude/projects/<slug>/memory/
8
+ // ─────────────────────────────────────────────────────────────
9
+ import { homedir } from 'os';
10
+ import { join } from 'path';
11
+ /** Slugify an absolute cwd the same way Claude Code does. */
12
+ export function slugifyCwd(cwd) {
13
+ return cwd.replace(/\//g, '-');
14
+ }
15
+ /** Default auto-memory directory for a given project cwd. */
16
+ export function defaultMemoryDir(cwd) {
17
+ return join(homedir(), '.claude', 'projects', slugifyCwd(cwd), 'memory');
18
+ }
19
+ /** Path to the always-loaded index file inside the memory dir. */
20
+ export function memoryIndexPath(memoryDir) {
21
+ return join(memoryDir, 'MEMORY.md');
22
+ }
23
+ //# sourceMappingURL=memory-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-paths.js","sourceRoot":"","sources":["../../src/lib/memory-paths.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,gEAAgE;AAChE,8DAA8D;AAC9D,oDAAoD;AACpD,sCAAsC;AACtC,gBAAgB;AAChB,sCAAsC;AACtC,gEAAgE;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAS,MAAM,CAAA;AAE9B,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC1E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;AACrC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robrain",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "RoBrain CLI for installation, setup, and memory workflows",
6
6
  "license": "Apache-2.0",