@just-every/ensemble 0.2.87 → 0.2.88

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 (215) hide show
  1. package/dist/cjs/config/tool_execution.cjs +47 -0
  2. package/dist/cjs/config/tool_execution.d.ts +12 -0
  3. package/dist/cjs/config/tool_execution.d.ts.map +1 -0
  4. package/dist/cjs/config/tool_execution.js.map +1 -0
  5. package/dist/cjs/core/ensemble_embed.cjs +35 -0
  6. package/dist/cjs/core/ensemble_embed.d.ts +3 -0
  7. package/dist/cjs/core/ensemble_embed.d.ts.map +1 -0
  8. package/dist/cjs/core/ensemble_embed.js.map +1 -0
  9. package/dist/cjs/core/ensemble_image.cjs +13 -0
  10. package/dist/cjs/core/ensemble_image.d.ts +3 -0
  11. package/dist/cjs/core/ensemble_image.d.ts.map +1 -0
  12. package/dist/cjs/core/ensemble_image.js.map +1 -0
  13. package/dist/cjs/core/ensemble_listen.cjs +162 -0
  14. package/dist/cjs/core/ensemble_listen.d.ts +5 -0
  15. package/dist/cjs/core/ensemble_listen.d.ts.map +1 -0
  16. package/dist/cjs/core/ensemble_listen.js.map +1 -0
  17. package/dist/cjs/core/ensemble_live.cjs +387 -0
  18. package/dist/cjs/core/ensemble_live.d.ts +14 -0
  19. package/dist/cjs/core/ensemble_live.d.ts.map +1 -0
  20. package/dist/cjs/core/ensemble_live.js.map +1 -0
  21. package/dist/cjs/core/ensemble_request.cjs +409 -0
  22. package/dist/cjs/core/ensemble_request.d.ts +4 -0
  23. package/dist/cjs/core/ensemble_request.d.ts.map +1 -0
  24. package/dist/cjs/core/ensemble_request.js.map +1 -0
  25. package/dist/cjs/core/ensemble_voice.cjs +284 -0
  26. package/dist/cjs/core/ensemble_voice.d.ts +4 -0
  27. package/dist/cjs/core/ensemble_voice.d.ts.map +1 -0
  28. package/dist/cjs/core/ensemble_voice.js.map +1 -0
  29. package/dist/cjs/data/model_data.cjs +1460 -0
  30. package/dist/cjs/data/model_data.d.ts +71 -0
  31. package/dist/cjs/data/model_data.d.ts.map +1 -0
  32. package/dist/cjs/data/model_data.js.map +1 -0
  33. package/dist/cjs/index.cjs +139 -0
  34. package/dist/cjs/index.d.ts +37 -0
  35. package/dist/cjs/index.d.ts.map +1 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/model_providers/base_provider.cjs +46 -0
  38. package/dist/cjs/model_providers/base_provider.d.ts +13 -0
  39. package/dist/cjs/model_providers/base_provider.d.ts.map +1 -0
  40. package/dist/cjs/model_providers/base_provider.js.map +1 -0
  41. package/dist/cjs/model_providers/claude.cjs +782 -0
  42. package/dist/cjs/model_providers/claude.d.ts +12 -0
  43. package/dist/cjs/model_providers/claude.d.ts.map +1 -0
  44. package/dist/cjs/model_providers/claude.js.map +1 -0
  45. package/dist/cjs/model_providers/deepseek.cjs +129 -0
  46. package/dist/cjs/model_providers/deepseek.d.ts +8 -0
  47. package/dist/cjs/model_providers/deepseek.d.ts.map +1 -0
  48. package/dist/cjs/model_providers/deepseek.js.map +1 -0
  49. package/dist/cjs/model_providers/elevenlabs.cjs +140 -0
  50. package/dist/cjs/model_providers/elevenlabs.d.ts +37 -0
  51. package/dist/cjs/model_providers/elevenlabs.d.ts.map +1 -0
  52. package/dist/cjs/model_providers/elevenlabs.js.map +1 -0
  53. package/dist/cjs/model_providers/gemini.cjs +1654 -0
  54. package/dist/cjs/model_providers/gemini.d.ts +22 -0
  55. package/dist/cjs/model_providers/gemini.d.ts.map +1 -0
  56. package/dist/cjs/model_providers/gemini.js.map +1 -0
  57. package/dist/cjs/model_providers/grok.cjs +25 -0
  58. package/dist/cjs/model_providers/grok.d.ts +8 -0
  59. package/dist/cjs/model_providers/grok.d.ts.map +1 -0
  60. package/dist/cjs/model_providers/grok.js.map +1 -0
  61. package/dist/cjs/model_providers/model_provider.cjs +296 -0
  62. package/dist/cjs/model_providers/model_provider.d.ts +10 -0
  63. package/dist/cjs/model_providers/model_provider.d.ts.map +1 -0
  64. package/dist/cjs/model_providers/model_provider.js.map +1 -0
  65. package/dist/cjs/model_providers/openai.cjs +1117 -0
  66. package/dist/cjs/model_providers/openai.d.ts +19 -0
  67. package/dist/cjs/model_providers/openai.d.ts.map +1 -0
  68. package/dist/cjs/model_providers/openai.js.map +1 -0
  69. package/dist/cjs/model_providers/openai_chat.cjs +787 -0
  70. package/dist/cjs/model_providers/openai_chat.d.ts +20 -0
  71. package/dist/cjs/model_providers/openai_chat.d.ts.map +1 -0
  72. package/dist/cjs/model_providers/openai_chat.js.map +1 -0
  73. package/dist/cjs/model_providers/openrouter.cjs +22 -0
  74. package/dist/cjs/model_providers/openrouter.d.ts +6 -0
  75. package/dist/cjs/model_providers/openrouter.d.ts.map +1 -0
  76. package/dist/cjs/model_providers/openrouter.js.map +1 -0
  77. package/dist/cjs/model_providers/test_provider.cjs +236 -0
  78. package/dist/cjs/model_providers/test_provider.d.ts +29 -0
  79. package/dist/cjs/model_providers/test_provider.d.ts.map +1 -0
  80. package/dist/cjs/model_providers/test_provider.js.map +1 -0
  81. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  82. package/dist/cjs/types/api_types.cjs +3 -0
  83. package/dist/cjs/types/api_types.d.ts +249 -0
  84. package/dist/cjs/types/api_types.d.ts.map +1 -0
  85. package/dist/cjs/types/api_types.js.map +1 -0
  86. package/dist/cjs/types/errors.cjs +76 -0
  87. package/dist/cjs/types/errors.d.ts +34 -0
  88. package/dist/cjs/types/errors.d.ts.map +1 -0
  89. package/dist/cjs/types/errors.js.map +1 -0
  90. package/dist/cjs/types/types.cjs +3 -0
  91. package/dist/cjs/types/types.d.ts +638 -0
  92. package/dist/cjs/types/types.d.ts.map +1 -0
  93. package/dist/cjs/types/types.js.map +1 -0
  94. package/dist/cjs/utils/agent.cjs +384 -0
  95. package/dist/cjs/utils/agent.d.ts +48 -0
  96. package/dist/cjs/utils/agent.d.ts.map +1 -0
  97. package/dist/cjs/utils/agent.js.map +1 -0
  98. package/dist/cjs/utils/audio_stream_player.cjs +342 -0
  99. package/dist/cjs/utils/audio_stream_player.d.ts +37 -0
  100. package/dist/cjs/utils/audio_stream_player.d.ts.map +1 -0
  101. package/dist/cjs/utils/audio_stream_player.js.map +1 -0
  102. package/dist/cjs/utils/citation_tracker.cjs +25 -0
  103. package/dist/cjs/utils/citation_tracker.d.ts +12 -0
  104. package/dist/cjs/utils/citation_tracker.d.ts.map +1 -0
  105. package/dist/cjs/utils/citation_tracker.js.map +1 -0
  106. package/dist/cjs/utils/config_manager.cjs +105 -0
  107. package/dist/cjs/utils/config_manager.d.ts +31 -0
  108. package/dist/cjs/utils/config_manager.d.ts.map +1 -0
  109. package/dist/cjs/utils/config_manager.js.map +1 -0
  110. package/dist/cjs/utils/cost_tracker.cjs +226 -0
  111. package/dist/cjs/utils/cost_tracker.d.ts +33 -0
  112. package/dist/cjs/utils/cost_tracker.d.ts.map +1 -0
  113. package/dist/cjs/utils/cost_tracker.js.map +1 -0
  114. package/dist/cjs/utils/create_tool_function.cjs +182 -0
  115. package/dist/cjs/utils/create_tool_function.d.ts +3 -0
  116. package/dist/cjs/utils/create_tool_function.d.ts.map +1 -0
  117. package/dist/cjs/utils/create_tool_function.js.map +1 -0
  118. package/dist/cjs/utils/delta_buffer.cjs +65 -0
  119. package/dist/cjs/utils/delta_buffer.d.ts +14 -0
  120. package/dist/cjs/utils/delta_buffer.d.ts.map +1 -0
  121. package/dist/cjs/utils/delta_buffer.js.map +1 -0
  122. package/dist/cjs/utils/ensemble_result.cjs +167 -0
  123. package/dist/cjs/utils/ensemble_result.d.ts +33 -0
  124. package/dist/cjs/utils/ensemble_result.d.ts.map +1 -0
  125. package/dist/cjs/utils/ensemble_result.js.map +1 -0
  126. package/dist/cjs/utils/event_controller.cjs +59 -0
  127. package/dist/cjs/utils/event_controller.d.ts +13 -0
  128. package/dist/cjs/utils/event_controller.d.ts.map +1 -0
  129. package/dist/cjs/utils/event_controller.js.map +1 -0
  130. package/dist/cjs/utils/external_models.cjs +42 -0
  131. package/dist/cjs/utils/external_models.d.ts +9 -0
  132. package/dist/cjs/utils/external_models.d.ts.map +1 -0
  133. package/dist/cjs/utils/external_models.js.map +1 -0
  134. package/dist/cjs/utils/image_to_text.cjs +58 -0
  135. package/dist/cjs/utils/image_to_text.d.ts +3 -0
  136. package/dist/cjs/utils/image_to_text.d.ts.map +1 -0
  137. package/dist/cjs/utils/image_to_text.js.map +1 -0
  138. package/dist/cjs/utils/image_utils.cjs +168 -0
  139. package/dist/cjs/utils/image_utils.d.ts +18 -0
  140. package/dist/cjs/utils/image_utils.d.ts.map +1 -0
  141. package/dist/cjs/utils/image_utils.js.map +1 -0
  142. package/dist/cjs/utils/image_validation.cjs +31 -0
  143. package/dist/cjs/utils/image_validation.d.ts +3 -0
  144. package/dist/cjs/utils/image_validation.d.ts.map +1 -0
  145. package/dist/cjs/utils/image_validation.js.map +1 -0
  146. package/dist/cjs/utils/llm_logger.cjs +31 -0
  147. package/dist/cjs/utils/llm_logger.d.ts +8 -0
  148. package/dist/cjs/utils/llm_logger.d.ts.map +1 -0
  149. package/dist/cjs/utils/llm_logger.js.map +1 -0
  150. package/dist/cjs/utils/message_history.cjs +560 -0
  151. package/dist/cjs/utils/message_history.d.ts +65 -0
  152. package/dist/cjs/utils/message_history.d.ts.map +1 -0
  153. package/dist/cjs/utils/message_history.js.map +1 -0
  154. package/dist/cjs/utils/model_class_config.cjs +105 -0
  155. package/dist/cjs/utils/model_class_config.d.ts +12 -0
  156. package/dist/cjs/utils/model_class_config.d.ts.map +1 -0
  157. package/dist/cjs/utils/model_class_config.js.map +1 -0
  158. package/dist/cjs/utils/pause_controller.cjs +90 -0
  159. package/dist/cjs/utils/pause_controller.d.ts +14 -0
  160. package/dist/cjs/utils/pause_controller.d.ts.map +1 -0
  161. package/dist/cjs/utils/pause_controller.js.map +1 -0
  162. package/dist/cjs/utils/quota_tracker.cjs +311 -0
  163. package/dist/cjs/utils/quota_tracker.d.ts +22 -0
  164. package/dist/cjs/utils/quota_tracker.d.ts.map +1 -0
  165. package/dist/cjs/utils/quota_tracker.js.map +1 -0
  166. package/dist/cjs/utils/retry_handler.cjs +131 -0
  167. package/dist/cjs/utils/retry_handler.d.ts +15 -0
  168. package/dist/cjs/utils/retry_handler.d.ts.map +1 -0
  169. package/dist/cjs/utils/retry_handler.js.map +1 -0
  170. package/dist/cjs/utils/running_tool_tracker.cjs +133 -0
  171. package/dist/cjs/utils/running_tool_tracker.d.ts +42 -0
  172. package/dist/cjs/utils/running_tool_tracker.d.ts.map +1 -0
  173. package/dist/cjs/utils/running_tool_tracker.js.map +1 -0
  174. package/dist/cjs/utils/sequential_queue.cjs +73 -0
  175. package/dist/cjs/utils/sequential_queue.d.ts +13 -0
  176. package/dist/cjs/utils/sequential_queue.d.ts.map +1 -0
  177. package/dist/cjs/utils/sequential_queue.js.map +1 -0
  178. package/dist/cjs/utils/stream_handler.cjs +73 -0
  179. package/dist/cjs/utils/stream_handler.d.ts +16 -0
  180. package/dist/cjs/utils/stream_handler.d.ts.map +1 -0
  181. package/dist/cjs/utils/stream_handler.js.map +1 -0
  182. package/dist/cjs/utils/summary_utils.cjs +211 -0
  183. package/dist/cjs/utils/summary_utils.d.ts +7 -0
  184. package/dist/cjs/utils/summary_utils.d.ts.map +1 -0
  185. package/dist/cjs/utils/summary_utils.js.map +1 -0
  186. package/dist/cjs/utils/test_utils.cjs +212 -0
  187. package/dist/cjs/utils/test_utils.d.ts +58 -0
  188. package/dist/cjs/utils/test_utils.d.ts.map +1 -0
  189. package/dist/cjs/utils/test_utils.js.map +1 -0
  190. package/dist/cjs/utils/tool_execution_manager.cjs +139 -0
  191. package/dist/cjs/utils/tool_execution_manager.d.ts +7 -0
  192. package/dist/cjs/utils/tool_execution_manager.d.ts.map +1 -0
  193. package/dist/cjs/utils/tool_execution_manager.js.map +1 -0
  194. package/dist/cjs/utils/tool_parameter_utils.cjs +168 -0
  195. package/dist/cjs/utils/tool_parameter_utils.d.ts +5 -0
  196. package/dist/cjs/utils/tool_parameter_utils.d.ts.map +1 -0
  197. package/dist/cjs/utils/tool_parameter_utils.js.map +1 -0
  198. package/dist/cjs/utils/tool_result_processor.cjs +363 -0
  199. package/dist/cjs/utils/tool_result_processor.d.ts +11 -0
  200. package/dist/cjs/utils/tool_result_processor.d.ts.map +1 -0
  201. package/dist/cjs/utils/tool_result_processor.js.map +1 -0
  202. package/dist/cjs/utils/verification.cjs +59 -0
  203. package/dist/cjs/utils/verification.d.ts +7 -0
  204. package/dist/cjs/utils/verification.d.ts.map +1 -0
  205. package/dist/cjs/utils/verification.js.map +1 -0
  206. package/dist/tsconfig.tsbuildinfo +1 -1
  207. package/dist/utils/audio_stream_player.d.ts +2 -0
  208. package/dist/utils/audio_stream_player.d.ts.map +1 -1
  209. package/dist/utils/audio_stream_player.js +83 -1
  210. package/dist/utils/audio_stream_player.js.map +1 -1
  211. package/dist/utils/cost_tracker.d.ts +7 -0
  212. package/dist/utils/cost_tracker.d.ts.map +1 -1
  213. package/dist/utils/cost_tracker.js +29 -0
  214. package/dist/utils/cost_tracker.js.map +1 -1
  215. package/package.json +18 -3
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidBase64 = isValidBase64;
4
+ exports.detectImageType = detectImageType;
5
+ function isValidBase64(str) {
6
+ try {
7
+ return btoa(atob(str)) === str;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ function detectImageType(base64Data) {
14
+ try {
15
+ const decoded = atob(base64Data.slice(0, 16));
16
+ const bytes = new Uint8Array(decoded.split('').map(char => char.charCodeAt(0)));
17
+ if (bytes[0] === 0xff && bytes[1] === 0xd8)
18
+ return 'image/jpeg';
19
+ if (bytes[0] === 0x89 && bytes[1] === 0x50)
20
+ return 'image/png';
21
+ if (bytes[0] === 0x47 && bytes[1] === 0x49)
22
+ return 'image/gif';
23
+ if (bytes[0] === 0x52 && bytes[1] === 0x49)
24
+ return 'image/webp';
25
+ return null;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=image_validation.js.map
@@ -0,0 +1,3 @@
1
+ export declare function isValidBase64(str: string): boolean;
2
+ export declare function detectImageType(base64Data: string): string | null;
3
+ //# sourceMappingURL=image_validation.d.ts.map
@@ -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,CAejE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image_validation.js","sourceRoot":"","sources":["../../../utils/image_validation.ts"],"names":[],"mappings":";;AAOA,sCAMC;AAKD,0CAeC;AA1BD,SAAgB,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,SAAgB,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,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGhF,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"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setEnsembleLogger = setEnsembleLogger;
4
+ exports.getEnsembleLogger = getEnsembleLogger;
5
+ exports.log_llm_request = log_llm_request;
6
+ exports.log_llm_response = log_llm_response;
7
+ exports.log_llm_error = log_llm_error;
8
+ let globalLogger = null;
9
+ function setEnsembleLogger(logger) {
10
+ globalLogger = logger;
11
+ }
12
+ function getEnsembleLogger() {
13
+ return globalLogger;
14
+ }
15
+ function log_llm_request(agentId, providerName, model, requestData, timestamp) {
16
+ if (globalLogger) {
17
+ return globalLogger.log_llm_request(agentId, providerName, model, requestData, timestamp);
18
+ }
19
+ return '';
20
+ }
21
+ function log_llm_response(requestId, responseData, timestamp) {
22
+ if (globalLogger) {
23
+ globalLogger.log_llm_response(requestId, responseData, timestamp);
24
+ }
25
+ }
26
+ function log_llm_error(requestId, errorData, timestamp) {
27
+ if (globalLogger) {
28
+ globalLogger.log_llm_error(requestId, errorData, timestamp);
29
+ }
30
+ }
31
+ //# sourceMappingURL=llm_logger.js.map
@@ -0,0 +1,8 @@
1
+ import { EnsembleLogger } from "../types/types.cjs";
2
+ export type { EnsembleLogger };
3
+ export declare function setEnsembleLogger(logger: EnsembleLogger | null): void;
4
+ export declare function getEnsembleLogger(): EnsembleLogger | null;
5
+ export declare function log_llm_request(agentId: string, providerName: string, model: string, requestData: unknown, timestamp?: Date): string;
6
+ export declare function log_llm_response(requestId: string | undefined, responseData: unknown, timestamp?: Date): void;
7
+ export declare function log_llm_error(requestId: string | undefined, errorData: unknown, timestamp?: Date): void;
8
+ //# sourceMappingURL=llm_logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm_logger.d.ts","sourceRoot":"","sources":["../../../utils/llm_logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,YAAY,EAAE,cAAc,EAAE,CAAC;AAI/B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,EACpB,SAAS,CAAC,EAAE,IAAI,GACjB,MAAM,CAKR;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAI7G;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAIvG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm_logger.js","sourceRoot":"","sources":["../../../utils/llm_logger.ts"],"names":[],"mappings":";;AAOA,8CAEC;AAED,8CAEC;AAED,0CAWC;AAED,4CAIC;AAED,sCAIC;AAjCD,IAAI,YAAY,GAA0B,IAAI,CAAC;AAE/C,SAAgB,iBAAiB,CAAC,MAA6B;IAC3D,YAAY,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED,SAAgB,iBAAiB;IAC7B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAgB,eAAe,CAC3B,OAAe,EACf,YAAoB,EACpB,KAAa,EACb,WAAoB,EACpB,SAAgB;IAEhB,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,YAAY,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAA6B,EAAE,YAAqB,EAAE,SAAgB;IACnG,IAAI,YAAY,EAAE,CAAC;QACf,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,SAA6B,EAAE,SAAkB,EAAE,SAAgB;IAC7F,IAAI,YAAY,EAAE,CAAC;QACf,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
@@ -0,0 +1,560 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MessageHistory = void 0;
37
+ class MessageHistory {
38
+ messages;
39
+ options;
40
+ estimatedTokens = 0;
41
+ microLog = [];
42
+ extractedInfo = {
43
+ entities: new Set(),
44
+ decisions: [],
45
+ todos: [],
46
+ tools: [],
47
+ };
48
+ constructor(initialMessages = [], options = {}) {
49
+ this.messages = initialMessages.map(msg => ({ ...msg }));
50
+ this.options = {
51
+ maxMessages: options.maxMessages,
52
+ maxTokens: options.maxTokens,
53
+ preserveSystemMessages: options.preserveSystemMessages ?? true,
54
+ compactToolCalls: options.compactToolCalls ?? true,
55
+ compactionThreshold: options.compactionThreshold ?? 0.7,
56
+ };
57
+ const firstSystemMsg = this.messages.find(m => m.type === 'message' && m.role === 'system');
58
+ if (firstSystemMsg) {
59
+ firstSystemMsg.pinned = true;
60
+ }
61
+ this.updateTokenEstimate();
62
+ }
63
+ async add(message) {
64
+ const pinnableMsg = message;
65
+ this.messages.push(pinnableMsg);
66
+ this.addToMicroLog(pinnableMsg);
67
+ this.extractInformation(pinnableMsg);
68
+ this.updateTokenEstimate();
69
+ this.trim();
70
+ }
71
+ async getMessages(model) {
72
+ await this.checkAndCompact(model);
73
+ this.ensureToolResultSequence();
74
+ return [...this.messages];
75
+ }
76
+ pinMessage(index) {
77
+ if (index >= 0 && index < this.messages.length) {
78
+ this.messages[index].pinned = true;
79
+ }
80
+ }
81
+ getMicroLog() {
82
+ return [...this.microLog];
83
+ }
84
+ getExtractedInfo() {
85
+ return {
86
+ entities: new Set(this.extractedInfo.entities),
87
+ decisions: [...this.extractedInfo.decisions],
88
+ todos: [...this.extractedInfo.todos],
89
+ tools: [...this.extractedInfo.tools],
90
+ };
91
+ }
92
+ addToMicroLog(msg) {
93
+ if (msg.type === 'message') {
94
+ const content = this.getMessageContent(msg);
95
+ const summary = this.createMicroLogSummary(msg.role, content);
96
+ this.microLog.push({
97
+ timestamp: msg.timestamp || Date.now(),
98
+ role: msg.role,
99
+ summary,
100
+ });
101
+ }
102
+ else if (msg.type === 'function_call') {
103
+ this.microLog.push({
104
+ timestamp: msg.timestamp || Date.now(),
105
+ role: 'tool',
106
+ summary: `Called ${msg.name}()`,
107
+ });
108
+ }
109
+ }
110
+ createMicroLogSummary(role, content) {
111
+ const firstLine = content.split('\n')[0].trim();
112
+ const maxLength = 80;
113
+ if (firstLine.length <= maxLength) {
114
+ return firstLine;
115
+ }
116
+ return firstLine.substring(0, maxLength - 3) + '...';
117
+ }
118
+ extractInformation(msg) {
119
+ if (msg.type === 'message') {
120
+ const content = this.getMessageContent(msg);
121
+ this.extractEntities(content);
122
+ if (msg.role === 'assistant') {
123
+ this.extractDecisions(content);
124
+ this.extractTodos(content);
125
+ }
126
+ }
127
+ else if (msg.type === 'function_call') {
128
+ const existingTool = this.extractedInfo.tools.find(t => t.name === msg.name);
129
+ if (!existingTool) {
130
+ this.extractedInfo.tools.push({
131
+ name: msg.name,
132
+ purpose: this.inferToolPurpose(msg.name, msg.arguments),
133
+ });
134
+ }
135
+ }
136
+ }
137
+ extractEntities(content) {
138
+ const filePathRegex = /(?:\/[\w.-]+)+(?:\.\w+)?/g;
139
+ const filePaths = content.match(filePathRegex) || [];
140
+ filePaths.forEach(path => this.extractedInfo.entities.add(path));
141
+ const urlRegex = /https?:\/\/[^\s]+/g;
142
+ const urls = content.match(urlRegex) || [];
143
+ urls.forEach(url => this.extractedInfo.entities.add(url));
144
+ const quotedRegex = /["']([^"']+)["']/g;
145
+ let match;
146
+ while ((match = quotedRegex.exec(content)) !== null) {
147
+ if (match[1].length > 3 && match[1].length < 50) {
148
+ this.extractedInfo.entities.add(match[1]);
149
+ }
150
+ }
151
+ }
152
+ extractDecisions(content) {
153
+ const decisionPatterns = [
154
+ /I (?:will|'ll|am going to) ([^.!?]+)[.!?]/gi,
155
+ /(?:Decided|Choosing|Selected) to ([^.!?]+)[.!?]/gi,
156
+ /The (?:solution|approach|strategy) is to ([^.!?]+)[.!?]/gi,
157
+ ];
158
+ for (const pattern of decisionPatterns) {
159
+ pattern.lastIndex = 0;
160
+ let match;
161
+ while ((match = pattern.exec(content)) !== null) {
162
+ const decision = match[1].trim();
163
+ if (decision.length > 10 && decision.length < 200) {
164
+ this.extractedInfo.decisions.push(decision);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ extractTodos(content) {
170
+ const todoPatterns = [
171
+ /(?:TODO|FIXME|NOTE):\s*([^.!?\n]+)/g,
172
+ /(?:Need to|Should|Must) ([^.!?]+)[.!?]/g,
173
+ /(?:Next step|Then).*?(?:is to|will be) ([^.!?]+)[.!?]/g,
174
+ ];
175
+ for (const pattern of todoPatterns) {
176
+ let match;
177
+ while ((match = pattern.exec(content)) !== null) {
178
+ const todo = match[1].trim();
179
+ if (todo.length > 10 && todo.length < 200) {
180
+ this.extractedInfo.todos.push(todo);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ inferToolPurpose(toolName, args) {
186
+ try {
187
+ JSON.parse(args);
188
+ if (toolName.includes('read') || toolName.includes('get')) {
189
+ return 'Information retrieval';
190
+ }
191
+ else if (toolName.includes('write') || toolName.includes('create')) {
192
+ return 'Content creation';
193
+ }
194
+ else if (toolName.includes('search') || toolName.includes('find')) {
195
+ return 'Search operation';
196
+ }
197
+ else if (toolName.includes('execute') || toolName.includes('run')) {
198
+ return 'Code execution';
199
+ }
200
+ return 'General operation';
201
+ }
202
+ catch {
203
+ return 'General operation';
204
+ }
205
+ }
206
+ getMessageContent(msg) {
207
+ if (msg.type === 'message' && 'content' in msg) {
208
+ if (typeof msg.content === 'string') {
209
+ return msg.content;
210
+ }
211
+ else if (Array.isArray(msg.content)) {
212
+ return msg.content.map(item => ('text' in item ? item.text : '')).join(' ');
213
+ }
214
+ }
215
+ return '';
216
+ }
217
+ count() {
218
+ return this.messages.length;
219
+ }
220
+ clear() {
221
+ const systemMessages = this.options.preserveSystemMessages
222
+ ? this.messages.filter(m => m.type === 'message' && m.role === 'system')
223
+ : [];
224
+ this.messages = systemMessages;
225
+ }
226
+ trim() {
227
+ if (this.options.maxMessages && this.messages.length > this.options.maxMessages) {
228
+ const systemMessages = this.options.preserveSystemMessages
229
+ ? this.messages.filter(m => m.type === 'message' && m.role === 'system')
230
+ : [];
231
+ const nonSystemMessages = this.messages.filter(m => !(m.type === 'message' && m.role === 'system'));
232
+ const trimmedMessages = nonSystemMessages.slice(-this.options.maxMessages);
233
+ this.messages = [...systemMessages, ...trimmedMessages];
234
+ }
235
+ if (this.options.compactToolCalls) {
236
+ this.compactToolCalls();
237
+ }
238
+ }
239
+ compactToolCalls() {
240
+ const compacted = [];
241
+ let i = 0;
242
+ while (i < this.messages.length) {
243
+ const msg = this.messages[i];
244
+ if (msg.type === 'message' && msg.role === 'assistant') {
245
+ compacted.push(msg);
246
+ i++;
247
+ const toolCalls = [];
248
+ while (i < this.messages.length &&
249
+ (this.messages[i].type === 'function_call' || this.messages[i].type === 'function_call_output')) {
250
+ toolCalls.push(this.messages[i]);
251
+ i++;
252
+ }
253
+ compacted.push(...toolCalls);
254
+ }
255
+ else {
256
+ compacted.push(msg);
257
+ i++;
258
+ }
259
+ }
260
+ this.messages = compacted;
261
+ }
262
+ getSummary() {
263
+ const counts = {
264
+ user: 0,
265
+ assistant: 0,
266
+ system: 0,
267
+ toolCalls: 0,
268
+ toolOutputs: 0,
269
+ };
270
+ for (const msg of this.messages) {
271
+ if (msg.type === 'message' && msg.role) {
272
+ const role = msg.role;
273
+ if (role in counts) {
274
+ counts[role]++;
275
+ }
276
+ }
277
+ else if (msg.type === 'function_call') {
278
+ counts.toolCalls++;
279
+ }
280
+ else if (msg.type === 'function_call_output') {
281
+ counts.toolOutputs++;
282
+ }
283
+ }
284
+ return `Messages: ${this.messages.length} (User: ${counts.user}, Assistant: ${counts.assistant}, System: ${counts.system}, Tools: ${counts.toolCalls}/${counts.toolOutputs})`;
285
+ }
286
+ findLast(predicate) {
287
+ for (let i = this.messages.length - 1; i >= 0; i--) {
288
+ if (predicate(this.messages[i])) {
289
+ return this.messages[i];
290
+ }
291
+ }
292
+ return undefined;
293
+ }
294
+ lastAssistantHadToolCalls() {
295
+ let foundAssistant = false;
296
+ for (let i = this.messages.length - 1; i >= 0; i--) {
297
+ const msg = this.messages[i];
298
+ if (msg.type === 'function_call' && !foundAssistant) {
299
+ for (let j = i - 1; j >= 0; j--) {
300
+ const msg = this.messages[j];
301
+ if (msg.type === 'message' && msg.role === 'assistant') {
302
+ return true;
303
+ }
304
+ if (msg.type === 'message' && msg.role === 'user') {
305
+ break;
306
+ }
307
+ }
308
+ }
309
+ if (msg.type === 'message' && msg.role === 'assistant') {
310
+ foundAssistant = true;
311
+ }
312
+ }
313
+ return false;
314
+ }
315
+ estimateMessageTokens(msg) {
316
+ let charCount = 0;
317
+ if (msg.type === 'message' && 'content' in msg) {
318
+ if (typeof msg.content === 'string') {
319
+ charCount += msg.content.length;
320
+ }
321
+ else if (Array.isArray(msg.content)) {
322
+ for (const item of msg.content) {
323
+ if ('text' in item) {
324
+ charCount += item.text.length;
325
+ }
326
+ }
327
+ }
328
+ }
329
+ else if (msg.type === 'function_call') {
330
+ charCount += msg.name.length + msg.arguments.length;
331
+ }
332
+ else if (msg.type === 'function_call_output') {
333
+ charCount += msg.output.length;
334
+ }
335
+ return Math.ceil(charCount / 4);
336
+ }
337
+ updateTokenEstimate() {
338
+ this.estimatedTokens = 0;
339
+ for (const msg of this.messages) {
340
+ this.estimatedTokens += this.estimateMessageTokens(msg);
341
+ }
342
+ }
343
+ async checkAndCompact(modelId) {
344
+ if (!modelId || this.options.compactionThreshold === 0) {
345
+ return;
346
+ }
347
+ const { findModel } = await Promise.resolve().then(() => __importStar(require("../data/model_data.cjs")));
348
+ const model = findModel(modelId);
349
+ if (!model || !model.features.context_length) {
350
+ return;
351
+ }
352
+ const contextLength = model.features.context_length;
353
+ const threshold = contextLength * this.options.compactionThreshold;
354
+ if (this.estimatedTokens > threshold) {
355
+ await this.performCompaction(contextLength);
356
+ }
357
+ }
358
+ async performCompaction(contextLength) {
359
+ await this.compactHistoryHybrid(contextLength);
360
+ }
361
+ async compactHistoryHybrid(contextLength) {
362
+ const pinnedMessages = this.messages.filter(m => m.pinned);
363
+ const unpinnedMessages = this.messages.filter(m => !m.pinned);
364
+ if (unpinnedMessages.length < 4) {
365
+ return;
366
+ }
367
+ const targetTokens = contextLength * 0.7;
368
+ let currentTokens = 0;
369
+ for (const msg of pinnedMessages) {
370
+ currentTokens += this.estimateMessageTokens(msg);
371
+ }
372
+ const remainingBudget = targetTokens - currentTokens;
373
+ const tailBudget = remainingBudget * 0.3;
374
+ let tailTokens = 0;
375
+ let tailStartIndex = unpinnedMessages.length;
376
+ for (let i = unpinnedMessages.length - 1; i >= 0; i--) {
377
+ const msgTokens = this.estimateMessageTokens(unpinnedMessages[i]);
378
+ if (tailTokens + msgTokens > tailBudget) {
379
+ tailStartIndex = i + 1;
380
+ break;
381
+ }
382
+ tailTokens += msgTokens;
383
+ }
384
+ tailStartIndex = Math.max(0, Math.min(tailStartIndex, unpinnedMessages.length - 2));
385
+ const messagesToCompact = unpinnedMessages.slice(0, tailStartIndex);
386
+ const tailMessages = unpinnedMessages.slice(tailStartIndex);
387
+ if (messagesToCompact.length === 0) {
388
+ return;
389
+ }
390
+ const hybridSummary = await this.createHybridSummary(messagesToCompact);
391
+ const summaryMessage = {
392
+ type: 'message',
393
+ role: 'system',
394
+ content: hybridSummary,
395
+ pinned: false,
396
+ };
397
+ this.messages = [...pinnedMessages, summaryMessage, ...tailMessages];
398
+ const recentTimestamp = tailMessages[0]?.timestamp || Date.now() - 3600000;
399
+ this.microLog = this.microLog.filter(entry => (entry.timestamp || 0) >= recentTimestamp);
400
+ this.updateTokenEstimate();
401
+ console.log(`MessageHistory: Compacted ${messagesToCompact.length} messages using hybrid approach. New token estimate: ${this.estimatedTokens}`);
402
+ }
403
+ async createHybridSummary(messages) {
404
+ const sections = [];
405
+ const microLogText = this.createMicroLogSection(messages);
406
+ if (microLogText) {
407
+ sections.push(`## Conversation Flow\n${microLogText}`);
408
+ }
409
+ const structuredInfo = this.createStructuredInfoSection();
410
+ if (structuredInfo) {
411
+ sections.push(`## Key Information\n${structuredInfo}`);
412
+ }
413
+ const detailedSummary = await this.createDetailedSummary(messages);
414
+ if (detailedSummary) {
415
+ sections.push(`## Detailed Summary\n${detailedSummary}`);
416
+ }
417
+ return `[Previous Conversation Summary]\n\n${sections.join('\n\n')}`;
418
+ }
419
+ createMicroLogSection(messages) {
420
+ const startTime = messages[0]?.timestamp || 0;
421
+ const endTime = messages[messages.length - 1]?.timestamp || Date.now();
422
+ const relevantLogs = this.microLog.filter(entry => {
423
+ const timestamp = entry.timestamp || 0;
424
+ return timestamp >= startTime && timestamp <= endTime;
425
+ });
426
+ if (relevantLogs.length === 0) {
427
+ return '';
428
+ }
429
+ return relevantLogs.map(entry => `- ${entry.role}: ${entry.summary}`).join('\n');
430
+ }
431
+ createStructuredInfoSection() {
432
+ const parts = [];
433
+ if (this.extractedInfo.entities.size > 0) {
434
+ const entities = Array.from(this.extractedInfo.entities).slice(-20);
435
+ parts.push(`### Entities\n${entities.map(e => `- ${e}`).join('\n')}`);
436
+ }
437
+ if (this.extractedInfo.decisions.length > 0) {
438
+ const decisions = this.extractedInfo.decisions.slice(-10);
439
+ parts.push(`### Decisions\n${decisions.map(d => `- ${d}`).join('\n')}`);
440
+ }
441
+ if (this.extractedInfo.todos.length > 0) {
442
+ const todos = this.extractedInfo.todos.slice(-10);
443
+ parts.push(`### Pending Tasks\n${todos.map(t => `- ${t}`).join('\n')}`);
444
+ }
445
+ if (this.extractedInfo.tools.length > 0) {
446
+ parts.push(`### Tools Used\n${this.extractedInfo.tools.map(t => `- ${t.name}: ${t.purpose}`).join('\n')}`);
447
+ }
448
+ return parts.join('\n\n');
449
+ }
450
+ async createDetailedSummary(messages) {
451
+ let conversationText = '';
452
+ let tokenCount = 0;
453
+ const maxTokensForSummary = 2000;
454
+ for (const msg of messages) {
455
+ if (msg.type === 'message') {
456
+ const content = this.getMessageContent(msg);
457
+ const preview = content.substring(0, 500);
458
+ const msgText = `${msg.role.toUpperCase()}: ${preview}${content.length > 500 ? '...' : ''}\n\n`;
459
+ const msgTokens = this.estimateTextTokens(msgText);
460
+ if (tokenCount + msgTokens > maxTokensForSummary) {
461
+ break;
462
+ }
463
+ conversationText += msgText;
464
+ tokenCount += msgTokens;
465
+ }
466
+ else if (msg.type === 'function_call') {
467
+ const msgText = `TOOL: ${msg.name}()\n`;
468
+ conversationText += msgText;
469
+ tokenCount += this.estimateTextTokens(msgText);
470
+ }
471
+ }
472
+ if (!conversationText.trim()) {
473
+ return '';
474
+ }
475
+ try {
476
+ const { createSummary } = await Promise.resolve().then(() => __importStar(require("./tool_result_processor.cjs")));
477
+ const summaryPrompt = `Create a concise summary of this conversation, focusing on:
478
+ 1. Main objectives and goals
479
+ 2. Key decisions and outcomes
480
+ 3. Current status and context
481
+ 4. Any unresolved issues or next steps
482
+
483
+ Keep the summary focused and relevant for continuing the conversation.`;
484
+ return await createSummary(conversationText, summaryPrompt);
485
+ }
486
+ catch (error) {
487
+ console.error('Error creating AI summary:', error);
488
+ return '';
489
+ }
490
+ }
491
+ estimateTextTokens(text) {
492
+ return Math.ceil(text.length / 4);
493
+ }
494
+ ensureToolResultSequence() {
495
+ const reorderedMessages = [];
496
+ let i = 0;
497
+ while (i < this.messages.length) {
498
+ const currentMsg = this.messages[i];
499
+ if (currentMsg.type === 'function_call') {
500
+ reorderedMessages.push(currentMsg);
501
+ const callId = currentMsg.call_id;
502
+ let foundOutput = false;
503
+ for (let j = i + 1; j < this.messages.length; j++) {
504
+ const potentialOutput = this.messages[j];
505
+ if (potentialOutput.type === 'function_call_output' && potentialOutput.call_id === callId) {
506
+ reorderedMessages.push(potentialOutput);
507
+ this.messages.splice(j, 1);
508
+ foundOutput = true;
509
+ break;
510
+ }
511
+ }
512
+ if (!foundOutput) {
513
+ console.warn(`[MessageHistory] No matching output found for tool call ${callId}. Creating error output.`);
514
+ const errorOutput = {
515
+ type: 'function_call_output',
516
+ call_id: callId,
517
+ name: currentMsg.name,
518
+ output: JSON.stringify({
519
+ error: 'Tool call did not complete or output was missing.',
520
+ }),
521
+ status: 'incomplete',
522
+ model: currentMsg.model,
523
+ };
524
+ reorderedMessages.push(errorOutput);
525
+ }
526
+ i++;
527
+ }
528
+ else if (currentMsg.type === 'function_call_output') {
529
+ const callId = currentMsg.call_id;
530
+ let hasMatchingCall = false;
531
+ for (let j = reorderedMessages.length - 1; j >= 0; j--) {
532
+ const msg = reorderedMessages[j];
533
+ if (msg.type === 'function_call' && msg.call_id === callId) {
534
+ hasMatchingCall = true;
535
+ break;
536
+ }
537
+ }
538
+ if (!hasMatchingCall) {
539
+ console.warn(`[MessageHistory] Found orphaned function_call_output with call_id ${callId}. Converting to regular message.`);
540
+ const regularMessage = {
541
+ type: 'message',
542
+ role: 'user',
543
+ content: `Tool result (${currentMsg.name || 'unknown_tool'}): ${currentMsg.output}`,
544
+ status: 'completed',
545
+ model: currentMsg.model,
546
+ };
547
+ reorderedMessages.push(regularMessage);
548
+ }
549
+ i++;
550
+ }
551
+ else {
552
+ reorderedMessages.push(currentMsg);
553
+ i++;
554
+ }
555
+ }
556
+ this.messages = reorderedMessages;
557
+ }
558
+ }
559
+ exports.MessageHistory = MessageHistory;
560
+ //# sourceMappingURL=message_history.js.map