@devilsdev/rag-pipeline-utils 2.4.5 → 2.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 (225) hide show
  1. package/.ragrc.schema.json +83 -192
  2. package/CHANGELOG.md +345 -0
  3. package/README.md +418 -117
  4. package/SECURITY.md +5 -5
  5. package/dist/experimental.cjs +2 -0
  6. package/dist/experimental.d.ts +1 -0
  7. package/dist/experimental.mjs +5 -0
  8. package/dist/index.cjs +4992 -1242
  9. package/dist/index.d.ts +80 -2
  10. package/dist/index.mjs +1 -1
  11. package/dist/types/agentic/agentic-pipeline.d.ts +103 -0
  12. package/dist/types/agentic/iterative-retriever.d.ts +85 -0
  13. package/dist/types/agentic/query-planner.d.ts +145 -0
  14. package/dist/types/agentic/self-critique.d.ts +45 -0
  15. package/dist/types/ai/adaptive-retrieval.d.ts +44 -0
  16. package/dist/types/ai/federation/federated-learning-coordinator.d.ts +62 -0
  17. package/dist/types/ai/multimodal-processing.d.ts +32 -0
  18. package/dist/types/ai/multimodal.d.ts +39 -0
  19. package/dist/types/ai/retrieval-engine.d.ts +37 -0
  20. package/dist/types/ai/training/model-training-orchestrator.d.ts +31 -0
  21. package/dist/types/chunking/chunking-engine.d.ts +70 -0
  22. package/dist/types/chunking/strategies/fixed-size.d.ts +17 -0
  23. package/dist/types/chunking/strategies/recursive.d.ts +20 -0
  24. package/dist/types/chunking/strategies/semantic.d.ts +19 -0
  25. package/dist/types/chunking/strategies/sentence.d.ts +13 -0
  26. package/dist/types/chunking/strategies/structure-aware.d.ts +19 -0
  27. package/dist/types/citation/citation-tracker.d.ts +64 -0
  28. package/dist/types/citation/hallucination-detector.d.ts +40 -0
  29. package/dist/types/citation/source-mapper.d.ts +37 -0
  30. package/dist/types/connectors/anthropic-connector.d.ts +92 -0
  31. package/dist/types/connectors/base-connector.d.ts +87 -0
  32. package/dist/types/connectors/cohere-connector.d.ts +89 -0
  33. package/dist/types/connectors/connector-utils.d.ts +110 -0
  34. package/dist/types/connectors/local-embedder.d.ts +86 -0
  35. package/dist/types/connectors/memory-retriever.d.ts +91 -0
  36. package/dist/types/connectors/ollama-connector.d.ts +110 -0
  37. package/dist/types/connectors/openai-connector.d.ts +114 -0
  38. package/dist/types/connectors/rag-prompt.d.ts +40 -0
  39. package/dist/types/cost/cost-calculator.d.ts +152 -0
  40. package/dist/types/cost/cost-tracker.d.ts +126 -0
  41. package/dist/types/cost/token-budget.d.ts +110 -0
  42. package/dist/types/dag/core/error-context.d.ts +239 -0
  43. package/dist/types/dag/core/execution-scheduler.d.ts +191 -0
  44. package/dist/types/dag/core/topology-validation.d.ts +226 -0
  45. package/dist/types/dag/dag-engine.d.ts +156 -0
  46. package/dist/types/dag/dag-node.d.ts +37 -0
  47. package/dist/types/dashboard/dashboard-generator.d.ts +127 -0
  48. package/dist/types/dashboard/metrics-aggregator.d.ts +218 -0
  49. package/dist/types/debug/execution-tracer.d.ts +57 -0
  50. package/dist/types/debug/trace-inspector.d.ts +31 -0
  51. package/dist/types/ecosystem/plugin-certification.d.ts +169 -0
  52. package/dist/types/enterprise/data-governance.d.ts +203 -0
  53. package/dist/types/enterprise/multi-tenancy.d.ts +137 -0
  54. package/dist/types/enterprise/sso-integration.d.ts +420 -0
  55. package/dist/types/evaluate/context-metrics.d.ts +55 -0
  56. package/dist/types/evaluate/faithfulness.d.ts +41 -0
  57. package/dist/types/evaluate/groundedness.d.ts +60 -0
  58. package/dist/types/evaluate/pipeline-evaluator.d.ts +88 -0
  59. package/dist/types/evaluate/relevance.d.ts +21 -0
  60. package/dist/types/evaluate/scoring.d.ts +123 -0
  61. package/dist/types/experimental.d.ts +15 -0
  62. package/dist/types/graph/entity-extractor.d.ts +84 -0
  63. package/dist/types/graph/graph-index.d.ts +49 -0
  64. package/dist/types/graph/graph-retriever.d.ts +81 -0
  65. package/dist/types/graph/knowledge-graph.d.ts +129 -0
  66. package/dist/types/guardrails/guardrails-pipeline.d.ts +63 -0
  67. package/dist/types/guardrails/injection-detector.d.ts +47 -0
  68. package/dist/types/guardrails/post-generation-guard.d.ts +61 -0
  69. package/dist/types/guardrails/pre-retrieval-guard.d.ts +64 -0
  70. package/dist/types/guardrails/retrieval-guard.d.ts +57 -0
  71. package/dist/types/mcp/mcp-server.d.ts +85 -0
  72. package/dist/types/mcp/mcp-tool-builder.d.ts +55 -0
  73. package/dist/types/reranker/cascade-reranker.d.ts +40 -0
  74. package/dist/types/reranker/embedding-reranker.d.ts +77 -0
  75. package/dist/types/reranker/scoring-reranker.d.ts +41 -0
  76. package/dist/types/retrieval/bm25-search.d.ts +43 -0
  77. package/dist/types/retrieval/file-vector-store.d.ts +87 -0
  78. package/dist/types/retrieval/hybrid-retriever.d.ts +35 -0
  79. package/dist/types/retrieval/rank-fusion.d.ts +10 -0
  80. package/dist/types/security/jwt-config.d.ts +80 -0
  81. package/dist/types/security/jwt-validator.d.ts +195 -0
  82. package/dist/types/security/plugin-sandbox.d.ts +158 -0
  83. package/dist/types/security/plugin-signature-verifier.d.ts +139 -0
  84. package/dist/types/security/validator.d.ts +5 -0
  85. package/dist/types/streaming/embedding-stream.d.ts +65 -0
  86. package/dist/types/streaming/sse-adapter.d.ts +59 -0
  87. package/dist/types/streaming/stream-router.d.ts +88 -0
  88. package/dist/types/streaming/streaming-embedder.d.ts +99 -0
  89. package/dist/types/streaming/websocket-adapter.d.ts +71 -0
  90. package/dist/types/templates/scaffold.d.ts +55 -0
  91. package/dist/types/templates/template-registry.d.ts +63 -0
  92. package/dist/types/utils/embed-query.d.ts +20 -0
  93. package/dist/types/utils/logger.d.ts +50 -0
  94. package/dist/types/utils/rate-limiter.d.ts +66 -0
  95. package/dist/types/utils/retry.d.ts +27 -0
  96. package/dist/types/utils/run-abort.d.ts +34 -0
  97. package/dist/types/utils/secure-logging.d.ts +51 -0
  98. package/dist/types/utils/structured-logger.d.ts +126 -0
  99. package/package.json +53 -29
  100. package/src/agentic/agentic-pipeline.js +75 -7
  101. package/src/agentic/iterative-retriever.js +47 -10
  102. package/src/agentic/query-planner.js +329 -78
  103. package/src/citation/citation-tracker.js +6 -4
  104. package/src/citation/hallucination-detector.js +2 -2
  105. package/src/citation/source-mapper.js +15 -28
  106. package/src/cli/commands/ai.js +101 -0
  107. package/src/cli/commands/plugin-hub/event-handlers.js +6 -0
  108. package/src/cli/commands/plugin-hub/hub-commands.js +0 -74
  109. package/src/cli/commands/plugin-hub/local-commands.js +143 -0
  110. package/src/cli/commands/plugin-hub.js +96 -36
  111. package/src/cli/diagnostics/config-checker.js +76 -63
  112. package/src/cli/diagnostics/environment-checker.js +62 -31
  113. package/src/cli/diagnostics/plugin-checker.js +36 -89
  114. package/src/cli/doctor-command.js +39 -5
  115. package/src/cli/enhanced-cli-commands.js +72 -217
  116. package/src/cli/handlers/ai-handler.js +364 -0
  117. package/src/cli/handlers/diagnostics-handler.js +78 -31
  118. package/src/cli/handlers/ingest-handler.js +28 -22
  119. package/src/cli/handlers/init-handler.js +148 -25
  120. package/src/cli/handlers/query-handler.js +41 -26
  121. package/src/cli/handlers/run-handler.js +16 -167
  122. package/src/cli/handlers/serve-handler.js +60 -0
  123. package/src/cli/services/bench-stats.js +54 -0
  124. package/src/cli/services/benchmark.js +161 -0
  125. package/src/cli/services/feedback.js +155 -0
  126. package/src/cli/services/rag-service.js +322 -0
  127. package/src/cli/shared/cli-utils.js +24 -7
  128. package/src/cli/shared/config-context.js +21 -0
  129. package/src/cli/wizard/config-builder.js +81 -0
  130. package/src/cli/wizard/init-wizard.js +617 -0
  131. package/src/config/component-factory.js +125 -0
  132. package/src/config/load-config.js +29 -10
  133. package/src/config/load-plugin-config.js +46 -2
  134. package/src/connectors/anthropic-connector.js +93 -55
  135. package/src/connectors/base-connector.js +74 -19
  136. package/src/connectors/cohere-connector.js +88 -32
  137. package/src/connectors/connector-utils.js +302 -0
  138. package/src/connectors/local-embedder.js +43 -5
  139. package/src/connectors/memory-retriever.js +108 -15
  140. package/src/connectors/ollama-connector.js +83 -49
  141. package/src/connectors/openai-connector.js +108 -44
  142. package/src/connectors/rag-prompt.js +88 -0
  143. package/src/core/create-pipeline.js +209 -60
  144. package/src/core/plugin-registry.js +87 -11
  145. package/src/cost/cost-calculator.js +205 -32
  146. package/src/dev/dev-server.js +166 -11
  147. package/src/dev/hot-reload.js +40 -1
  148. package/src/ecosystem/plugin-checks.js +181 -0
  149. package/src/ecosystem/plugin-hub.js +50 -125
  150. package/src/ecosystem/plugin-installer.js +298 -0
  151. package/src/ecosystem/plugin-probe.js +127 -0
  152. package/src/ecosystem/plugin-scanner.js +185 -0
  153. package/src/ecosystem/tar-extract.js +114 -0
  154. package/src/enterprise/audit-logging.js +158 -29
  155. package/src/enterprise/sso-integration.js +715 -228
  156. package/src/evaluate/context-metrics.js +28 -16
  157. package/src/evaluate/evaluator.js +3 -3
  158. package/src/evaluate/faithfulness.js +18 -14
  159. package/src/evaluate/groundedness.js +43 -12
  160. package/src/evaluate/pipeline-evaluator.js +35 -8
  161. package/src/evaluate/scoring.js +251 -3
  162. package/src/experimental.js +71 -0
  163. package/src/guardrails/guardrails-pipeline.js +69 -7
  164. package/src/guardrails/injection-detector.js +283 -0
  165. package/src/guardrails/post-generation-guard.js +19 -0
  166. package/src/guardrails/pre-retrieval-guard.js +36 -36
  167. package/src/guardrails/retrieval-guard.js +58 -8
  168. package/src/index.js +36 -1
  169. package/src/loader/document-reader.js +91 -0
  170. package/src/reranker/cascade-reranker.js +3 -0
  171. package/src/reranker/embedding-reranker.js +136 -21
  172. package/src/reranker/llm-reranker.js +79 -12
  173. package/src/reranker/scoring-reranker.js +3 -0
  174. package/src/retrieval/bm25-search.js +12 -6
  175. package/src/retrieval/file-vector-store.js +212 -0
  176. package/src/retrieval/hybrid-retriever.js +22 -19
  177. package/src/security/jwt-config.js +13 -2
  178. package/src/security/jwt-validator.js +134 -30
  179. package/src/security/plugin-sandbox.js +18 -1
  180. package/src/security/plugin-signature-verifier.js +245 -70
  181. package/src/utils/deprecate.js +69 -0
  182. package/src/utils/embed-query.js +33 -0
  183. package/src/utils/input-sanitizer.js +19 -4
  184. package/src/utils/logger.js +34 -4
  185. package/src/utils/run-abort.js +102 -0
  186. package/src/ai/federated-learning.js +0 -211
  187. package/src/ai/federation.js +0 -71
  188. package/src/ai/index.js +0 -22
  189. package/src/ai/model-trainer.js +0 -217
  190. package/src/ai/model-training.js +0 -202
  191. package/src/ai/multimodal/multi-modal-processor.js +0 -345
  192. package/src/ai/orchestrator.js +0 -65
  193. package/src/ai/retrieval/adaptive-retrieval-engine.js +0 -398
  194. package/src/cli/commands/ai-ml/adaptive-commands.js +0 -178
  195. package/src/cli/commands/ai-ml/federated-commands.js +0 -207
  196. package/src/cli/commands/ai-ml/index.js +0 -17
  197. package/src/cli/commands/ai-ml/multimodal-commands.js +0 -187
  198. package/src/cli/commands/ai-ml/shared.js +0 -51
  199. package/src/cli/commands/ai-ml/training-commands.js +0 -228
  200. package/src/cli/commands/ai-ml.js +0 -386
  201. package/src/cli/commands/docs.js +0 -228
  202. package/src/cli/commands/dx.js +0 -538
  203. package/src/cli/commands/wizard.js +0 -627
  204. package/src/cli/input-sanitization-middleware.js +0 -356
  205. package/src/cli/interactive-wizard.js +0 -373
  206. package/src/cli/templates/development.template.json +0 -64
  207. package/src/cli/templates/minimal.template.json +0 -33
  208. package/src/cli/templates/production.template.json +0 -104
  209. package/src/cli/templates/testing.template.json +0 -45
  210. package/src/cli/wizard/configuration.js +0 -148
  211. package/src/cli/wizard/observability.js +0 -79
  212. package/src/cli/wizard/performance.js +0 -76
  213. package/src/cli/wizard/plugin-selection.js +0 -297
  214. package/src/cli/wizard/preview-save.js +0 -172
  215. package/src/cli/wizard/project-setup.js +0 -66
  216. package/src/core/pipeline-factory.js +0 -59
  217. package/src/dag/enhanced-dag-engine.js +0 -894
  218. package/src/dx/index.js +0 -40
  219. package/src/dx/integration-templates.js +0 -662
  220. package/src/dx/performance-profiler.js +0 -968
  221. package/src/dx/realtime-debugger.js +0 -755
  222. package/src/dx/visual-pipeline-builder.js +0 -578
  223. package/src/ingest.js +0 -59
  224. package/src/pipeline/pipeline.js +0 -18
  225. package/src/query.js +0 -117
