@kb-labs/adapters 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/.cursorrules +32 -0
  2. package/.github/workflows/ci.yml +13 -0
  3. package/.github/workflows/deploy.yml +28 -0
  4. package/.github/workflows/docker-build.yml +25 -0
  5. package/.github/workflows/drift-check.yml +10 -0
  6. package/.github/workflows/profiles-validate.yml +16 -0
  7. package/.github/workflows/release.yml +8 -0
  8. package/.kb/devkit/agents/devkit-maintainer/context.globs +15 -0
  9. package/.kb/devkit/agents/devkit-maintainer/permissions.yml +17 -0
  10. package/.kb/devkit/agents/devkit-maintainer/prompt.md +28 -0
  11. package/.kb/devkit/agents/devkit-maintainer/runbook.md +31 -0
  12. package/.kb/devkit/agents/docs-crafter/prompt.md +24 -0
  13. package/.kb/devkit/agents/docs-crafter/runbook.md +18 -0
  14. package/.kb/devkit/agents/release-manager/context.globs +7 -0
  15. package/.kb/devkit/agents/release-manager/prompt.md +27 -0
  16. package/.kb/devkit/agents/release-manager/runbook.md +17 -0
  17. package/.kb/devkit/agents/test-generator/context.globs +7 -0
  18. package/.kb/devkit/agents/test-generator/prompt.md +27 -0
  19. package/.kb/devkit/agents/test-generator/runbook.md +18 -0
  20. package/CONTRIBUTING.md +90 -0
  21. package/IMPLEMENTATION_COMPLETE.md +416 -0
  22. package/LICENSE +186 -0
  23. package/README-TEMPLATE.md +179 -0
  24. package/README.md +306 -0
  25. package/docs/DOCUMENTATION.md +74 -0
  26. package/docs/adr/0000-template.md +49 -0
  27. package/docs/adr/0001-architecture-and-repository-layout.md +33 -0
  28. package/docs/adr/0002-plugins-and-extensibility.md +46 -0
  29. package/docs/adr/0003-package-and-module-boundaries.md +37 -0
  30. package/docs/adr/0004-versioning-and-release-policy.md +38 -0
  31. package/docs/adr/0005-use-devkit-for-shared-tooling.md +48 -0
  32. package/docs/adr/0006-adopt-devkit-sync.md +47 -0
  33. package/docs/adr/0007-drift-kit-check.md +72 -0
  34. package/docs/adr/0008-devkit-sync-wrapper-strategy.md +67 -0
  35. package/docs/naming-convention.md +272 -0
  36. package/eslint.config.js +27 -0
  37. package/kb-labs.config.json +5 -0
  38. package/package.json +84 -0
  39. package/package.json.bin +25 -0
  40. package/package.json.lib +30 -0
  41. package/packages/adapters-analytics-duckdb/package.json +54 -0
  42. package/packages/adapters-analytics-duckdb/scripts/migrate-from-jsonl.mjs +253 -0
  43. package/packages/adapters-analytics-duckdb/src/index.ts +380 -0
  44. package/packages/adapters-analytics-duckdb/src/manifest.ts +36 -0
  45. package/packages/adapters-analytics-duckdb/src/schema.ts +161 -0
  46. package/packages/adapters-analytics-duckdb/tsconfig.build.json +15 -0
  47. package/packages/adapters-analytics-duckdb/tsconfig.json +9 -0
  48. package/packages/adapters-analytics-duckdb/tsup.config.ts +9 -0
  49. package/packages/adapters-analytics-file/README.md +32 -0
  50. package/packages/adapters-analytics-file/eslint.config.js +27 -0
  51. package/packages/adapters-analytics-file/package.json +50 -0
  52. package/packages/adapters-analytics-file/src/__tests__/daily-stats.spec.ts +287 -0
  53. package/packages/adapters-analytics-file/src/__tests__/scoped-analytics.test.ts +233 -0
  54. package/packages/adapters-analytics-file/src/index.test.ts +214 -0
  55. package/packages/adapters-analytics-file/src/index.ts +830 -0
  56. package/packages/adapters-analytics-file/src/manifest.ts +45 -0
  57. package/packages/adapters-analytics-file/tsconfig.build.json +15 -0
  58. package/packages/adapters-analytics-file/tsconfig.json +9 -0
  59. package/packages/adapters-analytics-file/tsup.config.ts +9 -0
  60. package/packages/adapters-analytics-sqlite/package.json +55 -0
  61. package/packages/adapters-analytics-sqlite/scripts/migrate-from-jsonl.mjs +194 -0
  62. package/packages/adapters-analytics-sqlite/src/index.ts +460 -0
  63. package/packages/adapters-analytics-sqlite/src/manifest.ts +41 -0
  64. package/packages/adapters-analytics-sqlite/tsconfig.build.json +15 -0
  65. package/packages/adapters-analytics-sqlite/tsconfig.json +9 -0
  66. package/packages/adapters-analytics-sqlite/tsup.config.ts +9 -0
  67. package/packages/adapters-environment-docker/README.md +28 -0
  68. package/packages/adapters-environment-docker/eslint.config.js +5 -0
  69. package/packages/adapters-environment-docker/package.json +49 -0
  70. package/packages/adapters-environment-docker/src/index.test.ts +138 -0
  71. package/packages/adapters-environment-docker/src/index.ts +439 -0
  72. package/packages/adapters-environment-docker/src/manifest.ts +65 -0
  73. package/packages/adapters-environment-docker/tsconfig.build.json +15 -0
  74. package/packages/adapters-environment-docker/tsconfig.json +16 -0
  75. package/packages/adapters-environment-docker/tsup.config.ts +9 -0
  76. package/packages/adapters-eventbus-cache/README.md +242 -0
  77. package/packages/adapters-eventbus-cache/eslint.config.js +27 -0
  78. package/packages/adapters-eventbus-cache/package.json +46 -0
  79. package/packages/adapters-eventbus-cache/src/index.test.ts +235 -0
  80. package/packages/adapters-eventbus-cache/src/index.ts +215 -0
  81. package/packages/adapters-eventbus-cache/src/manifest.ts +50 -0
  82. package/packages/adapters-eventbus-cache/src/types.ts +58 -0
  83. package/packages/adapters-eventbus-cache/tsconfig.build.json +15 -0
  84. package/packages/adapters-eventbus-cache/tsconfig.json +9 -0
  85. package/packages/adapters-eventbus-cache/tsup.config.ts +9 -0
  86. package/packages/adapters-fs/README.md +171 -0
  87. package/packages/adapters-fs/allowed.txt +1 -0
  88. package/packages/adapters-fs/conflict.txt +1 -0
  89. package/packages/adapters-fs/dest.txt +1 -0
  90. package/packages/adapters-fs/eslint.config.js +27 -0
  91. package/packages/adapters-fs/exists.txt +1 -0
  92. package/packages/adapters-fs/not-allowed.txt +1 -0
  93. package/packages/adapters-fs/other.txt +1 -0
  94. package/packages/adapters-fs/package.json +55 -0
  95. package/packages/adapters-fs/public/file1.txt +1 -0
  96. package/packages/adapters-fs/public/file2.txt +1 -0
  97. package/packages/adapters-fs/secret.txt +1 -0
  98. package/packages/adapters-fs/secrets/key.txt +1 -0
  99. package/packages/adapters-fs/src/index.test.ts +243 -0
  100. package/packages/adapters-fs/src/index.ts +258 -0
  101. package/packages/adapters-fs/src/manifest.ts +35 -0
  102. package/packages/adapters-fs/src/secure-storage.test.ts +380 -0
  103. package/packages/adapters-fs/src/secure-storage.ts +268 -0
  104. package/packages/adapters-fs/test.json +1 -0
  105. package/packages/adapters-fs/test.txt +1 -0
  106. package/packages/adapters-fs/test.xyz +1 -0
  107. package/packages/adapters-fs/test1.txt +1 -0
  108. package/packages/adapters-fs/test2.txt +1 -0
  109. package/packages/adapters-fs/tsconfig.build.json +15 -0
  110. package/packages/adapters-fs/tsconfig.json +9 -0
  111. package/packages/adapters-fs/tsup.config.ts +8 -0
  112. package/packages/adapters-fs/vitest.config.ts +19 -0
  113. package/packages/adapters-log-ringbuffer/README.md +228 -0
  114. package/packages/adapters-log-ringbuffer/eslint.config.js +27 -0
  115. package/packages/adapters-log-ringbuffer/package.json +47 -0
  116. package/packages/adapters-log-ringbuffer/src/__tests__/ring-buffer.test.ts +450 -0
  117. package/packages/adapters-log-ringbuffer/src/index.ts +212 -0
  118. package/packages/adapters-log-ringbuffer/src/manifest.ts +30 -0
  119. package/packages/adapters-log-ringbuffer/tsconfig.build.json +15 -0
  120. package/packages/adapters-log-ringbuffer/tsconfig.json +9 -0
  121. package/packages/adapters-log-ringbuffer/tsup.config.ts +9 -0
  122. package/packages/adapters-log-ringbuffer/vitest.config.ts +14 -0
  123. package/packages/adapters-log-sqlite/README.md +396 -0
  124. package/packages/adapters-log-sqlite/eslint.config.js +27 -0
  125. package/packages/adapters-log-sqlite/package.json +49 -0
  126. package/packages/adapters-log-sqlite/src/__tests__/log-persistence.test.ts +718 -0
  127. package/packages/adapters-log-sqlite/src/index.ts +1068 -0
  128. package/packages/adapters-log-sqlite/src/manifest.ts +36 -0
  129. package/packages/adapters-log-sqlite/src/schema.sql +46 -0
  130. package/packages/adapters-log-sqlite/tsconfig.build.json +15 -0
  131. package/packages/adapters-log-sqlite/tsconfig.json +9 -0
  132. package/packages/adapters-log-sqlite/tsup.config.ts +9 -0
  133. package/packages/adapters-log-sqlite/vitest.config.ts +15 -0
  134. package/packages/adapters-mongodb/README.md +147 -0
  135. package/packages/adapters-mongodb/eslint.config.js +27 -0
  136. package/packages/adapters-mongodb/package.json +53 -0
  137. package/packages/adapters-mongodb/src/index.ts +428 -0
  138. package/packages/adapters-mongodb/src/manifest.ts +45 -0
  139. package/packages/adapters-mongodb/src/secure-document.ts +231 -0
  140. package/packages/adapters-mongodb/tsconfig.build.json +15 -0
  141. package/packages/adapters-mongodb/tsconfig.json +9 -0
  142. package/packages/adapters-mongodb/tsup.config.ts +8 -0
  143. package/packages/adapters-openai/README.md +151 -0
  144. package/packages/adapters-openai/embeddings.ts +37 -0
  145. package/packages/adapters-openai/eslint.config.js +26 -0
  146. package/packages/adapters-openai/index.ts +22 -0
  147. package/packages/adapters-openai/package.json +57 -0
  148. package/packages/adapters-openai/src/embeddings-manifest.ts +45 -0
  149. package/packages/adapters-openai/src/embeddings.ts +104 -0
  150. package/packages/adapters-openai/src/index.ts +13 -0
  151. package/packages/adapters-openai/src/llm.ts +304 -0
  152. package/packages/adapters-openai/src/manifest.ts +47 -0
  153. package/packages/adapters-openai/tsconfig.build.json +15 -0
  154. package/packages/adapters-openai/tsconfig.json +9 -0
  155. package/packages/adapters-openai/tsup.config.ts +8 -0
  156. package/packages/adapters-pino/README.md +152 -0
  157. package/packages/adapters-pino/eslint.config.js +27 -0
  158. package/packages/adapters-pino/package.json +49 -0
  159. package/packages/adapters-pino/src/index.test.ts +44 -0
  160. package/packages/adapters-pino/src/index.ts +322 -0
  161. package/packages/adapters-pino/src/log-ring-buffer.ts +142 -0
  162. package/packages/adapters-pino/src/manifest.ts +49 -0
  163. package/packages/adapters-pino/tsconfig.build.json +15 -0
  164. package/packages/adapters-pino/tsconfig.json +9 -0
  165. package/packages/adapters-pino/tsup.config.ts +9 -0
  166. package/packages/adapters-pino-http/README.md +141 -0
  167. package/packages/adapters-pino-http/eslint.config.js +27 -0
  168. package/packages/adapters-pino-http/package.json +46 -0
  169. package/packages/adapters-pino-http/src/index.ts +229 -0
  170. package/packages/adapters-pino-http/tsconfig.build.json +15 -0
  171. package/packages/adapters-pino-http/tsconfig.json +9 -0
  172. package/packages/adapters-pino-http/tsup.config.ts +9 -0
  173. package/packages/adapters-qdrant/README.md +166 -0
  174. package/packages/adapters-qdrant/eslint.config.js +27 -0
  175. package/packages/adapters-qdrant/package.json +49 -0
  176. package/packages/adapters-qdrant/src/index.ts +490 -0
  177. package/packages/adapters-qdrant/src/manifest.ts +54 -0
  178. package/packages/adapters-qdrant/src/retry.ts +204 -0
  179. package/packages/adapters-qdrant/tsconfig.build.json +15 -0
  180. package/packages/adapters-qdrant/tsconfig.json +9 -0
  181. package/packages/adapters-qdrant/tsup.config.ts +9 -0
  182. package/packages/adapters-redis/README.md +159 -0
  183. package/packages/adapters-redis/eslint.config.js +27 -0
  184. package/packages/adapters-redis/package.json +49 -0
  185. package/packages/adapters-redis/src/index.ts +164 -0
  186. package/packages/adapters-redis/src/manifest.ts +49 -0
  187. package/packages/adapters-redis/tsconfig.build.json +15 -0
  188. package/packages/adapters-redis/tsconfig.json +9 -0
  189. package/packages/adapters-redis/tsup.config.ts +9 -0
  190. package/packages/adapters-snapshot-localfs/README.md +10 -0
  191. package/packages/adapters-snapshot-localfs/eslint.config.js +2 -0
  192. package/packages/adapters-snapshot-localfs/package.json +46 -0
  193. package/packages/adapters-snapshot-localfs/src/index.test.ts +40 -0
  194. package/packages/adapters-snapshot-localfs/src/index.ts +292 -0
  195. package/packages/adapters-snapshot-localfs/src/manifest.ts +32 -0
  196. package/packages/adapters-snapshot-localfs/tsconfig.build.json +15 -0
  197. package/packages/adapters-snapshot-localfs/tsconfig.json +16 -0
  198. package/packages/adapters-snapshot-localfs/tsup.config.ts +11 -0
  199. package/packages/adapters-sqlite/README.md +163 -0
  200. package/packages/adapters-sqlite/eslint.config.js +27 -0
  201. package/packages/adapters-sqlite/package.json +54 -0
  202. package/packages/adapters-sqlite/src/index.test.ts +245 -0
  203. package/packages/adapters-sqlite/src/index.ts +382 -0
  204. package/packages/adapters-sqlite/src/manifest.ts +47 -0
  205. package/packages/adapters-sqlite/src/secure-sql.test.ts +290 -0
  206. package/packages/adapters-sqlite/src/secure-sql.ts +281 -0
  207. package/packages/adapters-sqlite/tsconfig.build.json +15 -0
  208. package/packages/adapters-sqlite/tsconfig.json +9 -0
  209. package/packages/adapters-sqlite/tsup.config.ts +8 -0
  210. package/packages/adapters-sqlite/vitest.config.ts +19 -0
  211. package/packages/adapters-transport/README.md +170 -0
  212. package/packages/adapters-transport/eslint.config.js +27 -0
  213. package/packages/adapters-transport/package.json +49 -0
  214. package/packages/adapters-transport/src/__tests__/unix-socket-server.test.ts +550 -0
  215. package/packages/adapters-transport/src/index.ts +101 -0
  216. package/packages/adapters-transport/src/ipc-transport.ts +228 -0
  217. package/packages/adapters-transport/src/transport.ts +224 -0
  218. package/packages/adapters-transport/src/types.ts +92 -0
  219. package/packages/adapters-transport/src/unix-socket-server.ts +193 -0
  220. package/packages/adapters-transport/src/unix-socket-transport.ts +280 -0
  221. package/packages/adapters-transport/tsconfig.build.json +15 -0
  222. package/packages/adapters-transport/tsconfig.json +9 -0
  223. package/packages/adapters-transport/tsup.config.ts +9 -0
  224. package/packages/adapters-vibeproxy/README.md +159 -0
  225. package/packages/adapters-vibeproxy/eslint.config.js +27 -0
  226. package/packages/adapters-vibeproxy/package.json +51 -0
  227. package/packages/adapters-vibeproxy/src/index.ts +13 -0
  228. package/packages/adapters-vibeproxy/src/llm.ts +437 -0
  229. package/packages/adapters-vibeproxy/src/manifest.ts +51 -0
  230. package/packages/adapters-vibeproxy/tsconfig.build.json +15 -0
  231. package/packages/adapters-vibeproxy/tsconfig.json +9 -0
  232. package/packages/adapters-vibeproxy/tsup.config.ts +8 -0
  233. package/packages/adapters-workspace-agent/package.json +46 -0
  234. package/packages/adapters-workspace-agent/src/__tests__/adapter.test.ts +212 -0
  235. package/packages/adapters-workspace-agent/src/index.ts +220 -0
  236. package/packages/adapters-workspace-agent/src/manifest.ts +36 -0
  237. package/packages/adapters-workspace-agent/tsconfig.build.json +15 -0
  238. package/packages/adapters-workspace-agent/tsconfig.json +16 -0
  239. package/packages/adapters-workspace-agent/tsup.config.ts +11 -0
  240. package/packages/adapters-workspace-localfs/README.md +9 -0
  241. package/packages/adapters-workspace-localfs/eslint.config.js +2 -0
  242. package/packages/adapters-workspace-localfs/package.json +46 -0
  243. package/packages/adapters-workspace-localfs/src/index.test.ts +27 -0
  244. package/packages/adapters-workspace-localfs/src/index.ts +172 -0
  245. package/packages/adapters-workspace-localfs/src/manifest.ts +32 -0
  246. package/packages/adapters-workspace-localfs/tsconfig.build.json +15 -0
  247. package/packages/adapters-workspace-localfs/tsconfig.json +16 -0
  248. package/packages/adapters-workspace-localfs/tsup.config.ts +11 -0
  249. package/packages/adapters-workspace-worktree/README.md +9 -0
  250. package/packages/adapters-workspace-worktree/eslint.config.js +2 -0
  251. package/packages/adapters-workspace-worktree/package.json +46 -0
  252. package/packages/adapters-workspace-worktree/src/index.test.ts +38 -0
  253. package/packages/adapters-workspace-worktree/src/index.ts +245 -0
  254. package/packages/adapters-workspace-worktree/src/manifest.ts +38 -0
  255. package/packages/adapters-workspace-worktree/tsconfig.build.json +15 -0
  256. package/packages/adapters-workspace-worktree/tsconfig.json +16 -0
  257. package/packages/adapters-workspace-worktree/tsup.config.ts +11 -0
  258. package/pnpm-workspace.yaml +2800 -0
  259. package/prettierrc.json +1 -0
  260. package/scripts/devkit-sync.mjs +37 -0
  261. package/scripts/hooks/post-push +9 -0
  262. package/scripts/hooks/pre-commit +9 -0
  263. package/scripts/hooks/pre-push +9 -0
  264. package/test-integration.ts +242 -0
  265. package/test.txt +1 -0
  266. package/tsconfig.base.json +6 -0
  267. package/tsconfig.build.json +15 -0
  268. package/tsconfig.json +9 -0
  269. package/tsconfig.paths.json +26 -0
  270. package/tsconfig.tools.json +17 -0
  271. package/tsup.config.bin.ts +34 -0
  272. package/tsup.config.cli.ts +41 -0
  273. package/tsup.config.dual.ts +46 -0
  274. package/tsup.config.ts +36 -0
  275. package/tsup.external.json +103 -0
  276. package/vitest.config.ts +2 -0
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "extends": "@kb-labs/devkit/tsconfig/node.json",
4
+ "compilerOptions": {
5
+ "rootDir": "src",
6
+ "outDir": "dist"
7
+ },
8
+ "include": ["src"]
9
+ }
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'tsup';
2
+ import nodePreset from '@kb-labs/devkit/tsup/node';
3
+
4
+ export default defineConfig({
5
+ ...nodePreset,
6
+ tsconfig: 'tsconfig.build.json',
7
+ dts: true,
8
+ });
@@ -0,0 +1,151 @@
1
+ # @kb-labs/adapters-openai
2
+
3
+ > Part of [KB Labs](https://github.com/KirillBaranov/kb-labs) ecosystem. Works exclusively within KB Labs platform.
4
+
5
+ OpenAI language model adapter supporting GPT-4, GPT-3.5, and other OpenAI models with streaming and function calling.
6
+
7
+ ## Overview
8
+
9
+ | Property | Value |
10
+ |----------|-------|
11
+ | **Implements** | `ILLM` |
12
+ | **Type** | `core` |
13
+ | **Requires** | None |
14
+ | **Category** | AI |
15
+
16
+ ## Features
17
+
18
+ - **Multiple Models** - GPT-4, GPT-4 Turbo, GPT-3.5 Turbo
19
+ - **Streaming Support** - Real-time token streaming
20
+ - **Function Calling** - Native tool/function support
21
+ - **Configurable** - Temperature, max tokens, and more
22
+
23
+ ## Installation
24
+
25
+ ```bash
26
+ pnpm add @kb-labs/adapters-openai
27
+ ```
28
+
29
+ ## Configuration
30
+
31
+ Add to your `kb.config.json`:
32
+
33
+ ```json
34
+ {
35
+ "platform": {
36
+ "adapters": {
37
+ "llm": "@kb-labs/adapters-openai"
38
+ },
39
+ "adapterOptions": {
40
+ "llm": {
41
+ "apiKey": "${OPENAI_API_KEY}",
42
+ "model": "gpt-4-turbo",
43
+ "temperature": 0.7
44
+ }
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ ### Options
51
+
52
+ | Option | Type | Default | Description |
53
+ |--------|------|---------|-------------|
54
+ | `apiKey` | `string` | - | OpenAI API key |
55
+ | `model` | `string` | `"gpt-4-turbo"` | Model to use |
56
+ | `temperature` | `number` | `0.7` | Sampling temperature (0.0 to 2.0) |
57
+ | `maxTokens` | `number` | - | Maximum tokens to generate |
58
+
59
+ ## Usage
60
+
61
+ ### Via Platform (Recommended)
62
+
63
+ ```typescript
64
+ import { usePlatform } from '@kb-labs/sdk';
65
+
66
+ const platform = usePlatform();
67
+
68
+ // Simple chat
69
+ const response = await platform.llm.chat([
70
+ { role: 'user', content: 'Hello!' }
71
+ ]);
72
+
73
+ // Streaming
74
+ for await (const chunk of platform.llm.stream([
75
+ { role: 'user', content: 'Tell me a story' }
76
+ ])) {
77
+ process.stdout.write(chunk.content);
78
+ }
79
+
80
+ // With function calling
81
+ const result = await platform.llm.chatWithTools(
82
+ [{ role: 'user', content: 'What is the weather?' }],
83
+ [{ name: 'getWeather', parameters: { ... } }]
84
+ );
85
+ ```
86
+
87
+ ### Standalone (Testing/Development)
88
+
89
+ ```typescript
90
+ import { createAdapter } from '@kb-labs/adapters-openai';
91
+
92
+ const llm = createAdapter({
93
+ apiKey: process.env.OPENAI_API_KEY,
94
+ model: 'gpt-4-turbo'
95
+ });
96
+
97
+ const response = await llm.chat([
98
+ { role: 'user', content: 'Hello!' }
99
+ ]);
100
+ ```
101
+
102
+ ## Adapter Manifest
103
+
104
+ ```typescript
105
+ {
106
+ id: 'openai-llm',
107
+ name: 'OpenAI LLM',
108
+ version: '1.0.0',
109
+ implements: 'ILLM',
110
+ capabilities: {
111
+ streaming: true,
112
+ custom: {
113
+ functionCalling: true,
114
+ },
115
+ },
116
+ }
117
+ ```
118
+
119
+ ## FAQ
120
+
121
+ <details>
122
+ <summary><strong>Q: How do I switch models?</strong></summary>
123
+
124
+ Change the `model` option:
125
+
126
+ ```json
127
+ {
128
+ "adapterOptions": {
129
+ "llm": {
130
+ "model": "gpt-3.5-turbo"
131
+ }
132
+ }
133
+ }
134
+ ```
135
+ </details>
136
+
137
+ <details>
138
+ <summary><strong>Q: How do I handle rate limits?</strong></summary>
139
+
140
+ The adapter includes automatic retry with exponential backoff. For high-volume usage, consider using OpenAI's usage tiers or implement request queuing.
141
+ </details>
142
+
143
+ ## Related Adapters
144
+
145
+ | Adapter | Use Case |
146
+ |---------|----------|
147
+ | `@kb-labs/adapters-vibeproxy` | Local multi-provider proxy (Claude, GPT, etc.) |
148
+
149
+ ## License
150
+
151
+ [KB Public License v1.1](../../LICENSE) - KB Labs Team
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module @kb-labs/adapters-openai/embeddings
3
+ * OpenAI embeddings adapter entry point.
4
+ *
5
+ * This file provides a separate entry point for the embeddings adapter,
6
+ * allowing it to be loaded independently from the LLM adapter.
7
+ *
8
+ * @example
9
+ * ```json
10
+ * // In kb.config.json
11
+ * {
12
+ * "platform": {
13
+ * "adapters": {
14
+ * "embeddings": "@kb-labs/adapters-openai/embeddings"
15
+ * }
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+
21
+ import { OpenAIEmbeddings, type OpenAIEmbeddingsConfig } from './src/embeddings.js';
22
+
23
+ // Re-export manifest
24
+ export { manifest } from './src/embeddings-manifest.js';
25
+
26
+ // Re-export types and class
27
+ export { OpenAIEmbeddings, type OpenAIEmbeddingsConfig, EMBEDDING_MODELS, type EmbeddingModel } from './src/embeddings.js';
28
+
29
+ /**
30
+ * Create OpenAI embeddings adapter.
31
+ */
32
+ export function createAdapter(config?: OpenAIEmbeddingsConfig): OpenAIEmbeddings {
33
+ return new OpenAIEmbeddings(config);
34
+ }
35
+
36
+ // Default export
37
+ export default createAdapter;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Standard ESLint configuration template
3
+ *
4
+ * This is the canonical template for all @kb-labs packages.
5
+ * DO NOT modify this file locally - it is synced from @kb-labs/devkit
6
+ *
7
+ * Customization guidelines:
8
+ * - DevKit preset already includes all standard ignores
9
+ * - Only add project-specific ignores if absolutely necessary
10
+ * - Document why custom ignores are needed
11
+ *
12
+ * @see https://github.com/kb-labs/devkit#eslint-configuration
13
+ */
14
+ import nodePreset from '@kb-labs/devkit/eslint/node.js';
15
+
16
+ export default [
17
+ ...nodePreset,
18
+
19
+ // Project-specific ignores
20
+ {
21
+ ignores: [
22
+ // Ignore tsup bundled config files
23
+ '**/*.bundled_*.mjs',
24
+ ]
25
+ }
26
+ ];
@@ -0,0 +1,22 @@
1
+ /**
2
+ * OpenAI LLM adapter entry point.
3
+ * Re-exports from src/ for clean dist structure.
4
+ */
5
+
6
+ import { OpenAILLM, type OpenAILLMConfig } from './src/index.js';
7
+
8
+ // Re-export manifest
9
+ export { manifest } from './src/manifest.js';
10
+
11
+ // Re-export types and class
12
+ export { OpenAILLM, type OpenAILLMConfig } from './src/index.js';
13
+
14
+ /**
15
+ * Create OpenAI LLM adapter.
16
+ */
17
+ export function createAdapter(config?: OpenAILLMConfig): OpenAILLM {
18
+ return new OpenAILLM(config);
19
+ }
20
+
21
+ // Default export
22
+ export default createAdapter;
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@kb-labs/adapters-openai",
3
+ "version": "0.5.0",
4
+ "description": "OpenAI adapter implementing ILLM and IEmbeddings interfaces",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./llm": {
14
+ "import": "./dist/llm.js",
15
+ "types": "./dist/llm.d.ts"
16
+ },
17
+ "./embeddings": {
18
+ "import": "./dist/embeddings.js",
19
+ "types": "./dist/embeddings.d.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "sideEffects": false,
27
+ "scripts": {
28
+ "clean": "rimraf dist",
29
+ "build": "tsup",
30
+ "dev": "tsup --watch",
31
+ "type-check": "tsc --noEmit",
32
+ "test": "vitest run --passWithNoTests",
33
+ "test:watch": "vitest",
34
+ "lint": "eslint src --ext .ts",
35
+ "lint:fix": "eslint . --fix"
36
+ },
37
+ "dependencies": {
38
+ "openai": "^4.104.0"
39
+ },
40
+ "peerDependencies": {
41
+ "@kb-labs/core-platform": "*"
42
+ },
43
+ "devDependencies": {
44
+ "@kb-labs/core-platform": "link:../../../../platform/kb-labs-core/packages/core-platform",
45
+ "@types/node": "^24.3.3",
46
+ "eslint": "^9",
47
+ "tsup": "^8.5.0",
48
+ "typescript": "^5.6.3",
49
+ "vitest": "^3.2.4",
50
+ "@kb-labs/devkit": "link:../../../kb-labs-devkit",
51
+ "rimraf": "^6.0.1"
52
+ },
53
+ "engines": {
54
+ "node": ">=20.0.0",
55
+ "pnpm": ">=9.0.0"
56
+ }
57
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @module @kb-labs/adapters-openai/embeddings-manifest
3
+ * Adapter manifest for OpenAI embeddings.
4
+ */
5
+
6
+ import type { AdapterManifest } from "@kb-labs/core-platform";
7
+
8
+ /**
9
+ * Adapter manifest for OpenAI embeddings.
10
+ */
11
+ export const manifest: AdapterManifest = {
12
+ manifestVersion: "1.0.0",
13
+ id: "openai-embeddings",
14
+ name: "OpenAI Embeddings",
15
+ version: "1.0.0",
16
+ description:
17
+ "OpenAI text embeddings adapter (text-embedding-3-small, text-embedding-3-large, etc.)",
18
+ author: "KB Labs",
19
+ license: "MIT",
20
+ type: "core",
21
+ implements: "IEmbeddings",
22
+ capabilities: {
23
+ batch: true,
24
+ },
25
+ configSchema: {
26
+ apiKey: {
27
+ type: "string",
28
+ description: "OpenAI API key (defaults to OPENAI_API_KEY env var)",
29
+ },
30
+ model: {
31
+ type: "string",
32
+ default: "text-embedding-3-small",
33
+ description: "Embedding model to use",
34
+ enum: [
35
+ "text-embedding-3-small",
36
+ "text-embedding-3-large",
37
+ "text-embedding-ada-002",
38
+ ],
39
+ },
40
+ dimensions: {
41
+ type: "number",
42
+ description: "Number of dimensions (for v3 models)",
43
+ },
44
+ },
45
+ };
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @module @kb-labs/adapters-openai/embeddings
3
+ * OpenAI implementation of IEmbeddings interface.
4
+ */
5
+
6
+ import OpenAI from "openai";
7
+ import type { IEmbeddings } from "@kb-labs/core-platform";
8
+
9
+ /**
10
+ * Supported OpenAI embedding models and their dimensions.
11
+ */
12
+ export const EMBEDDING_MODELS = {
13
+ "text-embedding-3-small": 1536,
14
+ "text-embedding-3-large": 3072,
15
+ "text-embedding-ada-002": 1536,
16
+ } as const;
17
+
18
+ export type EmbeddingModel = keyof typeof EMBEDDING_MODELS;
19
+
20
+ /**
21
+ * Configuration for OpenAI embeddings adapter.
22
+ */
23
+ export interface OpenAIEmbeddingsConfig {
24
+ /** OpenAI API key (defaults to OPENAI_API_KEY env var) */
25
+ apiKey?: string;
26
+ /** Base URL for API (optional, for proxies or Azure) */
27
+ baseURL?: string;
28
+ /** Embedding model to use */
29
+ model?: EmbeddingModel;
30
+ /** Organization ID (optional) */
31
+ organization?: string;
32
+ }
33
+
34
+ /**
35
+ * OpenAI implementation of IEmbeddings interface.
36
+ */
37
+ export class OpenAIEmbeddings implements IEmbeddings {
38
+ private client: OpenAI;
39
+ private model: EmbeddingModel;
40
+ readonly dimensions: number;
41
+
42
+ constructor(config: OpenAIEmbeddingsConfig = {}) {
43
+ this.client = new OpenAI({
44
+ apiKey: config.apiKey ?? process.env.OPENAI_API_KEY,
45
+ baseURL: config.baseURL,
46
+ organization: config.organization,
47
+ });
48
+ this.model = config.model ?? "text-embedding-3-small";
49
+ this.dimensions = EMBEDDING_MODELS[this.model];
50
+ }
51
+
52
+ async embed(text: string): Promise<number[]> {
53
+ const response = await this.client.embeddings.create({
54
+ model: this.model,
55
+ input: text,
56
+ });
57
+
58
+ const first = response.data[0];
59
+ if (!first) {
60
+ throw new Error("OpenAI embeddings API returned empty response");
61
+ }
62
+ return first.embedding;
63
+ }
64
+
65
+ async embedBatch(texts: string[]): Promise<number[][]> {
66
+ if (texts.length === 0) {
67
+ return [];
68
+ }
69
+
70
+ // OpenAI supports batching natively
71
+ const response = await this.client.embeddings.create({
72
+ model: this.model,
73
+ input: texts,
74
+ });
75
+
76
+ // Sort by index to maintain order
77
+ const sorted = response.data.sort((a, b) => a.index - b.index);
78
+ return sorted.map((item) => item.embedding);
79
+ }
80
+
81
+ /**
82
+ * Get the dimensions of the embeddings.
83
+ * This method is needed for IPC/Unix Socket transport to access the dimensions property.
84
+ */
85
+ async getDimensions(): Promise<number> {
86
+ return this.dimensions;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Create OpenAI embeddings adapter.
92
+ * This is the factory function called by initPlatform() when loading adapters.
93
+ */
94
+ export function createAdapter(
95
+ config?: OpenAIEmbeddingsConfig,
96
+ ): OpenAIEmbeddings {
97
+ return new OpenAIEmbeddings(config);
98
+ }
99
+
100
+ // Re-export manifest for adapter loading
101
+ export { manifest } from "./embeddings-manifest.js";
102
+
103
+ // Default export for direct import
104
+ export default createAdapter;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module @kb-labs/adapters-openai
3
+ * OpenAI LLM adapter entry point.
4
+ */
5
+
6
+ // Re-export LLM adapter as default
7
+ export { OpenAILLM, type OpenAILLMConfig, createAdapter } from "./llm.js";
8
+
9
+ // Re-export manifest
10
+ export { manifest } from "./manifest.js";
11
+
12
+ // Default export
13
+ export { createAdapter as default } from "./llm.js";