crewx 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/LICENSE +197 -9
  2. package/README.md +120 -28
  3. package/crewx.yaml +1273 -0
  4. package/dist/agent.types.d.ts +92 -0
  5. package/dist/agent.types.js +16 -0
  6. package/dist/agent.types.js.map +1 -0
  7. package/dist/ai-provider.service.d.ts +25 -0
  8. package/dist/ai-provider.service.js +138 -0
  9. package/dist/ai-provider.service.js.map +1 -0
  10. package/dist/ai.service.d.ts +50 -0
  11. package/dist/ai.service.js +625 -0
  12. package/dist/ai.service.js.map +1 -0
  13. package/dist/app.module.d.ts +5 -0
  14. package/dist/app.module.js +88 -0
  15. package/dist/app.module.js.map +1 -0
  16. package/dist/cli/chat.handler.d.ts +19 -0
  17. package/dist/cli/chat.handler.js +429 -0
  18. package/dist/cli/chat.handler.js.map +1 -0
  19. package/dist/cli/cli.handler.d.ts +4 -0
  20. package/dist/cli/cli.handler.js +93 -0
  21. package/dist/cli/cli.handler.js.map +1 -0
  22. package/dist/cli/doctor.handler.d.ts +36 -0
  23. package/dist/cli/doctor.handler.js +382 -0
  24. package/dist/cli/doctor.handler.js.map +1 -0
  25. package/dist/cli/execute.handler.d.ts +2 -0
  26. package/dist/cli/execute.handler.js +269 -0
  27. package/dist/cli/execute.handler.js.map +1 -0
  28. package/dist/cli/help.handler.d.ts +2 -0
  29. package/dist/cli/help.handler.js +10 -0
  30. package/dist/cli/help.handler.js.map +1 -0
  31. package/dist/cli/init.handler.d.ts +25 -0
  32. package/dist/cli/init.handler.js +355 -0
  33. package/dist/cli/init.handler.js.map +1 -0
  34. package/dist/cli/query.handler.d.ts +2 -0
  35. package/dist/cli/query.handler.js +351 -0
  36. package/dist/cli/query.handler.js.map +1 -0
  37. package/dist/cli/templates.handler.d.ts +2 -0
  38. package/dist/cli/templates.handler.js +100 -0
  39. package/dist/cli/templates.handler.js.map +1 -0
  40. package/dist/cli-options.d.ts +22 -0
  41. package/dist/cli-options.js +195 -0
  42. package/dist/cli-options.js.map +1 -0
  43. package/dist/config/timeout.config.d.ts +14 -0
  44. package/dist/config/timeout.config.js +34 -0
  45. package/dist/config/timeout.config.js.map +1 -0
  46. package/dist/constants.d.ts +4 -0
  47. package/dist/constants.js +8 -0
  48. package/dist/constants.js.map +1 -0
  49. package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
  50. package/dist/conversation/base-conversation-history.provider.js +45 -0
  51. package/dist/conversation/base-conversation-history.provider.js.map +1 -0
  52. package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
  53. package/dist/conversation/cli-conversation-history.provider.js +104 -0
  54. package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
  55. package/dist/conversation/conversation-config.d.ts +9 -0
  56. package/dist/conversation/conversation-config.js +25 -0
  57. package/dist/conversation/conversation-config.js.map +1 -0
  58. package/dist/conversation/conversation-history.interface.d.ts +25 -0
  59. package/dist/conversation/conversation-history.interface.js +3 -0
  60. package/dist/conversation/conversation-history.interface.js.map +1 -0
  61. package/dist/conversation/conversation-provider.factory.d.ts +10 -0
  62. package/dist/conversation/conversation-provider.factory.js +50 -0
  63. package/dist/conversation/conversation-provider.factory.js.map +1 -0
  64. package/dist/conversation/conversation-storage.service.d.ts +15 -0
  65. package/dist/conversation/conversation-storage.service.js +182 -0
  66. package/dist/conversation/conversation-storage.service.js.map +1 -0
  67. package/dist/conversation/index.d.ts +7 -0
  68. package/dist/conversation/index.js +24 -0
  69. package/dist/conversation/index.js.map +1 -0
  70. package/dist/conversation/slack-conversation-history.provider.d.ts +22 -0
  71. package/dist/conversation/slack-conversation-history.provider.js +239 -0
  72. package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
  73. package/dist/crewx.tool.d.ts +421 -0
  74. package/dist/crewx.tool.js +1240 -0
  75. package/dist/crewx.tool.js.map +1 -0
  76. package/dist/knowledge/DocumentManager.d.ts +4 -0
  77. package/dist/knowledge/DocumentManager.js +119 -0
  78. package/dist/knowledge/DocumentManager.js.map +1 -0
  79. package/dist/main.d.ts +1 -0
  80. package/dist/main.js +230 -0
  81. package/dist/main.js.map +1 -0
  82. package/dist/mcp.controller.d.ts +8 -0
  83. package/dist/mcp.controller.js +60 -0
  84. package/dist/mcp.controller.js.map +1 -0
  85. package/dist/project.service.d.ts +44 -0
  86. package/dist/project.service.js +299 -0
  87. package/dist/project.service.js.map +1 -0
  88. package/dist/providers/ai-provider.interface.d.ts +30 -0
  89. package/dist/providers/ai-provider.interface.js +11 -0
  90. package/dist/providers/ai-provider.interface.js.map +1 -0
  91. package/dist/providers/base-ai.provider.d.ts +42 -0
  92. package/dist/providers/base-ai.provider.js +515 -0
  93. package/dist/providers/base-ai.provider.js.map +1 -0
  94. package/dist/providers/claude.provider.d.ts +25 -0
  95. package/dist/providers/claude.provider.js +376 -0
  96. package/dist/providers/claude.provider.js.map +1 -0
  97. package/dist/providers/copilot.provider.d.ts +25 -0
  98. package/dist/providers/copilot.provider.js +280 -0
  99. package/dist/providers/copilot.provider.js.map +1 -0
  100. package/dist/providers/gemini.provider.d.ts +22 -0
  101. package/dist/providers/gemini.provider.js +163 -0
  102. package/dist/providers/gemini.provider.js.map +1 -0
  103. package/dist/services/agent-loader.service.d.ts +23 -0
  104. package/dist/services/agent-loader.service.js +313 -0
  105. package/dist/services/agent-loader.service.js.map +1 -0
  106. package/dist/services/config-validator.service.d.ts +28 -0
  107. package/dist/services/config-validator.service.js +427 -0
  108. package/dist/services/config-validator.service.js.map +1 -0
  109. package/dist/services/config.service.d.ts +25 -0
  110. package/dist/services/config.service.js +102 -0
  111. package/dist/services/config.service.js.map +1 -0
  112. package/dist/services/context-enhancement.service.d.ts +13 -0
  113. package/dist/services/context-enhancement.service.js +169 -0
  114. package/dist/services/context-enhancement.service.js.map +1 -0
  115. package/dist/services/document-loader.service.d.ts +16 -0
  116. package/dist/services/document-loader.service.js +137 -0
  117. package/dist/services/document-loader.service.js.map +1 -0
  118. package/dist/services/help.service.d.ts +5 -0
  119. package/dist/services/help.service.js +112 -0
  120. package/dist/services/help.service.js.map +1 -0
  121. package/dist/services/intelligent-compression.service.d.ts +20 -0
  122. package/dist/services/intelligent-compression.service.js +179 -0
  123. package/dist/services/intelligent-compression.service.js.map +1 -0
  124. package/dist/services/parallel-processing.service.d.ts +108 -0
  125. package/dist/services/parallel-processing.service.js +266 -0
  126. package/dist/services/parallel-processing.service.js.map +1 -0
  127. package/dist/services/result-formatter.service.d.ts +27 -0
  128. package/dist/services/result-formatter.service.js +126 -0
  129. package/dist/services/result-formatter.service.js.map +1 -0
  130. package/dist/services/task-management.service.d.ts +63 -0
  131. package/dist/services/task-management.service.js +270 -0
  132. package/dist/services/task-management.service.js.map +1 -0
  133. package/dist/services/template.service.d.ts +36 -0
  134. package/dist/services/template.service.js +195 -0
  135. package/dist/services/template.service.js.map +1 -0
  136. package/dist/services/tool-call.service.d.ts +53 -0
  137. package/dist/services/tool-call.service.js +819 -0
  138. package/dist/services/tool-call.service.js.map +1 -0
  139. package/dist/slack/formatters/message.formatter.d.ts +25 -0
  140. package/dist/slack/formatters/message.formatter.js +246 -0
  141. package/dist/slack/formatters/message.formatter.js.map +1 -0
  142. package/dist/slack/slack-bot.d.ts +23 -0
  143. package/dist/slack/slack-bot.js +435 -0
  144. package/dist/slack/slack-bot.js.map +1 -0
  145. package/dist/stderr.logger.d.ts +8 -0
  146. package/dist/stderr.logger.js +26 -0
  147. package/dist/stderr.logger.js.map +1 -0
  148. package/dist/tsconfig.tsbuildinfo +1 -0
  149. package/dist/utils/config-utils.d.ts +15 -0
  150. package/dist/utils/config-utils.js +69 -0
  151. package/dist/utils/config-utils.js.map +1 -0
  152. package/dist/utils/error-utils.d.ts +3 -0
  153. package/dist/utils/error-utils.js +27 -0
  154. package/dist/utils/error-utils.js.map +1 -0
  155. package/dist/utils/math-utils.d.ts +3 -0
  156. package/dist/utils/math-utils.js +10 -0
  157. package/dist/utils/math-utils.js.map +1 -0
  158. package/dist/utils/mcp-installer.d.ts +20 -0
  159. package/dist/utils/mcp-installer.js +199 -0
  160. package/dist/utils/mcp-installer.js.map +1 -0
  161. package/dist/utils/mention-parser.d.ts +18 -0
  162. package/dist/utils/mention-parser.js +136 -0
  163. package/dist/utils/mention-parser.js.map +1 -0
  164. package/dist/utils/simple-security.d.ts +3 -0
  165. package/dist/utils/simple-security.js +20 -0
  166. package/dist/utils/simple-security.js.map +1 -0
  167. package/dist/utils/stdin-utils.d.ts +2 -0
  168. package/dist/utils/stdin-utils.js +87 -0
  169. package/dist/utils/stdin-utils.js.map +1 -0
  170. package/dist/utils/string-utils.d.ts +1 -0
  171. package/dist/utils/string-utils.js +10 -0
  172. package/dist/utils/string-utils.js.map +1 -0
  173. package/dist/utils/template-processor.d.ts +32 -0
  174. package/dist/utils/template-processor.js +188 -0
  175. package/dist/utils/template-processor.js.map +1 -0
  176. package/docs/agent-configuration.md +373 -0
  177. package/docs/agent-registry-strategy.md +348 -0
  178. package/docs/branding-decision-crewx.md +395 -0
  179. package/docs/claude-code-docker-guide.md +264 -0
  180. package/docs/cli-guide.md +295 -0
  181. package/docs/development.md +595 -0
  182. package/docs/guides/agent-best-practices.md +97 -0
  183. package/docs/guides/bug-management.md +600 -0
  184. package/docs/guides/git-bug-reference.md +366 -0
  185. package/docs/mcp-integration.md +187 -0
  186. package/docs/process/development-workflow.md +84 -0
  187. package/docs/roadmap.md +528 -0
  188. package/docs/rules/branch-protection.md +40 -0
  189. package/docs/standards/rc-versioning.md +60 -0
  190. package/docs/standards/report-structure.md +67 -0
  191. package/docs/templates.md +517 -0
  192. package/docs/tools.md +583 -0
  193. package/docs/troubleshooting.md +585 -0
  194. package/package.json +106 -21
  195. package/bin/crewx.js +0 -20
