@ai-support-agent/cli 0.0.2-beta.0 → 0.0.2
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/agent-runner.d.ts +3 -5
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +20 -121
- package/dist/agent-runner.js.map +1 -1
- package/dist/api-client.d.ts +8 -5
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +39 -8
- package/dist/api-client.js.map +1 -1
- package/dist/appsync-subscriber.d.ts +36 -0
- package/dist/appsync-subscriber.d.ts.map +1 -0
- package/dist/appsync-subscriber.js +234 -0
- package/dist/appsync-subscriber.js.map +1 -0
- package/dist/chat-mode-detector.d.ts +19 -0
- package/dist/chat-mode-detector.d.ts.map +1 -0
- package/dist/chat-mode-detector.js +83 -0
- package/dist/chat-mode-detector.js.map +1 -0
- package/dist/cli/auth-commands.d.ts +3 -0
- package/dist/cli/auth-commands.d.ts.map +1 -0
- package/dist/cli/auth-commands.js +123 -0
- package/dist/cli/auth-commands.js.map +1 -0
- package/dist/cli/status-command.d.ts +5 -0
- package/dist/cli/status-command.d.ts.map +1 -0
- package/dist/cli/status-command.js +57 -0
- package/dist/cli/status-command.js.map +1 -0
- package/dist/cli/validators.d.ts +4 -0
- package/dist/cli/validators.d.ts.map +1 -0
- package/dist/cli/validators.js +26 -0
- package/dist/cli/validators.js.map +1 -0
- package/dist/command-executor.d.ts +2 -2
- package/dist/command-executor.d.ts.map +1 -1
- package/dist/command-executor.js +15 -303
- package/dist/command-executor.js.map +1 -1
- package/dist/commands/api-chat-executor.d.ts +8 -0
- package/dist/commands/api-chat-executor.d.ts.map +1 -0
- package/dist/commands/api-chat-executor.js +117 -0
- package/dist/commands/api-chat-executor.js.map +1 -0
- package/dist/commands/chat-executor.d.ts +11 -0
- package/dist/commands/chat-executor.d.ts.map +1 -0
- package/dist/commands/chat-executor.js +127 -0
- package/dist/commands/chat-executor.js.map +1 -0
- package/dist/commands/file-executor.d.ts +5 -0
- package/dist/commands/file-executor.d.ts.map +1 -0
- package/dist/commands/file-executor.js +97 -0
- package/dist/commands/file-executor.js.map +1 -0
- package/dist/commands/index.d.ts +16 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +80 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/process-executor.d.ts +4 -0
- package/dist/commands/process-executor.d.ts.map +1 -0
- package/dist/commands/process-executor.js +66 -0
- package/dist/commands/process-executor.js.map +1 -0
- package/dist/commands/shared-chat-utils.d.ts +20 -0
- package/dist/commands/shared-chat-utils.d.ts.map +1 -0
- package/dist/commands/shared-chat-utils.js +35 -0
- package/dist/commands/shared-chat-utils.js.map +1 -0
- package/dist/commands/shell-executor.d.ts +3 -0
- package/dist/commands/shell-executor.d.ts.map +1 -0
- package/dist/commands/shell-executor.js +125 -0
- package/dist/commands/shell-executor.js.map +1 -0
- package/dist/config-manager.d.ts.map +1 -1
- package/dist/config-manager.js +5 -0
- package/dist/config-manager.js.map +1 -1
- package/dist/constants.d.ts +5 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +44 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +9 -176
- package/dist/index.js.map +1 -1
- package/dist/project-agent.d.ts +32 -0
- package/dist/project-agent.d.ts.map +1 -0
- package/dist/project-agent.js +296 -0
- package/dist/project-agent.js.map +1 -0
- package/dist/security.d.ts +13 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +123 -0
- package/dist/security.js.map +1 -0
- package/dist/system-info.d.ts +4 -0
- package/dist/system-info.d.ts.map +1 -0
- package/dist/system-info.js +60 -0
- package/dist/system-info.js.map +1 -0
- package/dist/types.d.ts +67 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
package/dist/command-executor.js
CHANGED
|
@@ -1,306 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.executeCommand =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const BLOCKED_PATH_PREFIXES = [
|
|
52
|
-
'/etc/', '/proc/', '/sys/', '/dev/',
|
|
53
|
-
// macOS: /etc → /private/etc, etc.
|
|
54
|
-
'/private/etc/', '/private/var/db/',
|
|
55
|
-
];
|
|
56
|
-
function getSensitiveHomePaths() {
|
|
57
|
-
const home = os.homedir();
|
|
58
|
-
return ['.ssh', '.aws', '.gnupg', '.config/gcloud'].map((dir) => path.join(home, dir) + '/');
|
|
59
|
-
}
|
|
60
|
-
const ALLOWED_SIGNALS = new Set([
|
|
61
|
-
'SIGTERM', 'SIGUSR1', 'SIGUSR2', 'SIGINT', 'SIGHUP',
|
|
62
|
-
]);
|
|
63
|
-
const SAFE_ENV_KEYS = [
|
|
64
|
-
'PATH', 'HOME', 'USER', 'SHELL', 'LANG', 'LC_ALL', 'LC_MESSAGES',
|
|
65
|
-
'TERM', 'TMPDIR', 'TMP', 'TEMP', 'NODE_ENV',
|
|
66
|
-
// Windows
|
|
67
|
-
'SystemRoot', 'USERPROFILE', 'APPDATA', 'PATHEXT', 'COMSPEC',
|
|
68
|
-
];
|
|
69
|
-
function buildSafeEnv() {
|
|
70
|
-
const env = {};
|
|
71
|
-
for (const key of SAFE_ENV_KEYS) {
|
|
72
|
-
if (process.env[key] !== undefined)
|
|
73
|
-
env[key] = process.env[key];
|
|
74
|
-
}
|
|
75
|
-
return env;
|
|
76
|
-
}
|
|
77
|
-
function validateCommand(command) {
|
|
78
|
-
for (const pattern of BLOCKED_COMMAND_PATTERNS) {
|
|
79
|
-
if (pattern.test(command)) {
|
|
80
|
-
return `Blocked dangerous command pattern: ${pattern}`;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
async function validateFilePath(filePath) {
|
|
86
|
-
let resolved;
|
|
87
|
-
try {
|
|
88
|
-
resolved = await fs.promises.realpath(filePath);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
// File does not exist yet (e.g. file_write new file) — resolve parent directory
|
|
92
|
-
const parentDir = path.dirname(path.resolve(filePath));
|
|
93
|
-
try {
|
|
94
|
-
const realParent = await fs.promises.realpath(parentDir);
|
|
95
|
-
resolved = path.join(realParent, path.basename(filePath));
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
resolved = path.resolve(filePath);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const allBlocked = [...BLOCKED_PATH_PREFIXES, ...getSensitiveHomePaths()];
|
|
102
|
-
for (const prefix of allBlocked) {
|
|
103
|
-
const prefixWithoutSlash = prefix.replace(/\/$/, '');
|
|
104
|
-
if (resolved === prefixWithoutSlash || resolved.startsWith(prefix)) {
|
|
105
|
-
return `Access denied: ${prefix} paths are blocked`;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
async function resolveAndValidatePath(payload, defaultPath) {
|
|
111
|
-
const filePath = (0, utils_1.parseString)(payload.path) ?? defaultPath ?? null;
|
|
112
|
-
if (!filePath) {
|
|
113
|
-
return { success: false, error: 'No file path specified' };
|
|
114
|
-
}
|
|
115
|
-
const pathError = await validateFilePath(filePath);
|
|
116
|
-
if (pathError) {
|
|
117
|
-
return { success: false, error: pathError };
|
|
118
|
-
}
|
|
119
|
-
return filePath;
|
|
120
|
-
}
|
|
121
|
-
async function executeCommand(type, payload) {
|
|
122
|
-
try {
|
|
123
|
-
switch (type) {
|
|
124
|
-
case 'execute_command':
|
|
125
|
-
return await executeShellCommand(payload);
|
|
126
|
-
case 'file_read':
|
|
127
|
-
return await fileRead(payload);
|
|
128
|
-
case 'file_write':
|
|
129
|
-
return await fileWrite(payload);
|
|
130
|
-
case 'file_list':
|
|
131
|
-
return await fileList(payload);
|
|
132
|
-
case 'process_list':
|
|
133
|
-
return await processList();
|
|
134
|
-
case 'process_kill':
|
|
135
|
-
return await processKill(payload);
|
|
136
|
-
default:
|
|
137
|
-
return { success: false, error: `Unknown command type: ${type}` };
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
const message = (0, utils_1.getErrorMessage)(error);
|
|
142
|
-
logger_1.logger.error(`Command execution failed: ${message}`);
|
|
143
|
-
return { success: false, error: message };
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async function executeShellCommand(payload) {
|
|
147
|
-
const command = (0, utils_1.parseString)(payload.command);
|
|
148
|
-
if (!command) {
|
|
149
|
-
return { success: false, error: 'No command specified' };
|
|
150
|
-
}
|
|
151
|
-
const validationError = validateCommand(command);
|
|
152
|
-
if (validationError) {
|
|
153
|
-
return { success: false, error: validationError };
|
|
154
|
-
}
|
|
155
|
-
const rawTimeout = (0, utils_1.parseNumber)(payload.timeout) ?? constants_1.CMD_DEFAULT_TIMEOUT;
|
|
156
|
-
if (rawTimeout < 1 || rawTimeout > constants_1.MAX_CMD_TIMEOUT) {
|
|
157
|
-
return { success: false, error: `Timeout must be between 1 and ${constants_1.MAX_CMD_TIMEOUT}ms` };
|
|
158
|
-
}
|
|
159
|
-
const timeout = rawTimeout;
|
|
160
|
-
const cwd = (0, utils_1.parseString)(payload.cwd) ?? os.homedir();
|
|
161
|
-
const cwdError = await validateFilePath(cwd);
|
|
162
|
-
if (cwdError) {
|
|
163
|
-
return { success: false, error: cwdError };
|
|
164
|
-
}
|
|
165
|
-
return new Promise((resolve) => {
|
|
166
|
-
let resolved = false;
|
|
167
|
-
const shellCmd = os.platform() === 'win32' ? 'cmd.exe' : '/bin/sh';
|
|
168
|
-
const shellArgs = os.platform() === 'win32' ? ['/c', command] : ['-c', command];
|
|
169
|
-
const proc = (0, child_process_1.spawn)(shellCmd, shellArgs, {
|
|
170
|
-
cwd,
|
|
171
|
-
env: buildSafeEnv(),
|
|
172
|
-
});
|
|
173
|
-
let stdout = '';
|
|
174
|
-
let stderr = '';
|
|
175
|
-
let outputSize = 0;
|
|
176
|
-
const timer = setTimeout(() => {
|
|
177
|
-
if (!resolved) {
|
|
178
|
-
resolved = true;
|
|
179
|
-
proc.kill('SIGKILL');
|
|
180
|
-
resolve({ success: false, error: `Command timed out after ${timeout}ms` });
|
|
181
|
-
}
|
|
182
|
-
}, timeout);
|
|
183
|
-
proc.stdout?.on('data', (data) => {
|
|
184
|
-
outputSize += data.length;
|
|
185
|
-
if (outputSize <= constants_1.MAX_OUTPUT_SIZE) {
|
|
186
|
-
stdout += data.toString();
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
proc.stderr?.on('data', (data) => {
|
|
190
|
-
outputSize += data.length;
|
|
191
|
-
if (outputSize <= constants_1.MAX_OUTPUT_SIZE) {
|
|
192
|
-
stderr += data.toString();
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
proc.on('close', (code) => {
|
|
196
|
-
clearTimeout(timer);
|
|
197
|
-
if (resolved)
|
|
198
|
-
return;
|
|
199
|
-
resolved = true;
|
|
200
|
-
const truncated = outputSize > constants_1.MAX_OUTPUT_SIZE;
|
|
201
|
-
const suffix = truncated ? '\n... [output truncated]' : '';
|
|
202
|
-
if (code === 0) {
|
|
203
|
-
resolve({ success: true, data: stdout + suffix });
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
resolve({
|
|
207
|
-
success: false,
|
|
208
|
-
data: stdout + suffix,
|
|
209
|
-
error: stderr || `Process exited with code ${code}`,
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
proc.on('error', (err) => {
|
|
214
|
-
clearTimeout(timer);
|
|
215
|
-
if (resolved)
|
|
216
|
-
return;
|
|
217
|
-
resolved = true;
|
|
218
|
-
let errorMessage = err.message;
|
|
219
|
-
if (err.code === 'ENOENT') {
|
|
220
|
-
errorMessage = `Command not found: ${shellCmd}`;
|
|
221
|
-
}
|
|
222
|
-
else if (err.code === 'EACCES') {
|
|
223
|
-
errorMessage = `Permission denied: ${shellCmd}`;
|
|
224
|
-
}
|
|
225
|
-
resolve({ success: false, error: errorMessage });
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
async function fileRead(payload) {
|
|
230
|
-
const pathOrError = await resolveAndValidatePath(payload);
|
|
231
|
-
if (typeof pathOrError !== 'string')
|
|
232
|
-
return pathOrError;
|
|
233
|
-
const filePath = pathOrError;
|
|
234
|
-
const stat = await fs.promises.stat(filePath);
|
|
235
|
-
if (stat.size > constants_1.MAX_FILE_READ_SIZE) {
|
|
236
|
-
return {
|
|
237
|
-
success: false,
|
|
238
|
-
error: `File too large: ${stat.size} bytes (limit: ${constants_1.MAX_FILE_READ_SIZE} bytes)`,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
const content = await fs.promises.readFile(filePath, 'utf-8');
|
|
242
|
-
return { success: true, data: content };
|
|
243
|
-
}
|
|
244
|
-
async function fileWrite(payload) {
|
|
245
|
-
const pathOrError = await resolveAndValidatePath(payload);
|
|
246
|
-
if (typeof pathOrError !== 'string')
|
|
247
|
-
return pathOrError;
|
|
248
|
-
const filePath = pathOrError;
|
|
249
|
-
const content = typeof payload.content === 'string' ? payload.content : null;
|
|
250
|
-
if (content === null) {
|
|
251
|
-
return { success: false, error: 'No content specified' };
|
|
252
|
-
}
|
|
253
|
-
if (content.length > constants_1.MAX_FILE_WRITE_SIZE) {
|
|
254
|
-
return { success: false, error: `Content too large: ${content.length} bytes (limit: ${constants_1.MAX_FILE_WRITE_SIZE} bytes)` };
|
|
255
|
-
}
|
|
256
|
-
if (payload.createDirectories) {
|
|
257
|
-
await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
258
|
-
}
|
|
259
|
-
await fs.promises.writeFile(filePath, content, 'utf-8');
|
|
260
|
-
return { success: true, data: `Written to ${filePath}` };
|
|
261
|
-
}
|
|
262
|
-
async function fileList(payload) {
|
|
263
|
-
const pathOrError = await resolveAndValidatePath(payload, '.');
|
|
264
|
-
if (typeof pathOrError !== 'string')
|
|
265
|
-
return pathOrError;
|
|
266
|
-
const dirPath = pathOrError;
|
|
267
|
-
const allEntries = await fs.promises.readdir(dirPath, { withFileTypes: true });
|
|
268
|
-
const truncated = allEntries.length > constants_1.MAX_DIR_ENTRIES;
|
|
269
|
-
const entries = allEntries.slice(0, constants_1.MAX_DIR_ENTRIES);
|
|
270
|
-
const items = await Promise.all(entries.map(async (entry) => {
|
|
271
|
-
const fullPath = path.join(dirPath, entry.name);
|
|
272
|
-
const type = entry.isDirectory() ? 'directory' : 'file';
|
|
273
|
-
try {
|
|
274
|
-
const stat = await fs.promises.lstat(fullPath);
|
|
275
|
-
return { name: entry.name, type, size: stat.size, modified: stat.mtime.toISOString() };
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
return { name: entry.name, type, size: 0, modified: '' };
|
|
279
|
-
}
|
|
280
|
-
}));
|
|
281
|
-
return { success: true, data: { items, truncated, total: allEntries.length } };
|
|
282
|
-
}
|
|
283
|
-
function processList() {
|
|
284
|
-
const command = os.platform() === 'win32'
|
|
285
|
-
? 'tasklist /fo csv /nh'
|
|
286
|
-
: 'ps aux';
|
|
287
|
-
return executeShellCommand({ command, timeout: constants_1.PROCESS_LIST_TIMEOUT });
|
|
288
|
-
}
|
|
289
|
-
async function processKill(payload) {
|
|
290
|
-
const pid = (0, utils_1.parseNumber)(payload.pid);
|
|
291
|
-
if (!pid || pid < 1 || !Number.isInteger(pid)) {
|
|
292
|
-
return { success: false, error: 'Invalid PID: must be a positive integer' };
|
|
293
|
-
}
|
|
294
|
-
const signal = (0, utils_1.parseString)(payload.signal) ?? 'SIGTERM';
|
|
295
|
-
if (!ALLOWED_SIGNALS.has(signal)) {
|
|
296
|
-
return { success: false, error: `Signal not allowed: ${signal}. Allowed: ${[...ALLOWED_SIGNALS].join(', ')}` };
|
|
297
|
-
}
|
|
298
|
-
try {
|
|
299
|
-
process.kill(pid, signal);
|
|
300
|
-
return { success: true, data: `Sent ${signal} to PID ${pid}` };
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
return { success: false, error: (0, utils_1.getErrorMessage)(error) };
|
|
304
|
-
}
|
|
305
|
-
}
|
|
3
|
+
exports.validateFilePath = exports.validateCommand = exports.SAFE_ENV_KEYS = exports.resolveAndValidatePath = exports.getSensitiveHomePaths = exports.buildSafeEnv = exports.BLOCKED_PATH_PREFIXES = exports.BLOCKED_COMMAND_PATTERNS = exports.ALLOWED_SIGNALS = exports.executeCommand = void 0;
|
|
4
|
+
// Re-export from commands/ for backward compatibility
|
|
5
|
+
var commands_1 = require("./commands");
|
|
6
|
+
Object.defineProperty(exports, "executeCommand", { enumerable: true, get: function () { return commands_1.executeCommand; } });
|
|
7
|
+
// Re-export security utilities for backward compatibility
|
|
8
|
+
var security_1 = require("./security");
|
|
9
|
+
Object.defineProperty(exports, "ALLOWED_SIGNALS", { enumerable: true, get: function () { return security_1.ALLOWED_SIGNALS; } });
|
|
10
|
+
Object.defineProperty(exports, "BLOCKED_COMMAND_PATTERNS", { enumerable: true, get: function () { return security_1.BLOCKED_COMMAND_PATTERNS; } });
|
|
11
|
+
Object.defineProperty(exports, "BLOCKED_PATH_PREFIXES", { enumerable: true, get: function () { return security_1.BLOCKED_PATH_PREFIXES; } });
|
|
12
|
+
Object.defineProperty(exports, "buildSafeEnv", { enumerable: true, get: function () { return security_1.buildSafeEnv; } });
|
|
13
|
+
Object.defineProperty(exports, "getSensitiveHomePaths", { enumerable: true, get: function () { return security_1.getSensitiveHomePaths; } });
|
|
14
|
+
Object.defineProperty(exports, "resolveAndValidatePath", { enumerable: true, get: function () { return security_1.resolveAndValidatePath; } });
|
|
15
|
+
Object.defineProperty(exports, "SAFE_ENV_KEYS", { enumerable: true, get: function () { return security_1.SAFE_ENV_KEYS; } });
|
|
16
|
+
Object.defineProperty(exports, "validateCommand", { enumerable: true, get: function () { return security_1.validateCommand; } });
|
|
17
|
+
Object.defineProperty(exports, "validateFilePath", { enumerable: true, get: function () { return security_1.validateFilePath; } });
|
|
306
18
|
//# sourceMappingURL=command-executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../src/command-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../src/command-executor.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,uCAA2C;AAAlC,0GAAA,cAAc,OAAA;AAEvB,0DAA0D;AAC1D,uCAUmB;AATjB,2GAAA,eAAe,OAAA;AACf,oHAAA,wBAAwB,OAAA;AACxB,iHAAA,qBAAqB,OAAA;AACrB,wGAAA,YAAY,OAAA;AACZ,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ApiClient } from '../api-client';
|
|
2
|
+
import type { AgentServerConfig, ChatPayload, CommandResult } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Anthropic API を直接呼び出してチャットメッセージを処理する
|
|
5
|
+
* エージェントが持つ ANTHROPIC_API_KEY で Claude を呼び出す
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeApiChatCommand(payload: ChatPayload, commandId: string, client: ApiClient, config?: AgentServerConfig, agentId?: string): Promise<CommandResult>;
|
|
8
|
+
//# sourceMappingURL=api-chat-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAO5F;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAiDxB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.executeApiChatCommand = executeApiChatCommand;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const logger_1 = require("../logger");
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
const shared_chat_utils_1 = require("./shared-chat-utils");
|
|
11
|
+
const DEFAULT_MODEL = 'claude-sonnet-4-6-20250514';
|
|
12
|
+
/**
|
|
13
|
+
* Anthropic API を直接呼び出してチャットメッセージを処理する
|
|
14
|
+
* エージェントが持つ ANTHROPIC_API_KEY で Claude を呼び出す
|
|
15
|
+
*/
|
|
16
|
+
async function executeApiChatCommand(payload, commandId, client, config, agentId) {
|
|
17
|
+
if (!agentId) {
|
|
18
|
+
return { success: false, error: 'agentId is required for chat command' };
|
|
19
|
+
}
|
|
20
|
+
const message = (0, utils_1.parseString)(payload.message);
|
|
21
|
+
if (!message) {
|
|
22
|
+
return { success: false, error: 'message is required' };
|
|
23
|
+
}
|
|
24
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
25
|
+
if (!apiKey) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: 'ANTHROPIC_API_KEY is not set. API chat mode requires an Anthropic API key.',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
logger_1.logger.info(`[api-chat] Starting API chat command [${commandId}]: message="${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`);
|
|
32
|
+
const { sendChunk, getChunkIndex } = (0, shared_chat_utils_1.createChunkSender)(commandId, client, agentId, 'api-chat');
|
|
33
|
+
try {
|
|
34
|
+
const model = config?.claudeCodeConfig?.model ?? DEFAULT_MODEL;
|
|
35
|
+
const maxTokens = config?.claudeCodeConfig?.maxTokens ?? 4096;
|
|
36
|
+
const systemPrompt = config?.claudeCodeConfig?.systemPrompt;
|
|
37
|
+
const result = await callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt, sendChunk);
|
|
38
|
+
logger_1.logger.info(`[api-chat] API chat command completed [${commandId}]: output=${result.length} chars, ${getChunkIndex()} chunks sent`);
|
|
39
|
+
await sendChunk('done', result);
|
|
40
|
+
return { success: true, data: result };
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const errorMessage = (0, utils_1.getErrorMessage)(error);
|
|
44
|
+
logger_1.logger.error(`[api-chat] API chat command failed [${commandId}]: ${errorMessage}`);
|
|
45
|
+
await sendChunk('error', errorMessage);
|
|
46
|
+
return { success: false, error: errorMessage };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Anthropic Messages API を呼び出し、ストリーミングレスポンスを処理する
|
|
51
|
+
*/
|
|
52
|
+
async function callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt, sendChunk) {
|
|
53
|
+
const body = {
|
|
54
|
+
model,
|
|
55
|
+
max_tokens: maxTokens,
|
|
56
|
+
stream: true,
|
|
57
|
+
messages: [{ role: 'user', content: message }],
|
|
58
|
+
};
|
|
59
|
+
if (systemPrompt) {
|
|
60
|
+
body.system = systemPrompt;
|
|
61
|
+
}
|
|
62
|
+
const response = await axios_1.default.post('https://api.anthropic.com/v1/messages', body, {
|
|
63
|
+
headers: {
|
|
64
|
+
'x-api-key': apiKey,
|
|
65
|
+
'anthropic-version': '2023-06-01',
|
|
66
|
+
'content-type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
responseType: 'stream',
|
|
69
|
+
timeout: 120_000,
|
|
70
|
+
});
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
let fullOutput = '';
|
|
73
|
+
let buffer = '';
|
|
74
|
+
const stream = response.data;
|
|
75
|
+
stream.on('data', (chunk) => {
|
|
76
|
+
buffer += chunk.toString();
|
|
77
|
+
const lines = buffer.split('\n');
|
|
78
|
+
// Keep the last incomplete line in the buffer
|
|
79
|
+
buffer = lines.pop() ?? '';
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
if (!line.startsWith('data: '))
|
|
82
|
+
continue;
|
|
83
|
+
const data = line.slice(6).trim();
|
|
84
|
+
if (data === '[DONE]')
|
|
85
|
+
continue;
|
|
86
|
+
try {
|
|
87
|
+
const event = JSON.parse(data);
|
|
88
|
+
if (event.type === 'content_block_delta') {
|
|
89
|
+
const delta = event.delta;
|
|
90
|
+
if (delta?.type === 'text_delta' && typeof delta.text === 'string') {
|
|
91
|
+
fullOutput += delta.text;
|
|
92
|
+
void sendChunk('delta', delta.text);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else if (event.type === 'content_block_start') {
|
|
96
|
+
const contentBlock = event.content_block;
|
|
97
|
+
if (contentBlock?.type === 'tool_use') {
|
|
98
|
+
const toolName = contentBlock.name ?? 'unknown';
|
|
99
|
+
logger_1.logger.info(`[api-chat] Tool use requested: ${toolName} (not supported in API mode)`);
|
|
100
|
+
void sendChunk('delta', `\n[Tool call: ${toolName} — tool use is not supported in API chat mode]\n`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Skip non-JSON lines
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
stream.on('end', () => {
|
|
110
|
+
resolve(fullOutput);
|
|
111
|
+
});
|
|
112
|
+
stream.on('error', (error) => {
|
|
113
|
+
reject(error);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=api-chat-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-chat-executor.js","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ApiClient } from '../api-client';
|
|
2
|
+
import type { AgentChatMode, AgentServerConfig, ChatPayload, CommandResult } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* エージェントチャットモードに応じてチャットメッセージを処理する
|
|
5
|
+
* - claude_code: Claude Code CLI を使用(デフォルト)
|
|
6
|
+
* - api: Anthropic API 直接呼び出し
|
|
7
|
+
*
|
|
8
|
+
* activeChatMode はサーバーの chatMode ではなく、エージェント内部の実行方式を指す
|
|
9
|
+
*/
|
|
10
|
+
export declare function executeChatCommand(payload: ChatPayload, commandId: string, client: ApiClient, serverConfig?: AgentServerConfig, activeChatMode?: AgentChatMode, agentId?: string): Promise<CommandResult>;
|
|
11
|
+
//# sourceMappingURL=chat-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAM3G;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,YAAY,CAAC,EAAE,iBAAiB,EAChC,cAAc,CAAC,EAAE,aAAa,EAC9B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAcxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeChatCommand = executeChatCommand;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const logger_1 = require("../logger");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const api_chat_executor_1 = require("./api-chat-executor");
|
|
8
|
+
const shared_chat_utils_1 = require("./shared-chat-utils");
|
|
9
|
+
/**
|
|
10
|
+
* エージェントチャットモードに応じてチャットメッセージを処理する
|
|
11
|
+
* - claude_code: Claude Code CLI を使用(デフォルト)
|
|
12
|
+
* - api: Anthropic API 直接呼び出し
|
|
13
|
+
*
|
|
14
|
+
* activeChatMode はサーバーの chatMode ではなく、エージェント内部の実行方式を指す
|
|
15
|
+
*/
|
|
16
|
+
async function executeChatCommand(payload, commandId, client, serverConfig, activeChatMode, agentId) {
|
|
17
|
+
if (!agentId) {
|
|
18
|
+
return { success: false, error: 'agentId is required for chat command' };
|
|
19
|
+
}
|
|
20
|
+
const mode = activeChatMode ?? 'claude_code';
|
|
21
|
+
switch (mode) {
|
|
22
|
+
case 'api':
|
|
23
|
+
return (0, api_chat_executor_1.executeApiChatCommand)(payload, commandId, client, serverConfig, agentId);
|
|
24
|
+
case 'claude_code':
|
|
25
|
+
default:
|
|
26
|
+
return executeClaudeCodeChat(payload, commandId, client, agentId);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Claude Code CLI を使用してチャットメッセージを処理する
|
|
31
|
+
* サブプロセスとして起動し、stdout をストリーミングで読み取り、
|
|
32
|
+
* チャンクとしてAPIに送信する
|
|
33
|
+
*/
|
|
34
|
+
async function executeClaudeCodeChat(payload, commandId, client, agentId) {
|
|
35
|
+
const message = (0, utils_1.parseString)(payload.message);
|
|
36
|
+
if (!message) {
|
|
37
|
+
return { success: false, error: 'message is required' };
|
|
38
|
+
}
|
|
39
|
+
logger_1.logger.info(`[chat] Starting chat command [${commandId}]: message="${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`);
|
|
40
|
+
const { sendChunk, getChunkIndex } = (0, shared_chat_utils_1.createChunkSender)(commandId, client, agentId, 'chat', { debugLog: true });
|
|
41
|
+
try {
|
|
42
|
+
logger_1.logger.debug(`[chat] Spawning claude CLI for command [${commandId}]`);
|
|
43
|
+
const result = await runClaudeCode(message, sendChunk);
|
|
44
|
+
logger_1.logger.info(`[chat] Chat command completed [${commandId}]: output=${result.length} chars, ${getChunkIndex()} chunks sent`);
|
|
45
|
+
// 完了チャンクを送信
|
|
46
|
+
await sendChunk('done', result);
|
|
47
|
+
return { success: true, data: result };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const errorMessage = (0, utils_1.getErrorMessage)(error);
|
|
51
|
+
logger_1.logger.error(`[chat] Chat command failed [${commandId}]: ${errorMessage}`);
|
|
52
|
+
await sendChunk('error', errorMessage);
|
|
53
|
+
return { success: false, error: errorMessage };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Claude Code CLI をサブプロセスとして実行し、出力をストリーミングで返す
|
|
58
|
+
*/
|
|
59
|
+
async function runClaudeCode(message, sendChunk) {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
// claude CLI が利用可能か確認し、print モードで実行
|
|
62
|
+
// Claude Code セッション内からの起動時にネスト検出やSSEポート干渉を回避するため、
|
|
63
|
+
// CLAUDECODE および CLAUDE_CODE_* 環境変数を除外
|
|
64
|
+
const cleanEnv = {};
|
|
65
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
66
|
+
if (key === 'CLAUDECODE' || key.startsWith('CLAUDE_CODE_'))
|
|
67
|
+
continue;
|
|
68
|
+
if (value !== undefined)
|
|
69
|
+
cleanEnv[key] = value;
|
|
70
|
+
}
|
|
71
|
+
const child = (0, child_process_1.spawn)('claude', ['-p', message], {
|
|
72
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
73
|
+
env: cleanEnv,
|
|
74
|
+
});
|
|
75
|
+
logger_1.logger.debug(`[chat] claude CLI spawned (pid=${child.pid}, CLAUDECODE removed=${!cleanEnv['CLAUDECODE']})`);
|
|
76
|
+
let fullOutput = '';
|
|
77
|
+
let stderrOutput = '';
|
|
78
|
+
// タイムアウト: 120秒で応答がなければ強制終了
|
|
79
|
+
let sigkillTimer;
|
|
80
|
+
const timeout = setTimeout(() => {
|
|
81
|
+
logger_1.logger.warn(`[chat] claude CLI timed out after 120s (pid=${child.pid}), sending SIGTERM`);
|
|
82
|
+
child.kill('SIGTERM');
|
|
83
|
+
// SIGTERM後5秒で応答なければSIGKILL
|
|
84
|
+
sigkillTimer = setTimeout(() => {
|
|
85
|
+
if (!child.killed) {
|
|
86
|
+
logger_1.logger.warn(`[chat] claude CLI still running after SIGTERM, sending SIGKILL (pid=${child.pid})`);
|
|
87
|
+
child.kill('SIGKILL');
|
|
88
|
+
}
|
|
89
|
+
}, 5_000);
|
|
90
|
+
}, 120_000);
|
|
91
|
+
child.stdout.on('data', (data) => {
|
|
92
|
+
const text = data.toString();
|
|
93
|
+
fullOutput += text;
|
|
94
|
+
// delta チャンクとしてAPIに送信(fire-and-forget)
|
|
95
|
+
void sendChunk('delta', text);
|
|
96
|
+
});
|
|
97
|
+
child.stderr.on('data', (data) => {
|
|
98
|
+
const text = data.toString();
|
|
99
|
+
stderrOutput += text;
|
|
100
|
+
logger_1.logger.debug(`[chat] claude CLI stderr: ${text.substring(0, 200)}`);
|
|
101
|
+
});
|
|
102
|
+
child.on('error', (error) => {
|
|
103
|
+
clearTimeout(timeout);
|
|
104
|
+
if (sigkillTimer)
|
|
105
|
+
clearTimeout(sigkillTimer);
|
|
106
|
+
if (error.code === 'ENOENT') {
|
|
107
|
+
reject(new Error('claude CLI が見つかりません。Claude Code がインストールされていることを確認してください。'));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
reject(error);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
child.on('close', (code) => {
|
|
114
|
+
clearTimeout(timeout);
|
|
115
|
+
if (sigkillTimer)
|
|
116
|
+
clearTimeout(sigkillTimer);
|
|
117
|
+
logger_1.logger.debug(`[chat] claude CLI exited (pid=${child.pid}, code=${code}, stdout=${fullOutput.length}b, stderr=${stderrOutput.length}b)`);
|
|
118
|
+
if (code === 0) {
|
|
119
|
+
resolve(fullOutput);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
reject(new Error(`claude CLI がコード ${code} で終了しました${stderrOutput ? `: ${stderrOutput}` : ''}`));
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=chat-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-executor.js","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CommandResult, FileListPayload, FileReadPayload, FileWritePayload } from '../types';
|
|
2
|
+
export declare function fileRead(payload: FileReadPayload): Promise<CommandResult>;
|
|
3
|
+
export declare function fileWrite(payload: FileWritePayload): Promise<CommandResult>;
|
|
4
|
+
export declare function fileList(payload: FileListPayload): Promise<CommandResult>;
|
|
5
|
+
//# sourceMappingURL=file-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-executor.d.ts","sourceRoot":"","sources":["../../src/commands/file-executor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEjG,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAexB;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
|