@dangao/bun-server 1.12.0 → 2.0.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 (223) hide show
  1. package/README.md +32 -0
  2. package/dist/ai/ai-module.d.ts +24 -0
  3. package/dist/ai/ai-module.d.ts.map +1 -0
  4. package/dist/ai/decorators.d.ts +25 -0
  5. package/dist/ai/decorators.d.ts.map +1 -0
  6. package/dist/ai/errors.d.ts +39 -0
  7. package/dist/ai/errors.d.ts.map +1 -0
  8. package/dist/ai/index.d.ts +12 -0
  9. package/dist/ai/index.d.ts.map +1 -0
  10. package/dist/ai/providers/anthropic-provider.d.ts +23 -0
  11. package/dist/ai/providers/anthropic-provider.d.ts.map +1 -0
  12. package/dist/ai/providers/google-provider.d.ts +20 -0
  13. package/dist/ai/providers/google-provider.d.ts.map +1 -0
  14. package/dist/ai/providers/ollama-provider.d.ts +17 -0
  15. package/dist/ai/providers/ollama-provider.d.ts.map +1 -0
  16. package/dist/ai/providers/openai-provider.d.ts +28 -0
  17. package/dist/ai/providers/openai-provider.d.ts.map +1 -0
  18. package/dist/ai/service.d.ts +40 -0
  19. package/dist/ai/service.d.ts.map +1 -0
  20. package/dist/ai/tools/tool-executor.d.ts +15 -0
  21. package/dist/ai/tools/tool-executor.d.ts.map +1 -0
  22. package/dist/ai/tools/tool-registry.d.ts +39 -0
  23. package/dist/ai/tools/tool-registry.d.ts.map +1 -0
  24. package/dist/ai/types.d.ts +134 -0
  25. package/dist/ai/types.d.ts.map +1 -0
  26. package/dist/ai-guard/ai-guard-module.d.ts +18 -0
  27. package/dist/ai-guard/ai-guard-module.d.ts.map +1 -0
  28. package/dist/ai-guard/decorators.d.ts +16 -0
  29. package/dist/ai-guard/decorators.d.ts.map +1 -0
  30. package/dist/ai-guard/detectors/content-moderator.d.ts +26 -0
  31. package/dist/ai-guard/detectors/content-moderator.d.ts.map +1 -0
  32. package/dist/ai-guard/detectors/injection-detector.d.ts +13 -0
  33. package/dist/ai-guard/detectors/injection-detector.d.ts.map +1 -0
  34. package/dist/ai-guard/detectors/pii-detector.d.ts +11 -0
  35. package/dist/ai-guard/detectors/pii-detector.d.ts.map +1 -0
  36. package/dist/ai-guard/index.d.ts +8 -0
  37. package/dist/ai-guard/index.d.ts.map +1 -0
  38. package/dist/ai-guard/service.d.ts +21 -0
  39. package/dist/ai-guard/service.d.ts.map +1 -0
  40. package/dist/ai-guard/types.d.ts +59 -0
  41. package/dist/ai-guard/types.d.ts.map +1 -0
  42. package/dist/conversation/conversation-module.d.ts +25 -0
  43. package/dist/conversation/conversation-module.d.ts.map +1 -0
  44. package/dist/conversation/decorators.d.ts +28 -0
  45. package/dist/conversation/decorators.d.ts.map +1 -0
  46. package/dist/conversation/index.d.ts +8 -0
  47. package/dist/conversation/index.d.ts.map +1 -0
  48. package/dist/conversation/service.d.ts +43 -0
  49. package/dist/conversation/service.d.ts.map +1 -0
  50. package/dist/conversation/stores/database-store.d.ts +46 -0
  51. package/dist/conversation/stores/database-store.d.ts.map +1 -0
  52. package/dist/conversation/stores/memory-store.d.ts +17 -0
  53. package/dist/conversation/stores/memory-store.d.ts.map +1 -0
  54. package/dist/conversation/stores/redis-store.d.ts +39 -0
  55. package/dist/conversation/stores/redis-store.d.ts.map +1 -0
  56. package/dist/conversation/types.d.ts +64 -0
  57. package/dist/conversation/types.d.ts.map +1 -0
  58. package/dist/core/cluster.d.ts +42 -3
  59. package/dist/core/cluster.d.ts.map +1 -1
  60. package/dist/core/index.d.ts +1 -1
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/server.d.ts.map +1 -1
  63. package/dist/embedding/embedding-module.d.ts +20 -0
  64. package/dist/embedding/embedding-module.d.ts.map +1 -0
  65. package/dist/embedding/index.d.ts +6 -0
  66. package/dist/embedding/index.d.ts.map +1 -0
  67. package/dist/embedding/providers/ollama-embedding-provider.d.ts +18 -0
  68. package/dist/embedding/providers/ollama-embedding-provider.d.ts.map +1 -0
  69. package/dist/embedding/providers/openai-embedding-provider.d.ts +18 -0
  70. package/dist/embedding/providers/openai-embedding-provider.d.ts.map +1 -0
  71. package/dist/embedding/service.d.ts +27 -0
  72. package/dist/embedding/service.d.ts.map +1 -0
  73. package/dist/embedding/types.d.ts +25 -0
  74. package/dist/embedding/types.d.ts.map +1 -0
  75. package/dist/index.d.ts +9 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +2870 -88
  78. package/dist/mcp/decorators.d.ts +42 -0
  79. package/dist/mcp/decorators.d.ts.map +1 -0
  80. package/dist/mcp/index.d.ts +6 -0
  81. package/dist/mcp/index.d.ts.map +1 -0
  82. package/dist/mcp/mcp-module.d.ts +22 -0
  83. package/dist/mcp/mcp-module.d.ts.map +1 -0
  84. package/dist/mcp/registry.d.ts +23 -0
  85. package/dist/mcp/registry.d.ts.map +1 -0
  86. package/dist/mcp/server.d.ts +29 -0
  87. package/dist/mcp/server.d.ts.map +1 -0
  88. package/dist/mcp/types.d.ts +60 -0
  89. package/dist/mcp/types.d.ts.map +1 -0
  90. package/dist/prompt/index.d.ts +6 -0
  91. package/dist/prompt/index.d.ts.map +1 -0
  92. package/dist/prompt/prompt-module.d.ts +23 -0
  93. package/dist/prompt/prompt-module.d.ts.map +1 -0
  94. package/dist/prompt/service.d.ts +47 -0
  95. package/dist/prompt/service.d.ts.map +1 -0
  96. package/dist/prompt/stores/file-store.d.ts +36 -0
  97. package/dist/prompt/stores/file-store.d.ts.map +1 -0
  98. package/dist/prompt/stores/memory-store.d.ts +17 -0
  99. package/dist/prompt/stores/memory-store.d.ts.map +1 -0
  100. package/dist/prompt/types.d.ts +68 -0
  101. package/dist/prompt/types.d.ts.map +1 -0
  102. package/dist/rag/chunkers/markdown-chunker.d.ts +11 -0
  103. package/dist/rag/chunkers/markdown-chunker.d.ts.map +1 -0
  104. package/dist/rag/chunkers/text-chunker.d.ts +11 -0
  105. package/dist/rag/chunkers/text-chunker.d.ts.map +1 -0
  106. package/dist/rag/decorators.d.ts +24 -0
  107. package/dist/rag/decorators.d.ts.map +1 -0
  108. package/dist/rag/index.d.ts +7 -0
  109. package/dist/rag/index.d.ts.map +1 -0
  110. package/dist/rag/rag-module.d.ts +23 -0
  111. package/dist/rag/rag-module.d.ts.map +1 -0
  112. package/dist/rag/service.d.ts +36 -0
  113. package/dist/rag/service.d.ts.map +1 -0
  114. package/dist/rag/types.d.ts +56 -0
  115. package/dist/rag/types.d.ts.map +1 -0
  116. package/dist/vector-store/index.d.ts +6 -0
  117. package/dist/vector-store/index.d.ts.map +1 -0
  118. package/dist/vector-store/stores/memory-store.d.ts +17 -0
  119. package/dist/vector-store/stores/memory-store.d.ts.map +1 -0
  120. package/dist/vector-store/stores/pinecone-store.d.ts +27 -0
  121. package/dist/vector-store/stores/pinecone-store.d.ts.map +1 -0
  122. package/dist/vector-store/stores/qdrant-store.d.ts +29 -0
  123. package/dist/vector-store/stores/qdrant-store.d.ts.map +1 -0
  124. package/dist/vector-store/types.d.ts +60 -0
  125. package/dist/vector-store/types.d.ts.map +1 -0
  126. package/dist/vector-store/vector-store-module.d.ts +20 -0
  127. package/dist/vector-store/vector-store-module.d.ts.map +1 -0
  128. package/docs/ai.md +500 -0
  129. package/docs/best-practices.md +83 -8
  130. package/docs/database.md +23 -0
  131. package/docs/guide.md +90 -27
  132. package/docs/migration.md +81 -7
  133. package/docs/security.md +23 -0
  134. package/docs/zh/ai.md +441 -0
  135. package/docs/zh/best-practices.md +43 -0
  136. package/docs/zh/database.md +23 -0
  137. package/docs/zh/guide.md +40 -1
  138. package/docs/zh/migration.md +39 -0
  139. package/docs/zh/security.md +23 -0
  140. package/package.json +2 -2
  141. package/src/ai/ai-module.ts +62 -0
  142. package/src/ai/decorators.ts +30 -0
  143. package/src/ai/errors.ts +71 -0
  144. package/src/ai/index.ts +11 -0
  145. package/src/ai/providers/anthropic-provider.ts +190 -0
  146. package/src/ai/providers/google-provider.ts +179 -0
  147. package/src/ai/providers/ollama-provider.ts +126 -0
  148. package/src/ai/providers/openai-provider.ts +242 -0
  149. package/src/ai/service.ts +155 -0
  150. package/src/ai/tools/tool-executor.ts +38 -0
  151. package/src/ai/tools/tool-registry.ts +91 -0
  152. package/src/ai/types.ts +145 -0
  153. package/src/ai-guard/ai-guard-module.ts +50 -0
  154. package/src/ai-guard/decorators.ts +21 -0
  155. package/src/ai-guard/detectors/content-moderator.ts +80 -0
  156. package/src/ai-guard/detectors/injection-detector.ts +48 -0
  157. package/src/ai-guard/detectors/pii-detector.ts +64 -0
  158. package/src/ai-guard/index.ts +7 -0
  159. package/src/ai-guard/service.ts +100 -0
  160. package/src/ai-guard/types.ts +61 -0
  161. package/src/conversation/conversation-module.ts +63 -0
  162. package/src/conversation/decorators.ts +47 -0
  163. package/src/conversation/index.ts +7 -0
  164. package/src/conversation/service.ts +133 -0
  165. package/src/conversation/stores/database-store.ts +125 -0
  166. package/src/conversation/stores/memory-store.ts +57 -0
  167. package/src/conversation/stores/redis-store.ts +101 -0
  168. package/src/conversation/types.ts +68 -0
  169. package/src/core/cluster.ts +239 -46
  170. package/src/core/index.ts +1 -1
  171. package/src/core/server.ts +91 -78
  172. package/src/embedding/embedding-module.ts +52 -0
  173. package/src/embedding/index.ts +5 -0
  174. package/src/embedding/providers/ollama-embedding-provider.ts +39 -0
  175. package/src/embedding/providers/openai-embedding-provider.ts +47 -0
  176. package/src/embedding/service.ts +55 -0
  177. package/src/embedding/types.ts +27 -0
  178. package/src/index.ts +11 -1
  179. package/src/mcp/decorators.ts +60 -0
  180. package/src/mcp/index.ts +5 -0
  181. package/src/mcp/mcp-module.ts +58 -0
  182. package/src/mcp/registry.ts +72 -0
  183. package/src/mcp/server.ts +164 -0
  184. package/src/mcp/types.ts +63 -0
  185. package/src/prompt/index.ts +5 -0
  186. package/src/prompt/prompt-module.ts +61 -0
  187. package/src/prompt/service.ts +93 -0
  188. package/src/prompt/stores/file-store.ts +135 -0
  189. package/src/prompt/stores/memory-store.ts +82 -0
  190. package/src/prompt/types.ts +84 -0
  191. package/src/rag/chunkers/markdown-chunker.ts +40 -0
  192. package/src/rag/chunkers/text-chunker.ts +30 -0
  193. package/src/rag/decorators.ts +26 -0
  194. package/src/rag/index.ts +6 -0
  195. package/src/rag/rag-module.ts +78 -0
  196. package/src/rag/service.ts +134 -0
  197. package/src/rag/types.ts +47 -0
  198. package/src/vector-store/index.ts +5 -0
  199. package/src/vector-store/stores/memory-store.ts +69 -0
  200. package/src/vector-store/stores/pinecone-store.ts +123 -0
  201. package/src/vector-store/stores/qdrant-store.ts +147 -0
  202. package/src/vector-store/types.ts +77 -0
  203. package/src/vector-store/vector-store-module.ts +50 -0
  204. package/tests/ai/ai-module.test.ts +46 -0
  205. package/tests/ai/ai-service.test.ts +91 -0
  206. package/tests/ai/tool-registry.test.ts +57 -0
  207. package/tests/ai-guard/ai-guard-module.test.ts +23 -0
  208. package/tests/ai-guard/content-moderator.test.ts +65 -0
  209. package/tests/ai-guard/pii-detector.test.ts +41 -0
  210. package/tests/conversation/conversation-module.test.ts +26 -0
  211. package/tests/conversation/conversation-service.test.ts +64 -0
  212. package/tests/conversation/memory-store.test.ts +68 -0
  213. package/tests/core/cluster.test.ts +45 -1
  214. package/tests/embedding/embedding-service.test.ts +55 -0
  215. package/tests/mcp/mcp-server.test.ts +85 -0
  216. package/tests/prompt/prompt-module.test.ts +30 -0
  217. package/tests/prompt/prompt-service.test.ts +74 -0
  218. package/tests/rag/chunkers.test.ts +58 -0
  219. package/tests/rag/rag-service.test.ts +66 -0
  220. package/tests/vector-store/memory-vector-store.test.ts +84 -0
  221. package/tests/interceptor/perf/interceptor-performance.test.ts +0 -340
  222. package/tests/perf/optimization.test.ts +0 -182
  223. package/tests/perf/regression.test.ts +0 -120
