@sowonai/crewx-sdk 0.1.0-dev.40 → 0.1.0-dev.43
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/dist/core/providers/claude.provider.d.ts +5 -0
- package/dist/core/providers/claude.provider.js +54 -0
- package/dist/core/providers/claude.provider.js.map +1 -1
- package/dist/core/providers/codex.provider.d.ts +5 -2
- package/dist/core/providers/codex.provider.js +36 -7
- package/dist/core/providers/codex.provider.js.map +1 -1
- package/dist/services/layout-renderer.service.d.ts +0 -1
- package/dist/services/layout-renderer.service.js +0 -19
- package/dist/services/layout-renderer.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseAIProvider } from './base-ai.provider';
|
|
2
2
|
import type { BaseAIProviderOptions } from './base-ai.types';
|
|
3
|
+
import { type AIQueryOptions, type AIResponse } from './ai-provider.interface';
|
|
3
4
|
export declare class ClaudeProvider extends BaseAIProvider {
|
|
4
5
|
readonly name: "cli/claude";
|
|
5
6
|
constructor(options?: BaseAIProviderOptions);
|
|
@@ -7,6 +8,10 @@ export declare class ClaudeProvider extends BaseAIProvider {
|
|
|
7
8
|
protected getDefaultArgs(): string[];
|
|
8
9
|
protected getExecuteArgs(): string[];
|
|
9
10
|
protected getNotInstalledMessage(): string;
|
|
11
|
+
private parseJsonlResponse;
|
|
12
|
+
private isStreamJsonEnabled;
|
|
13
|
+
query(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
14
|
+
execute(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
10
15
|
parseProviderError(stderr: string, stdout: string): {
|
|
11
16
|
error: boolean;
|
|
12
17
|
message: string;
|
|
@@ -20,6 +20,60 @@ class ClaudeProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
20
20
|
getNotInstalledMessage() {
|
|
21
21
|
return 'Claude CLI is not installed. Please install it from https://claude.ai/download.';
|
|
22
22
|
}
|
|
23
|
+
parseJsonlResponse(content) {
|
|
24
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
25
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
26
|
+
try {
|
|
27
|
+
const line = lines[i];
|
|
28
|
+
if (!line)
|
|
29
|
+
continue;
|
|
30
|
+
const parsed = JSON.parse(line);
|
|
31
|
+
if (parsed.type === 'result' && parsed.result) {
|
|
32
|
+
this.logger.log('✅ Extracted final result from JSONL stream');
|
|
33
|
+
return parsed.result;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
this.logger.warn('⚠️ Could not parse JSONL, returning original content');
|
|
40
|
+
return content;
|
|
41
|
+
}
|
|
42
|
+
isStreamJsonEnabled(options = {}) {
|
|
43
|
+
const args = options.additionalArgs || [];
|
|
44
|
+
const hasOutputFormat = args.some((arg, idx) => {
|
|
45
|
+
if (arg === '--output-format' && args[idx + 1] === 'stream-json') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (arg === '--output-format=stream-json') {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
});
|
|
53
|
+
return hasOutputFormat;
|
|
54
|
+
}
|
|
55
|
+
async query(prompt, options = {}) {
|
|
56
|
+
const response = await super.query(prompt, options);
|
|
57
|
+
if (response.success && response.content && this.isStreamJsonEnabled(options)) {
|
|
58
|
+
const parsedContent = this.parseJsonlResponse(response.content);
|
|
59
|
+
return {
|
|
60
|
+
...response,
|
|
61
|
+
content: parsedContent,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
66
|
+
async execute(prompt, options = {}) {
|
|
67
|
+
const response = await super.execute(prompt, options);
|
|
68
|
+
if (response.success && response.content && this.isStreamJsonEnabled(options)) {
|
|
69
|
+
const parsedContent = this.parseJsonlResponse(response.content);
|
|
70
|
+
return {
|
|
71
|
+
...response,
|
|
72
|
+
content: parsedContent,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
}
|
|
23
77
|
parseProviderError(stderr, stdout) {
|
|
24
78
|
const combinedOutput = stderr || stdout;
|
|
25
79
|
if (combinedOutput.includes('Session limit reached')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../src/core/providers/claude.provider.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAEpD,
|
|
1
|
+
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../src/core/providers/claude.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseAIProvider } from './base-ai.provider';
|
|
2
2
|
import type { BaseAIProviderOptions } from './base-ai.types';
|
|
3
|
+
import type { AIQueryOptions, AIResponse } from './ai-provider.interface';
|
|
3
4
|
export declare class CodexProvider extends BaseAIProvider {
|
|
4
5
|
readonly name = "cli/codex";
|
|
5
6
|
constructor(options?: BaseAIProviderOptions);
|
|
@@ -9,10 +10,12 @@ export declare class CodexProvider extends BaseAIProvider {
|
|
|
9
10
|
protected getNotInstalledMessage(): string;
|
|
10
11
|
protected getPromptInArgs(): boolean;
|
|
11
12
|
protected shouldPipeContext(): boolean;
|
|
13
|
+
private isExperimentalJsonEnabled;
|
|
12
14
|
parseProviderError(stderr: string, stdout: string): {
|
|
13
15
|
error: boolean;
|
|
14
16
|
message: string;
|
|
15
17
|
};
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
+
private parseJsonlResponse;
|
|
19
|
+
query(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
20
|
+
execute(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
18
21
|
}
|
|
@@ -25,6 +25,10 @@ class CodexProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
25
25
|
shouldPipeContext() {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
|
+
isExperimentalJsonEnabled(options = {}) {
|
|
29
|
+
const args = options.additionalArgs || [];
|
|
30
|
+
return args.includes('--experimental-json');
|
|
31
|
+
}
|
|
28
32
|
parseProviderError(stderr, stdout) {
|
|
29
33
|
if (stderr && (stderr.includes('not logged in') || stderr.includes('authentication required'))) {
|
|
30
34
|
return {
|
|
@@ -46,13 +50,18 @@ class CodexProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
46
50
|
}
|
|
47
51
|
return super.parseProviderError(stderr, stdout);
|
|
48
52
|
}
|
|
49
|
-
|
|
53
|
+
parseJsonlResponse(content) {
|
|
50
54
|
const lines = content.split('\n').map(line => line.trim()).filter(Boolean);
|
|
51
55
|
let assistantMessage = null;
|
|
52
56
|
for (const line of lines) {
|
|
53
57
|
try {
|
|
54
58
|
const parsed = JSON.parse(line);
|
|
55
|
-
if (parsed?.
|
|
59
|
+
if (parsed?.type === 'item.completed' &&
|
|
60
|
+
parsed?.item?.item_type === 'assistant_message' &&
|
|
61
|
+
typeof parsed.item.text === 'string') {
|
|
62
|
+
assistantMessage = parsed.item.text.trim();
|
|
63
|
+
}
|
|
64
|
+
else if (parsed?.item?.item_type === 'assistant_message' &&
|
|
56
65
|
typeof parsed.item.text === 'string') {
|
|
57
66
|
assistantMessage = parsed.item.text.trim();
|
|
58
67
|
}
|
|
@@ -71,14 +80,34 @@ class CodexProvider extends base_ai_provider_1.BaseAIProvider {
|
|
|
71
80
|
continue;
|
|
72
81
|
}
|
|
73
82
|
}
|
|
74
|
-
return assistantMessage;
|
|
75
|
-
}
|
|
76
|
-
filterToolUseFromResponse(content) {
|
|
77
|
-
const assistantMessage = this.extractAssistantMessage(content);
|
|
78
83
|
if (assistantMessage) {
|
|
84
|
+
this.logger.log('✅ Extracted assistant message from Codex JSONL stream');
|
|
79
85
|
return assistantMessage;
|
|
80
86
|
}
|
|
81
|
-
|
|
87
|
+
this.logger.warn('⚠️ Could not parse Codex JSONL, returning original content');
|
|
88
|
+
return content;
|
|
89
|
+
}
|
|
90
|
+
async query(prompt, options = {}) {
|
|
91
|
+
const response = await super.query(prompt, options);
|
|
92
|
+
if (response.success && response.content && this.isExperimentalJsonEnabled(options)) {
|
|
93
|
+
const parsedContent = this.parseJsonlResponse(response.content);
|
|
94
|
+
return {
|
|
95
|
+
...response,
|
|
96
|
+
content: parsedContent,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return response;
|
|
100
|
+
}
|
|
101
|
+
async execute(prompt, options = {}) {
|
|
102
|
+
const response = await super.execute(prompt, options);
|
|
103
|
+
if (response.success && response.content && this.isExperimentalJsonEnabled(options)) {
|
|
104
|
+
const parsedContent = this.parseJsonlResponse(response.content);
|
|
105
|
+
return {
|
|
106
|
+
...response,
|
|
107
|
+
content: parsedContent,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return response;
|
|
82
111
|
}
|
|
83
112
|
}
|
|
84
113
|
exports.CodexProvider = CodexProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../src/core/providers/codex.provider.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;
|
|
1
|
+
{"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../src/core/providers/codex.provider.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAIpD,MAAa,aAAc,SAAQ,iCAAc;IAG/C,YAAY,UAAiC,EAAE;QAC7C,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAHzB,SAAI,GAAG,WAAW,CAAC;IAI5B,CAAC;IAES,aAAa;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,cAAc;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,cAAc;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,sBAAsB;QAC9B,OAAO,sDAAsD,CAAC;IAChE,CAAC;IAKS,eAAe;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAES,iBAAiB;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAKO,yBAAyB,CAAC,UAA0B,EAAE;QAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAKM,kBAAkB,CACvB,MAAc,EACd,MAAc;QAGd,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC;YAC/F,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,8EAA8E;aACxF,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,uDAAuD;aACjE,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACvC,CAAC;QAGD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC;QACpF,CAAC;QAGD,OAAO,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IASO,kBAAkB,CAAC,OAAe;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,gBAAgB,GAAkB,IAAI,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAGhC,IACE,MAAM,EAAE,IAAI,KAAK,gBAAgB;oBACjC,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,mBAAmB;oBAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EACpC,CAAC;oBACD,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7C,CAAC;qBAEI,IACH,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,mBAAmB;oBAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EACpC,CAAC;oBACD,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7C,CAAC;qBAEI,IACH,MAAM,EAAE,QAAQ,EAAE,MAAM;oBACxB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EACrC,CAAC;oBACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CACpD,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,mBAAmB,CACzD,CAAC;oBACF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAClE,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;4BACtB,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;wBACrD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBAEP,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACzE,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAGD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC;IACjB,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,UAA0B,EAAE;QACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;YAEpF,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE,aAAa;aACvB,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,UAA0B,EAAE;QACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEtD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;YAEpF,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE,aAAa;aACvB,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CAEF;AAhLD,sCAgLC"}
|
|
@@ -15,7 +15,6 @@ export declare class LayoutRenderer {
|
|
|
15
15
|
resolveProps(layout: LayoutDefinition, props: Record<string, any> | undefined, mode?: 'strict' | 'lenient'): ValidationResult;
|
|
16
16
|
private prepareRenderContext;
|
|
17
17
|
private registerHelpers;
|
|
18
|
-
private validateSecurityConstraints;
|
|
19
18
|
private executeValidation;
|
|
20
19
|
private mergeProps;
|
|
21
20
|
private deepMerge;
|
|
@@ -22,7 +22,6 @@ class LayoutRenderer {
|
|
|
22
22
|
const preparedContext = this.prepareRenderContext(layout, context, options);
|
|
23
23
|
const template = this.handlebars.compile(layout.template);
|
|
24
24
|
const result = template(preparedContext);
|
|
25
|
-
this.validateSecurityConstraints(result);
|
|
26
25
|
return result;
|
|
27
26
|
}
|
|
28
27
|
catch (error) {
|
|
@@ -140,24 +139,6 @@ Previous conversation ({{messagesCount}} messages):
|
|
|
140
139
|
});
|
|
141
140
|
});
|
|
142
141
|
}
|
|
143
|
-
validateSecurityConstraints(content) {
|
|
144
|
-
const dangerousPatterns = [
|
|
145
|
-
/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
|
146
|
-
/javascript:/gi,
|
|
147
|
-
/on\w+\s*=/gi,
|
|
148
|
-
/<iframe\b[^>]*>/gi,
|
|
149
|
-
/<object\b[^>]*>/gi,
|
|
150
|
-
/<embed\b[^>]*>/gi,
|
|
151
|
-
];
|
|
152
|
-
for (const pattern of dangerousPatterns) {
|
|
153
|
-
if (pattern.test(content)) {
|
|
154
|
-
throw new Error('Security constraint violation: Potentially dangerous content detected');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (!content.includes('<crewx_system_prompt>') && !content.includes('<system_prompt')) {
|
|
158
|
-
console.warn('Warning: Layout does not contain required security containers');
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
142
|
executeValidation(props, propsSchema, mode) {
|
|
162
143
|
try {
|
|
163
144
|
return this.propsValidator.validate(props, propsSchema, mode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-renderer.service.js","sourceRoot":"","sources":["../../src/services/layout-renderer.service.ts"],"names":[],"mappings":";;;;;;AASA,4DAAoC;AACpC,2BAA8C;AAC9C,+BAA4B;AAC5B,uEAA2D;AAO3D,wDAA2F;AAG3F,sDAA6D;AAApD,oHAAA,oBAAoB,OAAA;AAoB7B,MAAa,cAAc;IAIzB,YAAY,cAA+B;QACzC,IAAI,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,wCAAc,EAAE,CAAC;QAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAUD,MAAM,CACJ,MAAwB,EACxB,OAAsB,EACtB,UAAyB,EAAE;QAE3B,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;YAEzC,
|
|
1
|
+
{"version":3,"file":"layout-renderer.service.js","sourceRoot":"","sources":["../../src/services/layout-renderer.service.ts"],"names":[],"mappings":"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"}
|