expxagents 0.28.2 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ export declare function cliChatCommand(options: {
2
+ model?: string;
3
+ prompt?: string;
4
+ }): Promise<void>;
@@ -0,0 +1,169 @@
1
+ import readline from 'node:readline';
2
+ import dotenv from 'dotenv';
3
+ import { AgentRunner, SessionManager, SUPPORTED_MODELS, DEFAULT_MODEL } from '@expxagents/agent';
4
+ // Load .env from current working directory
5
+ dotenv.config();
6
+ const COLORS = {
7
+ reset: '\x1b[0m',
8
+ dim: '\x1b[2m',
9
+ green: '\x1b[32m',
10
+ cyan: '\x1b[36m',
11
+ yellow: '\x1b[33m',
12
+ magenta: '\x1b[35m',
13
+ bold: '\x1b[1m',
14
+ };
15
+ function printBanner(model) {
16
+ const modelInfo = SUPPORTED_MODELS.find(m => m.id === model);
17
+ const label = modelInfo?.name ?? model;
18
+ console.log(`\n${COLORS.bold}${COLORS.cyan}ExpxAgents CLI${COLORS.reset} ${COLORS.dim}— powered by OpenRouter${COLORS.reset}`);
19
+ console.log(`${COLORS.dim}Model: ${COLORS.yellow}${label}${COLORS.reset}`);
20
+ console.log(`${COLORS.dim}Working directory: ${process.cwd()}${COLORS.reset}`);
21
+ console.log(`${COLORS.dim}Type ${COLORS.bold}/help${COLORS.reset}${COLORS.dim} for commands, ${COLORS.bold}/quit${COLORS.reset}${COLORS.dim} to exit${COLORS.reset}\n`);
22
+ }
23
+ function printHelp() {
24
+ console.log(`
25
+ ${COLORS.bold}Commands:${COLORS.reset}
26
+ ${COLORS.cyan}/help${COLORS.reset} Show this help
27
+ ${COLORS.cyan}/model <id>${COLORS.reset} Switch model (e.g. /model openai/gpt-4o)
28
+ ${COLORS.cyan}/models${COLORS.reset} List available models
29
+ ${COLORS.cyan}/clear${COLORS.reset} Clear conversation history
30
+ ${COLORS.cyan}/quit${COLORS.reset} Exit
31
+ `);
32
+ }
33
+ export async function cliChatCommand(options) {
34
+ const apiKey = process.env.OPENROUTER_API_KEY;
35
+ if (!apiKey) {
36
+ console.error('OPENROUTER_API_KEY is not set. Get one at https://openrouter.ai/keys');
37
+ console.error('Add it to your .env file or export it: export OPENROUTER_API_KEY=sk-or-...');
38
+ process.exit(1);
39
+ }
40
+ let model = options.model ?? process.env.OPENROUTER_DEFAULT_MODEL ?? DEFAULT_MODEL;
41
+ const sessionManager = new SessionManager();
42
+ const sessionId = `cli-${Date.now()}`;
43
+ // Single prompt mode (non-interactive): expxagents cli -p "do something"
44
+ if (options.prompt) {
45
+ const agent = new AgentRunner({
46
+ prompt: options.prompt,
47
+ cwd: process.cwd(),
48
+ apiKey,
49
+ model,
50
+ sessionId,
51
+ sessionManager,
52
+ onChunk: (chunk) => process.stdout.write(chunk),
53
+ onToolCall: (tool, args) => {
54
+ const summary = typeof args === 'object' && args !== null
55
+ ? Object.entries(args).map(([k, v]) => `${k}=${String(v).slice(0, 60)}`).join(', ')
56
+ : String(args).slice(0, 80);
57
+ process.stderr.write(`${COLORS.dim}[${tool}] ${summary}${COLORS.reset}\n`);
58
+ },
59
+ });
60
+ try {
61
+ await agent.run();
62
+ console.log('');
63
+ }
64
+ catch (err) {
65
+ console.error(`\nError: ${err instanceof Error ? err.message : String(err)}`);
66
+ process.exit(1);
67
+ }
68
+ return;
69
+ }
70
+ // Interactive REPL mode
71
+ printBanner(model);
72
+ const rl = readline.createInterface({
73
+ input: process.stdin,
74
+ output: process.stdout,
75
+ prompt: `${COLORS.green}>${COLORS.reset} `,
76
+ });
77
+ rl.prompt();
78
+ rl.on('line', async (line) => {
79
+ const input = line.trim();
80
+ if (!input) {
81
+ rl.prompt();
82
+ return;
83
+ }
84
+ // Handle slash commands
85
+ if (input.startsWith('/')) {
86
+ const [cmd, ...args] = input.split(' ');
87
+ switch (cmd) {
88
+ case '/quit':
89
+ case '/exit':
90
+ case '/q':
91
+ console.log(`${COLORS.dim}Goodbye!${COLORS.reset}`);
92
+ process.exit(0);
93
+ break;
94
+ case '/help':
95
+ printHelp();
96
+ rl.prompt();
97
+ return;
98
+ case '/models':
99
+ console.log(`\n${COLORS.bold}Available models:${COLORS.reset}`);
100
+ for (const m of SUPPORTED_MODELS) {
101
+ const active = m.id === model ? ` ${COLORS.green}(active)${COLORS.reset}` : '';
102
+ console.log(` ${COLORS.cyan}${m.id}${COLORS.reset} — ${m.name} (${(m.contextWindow / 1000).toFixed(0)}K ctx)${active}`);
103
+ }
104
+ console.log('');
105
+ rl.prompt();
106
+ return;
107
+ case '/model':
108
+ if (!args[0]) {
109
+ console.log(`Current model: ${COLORS.yellow}${model}${COLORS.reset}`);
110
+ }
111
+ else {
112
+ model = args[0];
113
+ const info = SUPPORTED_MODELS.find(m => m.id === model);
114
+ if (info) {
115
+ console.log(`${COLORS.green}Switched to ${info.name}${COLORS.reset}`);
116
+ }
117
+ else {
118
+ console.log(`${COLORS.yellow}Warning: "${model}" is not in curated list. Tool use may not work.${COLORS.reset}`);
119
+ }
120
+ }
121
+ rl.prompt();
122
+ return;
123
+ case '/clear':
124
+ sessionManager.create(sessionId, process.cwd());
125
+ console.log(`${COLORS.dim}Conversation cleared.${COLORS.reset}`);
126
+ rl.prompt();
127
+ return;
128
+ default:
129
+ console.log(`${COLORS.dim}Unknown command: ${cmd}. Type /help for commands.${COLORS.reset}`);
130
+ rl.prompt();
131
+ return;
132
+ }
133
+ }
134
+ // Send to agent
135
+ console.log('');
136
+ const agent = new AgentRunner({
137
+ prompt: input,
138
+ cwd: process.cwd(),
139
+ apiKey,
140
+ model,
141
+ sessionId,
142
+ sessionManager,
143
+ onChunk: (chunk) => process.stdout.write(chunk),
144
+ onToolCall: (tool, args) => {
145
+ const summary = typeof args === 'object' && args !== null
146
+ ? Object.entries(args).map(([k, v]) => `${k}=${String(v).slice(0, 60)}`).join(', ')
147
+ : String(args).slice(0, 80);
148
+ process.stderr.write(`${COLORS.dim}[${tool}] ${summary}${COLORS.reset}\n`);
149
+ },
150
+ onAskUser: async (question) => {
151
+ return new Promise((resolve) => {
152
+ rl.question(`${COLORS.magenta}Agent asks:${COLORS.reset} ${question}\n${COLORS.green}>${COLORS.reset} `, resolve);
153
+ });
154
+ },
155
+ });
156
+ try {
157
+ await agent.run();
158
+ console.log('\n');
159
+ }
160
+ catch (err) {
161
+ console.error(`\n${COLORS.yellow}Error: ${err instanceof Error ? err.message : String(err)}${COLORS.reset}\n`);
162
+ }
163
+ rl.prompt();
164
+ });
165
+ rl.on('close', () => {
166
+ console.log(`\n${COLORS.dim}Goodbye!${COLORS.reset}`);
167
+ process.exit(0);
168
+ });
169
+ }
@@ -26,6 +26,7 @@ import { searchCommand } from './commands/search.js';
26
26
  import { infoCommand } from './commands/info.js';