@@ -0,0 +1,42 @@
1
+ import type { McpToolDefinition, McpResourceDefinition } from './types';
2
+ /**
3
+ * Mark a method as an MCP tool.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * \@McpTool({
8
+ * name: 'get_weather',
9
+ * description: 'Get current weather for a city',
10
+ * inputSchema: {
11
+ * type: 'object',
12
+ * properties: { city: { type: 'string' } },
13
+ * required: ['city'],
14
+ * },
15
+ * })
16
+ * public async getWeather({ city }: { city: string }) {
17
+ * return { temperature: 22, city };
18
+ * }
19
+ * ```
20
+ */
21
+ export declare function McpTool(definition: McpToolDefinition): MethodDecorator;
22
+ /**
23
+ * Mark a method as an MCP resource provider.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * \@McpResource({
28
+ * uri: 'user://{id}',
29
+ * name: 'User Profile',
30
+ * mimeType: 'application/json',
31
+ * })
32
+ * public async getUserResource(\@McpParam('id') id: string) {
33
+ * return this.userService.find(id);
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function McpResource(definition: McpResourceDefinition): MethodDecorator;
38
+ /**
39
+ * Extract a named parameter from MCP tool input arguments.
40
+ */
41
+ export declare function McpParam(name: string): ParameterDecorator;
42
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/mcp/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGxE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,iBAAiB,GAAG,eAAe,CAItE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CAI9E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAOzD"}
@@ -0,0 +1,6 @@
1
+ export * from './types';
2
+ export * from './decorators';
3
+ export * from './registry';
4
+ export * from './server';
5
+ export * from './mcp-module';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type McpModuleOptions } from './types';
2
+ export declare class McpModule {
3
+ /**
4
+ * Configure the MCP module.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * McpModule.forRoot({
9
+ * transport: 'sse',
10
+ * path: '/mcp',
11
+ * serverInfo: { name: 'my-api', version: '1.0.0' },
12
+ * });
13
+ *
14
+ * // Register tools by scanning instances:
15
+ * const registry = container.resolve<McpRegistry>(MCP_SERVER_TOKEN);
16
+ * registry.scan(myServiceInstance);
17
+ * ```
18
+ */
19
+ static forRoot(options: McpModuleOptions): typeof McpModule;
20
+ static reset(): void;
21
+ }
22
+ //# sourceMappingURL=mcp-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-module.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErF,qBACa,SAAS;IACpB;;;;;;;;;;;;;;;OAeG;WACW,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,SAAS;WA8BpD,KAAK,IAAI,IAAI;CAG5B"}
@@ -0,0 +1,23 @@
1
+ import type { McpToolDefinition, McpResourceDefinition } from './types';
2
+ export interface RegisteredMcpTool extends McpToolDefinition {
3
+ execute(args: Record<string, unknown>): Promise<unknown>;
4
+ }
5
+ export interface RegisteredMcpResource extends McpResourceDefinition {
6
+ read(uriParams: Record<string, string>): Promise<unknown>;
7
+ }
8
+ /**
9
+ * Registry for MCP tools and resources discovered via decorators.
10
+ */
11
+ export declare class McpRegistry {
12
+ private readonly tools;
13
+ private readonly resources;
14
+ /**
15
+ * Scan an object instance for @McpTool() and @McpResource() decorated methods
16
+ */
17
+ scan(instance: object): void;
18
+ getTools(): RegisteredMcpTool[];
19
+ getResources(): RegisteredMcpResource[];
20
+ getTool(name: string): RegisteredMcpTool | undefined;
21
+ getResource(uri: string): RegisteredMcpResource | undefined;
22
+ }
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGxE,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IAEtE;;OAEG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAmC5B,QAAQ,IAAI,iBAAiB,EAAE;IAI/B,YAAY,IAAI,qBAAqB,EAAE;IAIvC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;CAGnE"}
@@ -0,0 +1,29 @@
1
+ import type { McpServerInfo, JsonRpcRequest, JsonRpcResponse } from './types';
2
+ import type { McpRegistry } from './registry';
3
+ /**
4
+ * MCP protocol server — handles JSON-RPC 2.0 requests from MCP clients.
5
+ * Supports SSE transport (HTTP) and stdio transport.
6
+ *
7
+ * Implements MCP specification 2024-11-05.
8
+ */
9
+ export declare class McpServer {
10
+ private readonly registry;
11
+ private readonly serverInfo;
12
+ constructor(registry: McpRegistry, serverInfo: McpServerInfo);
13
+ /**
14
+ * Handle an incoming JSON-RPC request and return a response
15
+ */
16
+ handle(request: JsonRpcRequest): Promise<JsonRpcResponse>;
17
+ /**
18
+ * Handle a raw HTTP request body (JSON-RPC over HTTP)
19
+ * Returns a Response suitable for Bun's serve()
20
+ */
21
+ handleHttp(req: Request): Promise<Response>;
22
+ /**
23
+ * Create an SSE response that keeps the connection open for streaming
24
+ * This is the SSE transport endpoint
25
+ */
26
+ createSseResponse(): Response;
27
+ private dispatch;
28
+ }
29
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAExB,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa;IAKnE;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAgBtE;;;OAGG;IACU,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQxD;;;OAGG;IACI,iBAAiB,IAAI,QAAQ;YAmCtB,QAAQ;CAkEvB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * MCP tool definition
3
+ */
4
+ export interface McpToolDefinition {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: Record<string, unknown>;
8
+ }
9
+ /**
10
+ * MCP resource definition
11
+ */
12
+ export interface McpResourceDefinition {
13
+ uri: string;
14
+ name: string;
15
+ description?: string;
16
+ mimeType?: string;
17
+ }
18
+ /**
19
+ * MCP server info
20
+ */
21
+ export interface McpServerInfo {
22
+ name: string;
23
+ version: string;
24
+ description?: string;
25
+ }
26
+ /**
27
+ * MCP transport type
28
+ */
29
+ export type McpTransport = 'sse' | 'stdio';
30
+ export interface McpModuleOptions {
31
+ transport?: McpTransport;
32
+ /** Path for SSE endpoint (default: '/mcp') */
33
+ path?: string;
34
+ serverInfo: McpServerInfo;
35
+ }
36
+ export declare const MCP_SERVER_TOKEN: unique symbol;
37
+ export declare const MCP_OPTIONS_TOKEN: unique symbol;
38
+ /** Metadata key for @McpTool() */
39
+ export declare const MCP_TOOL_METADATA_KEY = "@dangao/bun-server:mcp:tool";
40
+ /** Metadata key for @McpResource() */
41
+ export declare const MCP_RESOURCE_METADATA_KEY = "@dangao/bun-server:mcp:resource";
42
+ /** JSON-RPC 2.0 Request */
43
+ export interface JsonRpcRequest {
44
+ jsonrpc: '2.0';
45
+ id: string | number | null;
46
+ method: string;
47
+ params?: unknown;
48
+ }
49
+ /** JSON-RPC 2.0 Response */
50
+ export interface JsonRpcResponse {
51
+ jsonrpc: '2.0';
52
+ id: string | number | null;
53
+ result?: unknown;
54
+ error?: {
55
+ code: number;
56
+ message: string;
57
+ data?: unknown;
58
+ };
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAE1E,kCAAkC;AAClC,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,sCAAsC;AACtC,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAE3E,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D"}
@@ -0,0 +1,6 @@
1
+ export * from './types';
2
+ export * from './service';
3
+ export * from './prompt-module';
4
+ export * from './stores/memory-store';
5
+ export * from './stores/file-store';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type PromptModuleOptions } from './types';
2
+ export declare class PromptModule {
3
+ /**
4
+ * Configure the prompt module.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // With in-memory store (default):
9
+ * PromptModule.forRoot({});
10
+ *
11
+ * // With file store:
12
+ * PromptModule.forRoot({
13
+ * store: new FilePromptStore({ promptsDir: './.prompts' }),
14
+ * });
15
+ * ```
16
+ */
17
+ static forRoot(options?: PromptModuleOptions): typeof PromptModule;
18
+ /**
19
+ * Reset module state (for testing)
20
+ */
21
+ static reset(): void;
22
+ }
23
+ //# sourceMappingURL=prompt-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-module.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-module.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,SAAS,CAAC;AAGjB,qBACa,YAAY;IACvB;;;;;;;;;;;;;OAaG;WACW,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,YAAY;IA4B7E;;OAEG;WACW,KAAK,IAAI,IAAI;CAG5B"}
@@ -0,0 +1,47 @@
1
+ import type { PromptTemplate, CreatePromptTemplateInput, UpdatePromptTemplateInput, PromptModuleOptions } from './types';
2
+ /**
3
+ * Manages prompt templates: CRUD operations, versioning, and variable rendering.
4
+ */
5
+ export declare class PromptService {
6
+ private readonly store;
7
+ constructor(options: PromptModuleOptions);
8
+ /**
9
+ * Get a template by ID
10
+ */
11
+ get(id: string): Promise<PromptTemplate>;
12
+ /**
13
+ * Get a specific version of a template
14
+ */
15
+ getVersion(id: string, version: number): Promise<PromptTemplate>;
16
+ /**
17
+ * List all templates
18
+ */
19
+ list(): Promise<PromptTemplate[]>;
20
+ /**
21
+ * Create a new template
22
+ */
23
+ create(input: CreatePromptTemplateInput): Promise<PromptTemplate>;
24
+ /**
25
+ * Update a template (creates a new version)
26
+ */
27
+ update(id: string, input: UpdatePromptTemplateInput): Promise<PromptTemplate>;
28
+ /**
29
+ * Delete a template
30
+ */
31
+ delete(id: string): Promise<boolean>;
32
+ /**
33
+ * Render a template by replacing {{varName}} with provided values
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const rendered = await promptService.render('greet-user', { name: 'Alice', app: 'MyApp' });
38
+ * // "Hello, Alice! Welcome to MyApp."
39
+ * ```
40
+ */
41
+ render(id: string, vars: Record<string, string>): Promise<string>;
42
+ /**
43
+ * Render a specific version of a template
44
+ */
45
+ renderVersion(id: string, version: number, vars: Record<string, string>): Promise<string>;
46
+ }
47
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/prompt/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,qBACa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAGJ,OAAO,EAAE,mBAAmB;IAK5D;;OAEG;IACU,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMrD;;OAEG;IACU,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAM7E;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAI9C;;OAEG;IACU,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9E;;OAEG;IACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1F;;OAEG;IACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;;;;;;OAQG;IACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9E;;OAEG;IACU,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAIvG"}
@@ -0,0 +1,36 @@
1
+ import type { PromptStore, PromptTemplate, CreatePromptTemplateInput, UpdatePromptTemplateInput } from '../types';
2
+ export interface FilePromptStoreConfig {
3
+ /** Directory containing JSON prompt files (default: './.prompts') */
4
+ promptsDir?: string;
5
+ }
6
+ /**
7
+ * File-backed prompt store — loads templates from JSON files at startup
8
+ * and persists changes back to disk.
9
+ *
10
+ * Each template is stored as a separate JSON file: `{promptsDir}/{id}.json`
11
+ *
12
+ * File format:
13
+ * ```json
14
+ * {
15
+ * "id": "greet-user",
16
+ * "name": "Greet User",
17
+ * "content": "Hello, {{name}}! Welcome to {{app}}.",
18
+ * "description": "Greeting template"
19
+ * }
20
+ * ```
21
+ */
22
+ export declare class FilePromptStore implements PromptStore {
23
+ private readonly promptsDir;
24
+ private readonly memory;
25
+ private loaded;
26
+ constructor(config?: FilePromptStoreConfig);
27
+ get(id: string): Promise<PromptTemplate | null>;
28
+ getVersion(id: string, version: number): Promise<PromptTemplate | null>;
29
+ list(): Promise<PromptTemplate[]>;
30
+ create(input: CreatePromptTemplateInput): Promise<PromptTemplate>;
31
+ update(id: string, input: UpdatePromptTemplateInput): Promise<PromptTemplate>;
32
+ delete(id: string): Promise<boolean>;
33
+ private ensureLoaded;
34
+ private writeFile;
35
+ }
36
+ //# sourceMappingURL=file-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../../src/prompt/stores/file-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEJ,MAAM,GAAE,qBAA0B;IAKxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAK/C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKvE,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAKjC,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAO7E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAcnC,YAAY;YAiCZ,SAAS;CAkBxB"}
@@ -0,0 +1,17 @@
1
+ import type { PromptStore, PromptTemplate, CreatePromptTemplateInput, UpdatePromptTemplateInput } from '../types';
2
+ /**
3
+ * In-memory prompt store. Supports versioning via a separate history map.
4
+ */
5
+ export declare class InMemoryPromptStore implements PromptStore {
6
+ private readonly templates;
7
+ /** id → version → template snapshot */
8
+ private readonly history;
9
+ get(id: string): Promise<PromptTemplate | null>;
10
+ getVersion(id: string, version: number): Promise<PromptTemplate | null>;
11
+ list(): Promise<PromptTemplate[]>;
12
+ create(input: CreatePromptTemplateInput): Promise<PromptTemplate>;
13
+ update(id: string, input: UpdatePromptTemplateInput): Promise<PromptTemplate>;
14
+ delete(id: string): Promise<boolean>;
15
+ private saveVersion;
16
+ }
17
+ //# sourceMappingURL=memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../../src/prompt/stores/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAE7D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI/C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIvE,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIjC,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqBjE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB7E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,OAAO,CAAC,WAAW;CAMpB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * A versioned prompt template with variable interpolation
3
+ */
4
+ export interface PromptTemplate {
5
+ id: string;
6
+ name: string;
7
+ /** Template content with {{variable}} placeholders */
8
+ content: string;
9
+ /** Current version number (starts at 1, increments on each update) */
10
+ version: number;
11
+ /** Declared variable names (auto-extracted from content) */
12
+ variables: string[];
13
+ /** Optional description */
14
+ description?: string;
15
+ createdAt: Date;
16
+ updatedAt: Date;
17
+ }
18
+ /**
19
+ * Input for creating a prompt template
20
+ */
21
+ export interface CreatePromptTemplateInput {
22
+ id?: string;
23
+ name: string;
24
+ content: string;
25
+ description?: string;
26
+ }
27
+ /**
28
+ * Input for updating a prompt template (creates new version)
29
+ */
30
+ export interface UpdatePromptTemplateInput {
31
+ name?: string;
32
+ content?: string;
33
+ description?: string;
34
+ }
35
+ /**
36
+ * Abstract prompt store interface
37
+ */
38
+ export interface PromptStore {
39
+ get(id: string): Promise<PromptTemplate | null>;
40
+ getVersion(id: string, version: number): Promise<PromptTemplate | null>;
41
+ list(): Promise<PromptTemplate[]>;
42
+ create(input: CreatePromptTemplateInput): Promise<PromptTemplate>;
43
+ update(id: string, input: UpdatePromptTemplateInput): Promise<PromptTemplate>;
44
+ delete(id: string): Promise<boolean>;
45
+ }
46
+ /**
47
+ * PromptModule configuration
48
+ */
49
+ export interface PromptModuleOptions {
50
+ store?: PromptStore;
51
+ /**
52
+ * Preload templates on module init
53
+ * (only used by FilePromptStore, which loads from promptsDir)
54
+ */
55
+ promptsDir?: string;
56
+ }
57
+ export declare const PROMPT_SERVICE_TOKEN: unique symbol;
58
+ export declare const PROMPT_OPTIONS_TOKEN: unique symbol;
59
+ /**
60
+ * Extract variable names from template content
61
+ * Matches {{varName}} patterns
62
+ */
63
+ export declare function extractVariables(content: string): string[];
64
+ /**
65
+ * Render a template by replacing {{varName}} with provided values
66
+ */
67
+ export declare function renderTemplate(content: string, vars: Record<string, string>): string;
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompt/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,eAA8C,CAAC;AAChF,eAAO,MAAM,oBAAoB,eAA8C,CAAC;AAEhF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAEpF"}
@@ -0,0 +1,11 @@
1
+ import type { DocumentChunker, DocumentChunk } from '../types';
2
+ /**
3
+ * Splits Markdown text into semantic chunks by heading boundaries.
4
+ * Falls back to text chunking for sections that are too large.
5
+ */
6
+ export declare class MarkdownChunker implements DocumentChunker {
7
+ private readonly maxChunkSize;
8
+ constructor(maxChunkSize?: number);
9
+ chunk(text: string): DocumentChunk[];
10
+ }
11
+ //# sourceMappingURL=markdown-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-chunker.d.ts","sourceRoot":"","sources":["../../../src/rag/chunkers/markdown-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE/D;;;GAGG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAEnB,YAAY,SAAO;IAI/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;CA0B5C"}
@@ -0,0 +1,11 @@
1
+ import type { DocumentChunker, DocumentChunk } from '../types';
2
+ /**
3
+ * Splits plain text into overlapping chunks of fixed character size.
4
+ */
5
+ export declare class TextChunker implements DocumentChunker {
6
+ private readonly chunkSize;
7
+ private readonly chunkOverlap;
8
+ constructor(chunkSize?: number, chunkOverlap?: number);
9
+ chunk(text: string): DocumentChunk[];
10
+ }
11
+ //# sourceMappingURL=text-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-chunker.d.ts","sourceRoot":"","sources":["../../../src/rag/chunkers/text-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE/D;;GAEG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAEnB,SAAS,SAAM,EAAE,YAAY,SAAK;IAK9C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;CAe5C"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Metadata key for @Rag() decorator
3
+ */
4
+ export declare const RAG_METADATA_KEY = "@dangao/bun-server:rag:collection";
5
+ /**
6
+ * Mark a controller method to auto-retrieve RAG context before execution.
7
+ * The retrieved context is available via `@Inject(RAG_SERVICE_TOKEN)` in the service layer.
8
+ *
9
+ * @param collection - VectorStore collection to search (uses default if omitted)
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * \@POST('/ask')
14
+ * \@Rag({ collection: 'product-docs' })
15
+ * public async ask(\@Body() body: { question: string }) {
16
+ * // RAG context is automatically fetched before this method
17
+ * // Access via RagService.retrieve() in your service
18
+ * }
19
+ * ```
20
+ */
21
+ export declare function Rag(options?: {
22
+ collection?: string;
23
+ }): MethodDecorator;
24
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/rag/decorators.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB,sCAAsC,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,GAAG,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAI1E"}
@@ -0,0 +1,7 @@
1
+ export * from './types';
2
+ export * from './service';
3
+ export * from './decorators';
4
+ export * from './rag-module';
5
+ export * from './chunkers/text-chunker';
6
+ export * from './chunkers/markdown-chunker';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type RagModuleOptions } from './types';
2
+ export declare class RagModule {
3
+ /**
4
+ * Configure the RAG module.
5
+ *
6
+ * **Requires** `EmbeddingModule` and `VectorStoreModule` to be imported first.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * EmbeddingModule.forRoot({ provider: { ... } });
11
+ * VectorStoreModule.forRoot({});
12
+ * RagModule.forRoot({ collection: 'docs', chunkSize: 512, topK: 5 });
13
+ *
14
+ * \@Module({
15
+ * imports: [EmbeddingModule, VectorStoreModule, RagModule],
16
+ * })
17
+ * class AppModule {}
18
+ * ```
19
+ */
20
+ static forRoot(options?: RagModuleOptions): typeof RagModule;
21
+ static reset(): void;
22
+ }
23
+ //# sourceMappingURL=rag-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-module.d.ts","sourceRoot":"","sources":["../../src/rag/rag-module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAMtF,qBAIa,SAAS;IACpB;;;;;;;;;;;;;;;;OAgBG;WACW,OAAO,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,SAAS;WA0CzD,KAAK,IAAI,IAAI;CAG5B"}
@@ -0,0 +1,36 @@
1
+ import type { EmbeddingService } from '../embedding/service';
2
+ import type { VectorStore } from '../vector-store/types';
3
+ import type { IngestSource, RagContext, RagModuleOptions } from './types';
4
+ /**
5
+ * RAG service — document ingestion pipeline and context retrieval.
6
+ *
7
+ * Ingestion: source → load text → chunk → embed → store in VectorStore
8
+ * Retrieval: query → embed → search VectorStore → format context
9
+ */
10
+ export declare class RagService {
11
+ private readonly options;
12
+ private readonly embeddingService;
13
+ private readonly vectorStore;
14
+ private readonly textChunker;
15
+ private readonly markdownChunker;
16
+ constructor(options: RagModuleOptions, embeddingService: EmbeddingService, vectorStore: VectorStore);
17
+ /**
18
+ * Ingest a document source into the vector store
19
+ * @param source - text, file path, or URL
20
+ * @param collection - override default collection
21
+ * @returns Number of chunks stored
22
+ */
23
+ ingest(source: IngestSource, collection?: string): Promise<number>;
24
+ /**
25
+ * Retrieve relevant context for a query
26
+ * @param query - User query text
27
+ * @param collection - override default collection
28
+ */
29
+ retrieve(query: string, collection?: string): Promise<RagContext>;
30
+ /**
31
+ * Build a system prompt with retrieved context
32
+ */
33
+ buildContextPrompt(query: string, collection?: string): Promise<string>;
34
+ private loadText;
35
+ }
36
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/rag/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAK3F;;;;;GAKG;AACH,qBACa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAGrB,OAAO,EAAE,gBAAgB,EACnB,gBAAgB,EAAE,gBAAgB,EACvC,WAAW,EAAE,WAAW;IAStD;;;;;OAKG;IACU,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoC/E;;;;OAIG;IACU,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB9E;;OAEG;IACU,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAMtE,QAAQ;CAiBvB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A chunk of text produced by a document chunker
3
+ */
4
+ export interface DocumentChunk {
5
+ content: string;
6
+ metadata?: Record<string, unknown>;
7
+ }
8
+ /**
9
+ * Source for document ingestion
10
+ */
11
+ export type IngestSource = {
12
+ type: 'text';
13
+ content: string;
14
+ metadata?: Record<string, unknown>;
15
+ } | {
16
+ type: 'file';
17
+ path: string;
18
+ metadata?: Record<string, unknown>;
19
+ } | {
20
+ type: 'url';
21
+ url: string;
22
+ metadata?: Record<string, unknown>;
23
+ };
24
+ /**
25
+ * Abstract document chunker
26
+ */
27
+ export interface DocumentChunker {
28
+ chunk(text: string): DocumentChunk[];
29
+ }
30
+ /**
31
+ * Retrieved context for RAG
32
+ */
33
+ export interface RagContext {
34
+ chunks: Array<{
35
+ content: string;
36
+ score: number;
37
+ metadata?: Record<string, unknown>;
38
+ }>;
39
+ /** Formatted context string for inclusion in prompts */
40
+ formatted: string;
41
+ }
42
+ export interface RagModuleOptions {
43
+ /** Collection name in VectorStore (default: 'rag') */
44
+ collection?: string;
45
+ /** Number of chunks per ingested document (default: 512) */
46
+ chunkSize?: number;
47
+ /** Overlap between consecutive chunks (default: 50) */
48
+ chunkOverlap?: number;
49
+ /** Number of top results to retrieve (default: 5) */
50
+ topK?: number;
51
+ /** Minimum similarity score to include (default: 0.5) */
52
+ minScore?: number;
53
+ }
54
+ export declare const RAG_SERVICE_TOKEN: unique symbol;
55
+ export declare const RAG_OPTIONS_TOKEN: unique symbol;
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rag/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACtF,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,iBAAiB,eAA2C,CAAC"}