@opensaas/stack-rag 0.1.6 → 0.3.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 (95) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +141 -0
  3. package/README.md +82 -6
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/index.js +9 -0
  6. package/dist/config/index.js.map +1 -1
  7. package/dist/config/plugin.d.ts.map +1 -1
  8. package/dist/config/plugin.js +61 -1
  9. package/dist/config/plugin.js.map +1 -1
  10. package/dist/config/plugin.test.js +70 -14
  11. package/dist/config/plugin.test.js.map +1 -1
  12. package/dist/config/types.d.ts +186 -0
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/fields/index.d.ts +1 -0
  15. package/dist/fields/index.d.ts.map +1 -1
  16. package/dist/fields/index.js +1 -0
  17. package/dist/fields/index.js.map +1 -1
  18. package/dist/fields/searchable.d.ts +42 -0
  19. package/dist/fields/searchable.d.ts.map +1 -0
  20. package/dist/fields/searchable.js +51 -0
  21. package/dist/fields/searchable.js.map +1 -0
  22. package/dist/fields/searchable.test.d.ts +2 -0
  23. package/dist/fields/searchable.test.d.ts.map +1 -0
  24. package/dist/fields/searchable.test.js +112 -0
  25. package/dist/fields/searchable.test.js.map +1 -0
  26. package/dist/index.d.ts +2 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/providers/openai.d.ts +2 -0
  29. package/dist/providers/openai.d.ts.map +1 -1
  30. package/dist/providers/openai.js +35 -20
  31. package/dist/providers/openai.js.map +1 -1
  32. package/dist/runtime/batch.test.js +1 -1
  33. package/dist/runtime/build-time.d.ts +100 -0
  34. package/dist/runtime/build-time.d.ts.map +1 -0
  35. package/dist/runtime/build-time.js +185 -0
  36. package/dist/runtime/build-time.js.map +1 -0
  37. package/dist/runtime/index.d.ts +3 -0
  38. package/dist/runtime/index.d.ts.map +1 -1
  39. package/dist/runtime/index.js +6 -0
  40. package/dist/runtime/index.js.map +1 -1
  41. package/dist/runtime/markdown.d.ts +33 -0
  42. package/dist/runtime/markdown.d.ts.map +1 -0
  43. package/dist/runtime/markdown.js +94 -0
  44. package/dist/runtime/markdown.js.map +1 -0
  45. package/dist/runtime/provider-helpers.d.ts +56 -0
  46. package/dist/runtime/provider-helpers.d.ts.map +1 -0
  47. package/dist/runtime/provider-helpers.js +95 -0
  48. package/dist/runtime/provider-helpers.js.map +1 -0
  49. package/dist/runtime/types.d.ts +29 -0
  50. package/dist/runtime/types.d.ts.map +1 -0
  51. package/dist/runtime/types.js +6 -0
  52. package/dist/runtime/types.js.map +1 -0
  53. package/dist/storage/access-filter.d.ts +30 -0
  54. package/dist/storage/access-filter.d.ts.map +1 -0
  55. package/dist/storage/access-filter.js +241 -0
  56. package/dist/storage/access-filter.js.map +1 -0
  57. package/dist/storage/index.d.ts +2 -0
  58. package/dist/storage/index.d.ts.map +1 -1
  59. package/dist/storage/index.js +3 -0
  60. package/dist/storage/index.js.map +1 -1
  61. package/dist/storage/json-file.d.ts +53 -0
  62. package/dist/storage/json-file.d.ts.map +1 -0
  63. package/dist/storage/json-file.js +124 -0
  64. package/dist/storage/json-file.js.map +1 -0
  65. package/dist/storage/pgvector.d.ts.map +1 -1
  66. package/dist/storage/pgvector.js +26 -11
  67. package/dist/storage/pgvector.js.map +1 -1
  68. package/dist/storage/storage.test.js +2 -0
  69. package/dist/storage/storage.test.js.map +1 -1
  70. package/dist/storage/types.d.ts +5 -0
  71. package/dist/storage/types.d.ts.map +1 -1
  72. package/dist/storage/types.js.map +1 -1
  73. package/package.json +6 -5
  74. package/src/config/index.ts +9 -0
  75. package/src/config/plugin.test.ts +70 -14
  76. package/src/config/plugin.ts +72 -2
  77. package/src/config/types.ts +217 -0
  78. package/src/fields/index.ts +2 -0
  79. package/src/fields/searchable.test.ts +136 -0
  80. package/src/fields/searchable.ts +57 -0
  81. package/src/index.ts +6 -0
  82. package/src/providers/openai.ts +37 -22
  83. package/src/runtime/batch.test.ts +1 -1
  84. package/src/runtime/build-time.ts +216 -0
  85. package/src/runtime/index.ts +18 -0
  86. package/src/runtime/markdown.ts +119 -0
  87. package/src/runtime/provider-helpers.ts +115 -0
  88. package/src/runtime/types.ts +30 -0
  89. package/src/storage/access-filter.ts +303 -0
  90. package/src/storage/index.ts +4 -0
  91. package/src/storage/json-file.ts +157 -0
  92. package/src/storage/pgvector.ts +31 -11
  93. package/src/storage/storage.test.ts +2 -0
  94. package/src/storage/types.ts +6 -0
  95. package/tsconfig.tsbuildinfo +1 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > @opensaas/stack-rag@0.1.6 build /home/runner/work/stack/stack/packages/rag
