@vfarcic/dot-ai 0.124.0 → 0.126.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 (79) hide show
  1. package/assets/project-setup/templates/.github/CODEOWNERS.hbs +25 -0
  2. package/assets/project-setup/templates/.github/FUNDING.yml.hbs +35 -0
  3. package/assets/project-setup/templates/.github/ISSUE_TEMPLATE/bug_report.yml.hbs +175 -0
  4. package/assets/project-setup/templates/.github/ISSUE_TEMPLATE/config.yml.hbs +32 -0
  5. package/assets/project-setup/templates/.github/ISSUE_TEMPLATE/feature_request.yml.hbs +134 -0
  6. package/assets/project-setup/templates/.github/PULL_REQUEST_TEMPLATE.md.hbs +172 -0
  7. package/assets/project-setup/templates/.github/labeler.yml.hbs +123 -0
  8. package/assets/project-setup/templates/.github/release.yml.hbs +51 -0
  9. package/assets/project-setup/templates/.github/workflows/labeler.yml.hbs +21 -0
  10. package/assets/project-setup/templates/.github/workflows/scorecard.yml.hbs +71 -0
  11. package/assets/project-setup/templates/.github/workflows/stale.yml.hbs +57 -0
  12. package/dist/core/ai-provider-factory.d.ts.map +1 -1
  13. package/dist/core/ai-provider-factory.js +22 -5
  14. package/dist/core/ai-provider.interface.d.ts +16 -0
  15. package/dist/core/ai-provider.interface.d.ts.map +1 -1
  16. package/dist/core/capability-scan-workflow.d.ts +4 -9
  17. package/dist/core/capability-scan-workflow.d.ts.map +1 -1
  18. package/dist/core/capability-scan-workflow.js +203 -456
  19. package/dist/core/discovery.d.ts +6 -0
  20. package/dist/core/discovery.d.ts.map +1 -1
  21. package/dist/core/discovery.js +39 -3
  22. package/dist/core/embedding-service.d.ts +9 -36
  23. package/dist/core/embedding-service.d.ts.map +1 -1
  24. package/dist/core/embedding-service.js +137 -246
  25. package/dist/core/index.d.ts +1 -1
  26. package/dist/core/index.js +2 -2
  27. package/dist/core/kubernetes-utils.d.ts +1 -0
  28. package/dist/core/kubernetes-utils.d.ts.map +1 -1
  29. package/dist/core/kubernetes-utils.js +53 -48
  30. package/dist/core/model-config.d.ts +2 -0
  31. package/dist/core/model-config.d.ts.map +1 -1
  32. package/dist/core/model-config.js +3 -1
  33. package/dist/core/providers/anthropic-provider.d.ts.map +1 -1
  34. package/dist/core/providers/anthropic-provider.js +352 -282
  35. package/dist/core/providers/provider-debug-utils.d.ts +4 -0
  36. package/dist/core/providers/provider-debug-utils.d.ts.map +1 -1
  37. package/dist/core/providers/provider-debug-utils.js +25 -3
  38. package/dist/core/providers/vercel-provider.d.ts +1 -0
  39. package/dist/core/providers/vercel-provider.d.ts.map +1 -1
  40. package/dist/core/providers/vercel-provider.js +412 -345
  41. package/dist/core/tracing/ai-tracing.d.ts +80 -0
  42. package/dist/core/tracing/ai-tracing.d.ts.map +1 -0
  43. package/dist/core/tracing/ai-tracing.js +122 -0
  44. package/dist/core/tracing/config.d.ts +15 -0
  45. package/dist/core/tracing/config.d.ts.map +1 -0
  46. package/dist/core/tracing/config.js +133 -0
  47. package/dist/core/tracing/http-tracing.d.ts +28 -0
  48. package/dist/core/tracing/http-tracing.d.ts.map +1 -0
  49. package/dist/core/tracing/http-tracing.js +119 -0
  50. package/dist/core/tracing/index.d.ts +14 -0
  51. package/dist/core/tracing/index.d.ts.map +1 -0
  52. package/dist/core/tracing/index.js +40 -0
  53. package/dist/core/tracing/k8s-tracing.d.ts +57 -0
  54. package/dist/core/tracing/k8s-tracing.d.ts.map +1 -0
  55. package/dist/core/tracing/k8s-tracing.js +155 -0
  56. package/dist/core/tracing/qdrant-tracing.d.ts +68 -0
  57. package/dist/core/tracing/qdrant-tracing.d.ts.map +1 -0
  58. package/dist/core/tracing/qdrant-tracing.js +102 -0
  59. package/dist/core/tracing/tool-tracing.d.ts +31 -0
  60. package/dist/core/tracing/tool-tracing.d.ts.map +1 -0
  61. package/dist/core/tracing/tool-tracing.js +76 -0
  62. package/dist/core/tracing/tracer.d.ts +21 -0
  63. package/dist/core/tracing/tracer.d.ts.map +1 -0
  64. package/dist/core/tracing/tracer.js +215 -0
  65. package/dist/core/tracing/types.d.ts +86 -0
  66. package/dist/core/tracing/types.d.ts.map +1 -0
  67. package/dist/core/tracing/types.js +41 -0
  68. package/dist/core/unified-creation-session.js +1 -1
  69. package/dist/core/vector-db-service.d.ts.map +1 -1
  70. package/dist/core/vector-db-service.js +238 -163
  71. package/dist/interfaces/mcp.d.ts.map +1 -1
  72. package/dist/interfaces/mcp.js +71 -43
  73. package/dist/mcp/server.js +12 -2
  74. package/dist/tools/organizational-data.d.ts.map +1 -1
  75. package/dist/tools/organizational-data.js +2 -4
  76. package/dist/tools/version.d.ts +12 -1
  77. package/dist/tools/version.d.ts.map +1 -1
  78. package/dist/tools/version.js +24 -4
  79. package/package.json +11 -1
