@defai.digital/ax-cli 2.3.1 → 2.4.1

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.
Files changed (102) hide show
  1. package/.ax-cli/CUSTOM.md +111 -89
  2. package/.ax-cli/index.json +4 -3
  3. package/README.md +43 -16
  4. package/config/prompts.yaml +9 -0
  5. package/config/settings.yaml +2 -0
  6. package/dist/agent/llm-agent.d.ts +17 -0
  7. package/dist/agent/llm-agent.js +151 -52
  8. package/dist/agent/llm-agent.js.map +1 -1
  9. package/dist/commands/init/wizard.d.ts +66 -0
  10. package/dist/commands/init/wizard.js +310 -0
  11. package/dist/commands/init/wizard.js.map +1 -0
  12. package/dist/commands/init.js +145 -31
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/mcp.js +3 -2
  15. package/dist/commands/mcp.js.map +1 -1
  16. package/dist/commands/memory.d.ts +5 -0
  17. package/dist/commands/memory.js +257 -0
  18. package/dist/commands/memory.js.map +1 -0
  19. package/dist/commands/setup.js +1 -1
  20. package/dist/commands/setup.js.map +1 -1
  21. package/dist/commands/templates.d.ts +5 -0
  22. package/dist/commands/templates.js +244 -0
  23. package/dist/commands/templates.js.map +1 -0
  24. package/dist/commands/update.js +9 -2
  25. package/dist/commands/update.js.map +1 -1
  26. package/dist/commands/usage.js +1 -1
  27. package/dist/commands/usage.js.map +1 -1
  28. package/dist/constants.d.ts +2 -0
  29. package/dist/constants.js +2 -0
  30. package/dist/constants.js.map +1 -1
  31. package/dist/hooks/use-input-handler.js +18 -4
  32. package/dist/hooks/use-input-handler.js.map +1 -1
  33. package/dist/index.js +147 -20
  34. package/dist/index.js.map +1 -1
  35. package/dist/llm/client.d.ts +5 -0
  36. package/dist/llm/client.js +45 -39
  37. package/dist/llm/client.js.map +1 -1
  38. package/dist/schemas/index.d.ts +69 -0
  39. package/dist/schemas/index.js +29 -0
  40. package/dist/schemas/index.js.map +1 -1
  41. package/dist/schemas/yaml-schemas.d.ts +10 -0
  42. package/dist/schemas/yaml-schemas.js +2 -0
  43. package/dist/schemas/yaml-schemas.js.map +1 -1
  44. package/dist/tools/search.js +7 -1
  45. package/dist/tools/search.js.map +1 -1
  46. package/dist/tools/text-editor.js +24 -14
  47. package/dist/tools/text-editor.js.map +1 -1
  48. package/dist/tools/todo-tool.js +62 -21
  49. package/dist/tools/todo-tool.js.map +1 -1
  50. package/dist/types/template.d.ts +53 -0
  51. package/dist/types/template.js +5 -0
  52. package/dist/types/template.js.map +1 -0
  53. package/dist/ui/components/chat-interface.js +5 -1
  54. package/dist/ui/components/chat-interface.js.map +1 -1
  55. package/dist/ui/components/command-suggestions.js +2 -2
  56. package/dist/ui/components/command-suggestions.js.map +1 -1
  57. package/dist/utils/cache.d.ts +1 -0
  58. package/dist/utils/cache.js +39 -5
  59. package/dist/utils/cache.js.map +1 -1
  60. package/dist/utils/config-loader.d.ts +2 -0
  61. package/dist/utils/config-loader.js +2 -1
  62. package/dist/utils/config-loader.js.map +1 -1
  63. package/dist/utils/confirmation-service.js +6 -3
  64. package/dist/utils/confirmation-service.js.map +1 -1
  65. package/dist/utils/error-handler.d.ts +5 -0
  66. package/dist/utils/error-handler.js +9 -3
  67. package/dist/utils/error-handler.js.map +1 -1
  68. package/dist/utils/init-previewer.d.ts +56 -0
  69. package/dist/utils/init-previewer.js +217 -0
  70. package/dist/utils/init-previewer.js.map +1 -0
  71. package/dist/utils/init-validator.d.ts +61 -0
  72. package/dist/utils/init-validator.js +248 -0
  73. package/dist/utils/init-validator.js.map +1 -0
  74. package/dist/utils/onboarding-manager.js +34 -9
  75. package/dist/utils/onboarding-manager.js.map +1 -1
  76. package/dist/utils/path-utils.d.ts +83 -0
  77. package/dist/utils/path-utils.js +122 -0
  78. package/dist/utils/path-utils.js.map +1 -0
  79. package/dist/utils/progress-tracker.d.ts +51 -0
  80. package/dist/utils/progress-tracker.js +152 -0
  81. package/dist/utils/progress-tracker.js.map +1 -0
  82. package/dist/utils/project-analyzer.js +8 -14
  83. package/dist/utils/project-analyzer.js.map +1 -1
  84. package/dist/utils/settings-manager.d.ts +3 -3
  85. package/dist/utils/settings-manager.js +6 -13
  86. package/dist/utils/settings-manager.js.map +1 -1
  87. package/dist/utils/string-utils.d.ts +19 -0
  88. package/dist/utils/string-utils.js +28 -0
  89. package/dist/utils/string-utils.js.map +1 -0
  90. package/dist/utils/template-manager.d.ts +54 -0
  91. package/dist/utils/template-manager.js +421 -0
  92. package/dist/utils/template-manager.js.map +1 -0
  93. package/dist/utils/text-utils.js +3 -1
  94. package/dist/utils/text-utils.js.map +1 -1
  95. package/package.json +2 -1
  96. package/vitest.config.ts +6 -0
  97. package/dist/utils/model-config.d.ts +0 -28
  98. package/dist/utils/model-config.js +0 -43
  99. package/dist/utils/model-config.js.map +0 -1
  100. package/dist/utils/tool-helpers.d.ts +0 -25
  101. package/dist/utils/tool-helpers.js +0 -53
  102. package/dist/utils/tool-helpers.js.map +0 -1
