@ai-support-agent/cli 0.0.1

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 (52) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +159 -0
  4. package/dist/agent-runner.d.ts +21 -0
  5. package/dist/agent-runner.d.ts.map +1 -0
  6. package/dist/agent-runner.js +251 -0
  7. package/dist/agent-runner.js.map +1 -0
  8. package/dist/api-client.d.ts +14 -0
  9. package/dist/api-client.d.ts.map +1 -0
  10. package/dist/api-client.js +112 -0
  11. package/dist/api-client.js.map +1 -0
  12. package/dist/auth-server.d.ts +12 -0
  13. package/dist/auth-server.d.ts.map +1 -0
  14. package/dist/auth-server.js +151 -0
  15. package/dist/auth-server.js.map +1 -0
  16. package/dist/command-executor.d.ts +3 -0
  17. package/dist/command-executor.d.ts.map +1 -0
  18. package/dist/command-executor.js +306 -0
  19. package/dist/command-executor.js.map +1 -0
  20. package/dist/config-manager.d.ts +18 -0
  21. package/dist/config-manager.d.ts.map +1 -0
  22. package/dist/config-manager.js +175 -0
  23. package/dist/config-manager.js.map +1 -0
  24. package/dist/constants.d.ts +30 -0
  25. package/dist/constants.d.ts.map +1 -0
  26. package/dist/constants.js +50 -0
  27. package/dist/constants.js.map +1 -0
  28. package/dist/i18n.d.ts +3 -0
  29. package/dist/i18n.d.ts.map +1 -0
  30. package/dist/i18n.js +109 -0
  31. package/dist/i18n.js.map +1 -0
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +214 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/locales/en.json +78 -0
  37. package/dist/locales/ja.json +78 -0
  38. package/dist/locales/locales/en.json +78 -0
  39. package/dist/locales/locales/ja.json +78 -0
  40. package/dist/logger.d.ts +9 -0
  41. package/dist/logger.d.ts.map +1 -0
  42. package/dist/logger.js +41 -0
  43. package/dist/logger.js.map +1 -0
  44. package/dist/types.d.ts +82 -0
  45. package/dist/types.d.ts.map +1 -0
  46. package/dist/types.js +3 -0
  47. package/dist/types.js.map +1 -0
  48. package/dist/utils.d.ts +5 -0
  49. package/dist/utils.d.ts.map +1 -0
  50. package/dist/utils.js +32 -0
  51. package/dist/utils.js.map +1 -0
  52. package/package.json +51 -0
