@crewx/cli 0.8.0-rc.66

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 (219) hide show
  1. package/README.md +663 -0
  2. package/dist/ai-provider.service.d.ts +36 -0
  3. package/dist/ai-provider.service.js +315 -0
  4. package/dist/ai-provider.service.js.map +1 -0
  5. package/dist/ai.service.d.ts +17 -0
  6. package/dist/ai.service.js +51 -0
  7. package/dist/ai.service.js.map +1 -0
  8. package/dist/app.module.d.ts +5 -0
  9. package/dist/app.module.js +165 -0
  10. package/dist/app.module.js.map +1 -0
  11. package/dist/cli/agent.handler.d.ts +2 -0
  12. package/dist/cli/agent.handler.js +186 -0
  13. package/dist/cli/agent.handler.js.map +1 -0
  14. package/dist/cli/builtin.handler.d.ts +3 -0
  15. package/dist/cli/builtin.handler.js +110 -0
  16. package/dist/cli/builtin.handler.js.map +1 -0
  17. package/dist/cli/chat.handler.d.ts +20 -0
  18. package/dist/cli/chat.handler.js +446 -0
  19. package/dist/cli/chat.handler.js.map +1 -0
  20. package/dist/cli/cli.handler.d.ts +4 -0
  21. package/dist/cli/cli.handler.js +119 -0
  22. package/dist/cli/cli.handler.js.map +1 -0
  23. package/dist/cli/doctor.handler.d.ts +38 -0
  24. package/dist/cli/doctor.handler.js +495 -0
  25. package/dist/cli/doctor.handler.js.map +1 -0
  26. package/dist/cli/execute.handler.d.ts +2 -0
  27. package/dist/cli/execute.handler.js +376 -0
  28. package/dist/cli/execute.handler.js.map +1 -0
  29. package/dist/cli/help.handler.d.ts +2 -0
  30. package/dist/cli/help.handler.js +10 -0
  31. package/dist/cli/help.handler.js.map +1 -0
  32. package/dist/cli/init.handler.d.ts +26 -0
  33. package/dist/cli/init.handler.js +450 -0
  34. package/dist/cli/init.handler.js.map +1 -0
  35. package/dist/cli/log.handler.d.ts +2 -0
  36. package/dist/cli/log.handler.js +69 -0
  37. package/dist/cli/log.handler.js.map +1 -0
  38. package/dist/cli/mcp.handler.d.ts +3 -0
  39. package/dist/cli/mcp.handler.js +121 -0
  40. package/dist/cli/mcp.handler.js.map +1 -0
  41. package/dist/cli/query.handler.d.ts +2 -0
  42. package/dist/cli/query.handler.js +392 -0
  43. package/dist/cli/query.handler.js.map +1 -0
  44. package/dist/cli/skill.handler.d.ts +2 -0
  45. package/dist/cli/skill.handler.js +252 -0
  46. package/dist/cli/skill.handler.js.map +1 -0
  47. package/dist/cli/slack-files.handler.d.ts +2 -0
  48. package/dist/cli/slack-files.handler.js +291 -0
  49. package/dist/cli/slack-files.handler.js.map +1 -0
  50. package/dist/cli/template.handler.d.ts +2 -0
  51. package/dist/cli/template.handler.js +188 -0
  52. package/dist/cli/template.handler.js.map +1 -0
  53. package/dist/cli/templates.handler.d.ts +2 -0
  54. package/dist/cli/templates.handler.js +100 -0
  55. package/dist/cli/templates.handler.js.map +1 -0
  56. package/dist/cli-options.d.ts +40 -0
  57. package/dist/cli-options.js +371 -0
  58. package/dist/cli-options.js.map +1 -0
  59. package/dist/config/timeout.config.d.ts +14 -0
  60. package/dist/config/timeout.config.js +34 -0
  61. package/dist/config/timeout.config.js.map +1 -0
  62. package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
  63. package/dist/conversation/base-conversation-history.provider.js +45 -0
  64. package/dist/conversation/base-conversation-history.provider.js.map +1 -0
  65. package/dist/conversation/cli-box-reader.adapter.d.ts +6 -0
  66. package/dist/conversation/cli-box-reader.adapter.js +10 -0
  67. package/dist/conversation/cli-box-reader.adapter.js.map +1 -0
  68. package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
  69. package/dist/conversation/cli-conversation-history.provider.js +112 -0
  70. package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
  71. package/dist/conversation/cli-task-reader.adapter.d.ts +6 -0
  72. package/dist/conversation/cli-task-reader.adapter.js +25 -0
  73. package/dist/conversation/cli-task-reader.adapter.js.map +1 -0
  74. package/dist/conversation/conversation-provider.factory.d.ts +10 -0
  75. package/dist/conversation/conversation-provider.factory.js +50 -0
  76. package/dist/conversation/conversation-provider.factory.js.map +1 -0
  77. package/dist/conversation/index.d.ts +8 -0
  78. package/dist/conversation/index.js +29 -0
  79. package/dist/conversation/index.js.map +1 -0
  80. package/dist/conversation/slack-conversation-history.provider.d.ts +29 -0
  81. package/dist/conversation/slack-conversation-history.provider.js +302 -0
  82. package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
  83. package/dist/crewx.tool.d.ts +360 -0
  84. package/dist/crewx.tool.js +2531 -0
  85. package/dist/crewx.tool.js.map +1 -0
  86. package/dist/crewx.tool.spec.d.ts +1 -0
  87. package/dist/crewx.tool.spec.js +222 -0
  88. package/dist/crewx.tool.spec.js.map +1 -0
  89. package/dist/guards/bearer-auth.guard.d.ts +7 -0
  90. package/dist/guards/bearer-auth.guard.js +44 -0
  91. package/dist/guards/bearer-auth.guard.js.map +1 -0
  92. package/dist/health.controller.d.ts +6 -0
  93. package/dist/health.controller.js +32 -0
  94. package/dist/health.controller.js.map +1 -0
  95. package/dist/main.d.ts +1 -0
  96. package/dist/main.js +311 -0
  97. package/dist/main.js.map +1 -0
  98. package/dist/mcp.controller.d.ts +8 -0
  99. package/dist/mcp.controller.js +62 -0
  100. package/dist/mcp.controller.js.map +1 -0
  101. package/dist/package.json +3 -0
  102. package/dist/providers/dynamic-provider.factory.d.ts +17 -0
  103. package/dist/providers/dynamic-provider.factory.js +138 -0
  104. package/dist/providers/dynamic-provider.factory.js.map +1 -0
  105. package/dist/providers/logger.adapter.d.ts +7 -0
  106. package/dist/providers/logger.adapter.js +107 -0
  107. package/dist/providers/logger.adapter.js.map +1 -0
  108. package/dist/services/agent-loader.service.d.ts +35 -0
  109. package/dist/services/agent-loader.service.js +623 -0
  110. package/dist/services/agent-loader.service.js.map +1 -0
  111. package/dist/services/auth.service.d.ts +9 -0
  112. package/dist/services/auth.service.js +47 -0
  113. package/dist/services/auth.service.js.map +1 -0
  114. package/dist/services/config-validator.service.d.ts +29 -0
  115. package/dist/services/config-validator.service.js +483 -0
  116. package/dist/services/config-validator.service.js.map +1 -0
  117. package/dist/services/config.service.d.ts +45 -0
  118. package/dist/services/config.service.js +352 -0
  119. package/dist/services/config.service.js.map +1 -0
  120. package/dist/services/document-loader.service.d.ts +26 -0
  121. package/dist/services/document-loader.service.js +186 -0
  122. package/dist/services/document-loader.service.js.map +1 -0
  123. package/dist/services/help.service.d.ts +5 -0
  124. package/dist/services/help.service.js +139 -0
  125. package/dist/services/help.service.js.map +1 -0
  126. package/dist/services/intelligent-compression.service.d.ts +20 -0
  127. package/dist/services/intelligent-compression.service.js +179 -0
  128. package/dist/services/intelligent-compression.service.js.map +1 -0
  129. package/dist/services/mcp-client.service.d.ts +26 -0
  130. package/dist/services/mcp-client.service.js +81 -0
  131. package/dist/services/mcp-client.service.js.map +1 -0
  132. package/dist/services/parallel-processing.service.d.ts +108 -0
  133. package/dist/services/parallel-processing.service.js +333 -0
  134. package/dist/services/parallel-processing.service.js.map +1 -0
  135. package/dist/services/provider-bridge.service.d.ts +35 -0
  136. package/dist/services/provider-bridge.service.js +224 -0
  137. package/dist/services/provider-bridge.service.js.map +1 -0
  138. package/dist/services/remote-agent.service.d.ts +50 -0
  139. package/dist/services/remote-agent.service.js +171 -0
  140. package/dist/services/remote-agent.service.js.map +1 -0
  141. package/dist/services/result-formatter.service.d.ts +27 -0
  142. package/dist/services/result-formatter.service.js +126 -0
  143. package/dist/services/result-formatter.service.js.map +1 -0
  144. package/dist/services/skill-loader.service.d.ts +15 -0
  145. package/dist/services/skill-loader.service.js +278 -0
  146. package/dist/services/skill-loader.service.js.map +1 -0
  147. package/dist/services/skill.service.d.ts +69 -0
  148. package/dist/services/skill.service.js +779 -0
  149. package/dist/services/skill.service.js.map +1 -0
  150. package/dist/services/skill.service.spec.d.ts +1 -0
  151. package/dist/services/skill.service.spec.js +168 -0
  152. package/dist/services/skill.service.spec.js.map +1 -0
  153. package/dist/services/task-management.service.d.ts +71 -0
  154. package/dist/services/task-management.service.js +324 -0
  155. package/dist/services/task-management.service.js.map +1 -0
  156. package/dist/services/template.service.d.ts +61 -0
  157. package/dist/services/template.service.js +416 -0
  158. package/dist/services/template.service.js.map +1 -0
  159. package/dist/services/tool-call.service.d.ts +16 -0
  160. package/dist/services/tool-call.service.js +302 -0
  161. package/dist/services/tool-call.service.js.map +1 -0
  162. package/dist/services/tracing.service.d.ts +197 -0
  163. package/dist/services/tracing.service.js +1267 -0
  164. package/dist/services/tracing.service.js.map +1 -0
  165. package/dist/slack/formatters/message.formatter.d.ts +43 -0
  166. package/dist/slack/formatters/message.formatter.js +505 -0
  167. package/dist/slack/formatters/message.formatter.js.map +1 -0
  168. package/dist/slack/services/slack-file-download.service.d.ts +58 -0
  169. package/dist/slack/services/slack-file-download.service.js +558 -0
  170. package/dist/slack/services/slack-file-download.service.js.map +1 -0
  171. package/dist/slack/slack-bot.d.ts +33 -0
  172. package/dist/slack/slack-bot.js +568 -0
  173. package/dist/slack/slack-bot.js.map +1 -0
  174. package/dist/stderr.logger.d.ts +8 -0
  175. package/dist/stderr.logger.js +26 -0
  176. package/dist/stderr.logger.js.map +1 -0
  177. package/dist/types/usage.types.d.ts +107 -0
  178. package/dist/types/usage.types.js +3 -0
  179. package/dist/types/usage.types.js.map +1 -0
  180. package/dist/utils/config-utils.d.ts +15 -0
  181. package/dist/utils/config-utils.js +69 -0
  182. package/dist/utils/config-utils.js.map +1 -0
  183. package/dist/utils/extract-text.d.ts +1 -0
  184. package/dist/utils/extract-text.js +15 -0
  185. package/dist/utils/extract-text.js.map +1 -0
  186. package/dist/utils/mcp-installer.d.ts +20 -0
  187. package/dist/utils/mcp-installer.js +199 -0
  188. package/dist/utils/mcp-installer.js.map +1 -0
  189. package/dist/utils/project-hash.d.ts +6 -0
  190. package/dist/utils/project-hash.js +70 -0
  191. package/dist/utils/project-hash.js.map +1 -0
  192. package/dist/utils/simple-security.d.ts +3 -0
  193. package/dist/utils/simple-security.js +20 -0
  194. package/dist/utils/simple-security.js.map +1 -0
  195. package/dist/utils/stdin-utils.d.ts +6 -0
  196. package/dist/utils/stdin-utils.js +109 -0
  197. package/dist/utils/stdin-utils.js.map +1 -0
  198. package/dist/utils/template-processor.d.ts +27 -0
  199. package/dist/utils/template-processor.js +395 -0
  200. package/dist/utils/template-processor.js.map +1 -0
  201. package/dist/utils/terminal-message-formatter.d.ts +23 -0
  202. package/dist/utils/terminal-message-formatter.js +136 -0
  203. package/dist/utils/terminal-message-formatter.js.map +1 -0
  204. package/dist/version.d.ts +1 -0
  205. package/dist/version.js +17 -0
  206. package/dist/version.js.map +1 -0
  207. package/dist/workspace.service.d.ts +44 -0
  208. package/dist/workspace.service.js +299 -0
  209. package/dist/workspace.service.js.map +1 -0
  210. package/package.json +135 -0
  211. package/scripts/backfill-tokens.js +218 -0
  212. package/scripts/postbuild-cli.mjs +88 -0
  213. package/scripts/postinstall-cli.mjs +30 -0
  214. package/templates/agents/default.yaml +490 -0
  215. package/templates/agents/minimal.yaml +16 -0
  216. package/templates/documents/conversation-history-default.hbs +17 -0
  217. package/templates/documents/crewx-manual.md +2278 -0
  218. package/templates/documents/crewx-quick-guide.md +147 -0
  219. package/templates/versions.json +19 -0
