@holokai/sdk 0.1.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 (255) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +396 -0
  3. package/dist/core/api/base.controller.d.ts +8 -0
  4. package/dist/core/api/base.controller.d.ts.map +1 -0
  5. package/dist/core/api/base.controller.js +41 -0
  6. package/dist/core/api/base.controller.js.map +1 -0
  7. package/dist/core/api/index.d.ts +3 -0
  8. package/dist/core/api/index.d.ts.map +1 -0
  9. package/dist/core/api/index.js +3 -0
  10. package/dist/core/api/index.js.map +1 -0
  11. package/dist/core/api/types.d.ts +19 -0
  12. package/dist/core/api/types.d.ts.map +1 -0
  13. package/dist/core/api/types.js +2 -0
  14. package/dist/core/api/types.js.map +1 -0
  15. package/dist/core/entities/analysisResult.d.ts +8 -0
  16. package/dist/core/entities/analysisResult.d.ts.map +1 -0
  17. package/dist/core/entities/analysisResult.js +2 -0
  18. package/dist/core/entities/analysisResult.js.map +1 -0
  19. package/dist/core/entities/application.d.ts +12 -0
  20. package/dist/core/entities/application.d.ts.map +1 -0
  21. package/dist/core/entities/application.js +2 -0
  22. package/dist/core/entities/application.js.map +1 -0
  23. package/dist/core/entities/base.d.ts +8 -0
  24. package/dist/core/entities/base.d.ts.map +1 -0
  25. package/dist/core/entities/base.js +2 -0
  26. package/dist/core/entities/base.js.map +1 -0
  27. package/dist/core/entities/evaluator.d.ts +13 -0
  28. package/dist/core/entities/evaluator.d.ts.map +1 -0
  29. package/dist/core/entities/evaluator.data.d.ts +9 -0
  30. package/dist/core/entities/evaluator.data.d.ts.map +1 -0
  31. package/dist/core/entities/evaluator.data.js +2 -0
  32. package/dist/core/entities/evaluator.data.js.map +1 -0
  33. package/dist/core/entities/evaluator.js +2 -0
  34. package/dist/core/entities/evaluator.js.map +1 -0
  35. package/dist/core/entities/index.d.ts +11 -0
  36. package/dist/core/entities/index.d.ts.map +1 -0
  37. package/dist/core/entities/index.js +3 -0
  38. package/dist/core/entities/index.js.map +1 -0
  39. package/dist/core/entities/llm.request.d.ts +19 -0
  40. package/dist/core/entities/llm.request.d.ts.map +1 -0
  41. package/dist/core/entities/llm.request.js +2 -0
  42. package/dist/core/entities/llm.request.js.map +1 -0
  43. package/dist/core/entities/llm.response.d.ts +24 -0
  44. package/dist/core/entities/llm.response.d.ts.map +1 -0
  45. package/dist/core/entities/llm.response.js +3 -0
  46. package/dist/core/entities/llm.response.js.map +1 -0
  47. package/dist/core/entities/llm.status.d.ts +9 -0
  48. package/dist/core/entities/llm.status.d.ts.map +1 -0
  49. package/dist/core/entities/llm.status.js +11 -0
  50. package/dist/core/entities/llm.status.js.map +1 -0
  51. package/dist/core/entities/model.d.ts +14 -0
  52. package/dist/core/entities/model.d.ts.map +1 -0
  53. package/dist/core/entities/model.js +2 -0
  54. package/dist/core/entities/model.js.map +1 -0
  55. package/dist/core/entities/provider.d.ts +12 -0
  56. package/dist/core/entities/provider.d.ts.map +1 -0
  57. package/dist/core/entities/provider.js +2 -0
  58. package/dist/core/entities/provider.js.map +1 -0
  59. package/dist/core/id/index.d.ts +2 -0
  60. package/dist/core/id/index.d.ts.map +1 -0
  61. package/dist/core/id/index.js +13 -0
  62. package/dist/core/id/index.js.map +1 -0
  63. package/dist/core/index.d.ts +7 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +7 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/logger/holo-logger-factory.d.ts +6 -0
  68. package/dist/core/logger/holo-logger-factory.d.ts.map +1 -0
  69. package/dist/core/logger/holo-logger-factory.js +16 -0
  70. package/dist/core/logger/holo-logger-factory.js.map +1 -0
  71. package/dist/core/logger/index.d.ts +4 -0
  72. package/dist/core/logger/index.d.ts.map +1 -0
  73. package/dist/core/logger/index.js +4 -0
  74. package/dist/core/logger/index.js.map +1 -0
  75. package/dist/core/logger/logger.d.ts +24 -0
  76. package/dist/core/logger/logger.d.ts.map +1 -0
  77. package/dist/core/logger/logger.js +16 -0
  78. package/dist/core/logger/logger.js.map +1 -0
  79. package/dist/core/logger/mixin.d.ts +29 -0
  80. package/dist/core/logger/mixin.d.ts.map +1 -0
  81. package/dist/core/logger/mixin.js +29 -0
  82. package/dist/core/logger/mixin.js.map +1 -0
  83. package/dist/core/mixins/constructor.d.ts +2 -0
  84. package/dist/core/mixins/constructor.d.ts.map +1 -0
  85. package/dist/core/mixins/constructor.js +2 -0
  86. package/dist/core/mixins/constructor.js.map +1 -0
  87. package/dist/core/mixins/index.d.ts +2 -0
  88. package/dist/core/mixins/index.d.ts.map +1 -0
  89. package/dist/core/mixins/index.js +2 -0
  90. package/dist/core/mixins/index.js.map +1 -0
  91. package/dist/core/parsers/find-last.d.ts +3 -0
  92. package/dist/core/parsers/find-last.d.ts.map +1 -0
  93. package/dist/core/parsers/find-last.js +22 -0
  94. package/dist/core/parsers/find-last.js.map +1 -0
  95. package/dist/core/parsers/index.d.ts +6 -0
  96. package/dist/core/parsers/index.d.ts.map +1 -0
  97. package/dist/core/parsers/index.js +6 -0
  98. package/dist/core/parsers/index.js.map +1 -0
  99. package/dist/core/parsers/parsers.d.ts +6 -0
  100. package/dist/core/parsers/parsers.d.ts.map +1 -0
  101. package/dist/core/parsers/parsers.js +32 -0
  102. package/dist/core/parsers/parsers.js.map +1 -0
  103. package/dist/core/parsers/pick-defined.d.ts +2 -0
  104. package/dist/core/parsers/pick-defined.d.ts.map +1 -0
  105. package/dist/core/parsers/pick-defined.js +4 -0
  106. package/dist/core/parsers/pick-defined.js.map +1 -0
  107. package/dist/core/parsers/pick-headers.d.ts +3 -0
  108. package/dist/core/parsers/pick-headers.d.ts.map +1 -0
  109. package/dist/core/parsers/pick-headers.js +41 -0
  110. package/dist/core/parsers/pick-headers.js.map +1 -0
  111. package/dist/core/parsers/safe-parse.d.ts +2 -0
  112. package/dist/core/parsers/safe-parse.d.ts.map +1 -0
  113. package/dist/core/parsers/safe-parse.js +12 -0
  114. package/dist/core/parsers/safe-parse.js.map +1 -0
  115. package/dist/core/routes.d.ts +19 -0
  116. package/dist/core/routes.d.ts.map +1 -0
  117. package/dist/core/routes.js +8 -0
  118. package/dist/core/routes.js.map +1 -0
  119. package/dist/core/worker/envelopes.d.ts +27 -0
  120. package/dist/core/worker/envelopes.d.ts.map +1 -0
  121. package/dist/core/worker/envelopes.js +2 -0
  122. package/dist/core/worker/envelopes.js.map +1 -0
  123. package/dist/core/worker/index.d.ts +5 -0
  124. package/dist/core/worker/index.d.ts.map +1 -0
  125. package/dist/core/worker/index.js +5 -0
  126. package/dist/core/worker/index.js.map +1 -0
  127. package/dist/core/worker/prompt.d.ts +9 -0
  128. package/dist/core/worker/prompt.d.ts.map +1 -0
  129. package/dist/core/worker/prompt.js +2 -0
  130. package/dist/core/worker/prompt.js.map +1 -0
  131. package/dist/core/worker/request.d.ts +33 -0
  132. package/dist/core/worker/request.d.ts.map +1 -0
  133. package/dist/core/worker/request.js +2 -0
  134. package/dist/core/worker/request.js.map +1 -0
  135. package/dist/core/worker/response.d.ts +18 -0
  136. package/dist/core/worker/response.d.ts.map +1 -0
  137. package/dist/core/worker/response.js +2 -0
  138. package/dist/core/worker/response.js.map +1 -0
  139. package/dist/holo/content.d.ts +14 -0
  140. package/dist/holo/content.d.ts.map +1 -0
  141. package/dist/holo/content.js +7 -0
  142. package/dist/holo/content.js.map +1 -0
  143. package/dist/holo/factories/index.d.ts +3 -0
  144. package/dist/holo/factories/index.d.ts.map +1 -0
  145. package/dist/holo/factories/index.js +3 -0
  146. package/dist/holo/factories/index.js.map +1 -0
  147. package/dist/holo/factories/request-factory.d.ts +3 -0
  148. package/dist/holo/factories/request-factory.d.ts.map +1 -0
  149. package/dist/holo/factories/request-factory.js +8 -0
  150. package/dist/holo/factories/request-factory.js.map +1 -0
  151. package/dist/holo/factories/response-factory.d.ts +7 -0
  152. package/dist/holo/factories/response-factory.d.ts.map +1 -0
  153. package/dist/holo/factories/response-factory.js +64 -0
  154. package/dist/holo/factories/response-factory.js.map +1 -0
  155. package/dist/holo/index.d.ts +17 -0
  156. package/dist/holo/index.d.ts.map +1 -0
  157. package/dist/holo/index.js +19 -0
  158. package/dist/holo/index.js.map +1 -0
  159. package/dist/holo/messages.d.ts +10 -0
  160. package/dist/holo/messages.d.ts.map +1 -0
  161. package/dist/holo/messages.js +2 -0
  162. package/dist/holo/messages.js.map +1 -0
  163. package/dist/holo/requests.d.ts +32 -0
  164. package/dist/holo/requests.d.ts.map +1 -0
  165. package/dist/holo/requests.js +7 -0
  166. package/dist/holo/requests.js.map +1 -0
  167. package/dist/holo/responses.d.ts +57 -0
  168. package/dist/holo/responses.d.ts.map +1 -0
  169. package/dist/holo/responses.js +2 -0
  170. package/dist/holo/responses.js.map +1 -0
  171. package/dist/holo/tools.d.ts +25 -0
  172. package/dist/holo/tools.d.ts.map +1 -0
  173. package/dist/holo/tools.js +2 -0
  174. package/dist/holo/tools.js.map +1 -0
  175. package/dist/index.d.ts +7 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +7 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/plugin/base.d.ts +109 -0
  180. package/dist/plugin/base.d.ts.map +1 -0
  181. package/dist/plugin/base.js +131 -0
  182. package/dist/plugin/base.js.map +1 -0
  183. package/dist/plugin/context.d.ts +21 -0
  184. package/dist/plugin/context.d.ts.map +1 -0
  185. package/dist/plugin/context.js +2 -0
  186. package/dist/plugin/context.js.map +1 -0
  187. package/dist/plugin/errors.d.ts +24 -0
  188. package/dist/plugin/errors.d.ts.map +1 -0
  189. package/dist/plugin/errors.js +31 -0
  190. package/dist/plugin/errors.js.map +1 -0
  191. package/dist/plugin/evaluator.d.ts +243 -0
  192. package/dist/plugin/evaluator.d.ts.map +1 -0
  193. package/dist/plugin/evaluator.js +2 -0
  194. package/dist/plugin/evaluator.js.map +1 -0
  195. package/dist/plugin/guard.d.ts +307 -0
  196. package/dist/plugin/guard.d.ts.map +1 -0
  197. package/dist/plugin/guard.js +46 -0
  198. package/dist/plugin/guard.js.map +1 -0
  199. package/dist/plugin/index.d.ts +14 -0
  200. package/dist/plugin/index.d.ts.map +1 -0
  201. package/dist/plugin/index.js +14 -0
  202. package/dist/plugin/index.js.map +1 -0
  203. package/dist/plugin/manifest.d.ts +349 -0
  204. package/dist/plugin/manifest.d.ts.map +1 -0
  205. package/dist/plugin/manifest.js +6 -0
  206. package/dist/plugin/manifest.js.map +1 -0
  207. package/dist/plugin/provider.d.ts +55 -0
  208. package/dist/plugin/provider.d.ts.map +1 -0
  209. package/dist/plugin/provider.js +2 -0
  210. package/dist/plugin/provider.js.map +1 -0
  211. package/dist/plugin/registry.d.ts +7 -0
  212. package/dist/plugin/registry.d.ts.map +1 -0
  213. package/dist/plugin/registry.js +2 -0
  214. package/dist/plugin/registry.js.map +1 -0
  215. package/dist/provider/auditor/base.d.ts +21 -0
  216. package/dist/provider/auditor/base.d.ts.map +1 -0
  217. package/dist/provider/auditor/base.js +58 -0
  218. package/dist/provider/auditor/base.js.map +1 -0
  219. package/dist/provider/auditor/index.d.ts +2 -0
  220. package/dist/provider/auditor/index.d.ts.map +1 -0
  221. package/dist/provider/auditor/index.js +2 -0
  222. package/dist/provider/auditor/index.js.map +1 -0
  223. package/dist/provider/base.d.ts +39 -0
  224. package/dist/provider/base.d.ts.map +1 -0
  225. package/dist/provider/base.js +169 -0
  226. package/dist/provider/base.js.map +1 -0
  227. package/dist/provider/index.d.ts +6 -0
  228. package/dist/provider/index.d.ts.map +1 -0
  229. package/dist/provider/index.js +6 -0
  230. package/dist/provider/index.js.map +1 -0
  231. package/dist/provider/translator/base.d.ts +32 -0
  232. package/dist/provider/translator/base.d.ts.map +1 -0
  233. package/dist/provider/translator/base.js +33 -0
  234. package/dist/provider/translator/base.js.map +1 -0
  235. package/dist/provider/translator/index.d.ts +3 -0
  236. package/dist/provider/translator/index.d.ts.map +1 -0
  237. package/dist/provider/translator/index.js +3 -0
  238. package/dist/provider/translator/index.js.map +1 -0
  239. package/dist/provider/translator/stream.d.ts +24 -0
  240. package/dist/provider/translator/stream.d.ts.map +1 -0
  241. package/dist/provider/translator/stream.js +50 -0
  242. package/dist/provider/translator/stream.js.map +1 -0
  243. package/dist/provider/types.d.ts +107 -0
  244. package/dist/provider/types.d.ts.map +1 -0
  245. package/dist/provider/types.js +38 -0
  246. package/dist/provider/types.js.map +1 -0
  247. package/dist/provider/wire/base.d.ts +50 -0
  248. package/dist/provider/wire/base.d.ts.map +1 -0
  249. package/dist/provider/wire/base.js +99 -0
  250. package/dist/provider/wire/base.js.map +1 -0
  251. package/dist/provider/wire/index.d.ts +2 -0
  252. package/dist/provider/wire/index.d.ts.map +1 -0
  253. package/dist/provider/wire/index.js +2 -0
  254. package/dist/provider/wire/index.js.map +1 -0
  255. package/package.json +97 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Holokai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,396 @@