@@ -0,0 +1,175 @@
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.loadConfig = loadConfig;
37
+ exports.saveConfig = saveConfig;
38
+ exports.getOrCreateAgentId = getOrCreateAgentId;
39
+ exports.clearConfig = clearConfig;
40
+ exports.addProject = addProject;
41
+ exports.removeProject = removeProject;
42
+ exports.getProjectList = getProjectList;
43
+ const fs = __importStar(require("fs"));
44
+ const os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ const crypto = __importStar(require("crypto"));
47
+ const constants_1 = require("./constants");
48
+ const i18n_1 = require("./i18n");
49
+ const logger_1 = require("./logger");
50
+ function getConfigDir() {
51
+ return path.join(os.homedir(), constants_1.CONFIG_DIR);
52
+ }
53
+ function getConfigPath() {
54
+ return path.join(getConfigDir(), constants_1.CONFIG_FILE);
55
+ }
56
+ function writeConfigFile(configPath, data) {
57
+ const tmpPath = configPath + '.tmp';
58
+ fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2), { mode: 0o600 });
59
+ fs.renameSync(tmpPath, configPath);
60
+ }
61
+ function generateAgentId() {
62
+ const hostname = os.hostname().toLowerCase().replace(/[^a-z0-9-]/g, '-');
63
+ const randomHex = crypto.randomBytes(8).toString('hex');
64
+ return `${hostname}-${randomHex}`;
65
+ }
66
+ /**
67
+ * Migrate legacy single-token config to multi-project format.
68
+ * Returns migrated config if migration was performed, otherwise returns as-is.
69
+ */
70
+ function migrateConfigIfNeeded(raw) {
71
+ if (raw.token && raw.apiUrl && (!raw.projects || raw.projects.length === 0)) {
72
+ logger_1.logger.info((0, i18n_1.t)('config.migrating'));
73
+ const migrated = {
74
+ agentId: raw.agentId,
75
+ createdAt: raw.createdAt,
76
+ lastConnected: raw.lastConnected,
77
+ language: raw.language,
78
+ projects: [{
79
+ projectCode: constants_1.PROJECT_CODE_DEFAULT,
80
+ token: raw.token,
81
+ apiUrl: raw.apiUrl,
82
+ }],
83
+ };
84
+ const configPath = getConfigPath();
85
+ writeConfigFile(configPath, migrated);
86
+ logger_1.logger.success((0, i18n_1.t)('config.migrated'));
87
+ return migrated;
88
+ }
89
+ return raw;
90
+ }
91
+ function loadConfig() {
92
+ const configPath = getConfigPath();
93
+ try {
94
+ if (!fs.existsSync(configPath)) {
95
+ return null;
96
+ }
97
+ const data = fs.readFileSync(configPath, 'utf-8');
98
+ const raw = JSON.parse(data);
99
+ return migrateConfigIfNeeded(raw);
100
+ }
101
+ catch (error) {
102
+ logger_1.logger.warn((0, i18n_1.t)('config.readError', { error: String(error) }));
103
+ return null;
104
+ }
105
+ }
106
+ function saveConfig(config) {
107
+ const configDir = getConfigDir();
108
+ if (fs.existsSync(configDir)) {
109
+ fs.chmodSync(configDir, 0o700);
110
+ }
111
+ else {
112
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
113
+ }
114
+ const existing = loadConfig();
115
+ const merged = {
116
+ agentId: config.agentId ?? existing?.agentId ?? generateAgentId(),
117
+ createdAt: existing?.createdAt ?? new Date().toISOString(),
118
+ lastConnected: config.lastConnected ?? existing?.lastConnected,
119
+ language: config.language ?? existing?.language,
120
+ projects: config.projects ?? existing?.projects,
121
+ };
122
+ const configPath = getConfigPath();
123
+ writeConfigFile(configPath, merged);
124
+ logger_1.logger.debug((0, i18n_1.t)('config.savedDebug', { path: configPath }));
125
+ }
126
+ function getOrCreateAgentId() {
127
+ const config = loadConfig();
128
+ if (config?.agentId) {
129
+ return config.agentId;
130
+ }
131
+ const agentId = generateAgentId();
132
+ saveConfig({ agentId });
133
+ return agentId;
134
+ }
135
+ function clearConfig() {
136
+ const configPath = getConfigPath();
137
+ if (fs.existsSync(configPath)) {
138
+ fs.unlinkSync(configPath);
139
+ }
140
+ }
141
+ /**
142
+ * Add a project (upsert by projectCode)
143
+ */
144
+ function addProject(registration) {
145
+ const config = loadConfig();
146
+ const projects = config?.projects ?? [];
147
+ const existing = projects.findIndex((p) => p.projectCode === registration.projectCode);
148
+ if (existing >= 0) {
149
+ projects[existing] = registration;
150
+ }
151
+ else {
152
+ projects.push(registration);
153
+ }
154
+ saveConfig({ projects });
155
+ }
156
+ /**
157
+ * Remove a project by code
158
+ */
159
+ function removeProject(projectCode) {
160
+ const config = loadConfig();
161
+ const projects = config?.projects ?? [];
162
+ const filtered = projects.filter((p) => p.projectCode !== projectCode);
163
+ if (filtered.length === projects.length) {
164
+ return false;
165
+ }
166
+ saveConfig({ projects: filtered });
167
+ return true;
168
+ }
169
+ /**
170
+ * Get registered project list
171
+ */
172
+ function getProjectList(config) {
173
+ return config.projects ?? [];
174
+ }
175
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const CONFIG_DIR = ".ai-support-agent";
2
+ export declare const CONFIG_FILE = "config.json";
3
+ export declare const DEFAULT_POLL_INTERVAL = 3000;
4
+ export declare const DEFAULT_HEARTBEAT_INTERVAL = 30000;
5
+ export declare const AUTH_TIMEOUT: number;
6
+ export declare const AGENT_VERSION: string;
7
+ export declare const MAX_OUTPUT_SIZE: number;
8
+ export declare const MAX_AUTH_BODY_SIZE: number;
9
+ export declare const API_MAX_RETRIES = 3;
10
+ export declare const API_BASE_DELAY_MS = 1000;
11
+ export declare const API_REQUEST_TIMEOUT = 10000;
12
+ export declare const CMD_DEFAULT_TIMEOUT = 60000;
13
+ export declare const MAX_CMD_TIMEOUT: number;
14
+ export declare const MAX_FILE_READ_SIZE: number;
15
+ export declare const MAX_FILE_WRITE_SIZE: number;
16
+ export declare const PROCESS_LIST_TIMEOUT = 10000;
17
+ export declare const MIN_INTERVAL = 1000;
18
+ export declare const MAX_INTERVAL = 300000;
19
+ export declare const MAX_DIR_ENTRIES = 1000;
20
+ export declare const PROJECT_CODE_DEFAULT = "default";
21
+ export declare const PROJECT_CODE_CLI_DIRECT = "cli-direct";
22
+ export declare const PROJECT_CODE_ENV_DEFAULT = "env-default";
23
+ export declare const API_ENDPOINTS: {
24
+ readonly REGISTER: "/api/agent/register";
25
+ readonly HEARTBEAT: "/api/agent/heartbeat";
26
+ readonly COMMANDS_PENDING: "/api/agent/commands/pending";
27
+ readonly COMMAND: (commandId: string) => string;
28
+ readonly COMMAND_RESULT: (commandId: string) => string;
29
+ };
30
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,UAAU,sBAAsB,CAAA;AAC7C,eAAO,MAAM,WAAW,gBAAgB,CAAA;AACxC,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,eAAO,MAAM,0BAA0B,QAAQ,CAAA;AAC/C,eAAO,MAAM,YAAY,QAAgB,CAAA;AACzC,eAAO,MAAM,aAAa,QAAsB,CAAA;AAChD,eAAO,MAAM,eAAe,QAAmB,CAAA;AAC/C,eAAO,MAAM,kBAAkB,QAAY,CAAA;AAG3C,eAAO,MAAM,eAAe,IAAI,CAAA;AAChC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AACrC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAGzC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,eAAO,MAAM,eAAe,QAAiB,CAAA;AAC7C,eAAO,MAAM,kBAAkB,QAAmB,CAAA;AAClD,eAAO,MAAM,mBAAmB,QAAmB,CAAA;AACnD,eAAO,MAAM,oBAAoB,QAAS,CAAA;AAG1C,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,YAAY,SAAU,CAAA;AAGnC,eAAO,MAAM,eAAe,OAAO,CAAA;AAGnC,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C,eAAO,MAAM,uBAAuB,eAAe,CAAA;AACnD,eAAO,MAAM,wBAAwB,gBAAgB,CAAA;AAGrD,eAAO,MAAM,aAAa;;;;kCAIH,MAAM;yCACC,MAAM;CAC1B,CAAA"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.API_ENDPOINTS = 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
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ function getPackageVersion() {
7
+ try {
8
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
9
+ return pkg.version ?? '0.0.0';
10
+ }
11
+ catch {
12
+ return '0.0.0';
13
+ }
14
+ }
15
+ exports.CONFIG_DIR = '.ai-support-agent';
16
+ exports.CONFIG_FILE = 'config.json';
17
+ exports.DEFAULT_POLL_INTERVAL = 3000;
18
+ exports.DEFAULT_HEARTBEAT_INTERVAL = 30000;
19
+ exports.AUTH_TIMEOUT = 5 * 60 * 1000; // 5 minutes
20
+ exports.AGENT_VERSION = getPackageVersion();
21
+ exports.MAX_OUTPUT_SIZE = 10 * 1024 * 1024; // 10 MB
22
+ exports.MAX_AUTH_BODY_SIZE = 64 * 1024; // 64 KB
23
+ // API client constants
24
+ exports.API_MAX_RETRIES = 3;
25
+ exports.API_BASE_DELAY_MS = 1000;
26
+ exports.API_REQUEST_TIMEOUT = 10_000;
27
+ // Command executor constants
28
+ exports.CMD_DEFAULT_TIMEOUT = 60_000;
29
+ exports.MAX_CMD_TIMEOUT = 10 * 60 * 1000; // 10 minutes
30
+ exports.MAX_FILE_READ_SIZE = 10 * 1024 * 1024; // 10 MB
31
+ exports.MAX_FILE_WRITE_SIZE = 10 * 1024 * 1024; // 10 MB
32
+ exports.PROCESS_LIST_TIMEOUT = 10_000;
33
+ // Interval bounds
34
+ exports.MIN_INTERVAL = 1000;
35
+ exports.MAX_INTERVAL = 300_000; // 5 minutes
36
+ // Directory listing limit
37
+ exports.MAX_DIR_ENTRIES = 1000;
38
+ // Default project codes
39
+ exports.PROJECT_CODE_DEFAULT = 'default';
40
+ exports.PROJECT_CODE_CLI_DIRECT = 'cli-direct';
41
+ exports.PROJECT_CODE_ENV_DEFAULT = 'env-default';
42
+ // API endpoint paths
43
+ exports.API_ENDPOINTS = {
44
+ REGISTER: '/api/agent/register',
45
+ HEARTBEAT: '/api/agent/heartbeat',
46
+ COMMANDS_PENDING: '/api/agent/commands/pending',
47
+ COMMAND: (commandId) => `/api/agent/commands/${commandId}`,
48
+ COMMAND_RESULT: (commandId) => `/api/agent/commands/${commandId}/result`,
49
+ };
50
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +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,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;CACxE,CAAA"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function initI18n(explicitLang?: string): void;
2
+ export declare function t(key: string, params?: Record<string, string | number>): string;
3
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAqEA,wBAAgB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAM/E"}
package/dist/i18n.js ADDED
@@ -0,0 +1,109 @@
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.initI18n = initI18n;
37
+ exports.t = t;
38
+ const fs = __importStar(require("fs"));
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const constants_1 = require("./constants");
42
+ let translations = {};
43
+ let fallback = {};
44
+ function detectLocale() {
45
+ // 1. CLI --lang flag (pre-parse process.argv)
46
+ const langIdx = process.argv.indexOf('--lang');
47
+ if (langIdx !== -1 && process.argv[langIdx + 1]) {
48
+ return process.argv[langIdx + 1];
49
+ }
50
+ // 2. config.json language setting
51
+ try {
52
+ const configDir = path.join(os.homedir(), constants_1.CONFIG_DIR);
53
+ const configPath = path.join(configDir, constants_1.CONFIG_FILE);
54
+ if (fs.existsSync(configPath)) {
55
+ const data = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
56
+ if (data.language) {
57
+ return data.language;
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // ignore config read errors
63
+ }
64
+ // 3. Environment variables
65
+ const envLang = process.env.LC_ALL || process.env.LC_MESSAGES || process.env.LANG;
66
+ if (envLang) {
67
+ return envLang.split('.')[0].split('_')[0];
68
+ }
69
+ // 4. Intl
70
+ try {
71
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale;
72
+ if (locale) {
73
+ return locale.split('-')[0];
74
+ }
75
+ }
76
+ catch {
77
+ // ignore
78
+ }
79
+ // 5. Fallback
80
+ return 'en';
81
+ }
82
+ function loadLocale(lang) {
83
+ if (!/^[a-z]{2}$/.test(lang)) {
84
+ return {};
85
+ }
86
+ const localesDir = path.join(__dirname, 'locales');
87
+ const filePath = path.join(localesDir, `${lang}.json`);
88
+ try {
89
+ if (fs.existsSync(filePath)) {
90
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
91
+ }
92
+ }
93
+ catch {
94
+ // ignore load errors
95
+ }
96
+ return {};
97
+ }
98
+ function initI18n(explicitLang) {
99
+ const lang = explicitLang || detectLocale();
100
+ fallback = loadLocale('en');
101
+ translations = lang === 'en' ? fallback : { ...fallback, ...loadLocale(lang) };
102
+ }
103
+ function t(key, params) {
104
+ const template = translations[key] ?? fallback[key] ?? key;
105
+ if (!params)
106
+ return template;
107
+ return template.replace(/\{\{(\w+)\}\}/g, (_, name) => params[name] !== undefined ? String(params[name]) : `{{${name}}}`);
108
+ }
109
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
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
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const agent_runner_1 = require("./agent-runner");
39
+ const auth_server_1 = require("./auth-server");
40
+ const constants_1 = require("./constants");
41
+ const config_manager_1 = require("./config-manager");
42
+ const i18n_1 = require("./i18n");
43
+ const logger_1 = require("./logger");
44
+ const utils_1 = require("./utils");
45
+ (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
+ ];
107
+ if (projects.length === 0) {
108
+ lines.push(` ${(0, i18n_1.t)('status.noProjects')}`);
109
+ }
110
+ else {
111
+ lines.push(` ${(0, i18n_1.t)('status.projectCount', { count: projects.length })}`);
112
+ for (const p of projects) {
113
+ const tokenPreview = p.token.length > 4
114
+ ? p.token.substring(0, 4) + '****'
115
+ : '****';
116
+ lines.push(` - ${p.projectCode}`);
117
+ lines.push(` ${(0, i18n_1.t)('status.apiUrl', { apiUrl: p.apiUrl })}`);
118
+ lines.push(` ${(0, i18n_1.t)('status.token', { token: tokenPreview })}`);
119
+ }
120
+ }
121
+ lines.push('');
122
+ return lines.join('\n');
123
+ }
124
+ const program = new commander_1.Command();
125
+ program
126
+ .name('ai-support-agent')
127
+ .description((0, i18n_1.t)('cmd.description'))
128
+ .version(constants_1.AGENT_VERSION)
129
+ .option('--lang <lang>', (0, i18n_1.t)('cmd.lang'));
130
+ program
131
+ .command('start')
132
+ .description((0, i18n_1.t)('cmd.start'))
133
+ .option('--token <token>', (0, i18n_1.t)('cmd.start.token'))
134
+ .option('--api-url <url>', (0, i18n_1.t)('cmd.start.apiUrl'))
135
+ .option('--poll-interval <ms>', (0, i18n_1.t)('cmd.start.pollInterval'), '3000')
136
+ .option('--heartbeat-interval <ms>', (0, i18n_1.t)('cmd.start.heartbeatInterval'), '30000')
137
+ .option('--verbose', (0, i18n_1.t)('cmd.start.verbose'))
138
+ .action(async (opts) => {
139
+ await (0, agent_runner_1.startAgent)({
140
+ token: opts.token,
141
+ apiUrl: opts.apiUrl,
142
+ pollInterval: parseIntervalOrExit(opts.pollInterval, 'poll-interval'),
143
+ heartbeatInterval: parseIntervalOrExit(opts.heartbeatInterval, 'heartbeat-interval'),
144
+ verbose: opts.verbose,
145
+ });
146
+ });
147
+ program
148
+ .command('login')
149
+ .description((0, i18n_1.t)('cmd.login'))
150
+ .requiredOption('--url <url>', (0, i18n_1.t)('cmd.login.url'))
151
+ .option('--api-url <url>', (0, i18n_1.t)('cmd.login.apiUrl'))
152
+ .option('--port <port>', (0, i18n_1.t)('cmd.login.port'))
153
+ .action((opts) => handleBrowserAuthCommand(opts, 'project.registered'));
154
+ program
155
+ .command('add-project')
156
+ .description((0, i18n_1.t)('cmd.addProject'))
157
+ .requiredOption('--url <url>', (0, i18n_1.t)('cmd.login.url'))
158
+ .option('--api-url <url>', (0, i18n_1.t)('cmd.login.apiUrl'))
159
+ .option('--port <port>', (0, i18n_1.t)('cmd.login.port'))
160
+ .action((opts) => handleBrowserAuthCommand(opts, 'project.added'));
161
+ program
162
+ .command('remove-project')
163
+ .description((0, i18n_1.t)('cmd.removeProject'))
164
+ .argument('<projectCode>', (0, i18n_1.t)('cmd.removeProject.arg'))
165
+ .action((projectCode) => {
166
+ const removed = (0, config_manager_1.removeProject)(projectCode);
167
+ if (removed) {
168
+ logger_1.logger.success((0, i18n_1.t)('project.removed', { projectCode }));
169
+ }
170
+ else {
171
+ logger_1.logger.warn((0, i18n_1.t)('project.notFound', { projectCode }));
172
+ }
173
+ });
174
+ program
175
+ .command('configure')
176
+ .description((0, i18n_1.t)('cmd.configure'))
177
+ .requiredOption('--token <token>', (0, i18n_1.t)('cmd.configure.token'))
178
+ .requiredOption('--api-url <url>', (0, i18n_1.t)('cmd.configure.apiUrl'))
179
+ .option('--project-code <code>', (0, i18n_1.t)('cmd.configure.projectCode'))
180
+ .action((opts) => {
181
+ const apiUrlError = (0, utils_1.validateApiUrl)(opts.apiUrl);
182
+ if (apiUrlError) {
183
+ logger_1.logger.error(apiUrlError);
184
+ process.exit(1);
185
+ }
186
+ const projectCode = opts.projectCode ?? constants_1.PROJECT_CODE_DEFAULT;
187
+ (0, config_manager_1.addProject)({
188
+ projectCode,
189
+ token: opts.token,
190
+ apiUrl: opts.apiUrl,
191
+ });
192
+ logger_1.logger.success((0, i18n_1.t)('config.projectSaved', { projectCode }));
193
+ });
194
+ program
195
+ .command('set-language')
196
+ .description((0, i18n_1.t)('cmd.setLanguage'))
197
+ .argument('<lang>', (0, i18n_1.t)('cmd.setLanguage.arg'))
198
+ .action((lang) => {
199
+ (0, config_manager_1.saveConfig)({ language: lang });
200
+ logger_1.logger.success((0, i18n_1.t)('config.languageSet', { lang }));
201
+ });
202
+ program
203
+ .command('status')
204
+ .description((0, i18n_1.t)('cmd.status'))
205
+ .action(() => {
206
+ const config = (0, config_manager_1.loadConfig)();
207
+ if (!config) {
208
+ logger_1.logger.warn((0, i18n_1.t)('status.noConfig'));
209
+ return;
210
+ }
211
+ console.log(formatStatus(config));
212
+ });
213
+ program.parse();
214
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}