@datachonk/cli 0.1.0 → 0.2.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.
@@ -0,0 +1,414 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import inquirer from "inquirer";
5
+ import { table } from "table";
6
+ import { writeFileSync, mkdirSync, existsSync } from "fs";
7
+ import { join } from "path";
8
+ import AdmZip from "adm-zip";
9
+ import { loadConfig, getApiUrl, getApiKey } from "../utils/config.js";
10
+ export const projectsCommand = new Command("projects")
11
+ .description("Manage DataChonk projects");
12
+ // List projects
13
+ projectsCommand
14
+ .command("list")
15
+ .alias("ls")
16
+ .description("List all your projects")
17
+ .option("--json", "Output as JSON")
18
+ .action(async (options) => {
19
+ const apiKey = getApiKey();
20
+ if (!apiKey) {
21
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
22
+ process.exit(1);
23
+ }
24
+ const spinner = ora("Fetching projects...").start();
25
+ try {
26
+ const apiUrl = getApiUrl();
27
+ const response = await fetch(`${apiUrl}/api/cli/projects`, {
28
+ headers: { "Authorization": `Bearer ${apiKey}` },
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error("Failed to fetch projects");
32
+ }
33
+ const data = await response.json();
34
+ spinner.stop();
35
+ if (options.json) {
36
+ console.log(JSON.stringify(data.projects, null, 2));
37
+ return;
38
+ }
39
+ if (data.projects.length === 0) {
40
+ console.log(chalk.yellow("\nNo projects found."));
41
+ console.log(chalk.gray("Create one with: datachonk projects create"));
42
+ return;
43
+ }
44
+ console.log(chalk.bold("\n Your Projects\n"));
45
+ const tableData = [
46
+ [chalk.bold("Name"), chalk.bold("Warehouse"), chalk.bold("Created"), chalk.bold("ID")],
47
+ ...data.projects.map((p) => [
48
+ p.name,
49
+ p.warehouse,
50
+ new Date(p.created_at).toLocaleDateString(),
51
+ chalk.gray(p.id.substring(0, 8)),
52
+ ]),
53
+ ];
54
+ console.log(table(tableData, {
55
+ border: {
56
+ topBody: "",
57
+ topJoin: "",
58
+ topLeft: "",
59
+ topRight: "",
60
+ bottomBody: "",
61
+ bottomJoin: "",
62
+ bottomLeft: "",
63
+ bottomRight: "",
64
+ bodyLeft: " ",
65
+ bodyRight: "",
66
+ bodyJoin: " ",
67
+ joinBody: "",
68
+ joinLeft: "",
69
+ joinRight: "",
70
+ joinJoin: "",
71
+ },
72
+ }));
73
+ }
74
+ catch (error) {
75
+ spinner.fail("Failed to fetch projects");
76
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
77
+ process.exit(1);
78
+ }
79
+ });
80
+ // Create project
81
+ projectsCommand
82
+ .command("create")
83
+ .description("Create a new project")
84
+ .option("-n, --name <name>", "Project name")
85
+ .option("-w, --warehouse <type>", "Warehouse type (snowflake|bigquery|redshift|databricks)")
86
+ .option("-d, --description <desc>", "Project description")
87
+ .action(async (options) => {
88
+ const apiKey = getApiKey();
89
+ if (!apiKey) {
90
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
91
+ process.exit(1);
92
+ }
93
+ // Prompt for missing options
94
+ const answers = await inquirer.prompt([
95
+ {
96
+ type: "input",
97
+ name: "name",
98
+ message: "Project name:",
99
+ when: !options.name,
100
+ validate: (input) => input.length > 0 || "Name is required",
101
+ },
102
+ {
103
+ type: "list",
104
+ name: "warehouse",
105
+ message: "Data warehouse:",
106
+ when: !options.warehouse,
107
+ choices: [
108
+ { name: "Snowflake", value: "snowflake" },
109
+ { name: "BigQuery", value: "bigquery" },
110
+ { name: "Redshift", value: "redshift" },
111
+ { name: "Databricks", value: "databricks" },
112
+ { name: "PostgreSQL", value: "postgres" },
113
+ ],
114
+ },
115
+ {
116
+ type: "input",
117
+ name: "description",
118
+ message: "Description (optional):",
119
+ when: !options.description,
120
+ },
121
+ ]);
122
+ const name = options.name || answers.name;
123
+ const warehouse = options.warehouse || answers.warehouse;
124
+ const description = options.description || answers.description;
125
+ const spinner = ora("Creating project...").start();
126
+ try {
127
+ const apiUrl = getApiUrl();
128
+ const response = await fetch(`${apiUrl}/api/cli/projects`, {
129
+ method: "POST",
130
+ headers: {
131
+ "Content-Type": "application/json",
132
+ "Authorization": `Bearer ${apiKey}`,
133
+ },
134
+ body: JSON.stringify({ name, warehouse, description }),
135
+ });
136
+ if (!response.ok) {
137
+ const errorData = await response.json();
138
+ throw new Error(errorData.error || "Failed to create project");
139
+ }
140
+ const data = await response.json();
141
+ spinner.succeed("Project created!");
142
+ console.log(chalk.gray(`\n ID: ${data.project.id}`));
143
+ console.log(chalk.gray(` Name: ${data.project.name}`));
144
+ console.log(chalk.gray(` Warehouse: ${data.project.warehouse}`));
145
+ console.log(chalk.bold("\n Next steps:"));
146
+ console.log(chalk.gray(` • datachonk scan --sync # Scan your database and sync`));
147
+ console.log(chalk.gray(` • datachonk chat -p ${data.project.id} # Chat with Chonk about this project`));
148
+ console.log();
149
+ }
150
+ catch (error) {
151
+ spinner.fail("Failed to create project");
152
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
153
+ process.exit(1);
154
+ }
155
+ });
156
+ // Get project details
157
+ projectsCommand
158
+ .command("show")
159
+ .description("Show project details")
160
+ .argument("<projectId>", "Project ID or name")
161
+ .option("--json", "Output as JSON")
162
+ .action(async (projectId, options) => {
163
+ const apiKey = getApiKey();
164
+ if (!apiKey) {
165
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
166
+ process.exit(1);
167
+ }
168
+ const spinner = ora("Fetching project...").start();
169
+ try {
170
+ const apiUrl = getApiUrl();
171
+ const response = await fetch(`${apiUrl}/api/cli/projects/${projectId}`, {
172
+ headers: { "Authorization": `Bearer ${apiKey}` },
173
+ });
174
+ if (!response.ok) {
175
+ throw new Error("Project not found");
176
+ }
177
+ const data = await response.json();
178
+ spinner.stop();
179
+ if (options.json) {
180
+ console.log(JSON.stringify(data, null, 2));
181
+ return;
182
+ }
183
+ console.log(chalk.bold(`\n ${data.project.name}\n`));
184
+ console.log(chalk.gray(" ─".repeat(20)));
185
+ console.log(` ${chalk.gray("ID:")} ${data.project.id}`);
186
+ console.log(` ${chalk.gray("Warehouse:")} ${data.project.warehouse}`);
187
+ console.log(` ${chalk.gray("dbt Version:")} ${data.project.dbt_version || "1.8+"}`);
188
+ console.log(` ${chalk.gray("Created:")} ${new Date(data.project.created_at).toLocaleDateString()}`);
189
+ if (data.project.description) {
190
+ console.log(` ${chalk.gray("Description:")} ${data.project.description}`);
191
+ }
192
+ console.log(chalk.bold("\n Stats"));
193
+ console.log(chalk.gray(" ─".repeat(20)));
194
+ console.log(` ${chalk.gray("Tables:")} ${data.stats.tables}`);
195
+ console.log(` ${chalk.gray("Models:")} ${data.stats.models}`);
196
+ console.log(` ${chalk.gray("Tests:")} ${data.stats.tests}`);
197
+ if (data.chonks.length > 0) {
198
+ console.log(chalk.bold("\n Chonks"));
199
+ console.log(chalk.gray(" ─".repeat(20)));
200
+ for (const chonk of data.chonks.slice(0, 10)) {
201
+ console.log(` ${chalk.cyan(chonk.type)} ${chonk.name}`);
202
+ }
203
+ if (data.chonks.length > 10) {
204
+ console.log(chalk.gray(` ... +${data.chonks.length - 10} more`));
205
+ }
206
+ }
207
+ console.log();
208
+ }
209
+ catch (error) {
210
+ spinner.fail("Failed to fetch project");
211
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
212
+ process.exit(1);
213
+ }
214
+ });
215
+ // Delete project
216
+ projectsCommand
217
+ .command("delete")
218
+ .description("Delete a project")
219
+ .argument("<projectId>", "Project ID")
220
+ .option("-f, --force", "Skip confirmation")
221
+ .action(async (projectId, options) => {
222
+ const apiKey = getApiKey();
223
+ if (!apiKey) {
224
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
225
+ process.exit(1);
226
+ }
227
+ if (!options.force) {
228
+ const { confirm } = await inquirer.prompt([
229
+ {
230
+ type: "confirm",
231
+ name: "confirm",
232
+ message: chalk.red(`Are you sure you want to delete project ${projectId}? This cannot be undone.`),
233
+ default: false,
234
+ },
235
+ ]);
236
+ if (!confirm) {
237
+ console.log(chalk.gray("Cancelled."));
238
+ return;
239
+ }
240
+ }
241
+ const spinner = ora("Deleting project...").start();
242
+ try {
243
+ const apiUrl = getApiUrl();
244
+ const response = await fetch(`${apiUrl}/api/cli/projects/${projectId}`, {
245
+ method: "DELETE",
246
+ headers: { "Authorization": `Bearer ${apiKey}` },
247
+ });
248
+ if (!response.ok) {
249
+ throw new Error("Failed to delete project");
250
+ }
251
+ spinner.succeed("Project deleted.");
252
+ }
253
+ catch (error) {
254
+ spinner.fail("Failed to delete project");
255
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
256
+ process.exit(1);
257
+ }
258
+ });
259
+ // Export/download project
260
+ projectsCommand
261
+ .command("export")
262
+ .alias("download")
263
+ .description("Export project as a dbt project ZIP")
264
+ .argument("<projectId>", "Project ID")
265
+ .option("-o, --output <path>", "Output directory", ".")
266
+ .option("--extract", "Extract ZIP contents instead of creating archive")
267
+ .action(async (projectId, options) => {
268
+ const apiKey = getApiKey();
269
+ if (!apiKey) {
270
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
271
+ process.exit(1);
272
+ }
273
+ const spinner = ora("Exporting project...").start();
274
+ try {
275
+ const apiUrl = getApiUrl();
276
+ const response = await fetch(`${apiUrl}/api/cli/projects/${projectId}/export`, {
277
+ headers: { "Authorization": `Bearer ${apiKey}` },
278
+ });
279
+ if (!response.ok) {
280
+ throw new Error("Failed to export project");
281
+ }
282
+ const data = await response.json();
283
+ spinner.text = "Creating files...";
284
+ if (options.extract) {
285
+ // Extract directly to output directory
286
+ const baseDir = join(options.output, data.project.name.toLowerCase().replace(/\s+/g, "_"));
287
+ for (const file of data.files) {
288
+ const filePath = join(baseDir, file.path);
289
+ const dir = join(filePath, "..");
290
+ if (!existsSync(dir)) {
291
+ mkdirSync(dir, { recursive: true });
292
+ }
293
+ writeFileSync(filePath, file.content);
294
+ }
295
+ spinner.succeed(`Exported to ${baseDir}`);
296
+ console.log(chalk.gray(`\n ${data.files.length} files created.`));
297
+ console.log(chalk.bold("\n Next steps:"));
298
+ console.log(chalk.gray(` cd ${baseDir}`));
299
+ console.log(chalk.gray(" dbt deps"));
300
+ console.log(chalk.gray(" dbt run"));
301
+ }
302
+ else {
303
+ // Create ZIP file
304
+ const zip = new AdmZip();
305
+ const projectName = data.project.name.toLowerCase().replace(/\s+/g, "_");
306
+ for (const file of data.files) {
307
+ zip.addFile(`${projectName}/${file.path}`, Buffer.from(file.content, "utf-8"));
308
+ }
309
+ const zipPath = join(options.output, `${projectName}.zip`);
310
+ zip.writeZip(zipPath);
311
+ spinner.succeed(`Exported to ${zipPath}`);
312
+ console.log(chalk.gray(`\n ${data.files.length} files in archive.`));
313
+ }
314
+ console.log();
315
+ }
316
+ catch (error) {
317
+ spinner.fail("Failed to export project");
318
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
319
+ process.exit(1);
320
+ }
321
+ });
322
+ // Clone project to local dbt project
323
+ projectsCommand
324
+ .command("clone")
325
+ .description("Clone a DataChonk project to a local dbt project")
326
+ .argument("<projectId>", "Project ID")
327
+ .option("-o, --output <path>", "Output directory", ".")
328
+ .action(async (projectId, options) => {
329
+ const apiKey = getApiKey();
330
+ if (!apiKey) {
331
+ console.log(chalk.yellow("Login required. Run: datachonk auth login"));
332
+ process.exit(1);
333
+ }
334
+ const spinner = ora("Cloning project...").start();
335
+ try {
336
+ const apiUrl = getApiUrl();
337
+ const response = await fetch(`${apiUrl}/api/cli/projects/${projectId}/export`, {
338
+ headers: { "Authorization": `Bearer ${apiKey}` },
339
+ });
340
+ if (!response.ok) {
341
+ throw new Error("Failed to clone project");
342
+ }
343
+ const data = await response.json();
344
+ const baseDir = join(options.output, data.project.name.toLowerCase().replace(/\s+/g, "_"));
345
+ // Create dbt_project.yml if not included
346
+ const hasDbtProject = data.files.some(f => f.path === "dbt_project.yml");
347
+ if (!hasDbtProject) {
348
+ data.files.unshift({
349
+ path: "dbt_project.yml",
350
+ content: `name: '${data.project.name.toLowerCase().replace(/\s+/g, "_")}'
351
+ version: '1.0.0'
352
+
353
+ config-version: 2
354
+
355
+ profile: 'default'
356
+
357
+ model-paths: ["models"]
358
+ analysis-paths: ["analyses"]
359
+ test-paths: ["tests"]
360
+ seed-paths: ["seeds"]
361
+ macro-paths: ["macros"]
362
+ snapshot-paths: ["snapshots"]
363
+
364
+ clean-targets:
365
+ - "target"
366
+ - "dbt_packages"
367
+ `,
368
+ });
369
+ }
370
+ spinner.text = "Writing files...";
371
+ for (const file of data.files) {
372
+ const filePath = join(baseDir, file.path);
373
+ const dir = join(filePath, "..");
374
+ if (!existsSync(dir)) {
375
+ mkdirSync(dir, { recursive: true });
376
+ }
377
+ writeFileSync(filePath, file.content);
378
+ }
379
+ // Also create .datachonk.yml for future syncing
380
+ const config = loadConfig();
381
+ config.warehouse = data.project.warehouse;
382
+ writeFileSync(join(baseDir, ".datachonk.yml"), `# DataChonk configuration
383
+ version: 1
384
+ project_id: ${projectId}
385
+ warehouse: ${data.project.warehouse}
386
+
387
+ modeling:
388
+ approach: kimball
389
+ conventions:
390
+ - stg_prefix
391
+ - int_prefix
392
+ - fct_prefix
393
+ - dim_prefix
394
+ - snake_case
395
+
396
+ ai:
397
+ enabled: true
398
+ `);
399
+ spinner.succeed(`Cloned to ${baseDir}`);
400
+ console.log(chalk.gray(`\n ${data.files.length} files created.`));
401
+ console.log(chalk.bold("\n Get started:"));
402
+ console.log(chalk.cyan(` cd ${baseDir}`));
403
+ console.log(chalk.cyan(" dbt deps"));
404
+ console.log(chalk.cyan(" dbt debug # Configure your profiles.yml"));
405
+ console.log(chalk.cyan(" dbt run"));
406
+ console.log();
407
+ }
408
+ catch (error) {
409
+ spinner.fail("Failed to clone project");
410
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
411
+ process.exit(1);
412
+ }
413
+ });
414
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ export declare const statusCommand: Command;
3
+ export declare const openCommand: Command;
4
+ export declare const versionCommand: Command;
5
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,eAAO,MAAM,aAAa,SAgHtB,CAAC;AAsBL,eAAO,MAAM,WAAW,SAqBpB,CAAC;AAGL,eAAO,MAAM,cAAc,SAoCvB,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { existsSync, readFileSync } from "fs";
5
+ import yaml from "js-yaml";
6
+ import { getApiUrl, getApiKey } from "../utils/config.js";
7
+ export const statusCommand = new Command("status")
8
+ .description("Show DataChonk account status and usage")
9
+ .option("--json", "Output as JSON")
10
+ .action(async (options) => {
11
+ const apiKey = getApiKey();
12
+ if (!apiKey) {
13
+ // Show local status only
14
+ console.log(chalk.hex("#E8A54B").bold("\n DataChonk Status\n"));
15
+ console.log(chalk.gray(" ─".repeat(20)));
16
+ console.log(chalk.yellow(" Not logged in"));
17
+ console.log(chalk.gray("\n Run: datachonk auth login\n"));
18
+ // Check for local dbt project
19
+ if (existsSync("dbt_project.yml")) {
20
+ const dbtProject = yaml.load(readFileSync("dbt_project.yml", "utf-8"));
21
+ console.log(chalk.gray(" Local dbt project detected:"));
22
+ console.log(chalk.cyan(` ${dbtProject.name}`));
23
+ }
24
+ // Check for .datachonk.yml
25
+ if (existsSync(".datachonk.yml")) {
26
+ const datachonkConfig = yaml.load(readFileSync(".datachonk.yml", "utf-8"));
27
+ if (datachonkConfig.project_id) {
28
+ console.log(chalk.gray("\n Linked to DataChonk project:"));
29
+ console.log(chalk.cyan(` ${datachonkConfig.project_id}`));
30
+ }
31
+ }
32
+ return;
33
+ }
34
+ const spinner = ora("Fetching status...").start();
35
+ try {
36
+ const apiUrl = getApiUrl();
37
+ const response = await fetch(`${apiUrl}/api/cli/dashboard`, {
38
+ headers: { "Authorization": `Bearer ${apiKey}` },
39
+ });
40
+ if (!response.ok) {
41
+ throw new Error("Failed to fetch status");
42
+ }
43
+ const data = await response.json();
44
+ spinner.stop();
45
+ if (options.json) {
46
+ console.log(JSON.stringify(data, null, 2));
47
+ return;
48
+ }
49
+ // Display dashboard
50
+ console.log(chalk.hex("#E8A54B").bold("\n DataChonk Dashboard\n"));
51
+ console.log(chalk.gray(" ─".repeat(25)));
52
+ // Account info
53
+ console.log(chalk.bold("\n Account"));
54
+ console.log(` ${chalk.gray("Email:")} ${data.user.email}`);
55
+ console.log(` ${chalk.gray("Plan:")} ${chalk.cyan(data.user.subscription_tier)}`);
56
+ // Usage
57
+ console.log(chalk.bold("\n Usage This Month"));
58
+ const projectPercent = data.usage.projectLimit === -1
59
+ ? "unlimited"
60
+ : `${data.usage.projects}/${data.usage.projectLimit}`;
61
+ const aiPercent = data.usage.aiRequestLimit === -1
62
+ ? "unlimited"
63
+ : `${data.usage.aiRequestsThisMonth}/${data.usage.aiRequestLimit}`;
64
+ console.log(` ${chalk.gray("Projects:")} ${projectPercent}`);
65
+ console.log(` ${chalk.gray("AI Requests:")} ${aiPercent}`);
66
+ // Progress bars for limits
67
+ if (data.usage.projectLimit > 0) {
68
+ const pct = Math.min(100, (data.usage.projects / data.usage.projectLimit) * 100);
69
+ console.log(` ${renderProgressBar(pct)}`);
70
+ }
71
+ // Projects
72
+ if (data.projects.length > 0) {
73
+ console.log(chalk.bold("\n Your Projects"));
74
+ for (const project of data.projects.slice(0, 5)) {
75
+ const activity = project.lastActivity
76
+ ? chalk.gray(` (${timeAgo(new Date(project.lastActivity))})`)
77
+ : "";
78
+ console.log(` ${chalk.cyan(project.name)} - ${project.warehouse}, ${project.modelsCount} models${activity}`);
79
+ }
80
+ if (data.projects.length > 5) {
81
+ console.log(chalk.gray(` ... +${data.projects.length - 5} more`));
82
+ }
83
+ }
84
+ // Recent activity
85
+ if (data.recentActivity.length > 0) {
86
+ console.log(chalk.bold("\n Recent Activity"));
87
+ for (const activity of data.recentActivity.slice(0, 5)) {
88
+ const time = timeAgo(new Date(activity.timestamp));
89
+ console.log(` ${chalk.gray(time)} - ${activity.details}`);
90
+ }
91
+ }
92
+ console.log();
93
+ }
94
+ catch (error) {
95
+ spinner.fail("Failed to fetch status");
96
+ console.error(chalk.red(error instanceof Error ? error.message : "Unknown error"));
97
+ process.exit(1);
98
+ }
99
+ });
100
+ function renderProgressBar(percent) {
101
+ const width = 20;
102
+ const filled = Math.round((percent / 100) * width);
103
+ const empty = width - filled;
104
+ const color = percent >= 90 ? chalk.red : percent >= 70 ? chalk.yellow : chalk.green;
105
+ return color("█".repeat(filled)) + chalk.gray("░".repeat(empty)) + ` ${Math.round(percent)}%`;
106
+ }
107
+ function timeAgo(date) {
108
+ const seconds = Math.floor((new Date().getTime() - date.getTime()) / 1000);
109
+ if (seconds < 60)
110
+ return "just now";
111
+ if (seconds < 3600)
112
+ return `${Math.floor(seconds / 60)}m ago`;
113
+ if (seconds < 86400)
114
+ return `${Math.floor(seconds / 3600)}h ago`;
115
+ if (seconds < 604800)
116
+ return `${Math.floor(seconds / 86400)}d ago`;
117
+ return date.toLocaleDateString();
118
+ }
119
+ // Open web dashboard
120
+ export const openCommand = new Command("open")
121
+ .description("Open DataChonk web dashboard in browser")
122
+ .argument("[page]", "Page to open: dashboard, projects, settings, docs")
123
+ .action(async (page = "dashboard") => {
124
+ const { default: open } = await import("open");
125
+ const apiUrl = getApiUrl();
126
+ const pages = {
127
+ dashboard: "/app",
128
+ projects: "/app",
129
+ settings: "/app/settings",
130
+ docs: "/docs",
131
+ pricing: "/pricing",
132
+ help: "/docs",
133
+ };
134
+ const path = pages[page] || "/app";
135
+ const url = `${apiUrl}${path}`;
136
+ console.log(chalk.gray(`Opening ${url}...`));
137
+ await open(url);
138
+ });
139
+ // Version command with update check
140
+ export const versionCommand = new Command("version")
141
+ .description("Show version and check for updates")
142
+ .action(async () => {
143
+ const currentVersion = "0.1.0";
144
+ console.log(chalk.hex("#E8A54B").bold("\n DataChonk CLI"));
145
+ console.log(chalk.gray(" ─".repeat(15)));
146
+ console.log(` ${chalk.gray("Version:")} ${currentVersion}`);
147
+ // Check for updates
148
+ const spinner = ora("Checking for updates...").start();
149
+ try {
150
+ const response = await fetch("https://registry.npmjs.org/datachonk-cli/latest", {
151
+ headers: { "Accept": "application/json" },
152
+ });
153
+ if (response.ok) {
154
+ const data = await response.json();
155
+ spinner.stop();
156
+ if (data.version !== currentVersion) {
157
+ console.log(` ${chalk.gray("Latest:")} ${chalk.green(data.version)} ${chalk.yellow("(update available)")}`);
158
+ console.log(chalk.gray("\n Run: npm update -g datachonk-cli"));
159
+ }
160
+ else {
161
+ console.log(chalk.green(" You're up to date!"));
162
+ }
163
+ }
164
+ else {
165
+ spinner.stop();
166
+ }
167
+ }
168
+ catch {
169
+ spinner.stop();
170
+ // Silently ignore update check failures
171
+ }
172
+ console.log();
173
+ });
174
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ export declare const syncCommand: Command;
3
+ export declare const pullCommand: Command;
4
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,eAAO,MAAM,WAAW,SAwKpB,CAAC;AA4HL,eAAO,MAAM,WAAW,SA8EpB,CAAC"}