@sowonai/crewx-sdk 0.1.0-dev.4 → 0.1.0-dev.40
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/README.md +28 -0
- package/dist/config/yaml-loader.js +6 -2
- package/dist/config/yaml-loader.js.map +1 -1
- package/dist/conversation/conversation-history.interface.d.ts +6 -4
- package/dist/core/agent/agent-factory.d.ts +7 -7
- package/dist/core/agent/agent-factory.js +23 -0
- package/dist/core/agent/agent-factory.js.map +1 -1
- package/dist/core/agent/agent-runtime.d.ts +18 -2
- package/dist/core/agent/agent-runtime.js +128 -24
- package/dist/core/agent/agent-runtime.js.map +1 -1
- package/dist/core/agent/index.d.ts +1 -1
- package/dist/core/agent/index.js +2 -1
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/providers/ai-provider.interface.d.ts +1 -0
- package/dist/core/providers/ai-provider.interface.js.map +1 -1
- package/dist/core/providers/base-ai.provider.d.ts +7 -0
- package/dist/core/providers/base-ai.provider.js +8 -4
- package/dist/core/providers/base-ai.provider.js.map +1 -1
- package/dist/core/providers/claude.provider.d.ts +0 -11
- package/dist/core/providers/claude.provider.js +2 -262
- package/dist/core/providers/claude.provider.js.map +1 -1
- package/dist/core/providers/codex.provider.js +2 -2
- package/dist/core/providers/codex.provider.js.map +1 -1
- package/dist/core/providers/copilot.provider.d.ts +0 -10
- package/dist/core/providers/copilot.provider.js +0 -180
- package/dist/core/providers/copilot.provider.js.map +1 -1
- package/dist/core/providers/dynamic-provider.factory.d.ts +64 -0
- package/dist/core/providers/dynamic-provider.factory.js +533 -0
- package/dist/core/providers/dynamic-provider.factory.js.map +1 -0
- package/dist/core/providers/gemini.provider.d.ts +0 -11
- package/dist/core/providers/gemini.provider.js +0 -101
- package/dist/core/providers/gemini.provider.js.map +1 -1
- package/dist/core/providers/index.d.ts +3 -0
- package/dist/core/providers/index.js +7 -1
- package/dist/core/providers/index.js.map +1 -1
- package/dist/core/providers/mock.provider.d.ts +13 -0
- package/dist/core/providers/mock.provider.js +55 -0
- package/dist/core/providers/mock.provider.js.map +1 -0
- package/dist/core/providers/provider-factory.d.ts +3 -0
- package/dist/core/providers/provider-factory.js +27 -0
- package/dist/core/providers/provider-factory.js.map +1 -0
- package/dist/index.d.ts +17 -4
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/skills-parser.d.ts +8 -0
- package/dist/schema/skills-parser.js +421 -0
- package/dist/schema/skills-parser.js.map +1 -0
- package/dist/schema/skills.types.d.ts +144 -0
- package/dist/schema/skills.types.js +41 -0
- package/dist/schema/skills.types.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +19 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/layout-loader.service.d.ts +18 -0
- package/dist/services/layout-loader.service.js +266 -0
- package/dist/services/layout-loader.service.js.map +1 -0
- package/dist/services/layout-renderer.service.d.ts +25 -0
- package/dist/services/layout-renderer.service.js +226 -0
- package/dist/services/layout-renderer.service.js.map +1 -0
- package/dist/services/props-validator.service.d.ts +29 -0
- package/dist/services/props-validator.service.js +332 -0
- package/dist/services/props-validator.service.js.map +1 -0
- package/dist/skills/adapter/claude-skill-adapter.d.ts +11 -0
- package/dist/skills/adapter/claude-skill-adapter.js +222 -0
- package/dist/skills/adapter/claude-skill-adapter.js.map +1 -0
- package/dist/skills/index.d.ts +6 -0
- package/dist/skills/index.js +31 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/runtime/progressive-loader.d.ts +27 -0
- package/dist/skills/runtime/progressive-loader.js +186 -0
- package/dist/skills/runtime/progressive-loader.js.map +1 -0
- package/dist/skills/runtime/runtime-requirements-validator.d.ts +23 -0
- package/dist/skills/runtime/runtime-requirements-validator.js +248 -0
- package/dist/skills/runtime/runtime-requirements-validator.js.map +1 -0
- package/dist/skills/runtime/skill-runtime.service.d.ts +42 -0
- package/dist/skills/runtime/skill-runtime.service.js +434 -0
- package/dist/skills/runtime/skill-runtime.service.js.map +1 -0
- package/dist/types/agent.types.d.ts +10 -2
- package/dist/types/agent.types.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/layout.types.d.ts +113 -0
- package/dist/types/layout.types.js +22 -0
- package/dist/types/layout.types.js.map +1 -0
- package/dist/types/provider.types.d.ts +12 -0
- package/dist/types/provider.types.js +3 -0
- package/dist/types/provider.types.js.map +1 -0
- package/dist/types/skill-runtime.types.d.ts +244 -0
- package/dist/types/skill-runtime.types.js +44 -0
- package/dist/types/skill-runtime.types.js.map +1 -0
- package/dist/types/template.types.d.ts +38 -0
- package/dist/types/template.types.js +3 -0
- package/dist/types/template.types.js.map +1 -0
- package/package.json +14 -13
|
@@ -23,14 +23,6 @@ class CopilotProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
23
23
|
getNotInstalledMessage() {
|
|
24
24
|
return 'GitHub Copilot CLI is not installed. Please refer to https://docs.github.com/copilot/how-tos/set-up/install-copilot-cli to install it.';
|
|
25
25
|
}
|
|
26
|
-
async execute(prompt, options = {}) {
|
|
27
|
-
if (this.toolCallHandler) {
|
|
28
|
-
this.logger.log('CopilotProvider: Using queryWithTools in execute mode');
|
|
29
|
-
return this.queryWithTools(prompt, options);
|
|
30
|
-
}
|
|
31
|
-
this.logger.warn('CopilotProvider: Tool call handler not available, falling back to base execute');
|
|
32
|
-
return super.execute(prompt, options);
|
|
33
|
-
}
|
|
34
26
|
parseProviderError(stderr, stdout) {
|
|
35
27
|
const combinedOutput = stderr || stdout;
|
|
36
28
|
if (combinedOutput.includes('quota') && combinedOutput.includes('exceed')) {
|
|
@@ -71,178 +63,6 @@ class CopilotProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
71
63
|
}
|
|
72
64
|
return { error: false, message: '' };
|
|
73
65
|
}
|
|
74
|
-
buildPromptWithTools(prompt, tools) {
|
|
75
|
-
if (!tools || tools.length === 0) {
|
|
76
|
-
return prompt;
|
|
77
|
-
}
|
|
78
|
-
return prompt;
|
|
79
|
-
}
|
|
80
|
-
buildFollowUpPrompt(toolName, toolInput, toolResult) {
|
|
81
|
-
return `Tool execution result:
|
|
82
|
-
Tool: ${toolName}
|
|
83
|
-
Input: ${JSON.stringify(toolInput)}
|
|
84
|
-
Result: ${JSON.stringify(toolResult)}
|
|
85
|
-
|
|
86
|
-
Please continue with your response based on this tool result.`;
|
|
87
|
-
}
|
|
88
|
-
parseToolUse(content) {
|
|
89
|
-
const xmlMatch = content.match(/<crew(?:code|x)_tool_call>\s*([\s\S]*?)\s*<\/crew(?:code|x)_tool_call>/);
|
|
90
|
-
if (xmlMatch && xmlMatch[1]) {
|
|
91
|
-
try {
|
|
92
|
-
const jsonContent = xmlMatch[1].trim();
|
|
93
|
-
const parsed = JSON.parse(jsonContent);
|
|
94
|
-
if (parsed.type === 'tool_use' && parsed.name && parsed.input) {
|
|
95
|
-
this.logger.log(`Tool use detected: ${parsed.name} with input ${JSON.stringify(parsed.input)}`);
|
|
96
|
-
return {
|
|
97
|
-
isToolUse: true,
|
|
98
|
-
toolName: parsed.name,
|
|
99
|
-
toolInput: parsed.input,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch (e) {
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
try {
|
|
107
|
-
const parsed = JSON.parse(content);
|
|
108
|
-
if (parsed.type === 'tool_use' && parsed.name && parsed.input) {
|
|
109
|
-
return {
|
|
110
|
-
isToolUse: true,
|
|
111
|
-
toolName: parsed.name,
|
|
112
|
-
toolInput: parsed.input,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
if (parsed.content && Array.isArray(parsed.content)) {
|
|
116
|
-
const toolUse = parsed.content.find((c) => c.type === 'tool_use');
|
|
117
|
-
if (toolUse) {
|
|
118
|
-
return {
|
|
119
|
-
isToolUse: true,
|
|
120
|
-
toolName: toolUse.name,
|
|
121
|
-
toolInput: toolUse.input,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
const codeBlockMatch = content.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
128
|
-
if (codeBlockMatch && codeBlockMatch[1]) {
|
|
129
|
-
try {
|
|
130
|
-
const jsonContent = codeBlockMatch[1].trim();
|
|
131
|
-
const parsed = JSON.parse(jsonContent);
|
|
132
|
-
if (parsed.type === 'tool_use' && parsed.name && parsed.input) {
|
|
133
|
-
this.logger.log(`Tool use detected: ${parsed.name} with input ${JSON.stringify(parsed.input)}`);
|
|
134
|
-
return {
|
|
135
|
-
isToolUse: true,
|
|
136
|
-
toolName: parsed.name,
|
|
137
|
-
toolInput: parsed.input,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
const cleanedContent = content
|
|
145
|
-
.split('\n')
|
|
146
|
-
.map(line => line.replace(/^[●\-\*\s]+/, ''))
|
|
147
|
-
.join('\n');
|
|
148
|
-
const startMatch = cleanedContent.match(/\{\s*"type"\s*:\s*"tool_use"/);
|
|
149
|
-
if (startMatch && startMatch.index !== undefined) {
|
|
150
|
-
let braceCount = 0;
|
|
151
|
-
let inString = false;
|
|
152
|
-
let escapeNext = false;
|
|
153
|
-
let jsonStr = '';
|
|
154
|
-
for (let i = startMatch.index; i < cleanedContent.length; i++) {
|
|
155
|
-
const char = cleanedContent[i];
|
|
156
|
-
jsonStr += char;
|
|
157
|
-
if (escapeNext) {
|
|
158
|
-
escapeNext = false;
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
if (char === '\\') {
|
|
162
|
-
escapeNext = true;
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (char === '"') {
|
|
166
|
-
inString = !inString;
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
if (!inString) {
|
|
170
|
-
if (char === '{')
|
|
171
|
-
braceCount++;
|
|
172
|
-
if (char === '}') {
|
|
173
|
-
braceCount--;
|
|
174
|
-
if (braceCount === 0) {
|
|
175
|
-
try {
|
|
176
|
-
const parsed = JSON.parse(jsonStr);
|
|
177
|
-
if (parsed.type === 'tool_use' && parsed.name && parsed.input) {
|
|
178
|
-
this.logger.log(`Tool use detected: ${parsed.name} with input ${JSON.stringify(parsed.input)}`);
|
|
179
|
-
return {
|
|
180
|
-
isToolUse: true,
|
|
181
|
-
toolName: parsed.name,
|
|
182
|
-
toolInput: parsed.input,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
catch (e) {
|
|
187
|
-
this.logger.warn(`Failed to parse extracted JSON: ${e}`);
|
|
188
|
-
}
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return { isToolUse: false };
|
|
197
|
-
}
|
|
198
|
-
async queryWithTools(prompt, options = {}, maxTurns = 5) {
|
|
199
|
-
if (!this.toolCallHandler) {
|
|
200
|
-
this.logger.warn('Tool call handler not available, falling back to regular query');
|
|
201
|
-
return this.query(prompt, options);
|
|
202
|
-
}
|
|
203
|
-
let turn = 0;
|
|
204
|
-
let currentPrompt = prompt;
|
|
205
|
-
const tools = this.toolCallHandler.list();
|
|
206
|
-
currentPrompt = this.buildPromptWithTools(currentPrompt, tools);
|
|
207
|
-
while (turn < maxTurns) {
|
|
208
|
-
this.logger.log(`Tool call turn ${turn + 1}/${maxTurns}`);
|
|
209
|
-
const response = await this.query(currentPrompt, options);
|
|
210
|
-
if (!response.success) {
|
|
211
|
-
return response;
|
|
212
|
-
}
|
|
213
|
-
const toolUse = this.parseToolUse(response.content);
|
|
214
|
-
if (!toolUse.isToolUse) {
|
|
215
|
-
this.logger.log('No tool use detected, returning response');
|
|
216
|
-
return response;
|
|
217
|
-
}
|
|
218
|
-
this.logger.log(`Executing tool: ${toolUse.toolName}`);
|
|
219
|
-
try {
|
|
220
|
-
const toolResult = await this.toolCallHandler.execute(toolUse.toolName, toolUse.toolInput);
|
|
221
|
-
currentPrompt = this.buildFollowUpPrompt(toolUse.toolName, toolUse.toolInput, toolResult);
|
|
222
|
-
turn++;
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
this.logger.error(`Tool execution failed: ${error.message}`);
|
|
226
|
-
return {
|
|
227
|
-
content: '',
|
|
228
|
-
provider: this.name,
|
|
229
|
-
command: response.command,
|
|
230
|
-
success: false,
|
|
231
|
-
error: `Tool execution failed: ${error.message}`,
|
|
232
|
-
taskId: response.taskId,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
this.logger.error(`Max tool call turns (${maxTurns}) exceeded`);
|
|
237
|
-
return {
|
|
238
|
-
content: '',
|
|
239
|
-
provider: this.name,
|
|
240
|
-
command: `${this.getCliCommand()} (max turns exceeded)`,
|
|
241
|
-
success: false,
|
|
242
|
-
error: `Maximum tool call iterations (${maxTurns}) exceeded`,
|
|
243
|
-
taskId: options.taskId,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
66
|
}
|
|
247
67
|
exports.CopilotProvider = CopilotProvider;
|
|
248
68
|
//# sourceMappingURL=copilot.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot.provider.js","sourceRoot":"","sources":["../../../src/core/providers/copilot.provider.ts"],"names":[],"mappings":";;;AACA,yDAAoD;AAEpD,
|
|
1
|
+
{"version":3,"file":"copilot.provider.js","sourceRoot":"","sources":["../../../src/core/providers/copilot.provider.ts"],"names":[],"mappings":";;;AACA,yDAAoD;AAEpD,mEAA2D;AAE3D,MAAa,eAAgB,SAAQ,iCAAc;IAGjD,YAAY,UAAiC,EAAE;QAC7C,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAH3B,SAAI,GAAG,wCAAgB,CAAC,OAAO,CAAC;IAIzC,CAAC;IAES,aAAa;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,cAAc;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,cAAc;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,eAAe;QAEvB,OAAO,KAAK,CAAC;IACf,CAAC;IAES,sBAAsB;QAC9B,OAAO,wIAAwI,CAAC;IAClJ,CAAC;IAMM,kBAAkB,CACvB,MAAc,EACd,MAAc;QAGd,MAAM,cAAc,GAAG,MAAM,IAAI,MAAM,CAAC;QAExC,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1E,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EACL,iHAAiH;aACpH,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EACL,8FAA8F;aACjG,CAAC;QACJ,CAAC;QACD,IACE,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7C,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9C,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EACL,gGAAgG;aACnG,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,oBAAoB;aAC/D,CAAC;QACJ,CAAC;QAID,IACE,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACnD,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAC5C,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,gFAAgF;aAC1F,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;CAGF;AA7FD,0CA6FC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { BaseAIProvider } from './base-ai.provider';
|
|
2
|
+
import type { LoggerLike } from './base-ai.types';
|
|
3
|
+
export interface PluginProviderConfig {
|
|
4
|
+
id: string;
|
|
5
|
+
type: 'plugin';
|
|
6
|
+
cli_command: string;
|
|
7
|
+
display_name?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
default_model?: string;
|
|
10
|
+
query_args: string[];
|
|
11
|
+
execute_args: string[];
|
|
12
|
+
prompt_in_args: boolean;
|
|
13
|
+
timeout?: {
|
|
14
|
+
query: number;
|
|
15
|
+
execute: number;
|
|
16
|
+
};
|
|
17
|
+
error_patterns?: Array<{
|
|
18
|
+
pattern: string;
|
|
19
|
+
type: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}>;
|
|
22
|
+
not_installed_message?: string;
|
|
23
|
+
env?: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
export interface RemoteProviderConfig {
|
|
26
|
+
id: string;
|
|
27
|
+
type: 'remote';
|
|
28
|
+
location: string;
|
|
29
|
+
external_agent_id: string;
|
|
30
|
+
display_name?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
default_model?: string;
|
|
33
|
+
auth?: {
|
|
34
|
+
type: 'bearer' | 'api_key' | 'none';
|
|
35
|
+
token?: string;
|
|
36
|
+
};
|
|
37
|
+
timeout?: {
|
|
38
|
+
query: number;
|
|
39
|
+
execute: number;
|
|
40
|
+
};
|
|
41
|
+
headers?: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
export type DynamicProviderConfig = PluginProviderConfig | RemoteProviderConfig;
|
|
44
|
+
export interface DynamicProviderFactoryOptions {
|
|
45
|
+
logger?: LoggerLike;
|
|
46
|
+
}
|
|
47
|
+
export declare class BaseDynamicProviderFactory {
|
|
48
|
+
protected readonly logger: LoggerLike;
|
|
49
|
+
protected readonly timeoutConfig: import("../../config/timeout.config").TimeoutConfig;
|
|
50
|
+
constructor(options?: DynamicProviderFactoryOptions);
|
|
51
|
+
createProvider(config: DynamicProviderConfig): BaseAIProvider;
|
|
52
|
+
validateConfig(config: unknown): config is DynamicProviderConfig;
|
|
53
|
+
protected createPluginProvider(config: PluginProviderConfig): BaseAIProvider;
|
|
54
|
+
protected createRemoteProvider(config: RemoteProviderConfig): BaseAIProvider;
|
|
55
|
+
protected validateCliCommand(cliCommand: string): void;
|
|
56
|
+
protected validateCliArgs(args: string[]): void;
|
|
57
|
+
protected validateErrorPatterns(patterns?: Array<{
|
|
58
|
+
pattern: string;
|
|
59
|
+
type: string;
|
|
60
|
+
message: string;
|
|
61
|
+
}>): void;
|
|
62
|
+
protected validateEnv(env?: Record<string, string>): void;
|
|
63
|
+
protected validateRemoteConfig(config: RemoteProviderConfig): void;
|
|
64
|
+
}
|