27
27
  import { outdatedCommand } from './commands/outdated.js';
28
28
  import { updateCommand } from './commands/update.js';
29
+ import { cliChatCommand } from './commands/cli-chat.js';
29
30
  import { getVersion } from './utils/version.js';
30
31
  const program = new Command();
31
32
  program
@@ -114,4 +115,10 @@ program.addCommand(searchCommand);
114
115
  program.addCommand(infoCommand);
115
116
  program.addCommand(outdatedCommand);
116
117
  program.addCommand(updateCommand);
118
+ program
119
+ .command('cli [prompt]')
120
+ .description('Interactive AI coding agent via OpenRouter (like claude/opencode)')
121
+ .option('-m, --model <model>', 'Model to use (e.g. anthropic/claude-sonnet-4)')
122
+ .option('-p, --prompt <prompt>', 'Single prompt mode (non-interactive)')
123
+ .action((prompt, options) => cliChatCommand({ model: options.model, prompt: prompt ?? options.prompt }));
117
124
  program.parse();
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,OAAO,WAAW;IACd,IAAI,CAAsE;IAC1E,QAAQ,CAAkC;IAC1C,cAAc,CAAiB;IAEvC,YAAY,IAAqB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,aAAa,CAAC;QAClF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,sDAAsD,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,8BAA8B;YACvD,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,cAAc,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAe;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAE1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;YACjC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YAC3D,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,QAAQ,GAA6C,EAAE,CAAC;QAE9D,oCAAoC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,2BAA2B;QAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAErD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC;YAC9B,QAAQ,EAAE,QAAwD;YAClE,KAAK,EAAE,KAAkD;YACzD,QAAQ;YACR,YAAY,EAAE,CAAC,IAAa,EAAE,EAAE;gBAC9B,MAAM,CAAC,GAAG,IAAoF,CAAC;gBAC/F,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAChB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;wBAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;wBAC7C,eAAe,CAAC,IAAI,CAAC;4BACnB,IAAI,EAAE,EAAE,CAAC,QAAQ;4BACjB,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;4BAC/B,UAAU,EAAE,CAAC;yBACd,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5C,QAAQ,IAAI,KAAK,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAEtC,0BAA0B;QAC1B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;gBAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;gBACrC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;aACzC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,eAAe;YAC1B,KAAK;YACL,WAAW,EAAE,UAAU,EAAE,YAAY,IAAI,CAAC;YAC1C,YAAY,EAAE,UAAU,EAAE,gBAAgB,IAAI,CAAC;SAChD,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
@@ -5,6 +5,7 @@ export interface AgentRunOptions {
5
5
  apiKey?: string;
6
6
  baseURL?: string;
7
7
  sessionId?: string;
8
+ sessionManager?: import('./session.js').SessionManager;
8
9
  maxSteps?: number;
9
10
  onChunk?: (text: string) => void;
10
11
  onToolCall?: (tool: string, args: unknown) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expxagents",
3
- "version": "0.28.2",
3
+ "version": "0.29.1",
4
4
  "description": "Multi-agent orchestration platform for AI squads",
5
5
  "author": "ExpxAgents",
6
6
  "license": "MIT",