@alexnetrebskii/hive-agent 0.5.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 (66) hide show
  1. package/README.md +425 -0
  2. package/dist/agent.d.ts +24 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +277 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/context.d.ts +52 -0
  7. package/dist/context.d.ts.map +1 -0
  8. package/dist/context.js +124 -0
  9. package/dist/context.js.map +1 -0
  10. package/dist/executor.d.ts +29 -0
  11. package/dist/executor.d.ts.map +1 -0
  12. package/dist/executor.js +349 -0
  13. package/dist/executor.js.map +1 -0
  14. package/dist/index.d.ts +16 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +20 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/prompt.d.ts +31 -0
  19. package/dist/prompt.d.ts.map +1 -0
  20. package/dist/prompt.js +84 -0
  21. package/dist/prompt.js.map +1 -0
  22. package/dist/providers/index.d.ts +11 -0
  23. package/dist/providers/index.d.ts.map +1 -0
  24. package/dist/providers/index.js +8 -0
  25. package/dist/providers/index.js.map +1 -0
  26. package/dist/providers/llm/base.d.ts +7 -0
  27. package/dist/providers/llm/base.d.ts.map +1 -0
  28. package/dist/providers/llm/base.js +7 -0
  29. package/dist/providers/llm/base.js.map +1 -0
  30. package/dist/providers/llm/claude.d.ts +31 -0
  31. package/dist/providers/llm/claude.d.ts.map +1 -0
  32. package/dist/providers/llm/claude.js +180 -0
  33. package/dist/providers/llm/claude.js.map +1 -0
  34. package/dist/providers/llm/openai.d.ts +25 -0
  35. package/dist/providers/llm/openai.d.ts.map +1 -0
  36. package/dist/providers/llm/openai.js +171 -0
  37. package/dist/providers/llm/openai.js.map +1 -0
  38. package/dist/providers/logger/base.d.ts +7 -0
  39. package/dist/providers/logger/base.d.ts.map +1 -0
  40. package/dist/providers/logger/base.js +7 -0
  41. package/dist/providers/logger/base.js.map +1 -0
  42. package/dist/providers/logger/console.d.ts +29 -0
  43. package/dist/providers/logger/console.d.ts.map +1 -0
  44. package/dist/providers/logger/console.js +71 -0
  45. package/dist/providers/logger/console.js.map +1 -0
  46. package/dist/providers/repository/base.d.ts +7 -0
  47. package/dist/providers/repository/base.d.ts.map +1 -0
  48. package/dist/providers/repository/base.js +7 -0
  49. package/dist/providers/repository/base.js.map +1 -0
  50. package/dist/providers/repository/memory.d.ts +21 -0
  51. package/dist/providers/repository/memory.d.ts.map +1 -0
  52. package/dist/providers/repository/memory.js +50 -0
  53. package/dist/providers/repository/memory.js.map +1 -0
  54. package/dist/review.d.ts +68 -0
  55. package/dist/review.d.ts.map +1 -0
  56. package/dist/review.js +263 -0
  57. package/dist/review.js.map +1 -0
  58. package/dist/todo.d.ts +73 -0
  59. package/dist/todo.d.ts.map +1 -0
  60. package/dist/todo.js +320 -0
  61. package/dist/todo.js.map +1 -0
  62. package/dist/types.d.ts +257 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +5 -0
  65. package/dist/types.js.map +1 -0
  66. package/package.json +43 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Claude LLM Provider
