@vfarcic/dot-ai 0.157.0 → 0.159.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 +2 -0
- package/dist/core/ai-provider.interface.d.ts +0 -35
- package/dist/core/ai-provider.interface.d.ts.map +1 -1
- package/dist/core/capability-scan-workflow.d.ts.map +1 -1
- package/dist/core/capability-scan-workflow.js +21 -2
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/packaging.d.ts.map +1 -1
- package/dist/core/packaging.js +12 -4
- package/dist/core/schema.js +1 -1
- package/dist/tools/answer-question.d.ts.map +1 -1
- package/dist/tools/answer-question.js +24 -28
- package/dist/tools/choose-solution.d.ts.map +1 -1
- package/dist/tools/choose-solution.js +6 -1
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +46 -95
- package/dist/tools/remediate.js +2 -2
- package/package.json +1 -1
- package/prompts/intent-refinement-guidance.md +68 -0
- package/shared-prompts/prd-done.md +5 -4
- package/prompts/intent-analysis.md +0 -106
package/README.md
CHANGED
|
@@ -31,6 +31,8 @@ DevOps AI Toolkit brings AI-powered intelligence to platform engineering, Kubern
|
|
|
31
31
|
|
|
32
32
|
Built on the Model Context Protocol (MCP), it integrates seamlessly with Claude Code, Cursor, and VS Code to provide conversational interaction for complex DevOps and development tasks.
|
|
33
33
|
|
|
34
|
+

