@taggr/cli 1.0.4 → 1.0.6

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 CHANGED
@@ -43,6 +43,11 @@ npm install -g @taggr/cli
43
43
  | `taggr list` | List all your labels |
44
44
  | `taggr pull <name>` | Pull a specific label |
45
45
  | `taggr pull --all` | Pull all labels |
46
+ | `taggr sync` | Force sync all labels (alias for pull --all) |
47
+ | `taggr check` | Check if labels are up-to-date |
48
+ | `taggr check --strict` | Fail build if labels are outdated (for CI/CD) |
49
+ | `taggr watch` | Watch for label changes and auto-sync |
50
+ | `taggr status` | Show sync status and label versions |
46
51
 
47
52
  ## Options
48
53
 
@@ -62,6 +67,35 @@ Options:
62
67
  -a, --all Pull all labels
63
68
  ```
64
69
 
70
+ ### Check
71
+ ```bash
72
+ taggr check [options]
73
+
74
+ Options:
75
+ --strict Fail if labels are outdated (for CI/CD)
76
+ --fix Show fix instructions
77
+ ```
78
+
79
+ ### Watch
80
+ ```bash
81
+ taggr watch [options]
82
+
83
+ Options:
84
+ -i, --interval <seconds> Poll interval in seconds (default: 30)
85
+ ```
86
+
87
+ ### Status
88
+ ```bash
89
+ taggr status
90
+
91
+ Shows:
92
+ - Last sync time
93
+ - API URL
94
+ - Label count
95
+ - Individual label versions
96
+ - File status
97
+ ```
98
+
65
99
  ## Generated Files
66
100
 
67
101
  When you run `taggr pull`, files are created in a `./taggr` directory:
@@ -69,9 +103,12 @@ When you run `taggr pull`, files are created in a `./taggr` directory:
69
103
  ```
70
104
  ./taggr/
71
105
  ├── labels.json # All your labels
72
- └── labels.d.ts # TypeScript definitions for autocomplete
106
+ ├── labels.d.ts # TypeScript definitions for autocomplete
107
+ └── .taggr.json # Metadata file (version tracking, sync status)
73
108
  ```
74
109
 
110
+ > **Note:** The `.taggr.json` file is automatically managed by the CLI. It tracks which version of each label you're using and when labels were last synced. This enables features like version checking and integrity verification.
111
+
75
112
  ### labels.json
76
113
  ```json
