@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,296 @@
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.ProjectAgent = void 0;
37
+ const os = __importStar(require("os"));
38
+ const api_client_1 = require("./api-client");
39
+ const appsync_subscriber_1 = require("./appsync-subscriber");
40
+ const chat_mode_detector_1 = require("./chat-mode-detector");
41
+ const command_executor_1 = require("./command-executor");
42
+ const i18n_1 = require("./i18n");
43
+ const logger_1 = require("./logger");
44
+ const system_info_1 = require("./system-info");
45
+ const utils_1 = require("./utils");
46
+ class ProjectAgent {
47
+ agentId;
48
+ options;
49
+ heartbeatTimer = null;
50
+ pollTimer = null;
51
+ subscriber = null;
52
+ processing = false;
53
+ client;
54
+ prefix;
55
+ tenantCode;
56
+ serverConfig = null;
57
+ availableChatModes = [];
58
+ activeChatMode = undefined;
59
+ localAgentChatMode;
60
+ constructor(project, agentId, options, tenantCode, localAgentChatMode) {
61
+ this.agentId = agentId;
62
+ this.options = options;
63
+ this.client = new api_client_1.ApiClient(project.apiUrl, project.token);
64
+ this.prefix = `[${project.projectCode}]`;
65
+ this.tenantCode = tenantCode ?? project.projectCode;
66
+ this.localAgentChatMode = localAgentChatMode;
67
+ }
68
+ start() {
69
+ this.registerAndStart().catch((error) => {
70
+ logger_1.logger.error((0, i18n_1.t)('runner.unexpectedError', { message: (0, utils_1.getErrorMessage)(error) }));
71
+ });
72
+ }
73
+ stop() {
74
+ if (this.heartbeatTimer)
75
+ clearInterval(this.heartbeatTimer);
76
+ if (this.pollTimer)
77
+ clearInterval(this.pollTimer);
78
+ if (this.subscriber)
79
+ this.subscriber.disconnect();
80
+ }
81
+ getClient() {
82
+ return this.client;
83
+ }
84
+ async registerAndStart() {
85
+ // チャットモード検出
86
+ this.availableChatModes = await (0, chat_mode_detector_1.detectAvailableChatModes)();
87
+ logger_1.logger.info(`${this.prefix} Available chat modes: ${JSON.stringify(this.availableChatModes)}`);
88
+ // サーバーからエージェント設定を取得
89
+ try {
90
+ this.serverConfig = await this.client.getConfig();
91
+ logger_1.logger.info(`${this.prefix} Server config loaded: chatMode=${this.serverConfig.chatMode}`);
92
+ }
93
+ catch (error) {
94
+ logger_1.logger.warn(`${this.prefix} Failed to load server config, using defaults: ${(0, utils_1.getErrorMessage)(error)}`);
95
+ }
96
+ // アクティブチャットモードを決定
97
+ this.activeChatMode = (0, chat_mode_detector_1.resolveActiveChatMode)(this.availableChatModes, this.localAgentChatMode, this.serverConfig?.defaultAgentChatMode);
98
+ logger_1.logger.info(`${this.prefix} Active chat mode: ${this.activeChatMode ?? 'none'}`);
99
+ let result;
100
+ try {
101
+ result = await this.client.register({
102
+ agentId: this.agentId,
103
+ hostname: os.hostname(),
104
+ os: os.platform(),
105
+ arch: os.arch(),
106
+ ipAddress: (0, system_info_1.getLocalIpAddress)(),
107
+ capabilities: ['shell', 'file_read', 'file_write', 'process_manage', 'chat'],
108
+ availableChatModes: this.availableChatModes,
109
+ activeChatMode: this.activeChatMode,
110
+ });
111
+ logger_1.logger.success((0, i18n_1.t)('runner.registered', { prefix: this.prefix, agentId: result.agentId }));
112
+ logger_1.logger.debug(`${this.prefix} Register response: transportMode=${result.transportMode ?? 'none'}, appsyncUrl=${result.appsyncUrl ? 'present' : 'absent'}`);
113
+ }
114
+ catch (error) {
115
+ logger_1.logger.error((0, i18n_1.t)('runner.registerFailed', { prefix: this.prefix, message: (0, utils_1.getErrorMessage)(error) }));
116
+ return;
117
+ }
118
+ if (result.transportMode === 'realtime' && result.appsyncUrl && result.appsyncApiKey) {
119
+ logger_1.logger.info(`${this.prefix} Starting subscription mode (realtime)`);
120
+ await this.startSubscriptionMode(result);
121
+ }
122
+ else {
123
+ logger_1.logger.info(`${this.prefix} Starting polling mode (interval: ${this.options.pollInterval}ms)`);
124
+ this.startPollingMode();
125
+ }
126
+ this.startHeartbeat();
127
+ }
128
+ async startSubscriptionMode(registerResult) {
129
+ this.subscriber = new appsync_subscriber_1.AppSyncSubscriber(registerResult.appsyncUrl, registerResult.appsyncApiKey);
130
+ try {
131
+ await this.subscriber.connect();
132
+ logger_1.logger.success(`${this.prefix} Connected via AppSync WebSocket`);
133
+ }
134
+ catch (error) {
135
+ logger_1.logger.warn(`${this.prefix} WebSocket connection failed, falling back to polling: ${(0, utils_1.getErrorMessage)(error)}`);
136
+ this.startPollingMode();
137
+ return;
138
+ }
139
+ this.subscriber.subscribe(this.tenantCode, (notification) => { void this.handleNotification(notification); });
140
+ this.subscriber.onReconnect(() => {
141
+ logger_1.logger.info(`${this.prefix} Reconnected, checking for pending commands...`);
142
+ void this.checkPendingCommands();
143
+ });
144
+ }
145
+ startPollingMode() {
146
+ const pollCommands = async () => {
147
+ if (this.processing)
148
+ return;
149
+ this.processing = true;
150
+ try {
151
+ const pending = await this.client.getPendingCommands(this.agentId);
152
+ if (pending.length > 0) {
153
+ logger_1.logger.debug(`${this.prefix} Polling found ${pending.length} pending command(s)`);
154
+ }
155
+ for (const cmd of pending) {
156
+ logger_1.logger.info((0, i18n_1.t)('runner.commandReceived', { prefix: this.prefix, type: cmd.type, commandId: cmd.commandId }));
157
+ try {
158
+ const detail = await this.client.getCommand(cmd.commandId, this.agentId);
159
+ logger_1.logger.debug(`${this.prefix} Command detail [${cmd.commandId}]: type=${detail.type}, payload=${JSON.stringify(detail.payload).substring(0, 500)}`);
160
+ const result = await (0, command_executor_1.executeCommand)(detail.type, detail.payload, {
161
+ commandId: cmd.commandId,
162
+ client: this.client,
163
+ serverConfig: this.serverConfig ?? undefined,
164
+ activeChatMode: this.activeChatMode,
165
+ agentId: this.agentId,
166
+ });
167
+ logger_1.logger.debug(`${this.prefix} Command result [${cmd.commandId}]: success=${result.success}, data=${JSON.stringify(result.success ? result.data : result.error).substring(0, 300)}`);
168
+ await this.client.submitResult(cmd.commandId, result, this.agentId);
169
+ logger_1.logger.info((0, i18n_1.t)('runner.commandDone', {
170
+ prefix: this.prefix,
171
+ commandId: cmd.commandId,
172
+ result: result.success ? 'success' : 'failed',
173
+ }));
174
+ }
175
+ catch (error) {
176
+ const message = (0, utils_1.getErrorMessage)(error);
177
+ logger_1.logger.error((0, i18n_1.t)('runner.commandError', { prefix: this.prefix, commandId: cmd.commandId, message }));
178
+ try {
179
+ await this.client.submitResult(cmd.commandId, {
180
+ success: false,
181
+ error: message,
182
+ }, this.agentId);
183
+ }
184
+ catch {
185
+ logger_1.logger.error((0, i18n_1.t)('runner.resultSendFailed', { prefix: this.prefix }));
186
+ }
187
+ }
188
+ }
189
+ }
190
+ catch (error) {
191
+ logger_1.logger.debug(`${this.prefix} Polling error: ${(0, utils_1.getErrorMessage)(error)}`);
192
+ }
193
+ finally {
194
+ this.processing = false;
195
+ }
196
+ };
197
+ this.pollTimer = setInterval(() => {
198
+ void pollCommands();
199
+ }, this.options.pollInterval);
200
+ }
201
+ startHeartbeat() {
202
+ const sendHeartbeat = async () => {
203
+ try {
204
+ // チャットモード再検出
205
+ this.availableChatModes = await (0, chat_mode_detector_1.detectAvailableChatModes)();
206
+ // サーバー設定リフレッシュ(管理画面で変更されている可能性)
207
+ try {
208
+ this.serverConfig = await this.client.getConfig();
209
+ }
210
+ catch {
211
+ // サーバー設定取得失敗は無視(前回の設定を維持)
212
+ }
213
+ // アクティブチャットモード再計算
214
+ this.activeChatMode = (0, chat_mode_detector_1.resolveActiveChatMode)(this.availableChatModes, this.localAgentChatMode, this.serverConfig?.defaultAgentChatMode);
215
+ await this.client.heartbeat(this.agentId, (0, system_info_1.getSystemInfo)(), undefined, this.availableChatModes, this.activeChatMode);
216
+ logger_1.logger.debug(`${this.prefix} Heartbeat sent (activeChatMode=${this.activeChatMode ?? 'none'})`);
217
+ }
218
+ catch (error) {
219
+ logger_1.logger.warn((0, i18n_1.t)('runner.heartbeatFailed', { prefix: this.prefix, message: (0, utils_1.getErrorMessage)(error) }));
220
+ }
221
+ };
222
+ this.heartbeatTimer = setInterval(() => {
223
+ void sendHeartbeat();
224
+ }, this.options.heartbeatInterval);
225
+ void sendHeartbeat();
226
+ }
227
+ async handleNotification(notification) {
228
+ logger_1.logger.debug(`${this.prefix} Notification received: action=${notification.action}, content=${JSON.stringify(notification.content ?? {}).substring(0, 300)}`);
229
+ if (notification.action !== 'agent-command') {
230
+ logger_1.logger.debug(`${this.prefix} Ignoring notification with action: ${notification.action}`);
231
+ return;
232
+ }
233
+ const commandId = notification.content?.commandId;
234
+ if (!commandId) {
235
+ logger_1.logger.warn(`${this.prefix} Notification missing commandId: ${JSON.stringify(notification.content ?? {})}`);
236
+ return;
237
+ }
238
+ logger_1.logger.info((0, i18n_1.t)('runner.commandReceived', {
239
+ prefix: this.prefix,
240
+ type: notification.content?.type ?? 'unknown',
241
+ commandId,
242
+ }));
243
+ try {
244
+ const detail = await this.client.getCommand(commandId, this.agentId);
245
+ logger_1.logger.debug(`${this.prefix} Command detail [${commandId}]: type=${detail.type}, payload=${JSON.stringify(detail.payload).substring(0, 500)}`);
246
+ const result = await (0, command_executor_1.executeCommand)(detail.type, detail.payload, {
247
+ commandId,
248
+ client: this.client,
249
+ serverConfig: this.serverConfig ?? undefined,
250
+ activeChatMode: this.activeChatMode,
251
+ agentId: this.agentId,
252
+ });
253
+ logger_1.logger.debug(`${this.prefix} Command result [${commandId}]: success=${result.success}, data=${JSON.stringify(result.success ? result.data : result.error).substring(0, 300)}`);
254
+ await this.client.submitResult(commandId, result, this.agentId);
255
+ logger_1.logger.info((0, i18n_1.t)('runner.commandDone', {
256
+ prefix: this.prefix,
257
+ commandId,
258
+ result: result.success ? 'success' : 'failed',
259
+ }));
260
+ }
261
+ catch (error) {
262
+ const message = (0, utils_1.getErrorMessage)(error);
263
+ logger_1.logger.error((0, i18n_1.t)('runner.commandError', { prefix: this.prefix, commandId, message }));
264
+ try {
265
+ await this.client.submitResult(commandId, {
266
+ success: false,
267
+ error: message,
268
+ }, this.agentId);
269
+ }
270
+ catch {
271
+ logger_1.logger.error((0, i18n_1.t)('runner.resultSendFailed', { prefix: this.prefix }));
272
+ }
273
+ }
274
+ }
275
+ async checkPendingCommands() {
276
+ try {
277
+ const pending = await this.client.getPendingCommands(this.agentId);
278
+ for (const cmd of pending) {
279
+ await this.handleNotification({
280
+ id: cmd.commandId,
281
+ table: '',
282
+ pk: '',
283
+ sk: '',
284
+ tenantCode: '',
285
+ action: 'agent-command',
286
+ content: { commandId: cmd.commandId, type: cmd.type },
287
+ });
288
+ }
289
+ }
290
+ catch (error) {
291
+ logger_1.logger.warn(`${this.prefix} Failed to check pending commands: ${(0, utils_1.getErrorMessage)(error)}`);
292
+ }
293
+ }
294
+ }
295
+ exports.ProjectAgent = ProjectAgent;
296
+ //# sourceMappingURL=project-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-agent.js","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CommandResult } from './types';
2
+ export declare const BLOCKED_COMMAND_PATTERNS: RegExp[];
3
+ export declare const BLOCKED_PATH_PREFIXES: string[];
4
+ export declare const ALLOWED_SIGNALS: ReadonlySet<string>;
5
+ export declare const SAFE_ENV_KEYS: readonly string[];
6
+ export declare function getSensitiveHomePaths(): string[];
7
+ export declare function buildSafeEnv(): Record<string, string>;
8
+ export declare function validateCommand(command: string): string | null;
9
+ export declare function validateFilePath(filePath: string): Promise<string | null>;
10
+ export declare function resolveAndValidatePath(payload: {
11
+ path?: unknown;
12
+ }, defaultPath?: string): Promise<string | CommandResult>;
13
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,eAAO,MAAM,wBAAwB,UAMpC,CAAA;AAED,eAAO,MAAM,qBAAqB,UAIjC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAE9C,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAK1C,CAAA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAKhD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB/E;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAUjC"}
@@ -0,0 +1,123 @@
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.SAFE_ENV_KEYS = exports.ALLOWED_SIGNALS = exports.BLOCKED_PATH_PREFIXES = exports.BLOCKED_COMMAND_PATTERNS = void 0;
37
+ exports.getSensitiveHomePaths = getSensitiveHomePaths;
38
+ exports.buildSafeEnv = buildSafeEnv;
39
+ exports.validateCommand = validateCommand;
40
+ exports.validateFilePath = validateFilePath;
41
+ exports.resolveAndValidatePath = resolveAndValidatePath;
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const utils_1 = require("./utils");
46
+ exports.BLOCKED_COMMAND_PATTERNS = [
47
+ /\brm\s+-rf\s+\/(?!\w)/,
48
+ /\bmkfs\b/,
49
+ /\bdd\s+.*of=\/dev\//,
50
+ />\s*\/dev\/sd[a-z]/,
51
+ /:\(\)\s*\{.*\};\s*:/,
52
+ ];
53
+ exports.BLOCKED_PATH_PREFIXES = [
54
+ '/etc/', '/proc/', '/sys/', '/dev/',
55
+ // macOS: /etc → /private/etc, etc.
56
+ '/private/etc/', '/private/var/db/',
57
+ ];
58
+ exports.ALLOWED_SIGNALS = new Set([
59
+ 'SIGTERM', 'SIGUSR1', 'SIGUSR2', 'SIGINT', 'SIGHUP',
60
+ ]);
61
+ exports.SAFE_ENV_KEYS = [
62
+ 'PATH', 'HOME', 'USER', 'SHELL', 'LANG', 'LC_ALL', 'LC_MESSAGES',
63
+ 'TERM', 'TMPDIR', 'TMP', 'TEMP', 'NODE_ENV',
64
+ // Windows
65
+ 'SystemRoot', 'USERPROFILE', 'APPDATA', 'PATHEXT', 'COMSPEC',
66
+ ];
67
+ function getSensitiveHomePaths() {
68
+ const home = os.homedir();
69
+ return ['.ssh', '.aws', '.gnupg', '.config/gcloud'].map((dir) => path.join(home, dir) + '/');
70
+ }
71
+ function buildSafeEnv() {
72
+ const env = {};
73
+ for (const key of exports.SAFE_ENV_KEYS) {
74
+ if (process.env[key] !== undefined)
75
+ env[key] = process.env[key];
76
+ }
77
+ return env;
78
+ }
79
+ function validateCommand(command) {
80
+ for (const pattern of exports.BLOCKED_COMMAND_PATTERNS) {
81
+ if (pattern.test(command)) {
82
+ return `Blocked dangerous command pattern: ${pattern}`;
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ async function validateFilePath(filePath) {
88
+ let resolved;
89
+ try {
90
+ resolved = await fs.promises.realpath(filePath);
91
+ }
92
+ catch {
93
+ // File does not exist yet (e.g. file_write new file) — resolve parent directory
94
+ const parentDir = path.dirname(path.resolve(filePath));
95
+ try {
96
+ const realParent = await fs.promises.realpath(parentDir);
97
+ resolved = path.join(realParent, path.basename(filePath));
98
+ }
99
+ catch {
100
+ resolved = path.resolve(filePath);
101
+ }
102
+ }
103
+ const allBlocked = [...exports.BLOCKED_PATH_PREFIXES, ...getSensitiveHomePaths()];
104
+ for (const prefix of allBlocked) {
105
+ const prefixWithoutSlash = prefix.replace(/\/$/, '');
106
+ if (resolved === prefixWithoutSlash || resolved.startsWith(prefix)) {
107
+ return `Access denied: ${prefix} paths are blocked`;
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ async function resolveAndValidatePath(payload, defaultPath) {
113
+ const filePath = (0, utils_1.parseString)(payload.path) ?? defaultPath ?? null;
114
+ if (!filePath) {
115
+ return { success: false, error: 'No file path specified' };
116
+ }
117
+ const pathError = await validateFilePath(filePath);
118
+ if (pathError) {
119
+ return { success: false, error: pathError };
120
+ }
121
+ return filePath;
122
+ }
123
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SystemInfo } from './types';
2
+ export declare function getSystemInfo(): SystemInfo;
3
+ export declare function getLocalIpAddress(): string | undefined;
4
+ //# sourceMappingURL=system-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-info.d.ts","sourceRoot":"","sources":["../src/system-info.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,wBAAgB,aAAa,IAAI,UAAU,CAS1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAUtD"}
@@ -0,0 +1,60 @@
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.getSystemInfo = getSystemInfo;
37
+ exports.getLocalIpAddress = getLocalIpAddress;
38
+ const os = __importStar(require("os"));
39
+ function getSystemInfo() {
40
+ const cpus = os.cpus();
41
+ return {
42
+ platform: os.platform(),
43
+ arch: os.arch(),
44
+ cpuUsage: cpus.length > 0 ? (os.loadavg()[0] / cpus.length) * 100 : 0,
45
+ memoryUsage: (1 - os.freemem() / os.totalmem()) * 100,
46
+ uptime: os.uptime(),
47
+ };
48
+ }
49
+ function getLocalIpAddress() {
50
+ const interfaces = os.networkInterfaces();
51
+ for (const name of Object.keys(interfaces)) {
52
+ for (const iface of interfaces[name] ?? []) {
53
+ if (iface.family === 'IPv4' && !iface.internal) {
54
+ return iface.address;
55
+ }
56
+ }
57
+ }
58
+ return undefined;
59
+ }
60
+ //# sourceMappingURL=system-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-info.js","sourceRoot":"","sources":["../src/system-info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,sCASC;AAED,8CAUC;AAzBD,uCAAwB;AAIxB,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;IACtB,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG;QACrD,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;KACpB,CAAA;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC,OAAO,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,15 @@
1
+ export type ReleaseChannel = 'latest' | 'beta' | 'alpha';
2
+ export interface VersionInfo {
3
+ latestVersion: string;
4
+ minimumVersion: string;
5
+ channel: ReleaseChannel;
6
+ channels: Record<string, string>;
7
+ }
8
+ export interface AutoUpdateConfig {
9
+ enabled: boolean;
10
+ autoRestart: boolean;
11
+ channel: ReleaseChannel;
12
+ }
1
13
  export interface ProjectRegistration {
2
14
  projectCode: string;
3
15
  token: string;
@@ -9,6 +21,8 @@ export interface AgentConfig {
9
21
  lastConnected?: string;
10
22
  language?: string;
11
23
  projects?: ProjectRegistration[];
24
+ autoUpdate?: AutoUpdateConfig;
25
+ agentChatMode?: AgentChatMode;
12
26
  }
13
27
  /**
14
28
  * Legacy config format (pre-multi-project).
@@ -18,7 +32,7 @@ export interface LegacyAgentConfig extends AgentConfig {
18
32
  token?: string;
19
33
  apiUrl?: string;
20
34
  }
21
- export type AgentCommandType = 'execute_command' | 'file_read' | 'file_write' | 'file_list' | 'process_list' | 'process_kill';
35
+ export type AgentCommandType = 'execute_command' | 'file_read' | 'file_write' | 'file_list' | 'process_list' | 'process_kill' | 'chat';
22
36
  export type AgentCommandStatus = 'PENDING' | 'RUNNING' | 'COMPLETED' | 'FAILED' | 'TIMEOUT';
23
37
  export interface AgentCommand {
24
38
  commandId: string;
@@ -46,11 +60,16 @@ export interface RegisterRequest {
46
60
  os: string;
47
61
  arch: string;
48
62
  ipAddress?: string;
63
+ capabilities?: string[];
64
+ availableChatModes?: string[];
65
+ activeChatMode?: string;
49
66
  }
67
+ export type TransportMode = 'polling' | 'realtime';
50
68
  export interface RegisterResponse {
51
69
  agentId: string;
52
70
  appsyncUrl: string;
53
71
  appsyncApiKey: string;
72
+ transportMode: TransportMode;
54
73
  }
55
74
  export interface SystemInfo {
56
75
  platform: string;
@@ -79,4 +98,64 @@ export interface ProcessKillPayload {
79
98
  pid?: unknown;
80
99
  signal?: unknown;
81
100
  }
101
+ export interface ChatPayload {
102
+ message?: unknown;
103
+ conversationId?: unknown;
104
+ projectCode?: unknown;
105
+ history?: unknown;
106
+ }
107
+ /**
108
+ * チャットモード(ルーティング先)
109
+ * - agent: 外部エージェント経由(デフォルト)
110
+ * - builtin: サーバー内蔵エージェント
111
+ */
112
+ export type ChatMode = 'agent' | 'builtin';
113
+ /**
114
+ * エージェントチャットモード(エージェント内部の実行方式)
115
+ * - claude_code: Claude Code CLI を使用
116
+ * - api: Anthropic API 直接呼び出し
117
+ */
118
+ export type AgentChatMode = 'claude_code' | 'api';
119
+ export interface AgentServerConfig {
120
+ agentEnabled: boolean;
121
+ builtinAgentEnabled: boolean;
122
+ builtinFallbackEnabled: boolean;
123
+ externalAgentEnabled: boolean;
124
+ chatMode: ChatMode;
125
+ defaultAgentChatMode?: AgentChatMode;
126
+ claudeCodeConfig?: {
127
+ model?: string;
128
+ maxTokens?: number;
129
+ systemPrompt?: string;
130
+ allowedTools?: string[];
131
+ };
132
+ }
133
+ export type ChatChunkType = 'delta' | 'tool_call' | 'tool_result' | 'done' | 'error';
134
+ export interface ChatChunk {
135
+ index: number;
136
+ type: ChatChunkType;
137
+ content: string;
138
+ }
139
+ export type CommandDispatch = {
140
+ type: 'execute_command';
141
+ payload: ShellCommandPayload;
142
+ } | {
143
+ type: 'file_read';
144
+ payload: FileReadPayload;
145
+ } | {
146
+ type: 'file_write';
147
+ payload: FileWritePayload;
148
+ } | {
149
+ type: 'file_list';
150
+ payload: FileListPayload;
151
+ } | {
152
+ type: 'process_list';
153
+ payload: Record<string, never>;
154
+ } | {
155
+ type: 'process_kill';
156
+ payload: ProcessKillPayload;
157
+ } | {
158
+ type: 'chat';
159
+ payload: ChatPayload;
160
+ };
82
161
  //# sourceMappingURL=types.d.ts.map