@cloudwarriors-ai/rlm 0.1.5

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 (220) hide show
  1. package/README.md +208 -0
  2. package/dist/application/index.d.ts +4 -0
  3. package/dist/application/index.d.ts.map +1 -0
  4. package/dist/application/index.js +4 -0
  5. package/dist/application/index.js.map +1 -0
  6. package/dist/application/query-handler.d.ts +49 -0
  7. package/dist/application/query-handler.d.ts.map +1 -0
  8. package/dist/application/query-handler.js +311 -0
  9. package/dist/application/query-handler.js.map +1 -0
  10. package/dist/application/rlm-service.d.ts +68 -0
  11. package/dist/application/rlm-service.d.ts.map +1 -0
  12. package/dist/application/rlm-service.js +132 -0
  13. package/dist/application/rlm-service.js.map +1 -0
  14. package/dist/application/session-manager.d.ts +70 -0
  15. package/dist/application/session-manager.d.ts.map +1 -0
  16. package/dist/application/session-manager.js +237 -0
  17. package/dist/application/session-manager.js.map +1 -0
  18. package/dist/cli/commands/config.d.ts +34 -0
  19. package/dist/cli/commands/config.d.ts.map +1 -0
  20. package/dist/cli/commands/config.js +157 -0
  21. package/dist/cli/commands/config.js.map +1 -0
  22. package/dist/cli/commands/index.d.ts +4 -0
  23. package/dist/cli/commands/index.d.ts.map +1 -0
  24. package/dist/cli/commands/index.js +4 -0
  25. package/dist/cli/commands/index.js.map +1 -0
  26. package/dist/cli/commands/query.d.ts +26 -0
  27. package/dist/cli/commands/query.d.ts.map +1 -0
  28. package/dist/cli/commands/query.js +90 -0
  29. package/dist/cli/commands/query.js.map +1 -0
  30. package/dist/cli/commands/session.d.ts +40 -0
  31. package/dist/cli/commands/session.d.ts.map +1 -0
  32. package/dist/cli/commands/session.js +55 -0
  33. package/dist/cli/commands/session.js.map +1 -0
  34. package/dist/cli/config-loader.d.ts +63 -0
  35. package/dist/cli/config-loader.d.ts.map +1 -0
  36. package/dist/cli/config-loader.js +94 -0
  37. package/dist/cli/config-loader.js.map +1 -0
  38. package/dist/cli/index.d.ts +3 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +120 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/cli/output/formatter.d.ts +24 -0
  43. package/dist/cli/output/formatter.d.ts.map +1 -0
  44. package/dist/cli/output/formatter.js +196 -0
  45. package/dist/cli/output/formatter.js.map +1 -0
  46. package/dist/cli/output/index.d.ts +3 -0
  47. package/dist/cli/output/index.d.ts.map +1 -0
  48. package/dist/cli/output/index.js +3 -0
  49. package/dist/cli/output/index.js.map +1 -0
  50. package/dist/cli/output/progress.d.ts +60 -0
  51. package/dist/cli/output/progress.d.ts.map +1 -0
  52. package/dist/cli/output/progress.js +142 -0
  53. package/dist/cli/output/progress.js.map +1 -0
  54. package/dist/domain/errors/base-error.d.ts +17 -0
  55. package/dist/domain/errors/base-error.d.ts.map +1 -0
  56. package/dist/domain/errors/base-error.js +29 -0
  57. package/dist/domain/errors/base-error.js.map +1 -0
  58. package/dist/domain/errors/execution-error.d.ts +61 -0
  59. package/dist/domain/errors/execution-error.d.ts.map +1 -0
  60. package/dist/domain/errors/execution-error.js +86 -0
  61. package/dist/domain/errors/execution-error.js.map +1 -0
  62. package/dist/domain/errors/index.d.ts +14 -0
  63. package/dist/domain/errors/index.d.ts.map +1 -0
  64. package/dist/domain/errors/index.js +26 -0
  65. package/dist/domain/errors/index.js.map +1 -0
  66. package/dist/domain/errors/limit-exceeded.d.ts +38 -0
  67. package/dist/domain/errors/limit-exceeded.d.ts.map +1 -0
  68. package/dist/domain/errors/limit-exceeded.js +71 -0
  69. package/dist/domain/errors/limit-exceeded.js.map +1 -0
  70. package/dist/domain/errors/llm-error.d.ts +60 -0
  71. package/dist/domain/errors/llm-error.d.ts.map +1 -0
  72. package/dist/domain/errors/llm-error.js +92 -0
  73. package/dist/domain/errors/llm-error.js.map +1 -0
  74. package/dist/domain/errors/validation-error.d.ts +58 -0
  75. package/dist/domain/errors/validation-error.d.ts.map +1 -0
  76. package/dist/domain/errors/validation-error.js +81 -0
  77. package/dist/domain/errors/validation-error.js.map +1 -0
  78. package/dist/domain/interfaces/code-executor.d.ts +98 -0
  79. package/dist/domain/interfaces/code-executor.d.ts.map +1 -0
  80. package/dist/domain/interfaces/code-executor.js +2 -0
  81. package/dist/domain/interfaces/code-executor.js.map +1 -0
  82. package/dist/domain/interfaces/event-emitter.d.ts +137 -0
  83. package/dist/domain/interfaces/event-emitter.d.ts.map +1 -0
  84. package/dist/domain/interfaces/event-emitter.js +2 -0
  85. package/dist/domain/interfaces/event-emitter.js.map +1 -0
  86. package/dist/domain/interfaces/index.d.ts +5 -0
  87. package/dist/domain/interfaces/index.d.ts.map +1 -0
  88. package/dist/domain/interfaces/index.js +2 -0
  89. package/dist/domain/interfaces/index.js.map +1 -0
  90. package/dist/domain/interfaces/llm-provider.d.ts +64 -0
  91. package/dist/domain/interfaces/llm-provider.d.ts.map +1 -0
  92. package/dist/domain/interfaces/llm-provider.js +2 -0
  93. package/dist/domain/interfaces/llm-provider.js.map +1 -0
  94. package/dist/domain/interfaces/session-store.d.ts +65 -0
  95. package/dist/domain/interfaces/session-store.d.ts.map +1 -0
  96. package/dist/domain/interfaces/session-store.js +2 -0
  97. package/dist/domain/interfaces/session-store.js.map +1 -0
  98. package/dist/domain/services/context-chunker.d.ts +43 -0
  99. package/dist/domain/services/context-chunker.d.ts.map +1 -0
  100. package/dist/domain/services/context-chunker.js +152 -0
  101. package/dist/domain/services/context-chunker.js.map +1 -0
  102. package/dist/domain/services/cost-calculator.d.ts +63 -0
  103. package/dist/domain/services/cost-calculator.d.ts.map +1 -0
  104. package/dist/domain/services/cost-calculator.js +121 -0
  105. package/dist/domain/services/cost-calculator.js.map +1 -0
  106. package/dist/domain/services/index.d.ts +5 -0
  107. package/dist/domain/services/index.d.ts.map +1 -0
  108. package/dist/domain/services/index.js +9 -0
  109. package/dist/domain/services/index.js.map +1 -0
  110. package/dist/domain/services/limit-checker.d.ts +54 -0
  111. package/dist/domain/services/limit-checker.d.ts.map +1 -0
  112. package/dist/domain/services/limit-checker.js +146 -0
  113. package/dist/domain/services/limit-checker.js.map +1 -0
  114. package/dist/domain/services/result-aggregator.d.ts +49 -0
  115. package/dist/domain/services/result-aggregator.d.ts.map +1 -0
  116. package/dist/domain/services/result-aggregator.js +131 -0
  117. package/dist/domain/services/result-aggregator.js.map +1 -0
  118. package/dist/domain/types/config.d.ts +41 -0
  119. package/dist/domain/types/config.d.ts.map +1 -0
  120. package/dist/domain/types/config.js +22 -0
  121. package/dist/domain/types/config.js.map +1 -0
  122. package/dist/domain/types/context.d.ts +64 -0
  123. package/dist/domain/types/context.d.ts.map +1 -0
  124. package/dist/domain/types/context.js +20 -0
  125. package/dist/domain/types/context.js.map +1 -0
  126. package/dist/domain/types/index.d.ts +5 -0
  127. package/dist/domain/types/index.d.ts.map +1 -0
  128. package/dist/domain/types/index.js +9 -0
  129. package/dist/domain/types/index.js.map +1 -0
  130. package/dist/domain/types/result.d.ts +137 -0
  131. package/dist/domain/types/result.d.ts.map +1 -0
  132. package/dist/domain/types/result.js +27 -0
  133. package/dist/domain/types/result.js.map +1 -0
  134. package/dist/domain/types/session.d.ts +74 -0
  135. package/dist/domain/types/session.d.ts.map +1 -0
  136. package/dist/domain/types/session.js +31 -0
  137. package/dist/domain/types/session.js.map +1 -0
  138. package/dist/factory/create-rlm.d.ts +77 -0
  139. package/dist/factory/create-rlm.d.ts.map +1 -0
  140. package/dist/factory/create-rlm.js +82 -0
  141. package/dist/factory/create-rlm.js.map +1 -0
  142. package/dist/factory/default-config.d.ts +27 -0
  143. package/dist/factory/default-config.d.ts.map +1 -0
  144. package/dist/factory/default-config.js +98 -0
  145. package/dist/factory/default-config.js.map +1 -0
  146. package/dist/factory/index.d.ts +3 -0
  147. package/dist/factory/index.d.ts.map +1 -0
  148. package/dist/factory/index.js +3 -0
  149. package/dist/factory/index.js.map +1 -0
  150. package/dist/index.d.ts +37 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/infrastructure/events/event-types.d.ts +35 -0
  155. package/dist/infrastructure/events/event-types.d.ts.map +1 -0
  156. package/dist/infrastructure/events/event-types.js +44 -0
  157. package/dist/infrastructure/events/event-types.js.map +1 -0
  158. package/dist/infrastructure/events/index.d.ts +3 -0
  159. package/dist/infrastructure/events/index.d.ts.map +1 -0
  160. package/dist/infrastructure/events/index.js +3 -0
  161. package/dist/infrastructure/events/index.js.map +1 -0
  162. package/dist/infrastructure/events/node-emitter.d.ts +72 -0
  163. package/dist/infrastructure/events/node-emitter.d.ts.map +1 -0
  164. package/dist/infrastructure/events/node-emitter.js +125 -0
  165. package/dist/infrastructure/events/node-emitter.js.map +1 -0
  166. package/dist/infrastructure/llm/index.d.ts +3 -0
  167. package/dist/infrastructure/llm/index.d.ts.map +1 -0
  168. package/dist/infrastructure/llm/index.js +3 -0
  169. package/dist/infrastructure/llm/index.js.map +1 -0
  170. package/dist/infrastructure/llm/openrouter-provider.d.ts +35 -0
  171. package/dist/infrastructure/llm/openrouter-provider.d.ts.map +1 -0
  172. package/dist/infrastructure/llm/openrouter-provider.js +158 -0
  173. package/dist/infrastructure/llm/openrouter-provider.js.map +1 -0
  174. package/dist/infrastructure/llm/prompts/code-gen-prompt.d.ts +21 -0
  175. package/dist/infrastructure/llm/prompts/code-gen-prompt.d.ts.map +1 -0
  176. package/dist/infrastructure/llm/prompts/code-gen-prompt.js +78 -0
  177. package/dist/infrastructure/llm/prompts/code-gen-prompt.js.map +1 -0
  178. package/dist/infrastructure/llm/prompts/error-recovery-prompt.d.ts +24 -0
  179. package/dist/infrastructure/llm/prompts/error-recovery-prompt.d.ts.map +1 -0
  180. package/dist/infrastructure/llm/prompts/error-recovery-prompt.js +70 -0
  181. package/dist/infrastructure/llm/prompts/error-recovery-prompt.js.map +1 -0
  182. package/dist/infrastructure/llm/prompts/index.d.ts +4 -0
  183. package/dist/infrastructure/llm/prompts/index.d.ts.map +1 -0
  184. package/dist/infrastructure/llm/prompts/index.js +4 -0
  185. package/dist/infrastructure/llm/prompts/index.js.map +1 -0
  186. package/dist/infrastructure/llm/prompts/system-prompt.d.ts +12 -0
  187. package/dist/infrastructure/llm/prompts/system-prompt.d.ts.map +1 -0
  188. package/dist/infrastructure/llm/prompts/system-prompt.js +96 -0
  189. package/dist/infrastructure/llm/prompts/system-prompt.js.map +1 -0
  190. package/dist/infrastructure/persistence/index.d.ts +3 -0
  191. package/dist/infrastructure/persistence/index.d.ts.map +1 -0
  192. package/dist/infrastructure/persistence/index.js +3 -0
  193. package/dist/infrastructure/persistence/index.js.map +1 -0
  194. package/dist/infrastructure/persistence/memory-store.d.ts +24 -0
  195. package/dist/infrastructure/persistence/memory-store.d.ts.map +1 -0
  196. package/dist/infrastructure/persistence/memory-store.js +71 -0
  197. package/dist/infrastructure/persistence/memory-store.js.map +1 -0
  198. package/dist/infrastructure/persistence/schema.d.ts +120 -0
  199. package/dist/infrastructure/persistence/schema.d.ts.map +1 -0
  200. package/dist/infrastructure/persistence/schema.js +130 -0
  201. package/dist/infrastructure/persistence/schema.js.map +1 -0
  202. package/dist/infrastructure/sandbox/ast-validator.d.ts +23 -0
  203. package/dist/infrastructure/sandbox/ast-validator.d.ts.map +1 -0
  204. package/dist/infrastructure/sandbox/ast-validator.js +249 -0
  205. package/dist/infrastructure/sandbox/ast-validator.js.map +1 -0
  206. package/dist/infrastructure/sandbox/index.d.ts +4 -0
  207. package/dist/infrastructure/sandbox/index.d.ts.map +1 -0
  208. package/dist/infrastructure/sandbox/index.js +4 -0
  209. package/dist/infrastructure/sandbox/index.js.map +1 -0
  210. package/dist/infrastructure/sandbox/prelude/rlm_prelude.py +376 -0
  211. package/dist/infrastructure/sandbox/process-manager.d.ts +98 -0
  212. package/dist/infrastructure/sandbox/process-manager.d.ts.map +1 -0
  213. package/dist/infrastructure/sandbox/process-manager.js +186 -0
  214. package/dist/infrastructure/sandbox/process-manager.js.map +1 -0
  215. package/dist/infrastructure/sandbox/python-executor.d.ts +29 -0
  216. package/dist/infrastructure/sandbox/python-executor.d.ts.map +1 -0
  217. package/dist/infrastructure/sandbox/python-executor.js +182 -0
  218. package/dist/infrastructure/sandbox/python-executor.js.map +1 -0
  219. package/package.json +65 -0
  220. package/src/infrastructure/sandbox/prelude/rlm_prelude.py +376 -0
