@vfarcic/dot-ai 0.127.0 → 0.129.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ai-provider-factory.d.ts","sourceRoot":"","sources":["../../src/core/ai-provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AA+BjC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU;IAgCnD;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,aAAa,IAAI,UAAU;IA6ElC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAItC;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMrD;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAMxC;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
1
+ {"version":3,"file":"ai-provider-factory.d.ts","sourceRoot":"","sources":["../../src/core/ai-provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AA+BjC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU;IAgCnD;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,aAAa,IAAI,UAAU;IA0FlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAItC;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMrD;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAMxC;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
@@ -110,18 +110,29 @@ class AIProviderFactory {
110
110
  // Get API key for the provider
111
111
  // PRD #194: Support CUSTOM_LLM_API_KEY for custom LLM endpoints
112
112
  // Priority: 1. CUSTOM_LLM_API_KEY, 2. Provider-specific key (e.g., OPENAI_API_KEY)
113
- const apiKeyEnvVar = PROVIDER_ENV_KEYS[providerType];
114
- if (!apiKeyEnvVar) {
115
- process.stderr.write(`WARNING: No API key environment variable defined for provider: ${providerType}. ` +
116
- `Falling back to NoOpProvider.\n`);
117
- return new noop_provider_1.NoOpAIProvider();
113
+ // PRD #175: Amazon Bedrock uses AWS SDK credential chain, not API keys
114
+ let apiKey;
115
+ // Special handling for Amazon Bedrock - AWS SDK handles credentials automatically
116
+ if (providerType === 'amazon_bedrock') {
117
+ // Use dummy API key for Bedrock - AWS SDK will handle actual authentication
118
+ // AWS credentials checked at runtime by AWS SDK (env vars, ~/.aws/credentials, IAM roles)
119
+ apiKey = 'bedrock-uses-aws-credentials';
118
120
  }
119
- const apiKey = process.env.CUSTOM_LLM_API_KEY || process.env[apiKeyEnvVar];
120
- if (!apiKey) {
121
- process.stderr.write(`INFO: ${apiKeyEnvVar} not configured. ` +
122
- `AI features will be unavailable. ` +
123
- `Tools that don't require AI (prompts, project-setup) will still work.\n`);
124
- return new noop_provider_1.NoOpAIProvider();
121
+ else {
122
+ const apiKeyEnvVar = PROVIDER_ENV_KEYS[providerType];
123
+ if (!apiKeyEnvVar) {
124
+ process.stderr.write(`WARNING: No API key environment variable defined for provider: ${providerType}. ` +
125
+ `Falling back to NoOpProvider.\n`);
126
+ return new noop_provider_1.NoOpAIProvider();
127
+ }
128
+ const resolvedApiKey = process.env.CUSTOM_LLM_API_KEY || process.env[apiKeyEnvVar];
129
+ if (!resolvedApiKey) {
130
+ process.stderr.write(`INFO: ${apiKeyEnvVar} not configured. ` +
131
+ `AI features will be unavailable. ` +
132
+ `Tools that don't require AI (prompts, project-setup) will still work.\n`);
133
+ return new noop_provider_1.NoOpAIProvider();
134
+ }
135
+ apiKey = resolvedApiKey;
125
136
  }
126
137
  // Get optional model override
127
138
  const model = process.env.AI_MODEL;
@@ -130,9 +141,10 @@ class AIProviderFactory {
130
141
  // PRD #194: Get custom endpoint URL for OpenAI-compatible LLM APIs
131
142
  // Use CUSTOM_LLM_BASE_URL for LLM endpoints (separate from OPENAI_BASE_URL used for embeddings)
132
143
  const baseURL = process.env.CUSTOM_LLM_BASE_URL;
144
+ // Determine effective provider type based on endpoint configuration
145
+ let effectiveProviderType = providerType;
133
146
  // PRD #194: Detect OpenRouter and override provider type
134
147
  // OpenRouter requires dedicated provider for proper tool calling support
135
- let effectiveProviderType = providerType;
136
148
  if (baseURL && baseURL.includes('openrouter.ai')) {
137
149
  effectiveProviderType = 'openrouter';
138
150
  }
@@ -5,7 +5,7 @@
5
5
  * Gracefully falls back to keyword-only search when embedding providers are not available.
6
6
  */
7
7
  export interface EmbeddingConfig {
8
- provider?: 'openai' | 'google' | 'mistral';
8
+ provider?: 'openai' | 'google' | 'mistral' | 'amazon_bedrock';
9
9
  apiKey?: string;
10
10
  model?: string;
11
11
  dimensions?: number;
@@ -19,7 +19,7 @@ export interface EmbeddingProvider {
19
19
  }
20
20
  /**
21
21
  * Unified Vercel AI SDK Embedding Provider
22
- * Supports OpenAI, Google, and Mistral through Vercel AI SDK
22
+ * Supports OpenAI, Google, Mistral, and Amazon Bedrock through Vercel AI SDK
23
23
  */
24
24
  export declare class VercelEmbeddingProvider implements EmbeddingProvider {
25
25
  private providerType;
@@ -29,7 +29,7 @@ export declare class VercelEmbeddingProvider implements EmbeddingProvider {
29
29
  private available;
30
30
  private modelInstance;
31
31
  constructor(config: EmbeddingConfig & {
32
- provider: 'openai' | 'google' | 'mistral';
32
+ provider: 'openai' | 'google' | 'mistral' | 'amazon_bedrock';
33
33
  });
34
34
  generateEmbedding(text: string): Promise<number[]>;
35
35
  generateEmbeddings(texts: string[]): Promise<number[][]>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"embedding-service.d.ts","sourceRoot":"","sources":["../../src/core/embedding-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAC9D,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,CAAqD;IACzE,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,GAAG,gBAAgB,CAAA;KAAE;IA0EhG,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;IA6BD;;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"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.EmbeddingService = exports.VercelEmbeddingProvider = void 0;
10
+ const amazon_bedrock_1 = require("@ai-sdk/amazon-bedrock");
10
11
  const google_1 = require("@ai-sdk/google");
11
12
  const mistral_1 = require("@ai-sdk/mistral");
12
13
  const openai_1 = require("@ai-sdk/openai");
@@ -14,7 +15,7 @@ const ai_1 = require("ai");
14
15
  const tracing_1 = require("./tracing");
15
16
  /**
16
17
  * Unified Vercel AI SDK Embedding Provider
17
- * Supports OpenAI, Google, and Mistral through Vercel AI SDK
18
+ * Supports OpenAI, Google, Mistral, and Amazon Bedrock through Vercel AI SDK
18
19
  */
19
20
  class VercelEmbeddingProvider {
20
21
  providerType;
@@ -43,6 +44,12 @@ class VercelEmbeddingProvider {
43
44
  this.model = config.model || 'mistral-embed';
44
45
  this.dimensions = config.dimensions || 1024;
45
46
  break;
47
+ case 'amazon_bedrock':
48
+ // AWS SDK handles credentials automatically - no API key needed
49
+ this.apiKey = 'bedrock-uses-aws-credentials';
50
+ this.model = config.model || process.env.EMBEDDINGS_MODEL || 'amazon.titan-embed-text-v2:0';
51
+ this.dimensions = config.dimensions || 1024; // Titan v2 default
52
+ break;
46
53
  }
47
54
  if (!this.apiKey) {
48
55
  this.available = false;
@@ -70,6 +77,17 @@ class VercelEmbeddingProvider {
70
77
  this.modelInstance = mistral.textEmbedding(this.model);
71
78
  break;
72
79
  }
80
+ case 'amazon_bedrock': {
81
+ // AWS SDK automatically uses credential chain:
82
+ // 1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION)
83
+ // 2. ~/.aws/credentials file
84
+ // 3. IAM roles (EC2 instance profiles, ECS roles, EKS service accounts)
85
+ const bedrock = (0, amazon_bedrock_1.createAmazonBedrock)({
86
+ region: process.env.AWS_REGION || 'us-east-1',
87
+ });
88
+ this.modelInstance = bedrock.textEmbeddingModel(this.model);
89
+ break;
90
+ }
73
91
  }
74
92
  this.available = true;
75
93
  }
@@ -187,7 +205,7 @@ exports.VercelEmbeddingProvider = VercelEmbeddingProvider;
187
205
  function createEmbeddingProvider(config = {}) {
188
206
  const providerType = (config.provider || process.env.EMBEDDINGS_PROVIDER || 'openai').toLowerCase();
189
207
  // Validate provider type
190
- if (providerType !== 'openai' && providerType !== 'google' && providerType !== 'mistral') {
208
+ if (providerType !== 'openai' && providerType !== 'google' && providerType !== 'mistral' && providerType !== 'amazon_bedrock') {
191
209
  console.warn(`Unknown embedding provider: ${providerType}, falling back to openai`);
192
210
  return createEmbeddingProvider({ ...config, provider: 'openai' });
193
211
  }
@@ -276,7 +294,8 @@ class EmbeddingService {
276
294
  const keyMap = {
277
295
  'openai': 'OPENAI_API_KEY',
278
296
  'google': 'GOOGLE_API_KEY',
279
- 'mistral': 'MISTRAL_API_KEY'
297
+ 'mistral': 'MISTRAL_API_KEY',
298
+ 'amazon_bedrock': 'AWS credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION)'
280
299
  };
281
300
  const requiredKey = keyMap[requestedProvider] || 'OPENAI_API_KEY';
282
301
  return {
@@ -17,6 +17,7 @@ export declare const CURRENT_MODELS: {
17
17
  readonly deepseek: "deepseek-reasoner";
18
18
  readonly openrouter: "anthropic/claude-haiku-4.5";
19
19
  readonly custom: "gpt-5";
20
+ readonly amazon_bedrock: "global.anthropic.claude-sonnet-4-20250514-v1:0";
20
21
  };
21
22
  /**
22
23
  * Get current model for a provider
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/core/model-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,OAAO,cAAc,GAAG,MAAM,CAE7E"}
1
+ {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/core/model-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAcjB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,OAAO,cAAc,GAAG,MAAM,CAE7E"}
@@ -20,7 +20,8 @@ exports.CURRENT_MODELS = {
20
20
  mistral: 'mistral-large-latest',
21
21
  deepseek: 'deepseek-reasoner',
22
22
  openrouter: 'anthropic/claude-haiku-4.5', // PRD #194: OpenRouter default model (overridden by AI_MODEL env var)
23
- custom: 'gpt-5' // PRD #194: Custom endpoint default model (overridden by AI_MODEL env var)
23
+ custom: 'gpt-5', // PRD #194: Custom endpoint default model (overridden by AI_MODEL env var)
24
+ amazon_bedrock: 'global.anthropic.claude-sonnet-4-20250514-v1:0' // PRD #175: Amazon Bedrock default model (overridden by AI_MODEL env var)
24
25
  };
25
26
  /**
26
27
  * Get current model for a provider
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-provider.d.ts","sourceRoot":"","sources":["../../../src/core/providers/vercel-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,0BAA0B,CAAC;AAiBlC,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,aAAa,CAAM;gBAEf,MAAM,EAAE,gBAAgB;IAWpC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,eAAe;IAwEvB,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,MAAM;IAIzB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,OAAO;IAIxB,OAAO,CAAC,iBAAiB;IAyBnB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAkB,EAC7B,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,UAAU,CAAC;IAoJtB;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAiW/D"}
1
+ {"version":3,"file":"vercel-provider.d.ts","sourceRoot":"","sources":["../../../src/core/providers/vercel-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,0BAA0B,CAAC;AAiBlC,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,aAAa,CAAM;gBAEf,MAAM,EAAE,gBAAgB;IAWpC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,eAAe;IAkFvB,eAAe,IAAI,MAAM;IAIzB,eAAe,IAAI,MAAM;IAIzB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,OAAO;IAIxB,OAAO,CAAC,iBAAiB;IAyBnB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAkB,EAC7B,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,UAAU,CAAC;IAoJtB;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAiW/D"}
@@ -14,6 +14,7 @@ const anthropic_1 = require("@ai-sdk/anthropic");
14
14
  const xai_1 = require("@ai-sdk/xai");
15
15
  const mistral_1 = require("@ai-sdk/mistral");
16
16
  const deepseek_1 = require("@ai-sdk/deepseek");
17
+ const amazon_bedrock_1 = require("@ai-sdk/amazon-bedrock");
17
18
  const ai_sdk_provider_1 = require("@openrouter/ai-sdk-provider");
18
19
  const provider_debug_utils_1 = require("./provider-debug-utils");
19
20
  const model_config_1 = require("../model-config");
@@ -81,6 +82,16 @@ class VercelProvider {
81
82
  apiKey: this.apiKey,
82
83
  });
83
84
  break;
85
+ case 'amazon_bedrock':
86
+ // PRD #175: Amazon Bedrock provider
87
+ // AWS SDK automatically uses credential chain:
88
+ // 1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION)
89
+ // 2. ~/.aws/credentials file
90
+ // 3. IAM roles (EC2 instance profiles, ECS roles, EKS service accounts)
91
+ provider = (0, amazon_bedrock_1.createAmazonBedrock)({
92
+ region: process.env.AWS_REGION || 'us-east-1',
93
+ });
94
+ break;
84
95
  case 'openrouter':
85
96
  // PRD #194: OpenRouter custom endpoint support
86
97
  // Use dedicated OpenRouter provider for proper format conversion
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/interfaces/mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AA0CtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACxC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAkC;IACrD,OAAO,CAAC,aAAa,CAAC,CAAgC;IACtD,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe;IAsCjD;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2GrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,iBAAiB;IAInB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBd,mBAAmB;YAMnB,kBAAkB;YAwGlB,gBAAgB;IAexB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,OAAO,IAAI,OAAO;CAGnB"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/interfaces/mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AA0CtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACxC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAkC;IACrD,OAAO,CAAC,aAAa,CAAC,CAAgC;IACtD,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe;IAsCjD;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2GrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,iBAAiB;IAInB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBd,mBAAmB;YAMnB,kBAAkB;YA6GlB,gBAAgB;IAexB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,OAAO,IAAI,OAAO;CAGnB"}
@@ -222,6 +222,8 @@ class MCPServer {
222
222
  // Check if this is a REST API request
223
223
  if (this.restApiRouter.isApiRequest(req.url || '')) {
224
224
  this.logger.debug('Routing to REST API handler', { url: req.url });
225
+ // Mark span as REST API request
226
+ span.setAttribute('request.type', 'rest-api');
225
227
  try {
226
228
  await this.restApiRouter.handleRequest(req, res, body);
227
229
  endSpan(res.statusCode || 200);
@@ -238,6 +240,9 @@ class MCPServer {
238
240
  }
239
241
  }
240
242
  // Handle MCP protocol requests using the transport
243
+ // Mark span as MCP protocol request
244
+ span.setAttribute('request.type', 'mcp-protocol');
245
+ span.updateName('MCP ' + (req.url || '/'));
241
246
  try {
242
247
  await this.httpTransport.handleRequest(req, res, body);
243
248
  endSpan(res.statusCode || 200);
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOhD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,wBAAwB,oDAAoD,CAAC;AAC1F,eAAO,MAAM,yBAAyB;;CAErC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,YAAY,EAAE;gBACZ,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,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,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACZ,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAkOD;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAoIzE;AAqGD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAAC,SAAS,CAAC,CAW1D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CAwFd"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOhD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,wBAAwB,oDAAoD,CAAC;AAC1F,eAAO,MAAM,yBAAyB;;CAErC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,YAAY,EAAE;gBACZ,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,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,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACZ,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAkOD;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAoIzE;AAqGD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAAC,SAAS,CAAC,CAW1D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA2Fd"}
@@ -546,15 +546,18 @@ async function handleVersionTool(args, logger, requestId) {
546
546
  patternSearch: embeddingStatus.available ? 'semantic+keyword' : 'keyword-only',
547
547
  capabilityScanning: capabilityStatus.systemReady && kubernetesStatus.connected ? 'ready' : 'not-ready',
548
548
  kubernetesAccess: kubernetesStatus.connected ? 'connected' : 'disconnected',
549
- policyGeneration: kyvernoStatus.policyGenerationReady ? 'ready' : 'not-ready',
549
+ policyIntentManagement: vectorDBStatus.connected && embeddingStatus.available ? 'ready' : 'not-ready',
550
+ kyvernoPolicyGeneration: kyvernoStatus.policyGenerationReady ? 'ready' : 'not-ready',
550
551
  capabilities: [
551
552
  vectorDBStatus.connected && vectorDBStatus.collections.patterns.exists ? 'pattern-management' : null,
552
- vectorDBStatus.connected && vectorDBStatus.collections.policies.exists ? 'policy-management' : null,
553
+ // Policy intent management is available if Vector DB and embedding service are ready
554
+ vectorDBStatus.connected && embeddingStatus.available ? 'policy-intent-management' : null,
553
555
  capabilityStatus.systemReady && kubernetesStatus.connected ? 'capability-scanning' : null,
554
556
  embeddingStatus.available ? 'semantic-search' : null,
555
557
  aiProviderStatus.connected ? 'ai-recommendations' : null,
556
558
  kubernetesStatus.connected ? 'kubernetes-integration' : null,
557
- kyvernoStatus.policyGenerationReady ? 'policy-generation' : null
559
+ // Kyverno policy generation is only available when Kyverno is installed
560
+ kyvernoStatus.policyGenerationReady ? 'kyverno-policy-generation' : null
558
561
  ].filter(Boolean)
559
562
  },
560
563
  timestamp: new Date().toISOString()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vfarcic/dot-ai",
3
- "version": "0.127.0",
3
+ "version": "0.129.0",
4
4
  "description": "AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance",
5
5
  "mcpName": "io.github.vfarcic/dot-ai",
6
6
  "main": "dist/index.js",
@@ -28,6 +28,7 @@
28
28
  "test:integration:grok-fast": "AI_PROVIDER=xai_fast AI_PROVIDER_SDK=vercel DEBUG_DOT_AI=true ./tests/integration/infrastructure/run-integration-tests.sh",
29
29
  "test:integration:mistral": "AI_PROVIDER=mistral AI_PROVIDER_SDK=vercel DEBUG_DOT_AI=true ./tests/integration/infrastructure/run-integration-tests.sh",
30
30
  "test:integration:deepseek": "AI_PROVIDER=deepseek AI_PROVIDER_SDK=vercel DEBUG_DOT_AI=true ./tests/integration/infrastructure/run-integration-tests.sh",
31
+ "test:integration:bedrock": "AI_PROVIDER=amazon_bedrock AI_MODEL=global.anthropic.claude-sonnet-4-20250514-v1:0 AI_PROVIDER_SDK=vercel DEBUG_DOT_AI=true ./tests/integration/infrastructure/run-integration-tests.sh",
31
32
  "test:integration:custom-endpoint": "AI_PROVIDER=openai AI_PROVIDER_SDK=vercel DEBUG_DOT_AI=true ./tests/integration/infrastructure/run-integration-tests.sh",
32
33
  "eval:comparative": "DEBUG_DOT_AI=true npx tsx src/evaluation/eval-runner.ts",
33
34
  "eval:platform-synthesis": "DEBUG_DOT_AI=true npx tsx src/evaluation/run-platform-synthesis.ts",
@@ -96,6 +97,7 @@
96
97
  "vitest": "^3.2.4"
97
98
  },
98
99
  "dependencies": {
100
+ "@ai-sdk/amazon-bedrock": "^3.0.50",
99
101
  "@ai-sdk/anthropic": "^2.0.23",
100
102
  "@ai-sdk/deepseek": "^1.0.23",
101
103
  "@ai-sdk/google": "^2.0.17",
@@ -107,18 +109,14 @@
107
109
  "@modelcontextprotocol/sdk": "^1.13.2",
108
110
  "@openrouter/ai-sdk-provider": "^1.2.0",
109
111
  "@opentelemetry/api": "^1.9.0",
110
- "@opentelemetry/auto-instrumentations-node": "^0.66.0",
111
112
  "@opentelemetry/exporter-trace-otlp-http": "^0.207.0",
112
113
  "@opentelemetry/resources": "^2.2.0",
113
114
  "@opentelemetry/sdk-node": "^0.207.0",
114
- "@opentelemetry/sdk-trace-base": "^2.2.0",
115
115
  "@opentelemetry/sdk-trace-node": "^2.2.0",
116
116
  "@opentelemetry/semantic-conventions": "^1.37.0",
117
117
  "@qdrant/js-client-rest": "^1.15.0",
118
118
  "ai": "^5.0.60",
119
- "glob": "^11.0.3",
120
119
  "handlebars": "^4.7.8",
121
- "openai": "^5.11.0",
122
120
  "yaml": "^2.8.0",
123
121
  "zod-to-json-schema": "^3.24.6"
124
122
  },
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env nu
2
+
3
+ # Installs DevOps AI Toolkit with MCP server support
4
+ #
5
+ # Examples:
6
+ # > main apply dot-ai --host dot-ai.127.0.0.1.nip.io
7
+ # > main apply dot-ai --provider openai --model gpt-4o
8
+ # > main apply dot-ai --enable-tracing true
9
+ def "main apply dot-ai" [
10
+ --anthropic-api-key = "",
11
+ --openai-api-key = "",
12
+ --provider = "anthropic",
13
+ --model = "claude-haiku-4-5-20251001",
14
+ --ingress-enabled = true,
15
+ --host = "dot-ai.127.0.0.1.nip.io",
16
+ --version = "0.128.0",
17
+ --enable-tracing = false
18
+ ] {
19
+
20
+ let anthropic_key = if ($anthropic_api_key | is-empty) {
21
+ $env.ANTHROPIC_API_KEY? | default ""
22
+ } else {
23
+ $anthropic_api_key
24
+ }
25
+
26
+ let openai_key = if ($openai_api_key | is-empty) {
27
+ $env.OPENAI_API_KEY? | default ""
28
+ } else {
29
+ $openai_api_key
30
+ }
31
+
32
+ let tracing_flags = if $enable_tracing {
33
+ [
34
+ --set 'extraEnv[0].name=OTEL_TRACING_ENABLED'
35
+ --set-string 'extraEnv[0].value=true'
36
+ --set 'extraEnv[1].name=OTEL_EXPORTER_OTLP_ENDPOINT'
37
+ --set 'extraEnv[1].value=http://jaeger-collector.observability.svc.cluster.local:4318/v1/traces'
38
+ --set 'extraEnv[2].name=OTEL_SERVICE_NAME'
39
+ --set 'extraEnv[2].value=dot-ai-mcp'
40
+ ]
41
+ } else {
42
+ []
43
+ }
44
+
45
+ (
46
+ helm upgrade --install dot-ai-mcp
47
+ $"oci://ghcr.io/vfarcic/dot-ai/charts/dot-ai:($version)"
48
+ --set $"secrets.anthropic.apiKey=($anthropic_key)"
49
+ --set $"secrets.openai.apiKey=($openai_key)"
50
+ --set $"ai.provider=($provider)"
51
+ --set $"ai.model=($model)"
52
+ --set $"ingress.enabled=($ingress_enabled)"
53
+ --set $"ingress.host=($host)"
54
+ ...$tracing_flags
55
+ --namespace dot-ai --create-namespace
56
+ --wait
57
+ )
58
+
59
+ print $"DevOps AI Toolkit is available at (ansi yellow_bold)http://($host)(ansi reset)"
60
+
61
+ if $enable_tracing {
62
+ print $"Tracing enabled: Traces will be sent to (ansi yellow_bold)Jaeger in observability namespace(ansi reset)"
63
+ }
64
+
65
+ }
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env nu
2
+
3
+ # Installs Jaeger with ingress configuration
4
+ #
5
+ # Examples:
6
+ # > main apply jaeger nginx jaeger.example.com
7
+ def "main apply jaeger" [
8
+ ingress_class: string,
9
+ ingress_host: string
10
+ ] {
11
+
12
+ helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
13
+
14
+ helm repo update
15
+
16
+ (
17
+ helm upgrade --install jaeger jaegertracing/jaeger
18
+ --namespace observability --create-namespace
19
+ --set provisionDataStore.cassandra=false
20
+ --set allInOne.enabled=true
21
+ --set allInOne.ingress.enabled=true
22
+ --set $"allInOne.ingress.ingressClassName=($ingress_class)"
23
+ --set $"allInOne.ingress.hosts[0]=($ingress_host)"
24
+ --set storage.type=memory
25
+ --set agent.enabled=false
26
+ --set collector.enabled=false
27
+ --set query.enabled=false
28
+ --wait
29
+ )
30
+
31
+ print $"Jaeger is available at (ansi yellow_bold)http://($ingress_host)(ansi reset)"
32
+
33
+ }
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env nu
2
+
3
+ # Retrieves OpenAI token
4
+ #
5
+ # Returns:
6
+ # A record with token, and saves values to .env file
7
+ def --env "main get openai" [] {
8
+
9
+ mut openai_api_key = ""
10
+ if "OPENAI_API_KEY" in $env {
11
+ $openai_api_key = $env.OPENAI_API_KEY
12
+ } else {
13
+ let value = input $"(ansi green_bold)Enter OpenAI token:(ansi reset) "
14
+ $openai_api_key = $value
15
+ }
16
+ $"export OPENAI_API_KEY=($openai_api_key)\n" | save --append .env
17
+
18
+ {token: $openai_api_key}
19
+
20
+ }