3
+ *
4
+ * Implementation of LLMProvider for Anthropic's Claude API.
5
+ */
6
+ import Anthropic from '@anthropic-ai/sdk';
7
+ export class ClaudeProvider {
8
+ client;
9
+ model;
10
+ maxTokens;
11
+ constructor(config = {}) {
12
+ this.client = new Anthropic({
13
+ apiKey: config.apiKey
14
+ });
15
+ this.model = config.model || 'claude-sonnet-4-20250514';
16
+ this.maxTokens = config.maxTokens || 8192;
17
+ }
18
+ async chat(systemPrompt, messages, tools, options = {}) {
19
+ const cacheConfig = options.cache;
20
+ const cacheEnabled = cacheConfig?.enabled ?? false;
21
+ const anthropicMessages = this.convertMessages(messages, cacheEnabled && (cacheConfig?.cacheHistory ?? true));
22
+ const anthropicTools = this.convertTools(tools, cacheEnabled && (cacheConfig?.cacheTools ?? true));
23
+ const systemContent = this.buildSystemContent(systemPrompt, cacheEnabled && (cacheConfig?.cacheSystemPrompt ?? true));
24
+ const requestParams = {
25
+ model: options.model || this.model,
26
+ max_tokens: this.maxTokens,
27
+ system: systemContent,
28
+ messages: anthropicMessages,
29
+ tools: anthropicTools.length > 0 ? anthropicTools : undefined
30
+ };
31
+ // Add extended thinking if enabled
32
+ if (options.thinkingMode === 'enabled') {
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ requestParams.thinking = {
35
+ type: 'enabled',
36
+ budget_tokens: options.thinkingBudget || 10000
37
+ };
38
+ }
39
+ const response = await this.client.messages.create(requestParams);
40
+ return this.convertResponse(response);
41
+ }
42
+ /**
43
+ * Build system content with optional caching
44
+ */
45
+ buildSystemContent(systemPrompt, enableCache) {
46
+ if (!enableCache) {
47
+ return systemPrompt;
48
+ }
49
+ return [{
50
+ type: 'text',
51
+ text: systemPrompt,
52
+ cache_control: { type: 'ephemeral' }
53
+ }];
54
+ }
55
+ convertMessages(messages, enableCache = false) {
56
+ // Find the last user message index for cache breakpoint
57
+ const lastUserIndex = this.findLastUserMessageIndex(messages);
58
+ return messages.map((msg, index) => {
59
+ const shouldCache = enableCache && index === lastUserIndex;
60
+ if (typeof msg.content === 'string') {
61
+ if (shouldCache) {
62
+ return {
63
+ role: msg.role,
64
+ content: [{
65
+ type: 'text',
66
+ text: msg.content,
67
+ cache_control: { type: 'ephemeral' }
68
+ }]
69
+ };
70
+ }
71
+ return { role: msg.role, content: msg.content };
72
+ }
73
+ const blocks = this.convertContentBlocks(msg.content);
74
+ if (shouldCache && blocks.length > 0) {
75
+ // Add cache_control to the last block
76
+ const lastBlock = blocks[blocks.length - 1];
77
+ lastBlock.cache_control = { type: 'ephemeral' };
78
+ }
79
+ return { role: msg.role, content: blocks };
80
+ });
81
+ }
82
+ /**
83
+ * Find the last user message index (for cache breakpoint)
84
+ */
85
+ findLastUserMessageIndex(messages) {
86
+ for (let i = messages.length - 1; i >= 0; i--) {
87
+ if (messages[i].role === 'user') {
88
+ return i;
89
+ }
90
+ }
91
+ return -1;
92
+ }
93
+ convertContentBlocks(blocks) {
94
+ return blocks.map(block => {
95
+ switch (block.type) {
96
+ case 'text':
97
+ return { type: 'text', text: block.text };
98
+ case 'tool_use':
99
+ return {
100
+ type: 'tool_use',
101
+ id: block.id,
102
+ name: block.name,
103
+ input: block.input
104
+ };
105
+ case 'tool_result':
106
+ return {
107
+ type: 'tool_result',
108
+ tool_use_id: block.tool_use_id,
109
+ content: block.content,
110
+ is_error: block.is_error
111
+ };
112
+ case 'thinking':
113
+ return { type: 'thinking', thinking: block.thinking };
114
+ default:
115
+ throw new Error(`Unknown content block type: ${block.type}`);
116
+ }
117
+ });
118
+ }
119
+ convertTools(tools, enableCache = false) {
120
+ return tools.map((tool, index) => {
121
+ const isLast = index === tools.length - 1;
122
+ const baseTool = {
123
+ name: tool.name,
124
+ description: tool.description,
125
+ input_schema: tool.input_schema
126
+ };
127
+ if (enableCache && isLast) {
128
+ return {
129
+ ...baseTool,
130
+ cache_control: { type: 'ephemeral' }
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ };
133
+ }
134
+ return baseTool;
135
+ });
136
+ }
137
+ convertResponse(response) {
138
+ const content = response.content.map(block => {
139
+ switch (block.type) {
140
+ case 'text':
141
+ return { type: 'text', text: block.text };
142
+ case 'tool_use':
143
+ return {
144
+ type: 'tool_use',
145
+ id: block.id,
146
+ name: block.name,
147
+ input: block.input
148
+ };
149
+ default:
150
+ // Handle thinking blocks and other types
151
+ if ('thinking' in block) {
152
+ return { type: 'thinking', thinking: block.thinking };
153
+ }
154
+ return { type: 'text', text: '' };
155
+ }
156
+ });
157
+ const stopReason = response.stop_reason === 'tool_use' ? 'tool_use' :
158
+ response.stop_reason === 'max_tokens' ? 'max_tokens' :
159
+ 'end_turn';
160
+ // Extract cache usage from response
161
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
+ const usage = response.usage;
163
+ const cacheUsage = (usage.cache_creation_input_tokens || usage.cache_read_input_tokens)
164
+ ? {
165
+ cacheCreationInputTokens: usage.cache_creation_input_tokens || 0,
166
+ cacheReadInputTokens: usage.cache_read_input_tokens || 0
167
+ }
168
+ : undefined;
169
+ return {
170
+ content,
171
+ stopReason,
172
+ usage: {
173
+ inputTokens: response.usage.input_tokens,
174
+ outputTokens: response.usage.output_tokens
175
+ },
176
+ cacheUsage
177
+ };
178
+ }
179
+ }
180
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/providers/llm/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * OpenAI LLM Provider
3
+ *
4
+ * Implementation of LLMProvider for OpenAI's API (GPT-4, GPT-4o, etc.).
5
+ */
6
+ import type { LLMProvider, LLMResponse, LLMOptions, Message, ToolSchema } from '../../types.js';
7
+ export interface OpenAIProviderConfig {
8
+ apiKey?: string;
9
+ model?: string;
10
+ maxTokens?: number;
11
+ baseURL?: string;
12
+ }
13
+ export declare class OpenAIProvider implements LLMProvider {
14
+ private apiKey;
15
+ private model;
16
+ private maxTokens;
17
+ private baseURL;
18
+ constructor(config?: OpenAIProviderConfig);
19
+ chat(systemPrompt: string, messages: Message[], tools: ToolSchema[], options?: LLMOptions): Promise<LLMResponse>;
20
+ private convertMessages;
21
+ private convertContentBlocksToOpenAI;
22
+ private convertTools;
23
+ private convertResponse;
24
+ }
25
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,OAAO,EACP,UAAU,EAGX,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA4CD,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,GAAE,oBAAyB;IAWvC,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAiCvB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,4BAA4B;IAkEpC,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,eAAe;CAyCxB"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * OpenAI LLM Provider
3
+ *
4
+ * Implementation of LLMProvider for OpenAI's API (GPT-4, GPT-4o, etc.).
5
+ */
6
+ export class OpenAIProvider {
7
+ apiKey;
8
+ model;
9
+ maxTokens;
10
+ baseURL;
11
+ constructor(config = {}) {
12
+ this.apiKey = config.apiKey || process.env.OPENAI_API_KEY || '';
13
+ this.model = config.model || 'gpt-4o';
14
+ this.maxTokens = config.maxTokens || 4096;
15
+ this.baseURL = config.baseURL || 'https://api.openai.com/v1';
16
+ if (!this.apiKey) {
17
+ throw new Error('OpenAI API key is required');
18
+ }
19
+ }
20
+ async chat(systemPrompt, messages, tools, options = {}) {
21
+ const openaiMessages = this.convertMessages(systemPrompt, messages);
22
+ const openaiTools = this.convertTools(tools);
23
+ const requestBody = {
24
+ model: options.model || this.model,
25
+ max_tokens: this.maxTokens,
26
+ messages: openaiMessages
27
+ };
28
+ if (openaiTools.length > 0) {
29
+ requestBody.tools = openaiTools;
30
+ }
31
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
32
+ method: 'POST',
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ 'Authorization': `Bearer ${this.apiKey}`
36
+ },
37
+ body: JSON.stringify(requestBody)
38
+ });
39
+ if (!response.ok) {
40
+ const errorData = await response.json().catch(() => ({ error: { message: response.statusText } }));
41
+ throw new Error(`OpenAI API error: ${errorData.error?.message || response.statusText}`);
42
+ }
43
+ const data = await response.json();
44
+ return this.convertResponse(data);
45
+ }
46
+ convertMessages(systemPrompt, messages) {
47
+ const result = [
48
+ { role: 'system', content: systemPrompt }
49
+ ];
50
+ for (const msg of messages) {
51
+ if (typeof msg.content === 'string') {
52
+ result.push({
53
+ role: msg.role === 'user' ? 'user' : 'assistant',
54
+ content: msg.content
55
+ });
56
+ }
57
+ else {
58
+ // Handle content blocks
59
+ const converted = this.convertContentBlocksToOpenAI(msg.content, msg.role);
60
+ result.push(...converted);
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ convertContentBlocksToOpenAI(blocks, role) {
66
+ const messages = [];
67
+ // Separate tool results from other content
68
+ const toolResults = blocks.filter(b => b.type === 'tool_result');
69
+ const otherBlocks = blocks.filter(b => b.type !== 'tool_result');
70
+ // Handle assistant messages with tool_use
71
+ if (role === 'assistant') {
72
+ const toolUseBlocks = otherBlocks.filter(b => b.type === 'tool_use');
73
+ const textBlocks = otherBlocks.filter(b => b.type === 'text');
74
+ const textContent = textBlocks.map(b => b.text).join('\n');
75
+ if (toolUseBlocks.length > 0) {
76
+ const toolCalls = toolUseBlocks.map(block => {
77
+ const tu = block;
78
+ return {
79
+ id: tu.id,
80
+ type: 'function',
81
+ function: {
82
+ name: tu.name,
83
+ arguments: JSON.stringify(tu.input)
84
+ }
85
+ };
86
+ });
87
+ messages.push({
88
+ role: 'assistant',
89
+ content: textContent || null,
90
+ tool_calls: toolCalls
91
+ });
92
+ }
93
+ else if (textContent) {
94
+ messages.push({
95
+ role: 'assistant',
96
+ content: textContent
97
+ });
98
+ }
99
+ }
100
+ // Handle tool results (these become separate 'tool' role messages)
101
+ for (const tr of toolResults) {
102
+ const toolResult = tr;
103
+ messages.push({
104
+ role: 'tool',
105
+ content: toolResult.content,
106
+ tool_call_id: toolResult.tool_use_id
107
+ });
108
+ }
109
+ // Handle user text messages
110
+ if (role === 'user' && toolResults.length === 0) {
111
+ const textBlocks = otherBlocks.filter(b => b.type === 'text');
112
+ const textContent = textBlocks.map(b => b.text).join('\n');
113
+ if (textContent) {
114
+ messages.push({
115
+ role: 'user',
116
+ content: textContent
117
+ });
118
+ }
119
+ }
120
+ return messages;
121
+ }
122
+ convertTools(tools) {
123
+ return tools.map(tool => ({
124
+ type: 'function',
125
+ function: {
126
+ name: tool.name,
127
+ description: tool.description,
128
+ parameters: tool.input_schema
129
+ }
130
+ }));
131
+ }
132
+ convertResponse(response) {
133
+ const choice = response.choices[0];
134
+ const content = [];
135
+ // Add text content if present
136
+ if (choice.message.content) {
137
+ content.push({
138
+ type: 'text',
139
+ text: choice.message.content
140
+ });
141
+ }
142
+ // Convert tool calls
143
+ if (choice.message.tool_calls) {
144
+ for (const toolCall of choice.message.tool_calls) {
145
+ content.push({
146
+ type: 'tool_use',
147
+ id: toolCall.id,
148
+ name: toolCall.function.name,
149
+ input: JSON.parse(toolCall.function.arguments)
150
+ });
151
+ }
152
+ }
153
+ // Determine stop reason
154
+ let stopReason = 'end_turn';
155
+ if (choice.finish_reason === 'tool_calls') {
156
+ stopReason = 'tool_use';
157
+ }
158
+ else if (choice.finish_reason === 'length') {
159
+ stopReason = 'max_tokens';
160
+ }
161
+ return {
162
+ content,
163
+ stopReason,
164
+ usage: {
165
+ inputTokens: response.usage.prompt_tokens,
166
+ outputTokens: response.usage.completion_tokens
167
+ }
168
+ };
169
+ }
170
+ }
171
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/llm/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Logger Provider Base Interface
3
+ *
4
+ * Implement this interface to add custom logging.
5
+ */
6
+ export { LogProvider } from '../../types.js';
7
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/providers/logger/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Logger Provider Base Interface
3
+ *
4
+ * Implement this interface to add custom logging.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/providers/logger/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Console Logger Provider
3
+ *
4
+ * Default logger implementation using console.
5
+ */
6
+ import type { LogProvider, ToolResult, AgentResult } from '../../types.js';
7
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
8
+ export interface ConsoleLoggerConfig {
9
+ level?: LogLevel;
10
+ prefix?: string;
11
+ timestamps?: boolean;
12
+ }
13
+ export declare class ConsoleLogger implements LogProvider {
14
+ private level;
15
+ private prefix;
16
+ private timestamps;
17
+ constructor(config?: ConsoleLoggerConfig);
18
+ private formatMessage;
19
+ private shouldLog;
20
+ debug(message: string, data?: unknown): void;
21
+ info(message: string, data?: unknown): void;
22
+ warn(message: string, data?: unknown): void;
23
+ error(message: string, data?: unknown): void;
24
+ onToolCall(toolName: string, params: unknown): void;
25
+ onToolResult(toolName: string, result: ToolResult, durationMs: number): void;
26
+ onIteration(iteration: number, messageCount: number): void;
27
+ onComplete(result: AgentResult): void;
28
+ }
29
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/providers/logger/console.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE1E,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AASD,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,GAAE,mBAAwB;IAM5C,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAIjB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM5C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAInD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAK5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI1D,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;CAMtC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Console Logger Provider
3
+ *
4
+ * Default logger implementation using console.
5
+ */
6
+ const LOG_LEVELS = {
7
+ debug: 0,
8
+ info: 1,
9
+ warn: 2,
10
+ error: 3
11
+ };
12
+ export class ConsoleLogger {
13
+ level;
14
+ prefix;
15
+ timestamps;
16
+ constructor(config = {}) {
17
+ this.level = LOG_LEVELS[config.level || 'info'];
18
+ this.prefix = config.prefix || '[Hive]';
19
+ this.timestamps = config.timestamps ?? true;
20
+ }
21
+ formatMessage(level, message) {
22
+ const parts = [];
23
+ if (this.timestamps) {
24
+ parts.push(new Date().toISOString());
25
+ }
26
+ parts.push(this.prefix);
27
+ parts.push(`[${level.toUpperCase()}]`);
28
+ parts.push(message);
29
+ return parts.join(' ');
30
+ }
31
+ shouldLog(level) {
32
+ return LOG_LEVELS[level] >= this.level;
33
+ }
34
+ debug(message, data) {
35
+ if (this.shouldLog('debug')) {
36
+ console.debug(this.formatMessage('debug', message), data ?? '');
37
+ }
38
+ }
39
+ info(message, data) {
40
+ if (this.shouldLog('info')) {
41
+ console.info(this.formatMessage('info', message), data ?? '');
42
+ }
43
+ }
44
+ warn(message, data) {
45
+ if (this.shouldLog('warn')) {
46
+ console.warn(this.formatMessage('warn', message), data ?? '');
47
+ }
48
+ }
49
+ error(message, data) {
50
+ if (this.shouldLog('error')) {
51
+ console.error(this.formatMessage('error', message), data ?? '');
52
+ }
53
+ }
54
+ onToolCall(toolName, params) {
55
+ this.debug(`Tool call: ${toolName}`, params);
56
+ }
57
+ onToolResult(toolName, result, durationMs) {
58
+ const status = result.success ? 'success' : 'error';
59
+ this.debug(`Tool result: ${toolName} (${status}, ${durationMs}ms)`, result);
60
+ }
61
+ onIteration(iteration, messageCount) {
62
+ this.debug(`Iteration ${iteration}, messages: ${messageCount}`);
63
+ }
64
+ onComplete(result) {
65
+ this.info(`Agent completed: ${result.status}`, {
66
+ toolCalls: result.toolCalls.length,
67
+ usage: result.usage
68
+ });
69
+ }
70
+ }
71
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/providers/logger/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Repository Provider Base Interface
3
+ *
4
+ * Implement this interface to add custom storage (Firestore, Redis, etc.)
5
+ */
6
+ export { RepositoryProvider } from '../../types.js';
7
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/providers/repository/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Repository Provider Base Interface
3
+ *
4
+ * Implement this interface to add custom storage (Firestore, Redis, etc.)
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/providers/repository/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Memory Repository Provider
3
+ *
4
+ * In-memory storage implementation. Useful for testing and development.
5
+ * Data is lost when the process exits.
6
+ */
7
+ import type { RepositoryProvider, Message } from '../../types.js';
8
+ export declare class MemoryRepository implements RepositoryProvider {
9
+ private history;
10
+ private state;
11
+ private cache;
12
+ getHistory(conversationId: string): Promise<Message[]>;
13
+ saveHistory(conversationId: string, messages: Message[]): Promise<void>;
14
+ getState(conversationId: string): Promise<Record<string, unknown> | null>;
15
+ saveState(conversationId: string, state: Record<string, unknown>): Promise<void>;
16
+ getCached(key: string): Promise<unknown | null>;
17
+ setCached(key: string, value: unknown, ttlMs?: number): Promise<void>;
18
+ clear(): void;
19
+ getConversationIds(): string[];
20
+ }
21
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/providers/repository/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAOjE,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,KAAK,CAAkD;IAC/D,OAAO,CAAC,KAAK,CAAqC;IAE5C,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAIzE,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhF,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAY/C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3E,KAAK,IAAI,IAAI;IAMb,kBAAkB,IAAI,MAAM,EAAE;CAG/B"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Memory Repository Provider
3
+ *
4
+ * In-memory storage implementation. Useful for testing and development.
5
+ * Data is lost when the process exits.
6
+ */
7
+ export class MemoryRepository {
8
+ history = new Map();
9
+ state = new Map();
10
+ cache = new Map();
11
+ async getHistory(conversationId) {
12
+ return this.history.get(conversationId) || [];
13
+ }
14
+ async saveHistory(conversationId, messages) {
15
+ this.history.set(conversationId, [...messages]);
16
+ }
17
+ async getState(conversationId) {
18
+ return this.state.get(conversationId) || null;
19
+ }
20
+ async saveState(conversationId, state) {
21
+ this.state.set(conversationId, { ...state });
22
+ }
23
+ async getCached(key) {
24
+ const entry = this.cache.get(key);
25
+ if (!entry)
26
+ return null;
27
+ if (entry.expiresAt && Date.now() > entry.expiresAt) {
28
+ this.cache.delete(key);
29
+ return null;
30
+ }
31
+ return entry.value;
32
+ }
33
+ async setCached(key, value, ttlMs) {
34
+ const entry = { value };
35
+ if (ttlMs) {
36
+ entry.expiresAt = Date.now() + ttlMs;
37
+ }
38
+ this.cache.set(key, entry);
39
+ }
40
+ // Utility methods for testing
41
+ clear() {
42
+ this.history.clear();
43
+ this.state.clear();
44
+ this.cache.clear();
45
+ }
46
+ getConversationIds() {
47
+ return Array.from(this.history.keys());
48
+ }
49
+ }
50
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/providers/repository/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAA2B,IAAI,GAAG,EAAE,CAAA;IAC3C,KAAK,GAAyC,IAAI,GAAG,EAAE,CAAA;IACvD,KAAK,GAA4B,IAAI,GAAG,EAAE,CAAA;IAElD,KAAK,CAAC,UAAU,CAAC,cAAsB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,QAAmB;QAC3D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,cAAsB;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,cAAsB,EAAE,KAA8B;QACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAEvB,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,KAAc,EAAE,KAAc;QACzD,MAAM,KAAK,GAAe,EAAE,KAAK,EAAE,CAAA;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,kBAAkB;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;CACF"}