@ai-support-agent/cli 0.0.2-beta.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/agent-runner.d.ts +3 -5
  2. package/dist/agent-runner.d.ts.map +1 -1
  3. package/dist/agent-runner.js +20 -121
  4. package/dist/agent-runner.js.map +1 -1
  5. package/dist/api-client.d.ts +8 -5
  6. package/dist/api-client.d.ts.map +1 -1
  7. package/dist/api-client.js +39 -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/chat-mode-detector.d.ts +19 -0
  14. package/dist/chat-mode-detector.d.ts.map +1 -0
  15. package/dist/chat-mode-detector.js +83 -0
  16. package/dist/chat-mode-detector.js.map +1 -0
  17. package/dist/cli/auth-commands.d.ts +3 -0
  18. package/dist/cli/auth-commands.d.ts.map +1 -0
  19. package/dist/cli/auth-commands.js +123 -0
  20. package/dist/cli/auth-commands.js.map +1 -0
  21. package/dist/cli/status-command.d.ts +5 -0
  22. package/dist/cli/status-command.d.ts.map +1 -0
  23. package/dist/cli/status-command.js +57 -0
  24. package/dist/cli/status-command.js.map +1 -0
  25. package/dist/cli/validators.d.ts +4 -0
  26. package/dist/cli/validators.d.ts.map +1 -0
  27. package/dist/cli/validators.js +26 -0
  28. package/dist/cli/validators.js.map +1 -0
  29. package/dist/command-executor.d.ts +2 -2
  30. package/dist/command-executor.d.ts.map +1 -1
  31. package/dist/command-executor.js +15 -303
  32. package/dist/command-executor.js.map +1 -1
  33. package/dist/commands/api-chat-executor.d.ts +8 -0
  34. package/dist/commands/api-chat-executor.d.ts.map +1 -0
  35. package/dist/commands/api-chat-executor.js +117 -0
  36. package/dist/commands/api-chat-executor.js.map +1 -0
  37. package/dist/commands/chat-executor.d.ts +11 -0
  38. package/dist/commands/chat-executor.d.ts.map +1 -0
  39. package/dist/commands/chat-executor.js +127 -0
  40. package/dist/commands/chat-executor.js.map +1 -0
  41. package/dist/commands/file-executor.d.ts +5 -0
  42. package/dist/commands/file-executor.d.ts.map +1 -0
  43. package/dist/commands/file-executor.js +97 -0
  44. package/dist/commands/file-executor.js.map +1 -0
  45. package/dist/commands/index.d.ts +16 -0
  46. package/dist/commands/index.d.ts.map +1 -0
  47. package/dist/commands/index.js +80 -0
  48. package/dist/commands/index.js.map +1 -0
  49. package/dist/commands/process-executor.d.ts +4 -0
  50. package/dist/commands/process-executor.d.ts.map +1 -0
  51. package/dist/commands/process-executor.js +66 -0
  52. package/dist/commands/process-executor.js.map +1 -0
  53. package/dist/commands/shared-chat-utils.d.ts +20 -0
  54. package/dist/commands/shared-chat-utils.d.ts.map +1 -0
  55. package/dist/commands/shared-chat-utils.js +35 -0
  56. package/dist/commands/shared-chat-utils.js.map +1 -0
  57. package/dist/commands/shell-executor.d.ts +3 -0
  58. package/dist/commands/shell-executor.d.ts.map +1 -0
  59. package/dist/commands/shell-executor.js +125 -0
  60. package/dist/commands/shell-executor.js.map +1 -0
  61. package/dist/config-manager.d.ts.map +1 -1
  62. package/dist/config-manager.js +5 -0
  63. package/dist/config-manager.js.map +1 -1
  64. package/dist/constants.d.ts +5 -2
  65. package/dist/constants.d.ts.map +1 -1
  66. package/dist/constants.js +44 -2
  67. package/dist/constants.js.map +1 -1
  68. package/dist/index.js +9 -176
  69. package/dist/index.js.map +1 -1
  70. package/dist/project-agent.d.ts +32 -0
  71. package/dist/project-agent.d.ts.map +1 -0
  72. package/dist/project-agent.js +296 -0
  73. package/dist/project-agent.js.map +1 -0
  74. package/dist/security.d.ts +13 -0
  75. package/dist/security.d.ts.map +1 -0
  76. package/dist/security.js +123 -0
  77. package/dist/security.js.map +1 -0
  78. package/dist/system-info.d.ts +4 -0
  79. package/dist/system-info.d.ts.map +1 -0
  80. package/dist/system-info.js +60 -0
  81. package/dist/system-info.js.map +1 -0
  82. package/dist/types.d.ts +67 -1
  83. package/dist/types.d.ts.map +1 -1
  84. package/package.json +5 -3
