concevent-ai-agent-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +993 -0
  2. package/dist/adapters/index.d.ts +3 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +2 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/websocket.d.ts +23 -0
  7. package/dist/adapters/websocket.d.ts.map +1 -0
  8. package/dist/adapters/websocket.js +95 -0
  9. package/dist/adapters/websocket.js.map +1 -0
  10. package/dist/core/agent.d.ts +11 -0
  11. package/dist/core/agent.d.ts.map +1 -0
  12. package/dist/core/agent.js +296 -0
  13. package/dist/core/agent.js.map +1 -0
  14. package/dist/core/errors.d.ts +16 -0
  15. package/dist/core/errors.d.ts.map +1 -0
  16. package/dist/core/errors.js +55 -0
  17. package/dist/core/errors.js.map +1 -0
  18. package/dist/core/index.d.ts +13 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +8 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/logger.d.ts +24 -0
  23. package/dist/core/logger.d.ts.map +1 -0
  24. package/dist/core/logger.js +95 -0
  25. package/dist/core/logger.js.map +1 -0
  26. package/dist/core/openrouter-client.d.ts +8 -0
  27. package/dist/core/openrouter-client.d.ts.map +1 -0
  28. package/dist/core/openrouter-client.js +16 -0
  29. package/dist/core/openrouter-client.js.map +1 -0
  30. package/dist/core/openrouter-utils.d.ts +20 -0
  31. package/dist/core/openrouter-utils.d.ts.map +1 -0
  32. package/dist/core/openrouter-utils.js +163 -0
  33. package/dist/core/openrouter-utils.js.map +1 -0
  34. package/dist/core/session.d.ts +19 -0
  35. package/dist/core/session.d.ts.map +1 -0
  36. package/dist/core/session.js +47 -0
  37. package/dist/core/session.js.map +1 -0
  38. package/dist/core/summarization.d.ts +14 -0
  39. package/dist/core/summarization.d.ts.map +1 -0
  40. package/dist/core/summarization.js +83 -0
  41. package/dist/core/summarization.js.map +1 -0
  42. package/dist/core/tool-executor.d.ts +22 -0
  43. package/dist/core/tool-executor.d.ts.map +1 -0
  44. package/dist/core/tool-executor.js +87 -0
  45. package/dist/core/tool-executor.js.map +1 -0
  46. package/dist/index.d.ts +6 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +4 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/react/AgentProvider.d.ts +15 -0
  51. package/dist/react/AgentProvider.d.ts.map +1 -0
  52. package/dist/react/AgentProvider.js +20 -0
  53. package/dist/react/AgentProvider.js.map +1 -0
  54. package/dist/react/index.d.ts +6 -0
  55. package/dist/react/index.d.ts.map +1 -0
  56. package/dist/react/index.js +3 -0
  57. package/dist/react/index.js.map +1 -0
  58. package/dist/react/types.d.ts +26 -0
  59. package/dist/react/types.d.ts.map +1 -0
  60. package/dist/react/types.js +2 -0
  61. package/dist/react/types.js.map +1 -0
  62. package/dist/react/useAgent.d.ts +15 -0
  63. package/dist/react/useAgent.d.ts.map +1 -0
  64. package/dist/react/useAgent.js +167 -0
  65. package/dist/react/useAgent.js.map +1 -0
  66. package/dist/types/config.d.ts +84 -0
  67. package/dist/types/config.d.ts.map +1 -0
  68. package/dist/types/config.js +2 -0
  69. package/dist/types/config.js.map +1 -0
  70. package/dist/types/events.d.ts +85 -0
  71. package/dist/types/events.d.ts.map +1 -0
  72. package/dist/types/events.js +8 -0
  73. package/dist/types/events.js.map +1 -0
  74. package/dist/types/index.d.ts +5 -0
  75. package/dist/types/index.d.ts.map +1 -0
  76. package/dist/types/index.js +2 -0
  77. package/dist/types/index.js.map +1 -0
  78. package/dist/types/messages.d.ts +30 -0
  79. package/dist/types/messages.d.ts.map +1 -0
  80. package/dist/types/messages.js +2 -0
  81. package/dist/types/messages.js.map +1 -0
  82. package/package.json +78 -0