|
|
35
|
+
|
|
34
36
|
## Mission
|
|
35
37
|
|
|
36
38
|
DevOps AI Toolkit democratizes platform engineering and cloud native operations by making complex workflows accessible through AI-powered automation. We eliminate the expertise barrier that prevents teams from adopting best practices in Kubernetes operations, repository governance, and standardized development workflows—making professional-grade DevOps accessible through natural language interaction.
|
|
@@ -22,41 +22,6 @@ export interface AIResponse {
|
|
|
22
22
|
cache_read_input_tokens?: number;
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Impact level for clarification opportunities
|
|
27
|
-
*/
|
|
28
|
-
export type ImpactLevel = 'HIGH' | 'MEDIUM' | 'LOW';
|
|
29
|
-
/**
|
|
30
|
-
* Clarification category types
|
|
31
|
-
*/
|
|
32
|
-
export type ClarificationCategory = 'TECHNICAL_SPECIFICATIONS' | 'ARCHITECTURAL_CONTEXT' | 'OPERATIONAL_REQUIREMENTS' | 'SECURITY_COMPLIANCE' | 'ORGANIZATIONAL_ALIGNMENT';
|
|
33
|
-
/**
|
|
34
|
-
* Clarification opportunity structure
|
|
35
|
-
*/
|
|
36
|
-
export interface ClarificationOpportunity {
|
|
37
|
-
category: ClarificationCategory;
|
|
38
|
-
missingContext: string;
|
|
39
|
-
impactLevel: ImpactLevel;
|
|
40
|
-
reasoning: string;
|
|
41
|
-
suggestedQuestions?: string[];
|
|
42
|
-
patternAlignment?: string;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Intent analysis result structure
|
|
46
|
-
*/
|
|
47
|
-
export interface IntentAnalysisResult {
|
|
48
|
-
clarificationOpportunities: ClarificationOpportunity[];
|
|
49
|
-
overallAssessment: {
|
|
50
|
-
enhancementPotential: ImpactLevel;
|
|
51
|
-
primaryGaps: string[];
|
|
52
|
-
recommendedFocus: string;
|
|
53
|
-
};
|
|
54
|
-
intentQuality: {
|
|
55
|
-
currentSpecificity: string;
|
|
56
|
-
strengthAreas: string[];
|
|
57
|
-
improvementAreas: string[];
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
25
|
/**
|
|
61
26
|
* AI Provider configuration
|
|
62
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-provider.interface.d.ts","sourceRoot":"","sources":["../../src/core/ai-provider.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"ai-provider.interface.d.ts","sourceRoot":"","sources":["../../src/core/ai-provider.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAMtE,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AACzL,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAChI,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAC1F,MAAM,MAAM,wCAAwC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;AAoBlN,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,oBAAoB,GAAG,wBAAwB,GAAG,UAAU,GAAG,UAAU,CAAC;IACvF,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F;AAsBD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,EAC1C,oBAAoB,EAAE,sBAAsB,EAC5C,2BAA2B,EAAE,6BAA6B,EAC1D,wBAAwB,EAAE,0BAA0B,EACpD,sCAAsC,EAAE,wCAAwC,EAChF,gBAAgB,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,sCAAsC,EAAE,wCAAwC,KAAK,OAAO,CAAC,GAAG,CAAC,GAC7Y,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,8 +87,27 @@ async function handleResourceSelection(session, args, logger, requestId, capabil
|
|
|
87
87
|
selectedResources: 'all',
|
|
88
88
|
currentResourceIndex: 0 // Start with first resource
|
|
89
89
|
}, args);
|
|
90
|
-
//
|
|
91
|
-
|
|
90
|
+
// Start scanning in background (don't await) to avoid MCP timeout
|
|
91
|
+
handleScanningFn(session, { ...args, response: undefined }, logger, requestId, capabilityService, parseNumericResponse, transitionCapabilitySession, cleanupCapabilitySession, createCapabilityScanCompletionResponse)
|
|
92
|
+
.catch(error => {
|
|
93
|
+
logger.error('Background capability scan failed', error, {
|
|
94
|
+
requestId,
|
|
95
|
+
sessionId: session.sessionId
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// Return immediately - user can check progress with operation: 'progress'
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
operation: 'scan',
|
|
102
|
+
dataType: 'capabilities',
|
|
103
|
+
status: 'started',
|
|
104
|
+
sessionId: session.sessionId,
|
|
105
|
+
message: 'Capability scan started. Use operation "progress" to check status.',
|
|
106
|
+
checkProgress: {
|
|
107
|
+
dataType: 'capabilities',
|
|
108
|
+
operation: 'progress'
|
|
109
|
+
}
|
|
110
|
+
};
|
|
92
111
|
}
|
|
93
112
|
if (normalizedResponse === 'specific') {
|
|
94
113
|
// Transition to resource specification
|
package/dist/core/index.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export declare class DotAI {
|
|
|
40
40
|
export { KubernetesDiscovery } from './discovery';
|
|
41
41
|
export { MemorySystem } from './memory';
|
|
42
42
|
export { WorkflowEngine } from './workflow';
|
|
43
|
-
export { AIProvider, AIResponse,
|
|
43
|
+
export { AIProvider, AIResponse, AIProviderConfig } from './ai-provider.interface';
|
|
44
44
|
export { createAIProvider, AIProviderFactory } from './ai-provider-factory';
|
|
45
45
|
export { SchemaParser, ManifestValidator, ResourceRecommender } from './schema';
|
|
46
46
|
export { OrganizationalPattern, CreatePatternRequest } from './pattern-types';
|
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,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;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,EAAE,EAAE,UAAU,CAAC;IAC/B,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;QAChD,6BAA6B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9I,qBAAqB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClG,CAAC;gBAEU,MAAM,GAAE,UAAe;IA2E7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/C,aAAa,IAAI,OAAO;IAIxB,UAAU,IAAI,MAAM;CAGrB;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,UAAU,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packaging.d.ts","sourceRoot":"","sources":["../../src/core/packaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"packaging.d.ts","sourceRoot":"","sources":["../../src/core/packaging.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAwOD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,GAAG,EACb,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,qBAAqB,EACpC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC,CA+D1B"}
|
package/dist/core/packaging.js
CHANGED
|
@@ -29,6 +29,8 @@ Generate the following files:
|
|
|
29
29
|
- Use the actual values from user answers as defaults
|
|
30
30
|
|
|
31
31
|
3. **templates/*.yaml** - One file per Kubernetes resource type
|
|
32
|
+
- **CRITICAL**: Include ALL manifests from the raw input - do not filter out any resources
|
|
33
|
+
- This includes custom resources (CRDs) like Solution, Crossplane resources, etc.
|
|
32
34
|
- Use \`{{ .Release.Name }}\` for resource names
|
|
33
35
|
- Use \`{{ .Release.Namespace }}\` when namespace is referenced
|
|
34
36
|
- Use \`{{ .Values.xxx }}\` for externalized configuration
|
|
@@ -74,16 +76,17 @@ Generate a production-ready Kustomize structure with base/ and overlays/ directo
|
|
|
74
76
|
- List all resource files in \`resources:\` section (e.g., \`- deployment.yaml\`)
|
|
75
77
|
- Do NOT include namespace, patches, or images here - base should be generic/reusable
|
|
76
78
|
|
|
77
|
-
2. **base/*.yaml** - Base Kubernetes manifests
|
|
79
|
+
2. **base/*.yaml** - Base Kubernetes manifests (generic, reusable)
|
|
78
80
|
- One file per Kubernetes resource (deployment.yaml, service.yaml, etc.)
|
|
79
|
-
- Include complete, valid manifests
|
|
81
|
+
- Include complete, valid manifests WITHOUT namespace in metadata
|
|
80
82
|
- For container images: use ONLY the repository (e.g., \`image: nginx\` or \`image: ghcr.io/org/app\`) WITHOUT any tag - tags are set in overlays
|
|
81
83
|
- Resource names should be consistent across all files
|
|
84
|
+
- **IMPORTANT**: Resources with namespace-specific internal references (e.g., spec fields referencing other namespaced resources) should go in overlays, not base, since kustomize only transforms metadata.namespace
|
|
82
85
|
|
|
83
86
|
3. **overlays/production/kustomization.yaml** - Production overlay (THE KEY FILE FOR CUSTOMIZATION)
|
|
84
87
|
- \`apiVersion: kustomize.config.k8s.io/v1beta1\`
|
|
85
88
|
- \`kind: Kustomization\`
|
|
86
|
-
- Reference base: \`resources: [../../base]\`
|
|
89
|
+
- Reference base AND any overlay-specific resources: \`resources: [../../base, solution.yaml]\`
|
|
87
90
|
- Use \`namespace:\` field with the user-specified namespace
|
|
88
91
|
- **REQUIRED**: Use \`images:\` section to set image tags from user answers:
|
|
89
92
|
\`\`\`yaml
|
|
@@ -94,7 +97,12 @@ Generate a production-ready Kustomize structure with base/ and overlays/ directo
|
|
|
94
97
|
- Use \`replicas:\` section if replicas were customized
|
|
95
98
|
- Use \`patches:\` for other customizations (resources, env vars, etc.)
|
|
96
99
|
|
|
97
|
-
4. **
|
|
100
|
+
4. **overlays/production/*.yaml** - Environment-specific resources
|
|
101
|
+
- Place resources with namespace-specific internal references here (e.g., Solution CRD with spec.resources[].namespace)
|
|
102
|
+
- These resources contain namespace values that kustomize won't transform
|
|
103
|
+
- This allows different overlays (staging, dev) to have their own versions
|
|
104
|
+
|
|
105
|
+
5. **kustomization.yaml** (root) - Points to production overlay for easy deployment
|
|
98
106
|
- Simple file that references the production overlay: \`resources: [overlays/production]\`
|
|
99
107
|
|
|
100
108
|
**WHY THIS STRUCTURE**:
|
package/dist/core/schema.js
CHANGED
|
@@ -58,7 +58,7 @@ exports.OUTPUT_FORMAT_QUESTION = {
|
|
|
58
58
|
type: 'select',
|
|
59
59
|
options: ['raw', 'helm', 'kustomize'],
|
|
60
60
|
placeholder: 'Select output format',
|
|
61
|
-
suggestedAnswer: '
|
|
61
|
+
suggestedAnswer: 'kustomize',
|
|
62
62
|
validation: { required: true }
|
|
63
63
|
};
|
|
64
64
|
exports.OUTPUT_PATH_QUESTION = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer-question.d.ts","sourceRoot":"","sources":["../../src/tools/answer-question.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,8HAA4H,CAAC;AAGzK,eAAO,MAAM,gCAAgC;;;;;;;;;;CAK5C,CAAC;
|
|
1
|
+
{"version":3,"file":"answer-question.d.ts","sourceRoot":"","sources":["../../src/tools/answer-question.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,8HAA4H,CAAC;AAGzK,eAAO,MAAM,gCAAgC;;;;;;;;;;CAK5C,CAAC;AAwhBF;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EACtI,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAgUxD"}
|
|
@@ -79,16 +79,16 @@ function validateAnswer(answer, question) {
|
|
|
79
79
|
function getStageSpecificInstructions(stage, isHelm = false) {
|
|
80
80
|
switch (stage) {
|
|
81
81
|
case 'required':
|
|
82
|
-
return 'STAGE: REQUIRED - All questions must be answered before proceeding.
|
|
82
|
+
return 'STAGE: REQUIRED - Present ALL questions to the user and collect answers. All questions must be answered before proceeding.';
|
|
83
83
|
case 'basic':
|
|
84
|
-
return 'STAGE: BASIC -
|
|
84
|
+
return 'STAGE: BASIC - Present ALL questions to the user. Show defaults where available but ask user to confirm or change each one. User must review all questions before proceeding to advanced stage.';
|
|
85
85
|
case 'advanced':
|
|
86
86
|
// For Helm, don't mention open stage since it's skipped
|
|
87
87
|
return isHelm
|
|
88
|
-
? 'STAGE: ADVANCED -
|
|
89
|
-
: 'STAGE: ADVANCED -
|
|
88
|
+
? 'STAGE: ADVANCED - Present ALL questions to the user. Show defaults where available but ask user to confirm or change each one. User must review all questions before proceeding to manifest generation.'
|
|
89
|
+
: 'STAGE: ADVANCED - Present ALL questions to the user. Show defaults where available but ask user to confirm or change each one. User must review all questions before proceeding to open stage.';
|
|
90
90
|
case 'open':
|
|
91
|
-
return 'STAGE: OPEN - Final configuration stage.
|
|
91
|
+
return 'STAGE: OPEN - Final configuration stage. Ask user for any additional requirements or constraints. User can say "N/A" if none.';
|
|
92
92
|
default:
|
|
93
93
|
return 'STAGE: UNKNOWN - Present questions to the user and wait for their response.';
|
|
94
94
|
}
|
|
@@ -100,25 +100,21 @@ function getAgentInstructions(stage, isHelm = false) {
|
|
|
100
100
|
const antiCascadeRule = 'CRITICAL ANTI-CASCADE RULE: When user says "skip" for ANY stage, only skip THAT specific stage and present the NEXT stage questions to the user. NEVER automatically skip multiple stages in sequence.';
|
|
101
101
|
const mandatoryWorkflow = `
|
|
102
102
|
MANDATORY CLIENT AGENT WORKFLOW:
|
|
103
|
-
1. Present
|
|
104
|
-
2.
|
|
105
|
-
3.
|
|
106
|
-
4.
|
|
107
|
-
5. NEVER
|
|
108
|
-
6. NEVER assume what the user wants for
|
|
109
|
-
|
|
110
|
-
const strictConstraints = isHelm ? `
|
|
103
|
+
1. Present ALL questions from this stage to the user - do not skip any
|
|
104
|
+
2. For each question, show the default value if one exists and ask user to confirm or change it
|
|
105
|
+
3. Wait for explicit user response on EVERY question
|
|
106
|
+
4. Only call answerQuestion after user has reviewed and responded to all questions
|
|
107
|
+
5. NEVER auto-fill answers without user confirmation, even if you can deduce values
|
|
108
|
+
6. NEVER assume what the user wants for any question or stage`;
|
|
109
|
+
const strictConstraints = `
|
|
111
110
|
STRICT BEHAVIORAL CONSTRAINTS:
|
|
112
111
|
- DO NOT call answerQuestion automatically
|
|
113
|
-
- DO NOT
|
|
114
|
-
- DO NOT
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
- DO NOT call answerQuestion with empty open stage answers unless user explicitly provides them
|
|
120
|
-
- DO NOT interpret "skip" as "automatically proceed to next stage"
|
|
121
|
-
- MUST present each stage's questions individually and wait for user response`;
|
|
112
|
+
- DO NOT skip questions - present ALL questions even if they have defaults
|
|
113
|
+
- DO NOT assume user wants default values - always ask for confirmation
|
|
114
|
+
- DO NOT fill in values you deduced without asking user first
|
|
115
|
+
- DO NOT interpret "skip" as permission to auto-fill remaining questions
|
|
116
|
+
- MUST present each question individually and collect user's explicit response
|
|
117
|
+
- If a question has a default, show it as a suggestion but still ask user to confirm`;
|
|
122
118
|
const stageSpecific = getStageSpecificInstructions(stage, isHelm);
|
|
123
119
|
return `${antiCascadeRule}\n${mandatoryWorkflow}\n${strictConstraints}\n\n${stageSpecific}`;
|
|
124
120
|
}
|
|
@@ -294,18 +290,18 @@ function getStageMessage(stage) {
|
|
|
294
290
|
function getStageGuidance(stage, isHelm = false) {
|
|
295
291
|
switch (stage) {
|
|
296
292
|
case 'required':
|
|
297
|
-
return '
|
|
293
|
+
return 'Present all required questions to the user. All must be answered to proceed.';
|
|
298
294
|
case 'basic':
|
|
299
|
-
return '
|
|
295
|
+
return 'Present all basic questions to the user. Show default values as suggestions but ask user to confirm each one.';
|
|
300
296
|
case 'advanced':
|
|
301
297
|
// For Helm, don't mention the open stage since it's skipped
|
|
302
298
|
return isHelm
|
|
303
|
-
? '
|
|
304
|
-
: '
|
|
299
|
+
? 'Present all advanced questions to the user. Show default values as suggestions but ask user to confirm each one. After this stage: manifest generation.'
|
|
300
|
+
: 'Present all advanced questions to the user. Show default values as suggestions but ask user to confirm each one. After this stage: open stage.';
|
|
305
301
|
case 'open':
|
|
306
|
-
return '
|
|
302
|
+
return 'Ask user for any additional requirements or constraints. User can say "N/A" if none.';
|
|
307
303
|
default:
|
|
308
|
-
return '
|
|
304
|
+
return 'Present all questions to the user and collect their responses.';
|
|
309
305
|
}
|
|
310
306
|
}
|
|
311
307
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choose-solution.d.ts","sourceRoot":"","sources":["../../src/tools/choose-solution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,uEAAuE,CAAC;AAGpH,eAAO,MAAM,gCAAgC;;CAE5C,CAAC;AAIF;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"choose-solution.d.ts","sourceRoot":"","sources":["../../src/tools/choose-solution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,uEAAuE,CAAC;AAGpH,eAAO,MAAM,gCAAgC;;CAE5C,CAAC;AAIF;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAmIxD"}
|
|
@@ -89,7 +89,12 @@ async function handleChooseSolutionTool(args, dotAI, logger, requestId) {
|
|
|
89
89
|
nextStage: 'basic',
|
|
90
90
|
message: 'Please provide the required configuration for your application.',
|
|
91
91
|
nextAction: 'Call recommend tool with stage: answerQuestion:required',
|
|
92
|
-
guidance: '
|
|
92
|
+
guidance: 'Present ALL required questions to the user. All must be answered before proceeding.',
|
|
93
|
+
agentInstructions: `MANDATORY: Present ALL questions from this stage to the user - do not skip any.
|
|
94
|
+
For each question, show the default value if one exists and ask user to confirm or change it.
|
|
95
|
+
Wait for explicit user response on EVERY question before calling answerQuestion.
|
|
96
|
+
NEVER auto-fill answers without user confirmation, even if you can deduce values.
|
|
97
|
+
NEVER assume what the user wants - always ask.`,
|
|
93
98
|
timestamp: new Date().toISOString()
|
|
94
99
|
};
|
|
95
100
|
logger.info('Choose solution completed successfully', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAUhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,yXAAyX,CAAC;AAGja,eAAO,MAAM,2BAA2B;;;;;;;;CAWvC,CAAC;AAIF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE;QACT,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAiCD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAkVxD"}
|
package/dist/tools/recommend.js
CHANGED
|
@@ -17,6 +17,8 @@ const deploy_manifests_1 = require("./deploy-manifests");
|
|
|
17
17
|
const shared_prompt_loader_1 = require("../core/shared-prompt-loader");
|
|
18
18
|
const platform_utils_1 = require("../core/platform-utils");
|
|
19
19
|
const artifacthub_1 = require("../core/artifacthub");
|
|
20
|
+
// Intent refinement heuristic constants
|
|
21
|
+
const VAGUE_INTENT_THRESHOLD = 100; // Characters - intents below this trigger guidance
|
|
20
22
|
// Tool metadata for direct MCP registration
|
|
21
23
|
exports.RECOMMEND_TOOL_NAME = 'recommend';
|
|
22
24
|
exports.RECOMMEND_TOOL_DESCRIPTION = 'Deploy applications, infrastructure, and services using Kubernetes resources with AI recommendations. Supports cloud resources via operators like Crossplane, cluster management via CAPI, and traditional Kubernetes workloads. Describe what you want to deploy. Does NOT handle policy creation, organizational patterns, or resource capabilities - use manageOrgData for those.';
|
|
@@ -34,53 +36,29 @@ exports.RECOMMEND_TOOL_INPUT_SCHEMA = {
|
|
|
34
36
|
interaction_id: zod_1.z.string().optional().describe('INTERNAL ONLY - Do not populate. Used for evaluation dataset generation.')
|
|
35
37
|
};
|
|
36
38
|
/**
|
|
37
|
-
*
|
|
39
|
+
* Check if intent is vague using simple heuristic (character count)
|
|
38
40
|
*
|
|
39
|
-
* @param intent User's
|
|
40
|
-
* @
|
|
41
|
-
* @param logger Logger for error reporting
|
|
42
|
-
* @param organizationalPatterns Optional organizational patterns context
|
|
43
|
-
* @returns Analysis result with clarification opportunities
|
|
41
|
+
* @param intent User's intent string
|
|
42
|
+
* @returns true if intent is considered vague and needs refinement
|
|
44
43
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return analysisResult;
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
// If parsing fails or API call fails, return a fallback minimal analysis
|
|
67
|
-
logger.warn?.('Intent analysis failed, returning minimal analysis', {
|
|
68
|
-
error: error instanceof Error ? error.message : String(error)
|
|
69
|
-
});
|
|
70
|
-
return {
|
|
71
|
-
clarificationOpportunities: [],
|
|
72
|
-
overallAssessment: {
|
|
73
|
-
enhancementPotential: 'LOW',
|
|
74
|
-
primaryGaps: [],
|
|
75
|
-
recommendedFocus: 'Proceed with original intent - analysis unavailable'
|
|
76
|
-
},
|
|
77
|
-
intentQuality: {
|
|
78
|
-
currentSpecificity: 'Unable to analyze - using original intent',
|
|
79
|
-
strengthAreas: ['User provided clear deployment intent'],
|
|
80
|
-
improvementAreas: []
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
44
|
+
function isVagueIntent(intent) {
|
|
45
|
+
return intent.length < VAGUE_INTENT_THRESHOLD;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate guidance response for vague intents by loading the prompt template
|
|
49
|
+
*
|
|
50
|
+
* @param intent The vague intent that was provided
|
|
51
|
+
* @returns Structured response with guidance for the client agent
|
|
52
|
+
*/
|
|
53
|
+
function generateIntentRefinementGuidance(intent) {
|
|
54
|
+
// Load the guidance prompt from file
|
|
55
|
+
const guidance = (0, shared_prompt_loader_1.loadPrompt)('intent-refinement-guidance', {});
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
needsRefinement: true,
|
|
59
|
+
intent,
|
|
60
|
+
guidance
|
|
61
|
+
};
|
|
84
62
|
}
|
|
85
63
|
// Session management now handled by GenericSessionManager
|
|
86
64
|
/**
|
|
@@ -123,59 +101,32 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
123
101
|
intent: args.intent,
|
|
124
102
|
hasApiProvider: dotAI.ai.isInitialized()
|
|
125
103
|
});
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
user_intent: args.intent,
|
|
134
|
-
interaction_id: args.interaction_id
|
|
104
|
+
// Check if intent needs refinement using simple heuristic (unless final=true)
|
|
105
|
+
if (!args.final && isVagueIntent(args.intent)) {
|
|
106
|
+
logger.debug('Vague intent detected, returning refinement guidance', {
|
|
107
|
+
requestId,
|
|
108
|
+
intent: args.intent,
|
|
109
|
+
intentLength: args.intent.length,
|
|
110
|
+
threshold: VAGUE_INTENT_THRESHOLD
|
|
135
111
|
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const clarificationResponse = {
|
|
149
|
-
status: 'clarification_available',
|
|
150
|
-
intent: args.intent,
|
|
151
|
-
analysis: {
|
|
152
|
-
enhancementPotential: analysisResult.overallAssessment.enhancementPotential,
|
|
153
|
-
recommendedFocus: analysisResult.overallAssessment.recommendedFocus,
|
|
154
|
-
currentSpecificity: analysisResult.intentQuality.currentSpecificity,
|
|
155
|
-
strengthAreas: analysisResult.intentQuality.strengthAreas,
|
|
156
|
-
improvementAreas: analysisResult.intentQuality.improvementAreas
|
|
157
|
-
},
|
|
158
|
-
questions,
|
|
159
|
-
agentInstructions: 'Present these clarification questions to help the user provide a more specific intent. When the user provides a refined intent (or confirms the current intent is sufficient), call the recommend tool again with final: true to proceed with recommendations.'
|
|
160
|
-
};
|
|
161
|
-
logger.debug('Returning clarification questions', {
|
|
162
|
-
requestId,
|
|
163
|
-
questionsCount: questions.length,
|
|
164
|
-
enhancementPotential: analysisResult.overallAssessment.enhancementPotential
|
|
165
|
-
});
|
|
166
|
-
return {
|
|
167
|
-
content: [
|
|
168
|
-
{
|
|
169
|
-
type: 'text',
|
|
170
|
-
text: JSON.stringify(clarificationResponse, null, 2)
|
|
171
|
-
}
|
|
172
|
-
]
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
logger.debug('No significant clarification opportunities found, proceeding with recommendations', { requestId });
|
|
112
|
+
const guidanceResponse = generateIntentRefinementGuidance(args.intent);
|
|
113
|
+
return {
|
|
114
|
+
content: [
|
|
115
|
+
{
|
|
116
|
+
type: 'text',
|
|
117
|
+
text: JSON.stringify(guidanceResponse, null, 2)
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (args.final) {
|
|
123
|
+
logger.debug('Skipping intent refinement check (final=true), proceeding directly', { requestId });
|
|
176
124
|
}
|
|
177
125
|
else {
|
|
178
|
-
logger.debug('
|
|
126
|
+
logger.debug('Intent is detailed enough, proceeding with recommendations', {
|
|
127
|
+
requestId,
|
|
128
|
+
intentLength: args.intent.length
|
|
129
|
+
});
|
|
179
130
|
}
|
|
180
131
|
// Ensure cluster connectivity before proceeding with recommendations
|
|
181
132
|
await (0, cluster_utils_1.ensureClusterConnection)(dotAI, logger, requestId, 'RecommendTool');
|
package/dist/tools/remediate.js
CHANGED
|
@@ -400,9 +400,9 @@ async function executeRemediationCommands(session, sessionManager, logger, reque
|
|
|
400
400
|
logger.info('Waiting for Kubernetes to apply changes before validation', {
|
|
401
401
|
requestId,
|
|
402
402
|
sessionId: session.sessionId,
|
|
403
|
-
delayMs:
|
|
403
|
+
delayMs: 30000
|
|
404
404
|
});
|
|
405
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
405
|
+
await new Promise(resolve => setTimeout(resolve, 30000));
|
|
406
406
|
}
|
|
407
407
|
logger.info('Running post-execution validation', {
|
|
408
408
|
requestId,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vfarcic/dot-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.159.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",
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Intent Refinement Guidance
|
|
2
|
+
|
|
3
|
+
The provided intent lacks sufficient detail to proceed.
|
|
4
|
+
|
|
5
|
+
## Your Task
|
|
6
|
+
|
|
7
|
+
Figure out what the user wants to do. It could be anything - deploying applications, provisioning cloud resources (AWS, Azure, GCP), setting up infrastructure, configuring services, or something else entirely. Use your available context to gather details, then call the recommend tool again with a refined intent and `final: true`.
|
|
8
|
+
|
|
9
|
+
## Suggested Approach
|
|
10
|
+
|
|
11
|
+
### Step 1: Analyze Available Context
|
|
12
|
+
|
|
13
|
+
Check what context you have access to:
|
|
14
|
+
|
|
15
|
+
- **Project directory**: Are there files to analyze? Is the directory empty?
|
|
16
|
+
- **Conversation history**: Has the user mentioned relevant details earlier?
|
|
17
|
+
- **User preferences**: Do you know anything about their typical patterns or preferences?
|
|
18
|
+
|
|
19
|
+
### Step 2: If Project Has Files, Perform Deep Analysis
|
|
20
|
+
|
|
21
|
+
**Thoroughness over speed.** The more time you spend analyzing the project, the better your refined intent will be. Shallow analysis leads to vague intents. Investigate thoroughly before proceeding.
|
|
22
|
+
|
|
23
|
+
**Discover What Exists**
|
|
24
|
+
|
|
25
|
+
Explore the full directory structure. Read files to understand what they do, not just note their existence. The project could be anything - application source code, infrastructure definitions, Helm charts, Terraform configs, policy definitions, documentation, or something else entirely. Don't assume it's an application.
|
|
26
|
+
|
|
27
|
+
**Identify What the User Might Want**
|
|
28
|
+
|
|
29
|
+
A project may relate to multiple things - components, resources, services, infrastructure. Scan thoroughly to identify what exists and how things relate to each other.
|
|
30
|
+
|
|
31
|
+
**Gather Relevant Details**
|
|
32
|
+
|
|
33
|
+
For each thing you identify, dig into the specifics that would be relevant. What details matter depends entirely on what it is. Find evidence in the codebase rather than guessing. Note anything unclear as a question for the user.
|
|
34
|
+
|
|
35
|
+
### Step 3: Discuss With User
|
|
36
|
+
|
|
37
|
+
This is a conversation, not a one-shot analysis.
|
|
38
|
+
|
|
39
|
+
**Present your findings** - explain what you discovered and what you think the user might want to do. **Ask questions** - clarify what to include, confirm the details you found are correct, and ask about anything you couldn't determine from analysis.
|
|
40
|
+
|
|
41
|
+
Iterate as needed. You may need to go back and analyze further based on user responses.
|
|
42
|
+
|
|
43
|
+
If there are no files to scan or the purpose is unclear, ask the user to describe what they want to do.
|
|
44
|
+
|
|
45
|
+
### Step 4: Call Recommend Again
|
|
46
|
+
|
|
47
|
+
Once you and the user have agreed on what they want to do and the relevant details, call the recommend tool with:
|
|
48
|
+
- A comprehensive intent describing what they want and relevant specifics
|
|
49
|
+
- `final: true` to proceed
|
|
50
|
+
|
|
51
|
+
## What Makes a Good Intent
|
|
52
|
+
|
|
53
|
+
A detailed intent describes what the user wants to do with relevant specifics. What details matter depends entirely on what they're trying to accomplish. The more relevant detail you provide, the better.
|
|
54
|
+
|
|
55
|
+
## What NOT to Include
|
|
56
|
+
|
|
57
|
+
**Do NOT specify Kubernetes resource types** (e.g., "need a Deployment", "use Ingress", "create a Service"). The recommendation engine's job is to analyze your intent and find the BEST Kubernetes resources for your needs. Pre-specifying resources prevents it from recommending better alternatives like:
|
|
58
|
+
|
|
59
|
+
- Operators and CRDs (Knative Service, Crossplane resources, etc.)
|
|
60
|
+
- Platform-specific solutions (OpenShift Routes vs Ingress, etc.)
|
|
61
|
+
- Better-fit resource types (StatefulSet vs Deployment for stateful apps)
|
|
62
|
+
- Organization-specific patterns
|
|
63
|
+
|
|
64
|
+
**Good intent**: "Deploy a Python Flask API that connects to PostgreSQL. Container listens on port 5000, needs 512Mi memory, requires DATABASE_URL environment variable. Expose publicly at api.example.com"
|
|
65
|
+
|
|
66
|
+
**Bad intent**: "Deploy Flask API. Need Kubernetes Deployment, Service, and Ingress to expose..."
|
|
67
|
+
|
|
68
|
+
Focus on: WHAT you're deploying, the technical context (ports, runtime, requirements), and the desired outcome. Let the recommendation engine determine HOW.
|
|
@@ -293,11 +293,12 @@ Closes #[issue-id]
|
|
|
293
293
|
- CLI commands: `gh pr view [pr-number]`, `gh pr checks [pr-number]`, `gh api repos/owner/repo/pulls/[pr-number]/comments`
|
|
294
294
|
- **Web interface inspection**: Fetch the PR URL directly to capture all comments, including inline code suggestions that CLI tools may miss
|
|
295
295
|
- Look for comments from automated tools (usernames ending in 'ai', 'bot', or known review tools)
|
|
296
|
-
- [ ] **Present code review findings**: ALWAYS
|
|
297
|
-
- **
|
|
296
|
+
- [ ] **Present ALL code review findings**: ALWAYS present every review comment to the user, regardless of severity
|
|
297
|
+
- **Show ALL comments**: Present every suggestion, nitpick, and recommendation - do not filter or omit any
|
|
298
|
+
- **Categorize findings**: Critical, Important, Optional/Nitpick based on impact
|
|
298
299
|
- **Provide specific examples**: Quote actual suggestions and their locations
|
|
299
|
-
- **Explain assessment**: Why each category was assigned
|
|
300
|
-
- **User decision**: Let user decide which
|
|
300
|
+
- **Explain assessment**: Why each category was assigned
|
|
301
|
+
- **User decision**: Let user decide which improvements to implement before merge (critical items must be addressed, others are user's choice)
|
|
301
302
|
- [ ] **Assess feedback priority**: Categorize review feedback
|
|
302
303
|
- **Critical**: Security issues, breaking changes, test failures - MUST address before merge
|
|
303
304
|
- **Important**: Code quality, maintainability, performance - SHOULD address for production readiness
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# Intent Analysis for Comprehensive Clarification
|
|
2
|
-
|
|
3
|
-
You are an expert Kubernetes deployment consultant analyzing user intents to identify ALL opportunities for clarification that would lead to better deployment recommendations.
|
|
4
|
-
|
|
5
|
-
## User Intent
|
|
6
|
-
{{intent}}
|
|
7
|
-
|
|
8
|
-
## Organizational Patterns Context
|
|
9
|
-
{{organizational_patterns}}
|
|
10
|
-
|
|
11
|
-
## Third-Party Tool Installation Detection
|
|
12
|
-
|
|
13
|
-
**IMPORTANT**: First, determine if this intent is for installing a well-known third-party tool (Argo CD, Prometheus, Grafana, Crossplane, Cert-Manager, Jaeger, Vault, etc.).
|
|
14
|
-
|
|
15
|
-
**If YES (third-party tool installation)**:
|
|
16
|
-
- **Installation method is Helm** - DO NOT ask about Helm vs Kustomize vs manual
|
|
17
|
-
- **Detailed configuration will come later** - DO NOT ask about HA mode, authentication, storage, resource limits, monitoring integration, secrets management, backup strategies, etc. These questions will be asked in the Helm configuration phase
|
|
18
|
-
- **Keep clarification minimal** - only ask 1-3 questions that affect CHART SELECTION:
|
|
19
|
-
- "Do you want the full stack (e.g., kube-prometheus-stack) or just the base tool?"
|
|
20
|
-
- "Single cluster or multi-cluster setup?" (only if it affects which chart to use)
|
|
21
|
-
- Open-ended: "Any specific requirements that would affect the installation?"
|
|
22
|
-
- **Set enhancementPotential to LOW** for clear tool installation intents
|
|
23
|
-
- **Return minimal clarificationOpportunities** (1-3 max)
|
|
24
|
-
|
|
25
|
-
**If NO (custom application deployment)**:
|
|
26
|
-
- Proceed with comprehensive analysis below
|
|
27
|
-
|
|
28
|
-
## Analysis Framework
|
|
29
|
-
|
|
30
|
-
Analyze the user's intent comprehensively to identify **every piece of missing context** that could improve the quality and relevance of deployment recommendations. Be thorough - explore all aspects that could influence the deployment, regardless of traditional categories.
|
|
31
|
-
|
|
32
|
-
### Exploration Principles
|
|
33
|
-
|
|
34
|
-
**Comprehensive Context Discovery**: Identify ALL information that would help create the perfect solution for this specific intent. Consider:
|
|
35
|
-
- What would you need to know to build the ideal deployment?
|
|
36
|
-
- What domain-specific requirements might apply?
|
|
37
|
-
- What user-specific context is missing?
|
|
38
|
-
- What technical decisions haven't been made?
|
|
39
|
-
- What operational considerations are unexplored?
|
|
40
|
-
|
|
41
|
-
**Adaptive Questioning**: Let the intent guide your analysis:
|
|
42
|
-
- **Vague intents** require extensive exploration of possibilities
|
|
43
|
-
- **Specific intents** need targeted questions about remaining gaps
|
|
44
|
-
- **Technical intents** may need domain expertise questions
|
|
45
|
-
- **Business intents** may need operational and compliance questions
|
|
46
|
-
|
|
47
|
-
**No Self-Censoring**: Don't limit yourself to "high-impact" questions. Generate questions for every aspect that could be relevant. Users can decide what matters to them.
|
|
48
|
-
|
|
49
|
-
## Organizational Pattern Integration
|
|
50
|
-
|
|
51
|
-
Use the provided organizational patterns to inform your analysis:
|
|
52
|
-
- Identify alignment opportunities with existing patterns
|
|
53
|
-
- Recognize potential governance requirements
|
|
54
|
-
- Consider standard approaches within the organization
|
|
55
|
-
- Highlight areas where clarification could ensure compliance
|
|
56
|
-
|
|
57
|
-
## Analysis Guidelines
|
|
58
|
-
|
|
59
|
-
**DO NOT suggest clarification for:**
|
|
60
|
-
- Information that is clearly and explicitly stated in the intent
|
|
61
|
-
- Standard configurations that have sensible defaults AND the user hasn't indicated special requirements
|
|
62
|
-
|
|
63
|
-
**DO suggest clarification for:**
|
|
64
|
-
- Any missing context that could influence the solution approach
|
|
65
|
-
- Ambiguous requirements that could lead to multiple valid interpretations
|
|
66
|
-
- Missing information that only the user would know
|
|
67
|
-
- Organizational-specific requirements that align with provided patterns
|
|
68
|
-
|
|
69
|
-
## Response Format
|
|
70
|
-
|
|
71
|
-
Respond with ONLY a JSON object in this exact format:
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"clarificationOpportunities": [
|
|
76
|
-
{
|
|
77
|
-
"missingContext": "Specific description of what context is missing",
|
|
78
|
-
"reasoning": "Why this clarification would improve recommendations",
|
|
79
|
-
"suggestedQuestions": [
|
|
80
|
-
"Specific question that could gather this information",
|
|
81
|
-
"Alternative question approach for the same context"
|
|
82
|
-
],
|
|
83
|
-
"patternAlignment": "How this relates to organizational patterns (if applicable)"
|
|
84
|
-
}
|
|
85
|
-
],
|
|
86
|
-
"overallAssessment": {
|
|
87
|
-
"enhancementPotential": "<ENUM: HIGH | MEDIUM | LOW>",
|
|
88
|
-
"primaryGaps": ["Most important missing context area 1", "Most important missing context area 2"],
|
|
89
|
-
"recommendedFocus": "The single most valuable clarification opportunity"
|
|
90
|
-
},
|
|
91
|
-
"intentQuality": {
|
|
92
|
-
"currentSpecificity": "Assessment of how specific the intent currently is",
|
|
93
|
-
"strengthAreas": ["What aspects of the intent are already clear"],
|
|
94
|
-
"improvementAreas": ["What aspects would benefit most from clarification"]
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Important Notes
|
|
100
|
-
|
|
101
|
-
- Generate questions for **every piece of missing context** that could improve recommendations
|
|
102
|
-
- Consider the **user's perspective** - suggest questions they can actually answer
|
|
103
|
-
- **Be comprehensive** - explore all aspects that could influence the deployment
|
|
104
|
-
- **Leverage organizational patterns** to identify governance and compliance opportunities
|
|
105
|
-
- **Be practical** - ensure suggested questions are actionable and specific
|
|
106
|
-
- **Always include an open-ended question** as the final clarification opportunity to capture anything else the user might want to share
|