@@ -0,0 +1,98 @@
1
+ import { DEFAULT_CONFIG } from '../domain/types/config.js';
2
+ /**
3
+ * Environment variable names for configuration
4
+ */
5
+ export const ENV_VARS = {
6
+ OPENROUTER_API_KEY: 'OPENROUTER_API_KEY',
7
+ RLM_MODEL: 'RLM_MODEL',
8
+ RLM_MAX_DEPTH: 'RLM_MAX_DEPTH',
9
+ RLM_MAX_COST_USD: 'RLM_MAX_COST_USD',
10
+ RLM_MAX_TOKENS: 'RLM_MAX_TOKENS',
11
+ RLM_TIMEOUT_SECONDS: 'RLM_TIMEOUT_SECONDS',
12
+ RLM_SANDBOX_MODE: 'RLM_SANDBOX_MODE',
13
+ RLM_TEMPERATURE: 'RLM_TEMPERATURE',
14
+ };
15
+ /**
16
+ * Load configuration from environment variables
17
+ */
18
+ export function loadConfigFromEnv() {
19
+ const config = {};
20
+ const model = process.env[ENV_VARS.RLM_MODEL];
21
+ if (model) {
22
+ config.model = model;
23
+ }
24
+ const maxDepth = process.env[ENV_VARS.RLM_MAX_DEPTH];
25
+ if (maxDepth) {
26
+ const parsed = parseInt(maxDepth, 10);
27
+ if (!isNaN(parsed) && parsed > 0 && parsed <= 10) {
28
+ config.maxRecursionDepth = parsed;
29
+ }
30
+ }
31
+ const maxCost = process.env[ENV_VARS.RLM_MAX_COST_USD];
32
+ if (maxCost) {
33
+ const parsed = parseFloat(maxCost);
34
+ if (!isNaN(parsed) && parsed > 0) {
35
+ config.maxCostUsd = parsed;
36
+ }
37
+ }
38
+ const maxTokens = process.env[ENV_VARS.RLM_MAX_TOKENS];
39
+ if (maxTokens) {
40
+ const parsed = parseInt(maxTokens, 10);
41
+ if (!isNaN(parsed) && parsed > 0) {
42
+ config.maxTokens = parsed;
43
+ }
44
+ }
45
+ const timeout = process.env[ENV_VARS.RLM_TIMEOUT_SECONDS];
46
+ if (timeout) {
47
+ const parsed = parseInt(timeout, 10);
48
+ if (!isNaN(parsed) && parsed > 0) {
49
+ config.timeoutMs = parsed * 1000;
50
+ }
51
+ }
52
+ const sandboxMode = process.env[ENV_VARS.RLM_SANDBOX_MODE];
53
+ if (sandboxMode === 'strict' || sandboxMode === 'permissive' || sandboxMode === 'disabled') {
54
+ config.sandboxMode = sandboxMode;
55
+ }
56
+ const temperature = process.env[ENV_VARS.RLM_TEMPERATURE];
57
+ if (temperature) {
58
+ const parsed = parseFloat(temperature);
59
+ if (!isNaN(parsed) && parsed >= 0 && parsed <= 1) {
60
+ config.temperature = parsed;
61
+ }
62
+ }
63
+ return config;
64
+ }
65
+ /**
66
+ * Resolve configuration with defaults and environment
67
+ */
68
+ export function resolveConfig(userConfig, includeEnv = true) {
69
+ const envConfig = includeEnv ? loadConfigFromEnv() : {};
70
+ return {
71
+ ...DEFAULT_CONFIG,
72
+ ...envConfig,
73
+ ...userConfig,
74
+ };
75
+ }
76
+ /**
77
+ * Validate configuration values
78
+ */
79
+ export function validateConfig(config) {
80
+ const errors = [];
81
+ if (config.maxRecursionDepth < 1 || config.maxRecursionDepth > 10) {
82
+ errors.push('maxRecursionDepth must be between 1 and 10');
83
+ }
84
+ if (config.maxTokens < 1000) {
85
+ errors.push('maxTokens must be at least 1000');
86
+ }
87
+ if (config.maxCostUsd < 0) {
88
+ errors.push('maxCostUsd must be non-negative');
89
+ }
90
+ if (config.timeoutMs < 1000) {
91
+ errors.push('timeoutMs must be at least 1000 (1 second)');
92
+ }
93
+ if (config.temperature < 0 || config.temperature > 1) {
94
+ errors.push('temperature must be between 0 and 1');
95
+ }
96
+ return errors;
97
+ }
98
+ //# sourceMappingURL=default-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.js","sourceRoot":"","sources":["../../src/factory/default-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { createRLM, type CreateRLMOptions } from './create-rlm.js';
2
+ export { ENV_VARS, loadConfigFromEnv, resolveConfig, validateConfig, } from './default-config.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createRLM } from './create-rlm.js';
2
+ export { ENV_VARS, loadConfigFromEnv, resolveConfig, validateConfig, } from './default-config.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @cloudwarriors-ai/rlm
3
+ *
4
+ * Recursive Language Model - Process massive contexts through recursive LLM decomposition
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { createRLM } from '@cloudwarriors-ai/rlm';
9
+ *
10
+ * const rlm = createRLM({
11
+ * apiKey: process.env.OPENROUTER_API_KEY,
12
+ * });
13
+ *
14
+ * const result = await rlm.query(
15
+ * fs.readFileSync('./massive-codebase.txt', 'utf-8'),
16
+ * 'Find all security vulnerabilities'
17
+ * );
18
+ *
19
+ * console.log(result.answer);
20
+ * console.log(`Cost: $${result.usage.costUsd.toFixed(4)}`);
21
+ * ```
22
+ */
23
+ export { createRLM, type CreateRLMOptions } from './factory/create-rlm.js';
24
+ export { type RLMConfig, type RLMConfigInput, type SandboxMode, DEFAULT_CONFIG, createConfig, } from './domain/types/config.js';
25
+ export { type ContextInput, type ContextVariable, type ContextMetadata, type ContextSource, type ContextChunk, } from './domain/types/context.js';
26
+ export { type RLMResult, type ResourceUsage, type TokenUsage, type ExecutionTrace, type ExecutionStep, type RecursiveCallResult, } from './domain/types/result.js';
27
+ export { type RLMSession, type SessionStatus, type SessionState, } from './domain/types/session.js';
28
+ export { type ILLMProvider, type ICodeExecutor, type ISessionStore, type IEventEmitter, type Message, type GenerateOptions, type LLMResponse, type ExecutionContext, type ExecutionResult, type SessionFilter, type SessionPatch, type RLMEvent, type EventHandler, } from './domain/interfaces/index.js';
29
+ export { RLMEventTypes, type RLMEventType } from './infrastructure/events/event-types.js';
30
+ export { type RLMSessionRow, type RLMCallRow, CREATE_TABLES_SQL, } from './infrastructure/persistence/schema.js';
31
+ export { RLMError, LimitExceededError, ExecutionError, ValidationError, ConfigurationError, LLMError, RateLimitError, AuthenticationError, isRLMError, isRecoverableError, } from './domain/errors/index.js';
32
+ export { RLMService, type RLMServiceOptions } from './application/rlm-service.js';
33
+ export { OpenRouterProvider, type OpenRouterConfig } from './infrastructure/llm/openrouter-provider.js';
34
+ export { PythonExecutor, type PythonExecutorConfig } from './infrastructure/sandbox/python-executor.js';
35
+ export { MemorySessionStore } from './infrastructure/persistence/memory-store.js';
36
+ export { NodeEventEmitter, NoopEventEmitter } from './infrastructure/events/node-emitter.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3E,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,cAAc,EACd,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAG1F,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGlF,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @cloudwarriors-ai/rlm
3
+ *
4
+ * Recursive Language Model - Process massive contexts through recursive LLM decomposition
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { createRLM } from '@cloudwarriors-ai/rlm';
9
+ *
10
+ * const rlm = createRLM({
11
+ * apiKey: process.env.OPENROUTER_API_KEY,
12
+ * });
13
+ *
14
+ * const result = await rlm.query(
15
+ * fs.readFileSync('./massive-codebase.txt', 'utf-8'),
16
+ * 'Find all security vulnerabilities'
17
+ * );
18
+ *
19
+ * console.log(result.answer);
20
+ * console.log(`Cost: $${result.usage.costUsd.toFixed(4)}`);
21
+ * ```
22
+ */
23
+ // Factory function (main entry point)
24
+ export { createRLM } from './factory/create-rlm.js';
25
+ // Configuration
26
+ export { DEFAULT_CONFIG, createConfig, } from './domain/types/config.js';
27
+ // Event types
28
+ export { RLMEventTypes } from './infrastructure/events/event-types.js';
29
+ // Database schema (for Hermes integration)
30
+ export { CREATE_TABLES_SQL, } from './infrastructure/persistence/schema.js';
31
+ // Errors
32
+ export { RLMError, LimitExceededError, ExecutionError, ValidationError, ConfigurationError, LLMError, RateLimitError, AuthenticationError, isRLMError, isRecoverableError, } from './domain/errors/index.js';
33
+ // Service class (for advanced usage)
34
+ export { RLMService } from './application/rlm-service.js';
35
+ // Infrastructure components (for custom assembly)
36
+ export { OpenRouterProvider } from './infrastructure/llm/openrouter-provider.js';
37
+ export { PythonExecutor } from './infrastructure/sandbox/python-executor.js';
38
+ export { MemorySessionStore } from './infrastructure/persistence/memory-store.js';
39
+ export { NodeEventEmitter, NoopEventEmitter } from './infrastructure/events/node-emitter.js';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,sCAAsC;AACtC,OAAO,EAAE,SAAS,EAAyB,MAAM,yBAAyB,CAAC;AAE3E,gBAAgB;AAChB,OAAO,EAIL,cAAc,EACd,YAAY,GACb,MAAM,0BAA0B,CAAC;AA6ClC,cAAc;AACd,OAAO,EAAE,aAAa,EAAqB,MAAM,wCAAwC,CAAC;AAE1F,2CAA2C;AAC3C,OAAO,EAGL,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAEhD,SAAS;AACT,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAA0B,MAAM,8BAA8B,CAAC;AAElF,kDAAkD;AAClD,OAAO,EAAE,kBAAkB,EAAyB,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,cAAc,EAA6B,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Event type constants for RLM
3
+ */
4
+ export declare const RLMEventTypes: {
5
+ readonly SESSION_STARTED: "rlm.session.started";
6
+ readonly SESSION_COMPLETED: "rlm.session.completed";
7
+ readonly SESSION_FAILED: "rlm.session.failed";
8
+ readonly SESSION_CANCELLED: "rlm.session.cancelled";
9
+ readonly LLM_CALL_STARTED: "rlm.llm.started";
10
+ readonly LLM_CALL_COMPLETED: "rlm.llm.completed";
11
+ readonly LLM_CALL_FAILED: "rlm.llm.failed";
12
+ readonly CODE_GENERATION_STARTED: "rlm.code.generation.started";
13
+ readonly CODE_GENERATION_COMPLETED: "rlm.code.generation.completed";
14
+ readonly CODE_EXECUTION_STARTED: "rlm.code.execution.started";
15
+ readonly CODE_EXECUTION_COMPLETED: "rlm.code.completed";
16
+ readonly CODE_EXECUTION_FAILED: "rlm.code.failed";
17
+ readonly RECURSIVE_CALL_STARTED: "rlm.recursive.started";
18
+ readonly RECURSIVE_CALL_COMPLETED: "rlm.recursive.completed";
19
+ readonly PROGRESS_UPDATE: "rlm.progress.update";
20
+ readonly LIMIT_WARNING: "rlm.limit.warning";
21
+ readonly LIMIT_EXCEEDED: "rlm.limit.exceeded";
22
+ readonly ERROR_RECOVERY_STARTED: "rlm.recovery.started";
23
+ readonly ERROR_RECOVERY_COMPLETED: "rlm.recovery.completed";
24
+ readonly ERROR_RECOVERY_FAILED: "rlm.recovery.failed";
25
+ };
26
+ export type RLMEventType = (typeof RLMEventTypes)[keyof typeof RLMEventTypes];
27
+ /**
28
+ * Get all event types as an array
29
+ */
30
+ export declare function getAllEventTypes(): RLMEventType[];
31
+ /**
32
+ * Check if a string is a valid RLM event type
33
+ */
34
+ export declare function isRLMEventType(type: string): type is RLMEventType;
35
+ //# sourceMappingURL=event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/events/event-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;CAgChB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE9E;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEjE"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Event type constants for RLM
3
+ */
4
+ export const RLMEventTypes = {
5
+ // Session lifecycle
6
+ SESSION_STARTED: 'rlm.session.started',
7
+ SESSION_COMPLETED: 'rlm.session.completed',
8
+ SESSION_FAILED: 'rlm.session.failed',
9
+ SESSION_CANCELLED: 'rlm.session.cancelled',
10
+ // LLM calls
11
+ LLM_CALL_STARTED: 'rlm.llm.started',
12
+ LLM_CALL_COMPLETED: 'rlm.llm.completed',
13
+ LLM_CALL_FAILED: 'rlm.llm.failed',
14
+ // Code execution
15
+ CODE_GENERATION_STARTED: 'rlm.code.generation.started',
16
+ CODE_GENERATION_COMPLETED: 'rlm.code.generation.completed',
17
+ CODE_EXECUTION_STARTED: 'rlm.code.execution.started',
18
+ CODE_EXECUTION_COMPLETED: 'rlm.code.completed',
19
+ CODE_EXECUTION_FAILED: 'rlm.code.failed',
20
+ // Recursion
21
+ RECURSIVE_CALL_STARTED: 'rlm.recursive.started',
22
+ RECURSIVE_CALL_COMPLETED: 'rlm.recursive.completed',
23
+ // Progress & warnings
24
+ PROGRESS_UPDATE: 'rlm.progress.update',
25
+ LIMIT_WARNING: 'rlm.limit.warning',
26
+ LIMIT_EXCEEDED: 'rlm.limit.exceeded',
27
+ // Recovery
28
+ ERROR_RECOVERY_STARTED: 'rlm.recovery.started',
29
+ ERROR_RECOVERY_COMPLETED: 'rlm.recovery.completed',
30
+ ERROR_RECOVERY_FAILED: 'rlm.recovery.failed',
31
+ };
32
+ /**
33
+ * Get all event types as an array
34
+ */
35
+ export function getAllEventTypes() {
36
+ return Object.values(RLMEventTypes);
37
+ }
38
+ /**
39
+ * Check if a string is a valid RLM event type
40
+ */
41
+ export function isRLMEventType(type) {
42
+ return Object.values(RLMEventTypes).includes(type);
43
+ }
44
+ //# sourceMappingURL=event-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../../src/infrastructure/events/event-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,oBAAoB;IACpB,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;IAC1C,cAAc,EAAE,oBAAoB;IACpC,iBAAiB,EAAE,uBAAuB;IAE1C,YAAY;IACZ,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,mBAAmB;IACvC,eAAe,EAAE,gBAAgB;IAEjC,iBAAiB;IACjB,uBAAuB,EAAE,6BAA6B;IACtD,yBAAyB,EAAE,+BAA+B;IAC1D,sBAAsB,EAAE,4BAA4B;IACpD,wBAAwB,EAAE,oBAAoB;IAC9C,qBAAqB,EAAE,iBAAiB;IAExC,YAAY;IACZ,sBAAsB,EAAE,uBAAuB;IAC/C,wBAAwB,EAAE,yBAAyB;IAEnD,sBAAsB;IACtB,eAAe,EAAE,qBAAqB;IACtC,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,oBAAoB;IAEpC,WAAW;IACX,sBAAsB,EAAE,sBAAsB;IAC9C,wBAAwB,EAAE,wBAAwB;IAClD,qBAAqB,EAAE,qBAAqB;CACpC,CAAC;AAIX;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { RLMEventTypes, type RLMEventType, getAllEventTypes, isRLMEventType, } from './event-types.js';
2
+ export { NodeEventEmitter, NoopEventEmitter, BufferingEventEmitter, } from './node-emitter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,YAAY,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { RLMEventTypes, getAllEventTypes, isRLMEventType, } from './event-types.js';
2
+ export { NodeEventEmitter, NoopEventEmitter, BufferingEventEmitter, } from './node-emitter.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { IEventEmitter, RLMEvent, EventHandler } from '../../domain/interfaces/event-emitter.js';
3
+ /**
4
+ * Node.js EventEmitter adapter implementing IEventEmitter
5
+ */
6
+ export declare class NodeEventEmitter implements IEventEmitter {
7
+ private readonly emitter;
8
+ private readonly anyHandlers;
9
+ constructor(externalEmitter?: EventEmitter);
10
+ emit(event: RLMEvent): void;
11
+ on<T extends RLMEvent['type']>(type: T, handler: EventHandler<Extract<RLMEvent, {
12
+ type: T;
13
+ }>>): void;
14
+ onAny(handler: EventHandler): void;
15
+ off<T extends RLMEvent['type']>(type: T, handler: EventHandler<Extract<RLMEvent, {
16
+ type: T;
17
+ }>>): void;
18
+ offAny(handler: EventHandler): void;
19
+ /**
20
+ * Get the underlying Node.js EventEmitter
21
+ */
22
+ getEmitter(): EventEmitter;
23
+ /**
24
+ * Remove all listeners
25
+ */
26
+ removeAllListeners(): void;
27
+ }
28
+ /**
29
+ * No-op event emitter for when events aren't needed
30
+ */
31
+ export declare class NoopEventEmitter implements IEventEmitter {
32
+ emit(_event: RLMEvent): void;
33
+ on<T extends RLMEvent['type']>(_type: T, _handler: EventHandler<Extract<RLMEvent, {
34
+ type: T;
35
+ }>>): void;
36
+ onAny(_handler: EventHandler): void;
37
+ off<T extends RLMEvent['type']>(_type: T, _handler: EventHandler<Extract<RLMEvent, {
38
+ type: T;
39
+ }>>): void;
40
+ offAny(_handler: EventHandler): void;
41
+ }
42
+ /**
43
+ * Buffering event emitter that stores events until flushed
44
+ */
45
+ export declare class BufferingEventEmitter implements IEventEmitter {
46
+ private readonly buffer;
47
+ private readonly target;
48
+ private buffering;
49
+ constructor(target: IEventEmitter);
50
+ emit(event: RLMEvent): void;
51
+ on<T extends RLMEvent['type']>(type: T, handler: EventHandler<Extract<RLMEvent, {
52
+ type: T;
53
+ }>>): void;
54
+ onAny(handler: EventHandler): void;
55
+ off<T extends RLMEvent['type']>(type: T, handler: EventHandler<Extract<RLMEvent, {
56
+ type: T;
57
+ }>>): void;
58
+ offAny(handler: EventHandler): void;
59
+ /**
60
+ * Flush all buffered events to the target
61
+ */
62
+ flush(): void;
63
+ /**
64
+ * Clear the buffer without emitting
65
+ */
66
+ clear(): void;
67
+ /**
68
+ * Get the number of buffered events
69
+ */
70
+ get size(): number;
71
+ }
72
+ //# sourceMappingURL=node-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-emitter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/events/node-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACb,MAAM,0CAA0C,CAAC;AAElD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;gBAEhD,eAAe,CAAC,EAAE,YAAY;IAO1C,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAc3B,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACpD,IAAI;IAIP,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIlC,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC5B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACpD,IAAI;IAIP,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAInC;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAI3B;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IACpD,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAI5B,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACrD,IAAI;IAIP,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAInC,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACrD,IAAI;IAIP,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;CAGrC;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAQ;gBAEb,MAAM,EAAE,aAAa;IAIjC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAQ3B,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACpD,IAAI;IAIP,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIlC,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAC5B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACpD,IAAI;IAIP,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAInC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,125 @@
1
+ import { EventEmitter } from 'node:events';
2
+ /**
3
+ * Node.js EventEmitter adapter implementing IEventEmitter
4
+ */
5
+ export class NodeEventEmitter {
6
+ emitter;
7
+ anyHandlers = new Set();
8
+ constructor(externalEmitter) {
9
+ this.emitter = externalEmitter ?? new EventEmitter();
10
+ // Increase max listeners for heavy usage
11
+ this.emitter.setMaxListeners(100);
12
+ }
13
+ emit(event) {
14
+ // Emit to type-specific listeners
15
+ this.emitter.emit(event.type, event);
16
+ // Emit to "any" listeners
17
+ for (const handler of this.anyHandlers) {
18
+ try {
19
+ handler(event);
20
+ }
21
+ catch (error) {
22
+ console.error('Error in event handler:', error);
23
+ }
24
+ }
25
+ }
26
+ on(type, handler) {
27
+ this.emitter.on(type, handler);
28
+ }
29
+ onAny(handler) {
30
+ this.anyHandlers.add(handler);
31
+ }
32
+ off(type, handler) {
33
+ this.emitter.off(type, handler);
34
+ }
35
+ offAny(handler) {
36
+ this.anyHandlers.delete(handler);
37
+ }
38
+ /**
39
+ * Get the underlying Node.js EventEmitter
40
+ */
41
+ getEmitter() {
42
+ return this.emitter;
43
+ }
44
+ /**
45
+ * Remove all listeners
46
+ */
47
+ removeAllListeners() {
48
+ this.emitter.removeAllListeners();
49
+ this.anyHandlers.clear();
50
+ }
51
+ }
52
+ /**
53
+ * No-op event emitter for when events aren't needed
54
+ */
55
+ export class NoopEventEmitter {
56
+ emit(_event) {
57
+ // No-op
58
+ }
59
+ on(_type, _handler) {
60
+ // No-op
61
+ }
62
+ onAny(_handler) {
63
+ // No-op
64
+ }
65
+ off(_type, _handler) {
66
+ // No-op
67
+ }
68
+ offAny(_handler) {
69
+ // No-op
70
+ }
71
+ }
72
+ /**
73
+ * Buffering event emitter that stores events until flushed
74
+ */
75
+ export class BufferingEventEmitter {
76
+ buffer = [];
77
+ target;
78
+ buffering = true;
79
+ constructor(target) {
80
+ this.target = target;
81
+ }
82
+ emit(event) {
83
+ if (this.buffering) {
84
+ this.buffer.push(event);
85
+ }
86
+ else {
87
+ this.target.emit(event);
88
+ }
89
+ }
90
+ on(type, handler) {
91
+ this.target.on(type, handler);
92
+ }
93
+ onAny(handler) {
94
+ this.target.onAny(handler);
95
+ }
96
+ off(type, handler) {
97
+ this.target.off(type, handler);
98
+ }
99
+ offAny(handler) {
100
+ this.target.offAny(handler);
101
+ }
102
+ /**
103
+ * Flush all buffered events to the target
104
+ */
105
+ flush() {
106
+ this.buffering = false;
107
+ for (const event of this.buffer) {
108
+ this.target.emit(event);
109
+ }
110
+ this.buffer.length = 0;
111
+ }
112
+ /**
113
+ * Clear the buffer without emitting
114
+ */
115
+ clear() {
116
+ this.buffer.length = 0;
117
+ }
118
+ /**
119
+ * Get the number of buffered events
120
+ */
121
+ get size() {
122
+ return this.buffer.length;
123
+ }
124
+ }
125
+ //# sourceMappingURL=node-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-emitter.js","sourceRoot":"","sources":["../../../src/infrastructure/events/node-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { OpenRouterProvider, type OpenRouterConfig } from './openrouter-provider.js';
2
+ export { RLM_SYSTEM_PROMPT, formatSystemPrompt, CODE_GEN_PROMPT, RECURSIVE_QUERY_PROMPT, formatCodeGenPrompt, formatRecursiveQueryPrompt, extractPythonCode, ERROR_RECOVERY_PROMPT, VALIDATION_ERROR_PROMPT, formatErrorRecoveryPrompt, formatValidationErrorPrompt, MAX_RECOVERY_ATTEMPTS, } from './prompts/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { OpenRouterProvider } from './openrouter-provider.js';
2
+ export { RLM_SYSTEM_PROMPT, formatSystemPrompt, CODE_GEN_PROMPT, RECURSIVE_QUERY_PROMPT, formatCodeGenPrompt, formatRecursiveQueryPrompt, extractPythonCode, ERROR_RECOVERY_PROMPT, VALIDATION_ERROR_PROMPT, formatErrorRecoveryPrompt, formatValidationErrorPrompt, MAX_RECOVERY_ATTEMPTS, } from './prompts/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAErF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ILLMProvider, Message, GenerateOptions, LLMResponse } from '../../domain/interfaces/llm-provider.js';
2
+ /**
3
+ * Configuration for OpenRouter provider
4
+ */
5
+ export interface OpenRouterConfig {
6
+ /** API key */
7
+ readonly apiKey: string;
8
+ /** Model to use */
9
+ readonly model: string;
10
+ /** Base URL (default: https://openrouter.ai/api/v1) */
11
+ readonly baseUrl?: string;
12
+ /** Site URL for OpenRouter analytics */
13
+ readonly siteUrl?: string;
14
+ /** Site name for OpenRouter analytics */
15
+ readonly siteName?: string;
16
+ /** Request timeout in ms */
17
+ readonly timeoutMs?: number;
18
+ /** Maximum retries on transient errors */
19
+ readonly maxRetries?: number;
20
+ }
21
+ /**
22
+ * OpenRouter LLM provider implementation
23
+ */
24
+ export declare class OpenRouterProvider implements ILLMProvider {
25
+ private readonly config;
26
+ constructor(config: OpenRouterConfig);
27
+ generate(messages: readonly Message[], options?: GenerateOptions): Promise<LLMResponse>;
28
+ estimateTokens(text: string): number;
29
+ getModel(): string;
30
+ healthCheck(): Promise<boolean>;
31
+ private makeRequest;
32
+ private mapFinishReason;
33
+ private sleep;
34
+ }
35
+ //# sourceMappingURL=openrouter-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-provider.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/llm/openrouter-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,eAAe,EACf,WAAW,EACZ,MAAM,yCAAyC,CAAC;AASjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAwCD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,MAAM,EAAE,gBAAgB;IAY9B,QAAQ,CACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,WAAW,CAAC;IAmDvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMpC,QAAQ,IAAI,MAAM;IAIZ,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YAgBvB,WAAW;IAgEzB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,KAAK;CAGd"}