2
+ > @opensaas/stack-rag@0.3.0 build /home/runner/work/stack/stack/packages/rag
3
3
  > tsc
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,146 @@
1
1
  # @opensaas/stack-rag
2
2
 
3
+ ## 0.3.0
4
+
5
+ ## 0.2.0
6
+
7
+ ### Patch Changes
8
+
9
+ - [#132](https://github.com/OpenSaasAU/stack/pull/132) [`fcf5cb8`](https://github.com/OpenSaasAU/stack/commit/fcf5cb8bbd55d802350b8d97e342dd7f6368163b) Thanks [@borisno2](https://github.com/borisno2)! - Upgrade to Prisma 7 with database adapter support
10
+
11
+ ## Breaking Changes
12
+
13
+ ### Required `prismaClientConstructor`
14
+
15
+ Prisma 7 requires database adapters. All configs must now include `prismaClientConstructor`:
16
+
17
+ ```typescript
18
+ import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3'
19
+ import Database from 'better-sqlite3'
20
+
21
+ export default config({
22
+ db: {
23
+ provider: 'sqlite',
24
+ prismaClientConstructor: (PrismaClient) => {
25
+ const db = new Database(process.env.DATABASE_URL || './dev.db')
26
+ const adapter = new PrismaBetterSQLite3(db)
27
+ return new PrismaClient({ adapter })
28
+ },
29
+ },
30
+ })
31
+ ```
32
+
33
+ ### Removed `url` from `DatabaseConfig`
34
+
35
+ The `url` field has been removed from the `DatabaseConfig` type. Database connection URLs are now passed directly to adapters in `prismaClientConstructor`:
36
+
37
+ ```typescript
38
+ // ❌ Before (Prisma 6)
39
+ db: {
40
+ provider: 'sqlite',
41
+ url: 'file:./dev.db', // url in config
42
+ }
43
+
44
+ // ✅ After (Prisma 7)
45
+ db: {
46
+ provider: 'sqlite',
47
+ prismaClientConstructor: (PrismaClient) => {
48
+ const adapter = new PrismaBetterSQLite3({ url: './dev.db' }) // url in adapter
49
+ return new PrismaClient({ adapter })
50
+ },
51
+ }
52
+ ```
53
+
54
+ ### Generated Schema Changes
55
+ - Generator provider changed from `prisma-client-js` to `prisma-client`
56
+ - Removed `url` field from datasource block
57
+ - Database URL now passed via adapter in `prismaClientConstructor`
58
+
59
+ ### Required Dependencies
60
+
61
+ Install the appropriate adapter for your database:
62
+ - **SQLite**: `@prisma/adapter-better-sqlite3` + `better-sqlite3`
63
+ - **PostgreSQL**: `@prisma/adapter-pg` + `pg`
64
+ - **MySQL**: `@prisma/adapter-mysql` + `mysql2`
65
+
66
+ ## Migration Steps
67
+ 1. Install Prisma 7 and adapter:
68
+
69
+ ```bash
70
+ pnpm add @prisma/client@7 @prisma/adapter-better-sqlite3 better-sqlite3
71
+ pnpm add -D prisma@7
72
+ ```
73
+
74
+ 2. Update your `opensaas.config.ts` to include `prismaClientConstructor` (see example above)
75
+ 3. Regenerate schema and client:
76
+
77
+ ```bash
78
+ pnpm generate
79
+ npx prisma generate
80
+ ```
81
+
82
+ 4. Push schema to database:
83
+ ```bash
84
+ pnpm db:push
85
+ ```
86
+
87
+ See the updated documentation in CLAUDE.md for more examples including PostgreSQL and custom adapters.
88
+
89
+ - [#107](https://github.com/OpenSaasAU/stack/pull/107) [`f4f3966`](https://github.com/OpenSaasAU/stack/commit/f4f3966faedba07d2cf412fab826d81e30c63a6c) Thanks [@borisno2](https://github.com/borisno2)! - Add strict typing for plugin runtime services
90
+
91
+ This change implements fully typed plugin runtime services, providing autocomplete and type safety for `context.plugins` throughout the codebase.
92
+
93
+ **Core Changes:**
94
+ - Extended `Plugin` type with optional `runtimeServiceTypes` metadata for type-safe code generation
95
+ - Converted `OpenSaasConfig` and `AccessContext` from `type` to `interface` to enable module augmentation
96
+ - Plugins can now declare their runtime service type information
97
+
98
+ **Auth Plugin:**
99
+ - Added `AuthRuntimeServices` interface defining runtime service types
100
+ - Exported runtime types from package
101
+ - Users now get full autocomplete for `context.plugins.auth.getUser()` and `context.plugins.auth.getCurrentUser()`
102
+
103
+ **RAG Plugin:**
104
+ - Added `RAGRuntimeServices` interface defining runtime service types
105
+ - Exported runtime types from package
106
+ - Users now get full autocomplete for `context.plugins.rag.generateEmbedding()` and `context.plugins.rag.generateEmbeddings()`
107
+
108
+ **CLI Generator:**
109
+ - Enhanced plugin types generator to import and use plugin runtime service types
110
+ - Generated `.opensaas/plugin-types.ts` now includes proper type imports
111
+ - `PluginServices` interface extends `Record<string, Record<string, any> | undefined>` for type compatibility
112
+ - Maintains backwards compatibility with plugins that don't provide type metadata
113
+
114
+ **UI Package:**
115
+ - Updated `AdminUI` props to accept contexts with typed plugin services
116
+ - Ensures compatibility between generated context types and UI components
117
+
118
+ **Benefits:**
119
+ - Full TypeScript autocomplete for all plugin runtime methods
120
+ - Compile-time type checking catches errors early
121
+ - Better IDE experience with hover documentation and jump-to-definition
122
+ - Backwards compatible - third-party plugins without type metadata continue to work
123
+ - Zero type errors in examples
124
+
125
+ **Example:**
126
+
127
+ ```typescript
128
+ const context = await getContext()
129
+
130
+ // Fully typed with autocomplete
131
+ context.plugins.auth.getUser('123') // (userId: string) => Promise<unknown>
132
+ context.plugins.rag.generateEmbedding('text') // (text: string, providerName?: string) => Promise<number[]>
133
+ ```
134
+
135
+ ## 0.1.7
136
+
137
+ ### Patch Changes
138
+
139
+ - 372d467: Add `searchable` helper functions to embeddings
140
+ - 372d467: Add sudo to context to bypass access control
141
+ - Updated dependencies [372d467]
142
+ - @opensaas/stack-core@0.1.7
143
+
3
144
  ## 0.1.6
4
145
 
5
146
  ### Patch Changes
package/README.md CHANGED
@@ -35,7 +35,7 @@ pnpm add openai # For OpenAI embeddings
35
35
  import { config, list } from '@opensaas/stack-core'
36
36
  import { text } from '@opensaas/stack-core/fields'
37
37
  import { ragPlugin, openaiEmbeddings, pgvectorStorage } from '@opensaas/stack-rag'
38
- import { embedding } from '@opensaas/stack-rag/fields'
38
+ import { searchable } from '@opensaas/stack-rag/fields'
39
39
 
40
40
  export default config({
41
41
  plugins: [
@@ -55,13 +55,10 @@ export default config({
55
55
  Article: list({
56
56
  fields: {
57
57
  title: text({ validation: { isRequired: true } }),
58
- content: text({ validation: { isRequired: true } }),
59
- // Embedding field with automatic generation
60
- contentEmbedding: embedding({
61
- sourceField: 'content', // Auto-embed when content changes
58
+ // Use searchable() wrapper for automatic embedding generation
59
+ content: searchable(text({ validation: { isRequired: true } }), {
62
60
  provider: 'openai',
63
61
  dimensions: 1536,
64
- autoGenerate: true,
65
62
  }),
66
63
  },
67
64
  }),
@@ -69,6 +66,12 @@ export default config({
69
66
  })
70
67
  ```
71
68
 
69
+ **What's happening:**
70
+
71
+ - The `searchable()` wrapper automatically creates a `contentEmbedding` field
72
+ - Embeddings are auto-generated whenever `content` changes
73
+ - The embedding field respects all your existing access control rules
74
+
72
75
  ### 2. Generate schema and push to database
73
76
 
74
77
  ```bash
@@ -182,6 +185,79 @@ Good for SQLite-based apps. Requires sqlite-vss extension.
182
185
  storage: sqliteVssStorage({ distanceFunction: 'cosine' })
183
186
  ```
184
187
 
188
+ ## Field Configuration Patterns
189
+
190
+ ### High-Level: `searchable()` Wrapper (Recommended)
191
+
192
+ The easiest way to add semantic search to any field:
193
+
194
+ ```typescript
195
+ import { searchable } from '@opensaas/stack-rag/fields'
196
+
197
+ fields: {
198
+ content: searchable(text({ validation: { isRequired: true } }), {
199
+ provider: 'openai',
200
+ dimensions: 1536,
201
+ })
202
+ }
203
+ ```
204
+
205
+ **What it does:**
206
+
207
+ - Automatically creates a companion `contentEmbedding` field
208
+ - Links it to the source field (`content`)
209
+ - Auto-generates embeddings when content changes
210
+ - Clean, concise syntax
211
+
212
+ **Options:**
213
+
214
+ ```typescript
215
+ type SearchableOptions = {
216
+ provider?: string // Embedding provider (e.g., 'openai', 'ollama')
217
+ dimensions?: number // Vector dimensions (default: 1536)
218
+ chunking?: ChunkingConfig // Text chunking configuration
219
+ embeddingFieldName?: string // Custom embedding field name (default: `${fieldName}Embedding`)
220
+ }
221
+ ```
222
+
223
+ **Custom embedding field name:**
224
+
225
+ ```typescript
226
+ fields: {
227
+ body: searchable(text(), {
228
+ provider: 'openai',
229
+ embeddingFieldName: 'bodyVector', // Instead of 'bodyEmbedding'
230
+ })
231
+ }
232
+ ```
233
+
234
+ ### Low-Level: Manual `embedding()` Field
235
+
236
+ For advanced use cases where you need more control:
237
+
238
+ ```typescript
239
+ import { embedding } from '@opensaas/stack-rag/fields'
240
+
241
+ fields: {
242
+ content: text({ validation: { isRequired: true } }),
243
+ contentEmbedding: embedding({
244
+ sourceField: 'content',
245
+ provider: 'openai',
246
+ dimensions: 1536,
247
+ autoGenerate: true,
248
+ })
249
+ }
250
+ ```
251
+
252
+ **When to use manual pattern:**
253
+
254
+ - Need access to the embedding field in your schema
255
+ - Want to store embeddings without a source field
256
+ - Building custom embedding pipelines
257
+ - Need field-level hooks on the embedding field
258
+
259
+ Both patterns are fully supported and can be used interchangeably.
260
+
185
261
  ## MCP Integration
186
262
 
187
263
  Automatic semantic search tools for AI assistants:
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,mBAAmB,CAczE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAC1C,qBAAqB,CAKvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAC3C,qBAAqB,CAMvB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE;IACvC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe,CAAA;CACrD,GAAG,mBAAmB,CAKtB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE;IACxC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CACnC,GAAG,mBAAmB,CAKtB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,mBAAmB,CAEjD;AAED,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAA;AAC9C,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,mBAAmB,CAuBzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAC1C,qBAAqB,CAKvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAC3C,qBAAqB,CAMvB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE;IACvC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe,CAAA;CACrD,GAAG,mBAAmB,CAKtB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE;IACxC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CACnC,GAAG,mBAAmB,CAKtB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,mBAAmB,CAEjD;AAED,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAA;AAC9C,cAAc,YAAY,CAAA"}
@@ -11,6 +11,15 @@ export function normalizeRAGConfig(config) {
11
11
  maxTokens: config.chunking?.maxTokens || 500,
12
12
  overlap: config.chunking?.overlap || 50,
13
13
  },
14
+ buildTime: config.buildTime
15
+ ? {
16
+ enabled: config.buildTime.enabled,
17
+ outputPath: config.buildTime.outputPath || '.embeddings/embeddings.json',
18
+ chunkSize: config.buildTime.chunkSize || 500,
19
+ chunkOverlap: config.buildTime.chunkOverlap || 50,
20
+ differential: config.buildTime.differential ?? true,
21
+ }
22
+ : null,
14
23
  enableMcpTools: config.enableMcpTools ?? true,
15
24
  batchSize: config.batchSize || 10,
16
25
  rateLimit: config.rateLimit || 100,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3C,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,WAAW;YAClD,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,GAAG;YAC5C,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;SACxC;QACD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG;KACnC,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA2C;IAE3C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,MAAM;KACV,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA4C;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,wBAAwB;QACpD,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,kBAAkB;KAC3C,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAE/B;IACC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,QAAQ;KACvD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAEhC;IACC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,QAAQ;KACvD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC;AAGD,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3C,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,WAAW;YAClD,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,GAAG;YAC5C,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;SACxC;QACD,SAAS,EAAE,MAAM,CAAC,SAAS;YACzB,CAAC,CAAC;gBACE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;gBACjC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,6BAA6B;gBACxE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG;gBAC5C,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE;gBACjD,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI;aACpD;YACH,CAAC,CAAC,IAAI;QACR,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG;KACnC,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA2C;IAE3C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,MAAM;KACV,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA4C;IAE5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,wBAAwB;QACpD,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,kBAAkB;KAC3C,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAE/B;IACC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,QAAQ;KACvD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAEhC;IACC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,QAAQ;KACvD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC;AAGD,cAAc,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/config/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,YAAY,CAAA;AAIhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAkLnD"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/config/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAA2C,MAAM,YAAY,CAAA;AAKpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAuPnD"}
@@ -1,5 +1,6 @@
1
1
  import { normalizeRAGConfig } from './index.js';
2
2
  import { createEmbeddingProvider } from '../providers/index.js';
3
+ import { embedding } from '../fields/embedding.js';
3
4
  /**
4
5
  * RAG plugin for OpenSaas Stack
5
6
  * Provides vector embeddings, semantic search, and automatic embedding generation
@@ -39,8 +40,39 @@ export function ragPlugin(config) {
39
40
  return {
40
41
  name: 'rag',
41
42
  version: '0.1.0',
43
+ runtimeServiceTypes: {
44
+ import: "import type { RAGRuntimeServices } from '@opensaas/stack-rag'",
45
+ typeName: 'RAGRuntimeServices',
46
+ },
42
47
  init: async (context) => {
43
- // Find all embedding fields with autoGenerate enabled
48
+ // First pass: Scan for searchable() wrapped fields and inject embedding fields
49
+ for (const [listName, listConfig] of Object.entries(context.config.lists)) {
50
+ const embeddingFieldsToInject = {};
51
+ for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
52
+ // Check if field has _searchable metadata
53
+ if ('_searchable' in fieldConfig) {
54
+ const meta = fieldConfig._searchable;
55
+ // Determine embedding field name
56
+ const embeddingName = meta.embeddingFieldName || `${fieldName}Embedding`;
57
+ // Create embedding field
58
+ embeddingFieldsToInject[embeddingName] = embedding({
59
+ sourceField: fieldName,
60
+ provider: meta.provider,
61
+ dimensions: meta.dimensions,
62
+ chunking: meta.chunking,
63
+ autoGenerate: true,
64
+ });
65
+ }
66
+ }
67
+ // Inject all embedding fields at once
68
+ if (Object.keys(embeddingFieldsToInject).length > 0) {
69
+ context.extendList(listName, {
70
+ fields: embeddingFieldsToInject,
71
+ });
72
+ }
73
+ }
74
+ // Second pass: Find all embedding fields with autoGenerate enabled
75
+ // This includes both manually defined embedding fields AND injected ones from searchable()
44
76
  for (const [listName, listConfig] of Object.entries(context.config.lists)) {
45
77
  for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
46
78
  if (fieldConfig.type === 'embedding' &&
@@ -176,6 +208,34 @@ export function ragPlugin(config) {
176
208
  // Access at runtime via: config._pluginData.rag
177
209
  context.setPluginData('rag', normalized);
178
210
  },
211
+ runtime: () => {
212
+ // Provide RAG-related utilities at runtime
213
+ return {
214
+ /**
215
+ * Generate embedding for a given text
216
+ * Uses the configured embedding provider
217
+ */
218
+ generateEmbedding: async (text) => {
219
+ const ragConfig = normalized;
220
+ if (!ragConfig || !ragConfig.provider) {
221
+ throw new Error('RAG plugin not configured');
222
+ }
223
+ const provider = createEmbeddingProvider(ragConfig.provider);
224
+ return await provider.embed(text);
225
+ },
226
+ /**
227
+ * Generate embeddings for multiple texts (batch)
228
+ */
229
+ generateEmbeddings: async (texts) => {
230
+ const ragConfig = normalized;
231
+ if (!ragConfig || !ragConfig.provider) {
232
+ throw new Error('RAG plugin not configured');
233
+ }
234
+ const provider = createEmbeddingProvider(ragConfig.provider);
235
+ return await provider.embedBatch(texts);
236
+ },
237
+ };
238
+ },
179
239
  };
180
240
  }
181
241
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/config/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/config/plugin.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,11 @@ describe('RAG Plugin', () => {
64
64
  const plugin = ragPlugin(config);
65
65
  const mockContext = {
66
66
  config: {
67
- db: { provider: 'sqlite', url: 'file:./test.db' },
67
+ db: {
68
+ provider: 'sqlite',
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ prismaClientConstructor: (() => null),
71
+ },
68
72
  lists: {
69
73
  Article: {
70
74
  fields: {
@@ -100,7 +104,11 @@ describe('RAG Plugin', () => {
100
104
  const plugin = ragPlugin(config);
101
105
  const mockContext = {
102
106
  config: {
103
- db: { provider: 'sqlite', url: 'file:./test.db' },
107
+ db: {
108
+ provider: 'sqlite',
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
+ prismaClientConstructor: (() => null),
111
+ },
104
112
  lists: {
105
113
  Article: {
106
114
  fields: {
@@ -130,7 +138,11 @@ describe('RAG Plugin', () => {
130
138
  const plugin = ragPlugin(config);
131
139
  const mockContext = {
132
140
  config: {
133
- db: { provider: 'sqlite', url: 'file:./test.db' },
141
+ db: {
142
+ provider: 'sqlite',
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
+ prismaClientConstructor: (() => null),
145
+ },
134
146
  lists: {
135
147
  Article: {
136
148
  fields: {
@@ -164,7 +176,11 @@ describe('RAG Plugin', () => {
164
176
  const plugin = ragPlugin(config);
165
177
  const mockContext = {
166
178
  config: {
167
- db: { provider: 'sqlite', url: 'file:./test.db' },
179
+ db: {
180
+ provider: 'sqlite',
181
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
182
+ prismaClientConstructor: (() => null),
183
+ },
168
184
  lists: {},
169
185
  },
170
186
  setPluginData: vi.fn(),
@@ -190,7 +206,11 @@ describe('RAG Plugin', () => {
190
206
  const plugin = ragPlugin(config);
191
207
  const mockContext = {
192
208
  config: {
193
- db: { provider: 'sqlite', url: 'file:./test.db' },
209
+ db: {
210
+ provider: 'sqlite',
211
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
212
+ prismaClientConstructor: (() => null),
213
+ },
194
214
  lists: {
195
215
  Article: {
196
216
  fields: {
@@ -226,7 +246,11 @@ describe('RAG Plugin', () => {
226
246
  const plugin = ragPlugin(config);
227
247
  const mockContext = {
228
248
  config: {
229
- db: { provider: 'sqlite', url: 'file:./test.db' },
249
+ db: {
250
+ provider: 'sqlite',
251
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
252
+ prismaClientConstructor: (() => null),
253
+ },
230
254
  lists: {
231
255
  Article: {
232
256
  fields: {
@@ -270,7 +294,11 @@ describe('RAG Plugin', () => {
270
294
  const plugin = ragPlugin(config);
271
295
  const mockContext = {
272
296
  config: {
273
- db: { provider: 'sqlite', url: 'file:./test.db' },
297
+ db: {
298
+ provider: 'sqlite',
299
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
+ prismaClientConstructor: (() => null),
301
+ },
274
302
  lists: {
275
303
  Article: {
276
304
  fields: {
@@ -305,7 +333,11 @@ describe('RAG Plugin', () => {
305
333
  const plugin = ragPlugin(config);
306
334
  const mockContext = {
307
335
  config: {
308
- db: { provider: 'sqlite', url: 'file:./test.db' },
336
+ db: {
337
+ provider: 'sqlite',
338
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
339
+ prismaClientConstructor: (() => null),
340
+ },
309
341
  lists: {
310
342
  Article: {
311
343
  fields: {
@@ -335,7 +367,11 @@ describe('RAG Plugin', () => {
335
367
  const plugin = ragPlugin(config);
336
368
  const mockContext = {
337
369
  config: {
338
- db: { provider: 'sqlite', url: 'file:./test.db' },
370
+ db: {
371
+ provider: 'sqlite',
372
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
373
+ prismaClientConstructor: (() => null),
374
+ },
339
375
  lists: {
340
376
  User: {
341
377
  fields: {
@@ -364,7 +400,11 @@ describe('RAG Plugin', () => {
364
400
  const plugin = ragPlugin(config);
365
401
  const mockContext = {
366
402
  config: {
367
- db: { provider: 'sqlite', url: 'file:./test.db' },
403
+ db: {
404
+ provider: 'sqlite',
405
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
406
+ prismaClientConstructor: (() => null),
407
+ },
368
408
  lists: {
369
409
  BlogPost: {
370
410
  fields: {
@@ -402,7 +442,11 @@ describe('RAG Plugin', () => {
402
442
  const plugin = ragPlugin(config);
403
443
  const mockContext = {
404
444
  config: {
405
- db: { provider: 'sqlite', url: 'file:./test.db' },
445
+ db: {
446
+ provider: 'sqlite',
447
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
448
+ prismaClientConstructor: (() => null),
449
+ },
406
450
  lists: {
407
451
  Article: {
408
452
  fields: {
@@ -444,7 +488,11 @@ describe('RAG Plugin', () => {
444
488
  const plugin = ragPlugin(config);
445
489
  const mockContext = {
446
490
  config: {
447
- db: { provider: 'sqlite', url: 'file:./test.db' },
491
+ db: {
492
+ provider: 'sqlite',
493
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
494
+ prismaClientConstructor: (() => null),
495
+ },
448
496
  lists: {
449
497
  Article: {
450
498
  fields: {
@@ -476,7 +524,11 @@ describe('RAG Plugin', () => {
476
524
  const plugin = ragPlugin(config);
477
525
  const mockContext = {
478
526
  config: {
479
- db: { provider: 'sqlite', url: 'file:./test.db' },
527
+ db: {
528
+ provider: 'sqlite',
529
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
530
+ prismaClientConstructor: (() => null),
531
+ },
480
532
  lists: {
481
533
  Article: {
482
534
  fields: {
@@ -510,7 +562,11 @@ describe('RAG Plugin', () => {
510
562
  const plugin = ragPlugin(config);
511
563
  const mockContext = {
512
564
  config: {
513
- db: { provider: 'sqlite', url: 'file:./test.db' },
565
+ db: {
566
+ provider: 'sqlite',
567
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
568
+ prismaClientConstructor: (() => null),
569
+ },
514
570
  lists: {},
515
571
  },
516
572
  setPluginData: vi.fn(),