@@ -6,13 +6,11 @@
6
6
  */
7
7
 
8
8
  const { Command } = require("commander");
9
- const fs = require("fs/promises");
10
9
 
11
10
  const { logger } = require("../utils/logger.js");
12
11
 
13
12
  // Shared utilities
14
13
  const {
15
- createProgressBar,
16
14
  parsePositiveInteger,
17
15
  generateCompletionScript,
18
16
  getVersion,
@@ -21,7 +19,10 @@ const {
21
19
 
22
20
  // Handler modules
23
21
  const { handleRun } = require("./handlers/run-handler.js");
24
- const { handleInit } = require("./handlers/init-handler.js");
22
+ const {
23
+ handleInit,
24
+ exitAfterConnectionTest,
25
+ } = require("./handlers/init-handler.js");
25
26
  const {
26
27
  handleDoctor,
27
28
  handleValidate,
@@ -35,55 +36,13 @@ const {
35
36
  const { handleIngest } = require("./handlers/ingest-handler.js");
36
37
  const { handleQuery } = require("./handlers/query-handler.js");
37
38
 
38
- // Mock dependencies for test compatibility
39
- const mockPluginMarketplaceCommands = () => {
40
- const cmd = new Command("plugin");
41
- cmd.description("Plugin marketplace commands");
42
- cmd
43
- .command("search")
44
- .argument("[query]")
45
- .action(() => {});
46
- cmd
47
- .command("install")
48
- .argument("<name>")
49
- .action(() => {});
50
- cmd.command("publish").action(() => {});
51
- return cmd;
52
- };
53
-
54
- const mockPipelineDoctor = async (options) => {
55
- console.log("🏥 Running pipeline diagnostics");
56
- if (options.categories) {
57
- options.categories.forEach((cat) => {
58
- console.log(`${cat.charAt(0).toUpperCase() + cat.slice(1)} Issues:`);
59
- console.log(" ✅ No issues found");
60
- });
61
- } else {
62
- console.log("✅ All systems operational");
63
- }
64
- return {
65
- summary: { total: 0, passed: 0, warnings: 0, errors: 0 },
66
- categories: {},
67
- issues: [],
68
- };
69
- };
70
-
71
- const mockValidateSchema = (config) => {
72
- if (!config || typeof config !== "object") {
73
- return {
74
- valid: false,
75
- errors: [{ message: "Invalid configuration format" }],
76
- };
39
+ function parseNonNegativeInt(value) {
40
+ const n = Number(value);
41
+ if (!Number.isInteger(n) || n < 0) {
42
+ throw new Error(`Expected a non-negative integer, got "${value}"`);
77
43
  }
78
- if (config.plugins && typeof config.plugins === "string") {
79
- return { valid: false, errors: [{ message: "Invalid plugins format" }] };
80
- }
81
- const isLegacy =
82
- config.plugins &&
83
- typeof config.plugins === "object" &&
84
- Object.values(config.plugins).some((p) => typeof p === "string");
85
- return { valid: true, legacy: isLegacy };
86
- };
44
+ return n;
45
+ }
87
46
 
88
47
  /**
89
48
  * Enhanced CLI with improved UX and additional features
@@ -105,7 +64,6 @@ class EnhancedCLI {
105
64
  .version(getVersion(), "-v, --version", "Display version information")
106
65
  .option("--config <path>", "Configuration file path", ".ragrc.json")
107
66
  .option("--verbose", "Enable verbose output")
108
- .option("--quiet", "Suppress non-essential output")
109
67
  .option("--no-color", "Disable colored output")
110
68
  .option("--dry-run", "Show what would be done without executing")
111
69
  .helpOption("-h, --help", "Display help information")
@@ -117,111 +75,98 @@ class EnhancedCLI {
117
75
  * Setup all CLI commands
118
76
  */
119
77
  setupCommands() {
120
- // Interactive initialization command
121
78
  this.program
122
79
  .command("init")
123
- .description("Initialize RAG pipeline configuration")
124
- .option("--interactive", "Use interactive wizard", true)
125
- .option("--no-interactive", "Skip interactive wizard")
126
- .option("--template <name>", "Use configuration template")
80
+ .description("Create a .ragrc.json configuration")
81
+ .option("--no-interactive", "Use the template without prompting")
82
+ .option(
83
+ "--template <name>",
84
+ "Starting point: local, openai, ollama, anthropic",
85
+ "local",
86
+ )
127
87
  .option("--output <path>", "Output configuration file", ".ragrc.json")
128
88
  .option("--force", "Overwrite existing configuration")
129
89
  .action(async (options) => {
130
- await handleInit(this.program.opts(), options, (outputPath) =>
131
- this.createBasicConfig(outputPath),
132
- );
90
+ const result = await handleInit(this.program.opts(), options);
91
+ // After a connection test, exit even if a provider call left a
92
+ // socket or timer open (see exitAfterConnectionTest).
93
+ exitAfterConnectionTest(result);
133
94
  });
134
95
 
135
- // Run pipeline command
136
96
  this.program
137
97
  .command("run")
138
- .description("Execute RAG pipeline operations")
139
- .option("--ingest <file>", "Ingest document into pipeline")
140
- .option("--query <prompt>", "Query the pipeline")
141
- .option("--stream", "Enable streaming output")
142
- .option(
143
- "--abort-timeout <ms>",
144
- "Abort operation after timeout (milliseconds)",
145
- parsePositiveInteger,
146
- )
147
- .option("--parallel", "Enable parallel processing")
98
+ .description("Ingest and/or query in one step")
99
+ .option("--ingest <path>", "File or directory to ingest first")
100
+ .option("--query <text>", "Question to ask after ingesting")
101
+ .option("--rebuild", "Discard the existing index before ingesting")
102
+ .option("--top-k <n>", "Passages to retrieve", parsePositiveInteger, 3)
103
+ .option("--json", "Print the query result as JSON")
148
104
  .action(async (options) => {
149
105
  await handleRun(this.program.opts(), options);
150
106
  });
151
107
 
152
- // Doctor command for diagnostics
153
108
  this.program
154
109
  .command("doctor")
155
- .description("Diagnose and fix common issues")
156
- .option("--category <categories...>", "Diagnostic categories to check")
157
- .option("--auto-fix", "Automatically fix issues where possible")
158
- .option("--report <path>", "Save diagnostic report to file")
110
+ .description("Diagnose configuration, plugins and environment")
111
+ .option(
112
+ "--category <categories...>",
113
+ "Only run: configuration, plugins, dependencies, performance, security, environment",
114
+ )
115
+ .option(
116
+ "--auto-fix",
117
+ "Fix issues where possible (npm install, file permissions)",
118
+ )
119
+ .option("--report <path>", "Save the diagnostic report as JSON")
159
120
  .action(async (options) => {
160
- await handleDoctor(this.program.opts(), options, mockPipelineDoctor);
121
+ await handleDoctor(this.program.opts(), options);
161
122
  });
162
123
 
163
- // Enhanced ingest command
164
124
  this.program
165
125
  .command("ingest")
166
- .description("Ingest documents into the pipeline")
167
- .argument("<file>", "Document file to ingest")
168
- .option("--validate", "Validate document before ingesting")
169
- .option("--preview", "Show preview of document chunks")
170
- .option("--parallel", "Enable parallel processing")
171
- .option("--streaming", "Enable streaming with memory safeguards")
172
- .option("--trace", "Enable detailed tracing and event logging")
173
- .option("--stats", "Show pipeline metrics summary at the end")
174
- .option(
175
- "--export-observability <file>",
176
- "Export observability data to file",
177
- )
178
- .option(
179
- "--max-concurrency <number>",
180
- "Maximum concurrent operations",
181
- "3",
182
- )
183
- .option(
184
- "--batch-size <number>",
185
- "Batch size for parallel processing",
186
- "10",
187
- )
188
- .option("--max-memory <number>", "Maximum memory usage in MB", "512")
189
- .action(async (file, options) => {
190
- await handleIngest(this.program.opts(), file, options);
126
+ .description("Load, embed and index documents")
127
+ .argument("<path>", "File or directory (.md, .html, .csv, .txt)")
128
+ .option("--rebuild", "Discard the existing index before ingesting")
129
+ .action(async (inputPath, options) => {
130
+ await handleIngest(this.program.opts(), inputPath, options);
191
131
  });
192
132
 
193
- // Enhanced query command
194
133
  this.program
195
134
  .command("query")
196
- .description("Query the RAG pipeline")
197
- .argument("<prompt>", "Query prompt")
198
- .option("--stream", "Enable streaming response")
199
- .option("--explain", "Show explanation of query processing")
200
- .option("--parallel", "Enable parallel processing")
201
- .option("--trace", "Enable detailed tracing and event logging")
202
- .option("--stats", "Show pipeline metrics summary at the end")
203
- .option(
204
- "--export-observability <file>",
205
- "Export observability data to file",
206
- )
207
- .action(async (prompt, options) => {
208
- await handleQuery(this.program.opts(), prompt, options);
135
+ .description("Ask a question against the ingested documents")
136
+ .argument("<question>", "Question text")
137
+ .option("--top-k <n>", "Passages to retrieve", parsePositiveInteger, 3)
138
+ .option("--json", "Print the result as JSON")
139
+ .action(async (question, options) => {
140
+ await handleQuery(this.program.opts(), question, options);
209
141
  });
210
142
 
211
- // Configuration validation command
212
143
  this.program
213
144
  .command("validate")
214
- .description("Validate configuration file")
215
- .option("--schema", "Validate against schema only")
216
- .option("--plugins", "Validate plugin availability")
217
- .option("--dependencies", "Check plugin dependencies")
218
- .option("--fix", "Attempt to fix validation issues")
145
+ .description("Validate the configuration and resolve its components")
146
+ .action(async () => {
147
+ await handleValidate(this.program.opts());
148
+ });
149
+
150
+ this.program
151
+ .command("serve")
152
+ .description("Serve GET /health and POST /query over HTTP (local use)")
153
+ .option(
154
+ "--port <n>",
155
+ "Port (0 picks a free one)",
156
+ parseNonNegativeInt,
157
+ 3000,
158
+ )
159
+ .option("--host <host>", "Interface to bind", "127.0.0.1")
219
160
  .action(async (options) => {
220
- await handleValidate(this.program.opts(), options, mockValidateSchema);
161
+ const { handleServe } = require("./handlers/serve-handler.js");
162
+ await handleServe(this.program.opts(), options);
221
163
  });
222
164
 
223
- // Plugin marketplace commands
224
- this.program.addCommand(mockPluginMarketplaceCommands());
165
+ const { PluginHubCLI } = require("./commands/plugin-hub.js");
166
+ this.program.addCommand(new PluginHubCLI().createCommands());
167
+
168
+ const { createAiCommand } = require("./commands/ai.js");
169
+ this.program.addCommand(createAiCommand(() => this.program.opts()));
225
170
 
226
171
  // Configuration management commands
227
172
  const configCmd = new Command("config");
@@ -230,7 +175,6 @@ class EnhancedCLI {
230
175
  configCmd
231
176
  .command("show")
232
177
  .description("Show current configuration")
233
- .option("--format <format>", "Output format (json, yaml, table)", "json")
234
178
  .option("--section <section>", "Show specific configuration section")
235
179
  .action(async (options) => {
236
180
  await handleConfigShow(this.program.opts(), options);
@@ -259,7 +203,7 @@ class EnhancedCLI {
259
203
  this.program
260
204
  .command("info")
261
205
  .description("Show system and plugin information")
262
- .option("--plugins", "Show registered plugin versions")
206
+ .option("--plugins", "Show built-in components and custom plugins")
263
207
  .option("--system", "Show system information")
264
208
  .option("--config", "Show configuration summary")
265
209
  .action(async (options) => {
@@ -277,64 +221,6 @@ class EnhancedCLI {
277
221
  });
278
222
  }
279
223
 
280
- /**
281
- * Create basic configuration
282
- */
283
- async createBasicConfig(outputPath) {
284
- const { validateRagrc } = require("../config/enhanced-ragrc-schema.js");
285
-
286
- const base = {
287
- namespace: "default",
288
- metadata: {
289
- name: "rag-pipeline",
290
- version: "1.0.0",
291
- description: "RAG pipeline configuration",
292
- createdAt: new Date().toISOString(),
293
- },
294
- pipeline: [
295
- { stage: "loader", name: "fs-loader", version: "1.0.0" },
296
- { stage: "embedder", name: "mock-embedder", version: "1.0.0" },
297
- { stage: "retriever", name: "mock-retriever", version: "1.0.0" },
298
- { stage: "llm", name: "mock-llm", version: "1.0.0" },
299
- ],
300
- performance: {
301
- parallel: {
302
- enabled: false,
303
- maxConcurrency: 3,
304
- },
305
- caching: {
306
- enabled: false,
307
- maxSize: 1000,
308
- ttl: 3600,
309
- },
310
- },
311
- observability: {
312
- logging: {
313
- level: "info",
314
- structured: true,
315
- },
316
- },
317
- };
318
-
319
- const result = validateRagrc(base);
320
- if (!result.valid) {
321
- result.errors?.forEach((error) =>
322
- console.error(` ${error.instancePath || ""}: ${error.message}`),
323
- );
324
- throw new Error("Failed to generate valid configuration");
325
- }
326
-
327
- if (outputPath) {
328
- await fs.writeFile(
329
- outputPath,
330
- JSON.stringify(result.normalized, null, 2),
331
- );
332
- console.log(`✅ Basic configuration created: ${outputPath}`);
333
- }
334
-
335
- return result.normalized;
336
- }
337
-
338
224
  /**
339
225
  * Run the CLI
340
226
  */
@@ -363,39 +249,8 @@ async function runEnhancedCLI(argv = process.argv) {
363
249
  await enhancedCLI.run(argv);
364
250
  }
365
251
 
366
- // CLI command surface for tests
367
- const init = async () => ({ ok: true });
368
- const ingest = async () => ({ ok: true });
369
- const query = async () => ({ ok: true });
370
- const handleError = async () => ({ ok: true });
371
- const validateArgs = () => true;
372
- const showHelp = () => "help text";
373
-
374
- // Extract createBasicConfig from the class for direct export
375
- const createBasicConfig = async (outputPath) => {
376
- const cli = new EnhancedCLI();
377
- return await cli.createBasicConfig(outputPath);
378
- };
379
-
380
- const enhancedCliCommands = {
381
- init,
382
- ingest,
383
- query,
384
- handleError,
385
- validateArgs,
386
- showHelp,
387
- };
388
-
389
252
  module.exports = {
390
253
  EnhancedCLI,
391
254
  enhancedCLI,
392
255
  runEnhancedCLI,
393
- enhancedCliCommands,
394
- init,
395
- ingest,
396
- query,
397
- handleError,
398
- validateArgs,
399
- showHelp,
400
- createBasicConfig,
401
256
  };