ba-kit-cli 2.0.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 +160 -0
- package/bin/ba-kit.js +2 -0
- package/dist/commands/cache.d.ts +8 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +43 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/completion.d.ts +9 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +172 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +142 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/restore.d.ts +6 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +168 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +154 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +300 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cache.d.ts +50 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +152 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/config.d.ts +25 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +67 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/copier.d.ts +10 -0
- package/dist/lib/copier.d.ts.map +1 -0
- package/dist/lib/copier.js +79 -0
- package/dist/lib/copier.js.map +1 -0
- package/dist/lib/differ.d.ts +16 -0
- package/dist/lib/differ.d.ts.map +1 -0
- package/dist/lib/differ.js +51 -0
- package/dist/lib/differ.js.map +1 -0
- package/dist/lib/downloader.d.ts +11 -0
- package/dist/lib/downloader.d.ts.map +1 -0
- package/dist/lib/downloader.js +110 -0
- package/dist/lib/downloader.js.map +1 -0
- package/dist/lib/hasher.d.ts +18 -0
- package/dist/lib/hasher.d.ts.map +1 -0
- package/dist/lib/hasher.js +54 -0
- package/dist/lib/hasher.js.map +1 -0
- package/dist/lib/manifest.d.ts +30 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +72 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/constants.d.ts +13 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +38 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errors.d.ts +60 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +99 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +107 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prompts.d.ts +18 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +63 -0
- package/dist/utils/prompts.js.map +1 -0
- package/man/ba-kit.1 +194 -0
- package/package.json +77 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized exit codes
|
|
3
|
+
*/
|
|
4
|
+
export const EXIT_CODES = {
|
|
5
|
+
SUCCESS: 0,
|
|
6
|
+
ERROR: 1,
|
|
7
|
+
USAGE_ERROR: 2,
|
|
8
|
+
NOT_INSTALLED: 3,
|
|
9
|
+
NETWORK_ERROR: 4,
|
|
10
|
+
CONFLICT: 5,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Exit with code and optional message
|
|
14
|
+
*/
|
|
15
|
+
export function exit(code, log, message) {
|
|
16
|
+
if (message)
|
|
17
|
+
log.error(message);
|
|
18
|
+
process.exit(code);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Base error class for BA-Kit CLI
|
|
22
|
+
*/
|
|
23
|
+
export class BaKitError extends Error {
|
|
24
|
+
code;
|
|
25
|
+
exitCode;
|
|
26
|
+
constructor(message, code = 'UNKNOWN_ERROR', exitCode = EXIT_CODES.ERROR) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = 'BaKitError';
|
|
29
|
+
this.code = code;
|
|
30
|
+
this.exitCode = exitCode;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Error for when BA-Kit is not installed in the project
|
|
35
|
+
*/
|
|
36
|
+
export class NotInstalledError extends BaKitError {
|
|
37
|
+
constructor(message = 'Not a BA-Kit project. Run `ba-kit init` first.') {
|
|
38
|
+
super(message, 'NOT_INSTALLED', EXIT_CODES.NOT_INSTALLED);
|
|
39
|
+
this.name = 'NotInstalledError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Error for when BA-Kit is already installed
|
|
44
|
+
*/
|
|
45
|
+
export class AlreadyInstalledError extends BaKitError {
|
|
46
|
+
constructor(message = 'BA-Kit already installed. Use --force to overwrite.') {
|
|
47
|
+
super(message, 'ALREADY_INSTALLED', EXIT_CODES.ERROR);
|
|
48
|
+
this.name = 'AlreadyInstalledError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Error for network/download failures
|
|
53
|
+
*/
|
|
54
|
+
export class DownloadError extends BaKitError {
|
|
55
|
+
constructor(message = 'Failed to download BA-Kit from GitHub.') {
|
|
56
|
+
super(message, 'DOWNLOAD_ERROR', EXIT_CODES.NETWORK_ERROR);
|
|
57
|
+
this.name = 'DownloadError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Error for manifest issues
|
|
62
|
+
*/
|
|
63
|
+
export class ManifestError extends BaKitError {
|
|
64
|
+
constructor(message = 'Invalid or corrupted manifest file.') {
|
|
65
|
+
super(message, 'MANIFEST_ERROR', EXIT_CODES.ERROR);
|
|
66
|
+
this.name = 'ManifestError';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Error for file operation failures
|
|
71
|
+
*/
|
|
72
|
+
export class FileOperationError extends BaKitError {
|
|
73
|
+
constructor(message = 'File operation failed.') {
|
|
74
|
+
super(message, 'FILE_OPERATION_ERROR', EXIT_CODES.ERROR);
|
|
75
|
+
this.name = 'FileOperationError';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Handle error and exit with appropriate code
|
|
80
|
+
*/
|
|
81
|
+
export function handleError(error, log) {
|
|
82
|
+
if (error instanceof BaKitError) {
|
|
83
|
+
log.error(error.message);
|
|
84
|
+
if (process.env.DEBUG) {
|
|
85
|
+
console.error(error.stack);
|
|
86
|
+
}
|
|
87
|
+
process.exit(error.exitCode);
|
|
88
|
+
}
|
|
89
|
+
// Unknown error
|
|
90
|
+
log.error('An unexpected error occurred.');
|
|
91
|
+
if (process.env.DEBUG) {
|
|
92
|
+
console.error(error);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
log.dim('Run with DEBUG=1 for more details.');
|
|
96
|
+
}
|
|
97
|
+
process.exit(EXIT_CODES.ERROR);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type Ora } from 'ora';
|
|
2
|
+
/**
|
|
3
|
+
* Logger options for verbosity control
|
|
4
|
+
*/
|
|
5
|
+
export interface LoggerOptions {
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
quiet?: boolean;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Set global logger options
|
|
12
|
+
*/
|
|
13
|
+
export declare function setLoggerOptions(options: LoggerOptions): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get current logger options
|
|
16
|
+
*/
|
|
17
|
+
export declare function getLoggerOptions(): LoggerOptions;
|
|
18
|
+
/**
|
|
19
|
+
* Logger with verbosity support
|
|
20
|
+
*/
|
|
21
|
+
export declare const log: {
|
|
22
|
+
info: (msg: string) => void;
|
|
23
|
+
success: (msg: string) => void;
|
|
24
|
+
warn: (msg: string) => void;
|
|
25
|
+
error: (msg: string) => void;
|
|
26
|
+
dim: (msg: string) => void;
|
|
27
|
+
debug: (msg: string) => void;
|
|
28
|
+
json: <T>(data: T) => void;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create a spinner (respects quiet/json modes)
|
|
32
|
+
*/
|
|
33
|
+
export declare function spinner(text: string): Ora;
|
|
34
|
+
type FileStatus = 'unchanged' | 'modified' | 'deleted' | 'added' | 'conflict';
|
|
35
|
+
/**
|
|
36
|
+
* Table utilities for status display
|
|
37
|
+
*/
|
|
38
|
+
export declare const table: {
|
|
39
|
+
header: (text: string) => void;
|
|
40
|
+
row: (status: FileStatus, file: string) => void;
|
|
41
|
+
};
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;GAEG;AACH,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;mBAKV,MAAM,KAAG,IAAI;gBAKhB,MAAM,KAAG,IAAI;iBAKZ,MAAM,KAAG,IAAI;eAQf,MAAM,KAAG,IAAI;iBAKX,MAAM,KAAG,IAAI;WAKnB,CAAC,QAAQ,CAAC,KAAG,IAAI;CAKzB,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAmBzC;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,KAAK;mBACD,MAAM,KAAG,IAAI;kBAKd,UAAU,QAAQ,MAAM,KAAG,IAAI;CAW9C,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
let globalOptions = {};
|
|
4
|
+
/**
|
|
5
|
+
* Set global logger options
|
|
6
|
+
*/
|
|
7
|
+
export function setLoggerOptions(options) {
|
|
8
|
+
globalOptions = options;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get current logger options
|
|
12
|
+
*/
|
|
13
|
+
export function getLoggerOptions() {
|
|
14
|
+
return globalOptions;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Logger with verbosity support
|
|
18
|
+
*/
|
|
19
|
+
export const log = {
|
|
20
|
+
info: (msg) => {
|
|
21
|
+
if (globalOptions.json)
|
|
22
|
+
return;
|
|
23
|
+
if (!globalOptions.quiet)
|
|
24
|
+
console.log(chalk.blue('ℹ'), msg);
|
|
25
|
+
},
|
|
26
|
+
success: (msg) => {
|
|
27
|
+
if (globalOptions.json)
|
|
28
|
+
return;
|
|
29
|
+
console.log(chalk.green('✓'), msg);
|
|
30
|
+
},
|
|
31
|
+
warn: (msg) => {
|
|
32
|
+
if (globalOptions.json)
|
|
33
|
+
return;
|
|
34
|
+
console.log(chalk.yellow('⚠'), msg);
|
|
35
|
+
},
|
|
36
|
+
error: (msg) => {
|
|
37
|
+
if (globalOptions.json) {
|
|
38
|
+
console.error(JSON.stringify({ error: msg }));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.error(chalk.red('✗'), msg);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
dim: (msg) => {
|
|
45
|
+
if (globalOptions.json)
|
|
46
|
+
return;
|
|
47
|
+
if (!globalOptions.quiet)
|
|
48
|
+
console.log(chalk.dim(msg));
|
|
49
|
+
},
|
|
50
|
+
debug: (msg) => {
|
|
51
|
+
if (globalOptions.json)
|
|
52
|
+
return;
|
|
53
|
+
if (globalOptions.verbose)
|
|
54
|
+
console.log(chalk.gray('[debug]'), msg);
|
|
55
|
+
},
|
|
56
|
+
json: (data) => {
|
|
57
|
+
if (globalOptions.json) {
|
|
58
|
+
console.log(JSON.stringify(data, null, 2));
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Create a spinner (respects quiet/json modes)
|
|
64
|
+
*/
|
|
65
|
+
export function spinner(text) {
|
|
66
|
+
if (globalOptions.quiet || globalOptions.json) {
|
|
67
|
+
// Return a no-op spinner
|
|
68
|
+
const noop = () => noopSpinner;
|
|
69
|
+
const noopSpinner = {
|
|
70
|
+
start: noop,
|
|
71
|
+
stop: noop,
|
|
72
|
+
succeed: noop,
|
|
73
|
+
fail: noop,
|
|
74
|
+
warn: noop,
|
|
75
|
+
info: noop,
|
|
76
|
+
stopAndPersist: noop,
|
|
77
|
+
clear: noop,
|
|
78
|
+
render: noop,
|
|
79
|
+
frame: noop,
|
|
80
|
+
};
|
|
81
|
+
return noopSpinner;
|
|
82
|
+
}
|
|
83
|
+
return ora({ text, spinner: 'dots' });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Table utilities for status display
|
|
87
|
+
*/
|
|
88
|
+
export const table = {
|
|
89
|
+
header: (text) => {
|
|
90
|
+
if (globalOptions.json)
|
|
91
|
+
return;
|
|
92
|
+
console.log(chalk.bold.underline(text));
|
|
93
|
+
},
|
|
94
|
+
row: (status, file) => {
|
|
95
|
+
if (globalOptions.json)
|
|
96
|
+
return;
|
|
97
|
+
const icons = {
|
|
98
|
+
unchanged: chalk.dim('○'),
|
|
99
|
+
modified: chalk.yellow('✎'),
|
|
100
|
+
deleted: chalk.red('✗'),
|
|
101
|
+
added: chalk.green('+'),
|
|
102
|
+
conflict: chalk.red('⚡'),
|
|
103
|
+
};
|
|
104
|
+
console.log(` ${icons[status] || '?'} ${file}`);
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AAWpC,IAAI,aAAa,GAAkB,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,aAAa,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC1B,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC7B,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC1B,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC3B,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,GAAG,EAAE,CAAC,GAAW,EAAQ,EAAE;QACzB,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC3B,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,EAAE,CAAI,IAAO,EAAQ,EAAE;QACzB,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9C,yBAAyB;QACzB,MAAM,IAAI,GAAG,GAAQ,EAAE,CAAC,WAAW,CAAC;QACpC,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;YACV,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;SACM,CAAC;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAID;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,CAAC,IAAY,EAAQ,EAAE;QAC7B,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,EAAE,CAAC,MAAkB,EAAE,IAAY,EAAQ,EAAE;QAC9C,IAAI,aAAa,CAAC,IAAI;YAAE,OAAO;QAC/B,MAAM,KAAK,GAA+B;YACxC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACzB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YACvB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;SACzB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ConflictAction = 'keep' | 'overwrite' | 'diff' | 'backup';
|
|
2
|
+
/**
|
|
3
|
+
* Confirm overwrite of existing .agent/ folder
|
|
4
|
+
*/
|
|
5
|
+
export declare function confirmOverwrite(): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Prompt for conflict resolution
|
|
8
|
+
*/
|
|
9
|
+
export declare function promptConflict(filePath: string): Promise<ConflictAction>;
|
|
10
|
+
/**
|
|
11
|
+
* Select files to restore
|
|
12
|
+
*/
|
|
13
|
+
export declare function selectFilesToRestore(files: string[]): Promise<string[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Confirm restore action
|
|
16
|
+
*/
|
|
17
|
+
export declare function confirmRestore(count: number): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtE;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUzD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAe9E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
/**
|
|
3
|
+
* Confirm overwrite of existing .agent/ folder
|
|
4
|
+
*/
|
|
5
|
+
export async function confirmOverwrite() {
|
|
6
|
+
const { confirm } = await inquirer.prompt([
|
|
7
|
+
{
|
|
8
|
+
type: 'confirm',
|
|
9
|
+
name: 'confirm',
|
|
10
|
+
message: '.agent/ folder already exists. Overwrite? (backup will be created)',
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
]);
|
|
14
|
+
return confirm;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Prompt for conflict resolution
|
|
18
|
+
*/
|
|
19
|
+
export async function promptConflict(filePath) {
|
|
20
|
+
const { action } = await inquirer.prompt([
|
|
21
|
+
{
|
|
22
|
+
type: 'list',
|
|
23
|
+
name: 'action',
|
|
24
|
+
message: `Conflict: ${filePath}`,
|
|
25
|
+
choices: [
|
|
26
|
+
{ name: 'Keep yours (skip update)', value: 'keep' },
|
|
27
|
+
{ name: 'Use upstream (overwrite)', value: 'overwrite' },
|
|
28
|
+
{ name: 'View diff', value: 'diff' },
|
|
29
|
+
{ name: 'Backup & update', value: 'backup' },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
return action;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Select files to restore
|
|
37
|
+
*/
|
|
38
|
+
export async function selectFilesToRestore(files) {
|
|
39
|
+
const { selected } = await inquirer.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: 'checkbox',
|
|
42
|
+
name: 'selected',
|
|
43
|
+
message: 'Select files to restore:',
|
|
44
|
+
choices: files.map(f => ({ name: f, value: f })),
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
return selected;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Confirm restore action
|
|
51
|
+
*/
|
|
52
|
+
export async function confirmRestore(count) {
|
|
53
|
+
const { confirm } = await inquirer.prompt([
|
|
54
|
+
{
|
|
55
|
+
type: 'confirm',
|
|
56
|
+
name: 'confirm',
|
|
57
|
+
message: `Restore ${count} file(s) to original? (backups will be created)`,
|
|
58
|
+
default: false,
|
|
59
|
+
},
|
|
60
|
+
]);
|
|
61
|
+
return confirm;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;QAC9D;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,oEAAoE;YAC7E,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA6B;QACnE;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,aAAa,QAAQ,EAAE;YAChC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE;gBACnD,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,WAAW,EAAE;gBACxD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;gBACpC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;aAC7C;SACF;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAe;IACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAyB;QACjE;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACjD;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;QAC9D;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,WAAW,KAAK,iDAAiD;YAC1E,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/man/ba-kit.1
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
.TH BA-KIT 1 "January 2026" "ba-kit-cli" "User Commands"
|
|
2
|
+
|
|
3
|
+
.SH NAME
|
|
4
|
+
ba-kit \- CLI tool for scaffolding BA-Kit into projects
|
|
5
|
+
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
.B ba-kit
|
|
8
|
+
[\fIOPTIONS\fR]
|
|
9
|
+
.IR COMMAND
|
|
10
|
+
[\fICOMMAND_OPTIONS\fR]
|
|
11
|
+
|
|
12
|
+
.SH DESCRIPTION
|
|
13
|
+
ba-kit is a command-line tool for initializing, updating, and managing
|
|
14
|
+
BA-Kit installations in your projects. It uses manifest-based tracking
|
|
15
|
+
to detect changes and handle updates gracefully.
|
|
16
|
+
|
|
17
|
+
.SH GLOBAL OPTIONS
|
|
18
|
+
.TP
|
|
19
|
+
.BR \-V ", " \-\-version
|
|
20
|
+
Display version number
|
|
21
|
+
|
|
22
|
+
.TP
|
|
23
|
+
.BR \-v ", " \-\-verbose
|
|
24
|
+
Enable verbose output
|
|
25
|
+
|
|
26
|
+
.TP
|
|
27
|
+
.BR \-q ", " \-\-quiet
|
|
28
|
+
Suppress non-essential output
|
|
29
|
+
|
|
30
|
+
.TP
|
|
31
|
+
.BR \-\-json
|
|
32
|
+
Output in JSON format
|
|
33
|
+
|
|
34
|
+
.TP
|
|
35
|
+
.BR \-h ", " \-\-help
|
|
36
|
+
Display help message
|
|
37
|
+
|
|
38
|
+
.SH COMMANDS
|
|
39
|
+
|
|
40
|
+
.SS init [path]
|
|
41
|
+
Initialize BA-Kit in the current or specified directory.
|
|
42
|
+
|
|
43
|
+
Options:
|
|
44
|
+
.RS
|
|
45
|
+
.TP
|
|
46
|
+
.BR \-f ", " \-\-force
|
|
47
|
+
Overwrite existing .agent/ folder
|
|
48
|
+
.TP
|
|
49
|
+
.BR \-b ", " \-\-branch " " \fIBRANCH\fR
|
|
50
|
+
Branch to use (default: main)
|
|
51
|
+
.TP
|
|
52
|
+
.BR \-l ", " \-\-local " " \fIPATH\fR
|
|
53
|
+
Use local ba-kit source instead of GitHub
|
|
54
|
+
.RE
|
|
55
|
+
|
|
56
|
+
.SS status
|
|
57
|
+
Show BA-Kit installation status.
|
|
58
|
+
|
|
59
|
+
Options:
|
|
60
|
+
.RS
|
|
61
|
+
.TP
|
|
62
|
+
.BR \-\-remote
|
|
63
|
+
Check against remote for updates
|
|
64
|
+
.RE
|
|
65
|
+
|
|
66
|
+
.SS update
|
|
67
|
+
Update BA-Kit to the latest version.
|
|
68
|
+
|
|
69
|
+
Options:
|
|
70
|
+
.RS
|
|
71
|
+
.TP
|
|
72
|
+
.BR \-y ", " \-\-yes
|
|
73
|
+
Auto-accept non-conflicting updates
|
|
74
|
+
.TP
|
|
75
|
+
.BR \-\-dry-run
|
|
76
|
+
Show changes without applying
|
|
77
|
+
.TP
|
|
78
|
+
.BR \-l ", " \-\-local " " \fIPATH\fR
|
|
79
|
+
Use local ba-kit source
|
|
80
|
+
.RE
|
|
81
|
+
|
|
82
|
+
.SS restore [file]
|
|
83
|
+
Restore modified files to their original state.
|
|
84
|
+
|
|
85
|
+
Options:
|
|
86
|
+
.RS
|
|
87
|
+
.TP
|
|
88
|
+
.BR \-a ", " \-\-all
|
|
89
|
+
Restore all modified files
|
|
90
|
+
.TP
|
|
91
|
+
.BR \-y ", " \-\-yes
|
|
92
|
+
Skip confirmation prompt
|
|
93
|
+
.TP
|
|
94
|
+
.BR \-l ", " \-\-local " " \fIPATH\fR
|
|
95
|
+
Use local ba-kit source
|
|
96
|
+
.RE
|
|
97
|
+
|
|
98
|
+
.SS completion <shell>
|
|
99
|
+
Generate shell completion script.
|
|
100
|
+
|
|
101
|
+
Arguments:
|
|
102
|
+
.RS
|
|
103
|
+
.TP
|
|
104
|
+
.I shell
|
|
105
|
+
Shell type: bash, zsh, or fish
|
|
106
|
+
.RE
|
|
107
|
+
|
|
108
|
+
.SS cache
|
|
109
|
+
Manage download cache.
|
|
110
|
+
|
|
111
|
+
Options:
|
|
112
|
+
.RS
|
|
113
|
+
.TP
|
|
114
|
+
.BR \-\-clear
|
|
115
|
+
Clear the cache
|
|
116
|
+
.RE
|
|
117
|
+
|
|
118
|
+
.SH FILES
|
|
119
|
+
.TP
|
|
120
|
+
.I .agent/.ba-kit.json
|
|
121
|
+
Manifest file tracking installed files and versions
|
|
122
|
+
|
|
123
|
+
.TP
|
|
124
|
+
.I .ba-kitrc
|
|
125
|
+
Project-level configuration file
|
|
126
|
+
|
|
127
|
+
.TP
|
|
128
|
+
.I ~/.config/ba-kit/config.json
|
|
129
|
+
Global configuration file
|
|
130
|
+
|
|
131
|
+
.TP
|
|
132
|
+
.I ~/.cache/ba-kit/
|
|
133
|
+
Download cache directory
|
|
134
|
+
|
|
135
|
+
.SH EXIT STATUS
|
|
136
|
+
.TP
|
|
137
|
+
.B 0
|
|
138
|
+
Success
|
|
139
|
+
.TP
|
|
140
|
+
.B 1
|
|
141
|
+
General error
|
|
142
|
+
.TP
|
|
143
|
+
.B 2
|
|
144
|
+
Usage error
|
|
145
|
+
.TP
|
|
146
|
+
.B 3
|
|
147
|
+
Not installed error
|
|
148
|
+
.TP
|
|
149
|
+
.B 4
|
|
150
|
+
Network error
|
|
151
|
+
.TP
|
|
152
|
+
.B 5
|
|
153
|
+
Conflict error
|
|
154
|
+
|
|
155
|
+
.SH EXAMPLES
|
|
156
|
+
.PP
|
|
157
|
+
Initialize BA-Kit in current directory:
|
|
158
|
+
.RS
|
|
159
|
+
.B ba-kit init
|
|
160
|
+
.RE
|
|
161
|
+
|
|
162
|
+
.PP
|
|
163
|
+
Update with automatic acceptance:
|
|
164
|
+
.RS
|
|
165
|
+
.B ba-kit update --yes
|
|
166
|
+
.RE
|
|
167
|
+
|
|
168
|
+
.PP
|
|
169
|
+
Check status against remote:
|
|
170
|
+
.RS
|
|
171
|
+
.B ba-kit status --remote
|
|
172
|
+
.RE
|
|
173
|
+
|
|
174
|
+
.PP
|
|
175
|
+
Restore all modified files:
|
|
176
|
+
.RS
|
|
177
|
+
.B ba-kit restore --all --yes
|
|
178
|
+
.RE
|
|
179
|
+
|
|
180
|
+
.PP
|
|
181
|
+
Generate zsh completions:
|
|
182
|
+
.RS
|
|
183
|
+
.B ba-kit completion zsh >> ~/.zshrc
|
|
184
|
+
.RE
|
|
185
|
+
|
|
186
|
+
.SH SEE ALSO
|
|
187
|
+
.BR npm (1),
|
|
188
|
+
.BR node (1)
|
|
189
|
+
|
|
190
|
+
.SH BUGS
|
|
191
|
+
Report bugs at https://github.com/anthropics/ba-kit-cli/issues
|
|
192
|
+
|
|
193
|
+
.SH AUTHOR
|
|
194
|
+
Anthropic <https://anthropic.com>
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ba-kit-cli",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "CLI tool for scaffolding BA-Kit into projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"ba-kit": "./bin/ba-kit.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"man": "./man/ba-kit.1",
|
|
12
|
+
"files": [
|
|
13
|
+
"bin",
|
|
14
|
+
"dist",
|
|
15
|
+
"man",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"dev": "tsx src/index.ts",
|
|
25
|
+
"man": "tsx scripts/generate-man.ts",
|
|
26
|
+
"prepublishOnly": "npm run clean && npm run build && npm run man && npm test",
|
|
27
|
+
"release": "tsx scripts/release.ts",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"test:watch": "vitest",
|
|
30
|
+
"test:coverage": "vitest run --coverage",
|
|
31
|
+
"lint": "tsc --noEmit",
|
|
32
|
+
"link": "npm link"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"ba-kit",
|
|
36
|
+
"business-analysis",
|
|
37
|
+
"requirements",
|
|
38
|
+
"scaffolding",
|
|
39
|
+
"cli",
|
|
40
|
+
"ai-agent",
|
|
41
|
+
"claude",
|
|
42
|
+
"anthropic"
|
|
43
|
+
],
|
|
44
|
+
"author": "Anthropic",
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git+https://github.com/anthropics/ba-kit-cli.git"
|
|
49
|
+
},
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/anthropics/ba-kit-cli/issues"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://github.com/anthropics/ba-kit-cli#readme",
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public",
|
|
56
|
+
"registry": "https://registry.npmjs.org/"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"chalk": "^5.6.2",
|
|
60
|
+
"commander": "^14.0.2",
|
|
61
|
+
"diff": "^8.0.2",
|
|
62
|
+
"inquirer": "^13.1.0",
|
|
63
|
+
"ora": "^9.0.0",
|
|
64
|
+
"tar": "^7.5.2",
|
|
65
|
+
"zod": "^4.3.5"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/diff": "^7.0.2",
|
|
69
|
+
"@types/inquirer": "^9.0.7",
|
|
70
|
+
"@types/node": "^25.0.3",
|
|
71
|
+
"@types/tar": "^6.1.13",
|
|
72
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
73
|
+
"tsx": "^4.21.0",
|
|
74
|
+
"typescript": "^5.9.3",
|
|
75
|
+
"vitest": "^4.0.16"
|
|
76
|
+
}
|
|
77
|
+
}
|