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.
Files changed (58) hide show
  1. package/dist/cli/commands/chat.d.ts +9 -0
  2. package/dist/cli/commands/chat.d.ts.map +1 -0
  3. package/dist/cli/commands/chat.js +343 -0
  4. package/dist/cli/commands/chat.js.map +1 -0
  5. package/dist/cli/commands/init.d.ts.map +1 -1
  6. package/dist/cli/commands/init.js +42 -9
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/cli/commands/run.js +1 -18
  9. package/dist/cli/commands/run.js.map +1 -1
  10. package/dist/cli/index.js +12 -3
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/resolve-model.d.ts +12 -0
  13. package/dist/cli/resolve-model.d.ts.map +1 -0
  14. package/dist/cli/resolve-model.js +40 -0
  15. package/dist/cli/resolve-model.js.map +1 -0
  16. package/dist/core/agent.d.ts +11 -1
  17. package/dist/core/agent.d.ts.map +1 -1
  18. package/dist/core/agent.js +98 -0
  19. package/dist/core/agent.js.map +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +3 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/tools/edit-file.d.ts +2 -0
  25. package/dist/tools/edit-file.d.ts.map +1 -0
  26. package/dist/tools/edit-file.js +26 -0
  27. package/dist/tools/edit-file.js.map +1 -0
  28. package/dist/tools/index.d.ts +11 -0
  29. package/dist/tools/index.d.ts.map +1 -0
  30. package/dist/tools/index.js +25 -0
  31. package/dist/tools/index.js.map +1 -0
  32. package/dist/tools/list-directory.d.ts +2 -0
  33. package/dist/tools/list-directory.d.ts.map +1 -0
  34. package/dist/tools/list-directory.js +18 -0
  35. package/dist/tools/list-directory.js.map +1 -0
  36. package/dist/tools/read-file.d.ts +2 -0
  37. package/dist/tools/read-file.d.ts.map +1 -0
  38. package/dist/tools/read-file.js +23 -0
  39. package/dist/tools/read-file.js.map +1 -0
  40. package/dist/tools/run-command.d.ts +2 -0
  41. package/dist/tools/run-command.d.ts.map +1 -0
  42. package/dist/tools/run-command.js +34 -0
  43. package/dist/tools/run-command.js.map +1 -0
  44. package/dist/tools/search-content.d.ts +2 -0
  45. package/dist/tools/search-content.d.ts.map +1 -0
  46. package/dist/tools/search-content.js +57 -0
  47. package/dist/tools/search-content.js.map +1 -0
  48. package/dist/tools/search-files.d.ts +2 -0
  49. package/dist/tools/search-files.d.ts.map +1 -0
  50. package/dist/tools/search-files.js +42 -0
  51. package/dist/tools/search-files.js.map +1 -0
  52. package/dist/tools/write-file.d.ts +2 -0
  53. package/dist/tools/write-file.d.ts.map +1 -0
  54. package/dist/tools/write-file.js +18 -0
  55. package/dist/tools/write-file.js.map +1 -0
  56. package/dist/types/index.d.ts +4 -0
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,9 @@
1
+ type ChatOpts = {
2
+ provider?: string;
3
+ model?: string;
4
+ maxSteps?: string;
5
+ budget?: string;
6
+ };
7
+ export declare function chatCommand(opts: ChatOpts): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=chat.d.ts.map
@@ -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,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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"}
@@ -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":"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"}
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('TypeScript-first multi-agent orchestration framework')
9
- .version('2.0.0-alpha.1');
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 an agent or pipeline')
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)')
@@ -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;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5B,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,0BAA0B,CAAC;KACvC,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"}
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"}