@zdql/giga-claude-cli 1.0.2
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 +148 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +62 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/workflow/artifacts.d.ts +6 -0
- package/dist/commands/workflow/artifacts.d.ts.map +1 -0
- package/dist/commands/workflow/artifacts.js +92 -0
- package/dist/commands/workflow/artifacts.js.map +1 -0
- package/dist/commands/workflow/control.d.ts +7 -0
- package/dist/commands/workflow/control.d.ts.map +1 -0
- package/dist/commands/workflow/control.js +76 -0
- package/dist/commands/workflow/control.js.map +1 -0
- package/dist/commands/workflow/create.d.ts +6 -0
- package/dist/commands/workflow/create.d.ts.map +1 -0
- package/dist/commands/workflow/create.js +137 -0
- package/dist/commands/workflow/create.js.map +1 -0
- package/dist/commands/workflow/index.d.ts +6 -0
- package/dist/commands/workflow/index.d.ts.map +1 -0
- package/dist/commands/workflow/index.js +27 -0
- package/dist/commands/workflow/index.js.map +1 -0
- package/dist/commands/workflow/logs.d.ts +6 -0
- package/dist/commands/workflow/logs.d.ts.map +1 -0
- package/dist/commands/workflow/logs.js +117 -0
- package/dist/commands/workflow/logs.js.map +1 -0
- package/dist/commands/workflow/run.d.ts +14 -0
- package/dist/commands/workflow/run.d.ts.map +1 -0
- package/dist/commands/workflow/run.js +140 -0
- package/dist/commands/workflow/run.js.map +1 -0
- package/dist/commands/workflow/status.d.ts +6 -0
- package/dist/commands/workflow/status.d.ts.map +1 -0
- package/dist/commands/workflow/status.js +113 -0
- package/dist/commands/workflow/status.js.map +1 -0
- package/dist/commands/workflow/validate.d.ts +6 -0
- package/dist/commands/workflow/validate.d.ts.map +1 -0
- package/dist/commands/workflow/validate.js +94 -0
- package/dist/commands/workflow/validate.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/client.d.ts +14 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +30 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +31 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +71 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +56 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +106 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/utils.d.ts +41 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +92 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client wrapper for CLI
|
|
3
|
+
* Uses the @zdql/giga-claude-client package
|
|
4
|
+
*/
|
|
5
|
+
import { GigaClaudeClient } from "@zdql/giga-claude-client";
|
|
6
|
+
import { requireConfig } from "./config.js";
|
|
7
|
+
let clientInstance = null;
|
|
8
|
+
/**
|
|
9
|
+
* Get or create client instance
|
|
10
|
+
*/
|
|
11
|
+
export function getClient() {
|
|
12
|
+
if (clientInstance) {
|
|
13
|
+
return clientInstance;
|
|
14
|
+
}
|
|
15
|
+
const config = requireConfig();
|
|
16
|
+
clientInstance = new GigaClaudeClient({
|
|
17
|
+
baseUrl: config.baseUrl,
|
|
18
|
+
apiKey: config.apiKey,
|
|
19
|
+
timeout: config.timeout || 30000,
|
|
20
|
+
retries: config.retries || 3,
|
|
21
|
+
});
|
|
22
|
+
return clientInstance;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Reset client instance (for testing)
|
|
26
|
+
*/
|
|
27
|
+
export function resetClient() {
|
|
28
|
+
clientInstance = null;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../lib/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,cAAc,GAAG,IAAI,gBAAgB,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;KAC7B,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Giga-Claude CLI
|
|
3
|
+
* Stores config in ~/.giga-claude/config.json
|
|
4
|
+
*/
|
|
5
|
+
export interface CLIConfig {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
timeout?: number;
|
|
9
|
+
retries?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Load configuration from file
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadConfig(): CLIConfig | null;
|
|
15
|
+
/**
|
|
16
|
+
* Save configuration to file
|
|
17
|
+
*/
|
|
18
|
+
export declare function saveConfig(config: CLIConfig): void;
|
|
19
|
+
/**
|
|
20
|
+
* Update specific config value
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateConfig(key: keyof CLIConfig, value: string | number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Get config value
|
|
25
|
+
*/
|
|
26
|
+
export declare function getConfig(key: keyof CLIConfig): string | number | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Get config or throw if not configured
|
|
29
|
+
*/
|
|
30
|
+
export declare function requireConfig(): CLIConfig;
|
|
31
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,GAAG,IAAI,CAY7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAQzC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Giga-Claude CLI
|
|
3
|
+
* Stores config in ~/.giga-claude/config.json
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from "fs";
|
|
6
|
+
import * as path from "path";
|
|
7
|
+
import * as os from "os";
|
|
8
|
+
const CONFIG_DIR = path.join(os.homedir(), ".giga-claude");
|
|
9
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
10
|
+
/**
|
|
11
|
+
* Ensure config directory exists
|
|
12
|
+
*/
|
|
13
|
+
function ensureConfigDir() {
|
|
14
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
15
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Load configuration from file
|
|
20
|
+
*/
|
|
21
|
+
export function loadConfig() {
|
|
22
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const content = fs.readFileSync(CONFIG_FILE, "utf-8");
|
|
27
|
+
return JSON.parse(content);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error(`Failed to load config: ${error}`);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Save configuration to file
|
|
36
|
+
*/
|
|
37
|
+
export function saveConfig(config) {
|
|
38
|
+
ensureConfigDir();
|
|
39
|
+
try {
|
|
40
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw new Error(`Failed to save config: ${error}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Update specific config value
|
|
48
|
+
*/
|
|
49
|
+
export function updateConfig(key, value) {
|
|
50
|
+
const config = loadConfig() || { baseUrl: "" };
|
|
51
|
+
config[key] = value;
|
|
52
|
+
saveConfig(config);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get config value
|
|
56
|
+
*/
|
|
57
|
+
export function getConfig(key) {
|
|
58
|
+
const config = loadConfig();
|
|
59
|
+
return config?.[key];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get config or throw if not configured
|
|
63
|
+
*/
|
|
64
|
+
export function requireConfig() {
|
|
65
|
+
const config = loadConfig();
|
|
66
|
+
if (!config || !config.baseUrl) {
|
|
67
|
+
throw new Error("Not configured. Run 'giga config set baseUrl <url>' first.");
|
|
68
|
+
}
|
|
69
|
+
return config;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AASzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,eAAe,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAoB,EAAE,KAAsB;IACvE,MAAM,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC9C,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAoB;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output formatting utilities
|
|
3
|
+
*/
|
|
4
|
+
import Table from "cli-table3";
|
|
5
|
+
/**
|
|
6
|
+
* Print success message
|
|
7
|
+
*/
|
|
8
|
+
export declare function success(message: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Print error message
|
|
11
|
+
*/
|
|
12
|
+
export declare function error(message: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Print warning message
|
|
15
|
+
*/
|
|
16
|
+
export declare function warn(message: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Print info message
|
|
19
|
+
*/
|
|
20
|
+
export declare function info(message: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Print plain message
|
|
23
|
+
*/
|
|
24
|
+
export declare function print(message: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Print section header
|
|
27
|
+
*/
|
|
28
|
+
export declare function section(title: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Create a table for displaying data
|
|
31
|
+
*/
|
|
32
|
+
export declare function createTable(options?: {
|
|
33
|
+
head?: string[];
|
|
34
|
+
style?: any;
|
|
35
|
+
}): Table.Table;
|
|
36
|
+
/**
|
|
37
|
+
* Format duration in human-readable format
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatDuration(ms: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Format percentage
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatPercent(value: number, total: number): string;
|
|
44
|
+
/**
|
|
45
|
+
* Format timestamp
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatTimestamp(timestamp: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Print JSON (for --json flag)
|
|
50
|
+
*/
|
|
51
|
+
export declare function printJson(data: any): void;
|
|
52
|
+
/**
|
|
53
|
+
* Draw a simple progress bar
|
|
54
|
+
*/
|
|
55
|
+
export declare function progressBar(value: number, total: number, width?: number): string;
|
|
56
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,GAAG,KAAK,CAAC,KAAK,CAKd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,MAAM,CAUR"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output formatting utilities
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import Table from "cli-table3";
|
|
6
|
+
/**
|
|
7
|
+
* Print success message
|
|
8
|
+
*/
|
|
9
|
+
export function success(message) {
|
|
10
|
+
console.log(chalk.green("✓"), message);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Print error message
|
|
14
|
+
*/
|
|
15
|
+
export function error(message) {
|
|
16
|
+
console.error(chalk.red("✗"), message);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Print warning message
|
|
20
|
+
*/
|
|
21
|
+
export function warn(message) {
|
|
22
|
+
console.warn(chalk.yellow("⚠"), message);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Print info message
|
|
26
|
+
*/
|
|
27
|
+
export function info(message) {
|
|
28
|
+
console.log(chalk.blue("ℹ"), message);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Print plain message
|
|
32
|
+
*/
|
|
33
|
+
export function print(message) {
|
|
34
|
+
console.log(message);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Print section header
|
|
38
|
+
*/
|
|
39
|
+
export function section(title) {
|
|
40
|
+
console.log();
|
|
41
|
+
console.log(chalk.bold(title));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a table for displaying data
|
|
45
|
+
*/
|
|
46
|
+
export function createTable(options) {
|
|
47
|
+
return new Table({
|
|
48
|
+
head: options?.head,
|
|
49
|
+
style: options?.style || { head: ["cyan"] },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Format duration in human-readable format
|
|
54
|
+
*/
|
|
55
|
+
export function formatDuration(ms) {
|
|
56
|
+
if (ms < 1000) {
|
|
57
|
+
return `${ms}ms`;
|
|
58
|
+
}
|
|
59
|
+
else if (ms < 60000) {
|
|
60
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
61
|
+
}
|
|
62
|
+
else if (ms < 3600000) {
|
|
63
|
+
const minutes = Math.floor(ms / 60000);
|
|
64
|
+
const seconds = Math.floor((ms % 60000) / 1000);
|
|
65
|
+
return `${minutes}m ${seconds}s`;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const hours = Math.floor(ms / 3600000);
|
|
69
|
+
const minutes = Math.floor((ms % 3600000) / 60000);
|
|
70
|
+
return `${hours}h ${minutes}m`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Format percentage
|
|
75
|
+
*/
|
|
76
|
+
export function formatPercent(value, total) {
|
|
77
|
+
if (total === 0)
|
|
78
|
+
return "0%";
|
|
79
|
+
const percent = Math.round((value / total) * 100);
|
|
80
|
+
return `${percent}%`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Format timestamp
|
|
84
|
+
*/
|
|
85
|
+
export function formatTimestamp(timestamp) {
|
|
86
|
+
const date = new Date(timestamp);
|
|
87
|
+
return date.toLocaleString();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Print JSON (for --json flag)
|
|
91
|
+
*/
|
|
92
|
+
export function printJson(data) {
|
|
93
|
+
console.log(JSON.stringify(data, null, 2));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Draw a simple progress bar
|
|
97
|
+
*/
|
|
98
|
+
export function progressBar(value, total, width = 40) {
|
|
99
|
+
const percentage = total === 0 ? 0 : value / total;
|
|
100
|
+
const filled = Math.round(width * percentage);
|
|
101
|
+
const empty = width - filled;
|
|
102
|
+
const bar = chalk.green("█".repeat(filled)) + chalk.gray("░".repeat(empty));
|
|
103
|
+
const percent = formatPercent(value, total);
|
|
104
|
+
return `${bar} ${percent} (${value}/${total})`;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI utility functions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if file exists
|
|
6
|
+
*/
|
|
7
|
+
export declare function fileExists(filePath: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Read file as string
|
|
10
|
+
*/
|
|
11
|
+
export declare function readFile(filePath: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Read file as buffer
|
|
14
|
+
*/
|
|
15
|
+
export declare function readFileBuffer(filePath: string): Buffer;
|
|
16
|
+
/**
|
|
17
|
+
* Create FormData for file upload using native FormData
|
|
18
|
+
*/
|
|
19
|
+
export declare function createUploadFormData(options: {
|
|
20
|
+
dataFile: string;
|
|
21
|
+
promptTemplateFile?: string;
|
|
22
|
+
promptTemplateInline?: string;
|
|
23
|
+
config: Record<string, any>;
|
|
24
|
+
}): FormData;
|
|
25
|
+
/**
|
|
26
|
+
* Sanitize filename for safe writing
|
|
27
|
+
*/
|
|
28
|
+
export declare function sanitizeFilename(name: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Ensure directory exists
|
|
31
|
+
*/
|
|
32
|
+
export declare function ensureDir(dirPath: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Parse comma-separated list
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseList(value: string): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Confirm action (interactive prompt)
|
|
39
|
+
*/
|
|
40
|
+
export declare function confirm(message: string, expected: string): Promise<boolean>;
|
|
41
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B,GAAG,QAAQ,CAgCX;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAajF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI utility functions
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
/**
|
|
7
|
+
* Check if file exists
|
|
8
|
+
*/
|
|
9
|
+
export function fileExists(filePath) {
|
|
10
|
+
return fs.existsSync(filePath);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Read file as string
|
|
14
|
+
*/
|
|
15
|
+
export function readFile(filePath) {
|
|
16
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read file as buffer
|
|
20
|
+
*/
|
|
21
|
+
export function readFileBuffer(filePath) {
|
|
22
|
+
return fs.readFileSync(filePath);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create FormData for file upload using native FormData
|
|
26
|
+
*/
|
|
27
|
+
export function createUploadFormData(options) {
|
|
28
|
+
const formData = new FormData();
|
|
29
|
+
// Add data file - read into Blob for native FormData compatibility
|
|
30
|
+
const dataBuffer = fs.readFileSync(options.dataFile);
|
|
31
|
+
const dataBlob = new Blob([dataBuffer], { type: "text/csv" });
|
|
32
|
+
formData.append("data", dataBlob, path.basename(options.dataFile));
|
|
33
|
+
// Add prompt template
|
|
34
|
+
if (options.promptTemplateFile) {
|
|
35
|
+
const templateBuffer = fs.readFileSync(options.promptTemplateFile);
|
|
36
|
+
const templateBlob = new Blob([templateBuffer], { type: "text/plain" });
|
|
37
|
+
formData.append("promptTemplate", templateBlob, path.basename(options.promptTemplateFile));
|
|
38
|
+
}
|
|
39
|
+
// Add config as individual fields
|
|
40
|
+
for (const [key, value] of Object.entries(options.config)) {
|
|
41
|
+
if (value !== undefined && value !== null) {
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
formData.append(key, value.join(","));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
formData.append(key, value.toString());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Add inline template if provided
|
|
51
|
+
if (options.promptTemplateInline) {
|
|
52
|
+
formData.append("promptTemplateInline", options.promptTemplateInline);
|
|
53
|
+
}
|
|
54
|
+
return formData;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sanitize filename for safe writing
|
|
58
|
+
*/
|
|
59
|
+
export function sanitizeFilename(name) {
|
|
60
|
+
return name.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensure directory exists
|
|
64
|
+
*/
|
|
65
|
+
export function ensureDir(dirPath) {
|
|
66
|
+
if (!fs.existsSync(dirPath)) {
|
|
67
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parse comma-separated list
|
|
72
|
+
*/
|
|
73
|
+
export function parseList(value) {
|
|
74
|
+
return value.split(",").map((v) => v.trim()).filter((v) => v);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Confirm action (interactive prompt)
|
|
78
|
+
*/
|
|
79
|
+
export async function confirm(message, expected) {
|
|
80
|
+
const readline = await import("readline");
|
|
81
|
+
const rl = readline.createInterface({
|
|
82
|
+
input: process.stdin,
|
|
83
|
+
output: process.stdout,
|
|
84
|
+
});
|
|
85
|
+
return new Promise((resolve) => {
|
|
86
|
+
rl.question(`${message}\nType '${expected}' to confirm: `, (answer) => {
|
|
87
|
+
rl.close();
|
|
88
|
+
resolve(answer === expected);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zdql/giga-claude-cli",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "CLI for Giga-Claude workflow orchestration",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"giga": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"clean": "rm -rf dist",
|
|
16
|
+
"dev": "tsc --watch"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@zdql/giga-claude-client": "workspace:*",
|
|
20
|
+
"commander": "^12.1.0",
|
|
21
|
+
"chalk": "^5.4.1",
|
|
22
|
+
"ora": "^8.1.1",
|
|
23
|
+
"cli-table3": "^0.6.5",
|
|
24
|
+
"form-data": "^4.0.1",
|
|
25
|
+
"csv-parse": "^5.6.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.17.10",
|
|
29
|
+
"typescript": "^5.7.3"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"giga-claude",
|
|
33
|
+
"claude",
|
|
34
|
+
"ai",
|
|
35
|
+
"agent",
|
|
36
|
+
"cli",
|
|
37
|
+
"workflow",
|
|
38
|
+
"orchestration"
|
|
39
|
+
],
|
|
40
|
+
"license": "MIT"
|
|
41
|
+
}
|