77
114
  {
@@ -103,10 +140,71 @@ console.log(labels.anotherLabel);
103
140
  ### TypeScript/JavaScript Support
104
141
  The `labels.d.ts` file provides autocomplete in VS Code and other editors for both TypeScript and JavaScript projects.
105
142
 
143
+ ## Advanced Features
144
+
145
+ ### Version Tracking
146
+
147
+ The CLI automatically tracks which version of each label you're using. This ensures your team stays in sync and prevents outdated labels in production.
148
+
149
+ When you run `taggr pull`, the CLI:
150
+ - Saves version information for each label
151
+ - Tracks when labels were last synced
152
+ - Stores checksums for integrity verification
153
+
154
+ ### Build-Time Validation
155
+
156
+ Use `taggr check --strict` in your CI/CD pipeline to fail builds if labels are outdated. This prevents deploying stale labels to production.
157
+
158
+ **Example CI/CD Integration:**
159
+ ```yaml
160
+ # .github/workflows/taggr-check.yml
161
+ - name: Check labels are up-to-date
162
+ run: |
163
+ taggr login $TAGGR_API_KEY
164
+ taggr check --strict
165
+ ```
166
+
167
+ ### Auto-Sync Mode
168
+
169
+ Run `taggr watch` to automatically sync labels when they change in the cloud. Perfect for development!
170
+
171
+ ```bash
172
+ taggr watch
173
+ # Or with custom interval
174
+ taggr watch --interval 60
175
+ ```
176
+
177
+ The watch mode will:
178
+ - Poll the API for changes every N seconds
179
+ - Automatically pull updated labels
180
+ - Show notifications when labels change
181
+
182
+ ### Integrity Protection
183
+
184
+ The CLI detects manual edits to `labels.json` and warns you before overwriting. This prevents accidental loss of local changes.
185
+
186
+ ### Check Sync Status
187
+
188
+ Use `taggr status` to see:
189
+ - When labels were last synced
190
+ - Which version of each label you're using
191
+ - Whether files exist and are up-to-date
192
+
193
+ ```bash
194
+ taggr status
195
+ ```
196
+
106
197
  ## Configuration
107
198
 
108
199
  The CLI stores your token in `~/.taggr/config.json`. This file is created when you run `taggr login`.
109
200
 
201
+ ## Tips
202
+
203
+ - Add `./taggr` to your `.gitignore` if you don't want to commit generated files
204
+ - The `.taggr.json` metadata file is automatically managed - don't edit it manually
205
+ - Use `taggr check --strict` in CI/CD to ensure labels are always up-to-date
206
+ - Run `taggr watch` during development for automatic label syncing
207
+
110
208
  ## License
111
209
 
112
210
  MIT
@@ -0,0 +1,7 @@
1
+ interface CheckOptions {
2
+ strict?: boolean;
3
+ fix?: boolean;
4
+ }
5
+ export declare function checkCommand(options: CheckOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAQD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KvE"}
@@ -0,0 +1,166 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { requireAuth } from '../utils/config.js';
4
+ import { initApi, getLabelVersions } from '../utils/api.js';
5
+ import { getMetadata } from '../utils/metadata.js';
6
+ export async function checkCommand(options) {
7
+ // In CI mode (when CI environment variable is set), be silent
8
+ const isCI = process.env.CI === 'true' || process.env.CI === '1';
9
+ const spinner = isCI ? null : ora('Checking label versions...').start();
10
+ try {
11
+ if (!isCI && spinner) {
12
+ spinner.text = 'Checking label versions...';
13
+ }
14
+ // Check if metadata exists
15
+ const metadata = await getMetadata();
16
+ if (!metadata) {
17
+ if (spinner) {
18
+ spinner.fail(chalk.red('No sync metadata found'));
19
+ console.log();
20
+ console.log(chalk.dim('Labels have not been synced yet. Run "taggr pull --all" first.'));
21
+ }
22
+ else {
23
+ console.error('No sync metadata found. Run "taggr pull --all" first.');
24
+ }
25
+ if (options.strict) {
26
+ process.exit(1);
27
+ }
28
+ return;
29
+ }
30
+ // Initialize API
31
+ const config = await requireAuth();
32
+ initApi(config);
33
+ // Get current versions from API
34
+ if (spinner) {
35
+ spinner.text = 'Fetching current label versions...';
36
+ }
37
+ const remoteVersions = await getLabelVersions();
38
+ // Validate remoteVersions
39
+ if (!remoteVersions || typeof remoteVersions !== 'object') {
40
+ throw new Error('Invalid response: label versions not found');
41
+ }
42
+ // Compare local vs remote versions
43
+ const outdated = [];
44
+ const missing = [];
45
+ const extra = [];
46
+ // Check each label in metadata
47
+ for (const [labelName, labelMeta] of Object.entries(metadata.labels)) {
48
+ const remoteVersion = remoteVersions[labelName];
49
+ if (!remoteVersion) {
50
+ // Label exists locally but not remotely (might have been deleted)
51
+ extra.push(labelName);
52
+ }
53
+ else if (labelMeta.version !== remoteVersion) {
54
+ outdated.push({
55
+ name: labelName,
56
+ localVersion: labelMeta.version,
57
+ remoteVersion,
58
+ });
59
+ }
60
+ }
61
+ // Check for new labels
62
+ for (const labelName of Object.keys(remoteVersions)) {
63
+ if (!metadata.labels[labelName]) {
64
+ missing.push(labelName);
65
+ }
66
+ }
67
+ if (spinner) {
68
+ spinner.stop();
69
+ }
70
+ // Display results
71
+ if (outdated.length === 0 && missing.length === 0 && extra.length === 0) {
72
+ if (!isCI) {
73
+ console.log();
74
+ console.log(chalk.green('✓ All labels are up-to-date!'));
75
+ console.log();
76
+ }
77
+ return;
78
+ }
79
+ // Show outdated labels
80
+ if (outdated.length > 0) {
81
+ if (isCI) {
82
+ console.error(`Outdated labels: ${outdated.map(l => `${l.name} (${l.localVersion} → ${l.remoteVersion})`).join(', ')}`);
83
+ }
84
+ else {
85
+ console.log();
86
+ console.log(chalk.yellow(`⚠ Found ${outdated.length} outdated label(s):`));
87
+ console.log();
88
+ for (const label of outdated) {
89
+ console.log(` ${chalk.white(label.name)}: ` +
90
+ `${chalk.red(label.localVersion)} → ${chalk.green(label.remoteVersion)}`);
91
+ }
92
+ }
93
+ }
94
+ // Show missing labels
95
+ if (missing.length > 0) {
96
+ if (isCI) {
97
+ console.error(`Missing labels: ${missing.join(', ')}`);
98
+ }
99
+ else {
100
+ console.log();
101
+ console.log(chalk.yellow(`⚠ Found ${missing.length} new label(s) not in local files:`));
102
+ console.log();
103
+ for (const labelName of missing) {
104
+ console.log(` ${chalk.white(labelName)}`);
105
+ }
106
+ }
107
+ }
108
+ // Show extra labels (only in non-CI mode)
109
+ if (extra.length > 0 && !isCI) {
110
+ console.log();
111
+ console.log(chalk.dim(`ℹ ${extra.length} label(s) exist locally but not in cloud:`));
112
+ console.log();
113
+ for (const labelName of extra) {
114
+ console.log(chalk.dim(` ${labelName}`));
115
+ }
116
+ }
117
+ if (!isCI) {
118
+ console.log();
119
+ }
120
+ // Handle --fix option
121
+ if (options.fix) {
122
+ if (!isCI) {
123
+ console.log(chalk.dim('Run "taggr pull --all" to update your labels.'));
124
+ console.log();
125
+ }
126
+ if (options.strict) {
127
+ process.exit(1);
128
+ }
129
+ return;
130
+ }
131
+ // Handle --strict option
132
+ if (options.strict) {
133
+ if (!isCI) {
134
+ console.log(chalk.red('Labels are outdated. Build failed.'));
135
+ console.log();
136
+ console.log(chalk.dim('To fix:'));
137
+ console.log(chalk.dim(' taggr pull --all'));
138
+ console.log();
139
+ }
140
+ else {
141
+ console.error('Labels are outdated. Run "taggr pull --all" to update.');
142
+ }
143
+ process.exit(1);
144
+ }
145
+ // Non-strict mode - just warn
146
+ if (!isCI) {
147
+ console.log(chalk.dim('Run "taggr pull --all" to update your labels.'));
148
+ console.log(chalk.dim('Use --strict flag to fail builds when labels are outdated.'));
149
+ console.log();
150
+ }
151
+ }
152
+ catch (error) {
153
+ if (spinner) {
154
+ spinner.fail(chalk.red('Check failed'));
155
+ console.error(chalk.red(`\nError: ${error.message}`));
156
+ }
157
+ else {
158
+ console.error(`Error: ${error.message}`);
159
+ }
160
+ if (options.strict) {
161
+ process.exit(1);
162
+ }
163
+ process.exit(1);
164
+ }
165
+ }
166
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface CiOptions {
2
+ check?: boolean;
3
+ }
4
+ /**
5
+ * CI-friendly check command (silent, exit codes only)
6
+ */
7
+ export declare function ciCommand(options: CiOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=ci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AAKA,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DjE"}
@@ -0,0 +1,63 @@
1
+ import { requireAuth } from '../utils/config.js';
2
+ import { initApi, getLabelVersions } from '../utils/api.js';
3
+ import { getMetadata } from '../utils/metadata.js';
4
+ /**
5
+ * CI-friendly check command (silent, exit codes only)
6
+ */
7
+ export async function ciCommand(options) {
8
+ try {
9
+ // Check if metadata exists
10
+ const metadata = await getMetadata();
11
+ if (!metadata) {
12
+ console.error('No sync metadata found. Run "taggr pull --all" first.');
13
+ process.exit(1);
14
+ }
15
+ // Initialize API
16
+ const config = await requireAuth();
17
+ initApi(config);
18
+ // Get current versions from API
19
+ const remoteVersions = await getLabelVersions();
20
+ // Compare local vs remote versions
21
+ const outdated = [];
22
+ const missing = [];
23
+ // Check each label in metadata
24
+ for (const [labelName, labelMeta] of Object.entries(metadata.labels)) {
25
+ const remoteVersion = remoteVersions[labelName];
26
+ if (!remoteVersion) {
27
+ // Label exists locally but not remotely
28
+ continue;
29
+ }
30
+ else if (labelMeta.version !== remoteVersion) {
31
+ outdated.push({
32
+ name: labelName,
33
+ localVersion: labelMeta.version,
34
+ remoteVersion,
35
+ });
36
+ }
37
+ }
38
+ // Check for new labels
39
+ for (const labelName of Object.keys(remoteVersions)) {
40
+ if (!metadata.labels[labelName]) {
41
+ missing.push(labelName);
42
+ }
43
+ }
44
+ // Exit with error if outdated or missing
45
+ if (outdated.length > 0 || missing.length > 0) {
46
+ if (outdated.length > 0) {
47
+ console.error(`Outdated labels: ${outdated.map(l => l.name).join(', ')}`);
48
+ }
49
+ if (missing.length > 0) {
50
+ console.error(`Missing labels: ${missing.join(', ')}`);
51
+ }
52
+ console.error('Run "taggr pull --all" to update labels.');
53
+ process.exit(1);
54
+ }
55
+ // All good
56
+ process.exit(0);
57
+ }
58
+ catch (error) {
59
+ console.error(`Error: ${error.message}`);
60
+ process.exit(1);
61
+ }
62
+ }
63
+ //# sourceMappingURL=ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhB,gCAAgC;QAChC,MAAM,cAAc,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAEhD,mCAAmC;QACnC,MAAM,QAAQ,GAAyE,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,+BAA+B;QAC/B,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrE,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,wCAAwC;gBACxC,SAAS;YACX,CAAC;iBAAM,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC/C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,SAAS,CAAC,OAAO;oBAC/B,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E/F"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG/F"}
@@ -2,7 +2,8 @@ import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import { requireAuth } from '../utils/config.js';
4
4
  import { initApi, getLabels, getLabelByName } from '../utils/api.js';
5
- import { writeLabelFile, writeAllLabels, updateIndexFile } from '../utils/generator.js';
5
+ import { writeLabelFile, writeAllLabels } from '../utils/generator.js';
6
+ import { detectManualEdits } from '../utils/metadata.js';
6
7
  export async function pullCommand(name, options) {
7
8
  const spinner = ora('Connecting to Taggr...').start();
8
9
  try {
@@ -16,13 +17,34 @@ export async function pullCommand(name, options) {
16
17
  throw new Error('Invalid response from server: labels data not found');
17
18
  }
18
19
  const { labels, count } = labelsResponse;
19
- if (count === 0) {
20
+ if (count === 0 || !labels || labels.length === 0) {
20
21
  spinner.warn(chalk.yellow('No labels found.'));
21
22
  console.log(chalk.dim('Create labels at https://taggr.dev'));
22
23
  return;
23
24
  }
24
- spinner.text = `Writing ${count} label(s)...`;
25
- const files = await writeAllLabels(labels);
25
+ // Filter out invalid labels
26
+ const validLabels = labels.filter(label => label && label.name && label.value !== undefined);
27
+ if (validLabels.length === 0) {
28
+ spinner.warn(chalk.yellow('No valid labels found.'));
29
+ console.log(chalk.dim('All labels are missing required properties (name, value).'));
30
+ return;
31
+ }
32
+ // Check for manual edits
33
+ spinner.text = 'Checking for manual edits...';
34
+ const editCheck = await detectManualEdits(validLabels);
35
+ if (editCheck.isEdited) {
36
+ spinner.warn(chalk.yellow('Manual edits detected'));
37
+ console.log();
38
+ console.log(chalk.yellow(`⚠ Warning: ${editCheck.reason || 'Labels may have been manually edited'}`));
39
+ console.log();
40
+ console.log(chalk.dim('Pulling will overwrite your manual changes.'));
41
+ console.log(chalk.dim('If you want to keep your changes, consider:'));
42
+ console.log(chalk.dim(' 1. Committing your changes to version control first'));
43
+ console.log(chalk.dim(' 2. Creating labels in the Taggr dashboard instead'));
44
+ console.log();
45
+ }
46
+ spinner.text = `Writing ${validLabels.length} label(s)...`;
47
+ const files = await writeAllLabels(validLabels, config.apiUrl);
26
48
  spinner.succeed(chalk.green(`Pulled ${count} label(s) successfully!`));
27
49
  console.log();
28
50
  console.log(chalk.dim('Files created:'));
@@ -30,7 +52,7 @@ export async function pullCommand(name, options) {
30
52
  console.log(chalk.dim(` ${file}`));
31
53
  }
32
54
  console.log();
33
- printUsageInstructions(labels);
55
+ printUsageInstructions(validLabels);
34
56
  }
35
57
  else if (name) {
36
58
  // Pull single label
@@ -41,14 +63,10 @@ export async function pullCommand(name, options) {
41
63
  }
42
64
  const { label } = labelResponse;
43
65
  spinner.text = 'Writing file...';
44
- const filePath = await writeLabelFile(label);
45
- // Update files to include this label
46
- const allLabelsResponse = await getLabels();
47
- if (!allLabelsResponse || !allLabelsResponse.labels) {
48
- throw new Error('Invalid response from server: labels data not found');
49
- }
50
- const { labels: allLabels } = allLabelsResponse;
51
- await updateIndexFile(allLabels);
66
+ const filePath = await writeLabelFile(label, config.apiUrl);
67
+ // Note: writeLabelFile already merges the label with existing labels.json
68
+ // and updates the TypeScript definitions. We only need to update metadata
69
+ // for this single label, which is already done by writeLabelFile.
52
70
  const labelName = label.name || 'label';
53
71
  spinner.succeed(chalk.green(`Pulled "${labelName}" successfully!`));
54
72
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOxF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAwB,EAAE,OAAoB;IAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,kBAAkB;YAClB,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC;YACxC,MAAM,cAAc,GAAG,MAAM,SAAS,EAAE,CAAC;YAEzC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC1F,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;YAEzC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,OAAO,CAAC,IAAI,GAAG,WAAW,KAAK,cAAc,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAE3C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,yBAAyB,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,oBAAoB;YACpB,OAAO,CAAC,IAAI,GAAG,mBAAmB,IAAI,MAAM,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;YAEhC,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAE7C,qCAAqC;YACrC,MAAM,iBAAiB,GAAG,MAAM,SAAS,EAAE,CAAC;YAE5C,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC;YAChD,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;YAEjC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,SAAS,iBAAiB,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,sBAAsB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAe;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC;QACxC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,UAAU,EAAE,IAAI,IAAI,OAAO,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,yDAAyD;IACzD,OAAO,GAAG;SACP,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,4BAA4B;SAC1D,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;SACzD,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,mCAAmC;AAC3F,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function statusCommand(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqGnD"}
@@ -0,0 +1,94 @@
1
+ import chalk from 'chalk';
2
+ import { getMetadata, detectManualEdits } from '../utils/metadata.js';
3
+ import { getOutputDir } from '../utils/generator.js';
4
+ import { requireAuth } from '../utils/config.js';
5
+ import { initApi, getLabels } from '../utils/api.js';
6
+ import fs from 'fs-extra';
7
+ import path from 'path';
8
+ export async function statusCommand() {
9
+ try {
10
+ const metadata = await getMetadata();
11
+ if (!metadata) {
12
+ console.log(chalk.yellow('No sync metadata found'));
13
+ console.log();
14
+ console.log(chalk.dim('Run "taggr pull --all" to sync labels.'));
15
+ return;
16
+ }
17
+ console.log();
18
+ console.log(chalk.bold('Taggr Sync Status'));
19
+ console.log();
20
+ // Show sync info
21
+ const syncedDate = new Date(metadata.syncedAt);
22
+ console.log(chalk.dim(' Last synced: ') + chalk.white(syncedDate.toLocaleString()));
23
+ console.log(chalk.dim(' API URL: ') + chalk.white(metadata.apiUrl));
24
+ console.log();
25
+ // Count labels
26
+ const labelCount = Object.keys(metadata.labels).length;
27
+ console.log(chalk.dim(` Labels: ${chalk.white(labelCount.toString())}`));
28
+ console.log();
29
+ // Show label versions
30
+ if (labelCount > 0) {
31
+ console.log(chalk.bold('Label Versions:'));
32
+ console.log();
33
+ const labels = Object.entries(metadata.labels)
34
+ .sort(([a], [b]) => a.localeCompare(b))
35
+ .slice(0, 10); // Show first 10
36
+ for (const [name, meta] of labels) {
37
+ const syncedDate = new Date(meta.syncedAt);
38
+ console.log(` ${chalk.white(name.padEnd(30))} ` +
39
+ `${chalk.dim('v' + meta.version)} ` +
40
+ `${chalk.dim('(' + syncedDate.toLocaleDateString() + ')')}`);
41
+ }
42
+ if (labelCount > 10) {
43
+ console.log();
44
+ console.log(chalk.dim(` ... and ${labelCount - 10} more`));
45
+ }
46
+ }
47
+ // Check if files exist
48
+ console.log();
49
+ const outputDir = getOutputDir();
50
+ const labelsJsonPath = path.join(outputDir, 'labels.json');
51
+ const labelsDtsPath = path.join(outputDir, 'labels.d.ts');
52
+ const metadataPath = path.join(outputDir, '.taggr.json');
53
+ console.log(chalk.bold('Files:'));
54
+ console.log();
55
+ console.log(` ${await fs.pathExists(labelsJsonPath) ? chalk.green('✓') : chalk.red('✗')} ` +
56
+ chalk.white('labels.json'));
57
+ console.log(` ${await fs.pathExists(labelsDtsPath) ? chalk.green('✓') : chalk.red('✗')} ` +
58
+ chalk.white('labels.d.ts'));
59
+ console.log(` ${await fs.pathExists(metadataPath) ? chalk.green('✓') : chalk.red('✗')} ` +
60
+ chalk.white('.taggr.json'));
61
+ console.log();
62
+ // Check for manual edits
63
+ try {
64
+ const config = await requireAuth();
65
+ initApi(config);
66
+ const labelsResponse = await getLabels();
67
+ if (labelsResponse && labelsResponse.labels) {
68
+ const manualEdit = await detectManualEdits(labelsResponse.labels);
69
+ if (manualEdit.isEdited) {
70
+ console.log(chalk.bold('⚠ Integrity Check:'));
71
+ console.log();
72
+ console.log(chalk.yellow(` Warning: ${manualEdit.reason || 'Labels file may have been manually edited'}`));
73
+ console.log();
74
+ console.log(chalk.dim(' Manual edits will be overwritten on next "taggr pull --all"'));
75
+ console.log();
76
+ }
77
+ else {
78
+ console.log(chalk.bold('Integrity Check:'));
79
+ console.log();
80
+ console.log(chalk.green(' ✓ Labels file integrity verified'));
81
+ console.log();
82
+ }
83
+ }
84
+ }
85
+ catch (error) {
86
+ // Silently fail if we can't check (e.g., not logged in)
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error(chalk.red(`Error: ${error.message}`));
91
+ process.exit(1);
92
+ }
93
+ }
94
+ //# 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,6 @@
1
+ interface WatchOptions {
2
+ interval?: number;
3
+ }
4
+ export declare function watchCommand(options: WatchOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiKvE"}