@@ -150,6 +150,12 @@ export declare class KubernetesDiscovery {
150
150
  explainResource(resource: string, options?: {
151
151
  field?: string;
152
152
  }): Promise<string>;
153
+ /**
154
+ * Get CRD definition with cleaned-up YAML (removes massive annotations and unnecessary fields)
155
+ * @param crdName - Name of the CRD (e.g., 'workflows.argoproj.io')
156
+ * @returns Cleaned YAML string suitable for AI prompts
157
+ */
158
+ getCRDDefinition(crdName: string): Promise<string>;
153
159
  fingerprintCluster(): Promise<ClusterFingerprint>;
154
160
  private getResourceCounts;
155
161
  private getNetworkingInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,9 @@ exports.KubernetesDiscovery = void 0;
42
42
  const k8s = __importStar(require("@kubernetes/client-node"));
43
43
  const path = __importStar(require("path"));
44
44
  const os = __importStar(require("os"));
45
+ const yaml = __importStar(require("yaml"));
45
46
  const kubernetes_utils_1 = require("./kubernetes-utils");
47
+ const tracing_1 = require("./tracing");
46
48
  class KubernetesDiscovery {
47
49
  kc;
48
50
  k8sApi;
@@ -141,7 +143,7 @@ class KubernetesDiscovery {
141
143
  // Try to get server version
142
144
  let version;
143
145
  try {
144
- const versionClient = this.kc.makeApiClient(k8s.VersionApi);
146
+ const versionClient = (0, tracing_1.createTracedK8sClient)(this.kc.makeApiClient(k8s.VersionApi), 'VersionApi');
145
147
  const versionResponse = await versionClient.getCode();
146
148
  version = versionResponse.gitVersion;
147
149
  }
@@ -187,8 +189,8 @@ class KubernetesDiscovery {
187
189
  // Priority 3: Default kubeconfig location
188
190
  this.kc.loadFromDefault();
189
191
  }
190
- // Create API clients
191
- this.k8sApi = this.kc.makeApiClient(k8s.CoreV1Api);
192
+ // Create API clients with tracing
193
+ this.k8sApi = (0, tracing_1.createTracedK8sClient)(this.kc.makeApiClient(k8s.CoreV1Api), 'CoreV1Api');
192
194
  // Test the connection by making a simple API call
193
195
  try {
194
196
  await this.k8sApi.listNamespace();
@@ -461,6 +463,40 @@ class KubernetesDiscovery {
461
463
  throw new Error(`Failed to explain resource '${resource}': ${error instanceof Error ? error.message : 'Unknown error'}. Please check resource name and cluster connectivity.`);
462
464
  }
463
465
  }
466
+ /**
467
+ * Get CRD definition with cleaned-up YAML (removes massive annotations and unnecessary fields)
468
+ * @param crdName - Name of the CRD (e.g., 'workflows.argoproj.io')
469
+ * @returns Cleaned YAML string suitable for AI prompts
470
+ */
471
+ async getCRDDefinition(crdName) {
472
+ if (!this.connected) {
473
+ throw new Error('Not connected to cluster');
474
+ }
475
+ try {
476
+ const yamlOutput = await this.executeKubectl(['get', 'crd', crdName, '-o', 'yaml'], { kubeconfig: this.kubeconfigPath });
477
+ // Parse YAML
478
+ const crdObject = yaml.parse(yamlOutput);
479
+ // Remove massive last-applied-configuration annotation
480
+ if (crdObject.metadata?.annotations) {
481
+ delete crdObject.metadata.annotations['kubectl.kubernetes.io/last-applied-configuration'];
482
+ }
483
+ // Remove status section (not needed for schema understanding)
484
+ delete crdObject.status;
485
+ // Remove unnecessary metadata fields
486
+ if (crdObject.metadata) {
487
+ delete crdObject.metadata.creationTimestamp;
488
+ delete crdObject.metadata.resourceVersion;
489
+ delete crdObject.metadata.uid;
490
+ delete crdObject.metadata.managedFields;
491
+ delete crdObject.metadata.generation;
492
+ }
493
+ // Re-serialize to clean YAML
494
+ return yaml.stringify(crdObject);
495
+ }
496
+ catch (error) {
497
+ throw new Error(`Failed to get CRD definition for '${crdName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
498
+ }
499
+ }
464
500
  async fingerprintCluster() {
465
501
  if (!this.connected) {
466
502
  throw new Error('Not connected to cluster');
@@ -18,52 +18,25 @@ export interface EmbeddingProvider {
18
18
  getModel(): string;
19
19
  }
20
20
  /**
21
- * OpenAI Embedding Provider
22
- * Optional provider for semantic search enhancement
21
+ * Unified Vercel AI SDK Embedding Provider
22
+ * Supports OpenAI, Google, and Mistral through Vercel AI SDK
23
23
  */
24
- export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
25
- private client;
26
- private model;
27
- private dimensions;
28
- private available;
29
- constructor(config?: EmbeddingConfig);
30
- generateEmbedding(text: string): Promise<number[]>;
31
- generateEmbeddings(texts: string[]): Promise<number[][]>;
32
- isAvailable(): boolean;
33
- getDimensions(): number;
34
- getModel(): string;
35
- }
36
- /**
37
- * Google Embedding Provider
38
- * Optional provider using Google's text-embedding-004 model
39
- */
40
- export declare class GoogleEmbeddingProvider implements EmbeddingProvider {
41
- private apiKey;
42
- private model;
43
- private dimensions;
44
- private available;
45
- constructor(config?: EmbeddingConfig);
46
- generateEmbedding(text: string): Promise<number[]>;
47
- generateEmbeddings(texts: string[]): Promise<number[][]>;
48
- isAvailable(): boolean;
49
- getDimensions(): number;
50
- getModel(): string;
51
- }
52
- /**
53
- * Mistral Embedding Provider
54
- * Optional provider using Mistral's text-embedding-v1 model
55
- */
56
- export declare class MistralEmbeddingProvider implements EmbeddingProvider {
24
+ export declare class VercelEmbeddingProvider implements EmbeddingProvider {
25
+ private providerType;
57
26
  private apiKey;
58
27
  private model;
59
28
  private dimensions;
60
29
  private available;
61
- constructor(config?: EmbeddingConfig);
30
+ private modelInstance;
31
+ constructor(config: EmbeddingConfig & {
32
+ provider: 'openai' | 'google' | 'mistral';
33
+ });
62
34
  generateEmbedding(text: string): Promise<number[]>;
63
35
  generateEmbeddings(texts: string[]): Promise<number[][]>;
64
36
  isAvailable(): boolean;
65
37
  getDimensions(): number;
66
38
  getModel(): string;
39
+ getProviderType(): string;
67
40
  }
68
41
  /**
69
42
  * Main Embedding Service
@@ -1 +1 @@
1
- {"version":3,"file":"embedding-service.d.ts","sourceRoot":"","sources":["../../src/core/embedding-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedding-service.d.ts","sourceRoot":"","sources":["../../src/core/embedding-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzD,WAAW,IAAI,OAAO,CAAC;IACvB,aAAa,IAAI,MAAM,CAAC;IACxB,QAAQ,IAAI,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,aAAa,CAAM;gBAEf,MAAM,EAAE,eAAe,GAAG;QAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE;IAyD7E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiDlD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA8D9D,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,eAAe,IAAI,MAAM;CAG1B;AA0BD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,MAAM,GAAE,eAAoB;IAKxC;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAaxD;;;OAGG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAc9D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,SAAS,IAAI;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IA4BD;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE;QAC/B,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,MAAM;CASX"}
@@ -5,155 +5,122 @@
5
5
  * Optional semantic search enhancement for pattern matching.
6
6
  * Gracefully falls back to keyword-only search when embedding providers are not available.
7
7
  */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
8
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.EmbeddingService = exports.MistralEmbeddingProvider = exports.GoogleEmbeddingProvider = exports.OpenAIEmbeddingProvider = void 0;
13
- const openai_1 = __importDefault(require("openai"));
9
+ exports.EmbeddingService = exports.VercelEmbeddingProvider = void 0;
14
10
  const google_1 = require("@ai-sdk/google");
15
11
  const mistral_1 = require("@ai-sdk/mistral");
12
+ const openai_1 = require("@ai-sdk/openai");
16
13
  const ai_1 = require("ai");
14
+ const tracing_1 = require("./tracing");
17
15
  /**
18
- * OpenAI Embedding Provider
19
- * Optional provider for semantic search enhancement
16
+ * Unified Vercel AI SDK Embedding Provider
17
+ * Supports OpenAI, Google, and Mistral through Vercel AI SDK
20
18
  */
21
- class OpenAIEmbeddingProvider {
22
- client = null;
19
+ class VercelEmbeddingProvider {
20
+ providerType;
21
+ apiKey;
23
22
  model;
24
23
  dimensions;
25
24
  available;
26
- constructor(config = {}) {
27
- const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
28
- this.model = config.model || 'text-embedding-3-small';
29
- this.dimensions = config.dimensions || 1536; // text-embedding-3-small default
25
+ modelInstance;
26
+ constructor(config) {
27
+ this.providerType = config.provider;
30
28
  this.available = false;
31
- if (apiKey) {
32
- try {
33
- this.client = new openai_1.default({ apiKey: apiKey });
34
- this.available = true;
35
- }
36
- catch (error) {
37
- // Client creation failed, remain unavailable
38
- this.available = false;
39
- this.client = null;
40
- }
41
- }
42
- }
43
- async generateEmbedding(text) {
44
- if (!this.isAvailable()) {
45
- throw new Error('OpenAI embedding provider not available');
46
- }
47
- if (!text || text.trim().length === 0) {
48
- throw new Error('Text cannot be empty for embedding generation');
29
+ // Get API key based on provider
30
+ switch (this.providerType) {
31
+ case 'openai':
32
+ this.apiKey = config.apiKey || process.env.CUSTOM_EMBEDDINGS_API_KEY || process.env.OPENAI_API_KEY || '';
33
+ this.model = config.model || 'text-embedding-3-small';
34
+ this.dimensions = config.dimensions || 1536;
35
+ break;
36
+ case 'google':
37
+ this.apiKey = config.apiKey || process.env.GOOGLE_API_KEY || '';
38
+ this.model = config.model || 'text-embedding-004';
39
+ this.dimensions = config.dimensions || 768;
40
+ break;
41
+ case 'mistral':
42
+ this.apiKey = config.apiKey || process.env.MISTRAL_API_KEY || '';
43
+ this.model = config.model || 'mistral-embed';
44
+ this.dimensions = config.dimensions || 1024;
45
+ break;
46
+ }
47
+ if (!this.apiKey) {
48
+ this.available = false;
49
+ return;
49
50
  }
50
51
  try {
51
- const response = await this.client.embeddings.create({
52
- model: this.model,
53
- input: text.trim(),
54
- encoding_format: 'float'
55
- });
56
- if (!response.data || response.data.length === 0) {
57
- throw new Error('No embedding data returned from OpenAI API');
58
- }
59
- return response.data[0].embedding;
60
- }
61
- catch (error) {
62
- if (error instanceof Error) {
63
- throw new Error(`OpenAI embedding failed: ${error.message}`);
52
+ // Initialize model instance based on provider
53
+ switch (this.providerType) {
54
+ case 'openai': {
55
+ const baseURL = process.env.CUSTOM_EMBEDDINGS_BASE_URL;
56
+ const openai = (0, openai_1.createOpenAI)({
57
+ apiKey: this.apiKey,
58
+ ...(baseURL && { baseURL })
59
+ });
60
+ this.modelInstance = openai.textEmbedding(this.model);
61
+ break;
62
+ }
63
+ case 'google':
64
+ // Set environment variable that Google SDK expects
65
+ process.env.GOOGLE_GENERATIVE_AI_API_KEY = this.apiKey;
66
+ this.modelInstance = google_1.google.textEmbedding(this.model);
67
+ break;
68
+ case 'mistral': {
69
+ const mistral = (0, mistral_1.createMistral)({ apiKey: this.apiKey });
70
+ this.modelInstance = mistral.textEmbedding(this.model);
71
+ break;
72
+ }
64
73
  }
65
- throw new Error(`OpenAI embedding failed: ${String(error)}`);
66
- }
67
- }
68
- async generateEmbeddings(texts) {
69
- if (!this.isAvailable()) {
70
- throw new Error('OpenAI embedding provider not available');
71
- }
72
- if (!texts || texts.length === 0) {
73
- return [];
74
- }
75
- const validTexts = texts
76
- .map(t => t?.trim())
77
- .filter(t => t && t.length > 0);
78
- if (validTexts.length === 0) {
79
- return [];
80
- }
81
- try {
82
- const response = await this.client.embeddings.create({
83
- model: this.model,
84
- input: validTexts,
85
- encoding_format: 'float'
86
- });
87
- return response.data.map(item => item.embedding);
74
+ this.available = true;
88
75
  }
89
76
  catch (error) {
90
- if (error instanceof Error) {
91
- throw new Error(`OpenAI batch embedding failed: ${error.message}`);
92
- }
93
- throw new Error(`OpenAI batch embedding failed: ${String(error)}`);
94
- }
95
- }
96
- isAvailable() {
97
- return this.available && this.client !== null;
98
- }
99
- getDimensions() {
100
- return this.dimensions;
101
- }
102
- getModel() {
103
- return this.model;
104
- }
105
- }
106
- exports.OpenAIEmbeddingProvider = OpenAIEmbeddingProvider;
107
- /**
108
- * Google Embedding Provider
109
- * Optional provider using Google's text-embedding-004 model
110
- */
111
- class GoogleEmbeddingProvider {
112
- apiKey = null;
113
- model;
114
- dimensions;
115
- available;
116
- constructor(config = {}) {
117
- this.apiKey = config.apiKey || process.env.GOOGLE_API_KEY || null;
118
- this.model = config.model || 'text-embedding-004';
119
- this.dimensions = config.dimensions || 768; // text-embedding-004 default
120
- this.available = !!this.apiKey;
121
- // Set the environment variable that Google SDK expects
122
- if (this.apiKey) {
123
- process.env.GOOGLE_GENERATIVE_AI_API_KEY = this.apiKey;
77
+ this.available = false;
124
78
  }
125
79
  }
126
80
  async generateEmbedding(text) {
127
81
  if (!this.isAvailable()) {
128
- throw new Error('Google embedding provider not available');
82
+ throw new Error(`${this.providerType} embedding provider not available`);
129
83
  }
130
84
  if (!text || text.trim().length === 0) {
131
85
  throw new Error('Text cannot be empty for embedding generation');
132
86
  }
133
- try {
134
- const model = google_1.google.textEmbedding(this.model);
135
- const result = await (0, ai_1.embed)({
136
- model,
137
- value: text.trim(),
138
- providerOptions: {
139
- google: {
140
- outputDimensionality: this.dimensions,
141
- taskType: 'SEMANTIC_SIMILARITY'
142
- }
87
+ // Wrap embed() call with OpenTelemetry tracing
88
+ return await (0, tracing_1.withAITracing)({
89
+ provider: this.providerType,
90
+ model: this.model,
91
+ operation: 'embeddings'
92
+ }, async () => {
93
+ try {
94
+ const embedOptions = {
95
+ model: this.modelInstance,
96
+ value: text.trim()
97
+ };
98
+ // Add Google-specific options
99
+ if (this.providerType === 'google') {
100
+ embedOptions.providerOptions = {
101
+ google: {
102
+ outputDimensionality: this.dimensions,
103
+ taskType: 'SEMANTIC_SIMILARITY'
104
+ }
105
+ };
143
106
  }
144
- });
145
- return result.embedding;
146
- }
147
- catch (error) {
148
- if (error instanceof Error) {
149
- throw new Error(`Google embedding failed: ${error.message}`);
107
+ const result = await (0, ai_1.embed)(embedOptions);
108
+ return result.embedding;
150
109
  }
151
- throw new Error(`Google embedding failed: ${String(error)}`);
152
- }
110
+ catch (error) {
111
+ if (error instanceof Error) {
112
+ throw new Error(`${this.providerType} embedding failed: ${error.message}`);
113
+ }
114
+ throw new Error(`${this.providerType} embedding failed: ${String(error)}`);
115
+ }
116
+ }, (embedding) => ({
117
+ embeddingCount: 1,
118
+ embeddingDimensions: embedding.length
119
+ }));
153
120
  }
154
121
  async generateEmbeddings(texts) {
155
122
  if (!this.isAvailable()) {
156
- throw new Error('Google embedding provider not available');
123
+ throw new Error(`${this.providerType} embedding provider not available`);
157
124
  }
158
125
  if (!texts || texts.length === 0) {
159
126
  return [];
@@ -164,26 +131,41 @@ class GoogleEmbeddingProvider {
164
131
  if (validTexts.length === 0) {
165
132
  return [];
166
133
  }
167
- try {
168
- const model = google_1.google.textEmbedding(this.model);
169
- const results = await Promise.all(validTexts.map(text => (0, ai_1.embed)({
170
- model,
171
- value: text,
172
- providerOptions: {
173
- google: {
174
- outputDimensionality: this.dimensions,
175
- taskType: 'SEMANTIC_SIMILARITY'
134
+ // Wrap batch embed calls with OpenTelemetry tracing
135
+ return await (0, tracing_1.withAITracing)({
136
+ provider: this.providerType,
137
+ model: this.model,
138
+ operation: 'embeddings'
139
+ }, async () => {
140
+ try {
141
+ const results = await Promise.all(validTexts.map(text => {
142
+ const embedOptions = {
143
+ model: this.modelInstance,
144
+ value: text
145
+ };
146
+ // Add Google-specific options
147
+ if (this.providerType === 'google') {
148
+ embedOptions.providerOptions = {
149
+ google: {
150
+ outputDimensionality: this.dimensions,
151
+ taskType: 'SEMANTIC_SIMILARITY'
152
+ }
153
+ };
176
154
  }
155
+ return (0, ai_1.embed)(embedOptions);
156
+ }));
157
+ return results.map(result => result.embedding);
158
+ }
159
+ catch (error) {
160
+ if (error instanceof Error) {
161
+ throw new Error(`${this.providerType} batch embedding failed: ${error.message}`);
177
162
  }
178
- })));
179
- return results.map(result => result.embedding);
180
- }
181
- catch (error) {
182
- if (error instanceof Error) {
183
- throw new Error(`Google batch embedding failed: ${error.message}`);
163
+ throw new Error(`${this.providerType} batch embedding failed: ${String(error)}`);
184
164
  }
185
- throw new Error(`Google batch embedding failed: ${String(error)}`);
186
- }
165
+ }, (embeddings) => ({
166
+ embeddingCount: embeddings.length,
167
+ embeddingDimensions: embeddings[0]?.length || this.dimensions
168
+ }));
187
169
  }
188
170
  isAvailable() {
189
171
  return this.available;
@@ -194,109 +176,30 @@ class GoogleEmbeddingProvider {
194
176
  getModel() {
195
177
  return this.model;
196
178
  }
197
- }
198
- exports.GoogleEmbeddingProvider = GoogleEmbeddingProvider;
199
- /**
200
- * Mistral Embedding Provider
201
- * Optional provider using Mistral's text-embedding-v1 model
202
- */
203
- class MistralEmbeddingProvider {
204
- apiKey = null;
205
- model;
206
- dimensions;
207
- available;
208
- constructor(config = {}) {
209
- this.apiKey = config.apiKey || process.env.MISTRAL_API_KEY || null;
210
- this.model = config.model || 'mistral-embed';
211
- this.dimensions = config.dimensions || 1024; // mistral-embed default
212
- this.available = !!this.apiKey;
213
- }
214
- async generateEmbedding(text) {
215
- if (!this.isAvailable()) {
216
- throw new Error('Mistral embedding provider not available');
217
- }
218
- if (!text || text.trim().length === 0) {
219
- throw new Error('Text cannot be empty for embedding generation');
220
- }
221
- try {
222
- const mistral = (0, mistral_1.createMistral)({ apiKey: this.apiKey });
223
- const model = mistral.textEmbedding(this.model);
224
- const result = await (0, ai_1.embed)({
225
- model,
226
- value: text.trim()
227
- });
228
- return result.embedding;
229
- }
230
- catch (error) {
231
- if (error instanceof Error) {
232
- throw new Error(`Mistral embedding failed: ${error.message}`);
233
- }
234
- throw new Error(`Mistral embedding failed: ${String(error)}`);
235
- }
236
- }
237
- async generateEmbeddings(texts) {
238
- if (!this.isAvailable()) {
239
- throw new Error('Mistral embedding provider not available');
240
- }
241
- if (!texts || texts.length === 0) {
242
- return [];
243
- }
244
- const validTexts = texts
245
- .map(t => t?.trim())
246
- .filter(t => t && t.length > 0);
247
- if (validTexts.length === 0) {
248
- return [];
249
- }
250
- try {
251
- const mistral = (0, mistral_1.createMistral)({ apiKey: this.apiKey });
252
- const model = mistral.textEmbedding(this.model);
253
- const results = await Promise.all(validTexts.map(text => (0, ai_1.embed)({
254
- model,
255
- value: text
256
- })));
257
- return results.map(result => result.embedding);
258
- }
259
- catch (error) {
260
- if (error instanceof Error) {
261
- throw new Error(`Mistral batch embedding failed: ${error.message}`);
262
- }
263
- throw new Error(`Mistral batch embedding failed: ${String(error)}`);
264
- }
265
- }
266
- isAvailable() {
267
- return this.available;
268
- }
269
- getDimensions() {
270
- return this.dimensions;
271
- }
272
- getModel() {
273
- return this.model;
179
+ getProviderType() {
180
+ return this.providerType;
274
181
  }
275
182
  }
276
- exports.MistralEmbeddingProvider = MistralEmbeddingProvider;
183
+ exports.VercelEmbeddingProvider = VercelEmbeddingProvider;
277
184
  /**
278
185
  * Factory function to create embedding provider based on configuration
279
186
  */
280
187
  function createEmbeddingProvider(config = {}) {
281
- const provider = config.provider || process.env.EMBEDDINGS_PROVIDER || 'openai';
188
+ const providerType = (config.provider || process.env.EMBEDDINGS_PROVIDER || 'openai').toLowerCase();
189
+ // Validate provider type
190
+ if (providerType !== 'openai' && providerType !== 'google' && providerType !== 'mistral') {
191
+ console.warn(`Unknown embedding provider: ${providerType}, falling back to openai`);
192
+ return createEmbeddingProvider({ ...config, provider: 'openai' });
193
+ }
282
194
  try {
283
- switch (provider.toLowerCase()) {
284
- case 'google': {
285
- const googleProvider = new GoogleEmbeddingProvider(config);
286
- return googleProvider.isAvailable() ? googleProvider : null;
287
- }
288
- case 'mistral': {
289
- const mistralProvider = new MistralEmbeddingProvider(config);
290
- return mistralProvider.isAvailable() ? mistralProvider : null;
291
- }
292
- case 'openai':
293
- default: {
294
- const openaiProvider = new OpenAIEmbeddingProvider(config);
295
- return openaiProvider.isAvailable() ? openaiProvider : null;
296
- }
297
- }
195
+ const provider = new VercelEmbeddingProvider({
196
+ ...config,
197
+ provider: providerType
198
+ });
199
+ return provider.isAvailable() ? provider : null;
298
200
  }
299
201
  catch (error) {
202
+ console.error(`Failed to create ${providerType} embedding provider:`, error);
300
203
  return null;
301
204
  }
302
205
  }
@@ -360,20 +263,8 @@ class EmbeddingService {
360
263
  */
361
264
  getStatus() {
362
265
  if (this.isAvailable()) {
363
- // Determine provider type based on instance
364
- let providerName;
365
- if (this.provider instanceof GoogleEmbeddingProvider) {
366
- providerName = 'google';
367
- }
368
- else if (this.provider instanceof MistralEmbeddingProvider) {
369
- providerName = 'mistral';
370
- }
371
- else if (this.provider instanceof OpenAIEmbeddingProvider) {
372
- providerName = 'openai';
373
- }
374
- else {
375
- providerName = 'unknown';
376
- }
266
+ // Get provider type from VercelEmbeddingProvider
267
+ const providerName = this.provider.getProviderType?.() || 'unknown';
377
268
  return {
378
269
  available: true,
379
270
  provider: providerName,
@@ -45,6 +45,6 @@ export { BaseVectorService, BaseSearchOptions, BaseSearchResult } from './base-v
45
45
  export { PatternVectorService, PatternSearchOptions, PatternSearchResult } from './pattern-vector-service';
46
46
  export { PolicyVectorService, PolicySearchOptions, PolicySearchResult } from './policy-vector-service';
47
47
  export { CapabilityVectorService, ResourceCapability, CapabilitySearchOptions } from './capability-vector-service';
48
- export { EmbeddingService, EmbeddingConfig, EmbeddingProvider, OpenAIEmbeddingProvider } from './embedding-service';
48
+ export { EmbeddingService, EmbeddingConfig, EmbeddingProvider, VercelEmbeddingProvider } from './embedding-service';
49
49
  export default DotAI;
50
50
  //# sourceMappingURL=index.d.ts.map
@@ -5,7 +5,7 @@
5
5
  * Shared intelligence for both CLI and MCP interfaces
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.OpenAIEmbeddingProvider = exports.EmbeddingService = exports.CapabilityVectorService = exports.PolicyVectorService = exports.PatternVectorService = exports.BaseVectorService = exports.VectorDBService = exports.deserializePattern = exports.serializePattern = exports.createPattern = exports.validatePattern = exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.AIProviderFactory = exports.createAIProvider = exports.WorkflowEngine = exports.MemorySystem = exports.KubernetesDiscovery = exports.DotAI = void 0;
8
+ exports.VercelEmbeddingProvider = exports.EmbeddingService = exports.CapabilityVectorService = exports.PolicyVectorService = exports.PatternVectorService = exports.BaseVectorService = exports.VectorDBService = exports.deserializePattern = exports.serializePattern = exports.createPattern = exports.validatePattern = exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.AIProviderFactory = exports.createAIProvider = exports.WorkflowEngine = exports.MemorySystem = exports.KubernetesDiscovery = exports.DotAI = void 0;
9
9
  const discovery_1 = require("./discovery");
10
10
  const memory_1 = require("./memory");
11
11
  const workflow_1 = require("./workflow");
@@ -137,6 +137,6 @@ var capability_vector_service_1 = require("./capability-vector-service");
137
137
  Object.defineProperty(exports, "CapabilityVectorService", { enumerable: true, get: function () { return capability_vector_service_1.CapabilityVectorService; } });
138
138
  var embedding_service_1 = require("./embedding-service");
139
139
  Object.defineProperty(exports, "EmbeddingService", { enumerable: true, get: function () { return embedding_service_1.EmbeddingService; } });
140
- Object.defineProperty(exports, "OpenAIEmbeddingProvider", { enumerable: true, get: function () { return embedding_service_1.OpenAIEmbeddingProvider; } });
140
+ Object.defineProperty(exports, "VercelEmbeddingProvider", { enumerable: true, get: function () { return embedding_service_1.VercelEmbeddingProvider; } });
141
141
  // Default export
142
142
  exports.default = DotAI;