@vfarcic/dot-ai 0.43.0 → 0.45.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/README.md +33 -8
- package/dist/core/embedding-service.d.ts +80 -0
- package/dist/core/embedding-service.d.ts.map +1 -0
- package/dist/core/embedding-service.js +198 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +15 -1
- package/dist/core/pattern-creation-session.d.ts +43 -0
- package/dist/core/pattern-creation-session.d.ts.map +1 -0
- package/dist/core/pattern-creation-session.js +312 -0
- package/dist/core/pattern-creation-types.d.ts +30 -0
- package/dist/core/pattern-creation-types.d.ts.map +1 -0
- package/dist/core/pattern-creation-types.js +8 -0
- package/dist/core/pattern-operations.d.ts +11 -0
- package/dist/core/pattern-operations.d.ts.map +1 -0
- package/dist/core/pattern-operations.js +74 -0
- package/dist/core/pattern-types.d.ts +17 -0
- package/dist/core/pattern-types.d.ts.map +1 -0
- package/dist/core/pattern-types.js +8 -0
- package/dist/core/pattern-vector-service.d.ts +97 -0
- package/dist/core/pattern-vector-service.d.ts.map +1 -0
- package/dist/core/pattern-vector-service.js +302 -0
- package/dist/core/schema.d.ts +43 -0
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +176 -9
- package/dist/core/vector-db-service.d.ts +81 -0
- package/dist/core/vector-db-service.d.ts.map +1 -0
- package/dist/core/vector-db-service.js +299 -0
- package/dist/interfaces/mcp.d.ts.map +1 -1
- package/dist/interfaces/mcp.js +10 -2
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -1
- package/dist/tools/organizational-data.d.ts +27 -0
- package/dist/tools/organizational-data.d.ts.map +1 -0
- package/dist/tools/organizational-data.js +470 -0
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +13 -2
- package/dist/tools/version.d.ts +26 -3
- package/dist/tools/version.d.ts.map +1 -1
- package/dist/tools/version.js +161 -8
- package/package.json +3 -1
- package/prompts/concept-extraction.md +91 -0
- package/prompts/doc-testing-test-section.md +78 -226
- package/prompts/resource-selection.md +4 -0
- package/prompts/resource-solution-ranking.md +66 -2
- package/shared-prompts/prd-create.md +4 -0
- package/shared-prompts/prd-start.md +68 -3
- package/shared-prompts/prd-update-progress.md +50 -4
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ DevOps AI Toolkit is an AI-powered development productivity platform that enhanc
|
|
|
12
12
|
|
|
13
13
|
### Kubernetes Deployment
|
|
14
14
|
- **Developers**: Deploy applications without needing deep Kubernetes expertise
|
|
15
|
-
- **Platform Engineers**:
|
|
15
|
+
- **Platform Engineers**: Create organizational deployment patterns that enhance AI recommendations with institutional knowledge and best practices
|
|
16
16
|
|
|
17
17
|
### Documentation Testing
|
|
18
18
|
- **Documentation Maintainers**: Automatically validate documentation accuracy and catch outdated content
|
|
@@ -41,6 +41,12 @@ DevOps AI Toolkit is an AI-powered development productivity platform that enhanc
|
|
|
41
41
|
🛠️ **Fix Application**: User-driven selection and application of recommended documentation improvements
|
|
42
42
|
💾 **Session Management**: Resumable testing workflows for large documentation sets
|
|
43
43
|
|
|
44
|
+
### Organizational Pattern Management
|
|
45
|
+
🏛️ **Pattern Creation**: Define organizational deployment patterns that capture institutional knowledge
|
|
46
|
+
🧠 **AI Enhancement**: Patterns automatically enhance deployment recommendations with organizational context
|
|
47
|
+
🔍 **Semantic Search**: Uses Vector DB technology for intelligent pattern matching based on user intent
|
|
48
|
+
📋 **Best Practices**: Share deployment standards across teams through reusable patterns
|
|
49
|
+
|
|
44
50
|
### Shared Prompts Library
|
|
45
51
|
🎯 **Native Slash Commands**: Prompts appear as `/dot-ai:prompt-name` in your coding agent
|
|
46
52
|
📚 **Curated Library**: Access proven prompts for code review, documentation, architecture, and project management
|
|
@@ -49,7 +55,7 @@ DevOps AI Toolkit is an AI-powered development productivity platform that enhanc
|
|
|
49
55
|
|
|
50
56
|
### AI Integration
|
|
51
57
|
⚡ **MCP Integration**: Works seamlessly with Claude Code, Cursor, or VS Code through Model Context Protocol
|
|
52
|
-
🤖 **Conversational Interface**: Natural language interaction for deployment, documentation testing, and shared prompt workflows
|
|
58
|
+
🤖 **Conversational Interface**: Natural language interaction for deployment, documentation testing, pattern management, and shared prompt workflows
|
|
53
59
|
|
|
54
60
|
**Setup Required**: See the [MCP Setup Guide](./docs/mcp-setup.md) for complete configuration instructions.
|
|
55
61
|
|
|
@@ -64,18 +70,23 @@ DevOps AI Toolkit is an AI-powered development productivity platform that enhanc
|
|
|
64
70
|
- Set it as environment variable: `export ANTHROPIC_API_KEY=your_api_key_here`
|
|
65
71
|
|
|
66
72
|
**For shared prompts library:**
|
|
67
|
-
- **No API key required** - Works with any MCP-enabled coding agent
|
|
73
|
+
- **No API key required** - Works with any MCP-enabled coding agent (other features like deployments do require ANTHROPIC_API_KEY)
|
|
68
74
|
|
|
69
75
|
**For Kubernetes deployment recommendations:**
|
|
70
76
|
- **kubectl** configured with cluster access
|
|
71
77
|
- Verify cluster access with: `kubectl get nodes`
|
|
72
78
|
- Should show your cluster nodes without authentication errors
|
|
73
|
-
<!-- dotai-ignore: kubectl
|
|
79
|
+
<!-- dotai-ignore: kubectl verification command output format - implementation-specific -->
|
|
74
80
|
|
|
75
81
|
**For documentation testing:**
|
|
76
82
|
- **Documentation files** to test (Markdown, HTML, etc.)
|
|
77
83
|
- **File system access** to the documentation you want to validate
|
|
78
84
|
|
|
85
|
+
**For organizational pattern management:**
|
|
86
|
+
- **Vector DB service** (Qdrant) for pattern storage and semantic search
|
|
87
|
+
- **OpenAI API key** (optional) for semantic pattern matching - falls back to keyword matching if not available
|
|
88
|
+
- See the [Pattern Management Guide](./docs/pattern-management-guide.md) for complete setup
|
|
89
|
+
|
|
79
90
|
### Installation
|
|
80
91
|
|
|
81
92
|
DevOps AI Toolkit is designed to be used through AI development tools via MCP (Model Context Protocol). No direct installation needed - simply configure your AI tool to connect to the MCP server.
|
|
@@ -96,17 +107,30 @@ Perfect for conversational AI-driven workflows:
|
|
|
96
107
|
"env": {
|
|
97
108
|
"ANTHROPIC_API_KEY": "your_key_here",
|
|
98
109
|
"DOT_AI_SESSION_DIR": "./tmp/sessions",
|
|
99
|
-
"KUBECONFIG": "~/.kube/config"
|
|
110
|
+
"KUBECONFIG": "~/.kube/config",
|
|
111
|
+
"QDRANT_URL": "https://your-cluster.qdrant.io",
|
|
112
|
+
"QDRANT_API_KEY": "your_qdrant_key",
|
|
113
|
+
"OPENAI_API_KEY": "sk-proj-your_openai_key"
|
|
100
114
|
}
|
|
101
115
|
}
|
|
102
116
|
}
|
|
103
117
|
}
|
|
104
118
|
```
|
|
105
119
|
|
|
120
|
+
**Note**: Replace all placeholder values (like `your_key_here`, `your-cluster.qdrant.io`) with your actual API keys and service URLs.
|
|
121
|
+
|
|
122
|
+
**Environment Variable Setup**: You can set these variables either:
|
|
123
|
+
- **In the `.mcp.json` file** (as shown above in the `env` section), OR
|
|
124
|
+
- **As shell environment variables** (e.g., `export ANTHROPIC_API_KEY=your_key_here`), OR
|
|
125
|
+
- **A combination of both** (shell variables take precedence)
|
|
126
|
+
|
|
106
127
|
**Environment Variables:**
|
|
107
|
-
- `ANTHROPIC_API_KEY`: Required for AI analysis (
|
|
128
|
+
- `ANTHROPIC_API_KEY`: Required for AI analysis (Kubernetes deployments, documentation testing, pattern management). Not required for shared prompts library.
|
|
108
129
|
- `DOT_AI_SESSION_DIR`: Required session directory (relative paths are relative to where the AI agent is started)
|
|
109
130
|
- `KUBECONFIG`: Optional kubeconfig path for Kubernetes deployments (adjust to your actual kubeconfig location, defaults to `~/.kube/config`)
|
|
131
|
+
- `QDRANT_URL`: Required for pattern management - Vector DB endpoint
|
|
132
|
+
- `QDRANT_API_KEY`: Required for pattern management - Vector DB authentication
|
|
133
|
+
- `OPENAI_API_KEY`: Optional for semantic pattern matching - enables enhanced pattern search
|
|
110
134
|
|
|
111
135
|
2. **Start Claude Code with MCP enabled:**
|
|
112
136
|
```bash
|
|
@@ -115,8 +139,9 @@ mkdir -p tmp/sessions
|
|
|
115
139
|
|
|
116
140
|
claude
|
|
117
141
|
|
|
118
|
-
# Verify MCP server connection
|
|
119
|
-
#
|
|
142
|
+
# Verify MCP server connection by running `/mcp` command
|
|
143
|
+
# Example: type `/mcp` in Claude Code to see server status
|
|
144
|
+
# Expected output shows "dot-ai" server connected with available tools
|
|
120
145
|
```
|
|
121
146
|
|
|
122
147
|
3. **Use conversational workflows:**
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Service
|
|
3
|
+
*
|
|
4
|
+
* Optional semantic search enhancement for pattern matching.
|
|
5
|
+
* Gracefully falls back to keyword-only search when OpenAI API key is not available.
|
|
6
|
+
*/
|
|
7
|
+
export interface EmbeddingConfig {
|
|
8
|
+
provider?: 'openai';
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
dimensions?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface EmbeddingProvider {
|
|
14
|
+
generateEmbedding(text: string): Promise<number[]>;
|
|
15
|
+
generateEmbeddings(texts: string[]): Promise<number[][]>;
|
|
16
|
+
isAvailable(): boolean;
|
|
17
|
+
getDimensions(): number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* OpenAI Embedding Provider
|
|
21
|
+
* Optional provider for semantic search enhancement
|
|
22
|
+
*/
|
|
23
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
24
|
+
private client;
|
|
25
|
+
private model;
|
|
26
|
+
private dimensions;
|
|
27
|
+
private available;
|
|
28
|
+
constructor(config?: EmbeddingConfig);
|
|
29
|
+
generateEmbedding(text: string): Promise<number[]>;
|
|
30
|
+
generateEmbeddings(texts: string[]): Promise<number[][]>;
|
|
31
|
+
isAvailable(): boolean;
|
|
32
|
+
getDimensions(): number;
|
|
33
|
+
getModel(): string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Main Embedding Service
|
|
37
|
+
* Provides optional semantic search capabilities with graceful degradation
|
|
38
|
+
*/
|
|
39
|
+
export declare class EmbeddingService {
|
|
40
|
+
private provider;
|
|
41
|
+
constructor(config?: EmbeddingConfig);
|
|
42
|
+
/**
|
|
43
|
+
* Generate embedding for text (optional enhancement)
|
|
44
|
+
* Returns null if embeddings not available - caller should handle gracefully
|
|
45
|
+
*/
|
|
46
|
+
generateEmbedding(text: string): Promise<number[] | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Generate embeddings for multiple texts (optional enhancement)
|
|
49
|
+
* Returns empty array if embeddings not available
|
|
50
|
+
*/
|
|
51
|
+
generateEmbeddings(texts: string[]): Promise<number[][]>;
|
|
52
|
+
/**
|
|
53
|
+
* Check if semantic search is available
|
|
54
|
+
*/
|
|
55
|
+
isAvailable(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get embedding dimensions (if available)
|
|
58
|
+
*/
|
|
59
|
+
getDimensions(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Get status information for debugging/logging
|
|
62
|
+
*/
|
|
63
|
+
getStatus(): {
|
|
64
|
+
available: boolean;
|
|
65
|
+
provider: string | null;
|
|
66
|
+
model?: string;
|
|
67
|
+
dimensions?: number;
|
|
68
|
+
reason?: string;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Create searchable text from pattern data
|
|
72
|
+
*/
|
|
73
|
+
createPatternSearchText(pattern: {
|
|
74
|
+
description: string;
|
|
75
|
+
triggers: string[];
|
|
76
|
+
suggestedResources: string[];
|
|
77
|
+
rationale: string;
|
|
78
|
+
}): string;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=embedding-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-service.d.ts","sourceRoot":"","sources":["../../src/core/embedding-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,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;CACzB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAU;gBAEf,MAAM,GAAE,eAAoB;IAkBlC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BlD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAiC9D,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;CAGnB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,MAAM,GAAE,eAAoB;IAUxC;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAc/D;;;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;IAkBD;;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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding Service
|
|
4
|
+
*
|
|
5
|
+
* Optional semantic search enhancement for pattern matching.
|
|
6
|
+
* Gracefully falls back to keyword-only search when OpenAI API key is not available.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EmbeddingService = exports.OpenAIEmbeddingProvider = void 0;
|
|
13
|
+
const openai_1 = __importDefault(require("openai"));
|
|
14
|
+
/**
|
|
15
|
+
* OpenAI Embedding Provider
|
|
16
|
+
* Optional provider for semantic search enhancement
|
|
17
|
+
*/
|
|
18
|
+
class OpenAIEmbeddingProvider {
|
|
19
|
+
client = null;
|
|
20
|
+
model;
|
|
21
|
+
dimensions;
|
|
22
|
+
available;
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
25
|
+
this.model = config.model || 'text-embedding-3-small';
|
|
26
|
+
this.dimensions = config.dimensions || 1536; // text-embedding-3-small default
|
|
27
|
+
this.available = false;
|
|
28
|
+
if (apiKey) {
|
|
29
|
+
try {
|
|
30
|
+
this.client = new openai_1.default({ apiKey: apiKey });
|
|
31
|
+
this.available = true;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// Client creation failed, remain unavailable
|
|
35
|
+
this.available = false;
|
|
36
|
+
this.client = null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async generateEmbedding(text) {
|
|
41
|
+
if (!this.isAvailable()) {
|
|
42
|
+
throw new Error('OpenAI embedding provider not available');
|
|
43
|
+
}
|
|
44
|
+
if (!text || text.trim().length === 0) {
|
|
45
|
+
throw new Error('Text cannot be empty for embedding generation');
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const response = await this.client.embeddings.create({
|
|
49
|
+
model: this.model,
|
|
50
|
+
input: text.trim(),
|
|
51
|
+
encoding_format: 'float'
|
|
52
|
+
});
|
|
53
|
+
if (!response.data || response.data.length === 0) {
|
|
54
|
+
throw new Error('No embedding data returned from OpenAI API');
|
|
55
|
+
}
|
|
56
|
+
return response.data[0].embedding;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof Error) {
|
|
60
|
+
throw new Error(`OpenAI embedding failed: ${error.message}`);
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`OpenAI embedding failed: ${String(error)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async generateEmbeddings(texts) {
|
|
66
|
+
if (!this.isAvailable()) {
|
|
67
|
+
throw new Error('OpenAI embedding provider not available');
|
|
68
|
+
}
|
|
69
|
+
if (!texts || texts.length === 0) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
const validTexts = texts
|
|
73
|
+
.map(t => t?.trim())
|
|
74
|
+
.filter(t => t && t.length > 0);
|
|
75
|
+
if (validTexts.length === 0) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const response = await this.client.embeddings.create({
|
|
80
|
+
model: this.model,
|
|
81
|
+
input: validTexts,
|
|
82
|
+
encoding_format: 'float'
|
|
83
|
+
});
|
|
84
|
+
return response.data.map(item => item.embedding);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error instanceof Error) {
|
|
88
|
+
throw new Error(`OpenAI batch embedding failed: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`OpenAI batch embedding failed: ${String(error)}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
isAvailable() {
|
|
94
|
+
return this.available && this.client !== null;
|
|
95
|
+
}
|
|
96
|
+
getDimensions() {
|
|
97
|
+
return this.dimensions;
|
|
98
|
+
}
|
|
99
|
+
getModel() {
|
|
100
|
+
return this.model;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.OpenAIEmbeddingProvider = OpenAIEmbeddingProvider;
|
|
104
|
+
/**
|
|
105
|
+
* Main Embedding Service
|
|
106
|
+
* Provides optional semantic search capabilities with graceful degradation
|
|
107
|
+
*/
|
|
108
|
+
class EmbeddingService {
|
|
109
|
+
provider;
|
|
110
|
+
constructor(config = {}) {
|
|
111
|
+
// Try to initialize OpenAI provider, but don't fail if unavailable
|
|
112
|
+
try {
|
|
113
|
+
const provider = new OpenAIEmbeddingProvider(config);
|
|
114
|
+
this.provider = provider.isAvailable() ? provider : null;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
this.provider = null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Generate embedding for text (optional enhancement)
|
|
122
|
+
* Returns null if embeddings not available - caller should handle gracefully
|
|
123
|
+
*/
|
|
124
|
+
async generateEmbedding(text) {
|
|
125
|
+
if (!this.isAvailable()) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
return await this.provider.generateEmbedding(text);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Log error but don't throw - allow graceful fallback
|
|
133
|
+
console.warn('Embedding generation failed, falling back to keyword search:', error);
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Generate embeddings for multiple texts (optional enhancement)
|
|
139
|
+
* Returns empty array if embeddings not available
|
|
140
|
+
*/
|
|
141
|
+
async generateEmbeddings(texts) {
|
|
142
|
+
if (!this.isAvailable()) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
return await this.provider.generateEmbeddings(texts);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// Log error but don't throw - allow graceful fallback
|
|
150
|
+
console.warn('Batch embedding generation failed, falling back to keyword search:', error);
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Check if semantic search is available
|
|
156
|
+
*/
|
|
157
|
+
isAvailable() {
|
|
158
|
+
return this.provider !== null && this.provider.isAvailable();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get embedding dimensions (if available)
|
|
162
|
+
*/
|
|
163
|
+
getDimensions() {
|
|
164
|
+
return this.provider?.getDimensions() || 1536;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get status information for debugging/logging
|
|
168
|
+
*/
|
|
169
|
+
getStatus() {
|
|
170
|
+
if (this.isAvailable()) {
|
|
171
|
+
const openaiProvider = this.provider;
|
|
172
|
+
return {
|
|
173
|
+
available: true,
|
|
174
|
+
provider: 'openai',
|
|
175
|
+
model: openaiProvider.getModel(),
|
|
176
|
+
dimensions: openaiProvider.getDimensions()
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
available: false,
|
|
181
|
+
provider: null,
|
|
182
|
+
reason: 'OPENAI_API_KEY not set - using keyword-only pattern search'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Create searchable text from pattern data
|
|
187
|
+
*/
|
|
188
|
+
createPatternSearchText(pattern) {
|
|
189
|
+
return [
|
|
190
|
+
pattern.description,
|
|
191
|
+
...pattern.triggers,
|
|
192
|
+
pattern.rationale,
|
|
193
|
+
// Include resource types for better semantic matching
|
|
194
|
+
...pattern.suggestedResources.map(r => `kubernetes ${r.toLowerCase()}`)
|
|
195
|
+
].join(' ').trim();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.EmbeddingService = EmbeddingService;
|
package/dist/core/index.d.ts
CHANGED
|
@@ -38,5 +38,12 @@ export { MemorySystem } from './memory';
|
|
|
38
38
|
export { WorkflowEngine } from './workflow';
|
|
39
39
|
export { ClaudeIntegration } from './claude';
|
|
40
40
|
export { SchemaParser, ManifestValidator, ResourceRecommender } from './schema';
|
|
41
|
+
export { OrganizationalPattern, CreatePatternRequest } from './pattern-types';
|
|
42
|
+
export { validatePattern, createPattern, serializePattern, deserializePattern } from './pattern-operations';
|
|
43
|
+
export { PatternCreationStep, PatternCreationSession, PatternWorkflowStep } from './pattern-creation-types';
|
|
44
|
+
export { PatternCreationSessionManager } from './pattern-creation-session';
|
|
45
|
+
export { VectorDBService, VectorDBConfig, VectorDocument, SearchResult } from './vector-db-service';
|
|
46
|
+
export { PatternVectorService, PatternSearchOptions, PatternSearchResult } from './pattern-vector-service';
|
|
47
|
+
export { EmbeddingService, EmbeddingConfig, EmbeddingProvider, OpenAIEmbeddingProvider } from './embedding-service';
|
|
41
48
|
export default DotAI;
|
|
42
49
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAkB;IAErC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,SAAgB,MAAM,EAAE,iBAAiB,CAAC;IAC1C,SAAgB,MAAM,EAAE;QACtB,MAAM,EAAE,YAAY,CAAC;QACrB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;QACnC,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACjD,CAAC;gBAEU,MAAM,GAAE,UAAe;IAoEnC,OAAO,CAAC,cAAc;IAMhB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,aAAa,IAAI,OAAO;IAIxB,UAAU,IAAI,MAAM;IAIpB,kBAAkB,IAAI,MAAM,GAAG,SAAS;CAGzC;AAGD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAkB;IAErC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,SAAgB,MAAM,EAAE,iBAAiB,CAAC;IAC1C,SAAgB,MAAM,EAAE;QACtB,MAAM,EAAE,YAAY,CAAC;QACrB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;QACnC,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACjD,CAAC;gBAEU,MAAM,GAAE,UAAe;IAoEnC,OAAO,CAAC,cAAc;IAMhB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,aAAa,IAAI,OAAO;IAIxB,UAAU,IAAI,MAAM;IAIpB,kBAAkB,IAAI,MAAM,GAAG,SAAS;CAGzC;AAGD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGpH,eAAe,KAAK,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -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.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.ClaudeIntegration = exports.WorkflowEngine = exports.MemorySystem = exports.KubernetesDiscovery = exports.DotAI = void 0;
|
|
8
|
+
exports.OpenAIEmbeddingProvider = exports.EmbeddingService = exports.PatternVectorService = exports.VectorDBService = exports.PatternCreationSessionManager = exports.deserializePattern = exports.serializePattern = exports.createPattern = exports.validatePattern = exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.ClaudeIntegration = 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");
|
|
@@ -119,5 +119,19 @@ var schema_2 = require("./schema");
|
|
|
119
119
|
Object.defineProperty(exports, "SchemaParser", { enumerable: true, get: function () { return schema_2.SchemaParser; } });
|
|
120
120
|
Object.defineProperty(exports, "ManifestValidator", { enumerable: true, get: function () { return schema_2.ManifestValidator; } });
|
|
121
121
|
Object.defineProperty(exports, "ResourceRecommender", { enumerable: true, get: function () { return schema_2.ResourceRecommender; } });
|
|
122
|
+
var pattern_operations_1 = require("./pattern-operations");
|
|
123
|
+
Object.defineProperty(exports, "validatePattern", { enumerable: true, get: function () { return pattern_operations_1.validatePattern; } });
|
|
124
|
+
Object.defineProperty(exports, "createPattern", { enumerable: true, get: function () { return pattern_operations_1.createPattern; } });
|
|
125
|
+
Object.defineProperty(exports, "serializePattern", { enumerable: true, get: function () { return pattern_operations_1.serializePattern; } });
|
|
126
|
+
Object.defineProperty(exports, "deserializePattern", { enumerable: true, get: function () { return pattern_operations_1.deserializePattern; } });
|
|
127
|
+
var pattern_creation_session_1 = require("./pattern-creation-session");
|
|
128
|
+
Object.defineProperty(exports, "PatternCreationSessionManager", { enumerable: true, get: function () { return pattern_creation_session_1.PatternCreationSessionManager; } });
|
|
129
|
+
var vector_db_service_1 = require("./vector-db-service");
|
|
130
|
+
Object.defineProperty(exports, "VectorDBService", { enumerable: true, get: function () { return vector_db_service_1.VectorDBService; } });
|
|
131
|
+
var pattern_vector_service_1 = require("./pattern-vector-service");
|
|
132
|
+
Object.defineProperty(exports, "PatternVectorService", { enumerable: true, get: function () { return pattern_vector_service_1.PatternVectorService; } });
|
|
133
|
+
var embedding_service_1 = require("./embedding-service");
|
|
134
|
+
Object.defineProperty(exports, "EmbeddingService", { enumerable: true, get: function () { return embedding_service_1.EmbeddingService; } });
|
|
135
|
+
Object.defineProperty(exports, "OpenAIEmbeddingProvider", { enumerable: true, get: function () { return embedding_service_1.OpenAIEmbeddingProvider; } });
|
|
122
136
|
// Default export
|
|
123
137
|
exports.default = DotAI;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Creation Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles step-by-step pattern creation workflow with context-aware questions
|
|
5
|
+
* and AI-powered trigger expansion.
|
|
6
|
+
*/
|
|
7
|
+
import { PatternCreationSession, PatternWorkflowStep } from './pattern-creation-types';
|
|
8
|
+
export declare class PatternCreationSessionManager {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new pattern creation session
|
|
11
|
+
*/
|
|
12
|
+
createSession(args: any): PatternCreationSession;
|
|
13
|
+
/**
|
|
14
|
+
* Load existing session
|
|
15
|
+
*/
|
|
16
|
+
loadSession(sessionId: string, args: any): PatternCreationSession | null;
|
|
17
|
+
/**
|
|
18
|
+
* Save session to disk
|
|
19
|
+
*/
|
|
20
|
+
private saveSession;
|
|
21
|
+
/**
|
|
22
|
+
* Process user response and move to next step
|
|
23
|
+
*/
|
|
24
|
+
processResponse(sessionId: string, response: string, args: any): PatternWorkflowStep | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get the next workflow step for the session
|
|
27
|
+
*/
|
|
28
|
+
getNextStep(sessionId: string, args: any): PatternWorkflowStep | null;
|
|
29
|
+
/**
|
|
30
|
+
* Generate trigger expansion step with AI suggestions
|
|
31
|
+
*/
|
|
32
|
+
private generateTriggerExpansionStep;
|
|
33
|
+
/**
|
|
34
|
+
* Generate review prompt showing complete pattern
|
|
35
|
+
*/
|
|
36
|
+
private generateReviewPrompt;
|
|
37
|
+
/**
|
|
38
|
+
* Complete pattern creation and return success result
|
|
39
|
+
*/
|
|
40
|
+
private completePattern;
|
|
41
|
+
private generateSessionId;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pattern-creation-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-creation-session.d.ts","sourceRoot":"","sources":["../../src/core/pattern-creation-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAIlC,qBAAa,6BAA6B;IAExC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,sBAAsB;IAiBhD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,sBAAsB,GAAG,IAAI;IAgBxE;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,mBAAmB,GAAG,IAAI;IA+D3F;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,mBAAmB,GAAG,IAAI;IAwErE;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAiCpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,iBAAiB;CAG1B"}
|