expxagents 0.29.3 → 0.29.4

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.
@@ -107,55 +107,58 @@ export async function cliChatCommand(options) {
107
107
  rl.prompt();
108
108
  return;
109
109
  }
110
- // Handle slash commands
110
+ // Handle slash commands (only internal ones — unknown commands are sent to the agent)
111
111
  if (input.startsWith('/')) {
112
112
  const [cmd, ...args] = input.split(' ');
113
- switch (cmd) {
114
- case '/quit':
115
- case '/exit':
116
- case '/q':
117
- console.log(`\n ${C.dim}Goodbye! ${C.cyan}✦${C.reset}\n`);
118
- process.exit(0);
119
- break;
120
- case '/help':
121
- printHelp();
122
- rl.prompt();
123
- return;
124
- case '/models':
125
- console.log(`\n${C.bold}Available models:${C.reset}`);
126
- for (const m of SUPPORTED_MODELS) {
127
- const active = m.id === model ? ` ${C.green}(active)${C.reset}` : '';
128
- console.log(` ${C.cyan}${m.id}${C.reset} — ${m.name} (${(m.contextWindow / 1000).toFixed(0)}K ctx)${active}`);
129
- }
130
- console.log('');
131
- rl.prompt();
132
- return;
133
- case '/model':
134
- if (!args[0]) {
135
- console.log(`Current model: ${C.yellow}${model}${C.reset}`);
136
- }
137
- else {
138
- model = args[0];
139
- const info = SUPPORTED_MODELS.find(m => m.id === model);
140
- if (info) {
141
- console.log(`${C.green}Switched to ${info.name}${C.reset}`);
113
+ const knownCommands = ['/quit', '/exit', '/q', '/help', '/models', '/model', '/clear'];
114
+ if (!knownCommands.includes(cmd)) {
115
+ // Not a known command — send the full input to the agent (e.g., /expxagents, /commit)
116
+ // Fall through to agent execution below
117
+ }
118
+ else {
119
+ switch (cmd) {
120
+ case '/quit':
121
+ case '/exit':
122
+ case '/q':
123
+ console.log(`\n ${C.dim}Goodbye! ${C.cyan}✦${C.reset}\n`);
124
+ process.exit(0);
125
+ break;
126
+ case '/help':
127
+ printHelp();
128
+ rl.prompt();
129
+ return;
130
+ case '/models':
131
+ console.log(`\n${C.bold}Available models:${C.reset}`);
132
+ for (const m of SUPPORTED_MODELS) {
133
+ const active = m.id === model ? ` ${C.green}(active)${C.reset}` : '';
134
+ console.log(` ${C.cyan}${m.id}${C.reset} — ${m.name} (${(m.contextWindow / 1000).toFixed(0)}K ctx)${active}`);
135
+ }
136
+ console.log('');
137
+ rl.prompt();
138
+ return;
139
+ case '/model':
140
+ if (!args[0]) {
141
+ console.log(`Current model: ${C.yellow}${model}${C.reset}`);
142
142
  }
143
143
  else {
144
- console.log(`${C.yellow}Warning: "${model}" is not in curated list. Tool use may not work.${C.reset}`);
144
+ model = args[0];
145
+ const info = SUPPORTED_MODELS.find(m => m.id === model);
146
+ if (info) {
147
+ console.log(`${C.green}Switched to ${info.name}${C.reset}`);
148
+ }
149
+ else {
150
+ console.log(`${C.yellow}Warning: "${model}" is not in curated list. Tool use may not work.${C.reset}`);
151
+ }
145
152
  }
146
- }
147
- rl.prompt();
148
- return;
149
- case '/clear':
150
- sessionManager.create(sessionId, process.cwd());
151
- console.log(`${C.dim}Conversation cleared.${C.reset}`);
152
- rl.prompt();
153
- return;
154
- default:
155
- console.log(`${C.dim}Unknown command: ${cmd}. Type /help for commands.${C.reset}`);
156
- rl.prompt();
157
- return;
158
- }
153
+ rl.prompt();
154
+ return;
155
+ case '/clear':
156
+ sessionManager.create(sessionId, process.cwd());
157
+ console.log(`${C.dim}Conversation cleared.${C.reset}`);
158
+ rl.prompt();
159
+ return;
160
+ }
161
+ } // close else for known commands
159
162
  }
160
163
  // Send to agent
161
164
  console.log('');
@@ -1,5 +1,56 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * Loads project context files (CLAUDE.md, AGENTS.md, README.md, etc.)
5
+ * from the working directory, similar to how Claude Code loads CLAUDE.md.
6
+ */
7
+ function loadProjectContext(cwd) {
8
+ const contextFiles = [
9
+ 'CLAUDE.md',
10
+ 'AGENTS.md',
11
+ 'GEMINI.md',
12
+ '.claude/rules/*.md',
13
+ ];
14
+ const sections = [];
15
+ for (const pattern of contextFiles) {
16
+ if (pattern.includes('*')) {
17
+ // Glob pattern — expand manually
18
+ const dir = path.join(cwd, path.dirname(pattern));
19
+ const ext = path.extname(pattern);
20
+ if (fs.existsSync(dir)) {
21
+ try {
22
+ const files = fs.readdirSync(dir).filter(f => f.endsWith(ext)).sort();
23
+ for (const file of files) {
24
+ const content = fs.readFileSync(path.join(dir, file), 'utf-8').trim();
25
+ if (content) {
26
+ sections.push(`### ${path.dirname(pattern)}/${file}\n\n${content}`);
27
+ }
28
+ }
29
+ }
30
+ catch { /* skip unreadable dirs */ }
31
+ }
32
+ }
33
+ else {
34
+ const filePath = path.join(cwd, pattern);
35
+ if (fs.existsSync(filePath)) {
36
+ try {
37
+ const content = fs.readFileSync(filePath, 'utf-8').trim();
38
+ if (content) {
39
+ sections.push(`### ${pattern}\n\n${content}`);
40
+ }
41
+ }
42
+ catch { /* skip unreadable files */ }
43
+ }
44
+ }
45
+ }
46
+ if (sections.length === 0)
47
+ return '';
48
+ return `\n\n## Project Context\n\nThe following project documentation was loaded from the working directory. Use this to understand the project structure, conventions, and rules.\n\n${sections.join('\n\n---\n\n')}`;
49
+ }
1
50
  export function buildSystemPrompt(cwd) {
2
- return `You are an AI coding agent running in the user's project directory.
51
+ const projectContext = loadProjectContext(cwd);
52
+ const dirName = path.basename(cwd);
53
+ return `You are an AI coding agent working on the "${dirName}" project.
3
54
  You have access to tools for reading, writing, and searching files, running shell commands, and fetching web content.
4
55
 
5
56
  Working directory: ${cwd}
@@ -14,10 +65,12 @@ Working directory: ${cwd}
14
65
  - When you encounter an error, diagnose the root cause before retrying
15
66
  - Do not modify files you were not asked to change
16
67
  - Prefer small, focused changes over large rewrites
68
+ - Follow the project conventions described in the project context below
69
+ - When the user references project-specific commands or features, use the project context to answer accurately
17
70
 
18
71
  ## Output
19
72
 
20
73
  When you have completed the task, provide a brief summary of what you did.
21
- Do not wrap your final response in markdown code blocks unless the user asked for code.`;
74
+ Do not wrap your final response in markdown code blocks unless the user asked for code.${projectContext}`;
22
75
  }
23
76
  //# sourceMappingURL=system-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO;;;qBAGY,GAAG;;;;;;;;;;;;;;;;wFAgBgE,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,YAAY,GAAG;QACnB,WAAW;QACX,WAAW;QACX,WAAW;QACX,oBAAoB;KACrB,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,iCAAiC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;wBACtE,IAAI,OAAO,EAAE,CAAC;4BACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC;wBACtE,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1D,IAAI,OAAO,EAAE,CAAC;wBACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,OAAO,iLAAiL,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AACzN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,8CAA8C,OAAO;;;qBAGzC,GAAG;;;;;;;;;;;;;;;;;;yFAkBiE,cAAc,EAAE,CAAC;AAC1G,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expxagents",
3
- "version": "0.29.3",
3
+ "version": "0.29.4",
4
4
  "description": "Multi-agent orchestration platform for AI squads",
5
5
  "author": "ExpxAgents",
6
6
  "license": "MIT",