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.
- package/LICENSE +197 -9
- package/README.md +120 -28
- package/crewx.yaml +1273 -0
- package/dist/agent.types.d.ts +92 -0
- package/dist/agent.types.js +16 -0
- package/dist/agent.types.js.map +1 -0
- package/dist/ai-provider.service.d.ts +25 -0
- package/dist/ai-provider.service.js +138 -0
- package/dist/ai-provider.service.js.map +1 -0
- package/dist/ai.service.d.ts +50 -0
- package/dist/ai.service.js +625 -0
- package/dist/ai.service.js.map +1 -0
- package/dist/app.module.d.ts +5 -0
- package/dist/app.module.js +88 -0
- package/dist/app.module.js.map +1 -0
- package/dist/cli/chat.handler.d.ts +19 -0
- package/dist/cli/chat.handler.js +429 -0
- package/dist/cli/chat.handler.js.map +1 -0
- package/dist/cli/cli.handler.d.ts +4 -0
- package/dist/cli/cli.handler.js +93 -0
- package/dist/cli/cli.handler.js.map +1 -0
- package/dist/cli/doctor.handler.d.ts +36 -0
- package/dist/cli/doctor.handler.js +382 -0
- package/dist/cli/doctor.handler.js.map +1 -0
- package/dist/cli/execute.handler.d.ts +2 -0
- package/dist/cli/execute.handler.js +269 -0
- package/dist/cli/execute.handler.js.map +1 -0
- package/dist/cli/help.handler.d.ts +2 -0
- package/dist/cli/help.handler.js +10 -0
- package/dist/cli/help.handler.js.map +1 -0
- package/dist/cli/init.handler.d.ts +25 -0
- package/dist/cli/init.handler.js +355 -0
- package/dist/cli/init.handler.js.map +1 -0
- package/dist/cli/query.handler.d.ts +2 -0
- package/dist/cli/query.handler.js +351 -0
- package/dist/cli/query.handler.js.map +1 -0
- package/dist/cli/templates.handler.d.ts +2 -0
- package/dist/cli/templates.handler.js +100 -0
- package/dist/cli/templates.handler.js.map +1 -0
- package/dist/cli-options.d.ts +22 -0
- package/dist/cli-options.js +195 -0
- package/dist/cli-options.js.map +1 -0
- package/dist/config/timeout.config.d.ts +14 -0
- package/dist/config/timeout.config.js +34 -0
- package/dist/config/timeout.config.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
- package/dist/conversation/base-conversation-history.provider.js +45 -0
- package/dist/conversation/base-conversation-history.provider.js.map +1 -0
- package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
- package/dist/conversation/cli-conversation-history.provider.js +104 -0
- package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
- package/dist/conversation/conversation-config.d.ts +9 -0
- package/dist/conversation/conversation-config.js +25 -0
- package/dist/conversation/conversation-config.js.map +1 -0
- package/dist/conversation/conversation-history.interface.d.ts +25 -0
- package/dist/conversation/conversation-history.interface.js +3 -0
- package/dist/conversation/conversation-history.interface.js.map +1 -0
- package/dist/conversation/conversation-provider.factory.d.ts +10 -0
- package/dist/conversation/conversation-provider.factory.js +50 -0
- package/dist/conversation/conversation-provider.factory.js.map +1 -0
- package/dist/conversation/conversation-storage.service.d.ts +15 -0
- package/dist/conversation/conversation-storage.service.js +182 -0
- package/dist/conversation/conversation-storage.service.js.map +1 -0
- package/dist/conversation/index.d.ts +7 -0
- package/dist/conversation/index.js +24 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/slack-conversation-history.provider.d.ts +22 -0
- package/dist/conversation/slack-conversation-history.provider.js +239 -0
- package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
- package/dist/crewx.tool.d.ts +421 -0
- package/dist/crewx.tool.js +1240 -0
- package/dist/crewx.tool.js.map +1 -0
- package/dist/knowledge/DocumentManager.d.ts +4 -0
- package/dist/knowledge/DocumentManager.js +119 -0
- package/dist/knowledge/DocumentManager.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +230 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp.controller.d.ts +8 -0
- package/dist/mcp.controller.js +60 -0
- package/dist/mcp.controller.js.map +1 -0
- package/dist/project.service.d.ts +44 -0
- package/dist/project.service.js +299 -0
- package/dist/project.service.js.map +1 -0
- package/dist/providers/ai-provider.interface.d.ts +30 -0
- package/dist/providers/ai-provider.interface.js +11 -0
- package/dist/providers/ai-provider.interface.js.map +1 -0
- package/dist/providers/base-ai.provider.d.ts +42 -0
- package/dist/providers/base-ai.provider.js +515 -0
- package/dist/providers/base-ai.provider.js.map +1 -0
- package/dist/providers/claude.provider.d.ts +25 -0
- package/dist/providers/claude.provider.js +376 -0
- package/dist/providers/claude.provider.js.map +1 -0
- package/dist/providers/copilot.provider.d.ts +25 -0
- package/dist/providers/copilot.provider.js +280 -0
- package/dist/providers/copilot.provider.js.map +1 -0
- package/dist/providers/gemini.provider.d.ts +22 -0
- package/dist/providers/gemini.provider.js +163 -0
- package/dist/providers/gemini.provider.js.map +1 -0
- package/dist/services/agent-loader.service.d.ts +23 -0
- package/dist/services/agent-loader.service.js +313 -0
- package/dist/services/agent-loader.service.js.map +1 -0
- package/dist/services/config-validator.service.d.ts +28 -0
- package/dist/services/config-validator.service.js +427 -0
- package/dist/services/config-validator.service.js.map +1 -0
- package/dist/services/config.service.d.ts +25 -0
- package/dist/services/config.service.js +102 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/context-enhancement.service.d.ts +13 -0
- package/dist/services/context-enhancement.service.js +169 -0
- package/dist/services/context-enhancement.service.js.map +1 -0
- package/dist/services/document-loader.service.d.ts +16 -0
- package/dist/services/document-loader.service.js +137 -0
- package/dist/services/document-loader.service.js.map +1 -0
- package/dist/services/help.service.d.ts +5 -0
- package/dist/services/help.service.js +112 -0
- package/dist/services/help.service.js.map +1 -0
- package/dist/services/intelligent-compression.service.d.ts +20 -0
- package/dist/services/intelligent-compression.service.js +179 -0
- package/dist/services/intelligent-compression.service.js.map +1 -0
- package/dist/services/parallel-processing.service.d.ts +108 -0
- package/dist/services/parallel-processing.service.js +266 -0
- package/dist/services/parallel-processing.service.js.map +1 -0
- package/dist/services/result-formatter.service.d.ts +27 -0
- package/dist/services/result-formatter.service.js +126 -0
- package/dist/services/result-formatter.service.js.map +1 -0
- package/dist/services/task-management.service.d.ts +63 -0
- package/dist/services/task-management.service.js +270 -0
- package/dist/services/task-management.service.js.map +1 -0
- package/dist/services/template.service.d.ts +36 -0
- package/dist/services/template.service.js +195 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/services/tool-call.service.d.ts +53 -0
- package/dist/services/tool-call.service.js +819 -0
- package/dist/services/tool-call.service.js.map +1 -0
- package/dist/slack/formatters/message.formatter.d.ts +25 -0
- package/dist/slack/formatters/message.formatter.js +246 -0
- package/dist/slack/formatters/message.formatter.js.map +1 -0
- package/dist/slack/slack-bot.d.ts +23 -0
- package/dist/slack/slack-bot.js +435 -0
- package/dist/slack/slack-bot.js.map +1 -0
- package/dist/stderr.logger.d.ts +8 -0
- package/dist/stderr.logger.js +26 -0
- package/dist/stderr.logger.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils/config-utils.d.ts +15 -0
- package/dist/utils/config-utils.js +69 -0
- package/dist/utils/config-utils.js.map +1 -0
- package/dist/utils/error-utils.d.ts +3 -0
- package/dist/utils/error-utils.js +27 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/math-utils.d.ts +3 -0
- package/dist/utils/math-utils.js +10 -0
- package/dist/utils/math-utils.js.map +1 -0
- package/dist/utils/mcp-installer.d.ts +20 -0
- package/dist/utils/mcp-installer.js +199 -0
- package/dist/utils/mcp-installer.js.map +1 -0
- package/dist/utils/mention-parser.d.ts +18 -0
- package/dist/utils/mention-parser.js +136 -0
- package/dist/utils/mention-parser.js.map +1 -0
- package/dist/utils/simple-security.d.ts +3 -0
- package/dist/utils/simple-security.js +20 -0
- package/dist/utils/simple-security.js.map +1 -0
- package/dist/utils/stdin-utils.d.ts +2 -0
- package/dist/utils/stdin-utils.js +87 -0
- package/dist/utils/stdin-utils.js.map +1 -0
- package/dist/utils/string-utils.d.ts +1 -0
- package/dist/utils/string-utils.js +10 -0
- package/dist/utils/string-utils.js.map +1 -0
- package/dist/utils/template-processor.d.ts +32 -0
- package/dist/utils/template-processor.js +188 -0
- package/dist/utils/template-processor.js.map +1 -0
- package/docs/agent-configuration.md +373 -0
- package/docs/agent-registry-strategy.md +348 -0
- package/docs/branding-decision-crewx.md +395 -0
- package/docs/claude-code-docker-guide.md +264 -0
- package/docs/cli-guide.md +295 -0
- package/docs/development.md +595 -0
- package/docs/guides/agent-best-practices.md +97 -0
- package/docs/guides/bug-management.md +600 -0
- package/docs/guides/git-bug-reference.md +366 -0
- package/docs/mcp-integration.md +187 -0
- package/docs/process/development-workflow.md +84 -0
- package/docs/roadmap.md +528 -0
- package/docs/rules/branch-protection.md +40 -0
- package/docs/standards/rc-versioning.md +60 -0
- package/docs/standards/report-structure.md +67 -0
- package/docs/templates.md +517 -0
- package/docs/tools.md +583 -0
- package/docs/troubleshooting.md +585 -0
- package/package.json +106 -21
- package/bin/crewx.js +0 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-utils.js","sourceRoot":"","sources":["../../src/utils/stdin-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function capitalizeFirstLetter(str: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.capitalizeFirstLetter = capitalizeFirstLetter;
|
|
4
|
+
function capitalizeFirstLetter(str) {
|
|
5
|
+
if (!str || str.length === 0) {
|
|
6
|
+
return str;
|
|
7
|
+
}
|
|
8
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=string-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-utils.js","sourceRoot":"","sources":["../../src/utils/string-utils.ts"],"names":[],"mappings":";;AAIA,sDAKC;AALD,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DocumentLoaderService } from '../services/document-loader.service';
|
|
2
|
+
export interface TemplateContext {
|
|
3
|
+
env?: Record<string, string | undefined>;
|
|
4
|
+
options?: string[];
|
|
5
|
+
agent?: {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
provider: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
workingDirectory?: string;
|
|
11
|
+
};
|
|
12
|
+
mode?: 'query' | 'execute';
|
|
13
|
+
messages?: Array<{
|
|
14
|
+
text: string;
|
|
15
|
+
isAssistant: boolean;
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
}>;
|
|
18
|
+
platform?: 'slack' | 'cli';
|
|
19
|
+
tools?: {
|
|
20
|
+
list: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
input_schema: any;
|
|
24
|
+
output_schema?: any;
|
|
25
|
+
}>;
|
|
26
|
+
json: string;
|
|
27
|
+
count: number;
|
|
28
|
+
};
|
|
29
|
+
vars?: Record<string, any>;
|
|
30
|
+
}
|
|
31
|
+
export declare function processDocumentTemplate(template: string, documentLoader: DocumentLoaderService, additionalContext?: TemplateContext): Promise<string>;
|
|
32
|
+
export declare function hasDocumentReferences(template: string): boolean;
|
|
@@ -0,0 +1,188 @@
|
|
|
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.processDocumentTemplate = processDocumentTemplate;
|
|
37
|
+
exports.hasDocumentReferences = hasDocumentReferences;
|
|
38
|
+
const Handlebars = __importStar(require("handlebars"));
|
|
39
|
+
async function processDocumentTemplate(template, documentLoader, additionalContext) {
|
|
40
|
+
if (!documentLoader.isInitialized()) {
|
|
41
|
+
if (!additionalContext) {
|
|
42
|
+
return template;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const context = {
|
|
46
|
+
documents: {},
|
|
47
|
+
env: additionalContext?.env || process.env,
|
|
48
|
+
options: additionalContext?.options || [],
|
|
49
|
+
agent: additionalContext?.agent || {},
|
|
50
|
+
mode: additionalContext?.mode,
|
|
51
|
+
messages: additionalContext?.messages || [],
|
|
52
|
+
platform: additionalContext?.platform,
|
|
53
|
+
tools: additionalContext?.tools,
|
|
54
|
+
vars: additionalContext?.vars || {},
|
|
55
|
+
};
|
|
56
|
+
registerHandlebarsHelpers();
|
|
57
|
+
const pattern = /{{{documents\.([^.}]+)\.([^}]+)}}}/g;
|
|
58
|
+
const matches = [...template.matchAll(pattern)];
|
|
59
|
+
if (matches.length > 0 && documentLoader.isInitialized()) {
|
|
60
|
+
const docNames = Array.from(new Set(matches.map(m => m[1]).filter((name) => !!name)));
|
|
61
|
+
for (const docName of docNames) {
|
|
62
|
+
let content = await documentLoader.getDocumentContent(docName);
|
|
63
|
+
const toc = await documentLoader.getDocumentToc(docName);
|
|
64
|
+
const summary = await documentLoader.getDocumentSummary(docName);
|
|
65
|
+
if (content) {
|
|
66
|
+
try {
|
|
67
|
+
const docTemplate = Handlebars.compile(content, { noEscape: true });
|
|
68
|
+
content = docTemplate(context);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
context.documents[docName] = {
|
|
74
|
+
content: content || '',
|
|
75
|
+
toc: toc || '',
|
|
76
|
+
summary: summary || '',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const compiledTemplate = Handlebars.compile(template, { noEscape: true });
|
|
81
|
+
return compiledTemplate(context);
|
|
82
|
+
}
|
|
83
|
+
function registerHandlebarsHelpers() {
|
|
84
|
+
if (Handlebars.helpers['eq']) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
Handlebars.registerHelper('eq', function (a, b) {
|
|
88
|
+
return a === b;
|
|
89
|
+
});
|
|
90
|
+
Handlebars.registerHelper('ne', function (a, b) {
|
|
91
|
+
return a !== b;
|
|
92
|
+
});
|
|
93
|
+
Handlebars.registerHelper('contains', function (array, value) {
|
|
94
|
+
return Array.isArray(array) && array.includes(value);
|
|
95
|
+
});
|
|
96
|
+
Handlebars.registerHelper('and', function (a, b) {
|
|
97
|
+
return a && b;
|
|
98
|
+
});
|
|
99
|
+
Handlebars.registerHelper('or', function (a, b) {
|
|
100
|
+
return a || b;
|
|
101
|
+
});
|
|
102
|
+
Handlebars.registerHelper('not', function (a) {
|
|
103
|
+
return !a;
|
|
104
|
+
});
|
|
105
|
+
Handlebars.registerHelper('json', function (context) {
|
|
106
|
+
return JSON.stringify(context, null, 2);
|
|
107
|
+
});
|
|
108
|
+
Handlebars.registerHelper('truncate', function (text, maxLength) {
|
|
109
|
+
if (!text)
|
|
110
|
+
return '';
|
|
111
|
+
if (text.length <= maxLength)
|
|
112
|
+
return text;
|
|
113
|
+
const remaining = text.length - maxLength;
|
|
114
|
+
return `${text.substring(0, maxLength)} (...+${remaining} chars)`;
|
|
115
|
+
});
|
|
116
|
+
Handlebars.registerHelper('length', function (array) {
|
|
117
|
+
if (Array.isArray(array))
|
|
118
|
+
return array.length;
|
|
119
|
+
if (typeof array === 'string')
|
|
120
|
+
return array.length;
|
|
121
|
+
return 0;
|
|
122
|
+
});
|
|
123
|
+
Handlebars.registerHelper('formatConversation', function (messages, platform, options) {
|
|
124
|
+
const { Logger: NestLogger } = require('@nestjs/common');
|
|
125
|
+
const helperLogger = new NestLogger('FormatConversation');
|
|
126
|
+
const isBlockHelper = options && typeof options.fn === 'function';
|
|
127
|
+
helperLogger.log(`🔧 formatConversation helper called! Mode: ${isBlockHelper ? 'CUSTOM' : 'DEFAULT'}`);
|
|
128
|
+
helperLogger.log(`Messages type: ${typeof messages}, Is array: ${Array.isArray(messages)}, Length: ${messages?.length || 0}`);
|
|
129
|
+
helperLogger.log(`Platform: ${platform}`);
|
|
130
|
+
if (!messages || messages.length === 0) {
|
|
131
|
+
helperLogger.warn(`⚠️ formatConversation: messages empty or undefined, returning empty string`);
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
let content;
|
|
135
|
+
if (isBlockHelper) {
|
|
136
|
+
helperLogger.log(`📝 Using CUSTOM user template from block`);
|
|
137
|
+
content = options.fn({
|
|
138
|
+
messages,
|
|
139
|
+
platform,
|
|
140
|
+
messagesCount: messages.length
|
|
141
|
+
});
|
|
142
|
+
helperLogger.debug(`📤 Custom template rendered output length: ${content.length} characters`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
helperLogger.log(`📦 Using DEFAULT template from .crewx/templates`);
|
|
146
|
+
const fs = require('fs');
|
|
147
|
+
const path = require('path');
|
|
148
|
+
const templatePath = path.join(process.cwd(), '.crewx', 'templates', 'conversation-history-default.hbs');
|
|
149
|
+
let templateContent;
|
|
150
|
+
let templateSource = 'inline-fallback';
|
|
151
|
+
try {
|
|
152
|
+
templateContent = fs.readFileSync(templatePath, 'utf8');
|
|
153
|
+
templateSource = templatePath;
|
|
154
|
+
helperLogger.debug(`✅ Loaded conversation template from: ${templatePath}`);
|
|
155
|
+
helperLogger.debug(`📏 Template content length: ${templateContent.length} characters`);
|
|
156
|
+
helperLogger.debug(`📊 Messages count: ${messages.length}, Platform: ${platform}`);
|
|
157
|
+
helperLogger.debug(`📝 First message sample: ${JSON.stringify(messages[0], null, 2)}`);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
helperLogger.warn(`⚠️ Failed to load template from ${templatePath}, using inline fallback`);
|
|
161
|
+
helperLogger.warn(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
162
|
+
templateContent = `{{#if messages}}Previous conversation ({{messagesCount}} messages):
|
|
163
|
+
{{#each messages}}
|
|
164
|
+
{{#if isAssistant}}
|
|
165
|
+
**Assistant{{#if metadata.agent_id}} (@{{metadata.agent_id}}){{/if}}**
|
|
166
|
+
{{else}}
|
|
167
|
+
**{{#if metadata.slack}}{{#with metadata.slack}}{{#if user_profile.display_name}}{{user_profile.display_name}}{{else if username}}{{username}}{{else if user_id}}User ({{user_id}}){{else}}User{{/if}}{{/with}}{{else}}User{{/if}}**
|
|
168
|
+
{{/if}}: {{{text}}}
|
|
169
|
+
{{/each}}{{/if}}`;
|
|
170
|
+
}
|
|
171
|
+
const template = Handlebars.compile(templateContent, { noEscape: true });
|
|
172
|
+
content = template({
|
|
173
|
+
messages,
|
|
174
|
+
platform,
|
|
175
|
+
messagesCount: messages.length
|
|
176
|
+
});
|
|
177
|
+
helperLogger.debug(`📤 Default template rendered output length: ${content.length} characters`);
|
|
178
|
+
helperLogger.debug(`📍 Template source: ${templateSource}`);
|
|
179
|
+
}
|
|
180
|
+
const result = `${content}`;
|
|
181
|
+
helperLogger.debug(`📄 Final output (with tags):\n${result}`);
|
|
182
|
+
return result;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
function hasDocumentReferences(template) {
|
|
186
|
+
return /{{{documents\.[^}]+}}}/g.test(template);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=template-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-processor.js","sourceRoot":"","sources":["../../src/utils/template-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# Agent Configuration Guide
|
|
2
|
+
|
|
3
|
+
Complete guide for configuring custom specialist agents in CrewX.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
Create a `crewx.yaml` file in your project:
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
agents:
|
|
11
|
+
- id: "frontend_dev"
|
|
12
|
+
name: "React Expert"
|
|
13
|
+
provider: "claude"
|
|
14
|
+
working_directory: "./src"
|
|
15
|
+
inline:
|
|
16
|
+
type: "agent"
|
|
17
|
+
system_prompt: |
|
|
18
|
+
You are a senior React developer.
|
|
19
|
+
Provide detailed examples and best practices.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> **Note:** While `agents.yaml` is still supported for backward compatibility, `crewx.yaml` is the preferred filename. If both files exist, `crewx.yaml` takes priority.
|
|
23
|
+
|
|
24
|
+
## Agent Configuration Structure
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
agents:
|
|
28
|
+
- id: "agent_id" # Required: Unique identifier
|
|
29
|
+
name: "Human Readable Name" # Optional: Display name
|
|
30
|
+
provider: "claude" # Required: AI provider (string or array)
|
|
31
|
+
working_directory: "/path/to/dir" # Optional: Working directory
|
|
32
|
+
options: # Optional: CLI options
|
|
33
|
+
query: # Options for query mode
|
|
34
|
+
- "--add-dir=."
|
|
35
|
+
execute: # Options for execute mode
|
|
36
|
+
- "--add-dir=."
|
|
37
|
+
- "--allowedTools=Edit,Bash"
|
|
38
|
+
inline: # Required: Agent definition
|
|
39
|
+
type: "agent" # Required: Type
|
|
40
|
+
model: "opus" # Optional: Specific model
|
|
41
|
+
system_prompt: | # Required: Instructions
|
|
42
|
+
Your agent's system prompt
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Provider Configuration
|
|
46
|
+
|
|
47
|
+
### Single Provider (Fixed)
|
|
48
|
+
|
|
49
|
+
Use a single string to fix the provider:
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
agents:
|
|
53
|
+
- id: "claude_only"
|
|
54
|
+
provider: "claude" # Always uses Claude, no fallback
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Multiple Providers (Fallback)
|
|
58
|
+
|
|
59
|
+
Use an array for automatic fallback:
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
agents:
|
|
63
|
+
- id: "flexible_agent"
|
|
64
|
+
provider: ["claude", "gemini", "copilot"] # Tries in order
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Behavior:**
|
|
68
|
+
- Tries providers in order until one is available
|
|
69
|
+
- If model is specified, uses first provider without fallback
|
|
70
|
+
|
|
71
|
+
### Provider-Specific Options
|
|
72
|
+
|
|
73
|
+
Configure different options for each provider:
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
agents:
|
|
77
|
+
- id: "multi_provider"
|
|
78
|
+
provider: ["claude", "gemini", "copilot"]
|
|
79
|
+
options:
|
|
80
|
+
execute:
|
|
81
|
+
claude:
|
|
82
|
+
- "--permission-mode=acceptEdits"
|
|
83
|
+
- "--add-dir=."
|
|
84
|
+
gemini:
|
|
85
|
+
- "--include-directories=."
|
|
86
|
+
copilot:
|
|
87
|
+
- "--add-dir=."
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Mode-Specific Options
|
|
91
|
+
|
|
92
|
+
### Query Mode vs Execute Mode
|
|
93
|
+
|
|
94
|
+
**Query Mode** (read-only):
|
|
95
|
+
```yaml
|
|
96
|
+
options:
|
|
97
|
+
query:
|
|
98
|
+
- "--add-dir=."
|
|
99
|
+
- "--verbose"
|
|
100
|
+
# No file modification tools
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Execute Mode** (file operations):
|
|
104
|
+
```yaml
|
|
105
|
+
options:
|
|
106
|
+
execute:
|
|
107
|
+
- "--add-dir=."
|
|
108
|
+
- "--allowedTools=Edit,Bash"
|
|
109
|
+
# Can create/modify files
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Model Selection
|
|
113
|
+
|
|
114
|
+
Specify AI models in configuration or at runtime:
|
|
115
|
+
|
|
116
|
+
### In Configuration
|
|
117
|
+
```yaml
|
|
118
|
+
agents:
|
|
119
|
+
- id: "opus_agent"
|
|
120
|
+
provider: "claude"
|
|
121
|
+
inline:
|
|
122
|
+
model: "opus" # Fixed model
|
|
123
|
+
system_prompt: "You are an expert."
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### At Runtime
|
|
127
|
+
```bash
|
|
128
|
+
# Override model with @agent:model syntax
|
|
129
|
+
crewx query "@claude:haiku quick analysis"
|
|
130
|
+
crewx execute "@gemini:gemini-2.5-flash rapid prototyping"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Available Models:**
|
|
134
|
+
|
|
135
|
+
**Claude:**
|
|
136
|
+
- `opus` - Most capable, detailed
|
|
137
|
+
- `sonnet` - Balanced performance
|
|
138
|
+
- `haiku` - Fast, concise
|
|
139
|
+
- `claude-sonnet-4-5`
|
|
140
|
+
- `claude-sonnet-4-5-20250929`
|
|
141
|
+
|
|
142
|
+
**Gemini:**
|
|
143
|
+
- `gemini-2.5-pro` - High quality (default)
|
|
144
|
+
- `gemini-2.5-flash` - Fast responses
|
|
145
|
+
|
|
146
|
+
**Copilot:**
|
|
147
|
+
- `gpt-5`
|
|
148
|
+
- `claude-sonnet-4`
|
|
149
|
+
- `claude-sonnet-4.5`
|
|
150
|
+
|
|
151
|
+
## Working Directory
|
|
152
|
+
|
|
153
|
+
Set the working directory for each agent:
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
agents:
|
|
157
|
+
- id: "frontend_dev"
|
|
158
|
+
working_directory: "./src/frontend"
|
|
159
|
+
|
|
160
|
+
- id: "backend_dev"
|
|
161
|
+
working_directory: "./src/backend"
|
|
162
|
+
|
|
163
|
+
- id: "full_stack"
|
|
164
|
+
working_directory: "." # Project root
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Complete Example
|
|
168
|
+
|
|
169
|
+
```yaml
|
|
170
|
+
agents:
|
|
171
|
+
# Frontend specialist
|
|
172
|
+
- id: "frontend_developer"
|
|
173
|
+
name: "React Expert"
|
|
174
|
+
provider: "claude"
|
|
175
|
+
working_directory: "./src/frontend"
|
|
176
|
+
options:
|
|
177
|
+
query:
|
|
178
|
+
- "--add-dir=."
|
|
179
|
+
- "--verbose"
|
|
180
|
+
execute:
|
|
181
|
+
- "--add-dir=."
|
|
182
|
+
- "--allowedTools=Edit,Bash"
|
|
183
|
+
inline:
|
|
184
|
+
type: "agent"
|
|
185
|
+
model: "sonnet"
|
|
186
|
+
system_prompt: |
|
|
187
|
+
You are a senior frontend developer specializing in React.
|
|
188
|
+
|
|
189
|
+
**Expertise:**
|
|
190
|
+
- React 18+ with TypeScript
|
|
191
|
+
- State management (Redux, Zustand)
|
|
192
|
+
- Component design patterns
|
|
193
|
+
- Performance optimization
|
|
194
|
+
|
|
195
|
+
**Guidelines:**
|
|
196
|
+
- Always use TypeScript strict mode
|
|
197
|
+
- Prefer functional components with hooks
|
|
198
|
+
- Write comprehensive PropTypes/TypeScript types
|
|
199
|
+
- Follow accessibility (a11y) best practices
|
|
200
|
+
|
|
201
|
+
# Backend specialist with fallback
|
|
202
|
+
- id: "backend_developer"
|
|
203
|
+
name: "Backend Expert"
|
|
204
|
+
provider: ["gemini", "claude", "copilot"]
|
|
205
|
+
working_directory: "./src/backend"
|
|
206
|
+
options:
|
|
207
|
+
execute:
|
|
208
|
+
gemini:
|
|
209
|
+
- "--include-directories=."
|
|
210
|
+
- "--yolo"
|
|
211
|
+
claude:
|
|
212
|
+
- "--add-dir=."
|
|
213
|
+
- "--allowedTools=Edit,Bash"
|
|
214
|
+
inline:
|
|
215
|
+
type: "agent"
|
|
216
|
+
system_prompt: |
|
|
217
|
+
You are a backend engineering expert.
|
|
218
|
+
|
|
219
|
+
**Expertise:**
|
|
220
|
+
- RESTful API design
|
|
221
|
+
- Database optimization
|
|
222
|
+
- Authentication & authorization
|
|
223
|
+
- Microservices architecture
|
|
224
|
+
|
|
225
|
+
**Focus:**
|
|
226
|
+
- Security best practices
|
|
227
|
+
- Scalable architecture
|
|
228
|
+
- Error handling and logging
|
|
229
|
+
- API documentation
|
|
230
|
+
|
|
231
|
+
# DevOps specialist
|
|
232
|
+
- id: "devops_engineer"
|
|
233
|
+
name: "DevOps Expert"
|
|
234
|
+
provider: "copilot"
|
|
235
|
+
working_directory: "."
|
|
236
|
+
options:
|
|
237
|
+
query:
|
|
238
|
+
- "--allow-tool=files"
|
|
239
|
+
execute:
|
|
240
|
+
- "--allow-tool=terminal"
|
|
241
|
+
- "--allow-tool=files"
|
|
242
|
+
inline:
|
|
243
|
+
type: "agent"
|
|
244
|
+
system_prompt: |
|
|
245
|
+
You are a DevOps engineer expert in infrastructure and deployment.
|
|
246
|
+
|
|
247
|
+
**Expertise:**
|
|
248
|
+
- Docker and Kubernetes
|
|
249
|
+
- CI/CD pipelines
|
|
250
|
+
- Infrastructure as Code
|
|
251
|
+
- Monitoring and logging
|
|
252
|
+
|
|
253
|
+
**Focus:**
|
|
254
|
+
- Deployment automation
|
|
255
|
+
- Container orchestration
|
|
256
|
+
- Security and compliance
|
|
257
|
+
- Performance monitoring
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## CLI Options Reference
|
|
261
|
+
|
|
262
|
+
### Common Options
|
|
263
|
+
|
|
264
|
+
**Claude Code:**
|
|
265
|
+
- `--add-dir=PATH` - Add directory to context
|
|
266
|
+
- `--allowedTools=TOOLS` - Allowed tools (e.g., Edit,Bash)
|
|
267
|
+
- `--permission-mode=MODE` - Permission mode (acceptEdits, etc.)
|
|
268
|
+
- `--verbose` - Verbose output
|
|
269
|
+
|
|
270
|
+
**Gemini CLI:**
|
|
271
|
+
- `--include-directories=PATH` - Include directories
|
|
272
|
+
- `--yolo` - Auto-execute without confirmation
|
|
273
|
+
- `--allowed-mcp-server-names=NAME` - Allow MCP server
|
|
274
|
+
|
|
275
|
+
**Copilot CLI:**
|
|
276
|
+
- `--allow-tool=TOOL` - Allow specific tools (files, terminal)
|
|
277
|
+
- `--add-dir=PATH` - Add directory
|
|
278
|
+
|
|
279
|
+
### Query Mode vs Execute Mode
|
|
280
|
+
|
|
281
|
+
**Query Mode** (read-only):
|
|
282
|
+
- Safe for analysis and reviews
|
|
283
|
+
- No file modifications
|
|
284
|
+
- Use minimal permissions
|
|
285
|
+
|
|
286
|
+
**Execute Mode** (file operations):
|
|
287
|
+
- Can create/modify/delete files
|
|
288
|
+
- Requires appropriate tool permissions
|
|
289
|
+
- Use with caution
|
|
290
|
+
|
|
291
|
+
## Creating Agents via CLI
|
|
292
|
+
|
|
293
|
+
Use the `@crewx` assistant to create agents:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# Create a Python expert
|
|
297
|
+
crewx execute "@crewx Create a Python expert agent. ID 'python_expert', use claude sonnet. Specializes in code review, optimization, and debugging."
|
|
298
|
+
|
|
299
|
+
# Create a React specialist
|
|
300
|
+
crewx execute "@crewx Create a React specialist agent with TypeScript expertise"
|
|
301
|
+
|
|
302
|
+
# Create a DevOps agent
|
|
303
|
+
crewx execute "@crewx Create a DevOps agent for Docker and Kubernetes"
|
|
304
|
+
|
|
305
|
+
# Create a security analyst
|
|
306
|
+
crewx execute "@crewx Create a security analyst agent"
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
The `@crewx` assistant understands your request and creates a complete agent configuration.
|
|
310
|
+
|
|
311
|
+
## Best Practices
|
|
312
|
+
|
|
313
|
+
### 1. Specialize Your Agents
|
|
314
|
+
Create focused agents for specific domains:
|
|
315
|
+
- Frontend, backend, DevOps
|
|
316
|
+
- Testing, security, documentation
|
|
317
|
+
- Language-specific (Python, TypeScript, Go)
|
|
318
|
+
|
|
319
|
+
### 2. Use Appropriate Models
|
|
320
|
+
- **Haiku/Flash**: Quick answers, simple tasks
|
|
321
|
+
- **Sonnet/Pro**: Balanced, most use cases
|
|
322
|
+
- **Opus**: Complex analysis, detailed work
|
|
323
|
+
|
|
324
|
+
### 3. Set Working Directories
|
|
325
|
+
Limit agent scope to relevant directories:
|
|
326
|
+
```yaml
|
|
327
|
+
working_directory: "./src/specific-module"
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### 4. Configure Mode-Specific Options
|
|
331
|
+
Different options for query vs execute:
|
|
332
|
+
```yaml
|
|
333
|
+
options:
|
|
334
|
+
query: # Read-only analysis
|
|
335
|
+
- "--add-dir=."
|
|
336
|
+
execute: # File modifications
|
|
337
|
+
- "--add-dir=."
|
|
338
|
+
- "--allowedTools=Edit"
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 5. Use Provider Fallback
|
|
342
|
+
Ensure availability with multiple providers:
|
|
343
|
+
```yaml
|
|
344
|
+
provider: ["claude", "gemini", "copilot"]
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### 6. Write Clear System Prompts
|
|
348
|
+
Include:
|
|
349
|
+
- Role and expertise
|
|
350
|
+
- Specific guidelines
|
|
351
|
+
- Expected output format
|
|
352
|
+
- Constraints and limitations
|
|
353
|
+
|
|
354
|
+
## Validation
|
|
355
|
+
|
|
356
|
+
Check your configuration:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
crewx doctor
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
This validates:
|
|
363
|
+
- YAML syntax
|
|
364
|
+
- Required fields
|
|
365
|
+
- Provider availability
|
|
366
|
+
- Working directory existence
|
|
367
|
+
- Option compatibility
|
|
368
|
+
|
|
369
|
+
## Advanced Configuration
|
|
370
|
+
|
|
371
|
+
For advanced features like documents and templates, see:
|
|
372
|
+
- [Template System Guide](templates.md)
|
|
373
|
+
- [Tool System Guide](tools.md)
|