package/dist/constants.js CHANGED
@@ -1,7 +1,41 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.API_ENDPOINTS = exports.NPM_INSTALL_TIMEOUT = exports.UPDATE_CHECK_INITIAL_DELAY = exports.UPDATE_CHECK_INTERVAL = exports.PROJECT_CODE_ENV_DEFAULT = exports.PROJECT_CODE_CLI_DIRECT = exports.PROJECT_CODE_DEFAULT = exports.MAX_DIR_ENTRIES = exports.MAX_INTERVAL = exports.MIN_INTERVAL = exports.PROCESS_LIST_TIMEOUT = exports.MAX_FILE_WRITE_SIZE = exports.MAX_FILE_READ_SIZE = exports.MAX_CMD_TIMEOUT = exports.CMD_DEFAULT_TIMEOUT = exports.API_REQUEST_TIMEOUT = exports.API_BASE_DELAY_MS = exports.API_MAX_RETRIES = exports.MAX_AUTH_BODY_SIZE = exports.MAX_OUTPUT_SIZE = exports.AGENT_VERSION = exports.AUTH_TIMEOUT = exports.DEFAULT_HEARTBEAT_INTERVAL = exports.DEFAULT_POLL_INTERVAL = exports.CONFIG_FILE = exports.CONFIG_DIR = void 0;
4
37
  const fs_1 = require("fs");
38
+ const os = __importStar(require("os"));
5
39
  const path_1 = require("path");