1
+ # @holokai/common
2
+
3
+ > Common SDK for Holo plugin development - provides interfaces, types, and utilities for building provider plugins.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @holokai/common
9
+ ```
10
+
11
+ ## Overview
12
+
13
+ The Common SDK is the foundation for developing Holo plugins. It provides:
14
+
15
+ - Type-safe interfaces for plugin lifecycle
16
+ - Provider abstractions and base implementations
17
+ - Universal Holo format definitions
18
+ - Shared utilities and types
19
+
20
+ ## Usage
21
+
22
+ ### Plugin Development
23
+
24
+ ```typescript
25
+ import { IPlugin, PluginManifest, PluginContext } from '@holokai/common/plugin';
26
+
27
+ export class MyPlugin implements IPlugin {
28
+ public manifest: PluginManifest = {
29
+ name: '@myorg/my-plugin',
30
+ version: '1.0.0',
31
+ pluginType: 'provider',
32
+ description: 'My custom provider plugin',
33
+ };
34
+
35
+ async initialize(context: PluginContext): Promise<void> {
36
+ // Plugin initialization
37
+ }
38
+
39
+ async destroy(): Promise<void> {
40
+ // Cleanup resources
41
+ }
42
+ }
43
+ ```
44
+
45
+ ### Provider Implementation
46
+
47
+ ```typescript
48
+ import { IProvider } from '@holokai/common/provider';
49
+ import { HoloRequest, HoloResponse } from '@holokai/common/holo';
50
+
51
+ export class MyProvider implements IProvider {
52
+ async processRequest(request: HoloRequest): Promise<HoloResponse> {
53
+ // Transform Holo format to provider-specific format
54
+ // Call provider API
55
+ // Transform response back to Holo format
56
+ return response;
57
+ }
58
+ }
59
+ ```
60
+
61
+ ## Package Exports
62
+
63
+ The SDK is organized into focused subpath exports:
64
+
65
+ ### `/plugin`
66
+
67
+ Core plugin interfaces and lifecycle management.
68
+
69
+ ```typescript
70
+ import { IPlugin, PluginManifest, PluginContext, PluginCapabilities } from '@holokai/common/plugin';
71
+ ```
72
+
73
+ ### `/provider`
74
+
75
+ Provider interfaces and base implementations.
76
+
77
+ ```typescript
78
+ import { IProvider, IProviderPlugin, ProviderConfig } from '@holokai/common/provider';
79
+ ```
80
+
81
+ ### `/holo`
82
+
83
+ Universal Holo format definitions for cross-provider compatibility.
84
+
85
+ ```typescript
86
+ import { HoloRequest, HoloResponse, HoloMessage, HoloStream } from '@holokai/common/holo';
87
+ ```
88
+
89
+ ### `/utils`
90
+
91
+ Shared utilities and helper types.
92
+
93
+ ```typescript
94
+ import { Logger, ErrorResponse, HealthStatus, Result, AsyncResult } from '@holokai/common/utils';
95
+ ```
96
+
97
+ ## Type Safety
98
+
99
+ All interfaces are fully typed with TypeScript:
100
+
101
+ ```typescript
102
+ interface PluginManifest {
103
+ name: string;
104
+ version: string;
105
+ pluginType: 'provider' | 'transformer' | 'validator';
106
+ description?: string;
107
+ author?: string;
108
+ license?: string;
109
+ capabilities?: PluginCapabilities;
110
+ }
111
+ ```
112
+
113
+ ## Best Practices
114
+
115
+ 1. **Import Boundaries**: Never import from the core platform (`../../src`)
116
+ 2. **Versioning**: Follow semantic versioning for your plugins
117
+ 3. **Error Handling**: Use provided error types for consistency
118
+ 4. **Logging**: Use the Logger interface for standardized logging
119
+ 5. **Configuration**: Use ConfigLoader for environment-based config
120
+
121
+ ## Provider Plugin Package Template
122
+
123
+ When creating a new provider plugin, follow this standardized package structure:
124
+
125
+ ### Directory Structure
126
+
127
+ ```
128
+ plugins/holo-provider-{name}/
129
+ ├── src/
130
+ │ ├── index.ts # Default export of plugin (REQUIRED)
131
+ │ ├── plugin.ts # IProviderPlugin implementation (REQUIRED)
132
+ │ ├── provider.ts # Provider implementation (REQUIRED)
133
+ │ └── translator.ts # Holo format translator (REQUIRED)
134
+ ├── tests/
135
+ │ ├── integration/ # Real API tests (PRIMARY - 70% coverage)
136
+ │ └── unit/ # Contract tests only (LIMITED - 30% coverage)
137
+ ├── package.json # Package configuration (REQUIRED)
138
+ ├── tsconfig.json # TypeScript configuration (REQUIRED)
139
+ └── README.md # Plugin documentation (REQUIRED)
140
+ ```
141
+
142
+ ### package.json Template
143
+
144
+ ```json
145
+ {
146
+ "name": "@holokai/provider-{name}",
147
+ "version": "1.0.0",
148
+ "description": "Holo provider plugin for {Provider Name}",
149
+ "main": "./dist/index.js",
150
+ "types": "./dist/index.d.ts",
151
+ "exports": {
152
+ ".": {
153
+ "import": "./dist/index.js",
154
+ "require": "./dist/index.js",
155
+ "types": "./dist/index.d.ts"
156
+ }
157
+ },
158
+ "engines": {
159
+ "node": ">=18.0.0"
160
+ },
161
+ "peerDependencies": {
162
+ "@holokai/common": "^1.0.0"
163
+ },
164
+ "dependencies": {
165
+ "{provider-sdk}": "x.y.z"
166
+ },
167
+ "devDependencies": {
168
+ "typescript": "^5.0.0",
169
+ "@types/node": "^18.0.0"
170
+ },
171
+ "scripts": {
172
+ "build": "tsc",
173
+ "test": "jest",
174
+ "test:integration": "jest tests/integration"
175
+ },
176
+ "keywords": ["holo", "plugin", "provider", "{name}"],
177
+ "author": "Your Name",
178
+ "license": "MIT"
179
+ }
180
+ ```
181
+
182
+ **Important package.json rules:**
183
+
184
+ - **Naming**: MUST follow `@holokai/provider-{name}` convention
185
+ - **peerDependencies**: MUST include `@holokai/common` (shared version)
186
+ - **dependencies**: Provider SDK with **EXACT version** (e.g., `"openai": "4.73.1"`, NOT `"^4.73.1"`)
187
+ - **engines**: MUST specify `node >= 18.0.0`
188
+
189
+ ### src/index.ts Template
190
+
191
+ ```typescript
192
+ import plugin from './plugin';
193
+
194
+ // Default export REQUIRED - this is what the plugin system loads
195
+ export default plugin;
196
+
197
+ // Named exports for testing/utilities (optional)
198
+ export {OpenAIProvider} from './provider';
199
+ export {OpenAITranslator} from './translator';
200
+ ```
201
+
202
+ ### src/plugin.ts Template
203
+
204
+ ```typescript
205
+ import { IProviderPlugin, PluginManifest, PluginContext } from '@holokai/common/plugin';
206
+ import { ProviderConfig, ProviderCapabilities } from '@holokai/common/provider';
207
+ import { OpenAIProvider } from './provider';
208
+
209
+ class OpenAIProviderPlugin implements IProviderPlugin {
210
+ public manifest: PluginManifest = {
211
+ name: '@holokai/provider-openai',
212
+ version: '1.0.0',
213
+ pluginType: 'provider',
214
+ providerType: 'openai',
215
+ sdkVersion: 'openai@4.73.1',
216
+ commonSdkVersion: '^1.0.0',
217
+ capabilities: {
218
+ streaming: true,
219
+ tools: true,
220
+ vision: true,
221
+ reasoning: false
222
+ },
223
+ author: 'HoloKai Team',
224
+ source: 'official',
225
+ description: 'OpenAI provider plugin for GPT models'
226
+ };
227
+
228
+ private context?: PluginContext;
229
+ private initialized = false;
230
+
231
+ async initialize(context: PluginContext): Promise<void> {
232
+ if (this.initialized) return; // Idempotent
233
+ this.context = context;
234
+ this.initialized = true;
235
+ context.logger.info('[OpenAI Plugin] Initialized');
236
+ }
237
+
238
+ async destroy(): Promise<void> {
239
+ this.context = undefined;
240
+ this.initialized = false;
241
+ }
242
+
243
+ createProvider(config: ProviderConfig): OpenAIProvider {
244
+ if (!this.initialized) {
245
+ throw new Error('Plugin not initialized');
246
+ }
247
+ return new OpenAIProvider(config, this.context!.logger);
248
+ }
249
+
250
+ validateConfig(config: unknown): boolean {
251
+ // Basic validation - plugins are lightweight
252
+ return typeof config === 'object' && config !== null;
253
+ }
254
+
255
+ getCapabilities(): ProviderCapabilities {
256
+ return this.manifest.capabilities!;
257
+ }
258
+ }
259
+
260
+ // Export singleton instance
261
+ const plugin = new OpenAIProviderPlugin();
262
+ export default plugin;
263
+ ```
264
+
265
+ ### src/provider.ts Template
266
+
267
+ ```typescript
268
+ import {IProvider} from '@holokai/common/provider';
269
+ import {HoloRequest, HoloResponse} from '@holokai/common/holo';
270
+ import {Logger} from '@holokai/common/utils';
271
+ import OpenAI from 'openai';
272
+
273
+ export class OpenAIProvider implements IProvider {
274
+ private client: OpenAI;
275
+
276
+ constructor(
277
+ private config: { api_key: string; model: string },
278
+ private logger: Logger
279
+ ) {
280
+ this.client = new OpenAI({apiKey: config.api_key});
281
+ }
282
+
283
+ async processRequest(request: HoloRequest): Promise<HoloResponse> {
284
+ // Transform Holo to OpenAI format
285
+ const openaiRequest = this.translator.toOpenAI(request);
286
+
287
+ // Call provider API
288
+ const response = await this.client.chat.completions.create(openaiRequest);
289
+
290
+ // Transform back to Holo format
291
+ return this.translator.fromOpenAI(response);
292
+ }
293
+
294
+ async processStreamRequest(request: HoloRequest): AsyncIterator<HoloStream> {
295
+ // Streaming implementation
296
+ }
297
+ }
298
+ ```
299
+
300
+ ### src/translator.ts Template
301
+
302
+ ```typescript
303
+ import {HoloRequest, HoloResponse} from '@holokai/common/holo';
304
+ import {ChatCompletion, ChatCompletionCreateParams} from 'openai/resources';
305
+
306
+ export class OpenAITranslator {
307
+ toOpenAI(holoRequest: HoloRequest): ChatCompletionCreateParams {
308
+ return {
309
+ model: holoRequest.model,
310
+ messages: holoRequest.messages.map(msg => ({
311
+ role: msg.role,
312
+ content: msg.content
313
+ })),
314
+ temperature: holoRequest.temperature,
315
+ max_tokens: holoRequest.maxTokens,
316
+ stream: false
317
+ };
318
+ }
319
+
320
+ fromOpenAI(openaiResponse: ChatCompletion): HoloResponse {
321
+ return {
322
+ id: openaiResponse.id,
323
+ model: openaiResponse.model,
324
+ choices: openaiResponse.choices.map(choice => ({
325
+ index: choice.index,
326
+ message: {
327
+ role: choice.message.role,
328
+ content: choice.message.content || ''
329
+ },
330
+ finishReason: choice.finish_reason
331
+ })),
332
+ usage: {
333
+ promptTokens: openaiResponse.usage?.prompt_tokens || 0,
334
+ completionTokens: openaiResponse.usage?.completion_tokens || 0,
335
+ totalTokens: openaiResponse.usage?.total_tokens || 0
336
+ },
337
+ created: openaiResponse.created
338
+ };
339
+ }
340
+ }
341
+ ```
342
+
343
+ ### tsconfig.json Template
344
+
345
+ ```json
346
+ {
347
+ "extends": "../../tsconfig.json",
348
+ "compilerOptions": {
349
+ "outDir": "./dist",
350
+ "rootDir": "./src",
351
+ "composite": true,
352
+ "declaration": true,
353
+ "declarationMap": true,
354
+ "sourceMap": true
355
+ },
356
+ "include": ["src/**/*"],
357
+ "exclude": ["node_modules", "dist", "tests"]
358
+ }
359
+ ```
360
+
361
+ ### Testing Structure
362
+
363
+ **Integration Tests (PRIMARY - tests/integration/):**
364
+
365
+ - Test real API calls with actual provider SDK
366
+ - Verify request/response transformations work correctly
367
+ - Test streaming functionality
368
+ - Verify error handling with real API errors
369
+ - Compare plugin output with expected Holo format
370
+
371
+ **Unit Tests (LIMITED - tests/unit/):**
372
+
373
+ - Test contract validation logic
374
+ - Test manifest structure
375
+ - Test plugin lifecycle (initialize, destroy)
376
+ - Minimal mocking - focus on contracts only
377
+
378
+ ### Complete Example
379
+
380
+ See [plugins/holo-provider-openai](../holo-provider-openai) for a complete reference implementation following this template.
381
+
382
+ ## Examples
383
+
384
+ See the [OpenAI Provider Plugin](../holo-provider-openai) for a complete reference implementation.
385
+
386
+ ## API Reference
387
+
388
+ Full API documentation is available in the [TypeScript definitions](./src/index.d.ts).
389
+
390
+ ## Contributing
391
+
392
+ This SDK is part of the Holo platform. See the main [CONTRIBUTING.md](../../CONTRIBUTING.md) for guidelines.
393
+
394
+ ## License
395
+
396
+ MIT
@@ -0,0 +1,8 @@
1
+ import { ApiResponse } from "./types";
2
+ import { ClassLogger } from "../logger";
3
+ export declare abstract class BaseController extends ClassLogger {
4
+ protected handleError(res: ApiResponse, error: Error, message?: string, statusCode?: number): void;
5
+ protected success<T>(res: ApiResponse, data: T, statusCode?: number): void;
6
+ protected hasRequiredFields(fields: Record<string, any>, requiredFields: string[], res: ApiResponse): boolean;
7
+ }
8
+ //# sourceMappingURL=base.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.controller.d.ts","sourceRoot":"","sources":["../../../src/core/api/base.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,8BAAsB,cAAe,SAAQ,WAAW;IACpD,SAAS,CAAC,WAAW,CACjB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,MAAgC,EACzC,UAAU,GAAE,MAAY,GACzB,IAAI;IAgBP,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,GAAE,MAAY,GAAG,IAAI;IAQ/E,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO;CAehH"}
@@ -0,0 +1,41 @@
1
+ import { ClassLogger } from "../logger";
2
+ export class BaseController extends ClassLogger {
3
+ handleError(res, error, message = 'Internal server error', statusCode = 500) {
4
+ const logger = this.mlog(this.handleError);
5
+ logger.error(`${message}: ${JSON.stringify(error.message, null, 2)}`, {
6
+ methodName: 'handleError'
7
+ });
8
+ res.status(statusCode).json({
9
+ success: false,
10
+ error: {
11
+ message,
12
+ code: error.name || 'INTERNAL_ERROR',
13
+ ...(process.env.NODE_ENV === 'development' && { stack: error.stack })
14
+ },
15
+ timestamp: new Date().toISOString()
16
+ });
17
+ }
18
+ success(res, data, statusCode = 200) {
19
+ res.status(statusCode).json({
20
+ success: true,
21
+ data,
22
+ timestamp: new Date().toISOString()
23
+ });
24
+ }
25
+ hasRequiredFields(fields, requiredFields, res) {
26
+ const missing = requiredFields.filter(field => !fields[field]);
27
+ if (missing.length > 0) {
28
+ res.status(400).json({
29
+ success: false,
30
+ error: {
31
+ message: `Missing required fields: ${missing.join(', ')}`,
32
+ code: 'VALIDATION_ERROR'
33
+ },
34
+ timestamp: new Date().toISOString()
35
+ });
36
+ return false;
37
+ }
38
+ return true;
39
+ }
40
+ }
41
+ //# sourceMappingURL=base.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../src/core/api/base.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,MAAM,OAAgB,cAAe,SAAQ,WAAW;IAC1C,WAAW,CACjB,GAAgB,EAChB,KAAY,EACZ,UAAkB,uBAAuB,EACzC,aAAqB,GAAG;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YAClE,UAAU,EAAE,aAAa;SAC5B,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACxB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACH,OAAO;gBACP,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB;gBACpC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAC,CAAC;aACtE;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACP,CAAC;IAES,OAAO,CAAI,GAAgB,EAAE,IAAO,EAAE,aAAqB,GAAG;QACpE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACxB,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACP,CAAC;IAES,iBAAiB,CAAC,MAA2B,EAAE,cAAwB,EAAE,GAAgB;QAC/F,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACH,OAAO,EAAE,4BAA4B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACzD,IAAI,EAAE,kBAAkB;iBAC3B;gBACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ export * from './base.controller';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './base.controller';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Response } from 'express';
2
+ export interface ApiResponse<T = any> extends Response {
3
+ json: (body: T) => this;
4
+ }
5
+ export interface ApiSuccessResponse<T = any> {
6
+ success: true;
7
+ data: T;
8
+ timestamp: string;
9
+ }
10
+ export interface ApiErrorResponse {
11
+ success: false;
12
+ error: {
13
+ message: string;
14
+ code?: string;
15
+ details?: any;
16
+ };
17
+ timestamp: string;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,QAAQ;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;CAC3B;AAGD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACvC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,GAAG,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/api/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export interface AnalysisResult {
2
+ id: string;
3
+ created_at: Date;
4
+ analysis_name: string | null;
5
+ reference: Record<string, any>;
6
+ results: Record<string, any>;
7
+ }
8
+ //# sourceMappingURL=analysisResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysisResult.d.ts","sourceRoot":"","sources":["../../../src/core/entities/analysisResult.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analysisResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysisResult.js","sourceRoot":"","sources":["../../../src/core/entities/analysisResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { BaseEntity } from "./base";
2
+ export interface Application extends BaseEntity {
3
+ name: string;
4
+ provider_id: string;
5
+ model_id: string;
6
+ system_prompt: string;
7
+ url_slug: string;
8
+ active?: boolean;
9
+ organization_id: string;
10
+ team_id?: string;
11
+ }
12
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/core/entities/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/core/entities/application.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export interface BaseEntity {
2
+ id: string;
3
+ created_at: Date;
4
+ updated_at: Date;
5
+ created_by?: string;
6
+ last_modified_by?: string;
7
+ }
8
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/core/entities/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/core/entities/base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { BaseEntity } from "./base";
2
+ export interface Evaluator extends BaseEntity {
3
+ name: string;
4
+ description?: string | null;
5
+ prompt_id?: string | null;
6
+ parameters: Record<string, any>;
7
+ evaluator_type: string;
8
+ enabled: boolean;
9
+ available: boolean;
10
+ deleted?: boolean;
11
+ active?: boolean;
12
+ }
13
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../src/core/entities/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,SAAU,SAAQ,UAAU;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ export interface EvaluatorData {
2
+ id: string;
3
+ created_at: Date;
4
+ evaluator_id: string;
5
+ llmresponse_id: string;
6
+ results: Record<string, any>;
7
+ scoring: Record<string, any>;
8
+ }
9
+ //# sourceMappingURL=evaluator.data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.data.d.ts","sourceRoot":"","sources":["../../../src/core/entities/evaluator.data.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=evaluator.data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.data.js","sourceRoot":"","sources":["../../../src/core/entities/evaluator.data.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/core/entities/evaluator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export * from './base';
2
+ export { Provider } from "./provider";
3
+ export { Evaluator } from "./evaluator";
4
+ export { EvaluatorData } from "./evaluator.data";
5
+ export { Model } from "./model";
6
+ export { AnalysisResult } from "./analysisResult";
7
+ export { LlmResponse } from "./llm.response";
8
+ export { Application } from "./application";
9
+ export { LlmRequest } from "./llm.request";
10
+ export { LlmStatus } from "./llm.status";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './base';
2
+ export { LlmStatus } from "./llm.status";
3
+ //# sourceMappingURL=index.js.map