@@ -64,12 +64,17 @@ export class ConfirmationService extends EventEmitter {
64
64
  options.showVSCodeOpen = false;
65
65
  }
66
66
  }
67
+ // Clear any existing timeout first to prevent memory leaks
68
+ if (this.confirmationTimeoutId) {
69
+ clearTimeout(this.confirmationTimeoutId);
70
+ this.confirmationTimeoutId = null;
71
+ }
67
72
  // Create a promise that will be resolved by the UI component
68
73
  // Add a timeout to prevent hanging indefinitely
69
74
  this.pendingConfirmation = new Promise((resolve) => {
70
75
  this.resolveConfirmation = resolve;
71
76
  // Set a timeout of 60 seconds for confirmation
72
- const timeoutId = setTimeout(() => {
77
+ this.confirmationTimeoutId = setTimeout(() => {
73
78
  if (this.resolveConfirmation) {
74
79
  this.resolveConfirmation({
75
80
  confirmed: false,
@@ -80,8 +85,6 @@ export class ConfirmationService extends EventEmitter {
80
85
  this.confirmationTimeoutId = null;
81
86
  }
82
87
  }, 60000); // 60 second timeout
83
- // Store timeout ID to clear it if confirmation comes early
84
- this.confirmationTimeoutId = timeoutId;
85
88
  });
86
89
  // Emit custom event that the UI can listen to (using setImmediate to ensure the UI updates)
87
90
  setImmediate(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation-service.js","sourceRoot":"","sources":["../../src/utils/confirmation-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirmation-service.js","sourceRoot":"","sources":["../../src/utils/confirmation-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAelC,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC3C,MAAM,CAAC,QAAQ,CAAsB;IACrC,mBAAmB,GAAuC,IAAI,CAAC;IAC/D,mBAAmB,GACzB,IAAI,CAAC;IACC,qBAAqB,GAA0B,IAAI,CAAC;IAE5D,8CAA8C;IACtC,YAAY,GAAG;QACrB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,aAA8B,EAC9B,OAA4B;QAE5B,4BAA4B;QAC5B,IACE,IAAI,CAAC,YAAY,CAAC,aAAa;YAC/B,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YAC9D,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAC5D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAA4B,EAC5B,gBAAiC,MAAM;QAEvC,sBAAsB;QACtB,IACE,IAAI,CAAC,YAAY,CAAC,aAAa;YAC/B,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YAC9D,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAC5D,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,6EAA6E;QAC7E,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,uFAAuF;aAClG,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;gBAChD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,6DAA6D;QAC7D,gDAAgD;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;YACrE,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;YAEnC,+CAA+C;YAC/C,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3C,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,IAAI,CAAC,mBAAmB,CAAC;wBACvB,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,uDAAuD;qBAClE,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;QACjC,CAAC,CAAC,CAAC;QAEH,4FAA4F;QAC5F,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;QAE9C,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,2DAA2D;YAC3D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC;YAC1C,CAAC;iBAAM,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;YACxC,CAAC;YACD,+CAA+C;QACjD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gBAAgB,CAAC,SAAkB,EAAE,YAAsB;QACzD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,iCAAiC;YACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED,eAAe,CAAC,QAAiB;QAC/B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,iCAAiC;YACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAErD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;gBAChC,MAAM,SAAS,CAAC,GAAG,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;gBAC3B,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC;IAC3C,CAAC;IAED,YAAY;QACV,IAAI,CAAC,YAAY,GAAG;YAClB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,cAAc,CACZ,QAA6D,EAC7D,KAAc;QAEd,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;CACF"}
@@ -27,6 +27,11 @@ export declare function createToolError(category: ErrorCategory, operation: stri
27
27
  * Create a standardized ToolResult success
28
28
  */
29
29
  export declare function createToolSuccess(output: string): ToolResult;
30
+ /**
31
+ * Extract error message from unknown error type
32
+ * Consolidates the common pattern: error instanceof Error ? error.message : String(error)
33
+ */
34
+ export declare function extractErrorMessage(error: unknown): string;
30
35
  /**
31
36
  * Safely parse JSON with error handling
32
37
  */
@@ -19,8 +19,7 @@ export var ErrorCategory;
19
19
  * Create a standardized error message
20
20
  */
21
21
  export function createErrorMessage(category, operation, error) {
22
- const errorMessage = error instanceof Error ? error.message : String(error);
23
- return `[${category}] ${operation} failed: ${errorMessage}`;
22
+ return `[${category}] ${operation} failed: ${extractErrorMessage(error)}`;
24
23
  }
25
24
  /**
26
25
  * Create a standardized ToolResult error
@@ -40,6 +39,13 @@ export function createToolSuccess(output) {
40
39
  output,
41
40
  };
42
41
  }
42
+ /**
43
+ * Extract error message from unknown error type
44
+ * Consolidates the common pattern: error instanceof Error ? error.message : String(error)
45
+ */
46
+ export function extractErrorMessage(error) {
47
+ return error instanceof Error ? error.message : String(error);
48
+ }
43
49
  /**
44
50
  * Safely parse JSON with error handling
45
51
  */
@@ -51,7 +57,7 @@ export function safeJsonParse(json) {
51
57
  catch (error) {
52
58
  return {
53
59
  success: false,
54
- error: error instanceof Error ? error.message : 'Invalid JSON',
60
+ error: extractErrorMessage(error),
55
61
  };
56
62
  }
57
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAN,IAAY,aAQX;AARD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,8CAA6B,CAAA;IAC7B,kDAAiC,CAAA;IACjC,kDAAiC,CAAA;IACjC,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;IACnB,gDAA+B,CAAA;AACjC,CAAC,EARW,aAAa,KAAb,aAAa,QAQxB;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAuB,EACvB,SAAiB,EACjB,KAAc;IAEd,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,IAAI,QAAQ,KAAK,SAAS,YAAY,YAAY,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,SAAiB,EACjB,KAAc;IAEd,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAuB,EACvB,SAAiB,EACjB,EAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CACtB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAC7D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAN,IAAY,aAQX;AARD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,8CAA6B,CAAA;IAC7B,kDAAiC,CAAA;IACjC,kDAAiC,CAAA;IACjC,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;IACnB,gDAA+B,CAAA;AACjC,CAAC,EARW,aAAa,KAAb,aAAa,QAQxB;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAuB,EACvB,SAAiB,EACjB,KAAc;IAEd,OAAO,IAAI,QAAQ,KAAK,SAAS,YAAY,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,SAAiB,EACjB,KAAc;IAEd,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAuB,EACvB,SAAiB,EACjB,EAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CACtB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAC7D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Preview utilities for init command
3
+ */
4
+ import type { ProjectInfo } from '../types/project-analysis.js';
5
+ export interface PreviewOptions {
6
+ showDiff?: boolean;
7
+ showFull?: boolean;
8
+ maxLines?: number;
9
+ }
10
+ export interface FilePreview {
11
+ path: string;
12
+ exists: boolean;
13
+ currentContent?: string;
14
+ newContent: string;
15
+ changes?: {
16
+ added: number;
17
+ removed: number;
18
+ modified: boolean;
19
+ };
20
+ }
21
+ export declare class InitPreviewer {
22
+ private projectRoot;
23
+ constructor(projectRoot: string);
24
+ /**
25
+ * Preview what will be created/modified
26
+ */
27
+ preview(customMdContent: string, indexContent: string, options?: PreviewOptions): Promise<void>;
28
+ /**
29
+ * Display preview for a single file
30
+ */
31
+ private displayFilePreview;
32
+ /**
33
+ * Calculate changes between old and new content
34
+ */
35
+ private calculateChanges;
36
+ /**
37
+ * Generate diff view (simplified)
38
+ */
39
+ private generateDiff;
40
+ /**
41
+ * Truncate content to max lines
42
+ */
43
+ private truncateContent;
44
+ /**
45
+ * Generate summary of all changes
46
+ */
47
+ private generateSummary;
48
+ /**
49
+ * Interactive confirmation after preview
50
+ */
51
+ confirmChanges(): Promise<boolean>;
52
+ /**
53
+ * Preview project analysis results
54
+ */
55
+ static previewProjectInfo(projectInfo: ProjectInfo): Promise<void>;
56
+ }
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Preview utilities for init command
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import * as prompts from '@clack/prompts';
7
+ import { TOKEN_CONFIG } from '../constants.js';
8
+ export class InitPreviewer {
9
+ projectRoot;
10
+ constructor(projectRoot) {
11
+ this.projectRoot = projectRoot;
12
+ }
13
+ /**
14
+ * Preview what will be created/modified
15
+ */
16
+ async preview(customMdContent, indexContent, options = {}) {
17
+ const customMdPath = path.join(this.projectRoot, '.ax-cli', 'CUSTOM.md');
18
+ const indexPath = path.join(this.projectRoot, '.ax-cli', 'index.json');
19
+ prompts.intro('Preview: Init Changes');
20
+ // Preview CUSTOM.md
21
+ const customMdPreview = {
22
+ path: customMdPath,
23
+ exists: fs.existsSync(customMdPath),
24
+ currentContent: fs.existsSync(customMdPath) ? fs.readFileSync(customMdPath, 'utf-8') : undefined,
25
+ newContent: customMdContent,
26
+ };
27
+ if (customMdPreview.exists && customMdPreview.currentContent) {
28
+ customMdPreview.changes = this.calculateChanges(customMdPreview.currentContent, customMdPreview.newContent);
29
+ }
30
+ // Preview index.json
31
+ const indexPreview = {
32
+ path: indexPath,
33
+ exists: fs.existsSync(indexPath),
34
+ currentContent: fs.existsSync(indexPath) ? fs.readFileSync(indexPath, 'utf-8') : undefined,
35
+ newContent: indexContent,
36
+ };
37
+ if (indexPreview.exists && indexPreview.currentContent) {
38
+ indexPreview.changes = this.calculateChanges(indexPreview.currentContent, indexPreview.newContent);
39
+ }
40
+ // Display CUSTOM.md preview
41
+ await this.displayFilePreview(customMdPreview, options);
42
+ // Display index.json preview
43
+ await this.displayFilePreview(indexPreview, { ...options, maxLines: 20 });
44
+ // Summary
45
+ const summary = this.generateSummary([customMdPreview, indexPreview]);
46
+ await prompts.note(summary, 'Summary');
47
+ prompts.outro('Preview complete');
48
+ }
49
+ /**
50
+ * Display preview for a single file
51
+ */
52
+ async displayFilePreview(preview, options) {
53
+ const status = preview.exists ? '📝 Modified' : '✨ New';
54
+ const title = `${status}: ${path.basename(preview.path)}`;
55
+ if (options.showDiff && preview.exists && preview.currentContent) {
56
+ // Show diff
57
+ const diff = this.generateDiff(preview.currentContent, preview.newContent, options.maxLines);
58
+ await prompts.note(diff, title);
59
+ }
60
+ else if (options.showFull) {
61
+ // Show full content
62
+ const content = this.truncateContent(preview.newContent, options.maxLines);
63
+ await prompts.note(content, title);
64
+ }
65
+ else {
66
+ // Show summary
67
+ const lines = preview.newContent.split('\n').length;
68
+ const chars = preview.newContent.length;
69
+ // Rough approximation: actual tokens vary by content (English ~4 chars/token, code ~3)
70
+ const tokens = Math.ceil(chars / TOKEN_CONFIG.CHARS_PER_TOKEN_ESTIMATE);
71
+ let summary = `Lines: ${lines}\nCharacters: ${chars}\nEstimated Tokens: ~${tokens}`;
72
+ if (preview.changes) {
73
+ summary += `\n\nChanges:\n`;
74
+ summary += ` + ${preview.changes.added} lines added\n`;
75
+ summary += ` - ${preview.changes.removed} lines removed`;
76
+ }
77
+ await prompts.note(summary, title);
78
+ }
79
+ }
80
+ /**
81
+ * Calculate changes between old and new content
82
+ */
83
+ calculateChanges(oldContent, newContent) {
84
+ const oldLines = oldContent.split('\n');
85
+ const newLines = newContent.split('\n');
86
+ // Simple line-based diff (optimized)
87
+ const oldSet = new Set(oldLines);
88
+ const newSet = new Set(newLines);
89
+ // Count added lines (in new but not in old)
90
+ const added = newLines.filter(line => !oldSet.has(line)).length;
91
+ // Count removed lines (in old but not in new)
92
+ const removed = oldLines.filter(line => !newSet.has(line)).length;
93
+ return {
94
+ added,
95
+ removed,
96
+ modified: added > 0 || removed > 0,
97
+ };
98
+ }
99
+ /**
100
+ * Generate diff view (simplified)
101
+ */
102
+ generateDiff(oldContent, newContent, maxLines) {
103
+ const oldLines = oldContent.split('\n');
104
+ const newLines = newContent.split('\n');
105
+ const diff = [];
106
+ let lineCount = 0;
107
+ let i = 0;
108
+ // Simple line-by-line comparison
109
+ const maxLength = Math.max(oldLines.length, newLines.length);
110
+ for (i = 0; i < maxLength && (!maxLines || lineCount < maxLines); i++) {
111
+ const oldLine = oldLines[i];
112
+ const newLine = newLines[i];
113
+ if (oldLine === newLine) {
114
+ diff.push(` ${newLine}`);
115
+ }
116
+ else if (oldLine && !newLine) {
117
+ diff.push(`- ${oldLine}`);
118
+ lineCount++;
119
+ }
120
+ else if (!oldLine && newLine) {
121
+ diff.push(`+ ${newLine}`);
122
+ lineCount++;
123
+ }
124
+ else {
125
+ diff.push(`- ${oldLine}`);
126
+ diff.push(`+ ${newLine}`);
127
+ lineCount += 2;
128
+ }
129
+ }
130
+ // Calculate remaining lines correctly
131
+ if (maxLines && i < maxLength) {
132
+ const remaining = maxLength - i;
133
+ diff.push(`\n... (${remaining} more lines)`);
134
+ }
135
+ return diff.join('\n');
136
+ }
137
+ /**
138
+ * Truncate content to max lines
139
+ */
140
+ truncateContent(content, maxLines) {
141
+ if (!maxLines) {
142
+ return content;
143
+ }
144
+ const lines = content.split('\n');
145
+ if (lines.length <= maxLines) {
146
+ return content;
147
+ }
148
+ return lines.slice(0, maxLines).join('\n') + `\n\n... (${lines.length - maxLines} more lines)`;
149
+ }
150
+ /**
151
+ * Generate summary of all changes
152
+ */
153
+ generateSummary(previews) {
154
+ const newFiles = previews.filter(p => !p.exists);
155
+ const modifiedFiles = previews.filter(p => p.exists && p.changes?.modified);
156
+ const unchangedFiles = previews.filter(p => p.exists && !p.changes?.modified);
157
+ const parts = [];
158
+ if (newFiles.length > 0) {
159
+ parts.push(`✨ ${newFiles.length} new file(s)`);
160
+ }
161
+ if (modifiedFiles.length > 0) {
162
+ parts.push(`📝 ${modifiedFiles.length} modified file(s)`);
163
+ }
164
+ if (unchangedFiles.length > 0) {
165
+ parts.push(`✓ ${unchangedFiles.length} unchanged file(s)`);
166
+ }
167
+ // Calculate total changes
168
+ const totalAdded = previews.reduce((sum, p) => sum + (p.changes?.added || 0), 0);
169
+ const totalRemoved = previews.reduce((sum, p) => sum + (p.changes?.removed || 0), 0);
170
+ if (totalAdded > 0 || totalRemoved > 0) {
171
+ parts.push('');
172
+ parts.push(`Lines: +${totalAdded} -${totalRemoved}`);
173
+ }
174
+ return parts.join('\n');
175
+ }
176
+ /**
177
+ * Interactive confirmation after preview
178
+ */
179
+ async confirmChanges() {
180
+ const confirmed = await prompts.confirm({
181
+ message: 'Apply these changes?',
182
+ initialValue: true,
183
+ });
184
+ if (prompts.isCancel(confirmed)) {
185
+ return false;
186
+ }
187
+ return confirmed;
188
+ }
189
+ /**
190
+ * Preview project analysis results
191
+ */
192
+ static async previewProjectInfo(projectInfo) {
193
+ prompts.intro('Project Analysis');
194
+ const info = [
195
+ `Name: ${projectInfo.name}`,
196
+ `Type: ${projectInfo.projectType}`,
197
+ `Language: ${projectInfo.primaryLanguage}`,
198
+ projectInfo.techStack.length > 0 ? `Stack: ${projectInfo.techStack.join(', ')}` : '',
199
+ projectInfo.entryPoint ? `Entry: ${projectInfo.entryPoint}` : '',
200
+ projectInfo.packageManager ? `Package Manager: ${projectInfo.packageManager}` : '',
201
+ ].filter(Boolean).join('\n');
202
+ await prompts.note(info, 'Detected');
203
+ if (projectInfo.directories && Object.keys(projectInfo.directories).length > 0) {
204
+ const dirs = Object.entries(projectInfo.directories)
205
+ .map(([key, value]) => `${key}: ${value}`)
206
+ .join('\n');
207
+ await prompts.note(dirs, 'Directories');
208
+ }
209
+ if (projectInfo.conventions && Object.keys(projectInfo.conventions).length > 0) {
210
+ const conventions = Object.entries(projectInfo.conventions)
211
+ .map(([key, value]) => `${key}: ${value}`)
212
+ .join('\n');
213
+ await prompts.note(conventions, 'Conventions');
214
+ }
215
+ }
216
+ }
217
+ //# sourceMappingURL=init-previewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-previewer.js","sourceRoot":"","sources":["../../src/utils/init-previewer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Validation utilities for init command
3
+ */
4
+ import type { ProjectInfo } from '../types/project-analysis.js';
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ warnings: string[];
8
+ errors: string[];
9
+ suggestions: string[];
10
+ }
11
+ export interface ValidationChecks {
12
+ hasPackageJson?: boolean;
13
+ hasGitRepo?: boolean;
14
+ hasExistingConfig?: boolean;
15
+ hasValidStructure?: boolean;
16
+ hasMinimumFiles?: boolean;
17
+ }
18
+ export declare class InitValidator {
19
+ private projectRoot;
20
+ constructor(projectRoot: string);
21
+ /**
22
+ * Run all validation checks
23
+ */
24
+ validate(projectInfo?: ProjectInfo): ValidationResult;
25
+ /**
26
+ * Check for package.json
27
+ */
28
+ private checkPackageJson;
29
+ /**
30
+ * Check for git repository
31
+ */
32
+ private checkGitRepo;
33
+ /**
34
+ * Check for existing AX CLI configuration
35
+ */
36
+ private checkExistingConfig;
37
+ /**
38
+ * Check project structure
39
+ */
40
+ private checkProjectStructure;
41
+ /**
42
+ * Check for minimum files
43
+ */
44
+ private checkMinimumFiles;
45
+ /**
46
+ * Validate project info
47
+ */
48
+ private validateProjectInfo;
49
+ /**
50
+ * Validate custom instructions content
51
+ */
52
+ static validateCustomInstructions(content: string): ValidationResult;
53
+ /**
54
+ * Check if force flag is needed
55
+ */
56
+ needsForceFlag(): boolean;
57
+ /**
58
+ * Get validation summary string
59
+ */
60
+ static formatValidationResult(result: ValidationResult): string;
61
+ }