6
40
  function getPackageVersion() {
7
41
  try {
@@ -12,10 +46,15 @@ function getPackageVersion() {
12
46
  return '0.0.0';
13
47
  }
14
48
  }
15
- exports.CONFIG_DIR = '.ai-support-agent';
49
+ exports.CONFIG_DIR = (() => {
50
+ const envDir = process.env.AI_SUPPORT_AGENT_CONFIG_DIR;
51
+ if (!envDir)
52
+ return '.ai-support-agent';
53
+ return envDir.replace(/^~(?=$|\/)/, os.homedir());
54
+ })();
16
55
  exports.CONFIG_FILE = 'config.json';
17
56
  exports.DEFAULT_POLL_INTERVAL = 3000;
18
- exports.DEFAULT_HEARTBEAT_INTERVAL = 30000;
57
+ exports.DEFAULT_HEARTBEAT_INTERVAL = 60000;
19
58
  exports.AUTH_TIMEOUT = 5 * 60 * 1000; // 5 minutes
20
59
  exports.AGENT_VERSION = getPackageVersion();
21
60
  exports.MAX_OUTPUT_SIZE = 10 * 1024 * 1024; // 10 MB
@@ -50,6 +89,9 @@ exports.API_ENDPOINTS = {
50
89
  COMMANDS_PENDING: '/api/agent/commands/pending',
51
90
  COMMAND: (commandId) => `/api/agent/commands/${commandId}`,
52
91
  COMMAND_RESULT: (commandId) => `/api/agent/commands/${commandId}/result`,
92
+ COMMAND_CHUNKS: (commandId) => `/api/agent/commands/${commandId}/chunks`,
53
93
  VERSION: '/api/agent/version',
94
+ CONNECTION_STATUS: '/api/agent/connection-status',
95
+ CONFIG: '/api/agent/config',
54
96
  };
55
97
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,2BAAiC;AACjC,+BAA2B;AAE3B,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QACpF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAEY,QAAA,UAAU,GAAG,mBAAmB,CAAA;AAChC,QAAA,WAAW,GAAG,aAAa,CAAA;AAC3B,QAAA,qBAAqB,GAAG,IAAI,CAAA;AAC5B,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAClC,QAAA,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,YAAY;AACzC,QAAA,aAAa,GAAG,iBAAiB,EAAE,CAAA;AACnC,QAAA,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC3C,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,QAAQ;AAEpD,uBAAuB;AACV,QAAA,eAAe,GAAG,CAAC,CAAA;AACnB,QAAA,iBAAiB,GAAG,IAAI,CAAA;AACxB,QAAA,mBAAmB,GAAG,MAAM,CAAA;AAEzC,6BAA6B;AAChB,QAAA,mBAAmB,GAAG,MAAM,CAAA;AAC5B,QAAA,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,aAAa;AAC9C,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC9C,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC/C,QAAA,oBAAoB,GAAG,MAAM,CAAA;AAE1C,kBAAkB;AACL,QAAA,YAAY,GAAG,IAAI,CAAA;AACnB,QAAA,YAAY,GAAG,OAAO,CAAA,CAAC,YAAY;AAEhD,0BAA0B;AACb,QAAA,eAAe,GAAG,IAAI,CAAA;AAEnC,wBAAwB;AACX,QAAA,oBAAoB,GAAG,SAAS,CAAA;AAChC,QAAA,uBAAuB,GAAG,YAAY,CAAA;AACtC,QAAA,wBAAwB,GAAG,aAAa,CAAA;AAErD,wBAAwB;AACX,QAAA,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,SAAS;AAChD,QAAA,0BAA0B,GAAG,MAAM,CAAA,CAAC,aAAa;AACjD,QAAA,mBAAmB,GAAG,OAAO,CAAA,CAAC,YAAY;AAEvD,qBAAqB;AACR,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,qBAAqB;IAC/B,SAAS,EAAE,sBAAsB;IACjC,gBAAgB,EAAE,6BAA6B;IAC/C,OAAO,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,uBAAuB,SAAS,EAAE;IAClE,cAAc,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,uBAAuB,SAAS,SAAS;IAChF,OAAO,EAAE,oBAAoB;CACrB,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,136 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  Object.defineProperty(exports, "__esModule", { value: true });
37
4
  const commander_1 = require("commander");
38
5
  const agent_runner_1 = require("./agent-runner");
39
- const auth_server_1 = require("./auth-server");
6
+ const auth_commands_1 = require("./cli/auth-commands");
7
+ const status_command_1 = require("./cli/status-command");
8
+ const validators_1 = require("./cli/validators");
40
9
  const constants_1 = require("./constants");
41
10
  const config_manager_1 = require("./config-manager");
42
11
  const i18n_1 = require("./i18n");
43
12
  const logger_1 = require("./logger");
44
- const utils_1 = require("./utils");
45
13
  (0, i18n_1.initI18n)();
46
- function parseIntervalOrExit(value, name) {
47
- const parsed = parseInt(value, 10);
48
- if (isNaN(parsed) || parsed < constants_1.MIN_INTERVAL || parsed > constants_1.MAX_INTERVAL) {
49
- logger_1.logger.error((0, i18n_1.t)('config.invalidInterval', { name, value, min: constants_1.MIN_INTERVAL, max: constants_1.MAX_INTERVAL }));
50
- process.exit(1);
51
- }
52
- return parsed;
53
- }
54
- async function performBrowserAuth(opts) {
55
- const port = opts.port ? (() => {
56
- const parsed = parseInt(opts.port, 10);
57
- if (isNaN(parsed) || parsed < 1 || parsed > 65535) {
58
- logger_1.logger.error((0, i18n_1.t)('auth.invalidPort', { port: opts.port }));
59
- process.exit(1);
60
- }
61
- return parsed;
62
- })() : undefined;
63
- const urlError = (0, utils_1.validateApiUrl)(opts.url);
64
- if (urlError) {
65
- logger_1.logger.error((0, i18n_1.t)('auth.invalidProtocol'));
66
- process.exit(1);
67
- }
68
- const origin = new URL(opts.url).origin;
69
- const { url: serverUrl, nonce, waitForCallback, stop } = await (0, auth_server_1.startAuthServer)(port, origin);
70
- const callbackUrl = `${serverUrl}/callback`;
71
- const webUrl = `${opts.url}/admin/agent-callback?callbackUrl=${encodeURIComponent(callbackUrl)}&nonce=${nonce}`;
72
- logger_1.logger.info((0, i18n_1.t)('auth.openingBrowser'));
73
- logger_1.logger.info((0, i18n_1.t)('auth.url', { url: webUrl }));
74
- const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
75
- await open(webUrl);
76
- logger_1.logger.info((0, i18n_1.t)('auth.selectProject'));
77
- const result = await waitForCallback();
78
- stop();
79
- const apiUrl = opts.apiUrl ?? result.apiUrl;
80
- if (!apiUrl) {
81
- logger_1.logger.error((0, i18n_1.t)('auth.noApiUrl'));
82
- process.exit(1);
83
- }
84
- const projectCode = result.projectCode ?? constants_1.PROJECT_CODE_DEFAULT;
85
- (0, config_manager_1.addProject)({ projectCode, token: result.token, apiUrl });
86
- return { projectCode };
87
- }
88
- async function handleBrowserAuthCommand(opts, successMessageKey) {
89
- try {
90
- const { projectCode } = await performBrowserAuth(opts);
91
- logger_1.logger.success((0, i18n_1.t)(successMessageKey, { projectCode }));
92
- }
93
- catch (error) {
94
- logger_1.logger.error((0, i18n_1.t)('auth.failed', { message: (0, utils_1.getErrorMessage)(error) }));
95
- process.exit(1);
96
- }
97
- }
98
- function formatStatus(config) {
99
- const projects = (0, config_manager_1.getProjectList)(config);
100
- const lines = [
101
- '',
102
- ` ${(0, i18n_1.t)('status.header')}`,
103
- ` ${(0, i18n_1.t)('status.agentId', { agentId: config.agentId || (0, i18n_1.t)('status.notSet') })}`,
104
- ` ${(0, i18n_1.t)('status.lastConnected', { lastConnected: config.lastConnected || (0, i18n_1.t)('status.notConnected') })}`,
105
- ];
106
- // Auto-update status
107
- const autoUpdate = config.autoUpdate;
108
- if (autoUpdate && autoUpdate.enabled === false) {
109
- lines.push(` ${(0, i18n_1.t)('status.autoUpdate', { status: (0, i18n_1.t)('update.disabled') })}`);
110
- }
111
- else {
112
- const autoRestart = autoUpdate?.autoRestart !== false ? 'true' : 'false';
113
- lines.push(` ${(0, i18n_1.t)('status.autoUpdate', { status: (0, i18n_1.t)('update.enabled', { autoRestart }) })}`);
114
- lines.push(` ${(0, i18n_1.t)('status.updateChannel', { channel: autoUpdate?.channel ?? 'latest' })}`);
115
- }
116
- lines.push('');
117
- if (projects.length === 0) {
118
- lines.push(` ${(0, i18n_1.t)('status.noProjects')}`);
119
- }
120
- else {
121
- lines.push(` ${(0, i18n_1.t)('status.projectCount', { count: projects.length })}`);
122
- for (const p of projects) {
123
- const tokenPreview = p.token.length > 4
124
- ? p.token.substring(0, 4) + '****'
125
- : '****';
126
- lines.push(` - ${p.projectCode}`);
127
- lines.push(` ${(0, i18n_1.t)('status.apiUrl', { apiUrl: p.apiUrl })}`);
128
- lines.push(` ${(0, i18n_1.t)('status.token', { token: tokenPreview })}`);
129
- }
130
- }
131
- lines.push('');
132
- return lines.join('\n');
133
- }
134
14
  const program = new commander_1.Command();
135
15
  program
136
16
  .name('ai-support-agent')
@@ -148,35 +28,18 @@ program
148
28
  .option('--no-auto-update', (0, i18n_1.t)('cmd.start.noAutoUpdate'))
149
29
  .option('--update-channel <channel>', (0, i18n_1.t)('cmd.start.updateChannel'))
150
30
  .action(async (opts) => {
151
- const validChannels = ['latest', 'beta', 'alpha'];
152
- if (opts.updateChannel && !validChannels.includes(opts.updateChannel)) {
153
- logger_1.logger.error(`Invalid update channel: ${opts.updateChannel}. Must be one of: ${validChannels.join(', ')}`);
154
- process.exit(1);
155
- }
31
+ const updateChannel = (0, validators_1.validateUpdateChannel)(opts.updateChannel);
156
32
  await (0, agent_runner_1.startAgent)({
157
33
  token: opts.token,
158
34
  apiUrl: opts.apiUrl,
159
- pollInterval: parseIntervalOrExit(opts.pollInterval, 'poll-interval'),
160
- heartbeatInterval: parseIntervalOrExit(opts.heartbeatInterval, 'heartbeat-interval'),
35
+ pollInterval: (0, validators_1.parseIntervalOrExit)(opts.pollInterval, 'poll-interval'),
36
+ heartbeatInterval: (0, validators_1.parseIntervalOrExit)(opts.heartbeatInterval, 'heartbeat-interval'),
161
37
  verbose: opts.verbose,
162
38
  autoUpdate: opts.autoUpdate,
163
- updateChannel: opts.updateChannel,
39
+ updateChannel: updateChannel,
164
40
  });
165
41
  });
166
- program
167
- .command('login')
168
- .description((0, i18n_1.t)('cmd.login'))
169
- .requiredOption('--url <url>', (0, i18n_1.t)('cmd.login.url'))
170
- .option('--api-url <url>', (0, i18n_1.t)('cmd.login.apiUrl'))
171
- .option('--port <port>', (0, i18n_1.t)('cmd.login.port'))
172
- .action((opts) => handleBrowserAuthCommand(opts, 'project.registered'));
173
- program
174
- .command('add-project')
175
- .description((0, i18n_1.t)('cmd.addProject'))
176
- .requiredOption('--url <url>', (0, i18n_1.t)('cmd.login.url'))
177
- .option('--api-url <url>', (0, i18n_1.t)('cmd.login.apiUrl'))
178
- .option('--port <port>', (0, i18n_1.t)('cmd.login.port'))
179
- .action((opts) => handleBrowserAuthCommand(opts, 'project.added'));
42
+ (0, auth_commands_1.registerAuthCommands)(program);
180
43
  program
181
44
  .command('remove-project')
182
45
  .description((0, i18n_1.t)('cmd.removeProject'))
@@ -190,26 +53,6 @@ program
190
53
  logger_1.logger.warn((0, i18n_1.t)('project.notFound', { projectCode }));
191
54
  }