@@ -0,0 +1,136 @@
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.TerminalMessageFormatter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const sdk_1 = require("@crewx/sdk");
9
+ class TerminalMessageFormatter extends sdk_1.BaseMessageFormatter {
10
+ constructor(config = {}) {
11
+ super();
12
+ this.config = config;
13
+ this.nowProvider = config.nowProvider ?? (() => Date.now());
14
+ }
15
+ formatMessage(msg, options) {
16
+ if (!msg || !msg.text) {
17
+ return '';
18
+ }
19
+ const merged = this.mergeOptions(options);
20
+ const indent = merged.indent ?? 2;
21
+ const colorize = merged.colorize !== false;
22
+ const timestamp = this.parseTimestamp(msg.timestamp);
23
+ const locale = merged.locale || this.detectLocale();
24
+ const headerParts = [];
25
+ if (timestamp && merged.showAbsoluteTime !== false) {
26
+ const formatted = this.formatAbsoluteTime(timestamp);
27
+ headerParts.push(this.applyColor(`[${formatted}]`, 'timestamp', colorize));
28
+ }
29
+ const roleLabel = this.buildRoleLabel(msg, colorize);
30
+ headerParts.push(roleLabel);
31
+ if (timestamp && merged.showRelativeTime !== false) {
32
+ const relative = this.formatRelativeTime(timestamp, locale);
33
+ if (relative) {
34
+ headerParts.push(this.applyColor(`· ${relative}`, 'meta', colorize));
35
+ }
36
+ }
37
+ const header = headerParts.join(' ');
38
+ const body = this.indentText(this.sanitizeText(msg.text, merged.maxLength), indent, colorize, msg.isAssistant);
39
+ return `${header}\n${body}`;
40
+ }
41
+ mergeOptions(options) {
42
+ const extended = options;
43
+ return {
44
+ platform: 'cli',
45
+ includeUserId: true,
46
+ includeTimestamp: false,
47
+ colorize: this.config.colorize ?? true,
48
+ showAbsoluteTime: this.config.showAbsoluteTime ?? true,
49
+ showRelativeTime: this.config.showRelativeTime ?? true,
50
+ indent: this.config.indent ?? 2,
51
+ locale: this.config.locale,
52
+ ...extended,
53
+ };
54
+ }
55
+ buildRoleLabel(msg, colorize) {
56
+ const displayName = this.resolveDisplayName(msg) ||
57
+ msg.metadata?.agent_id ||
58
+ msg.userId ||
59
+ (msg.isAssistant ? 'CrewX' : 'User');
60
+ const label = msg.isAssistant
61
+ ? `🤖 ${displayName}`
62
+ : `🧑 ${displayName}`;
63
+ return msg.isAssistant
64
+ ? this.applyColor(label, 'assistant', colorize)
65
+ : this.applyColor(label, 'user', colorize);
66
+ }
67
+ indentText(text, indent, colorize, isAssistant) {
68
+ const indentStr = ' '.repeat(Math.max(indent, 0));
69
+ const lines = (text || '').split('\n');
70
+ const indented = lines
71
+ .map(line => `${indentStr}${line}`)
72
+ .join('\n');
73
+ return this.applyColor(indented, isAssistant ? 'assistantBody' : 'userBody', colorize);
74
+ }
75
+ parseTimestamp(timestamp) {
76
+ if (!timestamp) {
77
+ return null;
78
+ }
79
+ const value = timestamp instanceof Date ? timestamp : new Date(timestamp);
80
+ return isNaN(value.getTime()) ? null : value;
81
+ }
82
+ formatAbsoluteTime(date) {
83
+ const iso = date.toISOString();
84
+ return `${iso.slice(0, 10)} ${iso.slice(11, 16)}Z`;
85
+ }
86
+ formatRelativeTime(date, locale) {
87
+ const diffMs = date.getTime() - this.nowProvider();
88
+ const units = [
89
+ { unit: 'year', ms: 1000 * 60 * 60 * 24 * 365 },
90
+ { unit: 'month', ms: 1000 * 60 * 60 * 24 * 30 },
91
+ { unit: 'week', ms: 1000 * 60 * 60 * 24 * 7 },
92
+ { unit: 'day', ms: 1000 * 60 * 60 * 24 },
93
+ { unit: 'hour', ms: 1000 * 60 * 60 },
94
+ { unit: 'minute', ms: 1000 * 60 },
95
+ { unit: 'second', ms: 1000 },
96
+ ];
97
+ const formatter = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
98
+ for (const { unit, ms } of units) {
99
+ const value = diffMs / ms;
100
+ if (Math.abs(value) >= 1) {
101
+ return formatter.format(Math.round(value), unit);
102
+ }
103
+ }
104
+ return formatter.format(0, 'second');
105
+ }
106
+ detectLocale() {
107
+ try {
108
+ return Intl.DateTimeFormat().resolvedOptions().locale;
109
+ }
110
+ catch {
111
+ return 'en';
112
+ }
113
+ }
114
+ applyColor(text, type, colorize) {
115
+ if (!colorize) {
116
+ return text;
117
+ }
118
+ switch (type) {
119
+ case 'timestamp':
120
+ case 'meta':
121
+ return chalk_1.default.dim(text);
122
+ case 'assistant':
123
+ return chalk_1.default.cyan(text);
124
+ case 'user':
125
+ return chalk_1.default.green(text);
126
+ case 'assistantBody':
127
+ return chalk_1.default.white(text);
128
+ case 'userBody':
129
+ return chalk_1.default.reset(text);
130
+ default:
131
+ return text;
132
+ }
133
+ }
134
+ }
135
+ exports.TerminalMessageFormatter = TerminalMessageFormatter;
136
+ //# sourceMappingURL=terminal-message-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-message-formatter.js","sourceRoot":"","sources":["../../src/utils/terminal-message-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const CREWX_VERSION: string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CREWX_VERSION = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ let version = 'unknown';
7
+ try {
8
+ const packageJsonPath = (0, path_1.join)(__dirname, '..', 'package.json');
9
+ const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
10
+ if (packageJson?.version) {
11
+ version = String(packageJson.version);
12
+ }
13
+ }
14
+ catch {
15
+ }
16
+ exports.CREWX_VERSION = version;
17
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAAkC;AAClC,+BAA4B;AAE5B,IAAI,OAAO,GAAG,SAAS,CAAC;AAExB,IAAI,CAAC;IACH,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;AAET,CAAC;AAEY,QAAA,aAAa,GAAG,OAAO,CAAC"}
@@ -0,0 +1,44 @@
1
+ export interface WorkspaceStructure {
2
+ name: string;
3
+ path: string;
4
+ type: 'file' | 'directory';
5
+ size?: number;
6
+ children?: WorkspaceStructure[];
7
+ extension?: string;
8
+ }
9
+ export interface WorkspaceAnalysis {
10
+ structure: WorkspaceStructure;
11
+ languages: string[];
12
+ frameworks: string[];
13
+ totalFiles: number;
14
+ totalSize: number;
15
+ packageInfo?: {
16
+ name?: string;
17
+ version?: string;
18
+ dependencies?: Record<string, string>;
19
+ devDependencies?: Record<string, string>;
20
+ };
21
+ }
22
+ export interface FileContent {
23
+ path: string;
24
+ content: string;
25
+ size: number;
26
+ encoding: string;
27
+ language?: string;
28
+ }
29
+ export declare class WorkspaceService {
30
+ private readonly logger;
31
+ analyzeWorkspace(workspacePath: string, maxDepth?: number): Promise<WorkspaceAnalysis>;
32
+ getWorkspaceStructure(workspacePath: string, maxDepth?: number, currentDepth?: number): Promise<WorkspaceStructure>;
33
+ searchFiles(workspacePath: string, patterns: string[], maxFiles?: number): Promise<string[]>;
34
+ readFileContent(filePath: string, maxSize?: number): Promise<FileContent>;
35
+ private getIgnoreRules;
36
+ private getDefaultIgnorePatterns;
37
+ private shouldIgnore;
38
+ private detectLanguages;
39
+ private detectFrameworks;
40
+ private getPackageInfo;
41
+ private getLanguageFromExtension;
42
+ private countFiles;
43
+ private calculateTotalSize;
44
+ }
@@ -0,0 +1,299 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ var WorkspaceService_1;
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.WorkspaceService = void 0;
47
+ const common_1 = require("@nestjs/common");
48
+ const fs = __importStar(require("fs/promises"));
49
+ const path = __importStar(require("path"));
50
+ const fast_glob_1 = __importDefault(require("fast-glob"));
51
+ const ignore_1 = __importDefault(require("ignore"));
52
+ const sdk_1 = require("@crewx/sdk");
53
+ let WorkspaceService = WorkspaceService_1 = class WorkspaceService {
54
+ constructor() {
55
+ this.logger = new common_1.Logger(WorkspaceService_1.name);
56
+ }
57
+ async analyzeWorkspace(workspacePath, maxDepth = 3) {
58
+ this.logger.log(`Starting workspace analysis for: ${workspacePath}`);
59
+ const structure = await this.getWorkspaceStructure(workspacePath, maxDepth);
60
+ const languages = await this.detectLanguages(workspacePath);
61
+ const frameworks = await this.detectFrameworks(workspacePath);
62
+ const packageInfo = await this.getPackageInfo(workspacePath);
63
+ const analysis = {
64
+ structure,
65
+ languages,
66
+ frameworks,
67
+ totalFiles: await this.countFiles(structure),
68
+ totalSize: await this.calculateTotalSize(structure),
69
+ packageInfo,
70
+ };
71
+ this.logger.log(`Workspace analysis completed. Found ${analysis.totalFiles} files, ${analysis.languages.length} languages`);
72
+ return analysis;
73
+ }
74
+ async getWorkspaceStructure(workspacePath, maxDepth = 3, currentDepth = 0) {
75
+ const stats = await fs.stat(workspacePath);
76
+ const name = path.basename(workspacePath);
77
+ if (stats.isFile()) {
78
+ return {
79
+ name,
80
+ path: workspacePath,
81
+ type: 'file',
82
+ size: stats.size,
83
+ extension: path.extname(name).slice(1),
84
+ };
85
+ }
86
+ const structure = {
87
+ name,
88
+ path: workspacePath,
89
+ type: 'directory',
90
+ children: [],
91
+ };
92
+ if (currentDepth < maxDepth) {
93
+ try {
94
+ const entries = await fs.readdir(workspacePath);
95
+ const ig = await this.getIgnoreRules(workspacePath);
96
+ for (const entry of entries) {
97
+ const entryPath = path.join(workspacePath, entry);
98
+ const relativePath = path.relative(workspacePath, entryPath);
99
+ if (!ig.ignores(relativePath) && !this.shouldIgnore(entry)) {
100
+ try {
101
+ const childStructure = await this.getWorkspaceStructure(entryPath, maxDepth, currentDepth + 1);
102
+ structure.children.push(childStructure);
103
+ }
104
+ catch (error) {
105
+ this.logger.warn(`Failed to process ${entryPath}: ${(0, sdk_1.getErrorMessage)(error)}`);
106
+ }
107
+ }
108
+ }
109
+ structure.children.sort((a, b) => {
110
+ if (a.type !== b.type) {
111
+ return a.type === 'directory' ? -1 : 1;
112
+ }
113
+ return a.name.localeCompare(b.name);
114
+ });
115
+ }
116
+ catch (error) {
117
+ this.logger.warn(`Failed to read directory ${workspacePath}: ${(0, sdk_1.getErrorMessage)(error)}`);
118
+ }
119
+ }
120
+ return structure;
121
+ }
122
+ async searchFiles(workspacePath, patterns, maxFiles = 100) {
123
+ try {
124
+ const ig = await this.getIgnoreRules(workspacePath);
125
+ const files = await (0, fast_glob_1.default)(patterns, {
126
+ cwd: workspacePath,
127
+ absolute: true,
128
+ ignore: this.getDefaultIgnorePatterns(),
129
+ });
130
+ const filteredFiles = files
131
+ .filter((file) => {
132
+ const relativePath = path.relative(workspacePath, file);
133
+ return !ig.ignores(relativePath);
134
+ })
135
+ .slice(0, maxFiles);
136
+ this.logger.log(`Found ${filteredFiles.length} files matching patterns: ${patterns.join(', ')}`);
137
+ return filteredFiles;
138
+ }
139
+ catch (error) {
140
+ this.logger.error(`File search failed: ${(0, sdk_1.getErrorMessage)(error)}`, (0, sdk_1.getErrorStack)(error));
141
+ throw error;
142
+ }
143
+ }
144
+ async readFileContent(filePath, maxSize = 1024 * 1024) {
145
+ try {
146
+ const stats = await fs.stat(filePath);
147
+ if (stats.size > maxSize) {
148
+ throw new Error(`File size (${stats.size} bytes) exceeds maximum allowed size (${maxSize} bytes)`);
149
+ }
150
+ const content = await fs.readFile(filePath, 'utf-8');
151
+ const extension = path.extname(filePath).slice(1);
152
+ return {
153
+ path: filePath,
154
+ content,
155
+ size: stats.size,
156
+ encoding: 'utf-8',
157
+ language: this.getLanguageFromExtension(extension),
158
+ };
159
+ }
160
+ catch (error) {
161
+ this.logger.error(`Failed to read file ${filePath}: ${(0, sdk_1.getErrorMessage)(error)}`, (0, sdk_1.getErrorStack)(error));
162
+ throw error;
163
+ }
164
+ }
165
+ async getIgnoreRules(workspacePath) {
166
+ const ig = (0, ignore_1.default)();
167
+ try {
168
+ const gitignorePath = path.join(workspacePath, '.gitignore');
169
+ const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
170
+ ig.add(gitignoreContent);
171
+ }
172
+ catch (error) {
173
+ }
174
+ ig.add(this.getDefaultIgnorePatterns());
175
+ return ig;
176
+ }
177
+ getDefaultIgnorePatterns() {
178
+ return [
179
+ 'node_modules/**',
180
+ '.git/**',
181
+ '.DS_Store',
182
+ '*.log',
183
+ 'dist/**',
184
+ 'build/**',
185
+ '.next/**',
186
+ 'coverage/**',
187
+ '.nyc_output/**',
188
+ '*.min.js',
189
+ '*.min.css',
190
+ ];
191
+ }
192
+ shouldIgnore(name) {
193
+ const ignoreList = ['.DS_Store', 'Thumbs.db', '.git', 'node_modules'];
194
+ return ignoreList.includes(name) || name.startsWith('.');
195
+ }
196
+ async detectLanguages(workspacePath) {
197
+ const patterns = ['**/*.{js,ts,jsx,tsx,py,java,go,rs,cpp,c,cs,php,rb,swift,kt}'];
198
+ const files = await (0, fast_glob_1.default)(patterns, { cwd: workspacePath });
199
+ const languages = new Set();
200
+ files.forEach((file) => {
201
+ const ext = path.extname(file).slice(1);
202
+ const lang = this.getLanguageFromExtension(ext);
203
+ if (lang)
204
+ languages.add(lang);
205
+ });
206
+ return Array.from(languages);
207
+ }
208
+ async detectFrameworks(workspacePath) {
209
+ const frameworks = [];
210
+ try {
211
+ const packageJsonPath = path.join(workspacePath, 'package.json');
212
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
213
+ const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
214
+ if (deps.react || deps['@types/react'])
215
+ frameworks.push('React');
216
+ if (deps.vue || deps['@vue/cli'])
217
+ frameworks.push('Vue.js');
218
+ if (deps.angular || deps['@angular/core'])
219
+ frameworks.push('Angular');
220
+ if (deps.express)
221
+ frameworks.push('Express.js');
222
+ if (deps.fastify)
223
+ frameworks.push('Fastify');
224
+ if (deps['@nestjs/core'])
225
+ frameworks.push('NestJS');
226
+ if (deps.next)
227
+ frameworks.push('Next.js');
228
+ if (deps.nuxt)
229
+ frameworks.push('Nuxt.js');
230
+ if (deps.svelte)
231
+ frameworks.push('Svelte');
232
+ }
233
+ catch (error) {
234
+ }
235
+ return frameworks;
236
+ }
237
+ async getPackageInfo(workspacePath) {
238
+ try {
239
+ const packageJsonPath = path.join(workspacePath, 'package.json');
240
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
241
+ return {
242
+ name: packageJson.name,
243
+ version: packageJson.version,
244
+ dependencies: packageJson.dependencies,
245
+ devDependencies: packageJson.devDependencies,
246
+ };
247
+ }
248
+ catch (error) {
249
+ return undefined;
250
+ }
251
+ }
252
+ getLanguageFromExtension(extension) {
253
+ const languageMap = {
254
+ js: 'JavaScript',
255
+ jsx: 'JavaScript',
256
+ ts: 'TypeScript',
257
+ tsx: 'TypeScript',
258
+ py: 'Python',
259
+ java: 'Java',
260
+ go: 'Go',
261
+ rs: 'Rust',
262
+ cpp: 'C++',
263
+ c: 'C',
264
+ cs: 'C#',
265
+ php: 'PHP',
266
+ rb: 'Ruby',
267
+ swift: 'Swift',
268
+ kt: 'Kotlin',
269
+ };
270
+ return languageMap[extension.toLowerCase()];
271
+ }
272
+ async countFiles(structure) {
273
+ if (structure.type === 'file')
274
+ return 1;
275
+ if (!structure.children)
276
+ return 0;
277
+ let count = 0;
278
+ for (const child of structure.children) {
279
+ count += await this.countFiles(child);
280
+ }
281
+ return count;
282
+ }
283
+ async calculateTotalSize(structure) {
284
+ if (structure.type === 'file')
285
+ return structure.size || 0;
286
+ if (!structure.children)
287
+ return 0;
288
+ let totalSize = 0;
289
+ for (const child of structure.children) {
290
+ totalSize += await this.calculateTotalSize(child);
291
+ }
292
+ return totalSize;
293
+ }
294
+ };
295
+ exports.WorkspaceService = WorkspaceService;
296
+ exports.WorkspaceService = WorkspaceService = WorkspaceService_1 = __decorate([
297
+ (0, common_1.Injectable)()
298
+ ], WorkspaceService);
299
+ //# sourceMappingURL=workspace.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.service.js","sourceRoot":"","sources":["../src/workspace.service.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,135 @@
1
+ {
2
+ "name": "@crewx/cli",
3
+ "version": "0.8.0-rc.66",
4
+ "license": "UNLICENSED",
5
+ "engines": {
6
+ "node": ">=20.19.0"
7
+ },
8
+ "description": "SowonAI CrewX CLI - Bring Your Own AI(BYOA) team in Slack/IDE(MCP) with your existing subscriptions",
9
+ "private": false,
10
+ "type": "commonjs",
11
+ "main": "dist/main.js",
12
+ "module": "dist/main.js",
13
+ "bin": {
14
+ "crewx": "dist/main.js"
15
+ },
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/main.js",
19
+ "require": "./dist/main.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "scripts",
25
+ "README.md",
26
+ "docs",
27
+ "templates"
28
+ ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/sowonlabs/crewx"
32
+ },
33
+ "homepage": "https://github.com/sowonlabs/crewx",
34
+ "bugs": {
35
+ "url": "https://github.com/sowonlabs/crewx/issues"
36
+ },
37
+ "author": "SowonLabs",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "scripts": {
42
+ "build": "nest build",
43
+ "postbuild": "node ./scripts/postbuild-cli.mjs",
44
+ "postinstall": "node ./scripts/postinstall-cli.mjs",
45
+ "start": "node dist/main.js",
46
+ "start:mcp": "node dist/main.js mcp",
47
+ "start:slack": "caffeinate -i dotenv -e ../../.env.slack -- node dist/main.js slack --log --agent crewx_glm_dev",
48
+ "dev": "dotenv -e ../../.env.test -- nest start --watch -- --log",
49
+ "dev:install": "ts-node ../../src/main.ts --install --log",
50
+ "debug": "dotenv -e ../../.env.test -- nest start --debug --watch -- --log --protocol HTTP",
51
+ "inspector": "npx @modelcontextprotocol/inspector --config ../../inspector.config.json --server crewx",
52
+ "test": "vitest run --config ./vitest.config.ts",
53
+ "test:watch": "vitest --config ./vitest.config.ts",
54
+ "test:ui": "vitest --ui --config ./vitest.config.ts",
55
+ "test:unit": "vitest run --config ./vitest.config.ts tests/unit/**/*.test.ts",
56
+ "test:integration": "vitest run --config ./vitest.config.ts tests/integration/**/*.test.ts --passWithNoTests",
57
+ "test:e2e": "vitest run --config ./vitest.e2e.config.ts",
58
+ "test:coverage": "vitest run --config ./vitest.config.ts --coverage",
59
+ "cli": "npm run build && node dist/main.js",
60
+ "cli:help": "npm run build && node dist/main.js",
61
+ "cli:init": "npm run build && node dist/main.js init",
62
+ "cli:doctor": "npm run build && node dist/main.js doctor",
63
+ "cli:query": "npm run build && node dist/main.js query",
64
+ "cli:execute": "npm run build && node dist/main.js execute",
65
+ "mcp": "npm run build && node dist/main.js mcp",
66
+ "mcp:log": "npm run build && node dist/main.js mcp --log",
67
+ "prepack": "npm run build"
68
+ },
69
+ "dependencies": {
70
+ "@modelcontextprotocol/sdk": "^1.0.0",
71
+ "@nestjs/common": "^11.0.0",
72
+ "@nestjs/core": "^11.0.0",
73
+ "@nestjs/platform-express": "^11.0.0",
74
+ "@slack/bolt": "^4.4.0",
75
+ "@slack/web-api": "^7.10.0",
76
+ "@crewx/sdk": "workspace:*",
77
+ "@sowonai/nestjs-mcp-adapter": "^0.1.3",
78
+ "@types/js-yaml": "^4.0.9",
79
+ "@types/mdast": "^4.0.4",
80
+ "@types/unist": "^3.0.3",
81
+ "ajv": "^8.17.1",
82
+ "ajv-formats": "^3.0.1",
83
+ "chalk": "^4.1.2",
84
+ "dotenv": "^17.2.3",
85
+ "execa": "^8.0.1",
86
+ "fast-glob": "^3.3.0",
87
+ "giget": "^2.0.0",
88
+ "handlebars": "^4.7.8",
89
+ "ignore": "^5.2.0",
90
+ "js-yaml": "^4.1.0",
91
+ "md-to-slack": "^1.0.0",
92
+ "node-sqlite3-wasm": "^0.8.30",
93
+ "reflect-metadata": "^0.2.2",
94
+ "remark-parse": "^11.0.0",
95
+ "remark-stringify": "^11.0.0",
96
+ "rxjs": "^7.8.0",
97
+ "unified": "^11.0.5",
98
+ "unist-util-visit": "^5.0.0",
99
+ "yargs": "^17.7.0",
100
+ "zod": "^3.22.0",
101
+ "@crewx/memory": "workspace:*",
102
+ "@crewx/search": "workspace:*",
103
+ "@crewx/doc": "workspace:*",
104
+ "@crewx/wbs": "workspace:*",
105
+ "@crewx/cron": "workspace:*"
106
+ },
107
+ "optionalDependencies": {},
108
+ "devDependencies": {
109
+ "@nestjs/cli": "^11.0.0",
110
+ "@nestjs/schematics": "^11.0.0",
111
+ "@nestjs/testing": "^11.0.0",
112
+ "@types/ajv": "^0.0.5",
113
+ "@types/express": "^5.0.3",
114
+ "@types/node": "^20.19.19",
115
+ "@types/yargs": "^17.0.0",
116
+ "@vitest/ui": "^1.0.0",
117
+ "dotenv-cli": "^6.0.0",
118
+ "ts-loader": "^9.0.0",
119
+ "ts-node": "^10.0.0",
120
+ "tsconfig-paths": "^4.2.0",
121
+ "typescript": "^5.0.0",
122
+ "vitest": "^1.0.0"
123
+ },
124
+ "keywords": [
125
+ "crewx",
126
+ "claude",
127
+ "gemini",
128
+ "copilot",
129
+ "mcp",
130
+ "ai",
131
+ "model-context-protocol",
132
+ "multi-agent",
133
+ "ai-collaboration"
134
+ ]
135
+ }