@memnexus-ai/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/.env.example +13 -0
  2. package/.eslintrc.js +24 -0
  3. package/.github/ISSUE_TEMPLATE/phase-1-foundation.md +1078 -0
  4. package/.github/workflows/publish.yml +277 -0
  5. package/.github/workflows/test-app-token.yml +54 -0
  6. package/.npmrc.backup +3 -0
  7. package/.npmrc.example +6 -0
  8. package/.prettierignore +4 -0
  9. package/.prettierrc +8 -0
  10. package/CHANGELOG.md +138 -0
  11. package/PLATFORM_TESTING.md +243 -0
  12. package/README.md +986 -0
  13. package/RELEASE.md +428 -0
  14. package/RELEASE_READINESS.md +253 -0
  15. package/USAGE.md +1373 -0
  16. package/bin/mx.js +2 -0
  17. package/dist/commands/apikeys.d.ts +7 -0
  18. package/dist/commands/apikeys.d.ts.map +1 -0
  19. package/dist/commands/apikeys.js +133 -0
  20. package/dist/commands/apikeys.js.map +1 -0
  21. package/dist/commands/artifacts.d.ts +7 -0
  22. package/dist/commands/artifacts.d.ts.map +1 -0
  23. package/dist/commands/artifacts.js +277 -0
  24. package/dist/commands/artifacts.js.map +1 -0
  25. package/dist/commands/auth.d.ts +7 -0
  26. package/dist/commands/auth.d.ts.map +1 -0
  27. package/dist/commands/auth.js +119 -0
  28. package/dist/commands/auth.js.map +1 -0
  29. package/dist/commands/communities.d.ts +7 -0
  30. package/dist/commands/communities.d.ts.map +1 -0
  31. package/dist/commands/communities.js +137 -0
  32. package/dist/commands/communities.js.map +1 -0
  33. package/dist/commands/config.d.ts +7 -0
  34. package/dist/commands/config.d.ts.map +1 -0
  35. package/dist/commands/config.js +138 -0
  36. package/dist/commands/config.js.map +1 -0
  37. package/dist/commands/conversations.d.ts +7 -0
  38. package/dist/commands/conversations.d.ts.map +1 -0
  39. package/dist/commands/conversations.js +160 -0
  40. package/dist/commands/conversations.js.map +1 -0
  41. package/dist/commands/facts.d.ts +7 -0
  42. package/dist/commands/facts.d.ts.map +1 -0
  43. package/dist/commands/facts.js +298 -0
  44. package/dist/commands/facts.js.map +1 -0
  45. package/dist/commands/graphrag.d.ts +7 -0
  46. package/dist/commands/graphrag.d.ts.map +1 -0
  47. package/dist/commands/graphrag.js +139 -0
  48. package/dist/commands/graphrag.js.map +1 -0
  49. package/dist/commands/memories.d.ts +7 -0
  50. package/dist/commands/memories.d.ts.map +1 -0
  51. package/dist/commands/memories.js +304 -0
  52. package/dist/commands/memories.js.map +1 -0
  53. package/dist/commands/patterns.d.ts +7 -0
  54. package/dist/commands/patterns.d.ts.map +1 -0
  55. package/dist/commands/patterns.js +227 -0
  56. package/dist/commands/patterns.js.map +1 -0
  57. package/dist/commands/system.d.ts +7 -0
  58. package/dist/commands/system.d.ts.map +1 -0
  59. package/dist/commands/system.js +97 -0
  60. package/dist/commands/system.js.map +1 -0
  61. package/dist/commands/topics.d.ts +7 -0
  62. package/dist/commands/topics.d.ts.map +1 -0
  63. package/dist/commands/topics.js +314 -0
  64. package/dist/commands/topics.js.map +1 -0
  65. package/dist/index.d.ts +3 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +44 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/lib/api-client.d.ts +29 -0
  70. package/dist/lib/api-client.d.ts.map +1 -0
  71. package/dist/lib/api-client.js +64 -0
  72. package/dist/lib/api-client.js.map +1 -0
  73. package/dist/lib/auth.d.ts +10 -0
  74. package/dist/lib/auth.d.ts.map +1 -0
  75. package/dist/lib/auth.js +47 -0
  76. package/dist/lib/auth.js.map +1 -0
  77. package/dist/lib/config.d.ts +19 -0
  78. package/dist/lib/config.d.ts.map +1 -0
  79. package/dist/lib/config.js +59 -0
  80. package/dist/lib/config.js.map +1 -0
  81. package/dist/lib/errors.d.ts +7 -0
  82. package/dist/lib/errors.d.ts.map +1 -0
  83. package/dist/lib/errors.js +133 -0
  84. package/dist/lib/errors.js.map +1 -0
  85. package/dist/lib/formatters.d.ts +12 -0
  86. package/dist/lib/formatters.d.ts.map +1 -0
  87. package/dist/lib/formatters.js +103 -0
  88. package/dist/lib/formatters.js.map +1 -0
  89. package/dist/lib/spinner.d.ts +54 -0
  90. package/dist/lib/spinner.d.ts.map +1 -0
  91. package/dist/lib/spinner.js +108 -0
  92. package/dist/lib/spinner.js.map +1 -0
  93. package/dist/lib/validators.d.ts +92 -0
  94. package/dist/lib/validators.d.ts.map +1 -0
  95. package/dist/lib/validators.js +257 -0
  96. package/dist/lib/validators.js.map +1 -0
  97. package/dist/types/index.d.ts +13 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +3 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/docs/README.md +219 -0
  102. package/docs/code-generation-strategy.md +560 -0
  103. package/docs/prd.md +748 -0
  104. package/docs/sync-strategy.md +533 -0
  105. package/jest.config.js +30 -0
  106. package/package.json +67 -0
  107. package/scripts/install-deps.sh +38 -0
  108. package/src/commands/apikeys.ts +144 -0
  109. package/src/commands/artifacts.ts +296 -0
  110. package/src/commands/auth.ts +122 -0
  111. package/src/commands/communities.ts +153 -0
  112. package/src/commands/config.ts +144 -0
  113. package/src/commands/conversations.ts +176 -0
  114. package/src/commands/facts.ts +320 -0
  115. package/src/commands/graphrag.ts +149 -0
  116. package/src/commands/memories.ts +332 -0
  117. package/src/commands/patterns.ts +251 -0
  118. package/src/commands/system.ts +102 -0
  119. package/src/commands/topics.ts +354 -0
  120. package/src/index.ts +43 -0
  121. package/src/lib/api-client.ts +68 -0
  122. package/src/lib/auth.ts +42 -0
  123. package/src/lib/config.ts +68 -0
  124. package/src/lib/errors.ts +143 -0
  125. package/src/lib/formatters.ts +123 -0
  126. package/src/lib/spinner.ts +113 -0
  127. package/src/lib/validators.ts +302 -0
  128. package/src/types/index.ts +17 -0
  129. package/tests/__mocks__/chalk.ts +16 -0
  130. package/tests/__mocks__/cli-table3.ts +37 -0
  131. package/tests/__mocks__/configstore.ts +38 -0
  132. package/tests/commands/apikeys.test.ts +179 -0
  133. package/tests/commands/artifacts.test.ts +194 -0
  134. package/tests/commands/auth.test.ts +120 -0
  135. package/tests/commands/communities.test.ts +154 -0
  136. package/tests/commands/config.test.ts +154 -0
  137. package/tests/commands/conversations.test.ts +136 -0
  138. package/tests/commands/facts.test.ts +210 -0
  139. package/tests/commands/graphrag.test.ts +194 -0
  140. package/tests/commands/memories.test.ts +215 -0
  141. package/tests/commands/patterns.test.ts +201 -0
  142. package/tests/commands/system.test.ts +172 -0
  143. package/tests/commands/topics.test.ts +274 -0
  144. package/tests/lib/auth.test.ts +77 -0
  145. package/tests/lib/config.test.ts +50 -0
  146. package/tests/lib/errors.test.ts +126 -0
  147. package/tests/lib/formatters.test.ts +87 -0
  148. package/tsconfig.json +20 -0
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.storeApiKey = storeApiKey;
7
+ exports.removeApiKey = removeApiKey;
8
+ exports.hasApiKey = hasApiKey;
9
+ exports.getApiKeyStatus = getApiKeyStatus;
10
+ exports.encryptApiKey = encryptApiKey;
11
+ exports.decryptApiKey = decryptApiKey;
12
+ const config_1 = require("./config");
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ function storeApiKey(apiKey) {
15
+ if (!apiKey || apiKey.trim().length === 0) {
16
+ throw new Error('API key cannot be empty');
17
+ }
18
+ // TODO: Add encryption before storing
19
+ config_1.config.setApiKey(apiKey);
20
+ console.log(chalk_1.default.green('✓ API key saved successfully'));
21
+ }
22
+ function removeApiKey() {
23
+ config_1.config.delete('apiKey');
24
+ console.log(chalk_1.default.green('✓ API key removed'));
25
+ }
26
+ function hasApiKey() {
27
+ return config_1.config.hasApiKey();
28
+ }
29
+ function getApiKeyStatus() {
30
+ if (process.env.MX_API_KEY) {
31
+ return { configured: true, source: 'env' };
32
+ }
33
+ if (config_1.config.get('apiKey')) {
34
+ return { configured: true, source: 'config' };
35
+ }
36
+ return { configured: false, source: 'none' };
37
+ }
38
+ // TODO: Implement encryption/decryption
39
+ function encryptApiKey(apiKey) {
40
+ // Placeholder - implement proper encryption
41
+ return apiKey;
42
+ }
43
+ function decryptApiKey(encryptedKey) {
44
+ // Placeholder - implement proper decryption
45
+ return encryptedKey;
46
+ }
47
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":";;;;;AAGA,kCAQC;AAED,oCAGC;AAED,8BAEC;AAED,0CAQC;AAGD,sCAGC;AAED,sCAGC;AAzCD,qCAAkC;AAClC,kDAA0B;AAE1B,SAAgB,WAAW,CAAC,MAAc;IACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,sCAAsC;IACtC,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,YAAY;IAC1B,eAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,eAAM,CAAC,SAAS,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,wCAAwC;AACxC,SAAgB,aAAa,CAAC,MAAc;IAC1C,4CAA4C;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CAAC,YAAoB;IAChD,4CAA4C;IAC5C,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { CLIConfig } from '../types';
2
+ declare class ConfigManager {
3
+ private store;
4
+ constructor();
5
+ get(key?: keyof CLIConfig): CLIConfig | string | number | undefined;
6
+ set(key: keyof CLIConfig, value: string | number): void;
7
+ delete(key: keyof CLIConfig): void;
8
+ clear(): void;
9
+ reset(): void;
10
+ getApiUrl(): string;
11
+ getApiKey(): string | undefined;
12
+ getFormat(): 'json' | 'table' | 'yaml';
13
+ setApiKey(apiKey: string): void;
14
+ hasApiKey(): boolean;
15
+ }
16
+ export declare const config: ConfigManager;
17
+ export declare const getConfig: () => CLIConfig;
18
+ export {};
19
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AASrC,cAAM,aAAa;IACjB,OAAO,CAAC,KAAK,CAAc;;IAM3B,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IAOnE,GAAG,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;IAIb,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,SAAS,IAAI,MAAM,GAAG,OAAO,GAAG,MAAM;IAQtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,SAAS,IAAI,OAAO;CAGrB;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC;AAC1C,eAAO,MAAM,SAAS,QAAO,SAAsC,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfig = exports.config = void 0;
7
+ const configstore_1 = __importDefault(require("configstore"));
8
+ const package_json_1 = __importDefault(require("../../package.json"));
9
+ const DEFAULT_CONFIG = {
10
+ apiUrl: 'https://api.memnexus.io',
11
+ defaultFormat: 'table',
12
+ defaultPageSize: 20,
13
+ };
14
+ class ConfigManager {
15
+ store;
16
+ constructor() {
17
+ this.store = new configstore_1.default(package_json_1.default.name, DEFAULT_CONFIG);
18
+ }
19
+ get(key) {
20
+ if (key) {
21
+ return this.store.get(key);
22
+ }
23
+ return this.store.all;
24
+ }
25
+ set(key, value) {
26
+ this.store.set(key, value);
27
+ }
28
+ delete(key) {
29
+ this.store.delete(key);
30
+ }
31
+ clear() {
32
+ this.store.clear();
33
+ }
34
+ reset() {
35
+ this.store.all = DEFAULT_CONFIG;
36
+ }
37
+ getApiUrl() {
38
+ return process.env.MX_API_URL || this.store.get('apiUrl') || DEFAULT_CONFIG.apiUrl;
39
+ }
40
+ getApiKey() {
41
+ return process.env.MX_API_KEY || this.store.get('apiKey');
42
+ }
43
+ getFormat() {
44
+ return (process.env.MX_OUTPUT_FORMAT ||
45
+ this.store.get('defaultFormat') ||
46
+ DEFAULT_CONFIG.defaultFormat);
47
+ }
48
+ setApiKey(apiKey) {
49
+ // TODO: Encrypt API key before storing
50
+ this.store.set('apiKey', apiKey);
51
+ }
52
+ hasApiKey() {
53
+ return !!(process.env.MX_API_KEY || this.store.get('apiKey'));
54
+ }
55
+ }
56
+ exports.config = new ConfigManager();
57
+ const getConfig = () => exports.config.get();
58
+ exports.getConfig = getConfig;
59
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AAEtC,sEAA6C;AAE7C,MAAM,cAAc,GAA4B;IAC9C,MAAM,EAAE,yBAAyB;IACjC,aAAa,EAAE,OAAO;IACtB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEF,MAAM,aAAa;IACT,KAAK,CAAc;IAE3B;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAW,CAAC,sBAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,GAAG,CAAC,GAAqB;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAA2B,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,GAAoB,EAAE,KAAsB;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAa,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,GAAoB;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAK,cAAc,CAAC,MAAiB,CAAC;IACjG,CAAC;IAED,SAAS;QACP,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS;QACP,OAAO,CACJ,OAAO,CAAC,GAAG,CAAC,gBAA8C;YAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAA+B;YAC7D,cAAc,CAAC,aAA2C,CAC5D,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,SAAS;QACP,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;CACF;AAEY,QAAA,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AACnC,MAAM,SAAS,GAAG,GAAc,EAAE,CAAC,cAAM,CAAC,GAAG,EAAe,CAAC;AAAvD,QAAA,SAAS,aAA8C"}
@@ -0,0 +1,7 @@
1
+ export declare class CLIError extends Error {
2
+ exitCode: number;
3
+ details?: unknown | undefined;
4
+ constructor(message: string, exitCode?: number, details?: unknown | undefined);
5
+ }
6
+ export declare function handleError(error: unknown): never;
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAS,SAAQ,KAAK;IAGxB,QAAQ,EAAE,MAAM;IAChB,OAAO,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM,EACR,QAAQ,GAAE,MAAU,EACpB,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAsBjD"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CLIError = void 0;
7
+ exports.handleError = handleError;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ class CLIError extends Error {
10
+ exitCode;
11
+ details;
12
+ constructor(message, exitCode = 1, details) {
13
+ super(message);
14
+ this.exitCode = exitCode;
15
+ this.details = details;
16
+ this.name = 'CLIError';
17
+ }
18
+ }
19
+ exports.CLIError = CLIError;
20
+ function handleError(error) {
21
+ if (error instanceof CLIError) {
22
+ console.error(chalk_1.default.red(`Error: ${error.message}`));
23
+ if (error.details && process.env.DEBUG) {
24
+ console.error(chalk_1.default.gray(JSON.stringify(error.details, null, 2)));
25
+ }
26
+ process.exit(error.exitCode);
27
+ }
28
+ if (isAxiosError(error)) {
29
+ handleApiError(error);
30
+ }
31
+ // Unknown error
32
+ console.error(chalk_1.default.red('An unexpected error occurred'));
33
+ if (error instanceof Error) {
34
+ console.error(chalk_1.default.gray(error.message));
35
+ if (process.env.DEBUG && error.stack) {
36
+ console.error(chalk_1.default.gray(error.stack));
37
+ }
38
+ }
39
+ process.exit(1);
40
+ }
41
+ function isAxiosError(error) {
42
+ return error.isAxiosError === true;
43
+ }
44
+ function handleApiError(error) {
45
+ if (!error.response) {
46
+ console.error(chalk_1.default.red('❌ Network Error: Unable to connect to API'));
47
+ console.log(chalk_1.default.yellow('\n💡 Troubleshooting steps:'));
48
+ console.log(chalk_1.default.yellow(' 1. Check your internet connection'));
49
+ console.log(chalk_1.default.yellow(' 2. Verify API URL: mx config get apiUrl'));
50
+ console.log(chalk_1.default.yellow(' 3. Test API connectivity: curl <api-url>/health'));
51
+ console.log(chalk_1.default.yellow(' 4. Update API URL if needed: mx config set apiUrl <url>'));
52
+ process.exit(4);
53
+ }
54
+ const status = error.response.status;
55
+ const data = error.response.data;
56
+ // Each case calls process.exit() which never returns, so break statements are unnecessary
57
+ // eslint-disable-next-line no-fallthrough
58
+ switch (status) {
59
+ case 401:
60
+ console.error(chalk_1.default.red('❌ Authentication Error: Invalid or missing API key'));
61
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
62
+ console.log(chalk_1.default.yellow(' 1. Check auth status: mx auth status'));
63
+ console.log(chalk_1.default.yellow(' 2. Login with your API key: mx auth login --api-key <your-key>'));
64
+ console.log(chalk_1.default.yellow(' 3. Or use interactive mode: mx auth login --interactive'));
65
+ process.exit(3);
66
+ // eslint-disable-next-line no-fallthrough
67
+ case 403:
68
+ console.error(chalk_1.default.red('❌ Authorization Error: Insufficient permissions'));
69
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
70
+ console.log(chalk_1.default.yellow(' 1. Verify your API key has the required permissions'));
71
+ console.log(chalk_1.default.yellow(' 2. Contact your administrator if you need additional access'));
72
+ console.log(chalk_1.default.yellow(' 3. Check your current auth status: mx auth status'));
73
+ process.exit(3);
74
+ // eslint-disable-next-line no-fallthrough
75
+ case 404:
76
+ console.error(chalk_1.default.red('❌ Not Found: Resource does not exist'));
77
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
78
+ console.log(chalk_1.default.yellow(' 1. Verify the resource ID is correct'));
79
+ console.log(chalk_1.default.yellow(' 2. List available resources to find the correct ID'));
80
+ console.log(chalk_1.default.yellow(' 3. Check if the resource was deleted'));
81
+ process.exit(1);
82
+ // eslint-disable-next-line no-fallthrough
83
+ case 422:
84
+ console.error(chalk_1.default.red('❌ Validation Error: Invalid input'));
85
+ if (data.message) {
86
+ console.error(chalk_1.default.yellow(`\n${data.message}`));
87
+ }
88
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
89
+ console.log(chalk_1.default.yellow(' 1. Check the command syntax: mx <command> --help'));
90
+ console.log(chalk_1.default.yellow(' 2. Verify all required fields are provided'));
91
+ console.log(chalk_1.default.yellow(' 3. Use --interactive mode for guided input'));
92
+ process.exit(2);
93
+ // eslint-disable-next-line no-fallthrough
94
+ case 429:
95
+ console.error(chalk_1.default.red('❌ Rate Limit Exceeded: Too many requests'));
96
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
97
+ console.log(chalk_1.default.yellow(' 1. Wait a few moments before retrying'));
98
+ console.log(chalk_1.default.yellow(' 2. Reduce the frequency of your requests'));
99
+ console.log(chalk_1.default.yellow(' 3. Contact support if you need a higher rate limit'));
100
+ process.exit(5);
101
+ // eslint-disable-next-line no-fallthrough
102
+ case 500:
103
+ console.error(chalk_1.default.red('❌ Server Error: Internal server error'));
104
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
105
+ console.log(chalk_1.default.yellow(' 1. Try again in a few moments'));
106
+ console.log(chalk_1.default.yellow(' 2. Check API status: mx system health'));
107
+ console.log(chalk_1.default.yellow(' 3. Contact support if the issue persists'));
108
+ if (data.error || data.message) {
109
+ console.error(chalk_1.default.gray(`\nDetails: ${data.error || data.message}`));
110
+ }
111
+ process.exit(5);
112
+ // eslint-disable-next-line no-fallthrough
113
+ case 503:
114
+ console.error(chalk_1.default.red('❌ Service Unavailable: API is temporarily unavailable'));
115
+ console.log(chalk_1.default.yellow('\n💡 To fix this:'));
116
+ console.log(chalk_1.default.yellow(' 1. The service may be undergoing maintenance'));
117
+ console.log(chalk_1.default.yellow(' 2. Try again in a few minutes'));
118
+ console.log(chalk_1.default.yellow(' 3. Check API status: mx system health'));
119
+ process.exit(5);
120
+ // eslint-disable-next-line no-fallthrough
121
+ default:
122
+ console.error(chalk_1.default.red(`❌ API Error: ${status} ${error.response.statusText}`));
123
+ if (data.error || data.message) {
124
+ console.error(chalk_1.default.yellow(`\n${data.error || data.message}`));
125
+ }
126
+ console.log(chalk_1.default.yellow('\n💡 For help:'));
127
+ console.log(chalk_1.default.yellow(' 1. Run with DEBUG=1 for more details'));
128
+ console.log(chalk_1.default.yellow(' 2. Check command syntax: mx <command> --help'));
129
+ console.log(chalk_1.default.yellow(' 3. Contact support if the issue persists'));
130
+ process.exit(5);
131
+ }
132
+ }
133
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { OutputFormat } from '../types';
2
+ export declare function formatOutput(data: unknown, format?: OutputFormat, tableOptions?: TableOptions): string;
3
+ export declare function formatJson(data: unknown): string;
4
+ export declare function formatYaml(data: unknown): string;
5
+ interface TableOptions {
6
+ columns?: string[];
7
+ maxColumnWidth?: number;
8
+ }
9
+ export declare function formatTable(data: unknown, options?: TableOptions): string;
10
+ export declare function printOutput(data: unknown, format?: OutputFormat, tableOptions?: TableOptions): void;
11
+ export {};
12
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,YAAY,EACrB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAaR;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAoBzE;AAyDD,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,YAAY,EACrB,YAAY,CAAC,EAAE,YAAY,GAC1B,IAAI,CAGN"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatOutput = formatOutput;
7
+ exports.formatJson = formatJson;
8
+ exports.formatYaml = formatYaml;
9
+ exports.formatTable = formatTable;
10
+ exports.printOutput = printOutput;
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const cli_table3_1 = __importDefault(require("cli-table3"));
13
+ const js_yaml_1 = __importDefault(require("js-yaml"));
14
+ const config_1 = require("./config");
15
+ function formatOutput(data, format, tableOptions) {
16
+ const outputFormat = format || config_1.config.getFormat();
17
+ switch (outputFormat) {
18
+ case 'json':
19
+ return formatJson(data);
20
+ case 'yaml':
21
+ return formatYaml(data);
22
+ case 'table':
23
+ return formatTable(data, tableOptions);
24
+ default:
25
+ return formatJson(data);
26
+ }
27
+ }
28
+ function formatJson(data) {
29
+ return JSON.stringify(data, null, 2);
30
+ }
31
+ function formatYaml(data) {
32
+ return js_yaml_1.default.dump(data, { indent: 2, lineWidth: 120 });
33
+ }
34
+ function formatTable(data, options) {
35
+ if (!data) {
36
+ return 'No data';
37
+ }
38
+ // Single object
39
+ if (typeof data === 'object' && !Array.isArray(data)) {
40
+ return formatObjectAsTable(data);
41
+ }
42
+ // Array of objects
43
+ if (Array.isArray(data)) {
44
+ if (data.length === 0) {
45
+ return 'No results';
46
+ }
47
+ return formatArrayAsTable(data, options);
48
+ }
49
+ // Primitive value
50
+ return String(data);
51
+ }
52
+ function formatObjectAsTable(obj) {
53
+ const table = new cli_table3_1.default({
54
+ head: [chalk_1.default.cyan('Property'), chalk_1.default.cyan('Value')],
55
+ colWidths: [30, 70],
56
+ wordWrap: true,
57
+ });
58
+ Object.entries(obj).forEach(([key, value]) => {
59
+ table.push([key, formatValue(value)]);
60
+ });
61
+ return table.toString();
62
+ }
63
+ function formatArrayAsTable(data, options) {
64
+ const firstItem = data[0];
65
+ if (typeof firstItem !== 'object' || firstItem === null) {
66
+ // Array of primitives
67
+ const table = new cli_table3_1.default({ head: [chalk_1.default.cyan('Value')] });
68
+ data.forEach((item) => table.push([formatValue(item)]));
69
+ return table.toString();
70
+ }
71
+ // Array of objects - use keys from first object
72
+ const keys = options?.columns || Object.keys(firstItem);
73
+ const table = new cli_table3_1.default({
74
+ head: keys.map((k) => chalk_1.default.cyan(k)),
75
+ wordWrap: true,
76
+ colWidths: keys.map(() => options?.maxColumnWidth || 30),
77
+ });
78
+ data.forEach((item) => {
79
+ const row = keys.map((key) => {
80
+ const value = item[key];
81
+ return formatValue(value);
82
+ });
83
+ table.push(row);
84
+ });
85
+ return table.toString();
86
+ }
87
+ function formatValue(value) {
88
+ if (value === null || value === undefined) {
89
+ return chalk_1.default.gray('null');
90
+ }
91
+ if (typeof value === 'boolean') {
92
+ return value ? chalk_1.default.green('true') : chalk_1.default.red('false');
93
+ }
94
+ if (typeof value === 'object') {
95
+ return JSON.stringify(value);
96
+ }
97
+ return String(value);
98
+ }
99
+ function printOutput(data, format, tableOptions) {
100
+ const output = formatOutput(data, format, tableOptions);
101
+ console.log(output);
102
+ }
103
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { OutputFormat } from '../types';
2
+ /**
3
+ * Conditional spinner that only shows when output format is not JSON
4
+ * This prevents spinners from interfering with JSON output that may be piped to other tools
5
+ */
6
+ export declare class ConditionalSpinner {
7
+ private spinner;
8
+ private enabled;
9
+ constructor(text: string, format?: OutputFormat | string);
10
+ /**
11
+ * Start the spinner
12
+ */
13
+ start(): this;
14
+ /**
15
+ * Stop the spinner and show success message
16
+ */
17
+ succeed(text?: string): this;
18
+ /**
19
+ * Stop the spinner and show failure message
20
+ */
21
+ fail(text?: string): this;
22
+ /**
23
+ * Stop the spinner and show warning message
24
+ */
25
+ warn(text?: string): this;
26
+ /**
27
+ * Stop the spinner and show info message
28
+ */
29
+ info(text?: string): this;
30
+ /**
31
+ * Stop the spinner
32
+ */
33
+ stop(): this;
34
+ /**
35
+ * Update spinner text
36
+ */
37
+ set text(value: string);
38
+ /**
39
+ * Get spinner text
40
+ */
41
+ get text(): string;
42
+ /**
43
+ * Check if spinner is currently spinning
44
+ */
45
+ get isSpinning(): boolean;
46
+ }
47
+ /**
48
+ * Create a conditional spinner that respects output format
49
+ * @param text - Initial spinner text
50
+ * @param format - Output format (spinner disabled for 'json')
51
+ * @returns ConditionalSpinner instance
52
+ */
53
+ export declare function createSpinner(text: string, format?: OutputFormat | string): ConditionalSpinner;
54
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAU;gBAEb,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IASxD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOzB;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOzB;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOzB;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAIrB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;CACF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAE9F"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConditionalSpinner = void 0;
7
+ exports.createSpinner = createSpinner;
8
+ const ora_1 = __importDefault(require("ora"));
9
+ /**
10
+ * Conditional spinner that only shows when output format is not JSON
11
+ * This prevents spinners from interfering with JSON output that may be piped to other tools
12
+ */
13
+ class ConditionalSpinner {
14
+ spinner = null;
15
+ enabled;
16
+ constructor(text, format) {
17
+ // Disable spinner for JSON output format
18
+ this.enabled = format !== 'json';
19
+ if (this.enabled) {
20
+ this.spinner = (0, ora_1.default)(text);
21
+ }
22
+ }
23
+ /**
24
+ * Start the spinner
25
+ */
26
+ start() {
27
+ if (this.enabled && this.spinner) {
28
+ this.spinner.start();
29
+ }
30
+ return this;
31
+ }
32
+ /**
33
+ * Stop the spinner and show success message
34
+ */
35
+ succeed(text) {
36
+ if (this.enabled && this.spinner) {
37
+ this.spinner.succeed(text);
38
+ }
39
+ return this;
40
+ }
41
+ /**
42
+ * Stop the spinner and show failure message
43
+ */
44
+ fail(text) {
45
+ if (this.enabled && this.spinner) {
46
+ this.spinner.fail(text);
47
+ }
48
+ return this;
49
+ }
50
+ /**
51
+ * Stop the spinner and show warning message
52
+ */
53
+ warn(text) {
54
+ if (this.enabled && this.spinner) {
55
+ this.spinner.warn(text);
56
+ }
57
+ return this;
58
+ }
59
+ /**
60
+ * Stop the spinner and show info message
61
+ */
62
+ info(text) {
63
+ if (this.enabled && this.spinner) {
64
+ this.spinner.info(text);
65
+ }
66
+ return this;
67
+ }
68
+ /**
69
+ * Stop the spinner
70
+ */
71
+ stop() {
72
+ if (this.enabled && this.spinner) {
73
+ this.spinner.stop();
74
+ }
75
+ return this;
76
+ }
77
+ /**
78
+ * Update spinner text
79
+ */
80
+ set text(value) {
81
+ if (this.enabled && this.spinner) {
82
+ this.spinner.text = value;
83
+ }
84
+ }
85
+ /**
86
+ * Get spinner text
87
+ */
88
+ get text() {
89
+ return this.enabled && this.spinner ? this.spinner.text : '';
90
+ }
91
+ /**
92
+ * Check if spinner is currently spinning
93
+ */
94
+ get isSpinning() {
95
+ return this.enabled && this.spinner ? this.spinner.isSpinning : false;
96
+ }
97
+ }
98
+ exports.ConditionalSpinner = ConditionalSpinner;
99
+ /**
100
+ * Create a conditional spinner that respects output format
101
+ * @param text - Initial spinner text
102
+ * @param format - Output format (spinner disabled for 'json')
103
+ * @returns ConditionalSpinner instance
104
+ */
105
+ function createSpinner(text, format) {
106
+ return new ConditionalSpinner(text, format);
107
+ }
108
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":";;;;;;AA8GA,sCAEC;AAhHD,8CAA+B;AAG/B;;;GAGG;AACH,MAAa,kBAAkB;IACrB,OAAO,GAAe,IAAI,CAAC;IAC3B,OAAO,CAAU;IAEzB,YAAY,IAAY,EAAE,MAA8B;QACtD,yCAAyC;QACzC,IAAI,CAAC,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC;QAEjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAA,aAAG,EAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAa;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAa;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,IAAI,CAAC,KAAa;QACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,CAAC;CACF;AA/FD,gDA+FC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,MAA8B;IACxE,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC"}