@ai-support-agent/cli 0.0.1 → 0.0.3-beta.0

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 (96) hide show
  1. package/dist/agent-runner.d.ts +7 -4
  2. package/dist/agent-runner.d.ts.map +1 -1
  3. package/dist/agent-runner.js +49 -121
  4. package/dist/agent-runner.js.map +1 -1
  5. package/dist/api-client.d.ts +9 -5
  6. package/dist/api-client.d.ts.map +1 -1
  7. package/dist/api-client.js +46 -8
  8. package/dist/api-client.js.map +1 -1
  9. package/dist/appsync-subscriber.d.ts +36 -0
  10. package/dist/appsync-subscriber.d.ts.map +1 -0
  11. package/dist/appsync-subscriber.js +234 -0
  12. package/dist/appsync-subscriber.js.map +1 -0
  13. package/dist/auto-updater.d.ts +15 -0
  14. package/dist/auto-updater.d.ts.map +1 -0
  15. package/dist/auto-updater.js +110 -0
  16. package/dist/auto-updater.js.map +1 -0
  17. package/dist/chat-mode-detector.d.ts +19 -0
  18. package/dist/chat-mode-detector.d.ts.map +1 -0
  19. package/dist/chat-mode-detector.js +83 -0
  20. package/dist/chat-mode-detector.js.map +1 -0
  21. package/dist/cli/auth-commands.d.ts +3 -0
  22. package/dist/cli/auth-commands.d.ts.map +1 -0
  23. package/dist/cli/auth-commands.js +123 -0
  24. package/dist/cli/auth-commands.js.map +1 -0
  25. package/dist/cli/status-command.d.ts +5 -0
  26. package/dist/cli/status-command.d.ts.map +1 -0
  27. package/dist/cli/status-command.js +57 -0
  28. package/dist/cli/status-command.js.map +1 -0
  29. package/dist/cli/validators.d.ts +4 -0
  30. package/dist/cli/validators.d.ts.map +1 -0
  31. package/dist/cli/validators.js +26 -0
  32. package/dist/cli/validators.js.map +1 -0
  33. package/dist/command-executor.d.ts +2 -2
  34. package/dist/command-executor.d.ts.map +1 -1
  35. package/dist/command-executor.js +15 -303
  36. package/dist/command-executor.js.map +1 -1
  37. package/dist/commands/api-chat-executor.d.ts +8 -0
  38. package/dist/commands/api-chat-executor.d.ts.map +1 -0
  39. package/dist/commands/api-chat-executor.js +117 -0
  40. package/dist/commands/api-chat-executor.js.map +1 -0
  41. package/dist/commands/chat-executor.d.ts +11 -0
  42. package/dist/commands/chat-executor.d.ts.map +1 -0
  43. package/dist/commands/chat-executor.js +127 -0
  44. package/dist/commands/chat-executor.js.map +1 -0
  45. package/dist/commands/file-executor.d.ts +5 -0
  46. package/dist/commands/file-executor.d.ts.map +1 -0
  47. package/dist/commands/file-executor.js +97 -0
  48. package/dist/commands/file-executor.js.map +1 -0
  49. package/dist/commands/index.d.ts +16 -0
  50. package/dist/commands/index.d.ts.map +1 -0
  51. package/dist/commands/index.js +80 -0
  52. package/dist/commands/index.js.map +1 -0
  53. package/dist/commands/process-executor.d.ts +4 -0
  54. package/dist/commands/process-executor.d.ts.map +1 -0
  55. package/dist/commands/process-executor.js +66 -0
  56. package/dist/commands/process-executor.js.map +1 -0
  57. package/dist/commands/shared-chat-utils.d.ts +20 -0
  58. package/dist/commands/shared-chat-utils.d.ts.map +1 -0
  59. package/dist/commands/shared-chat-utils.js +35 -0
  60. package/dist/commands/shared-chat-utils.js.map +1 -0
  61. package/dist/commands/shell-executor.d.ts +3 -0
  62. package/dist/commands/shell-executor.d.ts.map +1 -0
  63. package/dist/commands/shell-executor.js +125 -0
  64. package/dist/commands/shell-executor.js.map +1 -0
  65. package/dist/config-manager.d.ts.map +1 -1
  66. package/dist/config-manager.js +5 -0
  67. package/dist/config-manager.js.map +1 -1
  68. package/dist/constants.d.ts +9 -2
  69. package/dist/constants.d.ts.map +1 -1
  70. package/dist/constants.js +50 -3
  71. package/dist/constants.js.map +1 -1
  72. package/dist/index.js +12 -160
  73. package/dist/index.js.map +1 -1
  74. package/dist/locales/en.json +19 -1
  75. package/dist/locales/ja.json +19 -1
  76. package/dist/locales/locales/en.json +19 -1
  77. package/dist/locales/locales/ja.json +19 -1
  78. package/dist/project-agent.d.ts +32 -0
  79. package/dist/project-agent.d.ts.map +1 -0
  80. package/dist/project-agent.js +296 -0
  81. package/dist/project-agent.js.map +1 -0
  82. package/dist/security.d.ts +13 -0
  83. package/dist/security.d.ts.map +1 -0
  84. package/dist/security.js +123 -0
  85. package/dist/security.js.map +1 -0
  86. package/dist/system-info.d.ts +4 -0
  87. package/dist/system-info.d.ts.map +1 -0
  88. package/dist/system-info.js +60 -0
  89. package/dist/system-info.js.map +1 -0
  90. package/dist/types.d.ts +80 -1
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/update-checker.d.ts +24 -0
  93. package/dist/update-checker.d.ts.map +1 -0
  94. package/dist/update-checker.js +89 -0
  95. package/dist/update-checker.js.map +1 -0
  96. package/package.json +5 -3
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatStatus = formatStatus;
4
+ exports.registerStatusCommand = registerStatusCommand;
5
+ const config_manager_1 = require("../config-manager");
6
+ const i18n_1 = require("../i18n");
7
+ const logger_1 = require("../logger");
8
+ function formatStatus(config) {
9
+ const projects = (0, config_manager_1.getProjectList)(config);
10
+ const lines = [
11
+ '',
12
+ ` ${(0, i18n_1.t)('status.header')}`,
13
+ ` ${(0, i18n_1.t)('status.agentId', { agentId: config.agentId || (0, i18n_1.t)('status.notSet') })}`,
14
+ ` ${(0, i18n_1.t)('status.lastConnected', { lastConnected: config.lastConnected || (0, i18n_1.t)('status.notConnected') })}`,
15
+ ];
16
+ // Auto-update status
17
+ const autoUpdate = config.autoUpdate;
18
+ if (autoUpdate && autoUpdate.enabled === false) {
19
+ lines.push(` ${(0, i18n_1.t)('status.autoUpdate', { status: (0, i18n_1.t)('update.disabled') })}`);
20
+ }
21
+ else {
22
+ const autoRestart = autoUpdate?.autoRestart !== false ? 'true' : 'false';
23
+ lines.push(` ${(0, i18n_1.t)('status.autoUpdate', { status: (0, i18n_1.t)('update.enabled', { autoRestart }) })}`);
24
+ lines.push(` ${(0, i18n_1.t)('status.updateChannel', { channel: autoUpdate?.channel ?? 'latest' })}`);
25
+ }
26
+ lines.push('');
27
+ if (projects.length === 0) {
28
+ lines.push(` ${(0, i18n_1.t)('status.noProjects')}`);
29
+ }
30
+ else {
31
+ lines.push(` ${(0, i18n_1.t)('status.projectCount', { count: projects.length })}`);
32
+ for (const p of projects) {
33
+ const tokenPreview = p.token.length > 4
34
+ ? p.token.substring(0, 4) + '****'
35
+ : '****';
36
+ lines.push(` - ${p.projectCode}`);
37
+ lines.push(` ${(0, i18n_1.t)('status.apiUrl', { apiUrl: p.apiUrl })}`);
38
+ lines.push(` ${(0, i18n_1.t)('status.token', { token: tokenPreview })}`);
39
+ }
40
+ }
41
+ lines.push('');
42
+ return lines.join('\n');
43
+ }
44
+ function registerStatusCommand(program) {
45
+ program
46
+ .command('status')
47
+ .description((0, i18n_1.t)('cmd.status'))
48
+ .action(() => {
49
+ const config = (0, config_manager_1.loadConfig)();
50
+ if (!config) {
51
+ logger_1.logger.warn((0, i18n_1.t)('status.noConfig'));
52
+ return;
53
+ }
54
+ console.log(formatStatus(config));
55
+ });
56
+ }
57
+ //# sourceMappingURL=status-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-command.js","sourceRoot":"","sources":["../../src/cli/status-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ReleaseChannel } from '../types';
2
+ export declare function parseIntervalOrExit(value: string, name: string): number;
3
+ export declare function validateUpdateChannel(channel: string | undefined): ReleaseChannel | undefined;
4
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/cli/validators.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvE;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAO7F"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseIntervalOrExit = parseIntervalOrExit;
4
+ exports.validateUpdateChannel = validateUpdateChannel;
5
+ const constants_1 = require("../constants");
6
+ const i18n_1 = require("../i18n");
7
+ const logger_1 = require("../logger");
8
+ function parseIntervalOrExit(value, name) {
9
+ const parsed = parseInt(value, 10);
10
+ if (isNaN(parsed) || parsed < constants_1.MIN_INTERVAL || parsed > constants_1.MAX_INTERVAL) {
11
+ logger_1.logger.error((0, i18n_1.t)('config.invalidInterval', { name, value, min: constants_1.MIN_INTERVAL, max: constants_1.MAX_INTERVAL }));
12
+ process.exit(1);
13
+ }
14
+ return parsed;
15
+ }
16
+ const VALID_CHANNELS = ['latest', 'beta', 'alpha'];
17
+ function validateUpdateChannel(channel) {
18
+ if (!channel)
19
+ return undefined;
20
+ if (!VALID_CHANNELS.includes(channel)) {
21
+ logger_1.logger.error(`Invalid update channel: ${channel}. Must be one of: ${VALID_CHANNELS.join(', ')}`);
22
+ process.exit(1);
23
+ }
24
+ return channel;
25
+ }
26
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/cli/validators.ts"],"names":[],"mappings":";;AAKA,kDAOC;AAID,sDAOC;AAvBD,4CAAyD;AACzD,kCAA2B;AAC3B,sCAAkC;AAGlC,SAAgB,mBAAmB,CAAC,KAAa,EAAE,IAAY;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,wBAAY,IAAI,MAAM,GAAG,wBAAY,EAAE,CAAC;QACpE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,wBAAY,EAAE,GAAG,EAAE,wBAAY,EAAE,CAAC,CAAC,CAAA;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,cAAc,GAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAErE,SAAgB,qBAAqB,CAAC,OAA2B;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,eAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,OAAyB,CAAA;AAClC,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { AgentCommandType, CommandResult } from './types';
2
- export declare function executeCommand(type: AgentCommandType, payload: Record<string, unknown>): Promise<CommandResult>;
1
+ export { executeCommand } from './commands';
2
+ export { ALLOWED_SIGNALS, BLOCKED_COMMAND_PATTERNS, BLOCKED_PATH_PREFIXES, buildSafeEnv, getSensitiveHomePaths, resolveAndValidatePath, SAFE_ENV_KEYS, validateCommand, validateFilePath, } from './security';
3
3
  //# sourceMappingURL=command-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../src/command-executor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EAMd,MAAM,SAAS,CAAA;AA2FhB,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
1
+ {"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../src/command-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG3C,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
@@ -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 = executeCommand;
37
- const child_process_1 = require("child_process");
38
- const fs = __importStar(require("fs"));
39
- const os = __importStar(require("os"));
40
- const path = __importStar(require("path"));
41
- const constants_1 = require("./constants");
42
- const logger_1 = require("./logger");
43
- const utils_1 = require("./utils");
44
- const BLOCKED_COMMAND_PATTERNS = [
45
- /\brm\s+-rf\s+\/(?!\w)/,
46
- /\bmkfs\b/,
47
- /\bdd\s+.*of=\/dev\//,
48
- />\s*\/dev\/sd[a-z]/,
49
- /:\(\)\s*\{.*\};\s*:/,
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"}