192
55
  });
193
- program
194
- .command('configure')
195
- .description((0, i18n_1.t)('cmd.configure'))
196
- .requiredOption('--token <token>', (0, i18n_1.t)('cmd.configure.token'))
197
- .requiredOption('--api-url <url>', (0, i18n_1.t)('cmd.configure.apiUrl'))
198
- .option('--project-code <code>', (0, i18n_1.t)('cmd.configure.projectCode'))
199
- .action((opts) => {
200
- const apiUrlError = (0, utils_1.validateApiUrl)(opts.apiUrl);
201
- if (apiUrlError) {
202
- logger_1.logger.error(apiUrlError);
203
- process.exit(1);
204
- }
205
- const projectCode = opts.projectCode ?? constants_1.PROJECT_CODE_DEFAULT;
206
- (0, config_manager_1.addProject)({
207
- projectCode,
208
- token: opts.token,
209
- apiUrl: opts.apiUrl,
210
- });
211
- logger_1.logger.success((0, i18n_1.t)('config.projectSaved', { projectCode }));
212
- });
213
56
  program
214
57
  .command('set-language')
215
58
  .description((0, i18n_1.t)('cmd.setLanguage'))
@@ -218,16 +61,6 @@ program
218
61
  (0, config_manager_1.saveConfig)({ language: lang });
