@ai-support-agent/cli 0.0.1 → 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.
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,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"}
@@ -0,0 +1,97 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.fileRead = fileRead;
37
+ exports.fileWrite = fileWrite;
38
+ exports.fileList = fileList;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const constants_1 = require("../constants");
42
+ const security_1 = require("../security");
43
+ async function fileRead(payload) {
44
+ const pathOrError = await (0, security_1.resolveAndValidatePath)(payload);
45
+ if (typeof pathOrError !== 'string')
46
+ return pathOrError;
47
+ const filePath = pathOrError;
48
+ const stat = await fs.promises.stat(filePath);
49
+ if (stat.size > constants_1.MAX_FILE_READ_SIZE) {
50
+ return {
51
+ success: false,
52
+ error: `File too large: ${stat.size} bytes (limit: ${constants_1.MAX_FILE_READ_SIZE} bytes)`,
53
+ };
54
+ }
55
+ const content = await fs.promises.readFile(filePath, 'utf-8');
56
+ return { success: true, data: content };
57
+ }
58
+ async function fileWrite(payload) {
59
+ const pathOrError = await (0, security_1.resolveAndValidatePath)(payload);
60
+ if (typeof pathOrError !== 'string')
61
+ return pathOrError;
62
+ const filePath = pathOrError;
63
+ const content = typeof payload.content === 'string' ? payload.content : null;
64
+ if (content === null) {
65
+ return { success: false, error: 'No content specified' };
66
+ }
67
+ if (content.length > constants_1.MAX_FILE_WRITE_SIZE) {
68
+ return { success: false, error: `Content too large: ${content.length} bytes (limit: ${constants_1.MAX_FILE_WRITE_SIZE} bytes)` };
69
+ }
70
+ if (payload.createDirectories) {
71
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
72
+ }
73
+ await fs.promises.writeFile(filePath, content, 'utf-8');
74
+ return { success: true, data: `Written to ${filePath}` };
75
+ }
76
+ async function fileList(payload) {
77
+ const pathOrError = await (0, security_1.resolveAndValidatePath)(payload, '.');
78
+ if (typeof pathOrError !== 'string')
79
+ return pathOrError;
80
+ const dirPath = pathOrError;
81
+ const allEntries = await fs.promises.readdir(dirPath, { withFileTypes: true });
82
+ const truncated = allEntries.length > constants_1.MAX_DIR_ENTRIES;
83
+ const entries = allEntries.slice(0, constants_1.MAX_DIR_ENTRIES);
84
+ const items = await Promise.all(entries.map(async (entry) => {
85
+ const fullPath = path.join(dirPath, entry.name);
86
+ const type = entry.isDirectory() ? 'directory' : 'file';
87
+ try {
88
+ const stat = await fs.promises.lstat(fullPath);
89
+ return { name: entry.name, type, size: stat.size, modified: stat.mtime.toISOString() };
90
+ }
91
+ catch {
92
+ return { name: entry.name, type, size: 0, modified: '' };
93
+ }
94
+ }));
95
+ return { success: true, data: { items, truncated, total: allEntries.length } };
96
+ }
97
+ //# sourceMappingURL=file-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-executor.js","sourceRoot":"","sources":["../../src/commands/file-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ApiClient } from '../api-client';
2
+ import type { AgentChatMode, AgentCommandType, AgentServerConfig, CommandDispatch, CommandResult } from '../types';
3
+ /** Options for command execution */
4
+ export interface ExecuteCommandOptions {
5
+ commandId?: string;
6
+ client?: ApiClient;
7
+ serverConfig?: AgentServerConfig;
8
+ activeChatMode?: AgentChatMode;
9
+ agentId?: string;
10
+ }
11
+ export declare function executeCommand(command: CommandDispatch, options?: ExecuteCommandOptions): Promise<CommandResult>;
12
+ export declare function executeCommand(type: AgentCommandType, payload: Record<string, unknown>, options?: ExecuteCommandOptions): Promise<CommandResult>;
13
+ export { executeShellCommand } from './shell-executor';
14
+ export { fileList, fileRead, fileWrite } from './file-executor';
15
+ export { processKill, processList } from './process-executor';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAQlH,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,cAAc,CAAC,EAAE,aAAa,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAGD,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAEvH,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAkEvJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processList = exports.processKill = exports.fileWrite = exports.fileRead = exports.fileList = exports.executeShellCommand = void 0;
4
+ exports.executeCommand = executeCommand;
5
+ const logger_1 = require("../logger");
6
+ const utils_1 = require("../utils");
7
+ const chat_executor_1 = require("./chat-executor");
8
+ const file_executor_1 = require("./file-executor");
9
+ const process_executor_1 = require("./process-executor");
10
+ const shell_executor_1 = require("./shell-executor");
11
+ // Implementation
12
+ async function executeCommand(typeOrCommand, payloadOrOptions, options) {
13
+ const type = typeof typeOrCommand === 'string' ? typeOrCommand : typeOrCommand.type;
14
+ // Runtime payloads come from external API, so cast is safe — runtime validation happens in each executor
15
+ let p;
16
+ let opts;
17
+ if (typeof typeOrCommand === 'string') {
18
+ p = payloadOrOptions;
19
+ opts = options;
20
+ }
21
+ else {
22
+ p = typeOrCommand.payload;
23
+ opts = payloadOrOptions;
24
+ }
25
+ logger_1.logger.debug(`Executing command: type=${type}`);
26
+ try {
27
+ switch (type) {
28
+ case 'execute_command': {
29
+ const cmd = p.command;
30
+ logger_1.logger.debug(`[shell] command="${String(cmd ?? '').substring(0, 200)}"`);
31
+ return await (0, shell_executor_1.executeShellCommand)(p);
32
+ }
33
+ case 'file_read': {
34
+ const path = p.path;
35
+ logger_1.logger.debug(`[file_read] path="${String(path ?? '')}"`);
36
+ return await (0, file_executor_1.fileRead)(p);
37
+ }
38
+ case 'file_write': {
39
+ const path = p.path;
40
+ logger_1.logger.debug(`[file_write] path="${String(path ?? '')}"`);
41
+ return await (0, file_executor_1.fileWrite)(p);
42
+ }
43
+ case 'file_list': {
44
+ const path = p.path;
45
+ logger_1.logger.debug(`[file_list] path="${String(path ?? '')}"`);
46
+ return await (0, file_executor_1.fileList)(p);
47
+ }
48
+ case 'process_list':
49
+ return await (0, process_executor_1.processList)();
50
+ case 'process_kill': {
51
+ const pid = p.pid;
52
+ logger_1.logger.debug(`[process_kill] pid=${String(pid ?? '')}`);
53
+ return await (0, process_executor_1.processKill)(p);
54
+ }
55
+ case 'chat':
56
+ if (!opts?.commandId || !opts?.client) {
57
+ return { success: false, error: 'chat command requires commandId and client' };
58
+ }
59
+ return await (0, chat_executor_1.executeChatCommand)(p, opts.commandId, opts.client, opts.serverConfig, opts.activeChatMode, opts.agentId);
60
+ default:
61
+ logger_1.logger.warn(`Unknown command type: ${type}`);
62
+ return { success: false, error: `Unknown command type: ${type}` };
63
+ }
64
+ }
65
+ catch (error) {
66
+ const message = (0, utils_1.getErrorMessage)(error);
67
+ logger_1.logger.error(`Command execution failed (${type}): ${message}`);
68
+ return { success: false, error: message };
69
+ }
70
+ }
71
+ var shell_executor_2 = require("./shell-executor");
72
+ Object.defineProperty(exports, "executeShellCommand", { enumerable: true, get: function () { return shell_executor_2.executeShellCommand; } });
73
+ var file_executor_2 = require("./file-executor");
74
+ Object.defineProperty(exports, "fileList", { enumerable: true, get: function () { return file_executor_2.fileList; } });
75
+ Object.defineProperty(exports, "fileRead", { enumerable: true, get: function () { return file_executor_2.fileRead; } });
76
+ Object.defineProperty(exports, "fileWrite", { enumerable: true, get: function () { return file_executor_2.fileWrite; } });
77
+ var process_executor_2 = require("./process-executor");
78
+ Object.defineProperty(exports, "processKill", { enumerable: true, get: function () { return process_executor_2.processKill; } });
79
+ Object.defineProperty(exports, "processList", { enumerable: true, get: function () { return process_executor_2.processList; } });
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommandResult, ProcessKillPayload } from '../types';
2
+ export declare function processList(): Promise<CommandResult>;
3
+ export declare function processKill(payload: ProcessKillPayload): Promise<CommandResult>;
4
+ //# sourceMappingURL=process-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-executor.d.ts","sourceRoot":"","sources":["../../src/commands/process-executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAKjE,wBAAgB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAMpD;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
@@ -0,0 +1,66 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.processList = processList;
37
+ exports.processKill = processKill;
38
+ const os = __importStar(require("os"));
39
+ const constants_1 = require("../constants");
40
+ const security_1 = require("../security");
41
+ const utils_1 = require("../utils");
42
+ const shell_executor_1 = require("./shell-executor");
43
+ function processList() {
44
+ const command = os.platform() === 'win32'
45
+ ? 'tasklist /fo csv /nh'
46
+ : 'ps aux';
47
+ return (0, shell_executor_1.executeShellCommand)({ command, timeout: constants_1.PROCESS_LIST_TIMEOUT });
48
+ }
49
+ async function processKill(payload) {
50
+ const pid = (0, utils_1.parseNumber)(payload.pid);
51
+ if (!pid || pid < 1 || !Number.isInteger(pid)) {
52
+ return { success: false, error: 'Invalid PID: must be a positive integer' };
53
+ }
54
+ const signal = (0, utils_1.parseString)(payload.signal) ?? 'SIGTERM';
55
+ if (!security_1.ALLOWED_SIGNALS.has(signal)) {
56
+ return { success: false, error: `Signal not allowed: ${signal}. Allowed: ${[...security_1.ALLOWED_SIGNALS].join(', ')}` };
57
+ }
58
+ try {
59
+ process.kill(pid, signal);
60
+ return { success: true, data: `Sent ${signal} to PID ${pid}` };
61
+ }
62
+ catch (error) {
63
+ return { success: false, error: (0, utils_1.getErrorMessage)(error) };
64
+ }
65
+ }
66
+ //# sourceMappingURL=process-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-executor.js","sourceRoot":"","sources":["../../src/commands/process-executor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,kCAMC;AAED,kCAoBC;AArCD,uCAAwB;AAExB,4CAAmD;AACnD,0CAA6C;AAE7C,oCAAoE;AAEpE,qDAAsD;AAEtD,SAAgB,WAAW;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO;QACvC,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,QAAQ,CAAA;IAEZ,OAAO,IAAA,oCAAmB,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,gCAAoB,EAAE,CAAC,CAAA;AACxE,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,OAA2B;IAE3B,MAAM,GAAG,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAA;IAEvD,IAAI,CAAC,0BAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,MAAM,cAAc,CAAC,GAAG,0BAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;IAChH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,MAAM,WAAW,GAAG,EAAE,EAAE,CAAA;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAA,uBAAe,EAAC,KAAK,CAAC,EAAE,CAAA;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { ApiClient } from '../api-client';
2
+ import type { ChatChunkType } from '../types';
3
+ export interface ChunkSenderOptions {
4
+ debugLog?: boolean;
5
+ }
6
+ /**
7
+ * チャンクを送信する関数を生成するファクトリ
8
+ *
9
+ * @param commandId - コマンドID
10
+ * @param client - APIクライアント
11
+ * @param agentId - エージェントID
12
+ * @param logTag - ログのプレフィックスタグ(例: "chat", "api-chat")
13
+ * @param options - オプション(debugLog: チャンク送信時のデバッグログ出力)
14
+ * @returns chunkIndex を内部管理する sendChunk 関数と、現在の chunkIndex を取得する関数
15
+ */
16
+ export declare function createChunkSender(commandId: string, client: ApiClient, agentId: string, logTag: string, options?: ChunkSenderOptions): {
17
+ sendChunk: (type: ChatChunkType, content: string) => Promise<void>;
18
+ getChunkIndex: () => number;
19
+ };
20
+ //# sourceMappingURL=shared-chat-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-chat-utils.d.ts","sourceRoot":"","sources":["../../src/commands/shared-chat-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B;IACD,SAAS,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,aAAa,EAAE,MAAM,MAAM,CAAA;CAC5B,CAsBA"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createChunkSender = createChunkSender;
4
+ const logger_1 = require("../logger");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * チャンクを送信する関数を生成するファクトリ
8
+ *
9
+ * @param commandId - コマンドID
10
+ * @param client - APIクライアント
11
+ * @param agentId - エージェントID
12
+ * @param logTag - ログのプレフィックスタグ(例: "chat", "api-chat")
13
+ * @param options - オプション(debugLog: チャンク送信時のデバッグログ出力)
14
+ * @returns chunkIndex を内部管理する sendChunk 関数と、現在の chunkIndex を取得する関数
15
+ */
16
+ function createChunkSender(commandId, client, agentId, logTag, options) {
17
+ let chunkIndex = 0;
18
+ const sendChunk = async (type, content) => {
19
+ try {
20
+ if (options?.debugLog) {
21
+ logger_1.logger.debug(`[${logTag}] Sending chunk #${chunkIndex} (${type}) [${commandId}]: ${content.substring(0, 100)}${content.length > 100 ? '...' : ''}`);
22
+ }
23
+ await client.submitChatChunk(commandId, {
24
+ index: chunkIndex++,
25
+ type,
26
+ content,
27
+ }, agentId);
28
+ }
29
+ catch (error) {
30
+ logger_1.logger.warn(`[${logTag}] Failed to send chunk #${chunkIndex - 1}: ${(0, utils_1.getErrorMessage)(error)}`);
31
+ }
32
+ };
33
+ return { sendChunk, getChunkIndex: () => chunkIndex };
34
+ }
35
+ //# sourceMappingURL=shared-chat-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-chat-utils.js","sourceRoot":"","sources":["../../src/commands/shared-chat-utils.ts"],"names":[],"mappings":";;AAmBA,8CA+BC;AAjDD,sCAAkC;AAElC,oCAA0C;AAM1C;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,MAAiB,EACjB,OAAe,EACf,MAAc,EACd,OAA4B;IAK5B,IAAI,UAAU,GAAG,CAAC,CAAA;IAElB,MAAM,SAAS,GAAG,KAAK,EACrB,IAAmB,EACnB,OAAe,EACA,EAAE;QACjB,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,eAAM,CAAC,KAAK,CAAC,IAAI,MAAM,oBAAoB,UAAU,KAAK,IAAI,MAAM,SAAS,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACrJ,CAAC;YACD,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;gBACtC,KAAK,EAAE,UAAU,EAAE;gBACnB,IAAI;gBACJ,OAAO;aACR,EAAE,OAAO,CAAC,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,IAAI,MAAM,2BAA2B,UAAU,GAAG,CAAC,KAAK,IAAA,uBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC,CAAA;IAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CommandResult, ShellCommandPayload } from '../types';
2
+ export declare function executeShellCommand(payload: ShellCommandPayload): Promise<CommandResult>;
3
+ //# sourceMappingURL=shell-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/commands/shell-executor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAGlE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA2FxB"}
@@ -0,0 +1,125 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.executeShellCommand = executeShellCommand;
37
+ const child_process_1 = require("child_process");
38
+ const os = __importStar(require("os"));
39
+ const constants_1 = require("../constants");
40
+ const security_1 = require("../security");
41
+ const utils_1 = require("../utils");
42
+ async function executeShellCommand(payload) {
43
+ const command = (0, utils_1.parseString)(payload.command);
44
+ if (!command) {
45
+ return { success: false, error: 'No command specified' };
46
+ }
47
+ const validationError = (0, security_1.validateCommand)(command);
48
+ if (validationError) {
49
+ return { success: false, error: validationError };
50
+ }
51
+ const rawTimeout = (0, utils_1.parseNumber)(payload.timeout) ?? constants_1.CMD_DEFAULT_TIMEOUT;
52
+ if (rawTimeout < 1 || rawTimeout > constants_1.MAX_CMD_TIMEOUT) {
53
+ return { success: false, error: `Timeout must be between 1 and ${constants_1.MAX_CMD_TIMEOUT}ms` };
54
+ }
55
+ const timeout = rawTimeout;
56
+ const cwd = (0, utils_1.parseString)(payload.cwd) ?? os.homedir();
57
+ const cwdError = await (0, security_1.validateFilePath)(cwd);
58
+ if (cwdError) {
59
+ return { success: false, error: cwdError };
60
+ }
61
+ return new Promise((resolve) => {
62
+ let resolved = false;
63
+ const shellCmd = os.platform() === 'win32' ? 'cmd.exe' : '/bin/sh';
64
+ const shellArgs = os.platform() === 'win32' ? ['/c', command] : ['-c', command];
65
+ const proc = (0, child_process_1.spawn)(shellCmd, shellArgs, {
66
+ cwd,
67
+ env: (0, security_1.buildSafeEnv)(),
68
+ });
69
+ let stdout = '';
70
+ let stderr = '';
71
+ let outputSize = 0;
72
+ const timer = setTimeout(() => {
73
+ if (!resolved) {
74
+ resolved = true;
75
+ proc.kill('SIGKILL');
76
+ resolve({ success: false, error: `Command timed out after ${timeout}ms` });
77
+ }
78
+ }, timeout);
79
+ proc.stdout?.on('data', (data) => {
80
+ outputSize += data.length;
81
+ if (outputSize <= constants_1.MAX_OUTPUT_SIZE) {
82
+ stdout += data.toString();
83
+ }
84
+ });
85
+ proc.stderr?.on('data', (data) => {
86
+ outputSize += data.length;
87
+ if (outputSize <= constants_1.MAX_OUTPUT_SIZE) {
88
+ stderr += data.toString();
89
+ }
90
+ });
91
+ proc.on('close', (code) => {
92
+ clearTimeout(timer);
93
+ if (resolved)
94
+ return;
95
+ resolved = true;
96
+ const truncated = outputSize > constants_1.MAX_OUTPUT_SIZE;
97
+ const suffix = truncated ? '\n... [output truncated]' : '';
98
+ if (code === 0) {
99
+ resolve({ success: true, data: stdout + suffix });
100
+ }
101
+ else {
102
+ resolve({
103
+ success: false,
104
+ data: stdout + suffix,
105
+ error: stderr || `Process exited with code ${code}`,
106
+ });
107
+ }
108
+ });
109
+ proc.on('error', (err) => {
110
+ clearTimeout(timer);
111
+ if (resolved)
112
+ return;
113
+ resolved = true;
114
+ let errorMessage = err.message;
115
+ if (err.code === 'ENOENT') {
116
+ errorMessage = `Command not found: ${shellCmd}`;
117
+ }
118
+ else if (err.code === 'EACCES') {
119
+ errorMessage = `Permission denied: ${shellCmd}`;
120
+ }
121
+ resolve({ success: false, error: errorMessage });
122
+ });
123
+ });
124
+ }
125
+ //# sourceMappingURL=shell-executor.js.map