@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.
- package/dist/core/ai-provider-factory.d.ts.map +1 -1
- package/dist/core/ai-provider-factory.js +24 -12
- package/dist/core/embedding-service.d.ts +3 -3
- package/dist/core/embedding-service.d.ts.map +1 -1
- package/dist/core/embedding-service.js +22 -3
- package/dist/core/model-config.d.ts +1 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/providers/vercel-provider.d.ts.map +1 -1
- package/dist/core/providers/vercel-provider.js +11 -0
- package/dist/interfaces/mcp.d.ts.map +1 -1
- package/dist/interfaces/mcp.js +5 -0
- package/dist/tools/version.d.ts.map +1 -1
- package/dist/tools/version.js +6 -3
- package/package.json +3 -5
- package/scripts/dot-ai.nu +65 -0
- package/scripts/jaeger.nu +33 -0
- package/scripts/openai.nu +20 -0
|
@@ -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;
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
`
|
|
123
|
-
|
|
124
|
-
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/interfaces/mcp.js
CHANGED
|
@@ -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":"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
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/version.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
+
}
|