219
62
  logger_1.logger.success((0, i18n_1.t)('config.languageSet', { lang }));
220
63
  });
221
- program
222
- .command('status')
223
- .description((0, i18n_1.t)('cmd.status'))
224
- .action(() => {
225
- const config = (0, config_manager_1.loadConfig)();
226
- if (!config) {
227
- logger_1.logger.warn((0, i18n_1.t)('status.noConfig'));
228
- return;
229
- }
230
- console.log(formatStatus(config));
231
- });
64
+ (0, status_command_1.registerStatusCommand)(program);
232
65
  program.parse();
233
66
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ApiClient } from './api-client';
2
+ import type { AgentChatMode, ProjectRegistration } from './types';
3
+ export interface ProjectAgentOptions {
4
+ pollInterval: number;
5
+ heartbeatInterval: number;
6
+ }
7
+ export declare class ProjectAgent {
8
+ private readonly agentId;
9
+ private readonly options;
10
+ private heartbeatTimer;
11
+ private pollTimer;
12
+ private subscriber;
13
+ private processing;
14
+ private readonly client;
15
+ private readonly prefix;
16
+ private readonly tenantCode;
17
+ private serverConfig;
18
+ private availableChatModes;
19
+ private activeChatMode;
20
+ private readonly localAgentChatMode;
21
+ constructor(project: ProjectRegistration, agentId: string, options: ProjectAgentOptions, tenantCode?: string, localAgentChatMode?: AgentChatMode);
22
+ start(): void;
23
+ stop(): void;
24
+ getClient(): ApiClient;
25
+ private registerAndStart;
26
+ private startSubscriptionMode;
27
+ private startPollingMode;
28
+ private startHeartbeat;
29
+ private handleNotification;
30
+ private checkPendingCommands;
31
+ }
32
+ //# sourceMappingURL=project-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-agent.d.ts","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAOxC,OAAO,KAAK,EAAE,aAAa,EAAqB,mBAAmB,EAAoB,MAAM,SAAS,CAAA;AAGtG,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,qBAAa,YAAY;IAerB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAf1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;gBAG5D,OAAO,EAAE,mBAAmB,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC7C,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,aAAa;IAQpC,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAMZ,SAAS,IAAI,SAAS;YAIR,gBAAgB;YAmDhB,qBAAqB;IAuBnC,OAAO,CAAC,gBAAgB;IA6DxB,OAAO,CAAC,cAAc;YAwCR,kBAAkB;YAsDlB,oBAAoB;CAkBnC"}
@@ -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