@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 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
+ ![DevOps AI Toolkit Infographic](docs/img/index.jpeg)
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":"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"}
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,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IAEf,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IAEjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IAEb,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IAEpB,4CAA4C;IAC5C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,qCAAqC;IACrC,YAAY,EAAE,YAAY,CAAC;IAE3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,qDAAqD;IACrD,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAE5D,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IAErB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,MAAM,EAAE,GAAG,CAAC;KACb,CAAC,CAAC;IAEH,qDAAqD;IACrD,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,6CAA6C;IAC7C,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAE1D,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC;IAE7G,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,+DAA+D;IAC/D,UAAU,CAAC,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;;;;OAWG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;;;;;OAMG;IACH,aAAa,IAAI,OAAO,CAAC;IAEzB;;;;;;;OAOG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;;;;OAMG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;;;OAIG;IACH,YAAY,IAAI,MAAM,CAAC;IAEvB;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAE1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"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"}
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
- // Begin actual capability scanning and return completion summary
91
- return await handleScanningFn(session, { ...args, response: undefined }, logger, requestId, capabilityService, parseNumericResponse, transitionCapabilitySession, cleanupCapabilitySession, createCapabilityScanCompletionResponse);
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
@@ -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, IntentAnalysisResult, AIProviderConfig } from './ai-provider.interface';
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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
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;AAgOD;;;;;;;;;;;;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"}
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"}
@@ -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. **kustomization.yaml** (root) - Points to production overlay for easy deployment
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**:
@@ -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: 'raw',
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;AA4hBF;;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"}
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. No skipping allowed.';
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 - These questions can be skipped. User can provide answers or say "skip" to proceed to advanced stage.';
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 - These questions can be skipped. User can provide answers or say "skip" to proceed to manifest generation.'
89
- : 'STAGE: ADVANCED - These questions can be skipped. User can provide answers or say "skip" to proceed to open stage.';
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. User can provide additional requirements or say "N/A" to proceed to manifest generation.';
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 these questions to the user in natural language
104
- 2. Wait for explicit user response
105
- 3. If user provides answers: call answerQuestion with their specific answers
106
- 4. If user says "skip": call answerQuestion with empty answers object ({})
107
- 5. NEVER call answerQuestion without receiving user input first
108
- 6. NEVER assume what the user wants for subsequent stages`;
109
- // For Helm, don't mention open stage constraints
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 assume user wants to proceed to manifest generation
114
- - DO NOT interpret "skip" as "automatically proceed to next stage"
115
- - MUST present each stage's questions individually and wait for user response` : `
116
- STRICT BEHAVIORAL CONSTRAINTS:
117
- - DO NOT call answerQuestion automatically
118
- - DO NOT assume user wants to proceed to manifest generation
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 'All required questions must be answered to proceed.';
293
+ return 'Present all required questions to the user. All must be answered to proceed.';
298
294
  case 'basic':
299
- return 'Answer questions in this stage or skip to proceed to the advanced stage. Do NOT try to generate manifests yet.';
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
- ? 'Answer questions in this stage or skip to proceed to manifest generation.'
304
- : 'Answer questions in this stage or skip to proceed to the open stage. Do NOT try to generate manifests yet.';
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 'Use "N/A" if you have no additional requirements. Complete this stage before generating manifests.';
302
+ return 'Ask user for any additional requirements or constraints. User can say "N/A" if none.';
307
303
  default:
308
- return 'Please provide answers for this stage.';
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,CA8HxD"}
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: 'Answer questions in this stage or skip to proceed to the next stage. Do NOT try to generate manifests yet.',
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;AAIxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAUhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,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;AAuED;;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,CAuXxD"}
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"}
@@ -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
- * Analyze intent for clarification opportunities using AI
39
+ * Check if intent is vague using simple heuristic (character count)
38
40
  *
39
- * @param intent User's deployment intent
40
- * @param aiProvider AI provider instance to use for analysis
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
- async function analyzeIntentForClarification(intent, aiProvider, logger, organizationalPatterns = '', evaluationContext) {
46
- try {
47
- // Load intent analysis prompt template
48
- const analysisPrompt = (0, shared_prompt_loader_1.loadPrompt)('intent-analysis', {
49
- intent,
50
- organizational_patterns: organizationalPatterns || 'No specific organizational patterns available'
51
- });
52
- // Send to AI for analysis
53
- const response = await aiProvider.sendMessage(analysisPrompt, 'recommend-intent-analysis', evaluationContext);
54
- // Parse JSON response using shared utility
55
- const analysisResult = (0, platform_utils_1.extractJsonFromAIResponse)(response.content);
56
- // Validate the response structure
57
- if (!analysisResult.clarificationOpportunities || !Array.isArray(analysisResult.clarificationOpportunities)) {
58
- throw new Error('Invalid analysis result structure: missing clarificationOpportunities array');
59
- }
60
- if (!analysisResult.overallAssessment || !analysisResult.intentQuality) {
61
- throw new Error('Invalid analysis result structure: missing overallAssessment or intentQuality');
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
- // Initialize AI provider for potential clarification analysis
127
- const aiProvider = dotAI.ai;
128
- // Check if intent clarification is needed (unless final=true)
129
- if (!args.final) {
130
- logger.debug('Analyzing intent for clarification opportunities', { requestId, intent: args.intent });
131
- const analysisResult = await analyzeIntentForClarification(args.intent, aiProvider, logger, '', // organizationalPatterns - empty for now
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
- // If clarification opportunities exist, return them to the client agent
137
- if (analysisResult.clarificationOpportunities &&
138
- analysisResult.clarificationOpportunities.length > 0 &&
139
- analysisResult.overallAssessment.enhancementPotential !== 'LOW') {
140
- // Convert analysis to structured questions for client agent
141
- const questions = analysisResult.clarificationOpportunities
142
- .map((opp, index) => ({
143
- id: `clarification-${index + 1}`,
144
- question: opp.suggestedQuestions?.[0] || `Can you provide more details about ${opp.missingContext.toLowerCase()}?`,
145
- reasoning: opp.reasoning,
146
- examples: opp.suggestedQuestions?.slice(1) || []
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('Skipping intent clarification (final=true), proceeding directly with recommendations', { requestId });
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');
@@ -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: 15000
403
+ delayMs: 30000
404
404
  });
405
- await new Promise(resolve => setTimeout(resolve, 15000));
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.157.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 summarize automated review feedback for the user (unless there are no findings)
297
- - **Categorize findings**: Critical, Important, Optional based on impact
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 and which items should be addressed
300
- - **User decision**: Let user decide which optional improvements to implement before merge
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