@vfarcic/dot-ai 0.11.0 → 0.13.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
@@ -104,23 +104,26 @@ Agent: ✅ Successfully deployed! Your application is running.
104
104
  For scripting and direct usage (requires global installation):
105
105
 
106
106
  ```bash
107
+ # 0. Create session directory (required)
108
+ mkdir -p tmp/sessions
109
+
107
110
  # 1. Get AI recommendations (includes cluster discovery)
108
- dot-ai recommend --intent "deploy a web application" --session-dir ./tmp
111
+ dot-ai recommend --intent "deploy a web application" --session-dir tmp/sessions
109
112
 
110
113
  # 2. Choose a solution
111
- dot-ai choose-solution --solution-id sol_xxx --session-dir ./tmp
114
+ dot-ai choose-solution --solution-id sol_xxx --session-dir tmp/sessions
112
115
 
113
116
  # 3. Configure step-by-step (all stages required)
114
- dot-ai answer-question --solution-id sol_xxx --stage required --answers {...}
115
- dot-ai answer-question --solution-id sol_xxx --stage basic --answers {}
116
- dot-ai answer-question --solution-id sol_xxx --stage advanced --answers {}
117
- dot-ai answer-question --solution-id sol_xxx --stage open --answers {"open":"N/A"}
117
+ dot-ai answer-question --solution-id sol_xxx --stage required --answers {...} --session-dir tmp/sessions
118
+ dot-ai answer-question --solution-id sol_xxx --stage basic --answers {} --session-dir tmp/sessions
119
+ dot-ai answer-question --solution-id sol_xxx --stage advanced --answers {} --session-dir tmp/sessions
120
+ dot-ai answer-question --solution-id sol_xxx --stage open --answers {"open":"N/A"} --session-dir tmp/sessions
118
121
 
119
122
  # 4. Generate manifests
120
- dot-ai generate-manifests --solution-id sol_xxx --session-dir ./tmp
123
+ dot-ai generate-manifests --solution-id sol_xxx --session-dir tmp/sessions
121
124
 
122
125
  # 5. Deploy to cluster
123
- dot-ai deploy-manifests --solution-id sol_xxx --session-dir ./tmp
126
+ dot-ai deploy-manifests --solution-id sol_xxx --session-dir tmp/sessions
124
127
  ```
125
128
 
126
129
  📖 **[Complete CLI Guide →](docs/cli-guide.md)** - Detailed command-line interface documentation
@@ -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;AAGxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,6EAA6E,CAAC;AAG1H,eAAO,MAAM,gCAAgC;;;;CAI5C,CAAC;AAodF;;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,CAAA;CAAE,EAC7G,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,CAmTxD"}
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;AAGxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMhD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,6EAA6E,CAAC;AAG1H,eAAO,MAAM,gCAAgC;;;;CAI5C,CAAC;AA6eF;;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,CAAA;CAAE,EAC7G,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,CAmTxD"}
@@ -227,21 +227,50 @@ function getCurrentStage(solution) {
227
227
  /**
228
228
  * Validate stage transition is allowed
229
229
  */
230
- function validateStageTransition(currentStage, requestedStage) {
231
- const validTransitions = {
232
- 'required': ['basic', 'open'],
233
- 'basic': ['advanced', 'open'],
234
- 'advanced': ['open'],
235
- 'open': []
236
- };
230
+ function validateStageTransition(currentStage, requestedStage, solution) {
231
+ // Allow processing the same stage (for answering or skipping)
237
232
  if (currentStage === requestedStage) {
238
- return { valid: true }; // Same stage is always valid
233
+ return { valid: true };
234
+ }
235
+ // Determine the next stage based on what questions exist
236
+ let expectedNext = null;
237
+ if (currentStage === 'required') {
238
+ if (solution.questions.basic && solution.questions.basic.length > 0) {
239
+ expectedNext = 'basic';
240
+ }
241
+ else if (solution.questions.advanced && solution.questions.advanced.length > 0) {
242
+ expectedNext = 'advanced';
243
+ }
244
+ else {
245
+ expectedNext = 'open';
246
+ }
247
+ }
248
+ else if (currentStage === 'basic') {
249
+ if (solution.questions.advanced && solution.questions.advanced.length > 0) {
250
+ expectedNext = 'advanced';
251
+ }
252
+ else {
253
+ expectedNext = 'open';
254
+ }
255
+ }
256
+ else if (currentStage === 'advanced') {
257
+ expectedNext = 'open';
258
+ }
259
+ else {
260
+ expectedNext = null; // open stage is final
261
+ }
262
+ // If we're at the final stage, no transitions allowed
263
+ if (expectedNext === null) {
264
+ return {
265
+ valid: false,
266
+ error: `Cannot transition from '${currentStage}' stage. All stages completed.`
267
+ };
239
268
  }
240
- const allowedNext = validTransitions[currentStage] || [];
241
- if (!allowedNext.includes(requestedStage)) {
269
+ // Only allow transition to the immediate next stage
270
+ if (requestedStage !== expectedNext) {
242
271
  return {
243
272
  valid: false,
244
- error: `Cannot transition from '${currentStage}' to '${requestedStage}'. Valid options: ${allowedNext.join(', ')}`
273
+ error: `Cannot skip to '${requestedStage}' stage. Must process '${expectedNext}' stage next. Use empty answers to skip the current stage.`
245
274
  };
246
275
  }
247
276
  return { valid: true };
@@ -483,7 +512,7 @@ async function handleAnswerQuestionTool(args, dotAI, logger, requestId) {
483
512
  // Stage-based validation and workflow
484
513
  const stageState = getCurrentStage(solution);
485
514
  // Validate stage transition
486
- const transitionResult = validateStageTransition(stageState.currentStage, args.stage);
515
+ const transitionResult = validateStageTransition(stageState.currentStage, args.stage, solution);
487
516
  if (!transitionResult.valid) {
488
517
  const response = {
489
518
  status: 'stage_error',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vfarcic/dot-ai",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Universal Kubernetes application deployment agent with CLI and MCP interfaces",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",