@@ -0,0 +1,15 @@
1
+ export declare function getEnvVar(key: string, defaultValue?: string): string | undefined;
2
+ export declare function getRequiredEnvVar(key: string, defaultValue?: string): string;
3
+ export declare function getEnvVarAsBoolean(key: string, defaultValue?: boolean): boolean;
4
+ export declare function getEnvVarAsNumber(key: string, defaultValue?: number): number | undefined;
5
+ export interface EnvConfig {
6
+ [key: string]: {
7
+ key: string;
8
+ defaultValue?: string | number | boolean;
9
+ type?: 'string' | 'number' | 'boolean';
10
+ required?: boolean;
11
+ };
12
+ }
13
+ export declare function getEnvConfig<T extends EnvConfig>(config: T): {
14
+ [K in keyof T]: T[K]['type'] extends 'number' ? number : T[K]['type'] extends 'boolean' ? boolean : string;
15
+ };
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEnvVar = getEnvVar;
4
+ exports.getRequiredEnvVar = getRequiredEnvVar;
5
+ exports.getEnvVarAsBoolean = getEnvVarAsBoolean;
6
+ exports.getEnvVarAsNumber = getEnvVarAsNumber;
7
+ exports.getEnvConfig = getEnvConfig;
8
+ function getEnvVar(key, defaultValue) {
9
+ const value = process.env[key];
10
+ return value !== undefined ? value : defaultValue;
11
+ }
12
+ function getRequiredEnvVar(key, defaultValue) {
13
+ const value = getEnvVar(key, defaultValue);
14
+ if (value === undefined) {
15
+ throw new Error(`Required environment variable '${key}' is not set`);
16
+ }
17
+ return value;
18
+ }
19
+ function getEnvVarAsBoolean(key, defaultValue = false) {
20
+ const value = getEnvVar(key);
21
+ if (value === undefined) {
22
+ return defaultValue;
23
+ }
24
+ return value.toLowerCase() === 'true' || value === '1';
25
+ }
26
+ function getEnvVarAsNumber(key, defaultValue) {
27
+ const value = getEnvVar(key);
28
+ if (value === undefined) {
29
+ return defaultValue;
30
+ }
31
+ const numValue = Number(value);
32
+ if (isNaN(numValue)) {
33
+ throw new Error(`Environment variable '${key}' value '${value}' is not a valid number`);
34
+ }
35
+ return numValue;
36
+ }
37
+ function getEnvConfig(config) {
38
+ const result = {};
39
+ for (const [configKey, configValue] of Object.entries(config)) {
40
+ const { key, defaultValue, type = 'string', required = false } = configValue;
41
+ try {
42
+ let value;
43
+ switch (type) {
44
+ case 'boolean':
45
+ value = getEnvVarAsBoolean(key, defaultValue);
46
+ break;
47
+ case 'number':
48
+ value = getEnvVarAsNumber(key, defaultValue);
49
+ if (value === undefined && required) {
50
+ throw new Error(`Required environment variable '${key}' is not set`);
51
+ }
52
+ break;
53
+ default:
54
+ if (required) {
55
+ value = getRequiredEnvVar(key, defaultValue);
56
+ }
57
+ else {
58
+ value = getEnvVar(key, defaultValue);
59
+ }
60
+ }
61
+ result[configKey] = value;
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Failed to read environment variable for '${configKey}': ${error instanceof Error ? error.message : String(error)}`);
65
+ }
66
+ }
67
+ return result;
68
+ }
69
+ //# sourceMappingURL=config-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../../src/utils/config-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function isError(error: unknown): error is Error;
2
+ export declare function getErrorMessage(error: unknown): string;
3
+ export declare function getErrorStack(error: unknown): string | undefined;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isError = isError;
4
+ exports.getErrorMessage = getErrorMessage;
5
+ exports.getErrorStack = getErrorStack;
6
+ function isError(error) {
7
+ return error instanceof Error;
8
+ }
9
+ function getErrorMessage(error) {
10
+ if (isError(error)) {
11
+ return error.message;
12
+ }
13
+ if (typeof error === 'string') {
14
+ return error;
15
+ }
16
+ if (error && typeof error === 'object' && 'message' in error) {
17
+ return String(error.message);
18
+ }
19
+ return 'An unknown error occurred';
20
+ }
21
+ function getErrorStack(error) {
22
+ if (isError(error)) {
23
+ return error.stack;
24
+ }
25
+ return undefined;
26
+ }
27
+ //# sourceMappingURL=error-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":";;AAIA,0BAEC;AAED,0CAWC;AAED,sCAKC;AAtBD,SAAgB,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAED,SAAgB,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,SAAgB,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const add: (a: number, b: number) => number;
2
+ export declare const multiply: (a: number, b: number) => number;
3
+ export declare const subtract: (a: number, b: number) => number;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subtract = exports.multiply = exports.add = void 0;
4
+ const add = (a, b) => a + b;
5
+ exports.add = add;
6
+ const multiply = (a, b) => a * b;
7
+ exports.multiply = multiply;
8
+ const subtract = (a, b) => a - b;
9
+ exports.subtract = subtract;
10
+ //# sourceMappingURL=math-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math-utils.js","sourceRoot":"","sources":["../../src/utils/math-utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAA9C,QAAA,GAAG,OAA2C;AACpD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAAnD,QAAA,QAAQ,YAA2C;AACzD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAAnD,QAAA,QAAQ,YAA2C"}
@@ -0,0 +1,20 @@
1
+ export interface MCPRegistrationResult {
2
+ claude: {
3
+ success: boolean;
4
+ message: string;
5
+ };
6
+ gemini: {
7
+ success: boolean;
8
+ message: string;
9
+ };
10
+ copilot: {
11
+ success: boolean;
12
+ message: string;
13
+ };
14
+ }
15
+ export declare function registerCrewXMCP(): Promise<MCPRegistrationResult>;
16
+ export declare function checkMCPRegistration(): Promise<{
17
+ claude: boolean;
18
+ gemini: boolean;
19
+ copilot: boolean;
20
+ }>;
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerCrewXMCP = registerCrewXMCP;
37
+ exports.checkMCPRegistration = checkMCPRegistration;
38
+ const child_process_1 = require("child_process");
39
+ const util_1 = require("util");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
44
+ async function registerCrewXMCP() {
45
+ const result = {
46
+ claude: { success: false, message: '' },
47
+ gemini: { success: false, message: '' },
48
+ copilot: { success: false, message: '' },
49
+ };
50
+ const claudeAvailable = await checkCommandAvailable('claude');
51
+ const geminiAvailable = await checkCommandAvailable('gemini');
52
+ const copilotAvailable = await checkCommandAvailable('copilot');
53
+ if (claudeAvailable) {
54
+ try {
55
+ result.claude = await registerClaudeMCP();
56
+ }
57
+ catch (error) {
58
+ result.claude = { success: false, message: error.message };
59
+ }
60
+ }
61
+ else {
62
+ result.claude = { success: false, message: 'Claude CLI not installed' };
63
+ }
64
+ if (geminiAvailable) {
65
+ try {
66
+ result.gemini = await registerGeminiMCP();
67
+ }
68
+ catch (error) {
69
+ result.gemini = { success: false, message: error.message };
70
+ }
71
+ }
72
+ else {
73
+ result.gemini = { success: false, message: 'Gemini CLI not installed' };
74
+ }
75
+ if (copilotAvailable) {
76
+ try {
77
+ result.copilot = await registerCopilotMCP();
78
+ }
79
+ catch (error) {
80
+ result.copilot = { success: false, message: error.message };
81
+ }
82
+ }
83
+ else {
84
+ result.copilot = { success: false, message: 'Copilot CLI not installed' };
85
+ }
86
+ return result;
87
+ }
88
+ async function checkCommandAvailable(command) {
89
+ try {
90
+ await execAsync(`which ${command}`);
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ async function registerClaudeMCP() {
98
+ try {
99
+ try {
100
+ await execAsync('claude mcp remove crewx -s user');
101
+ }
102
+ catch {
103
+ }
104
+ const { stdout, stderr } = await execAsync('claude mcp add -s user crewx crewx mcp');
105
+ if (stderr && !stderr.includes('File modified')) {
106
+ return { success: false, message: stderr };
107
+ }
108
+ return {
109
+ success: true,
110
+ message: 'Claude MCP registered successfully. Use: claude "Use crewx_listAgents tool"'
111
+ };
112
+ }
113
+ catch (error) {
114
+ return { success: false, message: error.message };
115
+ }
116
+ }
117
+ async function registerGeminiMCP() {
118
+ try {
119
+ try {
120
+ await execAsync('gemini mcp remove crewx');
121
+ }
122
+ catch {
123
+ }
124
+ const { stdout, stderr } = await execAsync('gemini mcp add -s user --trust crewx crewx mcp');
125
+ if (stderr && stderr.includes('error')) {
126
+ return { success: false, message: stderr };
127
+ }
128
+ return {
129
+ success: true,
130
+ message: 'Gemini MCP registered successfully. Use: gemini -p "Use crewx_listAgents" --allowed-mcp-server-names=crewx --yolo'
131
+ };
132
+ }
133
+ catch (error) {
134
+ return { success: false, message: error.message };
135
+ }
136
+ }
137
+ async function registerCopilotMCP() {
138
+ try {
139
+ const homeDir = os.homedir();
140
+ const copilotConfigDir = path.join(homeDir, '.config', 'github-copilot');
141
+ const copilotConfigPath = path.join(copilotConfigDir, 'mcp-servers.json');
142
+ if (!fs.existsSync(copilotConfigDir)) {
143
+ fs.mkdirSync(copilotConfigDir, { recursive: true });
144
+ }
145
+ let config = { mcpServers: {} };
146
+ if (fs.existsSync(copilotConfigPath)) {
147
+ const content = fs.readFileSync(copilotConfigPath, 'utf-8');
148
+ config = JSON.parse(content);
149
+ }
150
+ config.mcpServers = config.mcpServers || {};
151
+ config.mcpServers.crewx = {
152
+ command: 'crewx',
153
+ args: ['mcp']
154
+ };
155
+ fs.writeFileSync(copilotConfigPath, JSON.stringify(config, null, 2));
156
+ return {
157
+ success: true,
158
+ message: 'Copilot MCP config updated. Note: MCP tools may not work in CLI mode (VS Code only)'
159
+ };
160
+ }
161
+ catch (error) {
162
+ return { success: false, message: error.message };
163
+ }
164
+ }
165
+ async function checkMCPRegistration() {
166
+ const result = {
167
+ claude: false,
168
+ gemini: false,
169
+ copilot: false,
170
+ };
171
+ try {
172
+ const homeDir = os.homedir();
173
+ const claudeConfigPath = path.join(homeDir, '.claude.json');
174
+ if (fs.existsSync(claudeConfigPath)) {
175
+ const content = fs.readFileSync(claudeConfigPath, 'utf-8');
176
+ result.claude = content.includes('"crewx"');
177
+ }
178
+ }
179
+ catch {
180
+ }
181
+ try {
182
+ const { stdout } = await execAsync('gemini mcp list');
183
+ result.gemini = stdout.includes('crewx');
184
+ }
185
+ catch {
186
+ }
187
+ try {
188
+ const homeDir = os.homedir();
189
+ const copilotConfigPath = path.join(homeDir, '.config', 'github-copilot', 'mcp-servers.json');
190
+ if (fs.existsSync(copilotConfigPath)) {
191
+ const content = fs.readFileSync(copilotConfigPath, 'utf-8');
192
+ result.copilot = content.includes('"crewx"');
193
+ }
194
+ }
195
+ catch {
196
+ }
197
+ return result;
198
+ }
199
+ //# sourceMappingURL=mcp-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-installer.js","sourceRoot":"","sources":["../../src/utils/mcp-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface MentionTask {
2
+ agents: string[];
3
+ task: string;
4
+ type: 'shared' | 'individual';
5
+ models?: Map<string, string>;
6
+ }
7
+ export interface ParsedMentions {
8
+ tasks: MentionTask[];
9
+ unmatchedText: string[];
10
+ errors: string[];
11
+ }
12
+ export declare class MentionParser {
13
+ private readonly agentPattern;
14
+ private readonly validAgents;
15
+ constructor(validAgents: string[]);
16
+ parse(text: string): ParsedMentions;
17
+ }
18
+ export declare function loadAvailableAgents(configPath?: string): Promise<string[]>;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MentionParser = void 0;
37
+ exports.loadAvailableAgents = loadAvailableAgents;
38
+ const fs = __importStar(require("fs"));
39
+ const yaml = __importStar(require("js-yaml"));
40
+ class MentionParser {
41
+ constructor(validAgents) {
42
+ this.agentPattern = /(@[a-zA-Z0-9_]+(?::[a-zA-Z0-9._-]+)?)/g;
43
+ this.validAgents = new Set(validAgents);
44
+ }
45
+ parse(text) {
46
+ const tasks = [];
47
+ const errors = [];
48
+ const unmatchedText = [];
49
+ const parts = text.split(this.agentPattern);
50
+ let agentGroup = [];
51
+ let modelMap = new Map();
52
+ let taskText = '';
53
+ let leadingText = '';
54
+ if (parts.length > 0 && parts[0] && !parts[0].startsWith('@')) {
55
+ leadingText = parts.shift()?.trim() || '';
56
+ }
57
+ for (const part of parts) {
58
+ if (!part)
59
+ continue;
60
+ if (part.startsWith('@')) {
61
+ const mentionPart = part.substring(1);
62
+ const [agentId, model] = mentionPart.split(':');
63
+ if (!agentId)
64
+ continue;
65
+ if (this.validAgents.has(agentId)) {
66
+ if (taskText.trim() && agentGroup.length > 0) {
67
+ tasks.push({
68
+ agents: agentGroup,
69
+ task: taskText.trim(),
70
+ type: agentGroup.length > 1 ? 'shared' : 'individual',
71
+ models: modelMap.size > 0 ? modelMap : undefined,
72
+ });
73
+ agentGroup = [agentId];
74
+ modelMap = new Map();
75
+ if (model) {
76
+ modelMap.set(agentId, model);
77
+ }
78
+ taskText = '';
79
+ }
80
+ else {
81
+ agentGroup.push(agentId);
82
+ if (model) {
83
+ modelMap.set(agentId, model);
84
+ }
85
+ }
86
+ }
87
+ else {
88
+ errors.push(`Unknown agent: @${agentId}`);
89
+ }
90
+ }
91
+ else {
92
+ taskText += part;
93
+ }
94
+ }
95
+ if (agentGroup.length > 0) {
96
+ const trimmedTask = taskText.trim();
97
+ if (trimmedTask) {
98
+ tasks.push({
99
+ agents: agentGroup,
100
+ task: trimmedTask,
101
+ type: agentGroup.length > 1 ? 'shared' : 'individual',
102
+ models: modelMap.size > 0 ? modelMap : undefined,
103
+ });
104
+ }
105
+ }
106
+ else if (taskText.trim()) {
107
+ unmatchedText.push(taskText.trim());
108
+ }
109
+ if (leadingText) {
110
+ if (tasks.length > 0 && tasks[0]) {
111
+ tasks[0].task = leadingText + ' ' + (tasks[0].task || '');
112
+ }
113
+ else {
114
+ unmatchedText.push(leadingText);
115
+ }
116
+ }
117
+ return { tasks, unmatchedText, errors };
118
+ }
119
+ }
120
+ exports.MentionParser = MentionParser;
121
+ async function loadAvailableAgents(configPath = 'agents.yaml') {
122
+ try {
123
+ const fileContents = await fs.promises.readFile(configPath, 'utf8');
124
+ const config = yaml.load(fileContents);
125
+ if (config && Array.isArray(config.agents)) {
126
+ return config.agents.map((agent) => agent.id);
127
+ }
128
+ console.warn(`Warning: Could not find agents in ${configPath}.`);
129
+ return [];
130
+ }
131
+ catch (error) {
132
+ console.error(`Error loading or parsing ${configPath}:`, error);
133
+ return [];
134
+ }
135
+ }
136
+ //# sourceMappingURL=mention-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-parser.js","sourceRoot":"","sources":["../../src/utils/mention-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class CliOptionSorter {
2
+ static sortOptions(options: string[]): string[];
3
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliOptionSorter = void 0;
4
+ class CliOptionSorter {
5
+ static sortOptions(options) {
6
+ return [...options].sort((a, b) => {
7
+ const aIsLong = a.startsWith('--');
8
+ const aIsShort = a.startsWith('-') && !a.startsWith('--');
9
+ const bIsLong = b.startsWith('--');
10
+ const bIsShort = b.startsWith('-') && !b.startsWith('--');
11
+ if (aIsLong && bIsShort)
12
+ return -1;
13
+ if (bIsLong && aIsShort)
14
+ return 1;
15
+ return 0;
16
+ });
17
+ }
18
+ }
19
+ exports.CliOptionSorter = CliOptionSorter;
20
+ //# sourceMappingURL=simple-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-security.js","sourceRoot":"","sources":["../../src/utils/simple-security.ts"],"names":[],"mappings":";;;AAQA,MAAa,eAAe;IAO1B,MAAM,CAAC,WAAW,CAAC,OAAiB;QAClC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAG1D,IAAI,OAAO,IAAI,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAC;YACnC,IAAI,OAAO,IAAI,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAGlC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtBD,0CAsBC"}
@@ -0,0 +1,2 @@
1
+ export declare function readStdin(): Promise<string | null>;
2
+ export declare function formatPipedContext(pipedContent: string): string;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readStdin = readStdin;
4
+ exports.formatPipedContext = formatPipedContext;
5
+ const timeout_config_1 = require("../config/timeout.config");
6
+ async function readStdin() {
7
+ const timeoutConfig = (0, timeout_config_1.getTimeoutConfig)();
8
+ if (process.stdin.isTTY) {
9
+ return null;
10
+ }
11
+ return new Promise((resolve, reject) => {
12
+ let data = '';
13
+ let chunks = 0;
14
+ let dataTimeout = null;
15
+ process.stdin.setEncoding('utf8');
16
+ const debug = process.env.DEBUG_STDIN === '1';
17
+ if (debug) {
18
+ console.error('[STDIN] Waiting for piped input...');
19
+ }
20
+ const dataHandler = (chunk) => {
21
+ chunks++;
22
+ data += chunk;
23
+ if (debug) {
24
+ console.error(`[STDIN] Received chunk ${chunks}: "${chunk.substring(0, 50)}..."`);
25
+ }
26
+ if (dataTimeout) {
27
+ clearTimeout(dataTimeout);
28
+ }
29
+ const looksComplete = /āœ….*completed successfully\s*$/.test(data);
30
+ const timeout = looksComplete ? timeoutConfig.stdinComplete : timeoutConfig.stdinChunk;
31
+ dataTimeout = setTimeout(() => {
32
+ cleanup();
33
+ resolve(data.trim() || null);
34
+ }, timeout);
35
+ };
36
+ const endHandler = () => {
37
+ cleanup();
38
+ resolve(data.trim() || null);
39
+ };
40
+ const errorHandler = (error) => {
41
+ cleanup();
42
+ reject(error);
43
+ };
44
+ const cleanup = () => {
45
+ if (dataTimeout) {
46
+ clearTimeout(dataTimeout);
47
+ dataTimeout = null;
48
+ }
49
+ process.stdin.removeListener('data', dataHandler);
50
+ process.stdin.removeListener('end', endHandler);
51
+ process.stdin.removeListener('error', errorHandler);
52
+ };
53
+ process.stdin.on('data', dataHandler);
54
+ process.stdin.on('end', endHandler);
55
+ process.stdin.on('error', errorHandler);
56
+ const initialTimeout = setTimeout(() => {
57
+ if (chunks === 0) {
58
+ if (debug) {
59
+ console.error('[STDIN] Timeout - no data received');
60
+ }
61
+ cleanup();
62
+ resolve(null);
63
+ }
64
+ }, timeoutConfig.stdinInitial);
65
+ process.stdin.once('data', () => clearTimeout(initialTimeout));
66
+ process.stdin.once('end', () => clearTimeout(initialTimeout));
67
+ });
68
+ }
69
+ function extractAIResponse(content) {
70
+ const debug = process.env.DEBUG_STDIN === '1';
71
+ const responseMatch = content.match(/šŸ“„ Response:\s*\n[-─]+\s*\n([\s\S]*?)(?:\n\nšŸ“|$)/);
72
+ if (debug) {
73
+ console.error(`[STDIN] Extract: input length=${content.length}, hasMatch=${!!responseMatch}`);
74
+ if (responseMatch && responseMatch[1]) {
75
+ console.error(`[STDIN] Extracted: "${responseMatch[1].substring(0, 100)}..."`);
76
+ }
77
+ }
78
+ if (responseMatch && responseMatch[1]) {
79
+ return responseMatch[1].trim();
80
+ }
81
+ return content.trim();
82
+ }
83
+ function formatPipedContext(pipedContent) {
84
+ const cleanContent = extractAIResponse(pipedContent);
85
+ return `Previous step result:\n${cleanContent}\n\nPlease use this information as context for the current task.`;
86
+ }
87
+ //# sourceMappingURL=stdin-utils.js.map