@vfarcic/dot-ai 0.158.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.
@@ -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
@@ -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', {
@@ -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.158.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",
@@ -51,3 +51,18 @@ Once you and the user have agreed on what they want to do and the relevant detai
51
51
  ## What Makes a Good Intent
52
52
 
53
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.