@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.
- package/.ax-cli/CUSTOM.md +111 -89
- package/.ax-cli/index.json +4 -3
- package/README.md +43 -16
- package/config/prompts.yaml +9 -0
- package/config/settings.yaml +2 -0
- package/dist/agent/llm-agent.d.ts +17 -0
- package/dist/agent/llm-agent.js +151 -52
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/commands/init/wizard.d.ts +66 -0
- package/dist/commands/init/wizard.js +310 -0
- package/dist/commands/init/wizard.js.map +1 -0
- package/dist/commands/init.js +145 -31
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.js +3 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/memory.d.ts +5 -0
- package/dist/commands/memory.js +257 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/setup.js +1 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/templates.d.ts +5 -0
- package/dist/commands/templates.js +244 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/update.js +9 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/usage.js +1 -1
- package/dist/commands/usage.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-input-handler.js +18 -4
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/index.js +147 -20
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +5 -0
- package/dist/llm/client.js +45 -39
- package/dist/llm/client.js.map +1 -1
- package/dist/schemas/index.d.ts +69 -0
- package/dist/schemas/index.js +29 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/yaml-schemas.d.ts +10 -0
- package/dist/schemas/yaml-schemas.js +2 -0
- package/dist/schemas/yaml-schemas.js.map +1 -1
- package/dist/tools/search.js +7 -1
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.js +24 -14
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/tools/todo-tool.js +62 -21
- package/dist/tools/todo-tool.js.map +1 -1
- package/dist/types/template.d.ts +53 -0
- package/dist/types/template.js +5 -0
- package/dist/types/template.js.map +1 -0
- package/dist/ui/components/chat-interface.js +5 -1
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/command-suggestions.js +2 -2
- package/dist/ui/components/command-suggestions.js.map +1 -1
- package/dist/utils/cache.d.ts +1 -0
- package/dist/utils/cache.js +39 -5
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/config-loader.d.ts +2 -0
- package/dist/utils/config-loader.js +2 -1
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/confirmation-service.js +6 -3
- package/dist/utils/confirmation-service.js.map +1 -1
- package/dist/utils/error-handler.d.ts +5 -0
- package/dist/utils/error-handler.js +9 -3
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/init-previewer.d.ts +56 -0
- package/dist/utils/init-previewer.js +217 -0
- package/dist/utils/init-previewer.js.map +1 -0
- package/dist/utils/init-validator.d.ts +61 -0
- package/dist/utils/init-validator.js +248 -0
- package/dist/utils/init-validator.js.map +1 -0
- package/dist/utils/onboarding-manager.js +34 -9
- package/dist/utils/onboarding-manager.js.map +1 -1
- package/dist/utils/path-utils.d.ts +83 -0
- package/dist/utils/path-utils.js +122 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/progress-tracker.d.ts +51 -0
- package/dist/utils/progress-tracker.js +152 -0
- package/dist/utils/progress-tracker.js.map +1 -0
- package/dist/utils/project-analyzer.js +8 -14
- package/dist/utils/project-analyzer.js.map +1 -1
- package/dist/utils/settings-manager.d.ts +3 -3
- package/dist/utils/settings-manager.js +6 -13
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/string-utils.d.ts +19 -0
- package/dist/utils/string-utils.js +28 -0
- package/dist/utils/string-utils.js.map +1 -0
- package/dist/utils/template-manager.d.ts +54 -0
- package/dist/utils/template-manager.js +421 -0
- package/dist/utils/template-manager.js.map +1 -0
- package/dist/utils/text-utils.js +3 -1
- package/dist/utils/text-utils.js.map +1 -1
- package/package.json +2 -1
- package/vitest.config.ts +6 -0
- package/dist/utils/model-config.d.ts +0 -28
- package/dist/utils/model-config.js +0 -43
- package/dist/utils/model-config.js.map +0 -1
- package/dist/utils/tool-helpers.d.ts +0 -25
- package/dist/utils/tool-helpers.js +0 -53
- 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
|
-
|
|
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":"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,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,
|
|
1
|
+
{"version":3,"file":"confirmation-service.js","sourceRoot":"","sources":["../../src/utils/confirmation-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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
|
+
}
|