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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (
|
|
141
|
-
console.log(
|
|
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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
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;;;
|
|
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"}
|