@just-every/ensemble 0.2.19 → 0.2.20
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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model_providers/base_provider.d.ts.map +1 -1
- package/dist/model_providers/base_provider.js +3 -22
- package/dist/model_providers/base_provider.js.map +1 -1
- package/dist/model_providers/claude.d.ts.map +1 -1
- package/dist/model_providers/claude.js +6 -33
- package/dist/model_providers/claude.js.map +1 -1
- package/dist/model_providers/openai.d.ts.map +1 -1
- package/dist/model_providers/openai.js +1 -19
- package/dist/model_providers/openai.js.map +1 -1
- package/dist/model_providers/openai_chat.d.ts.map +1 -1
- package/dist/model_providers/openai_chat.js +1 -21
- package/dist/model_providers/openai_chat.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/errors.d.ts +34 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +65 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/utils/citation_tracker.d.ts +12 -0
- package/dist/utils/citation_tracker.d.ts.map +1 -0
- package/dist/utils/citation_tracker.js +20 -0
- package/dist/utils/citation_tracker.js.map +1 -0
- package/dist/utils/config_manager.d.ts +31 -0
- package/dist/utils/config_manager.d.ts.map +1 -0
- package/dist/utils/config_manager.js +92 -0
- package/dist/utils/config_manager.js.map +1 -0
- package/dist/utils/image_validation.d.ts +3 -0
- package/dist/utils/image_validation.d.ts.map +1 -0
- package/dist/utils/image_validation.js +27 -0
- package/dist/utils/image_validation.js.map +1 -0
- package/dist/utils/pause_controller.d.ts.map +1 -1
- package/dist/utils/pause_controller.js +2 -1
- package/dist/utils/pause_controller.js.map +1 -1
- package/dist/utils/stream_handler.d.ts +16 -0
- package/dist/utils/stream_handler.d.ts.map +1 -0
- package/dist/utils/stream_handler.js +66 -0
- package/dist/utils/stream_handler.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ModelProviderID } from '../data/model_data.js';
|
|
2
|
+
export declare class EnsembleError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
recoverable: boolean;
|
|
5
|
+
details?: Record<string, unknown>;
|
|
6
|
+
constructor(message: string, code: string, recoverable?: boolean, details?: Record<string, unknown>);
|
|
7
|
+
}
|
|
8
|
+
export declare class ProviderError extends EnsembleError {
|
|
9
|
+
provider: ModelProviderID;
|
|
10
|
+
constructor(provider: ModelProviderID, message: string, code: string, recoverable?: boolean, details?: Record<string, unknown>);
|
|
11
|
+
}
|
|
12
|
+
export declare class ToolExecutionError extends EnsembleError {
|
|
13
|
+
toolName: string;
|
|
14
|
+
constructor(toolName: string, message: string, code?: string, recoverable?: boolean, details?: Record<string, unknown>);
|
|
15
|
+
}
|
|
16
|
+
export declare class AbortError extends EnsembleError {
|
|
17
|
+
constructor(message?: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class PauseAbortError extends AbortError {
|
|
20
|
+
constructor();
|
|
21
|
+
}
|
|
22
|
+
export declare class QuotaExceededError extends EnsembleError {
|
|
23
|
+
provider: ModelProviderID;
|
|
24
|
+
model: string;
|
|
25
|
+
constructor(provider: ModelProviderID, model: string, message: string, details?: Record<string, unknown>);
|
|
26
|
+
}
|
|
27
|
+
export declare class ModelNotFoundError extends EnsembleError {
|
|
28
|
+
model: string;
|
|
29
|
+
constructor(model: string, message?: string);
|
|
30
|
+
}
|
|
31
|
+
export declare class ConfigurationError extends EnsembleError {
|
|
32
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../types/errors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,qBAAa,aAAc,SAAQ,KAAK;IAGzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,OAAO;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,OAAe,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAK/C;AAKD,qBAAa,aAAc,SAAQ,aAAa;IAEjC,QAAQ,EAAE,eAAe;gBAAzB,QAAQ,EAAE,eAAe,EAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,OAAe,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKxC;AAKD,qBAAa,kBAAmB,SAAQ,aAAa;IAEtC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAA+B,EACrC,WAAW,GAAE,OAAc,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKxC;AAKD,qBAAa,UAAW,SAAQ,aAAa;gBAC7B,OAAO,GAAE,MAA4B;CAIpD;AAKD,qBAAa,eAAgB,SAAQ,UAAU;;CAK9C;AAKD,qBAAa,kBAAmB,SAAQ,aAAa;IAEtC,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,MAAM;gBADb,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKxC;AAKD,qBAAa,kBAAmB,SAAQ,aAAa;IAEtC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM;CASvB;AAKD,qBAAa,kBAAmB,SAAQ,aAAa;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export class EnsembleError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
recoverable;
|
|
4
|
+
details;
|
|
5
|
+
constructor(message, code, recoverable = false, details) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.recoverable = recoverable;
|
|
9
|
+
this.details = details;
|
|
10
|
+
this.name = 'EnsembleError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ProviderError extends EnsembleError {
|
|
14
|
+
provider;
|
|
15
|
+
constructor(provider, message, code, recoverable = false, details) {
|
|
16
|
+
super(message, code, recoverable, details);
|
|
17
|
+
this.provider = provider;
|
|
18
|
+
this.name = 'ProviderError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class ToolExecutionError extends EnsembleError {
|
|
22
|
+
toolName;
|
|
23
|
+
constructor(toolName, message, code = 'TOOL_EXECUTION_ERROR', recoverable = true, details) {
|
|
24
|
+
super(message, code, recoverable, details);
|
|
25
|
+
this.toolName = toolName;
|
|
26
|
+
this.name = 'ToolExecutionError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class AbortError extends EnsembleError {
|
|
30
|
+
constructor(message = 'Operation aborted') {
|
|
31
|
+
super(message, 'ABORT_ERROR', false);
|
|
32
|
+
this.name = 'AbortError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class PauseAbortError extends AbortError {
|
|
36
|
+
constructor() {
|
|
37
|
+
super('Operation aborted while waiting for pause');
|
|
38
|
+
this.name = 'PauseAbortError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class QuotaExceededError extends EnsembleError {
|
|
42
|
+
provider;
|
|
43
|
+
model;
|
|
44
|
+
constructor(provider, model, message, details) {
|
|
45
|
+
super(message, 'QUOTA_EXCEEDED', false, details);
|
|
46
|
+
this.provider = provider;
|
|
47
|
+
this.model = model;
|
|
48
|
+
this.name = 'QuotaExceededError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class ModelNotFoundError extends EnsembleError {
|
|
52
|
+
model;
|
|
53
|
+
constructor(model, message) {
|
|
54
|
+
super(message || `Model '${model}' not found or not available`, 'MODEL_NOT_FOUND', false);
|
|
55
|
+
this.model = model;
|
|
56
|
+
this.name = 'ModelNotFoundError';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export class ConfigurationError extends EnsembleError {
|
|
60
|
+
constructor(message, details) {
|
|
61
|
+
super(message, 'CONFIGURATION_ERROR', false, details);
|
|
62
|
+
this.name = 'ConfigurationError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../types/errors.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAGzB;IACA;IACA;IAJX,YACI,OAAe,EACR,IAAY,EACZ,cAAuB,KAAK,EAC5B,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAiB;QAC5B,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAKD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAEjC;IADX,YACW,QAAyB,EAChC,OAAe,EACf,IAAY,EACZ,cAAuB,KAAK,EAC5B,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QANpC,aAAQ,GAAR,QAAQ,CAAiB;QAOhC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAKD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAEtC;IADX,YACW,QAAgB,EACvB,OAAe,EACf,OAAe,sBAAsB,EACrC,cAAuB,IAAI,EAC3B,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QANpC,aAAQ,GAAR,QAAQ,CAAQ;QAOvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACrC,CAAC;CACJ;AAKD,MAAM,OAAO,UAAW,SAAQ,aAAa;IACzC,YAAY,UAAkB,mBAAmB;QAC7C,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC7B,CAAC;CACJ;AAKD,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC3C;QACI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AAKD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAEtC;IACA;IAFX,YACW,QAAyB,EACzB,KAAa,EACpB,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAL1C,aAAQ,GAAR,QAAQ,CAAiB;QACzB,UAAK,GAAL,KAAK,CAAQ;QAKpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACrC,CAAC;CACJ;AAKD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAEtC;IADX,YACW,KAAa,EACpB,OAAgB;QAEhB,KAAK,CACD,OAAO,IAAI,UAAU,KAAK,8BAA8B,EACxD,iBAAiB,EACjB,KAAK,CACR,CAAC;QAPK,UAAK,GAAL,KAAK,CAAQ;QAQpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACrC,CAAC;CACJ;AAKD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACjD,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACrC,CAAC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface Citation {
|
|
2
|
+
title: string;
|
|
3
|
+
url: string;
|
|
4
|
+
citedText?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CitationTracker {
|
|
7
|
+
citations: Map<string, Citation>;
|
|
8
|
+
}
|
|
9
|
+
export declare function createCitationTracker(): CitationTracker;
|
|
10
|
+
export declare function formatCitation(tracker: CitationTracker, citation: Citation): string;
|
|
11
|
+
export declare function generateFootnotes(tracker: CitationTracker): string;
|
|
12
|
+
//# sourceMappingURL=citation_tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation_tracker.d.ts","sourceRoot":"","sources":["../../utils/citation_tracker.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACpC;AAKD,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAKD,wBAAgB,cAAc,CAC1B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,QAAQ,GACnB,MAAM,CAKR;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAQlE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function createCitationTracker() {
|
|
2
|
+
return {
|
|
3
|
+
citations: new Map(),
|
|
4
|
+
};
|
|
5
|
+
}
|
|
6
|
+
export function formatCitation(tracker, citation) {
|
|
7
|
+
if (!tracker.citations.has(citation.url)) {
|
|
8
|
+
tracker.citations.set(citation.url, citation);
|
|
9
|
+
}
|
|
10
|
+
return ` [${Array.from(tracker.citations.keys()).indexOf(citation.url) + 1}]`;
|
|
11
|
+
}
|
|
12
|
+
export function generateFootnotes(tracker) {
|
|
13
|
+
if (tracker.citations.size === 0)
|
|
14
|
+
return '';
|
|
15
|
+
const footnotes = Array.from(tracker.citations.values())
|
|
16
|
+
.map((citation, i) => `[${i + 1}] ${citation.title} – ${citation.url}`)
|
|
17
|
+
.join('\n');
|
|
18
|
+
return '\n\nReferences:\n' + footnotes;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=citation_tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation_tracker.js","sourceRoot":"","sources":["../../utils/citation_tracker.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,qBAAqB;IACjC,OAAO;QACH,SAAS,EAAE,IAAI,GAAG,EAAE;KACvB,CAAC;AACN,CAAC;AAKD,MAAM,UAAU,cAAc,CAC1B,OAAwB,EACxB,QAAkB;IAElB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAClF,CAAC;AAKD,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACtD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;SACnD,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO,mBAAmB,GAAG,SAAS,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface EnsembleConfig {
|
|
2
|
+
defaultToolTimeout: number;
|
|
3
|
+
maxConcurrentTools: number;
|
|
4
|
+
pauseCheckInterval: number;
|
|
5
|
+
historyCompactionThreshold: number;
|
|
6
|
+
apiKeys: {
|
|
7
|
+
openai?: string;
|
|
8
|
+
anthropic?: string;
|
|
9
|
+
google?: string;
|
|
10
|
+
deepseek?: string;
|
|
11
|
+
xai?: string;
|
|
12
|
+
openrouter?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
declare class ConfigManager {
|
|
16
|
+
private config;
|
|
17
|
+
private isLoaded;
|
|
18
|
+
constructor();
|
|
19
|
+
loadConfig(): void;
|
|
20
|
+
getConfig(): EnsembleConfig;
|
|
21
|
+
get<K extends keyof EnsembleConfig>(key: K): EnsembleConfig[K];
|
|
22
|
+
updateConfig(updates: Partial<EnsembleConfig>): void;
|
|
23
|
+
reset(): void;
|
|
24
|
+
hasApiKey(provider: keyof EnsembleConfig['apiKeys']): boolean;
|
|
25
|
+
getApiKey(provider: keyof EnsembleConfig['apiKeys']): string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export declare function getConfigManager(): ConfigManager;
|
|
28
|
+
export declare function getConfig(): EnsembleConfig;
|
|
29
|
+
export declare function getConfigValue<K extends keyof EnsembleConfig>(key: K): EnsembleConfig[K];
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=config_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config_manager.d.ts","sourceRoot":"","sources":["../../utils/config_manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAE3B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,0BAA0B,EAAE,MAAM,CAAC;IAGnC,OAAO,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACL;AAUD,cAAM,aAAa;IACf,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAS;;IASzB,UAAU,IAAI,IAAI;IAgElB,SAAS,IAAI,cAAc;IAU3B,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAO9D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAOpD,KAAK,IAAI,IAAI;IAQb,SAAS,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO;IAO7D,SAAS,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS;CAG3E;AAQD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAKD,wBAAgB,SAAS,IAAI,cAAc,CAE1C;AAKD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAExF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ConfigurationError } from '../types/errors.js';
|
|
2
|
+
const DEFAULT_CONFIG = {
|
|
3
|
+
defaultToolTimeout: 300000,
|
|
4
|
+
maxConcurrentTools: 10,
|
|
5
|
+
pauseCheckInterval: 100,
|
|
6
|
+
historyCompactionThreshold: 0.7,
|
|
7
|
+
apiKeys: {},
|
|
8
|
+
};
|
|
9
|
+
class ConfigManager {
|
|
10
|
+
config;
|
|
11
|
+
isLoaded = false;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
14
|
+
}
|
|
15
|
+
loadConfig() {
|
|
16
|
+
if (this.isLoaded)
|
|
17
|
+
return;
|
|
18
|
+
this.config.apiKeys = {
|
|
19
|
+
openai: process.env.OPENAI_API_KEY,
|
|
20
|
+
anthropic: process.env.ANTHROPIC_API_KEY,
|
|
21
|
+
google: process.env.GOOGLE_API_KEY,
|
|
22
|
+
deepseek: process.env.DEEPSEEK_API_KEY,
|
|
23
|
+
xai: process.env.XAI_API_KEY,
|
|
24
|
+
openrouter: process.env.OPENROUTER_API_KEY,
|
|
25
|
+
};
|
|
26
|
+
if (process.env.ENSEMBLE_TOOL_TIMEOUT) {
|
|
27
|
+
const timeout = parseInt(process.env.ENSEMBLE_TOOL_TIMEOUT, 10);
|
|
28
|
+
if (isNaN(timeout) || timeout <= 0) {
|
|
29
|
+
throw new ConfigurationError('ENSEMBLE_TOOL_TIMEOUT must be a positive number', { value: process.env.ENSEMBLE_TOOL_TIMEOUT });
|
|
30
|
+
}
|
|
31
|
+
this.config.defaultToolTimeout = timeout;
|
|
32
|
+
}
|
|
33
|
+
if (process.env.ENSEMBLE_MAX_CONCURRENT_TOOLS) {
|
|
34
|
+
const maxTools = parseInt(process.env.ENSEMBLE_MAX_CONCURRENT_TOOLS, 10);
|
|
35
|
+
if (isNaN(maxTools) || maxTools <= 0) {
|
|
36
|
+
throw new ConfigurationError('ENSEMBLE_MAX_CONCURRENT_TOOLS must be a positive number', { value: process.env.ENSEMBLE_MAX_CONCURRENT_TOOLS });
|
|
37
|
+
}
|
|
38
|
+
this.config.maxConcurrentTools = maxTools;
|
|
39
|
+
}
|
|
40
|
+
if (process.env.ENSEMBLE_PAUSE_CHECK_INTERVAL) {
|
|
41
|
+
const interval = parseInt(process.env.ENSEMBLE_PAUSE_CHECK_INTERVAL, 10);
|
|
42
|
+
if (isNaN(interval) || interval <= 0) {
|
|
43
|
+
throw new ConfigurationError('ENSEMBLE_PAUSE_CHECK_INTERVAL must be a positive number', { value: process.env.ENSEMBLE_PAUSE_CHECK_INTERVAL });
|
|
44
|
+
}
|
|
45
|
+
this.config.pauseCheckInterval = interval;
|
|
46
|
+
}
|
|
47
|
+
if (process.env.ENSEMBLE_HISTORY_COMPACTION_THRESHOLD) {
|
|
48
|
+
const threshold = parseFloat(process.env.ENSEMBLE_HISTORY_COMPACTION_THRESHOLD);
|
|
49
|
+
if (isNaN(threshold) || threshold <= 0 || threshold > 1) {
|
|
50
|
+
throw new ConfigurationError('ENSEMBLE_HISTORY_COMPACTION_THRESHOLD must be a number between 0 and 1', { value: process.env.ENSEMBLE_HISTORY_COMPACTION_THRESHOLD });
|
|
51
|
+
}
|
|
52
|
+
this.config.historyCompactionThreshold = threshold;
|
|
53
|
+
}
|
|
54
|
+
this.isLoaded = true;
|
|
55
|
+
}
|
|
56
|
+
getConfig() {
|
|
57
|
+
if (!this.isLoaded) {
|
|
58
|
+
this.loadConfig();
|
|
59
|
+
}
|
|
60
|
+
return { ...this.config };
|
|
61
|
+
}
|
|
62
|
+
get(key) {
|
|
63
|
+
return this.getConfig()[key];
|
|
64
|
+
}
|
|
65
|
+
updateConfig(updates) {
|
|
66
|
+
this.config = { ...this.config, ...updates };
|
|
67
|
+
}
|
|
68
|
+
reset() {
|
|
69
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
70
|
+
this.isLoaded = false;
|
|
71
|
+
}
|
|
72
|
+
hasApiKey(provider) {
|
|
73
|
+
return !!this.getConfig().apiKeys[provider];
|
|
74
|
+
}
|
|
75
|
+
getApiKey(provider) {
|
|
76
|
+
return this.getConfig().apiKeys[provider];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let configManager = null;
|
|
80
|
+
export function getConfigManager() {
|
|
81
|
+
if (!configManager) {
|
|
82
|
+
configManager = new ConfigManager();
|
|
83
|
+
}
|
|
84
|
+
return configManager;
|
|
85
|
+
}
|
|
86
|
+
export function getConfig() {
|
|
87
|
+
return getConfigManager().getConfig();
|
|
88
|
+
}
|
|
89
|
+
export function getConfigValue(key) {
|
|
90
|
+
return getConfigManager().get(key);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=config_manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config_manager.js","sourceRoot":"","sources":["../../utils/config_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image_validation.d.ts","sourceRoot":"","sources":["../../utils/image_validation.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMlD;AAKD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function isValidBase64(str) {
|
|
2
|
+
try {
|
|
3
|
+
return btoa(atob(str)) === str;
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function detectImageType(base64Data) {
|
|
10
|
+
try {
|
|
11
|
+
const decoded = atob(base64Data.slice(0, 16));
|
|
12
|
+
const bytes = new Uint8Array(decoded.split('').map(char => char.charCodeAt(0)));
|
|
13
|
+
if (bytes[0] === 0xff && bytes[1] === 0xd8)
|
|
14
|
+
return 'image/jpeg';
|
|
15
|
+
if (bytes[0] === 0x89 && bytes[1] === 0x50)
|
|
16
|
+
return 'image/png';
|
|
17
|
+
if (bytes[0] === 0x47 && bytes[1] === 0x49)
|
|
18
|
+
return 'image/gif';
|
|
19
|
+
if (bytes[0] === 0x52 && bytes[1] === 0x49)
|
|
20
|
+
return 'image/webp';
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=image_validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image_validation.js","sourceRoot":"","sources":["../../utils/image_validation.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,aAAa,CAAC,GAAW;IACrC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAKD,MAAM,UAAU,eAAe,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,UAAU,CACxB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;QAGF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,YAAY,CAAC;QAChE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC;QAC/D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC;QAC/D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,YAAY,CAAC;QAEhE,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pause_controller.d.ts","sourceRoot":"","sources":["../../utils/pause_controller.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAI5B,QAAQ,IAAI,OAAO,CAAC;IAKpB,KAAK,IAAI,IAAI,CAAC;IAKd,MAAM,IAAI,IAAI,CAAC;IAOf,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOlF,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAK5D,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;
|
|
1
|
+
{"version":3,"file":"pause_controller.d.ts","sourceRoot":"","sources":["../../utils/pause_controller.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAI5B,QAAQ,IAAI,OAAO,CAAC;IAKpB,KAAK,IAAI,IAAI,CAAC;IAKd,MAAM,IAAI,IAAI,CAAC;IAOf,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOlF,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAK5D,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;AA2CD,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAKD,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAKD,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAKD,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAKD,wBAAsB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtG"}
|
|
@@ -23,7 +23,8 @@ class PauseControllerImpl extends EventEmitter {
|
|
|
23
23
|
await new Promise(resolve => setTimeout(resolve, checkInterval));
|
|
24
24
|
}
|
|
25
25
|
if (abortSignal?.aborted) {
|
|
26
|
-
|
|
26
|
+
const { PauseAbortError } = await import('../types/errors.js');
|
|
27
|
+
throw new PauseAbortError();
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pause_controller.js","sourceRoot":"","sources":["../../utils/pause_controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAsCtC,MAAM,mBAAoB,SAAQ,YAAY;IAClC,SAAS,GAAG,KAAK,CAAC;IAE1B,QAAQ;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,GAAG,EAAE,WAAyB;QAChE,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"pause_controller.js","sourceRoot":"","sources":["../../utils/pause_controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAsCtC,MAAM,mBAAoB,SAAQ,YAAY;IAClC,SAAS,GAAG,KAAK,CAAC;IAE1B,QAAQ;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,GAAG,EAAE,WAAyB;QAChE,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC/D,MAAM,IAAI,eAAe,EAAE,CAAC;QAChC,CAAC;IACL,CAAC;CACJ;AAGD,IAAI,uBAAuB,GAA2B,IAAI,CAAC;AAK3D,MAAM,UAAU,kBAAkB;IAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC3B,uBAAuB,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,uBAAuB,CAAC;AACnC,CAAC;AAKD,MAAM,UAAU,QAAQ;IACpB,OAAO,kBAAkB,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAKD,MAAM,UAAU,KAAK;IACjB,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,MAAM;IAClB,kBAAkB,EAAE,CAAC,MAAM,EAAE,CAAC;AAClC,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,aAAsB,EAAE,WAAyB;IACnF,OAAO,kBAAkB,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ProviderStreamEvent } from '../types/types.js';
|
|
2
|
+
export interface StreamHandlerOptions {
|
|
3
|
+
pauseCheckInterval?: number;
|
|
4
|
+
abortSignal?: AbortSignal;
|
|
5
|
+
providerName?: string;
|
|
6
|
+
modelName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class StreamHandler<TEvent> {
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options?: StreamHandlerOptions);
|
|
11
|
+
handleStream(stream: AsyncIterable<TEvent>, transformer: (chunk: TEvent) => ProviderStreamEvent | ProviderStreamEvent[] | null): AsyncGenerator<ProviderStreamEvent>;
|
|
12
|
+
}
|
|
13
|
+
export declare function createStreamHandler<TEvent>(options?: StreamHandlerOptions): StreamHandler<TEvent>;
|
|
14
|
+
export declare function createMessageDeltaTransformer(messageId: string): (content: string) => ProviderStreamEvent;
|
|
15
|
+
export declare function createMessageCompleteTransformer(messageId: string): (content: string) => ProviderStreamEvent;
|
|
16
|
+
//# sourceMappingURL=stream_handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream_handler.d.ts","sourceRoot":"","sources":["../../utils/stream_handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,oBAAoB;IAEjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,qBAAa,aAAa,CAAC,MAAM;IACjB,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,oBAAyB;IAK/C,YAAY,CACf,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,GAAG,mBAAmB,EAAE,GAAG,IAAI,GACnF,cAAc,CAAC,mBAAmB,CAAC;CAyCzC;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EACtC,OAAO,GAAE,oBAAyB,GACnC,aAAa,CAAC,MAAM,CAAC,CAEvB;AAKD,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,IAGrB,SAAS,MAAM,KAAG,mBAAmB,CAS9E;AAKD,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,IACrB,SAAS,MAAM,KAAG,mBAAmB,CAQjF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { isPaused, waitWhilePaused } from './pause_controller.js';
|
|
2
|
+
export class StreamHandler {
|
|
3
|
+
options;
|
|
4
|
+
constructor(options = {}) {
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
async *handleStream(stream, transformer) {
|
|
8
|
+
const { pauseCheckInterval = 100, abortSignal, providerName = 'Unknown', modelName = 'Unknown' } = this.options;
|
|
9
|
+
try {
|
|
10
|
+
for await (const chunk of stream) {
|
|
11
|
+
if (isPaused()) {
|
|
12
|
+
console.log(`[${providerName}] System paused during stream for model ${modelName}. Waiting...`);
|
|
13
|
+
await waitWhilePaused(pauseCheckInterval, abortSignal);
|
|
14
|
+
console.log(`[${providerName}] System resumed, continuing stream for model ${modelName}`);
|
|
15
|
+
}
|
|
16
|
+
const events = transformer(chunk);
|
|
17
|
+
if (events) {
|
|
18
|
+
if (Array.isArray(events)) {
|
|
19
|
+
for (const event of events) {
|
|
20
|
+
yield event;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
yield events;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
yield {
|
|
31
|
+
type: 'error',
|
|
32
|
+
error: error.message || 'Unknown streaming error',
|
|
33
|
+
code: error.code,
|
|
34
|
+
details: error.details,
|
|
35
|
+
recoverable: error.recoverable,
|
|
36
|
+
timestamp: new Date().toISOString(),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function createStreamHandler(options = {}) {
|
|
42
|
+
return new StreamHandler(options);
|
|
43
|
+
}
|
|
44
|
+
export function createMessageDeltaTransformer(messageId) {
|
|
45
|
+
let order = 0;
|
|
46
|
+
return function transformMessageDelta(content) {
|
|
47
|
+
return {
|
|
48
|
+
type: 'message_delta',
|
|
49
|
+
content,
|
|
50
|
+
message_id: messageId,
|
|
51
|
+
order: order++,
|
|
52
|
+
timestamp: new Date().toISOString(),
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function createMessageCompleteTransformer(messageId) {
|
|
57
|
+
return function transformMessageComplete(content) {
|
|
58
|
+
return {
|
|
59
|
+
type: 'message_complete',
|
|
60
|
+
content,
|
|
61
|
+
message_id: messageId,
|
|
62
|
+
timestamp: new Date().toISOString(),
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=stream_handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream_handler.js","sourceRoot":"","sources":["../../utils/stream_handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgBlE,MAAM,OAAO,aAAa;IACF;IAApB,YAAoB,UAAgC,EAAE;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAK1D,KAAK,CAAC,CAAC,YAAY,CACf,MAA6B,EAC7B,WAAkF;QAElF,MAAM,EACF,kBAAkB,GAAG,GAAG,EACxB,WAAW,EACX,YAAY,GAAG,SAAS,EACxB,SAAS,GAAG,SAAS,EACxB,GAAG,IAAI,CAAC,OAAO,CAAC;QAEjB,IAAI,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAE/B,IAAI,QAAQ,EAAE,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,IAAI,YAAY,2CAA2C,SAAS,cAAc,CAAC,CAAC;oBAChG,MAAM,eAAe,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,IAAI,YAAY,iDAAiD,SAAS,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBAGD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,MAAM,EAAE,CAAC;oBACT,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BACzB,MAAM,KAAK,CAAC;wBAChB,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,MAAM,MAAM,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAElB,MAAM;gBACF,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,yBAAyB;gBACjD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACf,CAAC;QAC7B,CAAC;IACL,CAAC;CACJ;AAKD,MAAM,UAAU,mBAAmB,CAC/B,UAAgC,EAAE;IAElC,OAAO,IAAI,aAAa,CAAS,OAAO,CAAC,CAAC;AAC9C,CAAC;AAKD,MAAM,UAAU,6BAA6B,CAAC,SAAiB;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,SAAS,qBAAqB,CAAC,OAAe;QACjD,OAAO;YACH,IAAI,EAAE,eAAe;YACrB,OAAO;YACP,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,KAAK,EAAE;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAKD,MAAM,UAAU,gCAAgC,CAAC,SAAiB;IAC9D,OAAO,SAAS,wBAAwB,CAAC,OAAe;QACpD,OAAO;YACH,IAAI,EAAE,kBAAkB;YACxB,OAAO;YACP,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|