myuru 2.0.0-alpha.4 → 2.0.0-alpha.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+I/D"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAmSF,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAkR/D"}
@@ -4,25 +4,267 @@ import * as path from 'node:path';
4
4
  import { Agent } from '../../core/agent.js';
5
5
  import { builtinTools } from '../../tools/index.js';
6
6
  import { detectProviders, resolveModel, defaultModelName } from '../resolve-model.js';
7
+ // ── .myuru.md project context (like CLAUDE.md, .goosehints) ──
8
+ function findProjectContext(cwd) {
9
+ const found = [];
10
+ let dir = cwd;
11
+ while (true) {
12
+ const candidate = path.join(dir, '.myuru.md');
13
+ if (fs.existsSync(candidate)) {
14
+ try {
15
+ const content = fs.readFileSync(candidate, 'utf-8').trim();
16
+ if (content)
17
+ found.push({ file: candidate, content });
18
+ }
19
+ catch { /* permission errors */ }
20
+ }
21
+ const parent = path.dirname(dir);
22
+ if (parent === dir)
23
+ break;
24
+ dir = parent;
25
+ }
26
+ if (found.length === 0)
27
+ return undefined;
28
+ // Root-first ordering (reverse since we walked cwd → root)
29
+ found.reverse();
30
+ return {
31
+ content: found.map(f => f.content).join('\n\n---\n\n'),
32
+ files: found.map(f => f.file),
33
+ };
34
+ }
35
+ // ── Last session context ──
36
+ function loadLastSession(cwd) {
37
+ const sessionFile = path.join(cwd, '.myuru', 'last-session.md');
38
+ if (!fs.existsSync(sessionFile))
39
+ return undefined;
40
+ try {
41
+ const content = fs.readFileSync(sessionFile, 'utf-8').trim();
42
+ return content || undefined;
43
+ }
44
+ catch {
45
+ return undefined;
46
+ }
47
+ }
48
+ function saveLastSession(cwd, messages, usage) {
49
+ if (messages.length === 0)
50
+ return;
51
+ const dir = path.join(cwd, '.myuru');
52
+ fs.mkdirSync(dir, { recursive: true });
53
+ const userMessages = messages
54
+ .filter(m => m.role === 'user')
55
+ .map(m => typeof m.content === 'string' ? m.content : '');
56
+ const lines = [
57
+ '# Last Session',
58
+ `**Date**: ${new Date().toISOString()}`,
59
+ `**Tokens**: ${usage.totalTokens} | **Cost**: $${usage.estimatedCostUsd.toFixed(4)} | **Steps**: ${usage.stepCount}`,
60
+ '',
61
+ '## Topics Discussed',
62
+ ...userMessages.slice(-10).map((m, i) => `${i + 1}. ${m.length > 120 ? m.slice(0, 120) + '...' : m}`),
63
+ ];
64
+ fs.writeFileSync(path.join(dir, 'last-session.md'), lines.join('\n'), 'utf-8');
65
+ }
66
+ // ── Session memory (structured logs saved at compact time) ──
67
+ function getSessionsDir(cwd) {
68
+ const dir = path.join(cwd, '.myuru', 'sessions');
69
+ fs.mkdirSync(dir, { recursive: true });
70
+ return dir;
71
+ }
72
+ function makeTimestamp() {
73
+ const d = new Date();
74
+ const pad = (n) => n.toString().padStart(2, '0');
75
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}-${pad(d.getHours())}-${pad(d.getMinutes())}`;
76
+ }
77
+ function saveSessionLog(cwd, structuredSummary, msgCount, usage) {
78
+ const sessionsDir = getSessionsDir(cwd);
79
+ const timestamp = makeTimestamp();
80
+ const filename = `${timestamp}.md`;
81
+ const header = [
82
+ `# Session Log — ${new Date().toISOString()}`,
83
+ `**Messages**: ${msgCount} | **Tokens**: ${usage.totalTokens} | **Cost**: $${usage.estimatedCostUsd.toFixed(4)}`,
84
+ '',
85
+ ].join('\n');
86
+ fs.writeFileSync(path.join(sessionsDir, filename), header + structuredSummary, 'utf-8');
87
+ // Update index — one-line summary per compaction for cheap scanning
88
+ updateSessionIndex(cwd, timestamp, msgCount, structuredSummary);
89
+ return filename;
90
+ }
91
+ function updateSessionIndex(cwd, timestamp, msgCount, summary) {
92
+ const indexPath = path.join(getSessionsDir(cwd), 'index.md');
93
+ // Extract first meaningful line from summary as a topic hint
94
+ const topicLine = summary
95
+ .split('\n')
96
+ .find(l => l.startsWith('- ') || (l.length > 5 && !l.startsWith('#') && !l.startsWith('*')));
97
+ const topic = topicLine
98
+ ? topicLine.replace(/^-\s*/, '').slice(0, 80)
99
+ : 'session';
100
+ const entry = `${timestamp} | ${msgCount} msgs | ${topic}\n`;
101
+ // Create or append
102
+ if (fs.existsSync(indexPath)) {
103
+ fs.appendFileSync(indexPath, entry, 'utf-8');
104
+ }
105
+ else {
106
+ fs.writeFileSync(indexPath, '# Session Log Index\n\n' + entry, 'utf-8');
107
+ }
108
+ }
109
+ function loadSessionIndex(cwd) {
110
+ const indexPath = path.join(cwd, '.myuru', 'sessions', 'index.md');
111
+ if (!fs.existsSync(indexPath))
112
+ return undefined;
113
+ try {
114
+ const content = fs.readFileSync(indexPath, 'utf-8').trim();
115
+ return content || undefined;
116
+ }
117
+ catch {
118
+ return undefined;
119
+ }
120
+ }
121
+ // ── Context size estimation ──
122
+ function getContextLimit(modelName) {
123
+ const name = modelName.toLowerCase();
124
+ if (name.includes('claude'))
125
+ return 200000;
126
+ if (name.includes('gpt-4o-mini'))
127
+ return 128000;
128
+ if (name.includes('gpt-4o'))
129
+ return 128000;
130
+ if (name.includes('gpt-4'))
131
+ return 128000;
132
+ if (name.includes('gemini'))
133
+ return 1000000;
134
+ return 128000;
135
+ }
136
+ function estimateContextTokens(messages, systemPromptLength) {
137
+ let totalChars = systemPromptLength;
138
+ for (const msg of messages) {
139
+ const m = msg;
140
+ if (typeof m.content === 'string') {
141
+ totalChars += m.content.length;
142
+ }
143
+ else if (Array.isArray(m.content)) {
144
+ for (const part of m.content) {
145
+ if (typeof part === 'string')
146
+ totalChars += part.length;
147
+ else if (part && typeof part === 'object' && 'text' in part) {
148
+ totalChars += String(part.text).length;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return Math.ceil(totalChars / 4); // ~4 chars per token rough estimate
154
+ }
155
+ // ── Compact extraction prompt ──
156
+ const EXTRACTION_PROMPT = `Analyze our entire conversation and produce a structured session log. Use this exact format:
157
+
158
+ ## Files Modified
159
+ - path/to/file (what was changed)
160
+
161
+ ## Decisions Made
162
+ - Decision description
163
+
164
+ ## Key Facts Learned
165
+ - Important facts about the project, codebase, or requirements
166
+
167
+ ## Current State
168
+ - What we're currently working on
169
+ - What's been completed
170
+ - What's pending/next
171
+
172
+ Omit any section that has no entries. Be concise — bullet points only, no prose. This log will be saved for future reference and will also replace our conversation to free up context space.`;
173
+ // ── System prompt builder ──
174
+ function buildSystemPrompt(cwd, fileTree, projectContext, lastSession, sessionIndex) {
175
+ const parts = [
176
+ 'You are a helpful coding assistant with full access to the file system and shell.',
177
+ 'You can read, write, and edit files, search for files and content, and run shell commands.',
178
+ 'Always use your tools to accomplish tasks. Do not ask the user to do things you can do yourself.',
179
+ 'When editing files, read them first to understand the current content.',
180
+ 'Be concise in your responses. Show what you did, not lengthy explanations of what you plan to do.',
181
+ ];
182
+ if (projectContext) {
183
+ parts.push('', '--- Project Instructions ---', projectContext);
184
+ }
185
+ if (lastSession) {
186
+ parts.push('', '--- Previous Session ---', lastSession);
187
+ }
188
+ if (sessionIndex) {
189
+ parts.push('', '--- Session Memory ---', 'Previous session logs are saved in .myuru/sessions/. If the user references something', 'you don\'t have context for, use search_content or read_file on .myuru/sessions/ to find it.', 'Session index:', sessionIndex);
190
+ }
191
+ parts.push('', `Working directory: ${cwd}`, '', 'Project files:', fileTree);
192
+ return parts.join('\n');
193
+ }
194
+ // ── Directory scanner ──
195
+ function scanDirectory(dir, maxDepth, depth = 0, prefix = '') {
196
+ if (depth >= maxDepth)
197
+ return '';
198
+ const lines = [];
199
+ try {
200
+ const entries = fs.readdirSync(dir, { withFileTypes: true })
201
+ .filter(e => !e.name.startsWith('.') && e.name !== 'node_modules' && e.name !== 'dist')
202
+ .sort((a, b) => {
203
+ if (a.isDirectory() !== b.isDirectory())
204
+ return a.isDirectory() ? -1 : 1;
205
+ return a.name.localeCompare(b.name);
206
+ });
207
+ for (const entry of entries.slice(0, 30)) {
208
+ const name = entry.isDirectory() ? `${entry.name}/` : entry.name;
209
+ lines.push(`${prefix}${name}`);
210
+ if (entry.isDirectory()) {
211
+ const sub = scanDirectory(path.join(dir, entry.name), maxDepth, depth + 1, prefix + ' ');
212
+ if (sub)
213
+ lines.push(sub);
214
+ }
215
+ }
216
+ }
217
+ catch { /* permission errors */ }
218
+ return lines.filter(Boolean).join('\n');
219
+ }
220
+ // ── Session summary ──
221
+ function printSessionSummary(usage) {
222
+ console.log(`\n\x1b[90m Session: ${usage.totalTokens} tokens | ${usage.stepCount} steps | $${usage.estimatedCostUsd.toFixed(4)}\x1b[0m\n`);
223
+ }
224
+ // ── Compact logic (shared between /compact and auto-compact) ──
225
+ async function performCompact(agent, messages, sessionUsage, cwd) {
226
+ const prevCount = messages.length;
227
+ const summaryMessages = [
228
+ ...messages,
229
+ { role: 'user', content: EXTRACTION_PROMPT },
230
+ ];
231
+ const result = await agent.chat(summaryMessages);
232
+ const structuredSummary = result.text;
233
+ // Save full structured log to .myuru/sessions/
234
+ const filename = saveSessionLog(cwd, structuredSummary, prevCount, sessionUsage);
235
+ // Replace conversation with the compacted summary
236
+ messages.length = 0;
237
+ messages.push({ role: 'user', content: 'Here is a summary of our conversation so far (full log saved to .myuru/sessions/):' }, { role: 'assistant', content: structuredSummary });
238
+ // Track the compact call's own usage
239
+ if (result.usage) {
240
+ sessionUsage.totalInputTokens += result.usage.totalInputTokens;
241
+ sessionUsage.totalOutputTokens += result.usage.totalOutputTokens;
242
+ sessionUsage.totalTokens += result.usage.totalTokens;
243
+ sessionUsage.estimatedCostUsd += result.usage.estimatedCostUsd;
244
+ sessionUsage.stepCount += result.usage.stepCount;
245
+ }
246
+ return { success: true, prevCount, filename };
247
+ }
248
+ // ── Main command ──
7
249
  export async function chatCommand(opts) {
8
- // Detect available providers
9
250
  const available = detectProviders();
10
251
  if (available.length === 0 && !opts.provider) {
11
252
  console.error('\n No API key found. Set one of:');
12
253
  console.error(' ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY\n');
13
254
  process.exit(1);
14
255
  }
15
- // Resolve which provider/model to use
16
256
  const provider = opts.provider ?? available[0].name;
17
257
  const modelName = opts.model ?? defaultModelName(provider);
18
258
  const model = await resolveModel(provider, opts.model);
19
259
  const maxSteps = parseInt(opts.maxSteps ?? '25', 10);
20
260
  const budget = opts.budget ? parseFloat(opts.budget) : undefined;
21
- // Build system prompt with working directory context
22
261
  const cwd = process.cwd();
23
262
  const fileTree = scanDirectory(cwd, 2);
24
- const systemPrompt = buildSystemPrompt(cwd, fileTree);
25
- // Create the agent with built-in tools
263
+ const projectCtx = findProjectContext(cwd);
264
+ const lastSession = loadLastSession(cwd);
265
+ const sessionIndex = loadSessionIndex(cwd);
266
+ const contextLimit = getContextLimit(modelName);
267
+ const systemPrompt = buildSystemPrompt(cwd, fileTree, projectCtx?.content, lastSession, sessionIndex);
26
268
  const agent = Agent.create({
27
269
  name: 'myuru',
28
270
  model,
@@ -31,7 +273,7 @@ export async function chatCommand(opts) {
31
273
  maxSteps,
32
274
  budgetPerRun: budget,
33
275
  });
34
- // Print banner
276
+ // ── Banner ──
35
277
  console.log('');
36
278
  console.log(' \x1b[36mmyuru\x1b[0m interactive agent');
37
279
  console.log(` Provider: ${provider} | Model: ${modelName}`);
@@ -39,9 +281,23 @@ export async function chatCommand(opts) {
39
281
  console.log(` Available: ${available.map(p => p.name).join(', ')}`);
40
282
  }
41
283
  console.log(` Directory: ${cwd}`);
284
+ if (projectCtx) {
285
+ console.log(` \x1b[32mLoaded .myuru.md\x1b[0m (${projectCtx.files.length} file${projectCtx.files.length > 1 ? 's' : ''})`);
286
+ }
287
+ if (lastSession) {
288
+ console.log(' \x1b[32mLoaded last session context\x1b[0m');
289
+ }
290
+ if (sessionIndex) {
291
+ console.log(' \x1b[32mLoaded session memory index\x1b[0m');
292
+ }
42
293
  console.log(` Tools: ${builtinTools.map(t => t.toolName).join(', ')}`);
43
- console.log(' Type /exit to quit, /cost for session totals\n');
44
- // Session state
294
+ console.log('');
295
+ console.log(' \x1b[90mTry: "list all TODO comments in this project"');
296
+ console.log(' "explain what src/index.ts does"');
297
+ console.log(' "find and fix any TypeScript errors"');
298
+ console.log(' Commands: /help /clear /compact /history /cost /exit\x1b[0m');
299
+ console.log('');
300
+ // ── Session state ──
45
301
  const messages = [];
46
302
  const sessionUsage = {
47
303
  totalInputTokens: 0,
@@ -50,42 +306,133 @@ export async function chatCommand(opts) {
50
306
  estimatedCostUsd: 0,
51
307
  stepCount: 0,
52
308
  };
53
- // REPL
309
+ // Streaming state for Ctrl+C cancellation
310
+ let currentAbort = null;
311
+ let isStreaming = false;
312
+ let autoCompactWarned = false;
313
+ // ── REPL ──
54
314
  const rl = readline.createInterface({
55
315
  input: process.stdin,
56
316
  output: process.stdout,
57
317
  prompt: '\x1b[36m> \x1b[0m',
58
318
  });
59
- rl.prompt();
60
- rl.on('line', async (line) => {
61
- const input = line.trim();
62
- if (!input) {
319
+ // Ctrl+C: cancel streaming if active, otherwise exit
320
+ process.on('SIGINT', () => {
321
+ if (isStreaming && currentAbort) {
322
+ currentAbort.abort();
323
+ currentAbort = null;
324
+ isStreaming = false;
325
+ process.stdout.write('\n\x1b[33m (cancelled)\x1b[0m\n\n');
63
326
  rl.prompt();
64
- return;
65
327
  }
66
- // Slash commands
67
- if (input === '/exit' || input === '/quit') {
328
+ else {
329
+ saveLastSession(cwd, messages, sessionUsage);
68
330
  printSessionSummary(sessionUsage);
69
- rl.close();
70
- return;
331
+ process.exit(0);
71
332
  }
72
- if (input === '/cost') {
73
- printSessionSummary(sessionUsage);
333
+ });
334
+ rl.prompt();
335
+ rl.on('line', async (line) => {
336
+ const input = line.trim();
337
+ if (!input) {
74
338
  rl.prompt();
75
339
  return;
76
340
  }
77
- if (input === '/models') {
78
- console.log(`\n Current: ${provider}/${modelName}`);
79
- console.log(` Available providers: ${available.map(p => p.name).join(', ')}\n`);
341
+ // ── Slash commands ──
342
+ if (input.startsWith('/')) {
343
+ const cmd = input.toLowerCase();
344
+ if (cmd === '/exit' || cmd === '/quit') {
345
+ saveLastSession(cwd, messages, sessionUsage);
346
+ printSessionSummary(sessionUsage);
347
+ rl.close();
348
+ return;
349
+ }
350
+ if (cmd === '/cost') {
351
+ const estTokens = estimateContextTokens(messages, systemPrompt.length);
352
+ const pct = Math.round((estTokens / contextLimit) * 100);
353
+ console.log(`\n\x1b[90m Session: ${sessionUsage.totalTokens} tokens | ${sessionUsage.stepCount} steps | $${sessionUsage.estimatedCostUsd.toFixed(4)}`);
354
+ console.log(` Context: ~${estTokens.toLocaleString()} / ${contextLimit.toLocaleString()} tokens (~${pct}%)\x1b[0m\n`);
355
+ rl.prompt();
356
+ return;
357
+ }
358
+ if (cmd === '/models') {
359
+ console.log(`\n Current: ${provider}/${modelName}`);
360
+ console.log(` Available providers: ${available.map(p => p.name).join(', ')}\n`);
361
+ rl.prompt();
362
+ return;
363
+ }
364
+ if (cmd === '/clear') {
365
+ messages.length = 0;
366
+ autoCompactWarned = false;
367
+ console.log('\n \x1b[33mConversation cleared.\x1b[0m\n');
368
+ rl.prompt();
369
+ return;
370
+ }
371
+ if (cmd === '/help') {
372
+ console.log('');
373
+ console.log(' \x1b[36mCommands:\x1b[0m');
374
+ console.log(' /help Show this help');
375
+ console.log(' /clear Clear conversation history');
376
+ console.log(' /compact Save & compress conversation (preserves to .myuru/sessions/)');
377
+ console.log(' /history Show session memory index');
378
+ console.log(' /cost Show session cost, token usage, and context fill');
379
+ console.log(' /models Show current model and available providers');
380
+ console.log(' /exit Exit (also: /quit, Ctrl+D)');
381
+ console.log('');
382
+ console.log(' \x1b[36mKeys:\x1b[0m');
383
+ console.log(' Ctrl+C Cancel current response');
384
+ console.log(' Ctrl+D Exit');
385
+ console.log('');
386
+ console.log(' \x1b[36mMemory:\x1b[0m');
387
+ console.log(' .myuru.md Project context (loaded every session)');
388
+ console.log(' .myuru/last-session.md Auto-saved at exit, loaded at start');
389
+ console.log(' .myuru/sessions/ Structured logs from /compact (searchable)');
390
+ console.log('');
391
+ rl.prompt();
392
+ return;
393
+ }
394
+ if (cmd === '/history') {
395
+ const index = loadSessionIndex(cwd);
396
+ if (!index) {
397
+ console.log('\n \x1b[90mNo session logs yet. Use /compact to save one.\x1b[0m\n');
398
+ }
399
+ else {
400
+ console.log(`\n${index}\n`);
401
+ }
402
+ rl.prompt();
403
+ return;
404
+ }
405
+ if (cmd === '/compact') {
406
+ if (messages.length < 4) {
407
+ console.log('\n \x1b[90mNothing to compact yet.\x1b[0m\n');
408
+ rl.prompt();
409
+ return;
410
+ }
411
+ console.log('\n \x1b[33mCompacting — extracting structured log and saving...\x1b[0m');
412
+ try {
413
+ const result = await performCompact(agent, messages, sessionUsage, cwd);
414
+ autoCompactWarned = false;
415
+ console.log(` \x1b[32mSaved to .myuru/sessions/${result.filename}\x1b[0m`);
416
+ console.log(` \x1b[32mCompacted: ${result.prevCount} messages → 2\x1b[0m\n`);
417
+ }
418
+ catch (err) {
419
+ console.error(`\n\x1b[31m Compact failed: ${err.message}\x1b[0m\n`);
420
+ }
421
+ rl.prompt();
422
+ return;
423
+ }
424
+ console.log(`\n \x1b[33mUnknown command: ${input}. Type /help for commands.\x1b[0m\n`);
80
425
  rl.prompt();
81
426
  return;
82
427
  }
83
- // Add user message to history
428
+ // ── User message ──
84
429
  messages.push({ role: 'user', content: input });
85
- // Stream the response
86
430
  try {
87
431
  process.stdout.write('\n');
432
+ currentAbort = new AbortController();
433
+ isStreaming = true;
88
434
  const stream = agent.chatStream(messages, {
435
+ signal: currentAbort.signal,
89
436
  onStep: (step) => {
90
437
  if (step.toolCalls?.length) {
91
438
  for (const tc of step.toolCalls) {
@@ -94,7 +441,6 @@ export async function chatCommand(opts) {
94
441
  }
95
442
  },
96
443
  });
97
- // Manual loop to capture the generator return value
98
444
  let chatResult;
99
445
  let next = await stream.next();
100
446
  while (!next.done) {
@@ -102,11 +448,11 @@ export async function chatCommand(opts) {
102
448
  next = await stream.next();
103
449
  }
104
450
  chatResult = next.value;
105
- // Append response messages to history
451
+ isStreaming = false;
452
+ currentAbort = null;
106
453
  if (chatResult?.responseMessages) {
107
454
  messages.push(...chatResult.responseMessages);
108
455
  }
109
- // Update session usage
110
456
  if (chatResult?.usage) {
111
457
  sessionUsage.totalInputTokens += chatResult.usage.totalInputTokens;
112
458
  sessionUsage.totalOutputTokens += chatResult.usage.totalOutputTokens;
@@ -114,66 +460,40 @@ export async function chatCommand(opts) {
114
460
  sessionUsage.estimatedCostUsd += chatResult.usage.estimatedCostUsd;
115
461
  sessionUsage.stepCount += chatResult.usage.stepCount;
116
462
  }
117
- // Print cost line
118
463
  const tokens = chatResult?.usage.totalTokens ?? 0;
119
464
  const cost = (chatResult?.usage.estimatedCostUsd ?? 0).toFixed(4);
120
465
  const session = sessionUsage.estimatedCostUsd.toFixed(4);
121
466
  process.stdout.write(`\n\n\x1b[90m ${tokens} tokens | $${cost} | session: $${session}\x1b[0m\n\n`);
467
+ // ── Auto-compact warning ──
468
+ if (!autoCompactWarned) {
469
+ const estTokens = estimateContextTokens(messages, systemPrompt.length);
470
+ const fillPct = estTokens / contextLimit;
471
+ if (fillPct >= 0.75) {
472
+ const pct = Math.round(fillPct * 100);
473
+ console.log(` \x1b[33m⚠ Context is ~${pct}% full (~${estTokens.toLocaleString()} tokens).`);
474
+ console.log(` Run /compact to save and compress. Your session log will be preserved.\x1b[0m\n`);
475
+ autoCompactWarned = true;
476
+ }
477
+ }
122
478
  }
123
479
  catch (err) {
124
- console.error(`\n\x1b[31m Error: ${err.message}\x1b[0m\n`);
480
+ isStreaming = false;
481
+ currentAbort = null;
482
+ if (err.name === 'AbortError') {
483
+ if (messages.length > 0 && messages[messages.length - 1].role === 'user') {
484
+ messages.pop();
485
+ }
486
+ }
487
+ else {
488
+ console.error(`\n\x1b[31m Error: ${err.message}\x1b[0m\n`);
489
+ }
125
490
  }
126
491
  rl.prompt();
127
492
  });
128
493
  rl.on('close', () => {
494
+ saveLastSession(cwd, messages, sessionUsage);
129
495
  printSessionSummary(sessionUsage);
130
496
  process.exit(0);
131
497
  });
132
- process.on('SIGINT', () => {
133
- printSessionSummary(sessionUsage);
134
- process.exit(0);
135
- });
136
- }
137
- function printSessionSummary(usage) {
138
- console.log(`\n\x1b[90m Session: ${usage.totalTokens} tokens | ${usage.stepCount} steps | $${usage.estimatedCostUsd.toFixed(4)}\x1b[0m\n`);
139
- }
140
- function buildSystemPrompt(cwd, fileTree) {
141
- return [
142
- 'You are a helpful coding assistant with full access to the file system and shell.',
143
- 'You can read, write, and edit files, search for files and content, and run shell commands.',
144
- 'Always use your tools to accomplish tasks. Do not ask the user to do things you can do yourself.',
145
- 'When editing files, read them first to understand the current content.',
146
- 'Be concise in your responses. Show what you did, not lengthy explanations of what you plan to do.',
147
- '',
148
- `Working directory: ${cwd}`,
149
- '',
150
- 'Project files:',
151
- fileTree,
152
- ].join('\n');
153
- }
154
- function scanDirectory(dir, maxDepth, depth = 0, prefix = '') {
155
- if (depth >= maxDepth)
156
- return '';
157
- const lines = [];
158
- try {
159
- const entries = fs.readdirSync(dir, { withFileTypes: true })
160
- .filter(e => !e.name.startsWith('.') && e.name !== 'node_modules' && e.name !== 'dist')
161
- .sort((a, b) => {
162
- if (a.isDirectory() !== b.isDirectory())
163
- return a.isDirectory() ? -1 : 1;
164
- return a.name.localeCompare(b.name);
165
- });
166
- for (const entry of entries.slice(0, 30)) {
167
- const name = entry.isDirectory() ? `${entry.name}/` : entry.name;
168
- lines.push(`${prefix}${name}`);
169
- if (entry.isDirectory()) {
170
- const sub = scanDirectory(path.join(dir, entry.name), maxDepth, depth + 1, prefix + ' ');
171
- if (sub)
172
- lines.push(sub);
173
- }
174
- }
175
- }
176
- catch { /* permission errors */ }
177
- return lines.filter(Boolean).join('\n');
178
498
  }
179
499
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CtE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDtE"}
@@ -2,7 +2,20 @@ import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  export async function initCommand(opts) {
4
4
  const dir = path.resolve(opts.dir);
5
- console.log(`\nMyUru v2 — Initializing project in ${dir}\n`);
5
+ console.log(`\nMyUru — Initializing project in ${dir}\n`);
6
+ // Create .myuru.md project context file
7
+ const contextPath = path.join(dir, '.myuru.md');
8
+ if (!fs.existsSync(contextPath)) {
9
+ fs.writeFileSync(contextPath, PROJECT_CONTEXT_TEMPLATE);
10
+ console.log(' Created .myuru.md (project context — loaded every session)');
11
+ }
12
+ else {
13
+ console.log(' .myuru.md already exists, skipping');
14
+ }
15
+ // Create .myuru/ state directory
16
+ const stateDir = path.join(dir, '.myuru');
17
+ fs.mkdirSync(stateDir, { recursive: true });
18
+ console.log(' Created .myuru/ (state directory)');
6
19
  // Create config file
7
20
  const configPath = path.join(dir, 'myuru.config.ts');
8
21
  if (!fs.existsSync(configPath)) {
@@ -19,24 +32,44 @@ export async function initCommand(opts) {
19
32
  fs.writeFileSync(path.join(agentsDir, 'researcher.ts'), AGENT_TEMPLATE);
20
33
  console.log(' Created agents/researcher.ts');
21
34
  }
22
- // Create .myuru directory for state
23
- const stateDir = path.join(dir, '.myuru');
24
- fs.mkdirSync(stateDir, { recursive: true });
25
- console.log(' Created .myuru/ (state directory)');
26
35
  // Add to .gitignore if it exists
27
36
  const gitignorePath = path.join(dir, '.gitignore');
28
37
  if (fs.existsSync(gitignorePath)) {
29
38
  const content = fs.readFileSync(gitignorePath, 'utf-8');
30
- if (!content.includes('.myuru')) {
39
+ if (!content.includes('.myuru/')) {
31
40
  fs.appendFileSync(gitignorePath, '\n# MyUru state\n.myuru/\n');
32
41
  console.log(' Added .myuru/ to .gitignore');
33
42
  }
34
43
  }
35
44
  console.log('\nDone! Next steps:');
36
- console.log(' 1. Set your API key: export ANTHROPIC_API_KEY=sk-ant-...');
37
- console.log(' 2. Edit myuru.config.ts to configure your agents');
38
- console.log(' 3. Run: myuru run --task "Your task here"\n');
45
+ console.log(' 1. Edit .myuru.md to describe your project');
46
+ console.log(' 2. Set your API key: export ANTHROPIC_API_KEY=sk-ant-...');
47
+ console.log(' 3. Run: myuru\n');
39
48
  }
49
+ const PROJECT_CONTEXT_TEMPLATE = `# Project Context
50
+
51
+ <!-- MyUru loads this file into every session automatically. -->
52
+ <!-- Describe your project so the agent understands your codebase. -->
53
+
54
+ ## About This Project
55
+
56
+ <!-- What is this project? What does it do? -->
57
+
58
+ ## Tech Stack
59
+
60
+ <!-- e.g. Next.js 15, Prisma, Tailwind CSS, PostgreSQL -->
61
+
62
+ ## Important Rules
63
+
64
+ <!-- Things the agent should always or never do. Examples: -->
65
+ <!-- - Never modify package.json without asking -->
66
+ <!-- - Use the existing logger in src/lib/logger.ts -->
67
+ <!-- - All API routes go in src/app/api/ -->
68
+
69
+ ## Key Files
70
+
71
+ <!-- Important files the agent should know about -->
72
+ `;
40
73
  const CONFIG_TEMPLATE = `import { type AgentConfig } from 'myuru';
41
74
 
42
75
  // MyUru Configuration
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,IAAI,CAAC,CAAC;IAE7D,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAED,0BAA0B;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,cAAc,CACf,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,iCAAiC;IACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAetB,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ const program = new Command();
7
7
  program
8
8
  .name('myuru')
9
9
  .description('AI agent with file system and shell access. Works with any provider.')
10
- .version('2.0.0-alpha.4');
10
+ .version('2.0.0-alpha.6');
11
11
  program
12
12
  .command('chat', { isDefault: true })
13
13
  .description('Start an interactive chat session (default)')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myuru",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.0-alpha.6",
4
4
  "description": "AI agent for your terminal. Read files, run commands, write code — with any LLM provider. BYO API key.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",