myuru 2.0.0-alpha.3 → 2.0.0-alpha.5
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/dist/cli/commands/chat.d.ts +9 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +343 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +42 -9
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.js +1 -18
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.js +12 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/resolve-model.d.ts +12 -0
- package/dist/cli/resolve-model.d.ts.map +1 -0
- package/dist/cli/resolve-model.js +40 -0
- package/dist/cli/resolve-model.js.map +1 -0
- package/dist/core/agent.d.ts +11 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +98 -0
- package/dist/core/agent.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/edit-file.d.ts +2 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +26 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +25 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-directory.d.ts +2 -0
- package/dist/tools/list-directory.d.ts.map +1 -0
- package/dist/tools/list-directory.js +18 -0
- package/dist/tools/list-directory.js.map +1 -0
- package/dist/tools/read-file.d.ts +2 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +23 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/run-command.d.ts +2 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +34 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/search-content.d.ts +2 -0
- package/dist/tools/search-content.d.ts.map +1 -0
- package/dist/tools/search-content.js +57 -0
- package/dist/tools/search-content.js.map +1 -0
- package/dist/tools/search-files.d.ts +2 -0
- package/dist/tools/search-files.d.ts.map +1 -0
- package/dist/tools/search-files.js +42 -0
- package/dist/tools/search-files.js.map +1 -0
- package/dist/tools/write-file.d.ts +2 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +18 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +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;AAgIF,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoQ/D"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import * as readline from 'node:readline';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { Agent } from '../../core/agent.js';
|
|
5
|
+
import { builtinTools } from '../../tools/index.js';
|
|
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
|
+
// ── System prompt builder ──
|
|
67
|
+
function buildSystemPrompt(cwd, fileTree, projectContext, lastSession) {
|
|
68
|
+
const parts = [
|
|
69
|
+
'You are a helpful coding assistant with full access to the file system and shell.',
|
|
70
|
+
'You can read, write, and edit files, search for files and content, and run shell commands.',
|
|
71
|
+
'Always use your tools to accomplish tasks. Do not ask the user to do things you can do yourself.',
|
|
72
|
+
'When editing files, read them first to understand the current content.',
|
|
73
|
+
'Be concise in your responses. Show what you did, not lengthy explanations of what you plan to do.',
|
|
74
|
+
];
|
|
75
|
+
if (projectContext) {
|
|
76
|
+
parts.push('', '--- Project Instructions ---', projectContext);
|
|
77
|
+
}
|
|
78
|
+
if (lastSession) {
|
|
79
|
+
parts.push('', '--- Previous Session ---', lastSession);
|
|
80
|
+
}
|
|
81
|
+
parts.push('', `Working directory: ${cwd}`, '', 'Project files:', fileTree);
|
|
82
|
+
return parts.join('\n');
|
|
83
|
+
}
|
|
84
|
+
// ── Directory scanner ──
|
|
85
|
+
function scanDirectory(dir, maxDepth, depth = 0, prefix = '') {
|
|
86
|
+
if (depth >= maxDepth)
|
|
87
|
+
return '';
|
|
88
|
+
const lines = [];
|
|
89
|
+
try {
|
|
90
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true })
|
|
91
|
+
.filter(e => !e.name.startsWith('.') && e.name !== 'node_modules' && e.name !== 'dist')
|
|
92
|
+
.sort((a, b) => {
|
|
93
|
+
if (a.isDirectory() !== b.isDirectory())
|
|
94
|
+
return a.isDirectory() ? -1 : 1;
|
|
95
|
+
return a.name.localeCompare(b.name);
|
|
96
|
+
});
|
|
97
|
+
for (const entry of entries.slice(0, 30)) {
|
|
98
|
+
const name = entry.isDirectory() ? `${entry.name}/` : entry.name;
|
|
99
|
+
lines.push(`${prefix}${name}`);
|
|
100
|
+
if (entry.isDirectory()) {
|
|
101
|
+
const sub = scanDirectory(path.join(dir, entry.name), maxDepth, depth + 1, prefix + ' ');
|
|
102
|
+
if (sub)
|
|
103
|
+
lines.push(sub);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch { /* permission errors */ }
|
|
108
|
+
return lines.filter(Boolean).join('\n');
|
|
109
|
+
}
|
|
110
|
+
// ── Session summary ──
|
|
111
|
+
function printSessionSummary(usage) {
|
|
112
|
+
console.log(`\n\x1b[90m Session: ${usage.totalTokens} tokens | ${usage.stepCount} steps | $${usage.estimatedCostUsd.toFixed(4)}\x1b[0m\n`);
|
|
113
|
+
}
|
|
114
|
+
// ── Main command ──
|
|
115
|
+
export async function chatCommand(opts) {
|
|
116
|
+
const available = detectProviders();
|
|
117
|
+
if (available.length === 0 && !opts.provider) {
|
|
118
|
+
console.error('\n No API key found. Set one of:');
|
|
119
|
+
console.error(' ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY\n');
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const provider = opts.provider ?? available[0].name;
|
|
123
|
+
const modelName = opts.model ?? defaultModelName(provider);
|
|
124
|
+
const model = await resolveModel(provider, opts.model);
|
|
125
|
+
const maxSteps = parseInt(opts.maxSteps ?? '25', 10);
|
|
126
|
+
const budget = opts.budget ? parseFloat(opts.budget) : undefined;
|
|
127
|
+
const cwd = process.cwd();
|
|
128
|
+
const fileTree = scanDirectory(cwd, 2);
|
|
129
|
+
const projectCtx = findProjectContext(cwd);
|
|
130
|
+
const lastSession = loadLastSession(cwd);
|
|
131
|
+
const systemPrompt = buildSystemPrompt(cwd, fileTree, projectCtx?.content, lastSession);
|
|
132
|
+
const agent = Agent.create({
|
|
133
|
+
name: 'myuru',
|
|
134
|
+
model,
|
|
135
|
+
instructions: systemPrompt,
|
|
136
|
+
tools: builtinTools,
|
|
137
|
+
maxSteps,
|
|
138
|
+
budgetPerRun: budget,
|
|
139
|
+
});
|
|
140
|
+
// ── Banner ──
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(' \x1b[36mmyuru\x1b[0m interactive agent');
|
|
143
|
+
console.log(` Provider: ${provider} | Model: ${modelName}`);
|
|
144
|
+
if (available.length > 1) {
|
|
145
|
+
console.log(` Available: ${available.map(p => p.name).join(', ')}`);
|
|
146
|
+
}
|
|
147
|
+
console.log(` Directory: ${cwd}`);
|
|
148
|
+
if (projectCtx) {
|
|
149
|
+
console.log(` \x1b[32mLoaded .myuru.md\x1b[0m (${projectCtx.files.length} file${projectCtx.files.length > 1 ? 's' : ''})`);
|
|
150
|
+
}
|
|
151
|
+
if (lastSession) {
|
|
152
|
+
console.log(' \x1b[32mLoaded last session context\x1b[0m');
|
|
153
|
+
}
|
|
154
|
+
console.log(` Tools: ${builtinTools.map(t => t.toolName).join(', ')}`);
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(' \x1b[90mTry: "list all TODO comments in this project"');
|
|
157
|
+
console.log(' "explain what src/index.ts does"');
|
|
158
|
+
console.log(' "find and fix any TypeScript errors"');
|
|
159
|
+
console.log(' Commands: /help /clear /compact /cost /exit\x1b[0m');
|
|
160
|
+
console.log('');
|
|
161
|
+
// ── Session state ──
|
|
162
|
+
const messages = [];
|
|
163
|
+
const sessionUsage = {
|
|
164
|
+
totalInputTokens: 0,
|
|
165
|
+
totalOutputTokens: 0,
|
|
166
|
+
totalTokens: 0,
|
|
167
|
+
estimatedCostUsd: 0,
|
|
168
|
+
stepCount: 0,
|
|
169
|
+
};
|
|
170
|
+
// Streaming state for Ctrl+C cancellation
|
|
171
|
+
let currentAbort = null;
|
|
172
|
+
let isStreaming = false;
|
|
173
|
+
// ── REPL ──
|
|
174
|
+
const rl = readline.createInterface({
|
|
175
|
+
input: process.stdin,
|
|
176
|
+
output: process.stdout,
|
|
177
|
+
prompt: '\x1b[36m> \x1b[0m',
|
|
178
|
+
});
|
|
179
|
+
// Ctrl+C: cancel streaming if active, otherwise exit
|
|
180
|
+
process.on('SIGINT', () => {
|
|
181
|
+
if (isStreaming && currentAbort) {
|
|
182
|
+
currentAbort.abort();
|
|
183
|
+
currentAbort = null;
|
|
184
|
+
isStreaming = false;
|
|
185
|
+
process.stdout.write('\n\x1b[33m (cancelled)\x1b[0m\n\n');
|
|
186
|
+
rl.prompt();
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
saveLastSession(cwd, messages, sessionUsage);
|
|
190
|
+
printSessionSummary(sessionUsage);
|
|
191
|
+
process.exit(0);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
rl.prompt();
|
|
195
|
+
rl.on('line', async (line) => {
|
|
196
|
+
const input = line.trim();
|
|
197
|
+
if (!input) {
|
|
198
|
+
rl.prompt();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// ── Slash commands ──
|
|
202
|
+
if (input.startsWith('/')) {
|
|
203
|
+
const cmd = input.toLowerCase();
|
|
204
|
+
if (cmd === '/exit' || cmd === '/quit') {
|
|
205
|
+
saveLastSession(cwd, messages, sessionUsage);
|
|
206
|
+
printSessionSummary(sessionUsage);
|
|
207
|
+
rl.close();
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (cmd === '/cost') {
|
|
211
|
+
printSessionSummary(sessionUsage);
|
|
212
|
+
rl.prompt();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (cmd === '/models') {
|
|
216
|
+
console.log(`\n Current: ${provider}/${modelName}`);
|
|
217
|
+
console.log(` Available providers: ${available.map(p => p.name).join(', ')}\n`);
|
|
218
|
+
rl.prompt();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (cmd === '/clear') {
|
|
222
|
+
messages.length = 0;
|
|
223
|
+
console.log('\n \x1b[33mConversation cleared.\x1b[0m\n');
|
|
224
|
+
rl.prompt();
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (cmd === '/help') {
|
|
228
|
+
console.log('');
|
|
229
|
+
console.log(' \x1b[36mCommands:\x1b[0m');
|
|
230
|
+
console.log(' /help Show this help');
|
|
231
|
+
console.log(' /clear Clear conversation history');
|
|
232
|
+
console.log(' /compact Summarize conversation to save context');
|
|
233
|
+
console.log(' /cost Show session cost and token usage');
|
|
234
|
+
console.log(' /models Show current model and available providers');
|
|
235
|
+
console.log(' /exit Exit (also: /quit, Ctrl+D)');
|
|
236
|
+
console.log('');
|
|
237
|
+
console.log(' \x1b[36mKeys:\x1b[0m');
|
|
238
|
+
console.log(' Ctrl+C Cancel current response');
|
|
239
|
+
console.log(' Ctrl+D Exit');
|
|
240
|
+
console.log('');
|
|
241
|
+
rl.prompt();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (cmd === '/compact') {
|
|
245
|
+
if (messages.length < 4) {
|
|
246
|
+
console.log('\n \x1b[90mNothing to compact yet.\x1b[0m\n');
|
|
247
|
+
rl.prompt();
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
console.log('\n \x1b[33mCompacting conversation...\x1b[0m');
|
|
251
|
+
try {
|
|
252
|
+
const compactPrompt = 'Summarize our conversation so far in concise bullet points. ' +
|
|
253
|
+
'Include: key topics, files modified, decisions made, and current state. ' +
|
|
254
|
+
'This replaces the conversation history to save context.';
|
|
255
|
+
const prevCount = messages.length;
|
|
256
|
+
const summaryMessages = [
|
|
257
|
+
...messages,
|
|
258
|
+
{ role: 'user', content: compactPrompt },
|
|
259
|
+
];
|
|
260
|
+
const result = await agent.chat(summaryMessages);
|
|
261
|
+
messages.length = 0;
|
|
262
|
+
messages.push({ role: 'user', content: 'Summary of our conversation so far:' }, { role: 'assistant', content: result.text });
|
|
263
|
+
if (result.usage) {
|
|
264
|
+
sessionUsage.totalInputTokens += result.usage.totalInputTokens;
|
|
265
|
+
sessionUsage.totalOutputTokens += result.usage.totalOutputTokens;
|
|
266
|
+
sessionUsage.totalTokens += result.usage.totalTokens;
|
|
267
|
+
sessionUsage.estimatedCostUsd += result.usage.estimatedCostUsd;
|
|
268
|
+
sessionUsage.stepCount += result.usage.stepCount;
|
|
269
|
+
}
|
|
270
|
+
console.log(` \x1b[32mCompacted: ${prevCount} messages → 2\x1b[0m\n`);
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
console.error(`\n\x1b[31m Compact failed: ${err.message}\x1b[0m\n`);
|
|
274
|
+
}
|
|
275
|
+
rl.prompt();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
console.log(`\n \x1b[33mUnknown command: ${input}. Type /help for commands.\x1b[0m\n`);
|
|
279
|
+
rl.prompt();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// ── User message ──
|
|
283
|
+
messages.push({ role: 'user', content: input });
|
|
284
|
+
try {
|
|
285
|
+
process.stdout.write('\n');
|
|
286
|
+
currentAbort = new AbortController();
|
|
287
|
+
isStreaming = true;
|
|
288
|
+
const stream = agent.chatStream(messages, {
|
|
289
|
+
signal: currentAbort.signal,
|
|
290
|
+
onStep: (step) => {
|
|
291
|
+
if (step.toolCalls?.length) {
|
|
292
|
+
for (const tc of step.toolCalls) {
|
|
293
|
+
process.stdout.write(`\x1b[33m [${tc.name}]\x1b[0m\n`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
let chatResult;
|
|
299
|
+
let next = await stream.next();
|
|
300
|
+
while (!next.done) {
|
|
301
|
+
process.stdout.write(next.value);
|
|
302
|
+
next = await stream.next();
|
|
303
|
+
}
|
|
304
|
+
chatResult = next.value;
|
|
305
|
+
isStreaming = false;
|
|
306
|
+
currentAbort = null;
|
|
307
|
+
if (chatResult?.responseMessages) {
|
|
308
|
+
messages.push(...chatResult.responseMessages);
|
|
309
|
+
}
|
|
310
|
+
if (chatResult?.usage) {
|
|
311
|
+
sessionUsage.totalInputTokens += chatResult.usage.totalInputTokens;
|
|
312
|
+
sessionUsage.totalOutputTokens += chatResult.usage.totalOutputTokens;
|
|
313
|
+
sessionUsage.totalTokens += chatResult.usage.totalTokens;
|
|
314
|
+
sessionUsage.estimatedCostUsd += chatResult.usage.estimatedCostUsd;
|
|
315
|
+
sessionUsage.stepCount += chatResult.usage.stepCount;
|
|
316
|
+
}
|
|
317
|
+
const tokens = chatResult?.usage.totalTokens ?? 0;
|
|
318
|
+
const cost = (chatResult?.usage.estimatedCostUsd ?? 0).toFixed(4);
|
|
319
|
+
const session = sessionUsage.estimatedCostUsd.toFixed(4);
|
|
320
|
+
process.stdout.write(`\n\n\x1b[90m ${tokens} tokens | $${cost} | session: $${session}\x1b[0m\n\n`);
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
isStreaming = false;
|
|
324
|
+
currentAbort = null;
|
|
325
|
+
if (err.name === 'AbortError') {
|
|
326
|
+
// Ctrl+C cancelled — remove the unanswered user message
|
|
327
|
+
if (messages.length > 0 && messages[messages.length - 1].role === 'user') {
|
|
328
|
+
messages.pop();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.error(`\n\x1b[31m Error: ${err.message}\x1b[0m\n`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
rl.prompt();
|
|
336
|
+
});
|
|
337
|
+
rl.on('close', () => {
|
|
338
|
+
saveLastSession(cwd, messages, sessionUsage);
|
|
339
|
+
printSessionSummary(sessionUsage);
|
|
340
|
+
process.exit(0);
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,
|
|
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
|
|
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.
|
|
37
|
-
console.log(' 2.
|
|
38
|
-
console.log(' 3. Run: myuru
|
|
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,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Agent } from '../../core/agent.js';
|
|
2
|
+
import { resolveModel } from '../resolve-model.js';
|
|
2
3
|
export async function runCommand(opts) {
|
|
3
4
|
const maxSteps = parseInt(opts.maxSteps, 10) || 10;
|
|
4
5
|
const budget = opts.budget ? parseFloat(opts.budget) : undefined;
|
|
@@ -48,22 +49,4 @@ export async function runCommand(opts) {
|
|
|
48
49
|
process.exit(1);
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
async function resolveModel(provider, modelName) {
|
|
52
|
-
switch (provider) {
|
|
53
|
-
case 'anthropic': {
|
|
54
|
-
const { anthropic } = await import('@ai-sdk/anthropic');
|
|
55
|
-
return anthropic(modelName ?? 'claude-sonnet-4-5');
|
|
56
|
-
}
|
|
57
|
-
case 'openai': {
|
|
58
|
-
const { openai } = await import('@ai-sdk/openai');
|
|
59
|
-
return openai(modelName ?? 'gpt-4o');
|
|
60
|
-
}
|
|
61
|
-
case 'google': {
|
|
62
|
-
const { google } = await import('@ai-sdk/google');
|
|
63
|
-
return google(modelName ?? 'gemini-2.0-flash');
|
|
64
|
-
}
|
|
65
|
-
default:
|
|
66
|
-
throw new Error(`Unknown provider: ${provider}. Use: anthropic, openai, google`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
52
|
//# sourceMappingURL=run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,11 +2,20 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { initCommand } from './commands/init.js';
|
|
4
4
|
import { runCommand } from './commands/run.js';
|
|
5
|
+
import { chatCommand } from './commands/chat.js';
|
|
5
6
|
const program = new Command();
|
|
6
7
|
program
|
|
7
8
|
.name('myuru')
|
|
8
|
-
.description('
|
|
9
|
-
.version('2.0.0-alpha.
|
|
9
|
+
.description('AI agent with file system and shell access. Works with any provider.')
|
|
10
|
+
.version('2.0.0-alpha.5');
|
|
11
|
+
program
|
|
12
|
+
.command('chat', { isDefault: true })
|
|
13
|
+
.description('Start an interactive chat session (default)')
|
|
14
|
+
.option('-p, --provider <provider>', 'Provider (anthropic, openai, google)')
|
|
15
|
+
.option('-m, --model <model>', 'Model to use (e.g. claude-sonnet-4-5)')
|
|
16
|
+
.option('--max-steps <n>', 'Maximum agent steps per turn', '25')
|
|
17
|
+
.option('--budget <usd>', 'Max budget per turn in USD')
|
|
18
|
+
.action(chatCommand);
|
|
10
19
|
program
|
|
11
20
|
.command('init')
|
|
12
21
|
.description('Initialize a new MyUru project')
|
|
@@ -14,7 +23,7 @@ program
|
|
|
14
23
|
.action(initCommand);
|
|
15
24
|
program
|
|
16
25
|
.command('run')
|
|
17
|
-
.description('Run
|
|
26
|
+
.description('Run a one-shot agent task')
|
|
18
27
|
.requiredOption('-t, --task <task>', 'Task description')
|
|
19
28
|
.option('-c, --config <path>', 'Config file path', 'myuru.config.ts')
|
|
20
29
|
.option('-m, --model <model>', 'Model to use (e.g. claude-sonnet-4-5)')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,sEAAsE,CAAC;KACnF,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpC,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,2BAA2B,EAAE,sCAAsC,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,IAAI,CAAC;KAC/D,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;KACtD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,CAAC;KACnD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,2BAA2B,CAAC;KACxC,cAAc,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;KACvD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,2BAA2B,EAAE,sCAAsC,EAAE,WAAW,CAAC;KACxF,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,IAAI,CAAC;KACtD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;KAC7C,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;KAC1C,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;KAC5D,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Model } from '../types/index.js';
|
|
2
|
+
export type ProviderInfo = {
|
|
3
|
+
name: string;
|
|
4
|
+
envVar: string;
|
|
5
|
+
};
|
|
6
|
+
/** Detect all available providers from environment variables */
|
|
7
|
+
export declare function detectProviders(): ProviderInfo[];
|
|
8
|
+
/** Resolve a model from provider name + optional model ID */
|
|
9
|
+
export declare function resolveModel(provider: string, modelName?: string): Promise<Model>;
|
|
10
|
+
/** Get the default model name for a provider */
|
|
11
|
+
export declare function defaultModelName(provider: string): string;
|
|
12
|
+
//# sourceMappingURL=resolve-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-model.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAMhD;AAED,6DAA6D;AAC7D,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAiBvF;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Detect all available providers from environment variables */
|
|
2
|
+
export function detectProviders() {
|
|
3
|
+
const providers = [];
|
|
4
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
5
|
+
providers.push({ name: 'anthropic', envVar: 'ANTHROPIC_API_KEY' });
|
|
6
|
+
if (process.env.OPENAI_API_KEY)
|
|
7
|
+
providers.push({ name: 'openai', envVar: 'OPENAI_API_KEY' });
|
|
8
|
+
if (process.env.GOOGLE_API_KEY || process.env.GOOGLE_GENERATIVE_AI_API_KEY)
|
|
9
|
+
providers.push({ name: 'google', envVar: 'GOOGLE_API_KEY' });
|
|
10
|
+
return providers;
|
|
11
|
+
}
|
|
12
|
+
/** Resolve a model from provider name + optional model ID */
|
|
13
|
+
export async function resolveModel(provider, modelName) {
|
|
14
|
+
switch (provider) {
|
|
15
|
+
case 'anthropic': {
|
|
16
|
+
const { anthropic } = await import('@ai-sdk/anthropic');
|
|
17
|
+
return anthropic(modelName ?? 'claude-sonnet-4-5');
|
|
18
|
+
}
|
|
19
|
+
case 'openai': {
|
|
20
|
+
const { openai } = await import('@ai-sdk/openai');
|
|
21
|
+
return openai(modelName ?? 'gpt-4o-mini');
|
|
22
|
+
}
|
|
23
|
+
case 'google': {
|
|
24
|
+
const { google } = await import('@ai-sdk/google');
|
|
25
|
+
return google(modelName ?? 'gemini-2.0-flash');
|
|
26
|
+
}
|
|
27
|
+
default:
|
|
28
|
+
throw new Error(`Unknown provider: ${provider}. Use: anthropic, openai, google`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Get the default model name for a provider */
|
|
32
|
+
export function defaultModelName(provider) {
|
|
33
|
+
switch (provider) {
|
|
34
|
+
case 'anthropic': return 'claude-sonnet-4-5';
|
|
35
|
+
case 'openai': return 'gpt-4o-mini';
|
|
36
|
+
case 'google': return 'gemini-2.0-flash';
|
|
37
|
+
default: return 'unknown';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=resolve-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-model.js","sourceRoot":"","sources":["../../src/cli/resolve-model.ts"],"names":[],"mappings":"AAOA,gEAAgE;AAChE,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzI,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,SAAkB;IACrE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACxD,OAAO,SAAS,CAAC,SAAS,IAAI,mBAAmB,CAAqB,CAAC;QACzE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC,SAAS,IAAI,aAAa,CAAqB,CAAC;QAChE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAqB,CAAC;QACrE,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,kCAAkC,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,mBAAmB,CAAC;QAC7C,KAAK,QAAQ,CAAC,CAAC,OAAO,aAAa,CAAC;QACpC,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC;QACzC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC"}
|