@@ -0,0 +1,95 @@
1
+ const LOG_PREFIX = '[AI-Agent-SDK]';
2
+ const MAX_CONTENT_LENGTH = 200;
3
+ const MAX_RESULT_LENGTH = 500;
4
+ function truncate(text, maxLength) {
5
+ if (text.length <= maxLength)
6
+ return text;
7
+ return text.substring(0, maxLength) + `... (${text.length - maxLength} more chars)`;
8
+ }
9
+ function formatArgs(args) {
10
+ try {
11
+ const str = JSON.stringify(args);
12
+ return truncate(str, MAX_CONTENT_LENGTH);
13
+ }
14
+ catch {
15
+ return '[unable to serialize]';
16
+ }
17
+ }
18
+ function formatResult(result) {
19
+ try {
20
+ const str = JSON.stringify(result);
21
+ return truncate(str, MAX_RESULT_LENGTH);
22
+ }
23
+ catch {
24
+ return '[unable to serialize]';
25
+ }
26
+ }
27
+ export const logger = {
28
+ chatStart(message, historyLength) {
29
+ console.log(`${LOG_PREFIX} 💬 Chat started`);
30
+ console.log(`${LOG_PREFIX} Message: ${truncate(message, MAX_CONTENT_LENGTH)}`);
31
+ console.log(`${LOG_PREFIX} History length: ${historyLength} messages`);
32
+ },
33
+ iteration(current, max) {
34
+ console.log(`${LOG_PREFIX} 🔄 Iteration ${current}/${max}`);
35
+ },
36
+ apiRequest(model, messageCount, hasTools) {
37
+ console.log(`${LOG_PREFIX} 📤 API Request`);
38
+ console.log(`${LOG_PREFIX} Model: ${model}`);
39
+ console.log(`${LOG_PREFIX} Messages: ${messageCount}`);
40
+ console.log(`${LOG_PREFIX} Tools: ${hasTools ? 'enabled' : 'none'}`);
41
+ },
42
+ apiResponse(hasText, toolCallCount, hasThinking) {
43
+ console.log(`${LOG_PREFIX} 📥 API Response`);
44
+ console.log(`${LOG_PREFIX} Has text: ${hasText}`);
45
+ console.log(`${LOG_PREFIX} Tool calls: ${toolCallCount}`);
46
+ console.log(`${LOG_PREFIX} Has thinking: ${hasThinking}`);
47
+ },
48
+ toolCallStart(calls) {
49
+ console.log(`${LOG_PREFIX} 🔧 Tool calls starting (${calls.length})`);
50
+ for (const call of calls) {
51
+ console.log(`${LOG_PREFIX} → ${call.name}(${formatArgs(call.args)})`);
52
+ }
53
+ },
54
+ toolCallResult(name, result, error) {
55
+ if (error) {
56
+ console.log(`${LOG_PREFIX} ❌ Tool result: ${name} - ERROR: ${error}`);
57
+ }
58
+ else {
59
+ console.log(`${LOG_PREFIX} ✅ Tool result: ${name}`);
60
+ console.log(`${LOG_PREFIX} Result: ${formatResult(result)}`);
61
+ }
62
+ },
63
+ thinking(hasThinking) {
64
+ if (hasThinking) {
65
+ console.log(`${LOG_PREFIX} 🧠 Reasoning/thinking received`);
66
+ }
67
+ },
68
+ summarizationStart(messageCount) {
69
+ console.log(`${LOG_PREFIX} 📝 Summarization starting (${messageCount} messages)`);
70
+ },
71
+ summarizationEnd(tokensEstimate) {
72
+ console.log(`${LOG_PREFIX} 📝 Summarization complete (est. ${tokensEstimate ?? '?'} tokens)`);
73
+ },
74
+ tokenUsage(usage) {
75
+ console.log(`${LOG_PREFIX} 📊 Token usage: ${usage.promptTokenCount ?? 0} prompt + ${usage.responseTokenCount ?? 0} response = ${usage.totalTokenCount ?? 0} total`);
76
+ },
77
+ chatComplete(iterations, summarized) {
78
+ console.log(`${LOG_PREFIX} ✨ Chat complete`);
79
+ console.log(`${LOG_PREFIX} Iterations: ${iterations}`);
80
+ console.log(`${LOG_PREFIX} Summarized: ${summarized}`);
81
+ },
82
+ error(message, error) {
83
+ console.error(`${LOG_PREFIX} ❌ Error: ${message}`);
84
+ if (error) {
85
+ console.error(`${LOG_PREFIX} Details:`, error);
86
+ }
87
+ },
88
+ aborted() {
89
+ console.log(`${LOG_PREFIX} 🛑 Request aborted`);
90
+ },
91
+ retry(attempt, maxAttempts, reason) {
92
+ console.log(`${LOG_PREFIX} 🔁 Retry ${attempt}/${maxAttempts}: ${reason}`);
93
+ },
94
+ };
95
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import OpenAI from 'openai';
2
+ export interface OpenRouterClientConfig {
3
+ apiKey: string;
4
+ baseURL?: string;
5
+ defaultHeaders?: Record<string, string>;
6
+ }
7
+ export declare function createOpenRouterClient(config: OpenRouterClientConfig): OpenAI;
8
+ //# sourceMappingURL=openrouter-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.d.ts","sourceRoot":"","sources":["../../src/core/openrouter-client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAkB7E"}
@@ -0,0 +1,16 @@
1
+ import OpenAI from 'openai';
2
+ export function createOpenRouterClient(config) {
3
+ const { apiKey, baseURL = 'https://openrouter.ai/api/v1', defaultHeaders = {} } = config;
4
+ if (!apiKey) {
5
+ throw new Error('API key is required');
6
+ }
7
+ if (!apiKey.startsWith('sk-or-v1-')) {
8
+ console.warn('Warning: API key does not appear to be a valid OpenRouter API key format (expected sk-or-v1-...)');
9
+ }
10
+ return new OpenAI({
11
+ apiKey,
12
+ baseURL,
13
+ defaultHeaders,
14
+ });
15
+ }
16
+ //# sourceMappingURL=openrouter-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.js","sourceRoot":"","sources":["../../src/core/openrouter-client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAQ5B,MAAM,UAAU,sBAAsB,CAAC,MAA8B;IACnE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,8BAA8B,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEzF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CACV,kGAAkG,CACnG,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,MAAM,CAAC;QAChB,MAAM;QACN,OAAO;QACP,cAAc;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ import OpenAI from 'openai';
2
+ import type { ChatMessage, ReasoningDetail, FunctionDeclaration, UsageMetadata } from '../types/index.js';
3
+ export declare const ENCRYPTED_REASONING_MARKER = "[REASONING_ENCRYPTED]";
4
+ export declare function convertChatMessagesToOpenAI(messages: ChatMessage[]): OpenAI.Chat.Completions.ChatCompletionMessageParam[];
5
+ export declare function convertFunctionDeclarationsToTools(declarations: FunctionDeclaration[]): OpenAI.Chat.Completions.ChatCompletionTool[];
6
+ export declare function convertOpenAIToolCallsToFunctionCalls(toolCalls: OpenAI.Chat.Completions.ChatCompletionMessageToolCall[]): Array<{
7
+ id: string;
8
+ name: string;
9
+ args: Record<string, unknown>;
10
+ }>;
11
+ export declare function mapOpenAIUsageToMetadata(usage: OpenAI.CompletionUsage): UsageMetadata;
12
+ export declare function createSystemMessage(content: string): OpenAI.Chat.Completions.ChatCompletionSystemMessageParam;
13
+ export declare function createUserMessage(content: string): OpenAI.Chat.Completions.ChatCompletionUserMessageParam;
14
+ export declare function createAssistantMessage(content: string): OpenAI.Chat.Completions.ChatCompletionAssistantMessageParam;
15
+ export interface NormalizedReasoning {
16
+ displayText?: string;
17
+ rawReasoningDetails?: ReasoningDetail[];
18
+ }
19
+ export declare function normalizeReasoning(reasoning?: string, reasoningDetails?: ReasoningDetail[]): NormalizedReasoning;
20
+ //# sourceMappingURL=openrouter-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-utils.d.ts","sourceRoot":"","sources":["../../src/core/openrouter-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,WAAW,EAAE,GACtB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAiFtD;AAED,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,mBAAmB,EAAE,GAClC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAS9C;AAED,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,GACjE,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC,CAWD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,GAAG,aAAa,CAerF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAK1D;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAKxD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAK7D;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,eAAe,EAAE,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAChC,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,eAAe,EAAE,GACnC,mBAAmB,CAiCrB"}
@@ -0,0 +1,163 @@
1
+ export const ENCRYPTED_REASONING_MARKER = '[REASONING_ENCRYPTED]';
2
+ export function convertChatMessagesToOpenAI(messages) {
3
+ const result = [];
4
+ for (const message of messages) {
5
+ if (message.role === 'user') {
6
+ result.push({
7
+ role: 'user',
8
+ content: message.content,
9
+ });
10
+ }
11
+ else if (message.role === 'assistant') {
12
+ const assistantMessage = {
13
+ role: 'assistant',
14
+ content: message.content,
15
+ };
16
+ if (message.reasoning) {
17
+ assistantMessage.reasoning = message.reasoning;
18
+ }
19
+ if (message.reasoning_details && message.reasoning_details.length > 0) {
20
+ assistantMessage.reasoning_details =
21
+ message.reasoning_details;
22
+ }
23
+ result.push(assistantMessage);
24
+ }
25
+ else if (message.role === 'system') {
26
+ result.push({
27
+ role: 'system',
28
+ content: message.content,
29
+ });
30
+ }
31
+ else if (message.role === 'tool-call') {
32
+ if (message.toolCalls && message.toolCalls.length > 0) {
33
+ const toolCallMessage = {
34
+ role: 'assistant',
35
+ content: message.content,
36
+ tool_calls: message.toolCalls.map((toolCall) => ({
37
+ id: toolCall.id,
38
+ type: 'function',
39
+ function: {
40
+ name: toolCall.name,
41
+ arguments: JSON.stringify(toolCall.args),
42
+ },
43
+ })),
44
+ };
45
+ if (message.reasoning) {
46
+ toolCallMessage.reasoning = message.reasoning;
47
+ }
48
+ if (message.reasoning_details && message.reasoning_details.length > 0) {
49
+ toolCallMessage.reasoning_details =
50
+ message.reasoning_details;
51
+ }
52
+ result.push(toolCallMessage);
53
+ }
54
+ else {
55
+ const assistantMessage = {
56
+ role: 'assistant',
57
+ content: message.content,
58
+ };
59
+ if (message.reasoning) {
60
+ assistantMessage.reasoning = message.reasoning;
61
+ }
62
+ if (message.reasoning_details && message.reasoning_details.length > 0) {
63
+ assistantMessage.reasoning_details =
64
+ message.reasoning_details;
65
+ }
66
+ result.push(assistantMessage);
67
+ }
68
+ }
69
+ else if (message.role === 'tool-call-results') {
70
+ if (message.toolCallId) {
71
+ result.push({
72
+ role: 'tool',
73
+ content: message.content,
74
+ tool_call_id: message.toolCallId,
75
+ });
76
+ }
77
+ else {
78
+ throw new Error(`tool-call-results message missing tool_call_id: ${message.content.substring(0, 100)}...`);
79
+ }
80
+ }
81
+ else {
82
+ throw new Error(`Unsupported message role: ${message.role}`);
83
+ }
84
+ }
85
+ return result;
86
+ }
87
+ export function convertFunctionDeclarationsToTools(declarations) {
88
+ return declarations.map((decl) => ({
89
+ type: 'function',
90
+ function: {
91
+ name: decl.name,
92
+ description: decl.description,
93
+ parameters: decl.parametersJsonSchema,
94
+ },
95
+ }));
96
+ }
97
+ export function convertOpenAIToolCallsToFunctionCalls(toolCalls) {
98
+ return toolCalls.map((call) => {
99
+ if (call.type === 'function') {
100
+ return {
101
+ id: call.id,
102
+ name: call.function.name,
103
+ args: JSON.parse(call.function.arguments),
104
+ };
105
+ }
106
+ throw new Error(`Unsupported tool call type: ${call.type}`);
107
+ });
108
+ }
109
+ export function mapOpenAIUsageToMetadata(usage) {
110
+ return {
111
+ promptTokenCount: usage.prompt_tokens,
112
+ candidatesTokenCount: usage.completion_tokens,
113
+ totalTokenCount: usage.total_tokens,
114
+ cachedContentTokenCount: undefined,
115
+ reasoningTokenCount: usage.completion_tokens_details
116
+ ? usage.completion_tokens_details?.reasoning_tokens
117
+ : undefined,
118
+ };
119
+ }
120
+ export function createSystemMessage(content) {
121
+ return {
122
+ role: 'system',
123
+ content,
124
+ };
125
+ }
126
+ export function createUserMessage(content) {
127
+ return {
128
+ role: 'user',
129
+ content,
130
+ };
131
+ }
132
+ export function createAssistantMessage(content) {
133
+ return {
134
+ role: 'assistant',
135
+ content,
136
+ };
137
+ }
138
+ export function normalizeReasoning(reasoning, reasoningDetails) {
139
+ if (reasoningDetails && reasoningDetails.length > 0) {
140
+ const displayableDetails = reasoningDetails.filter((detail) => detail.text && detail.type !== 'reasoning.encrypted');
141
+ if (displayableDetails.length > 0) {
142
+ return {
143
+ displayText: displayableDetails
144
+ .sort((a, b) => a.index - b.index)
145
+ .map((detail) => detail.text)
146
+ .join('\n\n'),
147
+ rawReasoningDetails: reasoningDetails,
148
+ };
149
+ }
150
+ const hasEncryptedReasoning = reasoningDetails.some((detail) => detail.type === 'reasoning.encrypted' || (detail.data && !detail.text));
151
+ if (hasEncryptedReasoning) {
152
+ return {
153
+ displayText: ENCRYPTED_REASONING_MARKER,
154
+ rawReasoningDetails: reasoningDetails,
155
+ };
156
+ }
157
+ }
158
+ if (reasoning) {
159
+ return { displayText: reasoning };
160
+ }
161
+ return {};
162
+ }
163
+ //# sourceMappingURL=openrouter-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-utils.js","sourceRoot":"","sources":["../../src/core/openrouter-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ChatMessage, UsageMetadata } from '../types/index.js';
2
+ export declare class AgentSession {
3
+ private history;
4
+ private tokenUsage;
5
+ private abortController;
6
+ getHistory(): ChatMessage[];
7
+ setHistory(history: ChatMessage[]): void;
8
+ addMessage(message: ChatMessage): void;
9
+ addMessages(messages: ChatMessage[]): void;
10
+ clearHistory(): void;
11
+ getTokenUsage(): UsageMetadata;
12
+ updateTokenUsage(usage: UsageMetadata): void;
13
+ createAbortController(): AbortController;
14
+ getAbortSignal(): AbortSignal | undefined;
15
+ abort(): void;
16
+ isAborted(): boolean;
17
+ clearAbortController(): void;
18
+ }
19
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEpE,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,eAAe,CAAgC;IAEvD,UAAU,IAAI,WAAW,EAAE;IAI3B,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAIxC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAItC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAI1C,YAAY,IAAI,IAAI;IAKpB,aAAa,IAAI,aAAa;IAI9B,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAI5C,qBAAqB,IAAI,eAAe;IAKxC,cAAc,IAAI,WAAW,GAAG,SAAS;IAIzC,KAAK,IAAI,IAAI;IAOb,SAAS,IAAI,OAAO;IAIpB,oBAAoB,IAAI,IAAI;CAG7B"}
@@ -0,0 +1,47 @@
1
+ export class AgentSession {
2
+ history = [];
3
+ tokenUsage = {};
4
+ abortController = null;
5
+ getHistory() {
6
+ return [...this.history];
7
+ }
8
+ setHistory(history) {
9
+ this.history = [...history];
10
+ }
11
+ addMessage(message) {
12
+ this.history.push(message);
13
+ }
14
+ addMessages(messages) {
15
+ this.history.push(...messages);
16
+ }
17
+ clearHistory() {
18
+ this.history = [];
19
+ this.tokenUsage = {};
20
+ }
21
+ getTokenUsage() {
22
+ return { ...this.tokenUsage };
23
+ }
24
+ updateTokenUsage(usage) {
25
+ this.tokenUsage = { ...usage };
26
+ }
27
+ createAbortController() {
28
+ this.abortController = new AbortController();
29
+ return this.abortController;
30
+ }
31
+ getAbortSignal() {
32
+ return this.abortController?.signal;
33
+ }
34
+ abort() {
35
+ if (this.abortController) {
36
+ this.abortController.abort();
37
+ this.abortController = null;
38
+ }
39
+ }
40
+ isAborted() {
41
+ return this.abortController?.signal.aborted ?? false;
42
+ }
43
+ clearAbortController() {
44
+ this.abortController = null;
45
+ }
46
+ }
47
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACf,OAAO,GAAkB,EAAE,CAAC;IAC5B,UAAU,GAAkB,EAAE,CAAC;IAC/B,eAAe,GAA2B,IAAI,CAAC;IAEvD,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,OAAsB;QAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,OAAoB;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,QAAuB;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,gBAAgB,CAAC,KAAoB;QACnC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACtC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import OpenAI from 'openai';
2
+ import type { ChatMessage, ReasoningEffort, SummarizationConfig } from '../types/index.js';
3
+ export interface SummarizationResult {
4
+ summary: string;
5
+ originalMessageCount: number;
6
+ tokensEstimate: number;
7
+ requestId?: string;
8
+ error?: string;
9
+ }
10
+ export declare function summarizeConversation(conversationHistory: ChatMessage[], client: OpenAI, model: string, config: SummarizationConfig, reasoningEffort?: ReasoningEffort, temperature?: number, abortSignal?: AbortSignal): Promise<SummarizationResult>;
11
+ export declare function createSummaryMessage(summary: string): ChatMessage;
12
+ export declare function shouldSummarize(totalTokens: number, contextLimitTokens: number): boolean;
13
+ export declare const DEFAULT_CONTEXT_LIMIT_TOKENS: number;
14
+ //# sourceMappingURL=summarization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarization.d.ts","sourceRoot":"","sources":["../../src/core/summarization.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA0B3F,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CACzC,mBAAmB,EAAE,WAAW,EAAE,EAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,EAC3B,eAAe,GAAE,eAAwB,EACzC,WAAW,GAAE,MAAY,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAwD9B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAMjE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAExF;AAED,eAAO,MAAM,4BAA4B,QAAa,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { createUserMessage } from './openrouter-utils.js';
2
+ const DEFAULT_SUMMARIZATION_PROMPT = `You are an AI assistant specialized in summarizing conversations.
3
+
4
+ Your task is to summarize the conversation you received accurately and completely, preserving all important information.
5
+
6
+ The summary should include:
7
+ 1. Main topics of the conversation
8
+ 2. User requests and questions
9
+ 3. Answers and solutions provided
10
+ 4. Important data and numbers mentioned
11
+ 5. Decisions or future plans
12
+
13
+ Write the summary concisely but comprehensively. The summary will be passed to another AI system to continue the conversation.
14
+
15
+ Example of a good summary structure:
16
+ "The user asked about [topic]. It was explained [solution/information]. Relevant data: [data]. The user requested [additional request]. It was agreed that [decision/plan]."
17
+
18
+ Do not include in the summary:
19
+ - Irrelevant conversation details
20
+ - Opening and closing greetings
21
+ - Side remarks
22
+
23
+ Summarize the following conversation:`;
24
+ export async function summarizeConversation(conversationHistory, client, model, config, reasoningEffort = 'high', temperature = 0.1, abortSignal) {
25
+ try {
26
+ if (abortSignal?.aborted) {
27
+ throw new Error('Request aborted before processing');
28
+ }
29
+ const prompt = config.prompt || DEFAULT_SUMMARIZATION_PROMPT;
30
+ const conversationText = conversationHistory
31
+ .map((msg) => {
32
+ const role = msg.role === 'user' ? 'User' : 'Assistant';
33
+ return `${role}: ${msg.content}`;
34
+ })
35
+ .join('\n\n');
36
+ const messages = [
37
+ createUserMessage(`${prompt}\n\n--- Conversation to summarize ---\n${conversationText}`),
38
+ ];
39
+ const response = await client.chat.completions.create({
40
+ model,
41
+ messages,
42
+ temperature,
43
+ reasoning_effort: reasoningEffort,
44
+ });
45
+ const responseMessage = response.choices[0]?.message;
46
+ if (!responseMessage?.content) {
47
+ throw new Error('Failed to generate conversation summary');
48
+ }
49
+ const summary = responseMessage.content.trim();
50
+ const originalText = conversationHistory.map((msg) => msg.content).join(' ');
51
+ const tokensEstimate = Math.ceil(originalText.length / 4);
52
+ return {
53
+ summary,
54
+ originalMessageCount: conversationHistory.length,
55
+ tokensEstimate,
56
+ requestId: response.id,
57
+ };
58
+ }
59
+ catch (error) {
60
+ console.error('Error summarizing conversation:', error);
61
+ if (error instanceof Error && error.name === 'AbortError') {
62
+ throw error;
63
+ }
64
+ return {
65
+ summary: '',
66
+ error: error instanceof Error ? error.message : 'Unknown error during summarization',
67
+ originalMessageCount: conversationHistory.length,
68
+ tokensEstimate: 0,
69
+ };
70
+ }
71
+ }
72
+ export function createSummaryMessage(summary) {
73
+ return {
74
+ role: 'assistant',
75
+ content: `Summary of previous conversation: ${summary}`,
76
+ timestamp: new Date(),
77
+ };
78
+ }
79
+ export function shouldSummarize(totalTokens, contextLimitTokens) {
80
+ return totalTokens >= contextLimitTokens;
81
+ }
82
+ export const DEFAULT_CONTEXT_LIMIT_TOKENS = 100 * 1024;
83
+ //# sourceMappingURL=summarization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarization.js","sourceRoot":"","sources":["../../src/core/summarization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ToolDefinition, ToolExecutorContext, FunctionCallResult, ToolResultData, ExecutedToolCall } from '../types/index.js';
2
+ export declare class ToolExecutor {
3
+ private toolMap;
4
+ constructor(tools: ToolDefinition[]);
5
+ getToolDeclarations(): import("../index.js").FunctionDeclaration[];
6
+ hasTool(name: string): boolean;
7
+ executeToolCall(call: {
8
+ id: string;
9
+ name: string;
10
+ args: Record<string, unknown>;
11
+ }, context: ToolExecutorContext): Promise<FunctionCallResult>;
12
+ executeToolCalls(calls: Array<{
13
+ id: string;
14
+ name: string;
15
+ args: Record<string, unknown>;
16
+ }>, context: ToolExecutorContext, onResult?: (result: ToolResultData) => void): Promise<ExecutedToolCall[]>;
17
+ formatToolResultForHistory(_callId: string, functionName: string, result: FunctionCallResult): {
18
+ content: string;
19
+ isError: boolean;
20
+ };
21
+ }
22
+ //# sourceMappingURL=tool-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../src/core/tool-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAG3B,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,KAAK,EAAE,cAAc,EAAE;IAOnC,mBAAmB;IAInB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxB,eAAe,CACnB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACjE,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IA2BxB,gBAAgB,CACpB,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,EACzE,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAC1C,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiC9B,0BAA0B,CACxB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,GACzB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;CAqBzC"}
@@ -0,0 +1,87 @@
1
+ import { logger } from './logger.js';
2
+ export class ToolExecutor {
3
+ toolMap;
4
+ constructor(tools) {
5
+ this.toolMap = new Map();
6
+ for (const tool of tools) {
7
+ this.toolMap.set(tool.declaration.name, tool);
8
+ }
9
+ }
10
+ getToolDeclarations() {
11
+ return Array.from(this.toolMap.values()).map((t) => t.declaration);
12
+ }
13
+ hasTool(name) {
14
+ return this.toolMap.has(name);
15
+ }
16
+ async executeToolCall(call, context) {
17
+ const tool = this.toolMap.get(call.name);
18
+ if (!tool) {
19
+ return {
20
+ functionName: call.name,
21
+ result: null,
22
+ error: `Unknown function: ${call.name}`,
23
+ };
24
+ }
25
+ try {
26
+ const result = await tool.executor(call.args, context);
27
+ return {
28
+ functionName: call.name,
29
+ result,
30
+ };
31
+ }
32
+ catch (error) {
33
+ console.error(`Tool execution error for ${call.name}:`, error);
34
+ return {
35
+ functionName: call.name,
36
+ result: null,
37
+ error: error instanceof Error ? error.message : 'Unknown error during tool execution',
38
+ };
39
+ }
40
+ }
41
+ async executeToolCalls(calls, context, onResult) {
42
+ const executedCalls = [];
43
+ for (const call of calls) {
44
+ if (context.abortSignal?.aborted) {
45
+ break;
46
+ }
47
+ const result = await this.executeToolCall(call, context);
48
+ const executedCall = {
49
+ id: call.id,
50
+ functionName: call.name,
51
+ args: call.args,
52
+ result,
53
+ };
54
+ executedCalls.push(executedCall);
55
+ logger.toolCallResult(call.name, result.result, result.error);
56
+ if (onResult) {
57
+ onResult({
58
+ id: call.id,
59
+ functionName: call.name,
60
+ result: result.result,
61
+ error: result.error,
62
+ });
63
+ }
64
+ }
65
+ return executedCalls;
66
+ }
67
+ formatToolResultForHistory(_callId, functionName, result) {
68
+ if (result.error) {
69
+ const content = `Error in function ${functionName}: ${result.error}
70
+
71
+ 🤔 THINK AND ANALYZE: This function call failed. You need to:
72
+ 1. Analyze the error message carefully to understand what went wrong
73
+ 2. Check if you have the correct parameter types and values
74
+ 3. Consider if you need to call other functions first
75
+ 4. Look at the function schema to understand what parameters are expected
76
+ 5. Retry with corrected parameters or try a different approach
77
+
78
+ Remember: You have access to all previous function results in this conversation. Use them to solve this issue.`;
79
+ return { content, isError: true };
80
+ }
81
+ return {
82
+ content: `Result of ${functionName}: ${JSON.stringify(result.result)}`,
83
+ isError: false,
84
+ };
85
+ }
86
+ }
87
+ //# sourceMappingURL=tool-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../../src/core/tool-executor.ts"],"names":[],"mappings":"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"}