@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,97 @@
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.registerSystemCommands = registerSystemCommands;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const mx_typescript_sdk_1 = require("@memnexus-ai/mx-typescript-sdk");
10
+ const api_client_1 = require("../lib/api-client");
11
+ const errors_1 = require("../lib/errors");
12
+ const formatters_1 = require("../lib/formatters");
13
+ /**
14
+ * Register system management commands
15
+ * @param program - Commander program instance
16
+ */
17
+ function registerSystemCommands(program) {
18
+ const system = program.command('system').description('System health and statistics');
19
+ /**
20
+ * mx system health
21
+ * Check system health status
22
+ */
23
+ system
24
+ .command('health')
25
+ .description('Check system health')
26
+ .option('--format <format>', 'Output format (json|table|yaml)')
27
+ .action(async (options) => {
28
+ try {
29
+ const spinner = (0, ora_1.default)('Checking system health...').start();
30
+ const result = await (0, mx_typescript_sdk_1.getSystemHealth)({
31
+ ...(0, api_client_1.getApiOptions)(),
32
+ });
33
+ spinner.succeed('Health check completed');
34
+ const healthData = result.data;
35
+ if (healthData) {
36
+ const status = healthData.status === 'healthy' ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
37
+ console.log(`${status} Status: ${healthData.status}`);
38
+ if (healthData.components) {
39
+ console.log(chalk_1.default.gray('\nComponent Status:'));
40
+ Object.entries(healthData.components).forEach(([name, status]) => {
41
+ const icon = status.status === 'healthy' ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
42
+ console.log(` ${icon} ${name}: ${status.status}`);
43
+ });
44
+ }
45
+ if (options.format && options.format !== 'table') {
46
+ (0, formatters_1.printOutput)(healthData, options.format);
47
+ }
48
+ }
49
+ }
50
+ catch (error) {
51
+ (0, errors_1.handleError)(error);
52
+ }
53
+ });
54
+ /**
55
+ * mx system status
56
+ * Get detailed system status
57
+ */
58
+ system
59
+ .command('status')
60
+ .description('Get system status')
61
+ .option('--format <format>', 'Output format (json|table|yaml)')
62
+ .action(async (options) => {
63
+ try {
64
+ const spinner = (0, ora_1.default)('Fetching system status...').start();
65
+ const result = await (0, mx_typescript_sdk_1.getContextStatus)({
66
+ ...(0, api_client_1.getApiOptions)(),
67
+ });
68
+ spinner.succeed('Status retrieved');
69
+ (0, formatters_1.printOutput)(result.data, options.format);
70
+ }
71
+ catch (error) {
72
+ (0, errors_1.handleError)(error);
73
+ }
74
+ });
75
+ /**
76
+ * mx system features
77
+ * Get feature flags
78
+ */
79
+ system
80
+ .command('features')
81
+ .description('Get feature flags')
82
+ .option('--format <format>', 'Output format (json|table|yaml)')
83
+ .action(async (options) => {
84
+ try {
85
+ const spinner = (0, ora_1.default)('Fetching feature flags...').start();
86
+ const result = await (0, mx_typescript_sdk_1.getFeatureFlags)({
87
+ ...(0, api_client_1.getApiOptions)(),
88
+ });
89
+ spinner.succeed('Feature flags retrieved');
90
+ (0, formatters_1.printOutput)(result.data, options.format);
91
+ }
92
+ catch (error) {
93
+ (0, errors_1.handleError)(error);
94
+ }
95
+ });
96
+ }
97
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register topic management commands
4
+ * @param program - Commander program instance
5
+ */
6
+ export declare function registerTopicsCommands(program: Command): void;
7
+ //# sourceMappingURL=topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../src/commands/topics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0U7D"}
@@ -0,0 +1,314 @@
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.registerTopicsCommands = registerTopicsCommands;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const mx_typescript_sdk_1 = require("@memnexus-ai/mx-typescript-sdk");
11
+ const api_client_1 = require("../lib/api-client");
12
+ const errors_1 = require("../lib/errors");
13
+ const formatters_1 = require("../lib/formatters");
14
+ /**
15
+ * Register topic management commands
16
+ * @param program - Commander program instance
17
+ */
18
+ function registerTopicsCommands(program) {
19
+ const topics = program.command('topics').description('Manage topics and graph operations');
20
+ /**
21
+ * mx topics list [options]
22
+ * List topics with pagination
23
+ */
24
+ topics
25
+ .command('list')
26
+ .description('List topics')
27
+ .option('--page <number>', 'Page number', '0')
28
+ .option('--limit <number>', 'Results per page', '20')
29
+ .option('--context-id <id>', 'Filter by context')
30
+ .option('--format <format>', 'Output format (json|table|yaml)')
31
+ .action(async (options) => {
32
+ try {
33
+ const page = parseInt(options.page, 10);
34
+ const limit = parseInt(options.limit, 10);
35
+ const offset = page * limit;
36
+ const result = await (0, mx_typescript_sdk_1.listTopics)({
37
+ ...(0, api_client_1.getApiOptions)(),
38
+ query: {
39
+ limit,
40
+ offset,
41
+ },
42
+ });
43
+ const responseData = result.data;
44
+ if (options.format === 'table' || !options.format) {
45
+ const tableData = (responseData?.data || []).map((t) => ({
46
+ id: t.id,
47
+ name: t.name || 'N/A',
48
+ memoryCount: t.memoryCount || 0,
49
+ createdAt: new Date(t.createdAt).toLocaleDateString(),
50
+ }));
51
+ (0, formatters_1.printOutput)(tableData, options.format, {
52
+ columns: ['id', 'name', 'memoryCount', 'createdAt'],
53
+ maxColumnWidth: 30,
54
+ });
55
+ const pagination = responseData?.pagination;
56
+ if (pagination) {
57
+ console.log(chalk_1.default.gray(`\nShowing ${pagination.offset + 1}-${pagination.offset + (responseData?.data?.length || 0)} (Page ${page + 1})`));
58
+ }
59
+ }
60
+ else {
61
+ (0, formatters_1.printOutput)(responseData, options.format);
62
+ }
63
+ }
64
+ catch (error) {
65
+ (0, errors_1.handleError)(error);
66
+ }
67
+ });
68
+ /**
69
+ * mx topics get <id>
70
+ * Get a specific topic by ID
71
+ */
72
+ topics
73
+ .command('get <id>')
74
+ .description('Get topic details')
75
+ .option('--format <format>', 'Output format (json|table|yaml)')
76
+ .action(async (id, options) => {
77
+ try {
78
+ const result = await (0, mx_typescript_sdk_1.getTopicById)({
79
+ ...(0, api_client_1.getApiOptions)(),
80
+ path: { id },
81
+ });
82
+ (0, formatters_1.printOutput)(result.data, options.format);
83
+ }
84
+ catch (error) {
85
+ (0, errors_1.handleError)(error);
86
+ }
87
+ });
88
+ /**
89
+ * mx topics merge [options]
90
+ * Merge two topics
91
+ */
92
+ topics
93
+ .command('merge')
94
+ .description('Merge two topics')
95
+ .option('--source-id <id>', 'Source topic ID')
96
+ .option('--target-id <id>', 'Target topic ID')
97
+ .option('--force', 'Skip confirmation')
98
+ .option('--format <format>', 'Output format (json|table|yaml)')
99
+ .action(async (options) => {
100
+ try {
101
+ if (!options.sourceId || !options.targetId) {
102
+ console.log(chalk_1.default.red('Error: --source-id and --target-id are required'));
103
+ return;
104
+ }
105
+ if (!options.force) {
106
+ const answer = await inquirer_1.default.prompt([
107
+ {
108
+ type: 'confirm',
109
+ name: 'confirm',
110
+ message: `Merge topic ${options.sourceId} into ${options.targetId}?`,
111
+ default: false,
112
+ },
113
+ ]);
114
+ if (!answer.confirm) {
115
+ console.log(chalk_1.default.gray('Merge cancelled'));
116
+ return;
117
+ }
118
+ }
119
+ const spinner = (0, ora_1.default)('Merging topics...').start();
120
+ const result = await (0, mx_typescript_sdk_1.mergeTopics)({
121
+ ...(0, api_client_1.getApiOptions)(),
122
+ body: {
123
+ sourceTopicId: options.sourceId,
124
+ targetTopicId: options.targetId,
125
+ },
126
+ });
127
+ spinner.succeed('Topics merged successfully');
128
+ (0, formatters_1.printOutput)(result.data, options.format);
129
+ }
130
+ catch (error) {
131
+ (0, errors_1.handleError)(error);
132
+ }
133
+ });
134
+ /**
135
+ * mx topics discover-related [options]
136
+ * Discover related topics
137
+ */
138
+ topics
139
+ .command('discover-related')
140
+ .description('Discover related topics')
141
+ .option('--topic-id <id>', 'Topic ID (required)')
142
+ .option('--context-id <id>', 'Filter by context')
143
+ .option('--limit <number>', 'Max results', '20')
144
+ .option('--format <format>', 'Output format (json|table|yaml)')
145
+ .action(async (options) => {
146
+ try {
147
+ if (!options.topicId) {
148
+ console.log(chalk_1.default.red('Error: --topic-id is required'));
149
+ return;
150
+ }
151
+ const spinner = (0, ora_1.default)('Discovering related topics...').start();
152
+ const result = await (0, mx_typescript_sdk_1.discoverRelatedTopics)({
153
+ ...(0, api_client_1.getApiOptions)(),
154
+ body: {
155
+ topicId: options.topicId,
156
+ limit: parseInt(options.limit, 10),
157
+ },
158
+ });
159
+ spinner.succeed('Related topics discovered');
160
+ const responseData = result.data;
161
+ if (options.format === 'table' || !options.format) {
162
+ const tableData = (responseData?.data || []).map((t) => ({
163
+ id: t.id,
164
+ name: t.name || 'N/A',
165
+ relationshipType: t.relationshipType || 'N/A',
166
+ strength: t.strength || 0,
167
+ }));
168
+ (0, formatters_1.printOutput)(tableData, options.format, {
169
+ columns: ['id', 'name', 'relationshipType', 'strength'],
170
+ maxColumnWidth: 25,
171
+ });
172
+ }
173
+ else {
174
+ (0, formatters_1.printOutput)(responseData, options.format);
175
+ }
176
+ }
177
+ catch (error) {
178
+ (0, errors_1.handleError)(error);
179
+ }
180
+ });
181
+ /**
182
+ * mx topics similarity [options]
183
+ * Calculate similarity between two topics
184
+ */
185
+ topics
186
+ .command('similarity')
187
+ .description('Calculate similarity between topics')
188
+ .option('--topic-id-1 <id>', 'First topic ID (required)')
189
+ .option('--topic-id-2 <id>', 'Second topic ID (required)')
190
+ .option('--format <format>', 'Output format (json|table|yaml)')
191
+ .action(async (options) => {
192
+ try {
193
+ if (!options.topicId1 || !options.topicId2) {
194
+ console.log(chalk_1.default.red('Error: --topic-id-1 and --topic-id-2 are required'));
195
+ return;
196
+ }
197
+ const spinner = (0, ora_1.default)('Calculating similarity...').start();
198
+ const result = await (0, mx_typescript_sdk_1.calculateTopicSimilarity)({
199
+ ...(0, api_client_1.getApiOptions)(),
200
+ body: {
201
+ topicId1: options.topicId1,
202
+ topicId2: options.topicId2,
203
+ },
204
+ });
205
+ spinner.succeed('Similarity calculated');
206
+ (0, formatters_1.printOutput)(result.data, options.format);
207
+ }
208
+ catch (error) {
209
+ (0, errors_1.handleError)(error);
210
+ }
211
+ });
212
+ /**
213
+ * mx topics find-similar [options]
214
+ * Find similar topics
215
+ */
216
+ topics
217
+ .command('find-similar')
218
+ .description('Find similar topics')
219
+ .option('--topic-id <id>', 'Topic ID (required)')
220
+ .option('--threshold <number>', 'Similarity threshold (0-1)', '0.7')
221
+ .option('--limit <number>', 'Max results', '20')
222
+ .option('--format <format>', 'Output format (json|table|yaml)')
223
+ .action(async (options) => {
224
+ try {
225
+ if (!options.topicId) {
226
+ console.log(chalk_1.default.red('Error: --topic-id is required'));
227
+ return;
228
+ }
229
+ const spinner = (0, ora_1.default)('Finding similar topics...').start();
230
+ const result = await (0, mx_typescript_sdk_1.findSimilarTopics)({
231
+ ...(0, api_client_1.getApiOptions)(),
232
+ body: {
233
+ topicId: options.topicId,
234
+ threshold: parseFloat(options.threshold),
235
+ limit: parseInt(options.limit, 10),
236
+ },
237
+ });
238
+ spinner.succeed('Similar topics found');
239
+ const responseData = result.data;
240
+ if (options.format === 'table' || !options.format) {
241
+ const tableData = (responseData?.data || []).map((t) => ({
242
+ id: t.id,
243
+ name: t.name || 'N/A',
244
+ similarityScore: t.similarityScore || 0,
245
+ }));
246
+ (0, formatters_1.printOutput)(tableData, options.format, {
247
+ columns: ['id', 'name', 'similarityScore'],
248
+ maxColumnWidth: 30,
249
+ });
250
+ }
251
+ else {
252
+ (0, formatters_1.printOutput)(responseData, options.format);
253
+ }
254
+ }
255
+ catch (error) {
256
+ (0, errors_1.handleError)(error);
257
+ }
258
+ });
259
+ /**
260
+ * mx topics cluster [options]
261
+ * Cluster topics using graph algorithms
262
+ */
263
+ topics
264
+ .command('cluster')
265
+ .description('Cluster topics using graph algorithms')
266
+ .option('--algorithm <type>', 'Clustering algorithm (kmeans|hierarchical|dbscan)', 'kmeans')
267
+ .option('--num-clusters <number>', 'Number of clusters')
268
+ .option('--context-id <id>', 'Filter by context')
269
+ .option('--format <format>', 'Output format (json|table|yaml)')
270
+ .action(async (options) => {
271
+ try {
272
+ const spinner = (0, ora_1.default)('Clustering topics...').start();
273
+ const result = await (0, mx_typescript_sdk_1.clusterTopics)({
274
+ ...(0, api_client_1.getApiOptions)(),
275
+ body: {
276
+ minClusterSize: options.numClusters ? parseInt(options.numClusters, 10) : undefined,
277
+ },
278
+ });
279
+ spinner.succeed('Topics clustered successfully');
280
+ (0, formatters_1.printOutput)(result.data, options.format);
281
+ }
282
+ catch (error) {
283
+ (0, errors_1.handleError)(error);
284
+ }
285
+ });
286
+ /**
287
+ * mx topics detect-communities [options]
288
+ * Detect communities in topic graph
289
+ */
290
+ topics
291
+ .command('detect-communities')
292
+ .description('Detect communities in topic graph')
293
+ .option('--algorithm <type>', 'Community detection algorithm (louvain|label-propagation)', 'louvain')
294
+ .option('--context-id <id>', 'Filter by context')
295
+ .option('--min-size <number>', 'Minimum community size', '2')
296
+ .option('--format <format>', 'Output format (json|table|yaml)')
297
+ .action(async (options) => {
298
+ try {
299
+ const spinner = (0, ora_1.default)('Detecting communities...').start();
300
+ const result = await (0, mx_typescript_sdk_1.detectCommunities)({
301
+ ...(0, api_client_1.getApiOptions)(),
302
+ body: {
303
+ algorithm: options.algorithm,
304
+ },
305
+ });
306
+ spinner.succeed('Communities detected successfully');
307
+ (0, formatters_1.printOutput)(result.data, options.format);
308
+ }
309
+ catch (error) {
310
+ (0, errors_1.handleError)(error);
311
+ }
312
+ });
313
+ }
314
+ //# sourceMappingURL=topics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/commands/topics.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,44 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const package_json_1 = __importDefault(require("../package.json"));
9
+ const auth_1 = require("./commands/auth");
10
+ const config_1 = require("./commands/config");
11
+ const memories_1 = require("./commands/memories");
12
+ const conversations_1 = require("./commands/conversations");
13
+ const facts_1 = require("./commands/facts");
14
+ const topics_1 = require("./commands/topics");
15
+ const communities_1 = require("./commands/communities");
16
+ const patterns_1 = require("./commands/patterns");
17
+ const graphrag_1 = require("./commands/graphrag");
18
+ const artifacts_1 = require("./commands/artifacts");
19
+ const apikeys_1 = require("./commands/apikeys");
20
+ const system_1 = require("./commands/system");
21
+ const program = new commander_1.Command();
22
+ program
23
+ .name('mx')
24
+ .description('MemNexus CLI - Command-line interface for MemNexus Core API')
25
+ .version(package_json_1.default.version);
26
+ // Register all command modules
27
+ (0, auth_1.registerAuthCommands)(program);
28
+ (0, config_1.registerConfigCommands)(program);
29
+ (0, memories_1.registerMemoriesCommands)(program);
30
+ (0, conversations_1.registerConversationsCommands)(program);
31
+ (0, facts_1.registerFactsCommands)(program);
32
+ (0, topics_1.registerTopicsCommands)(program);
33
+ (0, communities_1.registerCommunitiesCommands)(program);
34
+ (0, patterns_1.registerPatternsCommands)(program);
35
+ (0, graphrag_1.registerGraphragCommands)(program);
36
+ (0, artifacts_1.registerArtifactsCommands)(program);
37
+ (0, apikeys_1.registerApikeyCommands)(program);
38
+ (0, system_1.registerSystemCommands)(program);
39
+ program.parse(process.argv);
40
+ // Show help if no command provided
41
+ if (!process.argv.slice(2).length) {
42
+ program.outputHelp();
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,mEAA0C;AAC1C,0CAAuD;AACvD,8CAA2D;AAC3D,kDAA+D;AAC/D,4DAAyE;AACzE,4CAAyD;AACzD,8CAA2D;AAC3D,wDAAqE;AACrE,kDAA+D;AAC/D,kDAA+D;AAC/D,oDAAiE;AACjE,gDAA4D;AAC5D,8CAA2D;AAE3D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,+BAA+B;AAC/B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,6CAA6B,EAAC,OAAO,CAAC,CAAC;AACvC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,yCAA2B,EAAC,OAAO,CAAC,CAAC;AACrC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type Client } from '@memnexus-ai/mx-typescript-sdk';
2
+ /**
3
+ * Get the configured SDK client instance
4
+ *
5
+ * This creates a client configured with the API URL and authentication
6
+ * from the CLI config. The client is cached for reuse across commands.
7
+ *
8
+ * @returns Configured SDK client
9
+ */
10
+ export declare function getApiClient(): Client;
11
+ /**
12
+ * Get SDK options for making API calls
13
+ *
14
+ * This returns the common options needed for SDK function calls,
15
+ * including the configured client instance.
16
+ *
17
+ * @returns SDK options with client
18
+ */
19
+ export declare function getApiOptions(): {
20
+ client: Client;
21
+ };
22
+ /**
23
+ * Reset the cached client instance
24
+ *
25
+ * Useful for testing or when configuration changes
26
+ */
27
+ export declare function resetApiClient(): void;
28
+ export type { Client };
29
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAOzF;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA0BrC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa;;EAI5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAGD,YAAY,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,64 @@
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.getApiClient = getApiClient;
7
+ exports.getApiOptions = getApiOptions;
8
+ exports.resetApiClient = resetApiClient;
9
+ const mx_typescript_sdk_1 = require("@memnexus-ai/mx-typescript-sdk");
10
+ const config_1 = require("./config");
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ // Cached client instance
13
+ let cachedClient = null;
14
+ /**
15
+ * Get the configured SDK client instance
16
+ *
17
+ * This creates a client configured with the API URL and authentication
18
+ * from the CLI config. The client is cached for reuse across commands.
19
+ *
20
+ * @returns Configured SDK client
21
+ */
22
+ function getApiClient() {
23
+ if (cachedClient) {
24
+ return cachedClient;
25
+ }
26
+ const apiKey = config_1.config.getApiKey();
27
+ if (!apiKey) {
28
+ console.error(chalk_1.default.red('Error: No API key configured.'));
29
+ console.log(chalk_1.default.yellow('Run: mx auth login --api-key <your-key>'));
30
+ process.exit(1);
31
+ }
32
+ const apiUrl = config_1.config.getApiUrl();
33
+ // Create client with configuration
34
+ cachedClient = (0, mx_typescript_sdk_1.createClient)((0, mx_typescript_sdk_1.createConfig)({
35
+ baseURL: apiUrl,
36
+ headers: {
37
+ Authorization: `Bearer ${apiKey}`,
38
+ },
39
+ timeout: 30000,
40
+ }));
41
+ return cachedClient;
42
+ }
43
+ /**
44
+ * Get SDK options for making API calls
45
+ *
46
+ * This returns the common options needed for SDK function calls,
47
+ * including the configured client instance.
48
+ *
49
+ * @returns SDK options with client
50
+ */
51
+ function getApiOptions() {
52
+ return {
53
+ client: getApiClient(),
54
+ };
55
+ }
56
+ /**
57
+ * Reset the cached client instance
58
+ *
59
+ * Useful for testing or when configuration changes
60
+ */
61
+ function resetApiClient() {
62
+ cachedClient = null;
63
+ }
64
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":";;;;;AAeA,oCA0BC;AAUD,sCAIC;AAOD,wCAEC;AAhED,sEAAyF;AACzF,qCAAkC;AAClC,kDAA0B;AAE1B,yBAAyB;AACzB,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;;;;;;GAOG;AACH,SAAgB,YAAY;IAC1B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,EAAE,CAAC;IAElC,mCAAmC;IACnC,YAAY,GAAG,IAAA,gCAAY,EACzB,IAAA,gCAAY,EAAC;QACX,OAAO,EAAE,MAAM;QACf,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CACH,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,aAAa;IAC3B,OAAO;QACL,MAAM,EAAE,YAAY,EAAE;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc;IAC5B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function storeApiKey(apiKey: string): void;
2
+ export declare function removeApiKey(): void;
3
+ export declare function hasApiKey(): boolean;
4
+ export declare function getApiKeyStatus(): {
5
+ configured: boolean;
6
+ source: 'env' | 'config' | 'none';
7
+ };
8
+ export declare function encryptApiKey(apiKey: string): string;
9
+ export declare function decryptApiKey(encryptedKey: string): string;
10
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,eAAe,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,CAQ5F;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG1D"}