@lumy-pack/syncpoint 0.0.8 → 0.0.10

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present Vincent K. Kelvin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -73,6 +73,7 @@ The fastest and easiest way to get started. AI automatically generates your conf
73
73
  ```
74
74
 
75
75
  **Tip:** If you don't have Claude Code, use `--print` to get the prompt for any LLM:
76
+
76
77
  ```bash
77
78
  npx @lumy-pack/syncpoint wizard --print
78
79
  ```
@@ -100,8 +101,8 @@ If you prefer to manually edit your configuration file, use this approach.
100
101
  - ~/.gitconfig
101
102
  - ~/.ssh/config
102
103
  exclude:
103
- - "**/*.swp"
104
- filename: "{hostname}_{datetime}"
104
+ - '**/*.swp'
105
+ filename: '{hostname}_{datetime}'
105
106
  ```
106
107
 
107
108
  3. **Create your first backup**
@@ -137,6 +138,7 @@ npx @lumy-pack/syncpoint provision my-dev-setup
137
138
  Initialize the syncpoint directory structure and create default configuration.
138
139
 
139
140
  **What it does:**
141
+
140
142
  - Creates `~/.syncpoint/` directory structure
141
143
  - Sets up subdirectories: `backups/`, `templates/`, `scripts/`, `logs/`
142
144
  - Generates default `config.yml`
@@ -155,6 +157,7 @@ npx @lumy-pack/syncpoint init
155
157
  Interactive LLM-powered wizard to generate personalized `config.yml` based on your home directory.
156
158
 
157
159
  **What it does:**
160
+
158
161
  1. Scans your home directory for common configuration files
159
162
  2. Categorizes files (shell configs, git, SSH, application configs)
160
163
  3. Invokes Claude Code to generate customized backup configuration
@@ -164,8 +167,8 @@ Interactive LLM-powered wizard to generate personalized `config.yml` based on yo
164
167
 
165
168
  **Options:**
166
169
 
167
- | Option | Description |
168
- |--------|-------------|
170
+ | Option | Description |
171
+ | ------------- | ----------------------------------------------------------------- |
169
172
  | `-p, --print` | Print prompt for manual LLM usage instead of invoking Claude Code |
170
173
 
171
174
  **Usage:**
@@ -179,10 +182,12 @@ npx @lumy-pack/syncpoint wizard --print
179
182
  ```
180
183
 
181
184
  **Requirements:**
185
+
182
186
  - Claude Code CLI must be installed for default mode
183
187
  - Use `--print` mode if Claude Code is not available
184
188
 
185
189
  **Validation:**
190
+
186
191
  - Automatic AJV schema validation
187
192
  - Retry loop with error feedback to LLM
188
193
  - Session resume preserves conversation context
@@ -194,6 +199,7 @@ npx @lumy-pack/syncpoint wizard --print
194
199
  Interactive LLM-powered wizard to create custom provisioning templates.
195
200
 
196
201
  **What it does:**
202
+
197
203
  1. Guides you through defining provisioning requirements
198
204
  2. Invokes Claude Code to generate template YAML
199
205
  3. Validates template structure with automatic retry (max 3 attempts)
@@ -202,8 +208,8 @@ Interactive LLM-powered wizard to create custom provisioning templates.
202
208
 
203
209
  **Options:**
204
210
 
205
- | Option | Description |
206
- |--------|-------------|
211
+ | Option | Description |
212
+ | ------------- | ----------------------------------------------------------------- |
207
213
  | `-p, --print` | Print prompt for manual LLM usage instead of invoking Claude Code |
208
214
 
209
215
  **Usage:**
@@ -220,6 +226,7 @@ npx @lumy-pack/syncpoint create-template --print
220
226
  ```
221
227
 
222
228
  **Template Fields:**
229
+
223
230
  - `name` (required) — Template name
224
231
  - `description` (optional) — Template description
225
232
  - `steps` (required) — Array of provisioning steps
@@ -227,6 +234,7 @@ npx @lumy-pack/syncpoint create-template --print
227
234
  - `sudo` (optional) — Whether sudo privilege is required
228
235
 
229
236
  **Step Fields:**
237
+
230
238
  - `name` (required) — Step name
231
239
  - `command` (required) — Shell command to execute
232
240
  - `description` (optional) — Step description
@@ -240,6 +248,7 @@ npx @lumy-pack/syncpoint create-template --print
240
248
  Create a compressed backup archive of your configuration files.
241
249
 
242
250
  **What it does:**
251
+
243
252
  1. Scans configured target files and directories
244
253
  2. Applies glob patterns and exclusions
245
254
  3. Warns about large files (>10MB) and sensitive files (SSH keys, certificates)
@@ -249,10 +258,10 @@ Create a compressed backup archive of your configuration files.
249
258
 
250
259
  **Options:**
251
260
 
252
- | Option | Description |
253
- |--------|-------------|
254
- | `--dry-run` | Preview files to be backed up without creating archive |
255
- | `--tag <name>` | Add custom tag to backup filename |
261
+ | Option | Description |
262
+ | -------------- | ------------------------------------------------------ |
263
+ | `--dry-run` | Preview files to be backed up without creating archive |
264
+ | `--tag <name>` | Add custom tag to backup filename |
256
265
 
257
266
  **Usage:**
258
267
 
@@ -278,6 +287,7 @@ Backups are saved to `~/.syncpoint/backups/` (or custom destination) with filena
278
287
  Restore configuration files from a backup archive.
279
288
 
280
289
  **What it does:**
290
+
281
291
  1. Lists available backups (if no filename provided)
282
292
  2. Generates restore plan by comparing file hashes:
283
293
  - `create` — File doesn't exist locally
@@ -289,8 +299,8 @@ Restore configuration files from a backup archive.
289
299
 
290
300
  **Options:**
291
301
 
292
- | Option | Description |
293
- |--------|-------------|
302
+ | Option | Description |
303
+ | ----------- | -------------------------------------------- |
294
304
  | `--dry-run` | Show restore plan without actually restoring |
295
305
 
296
306
  **Usage:**
@@ -307,6 +317,7 @@ npx @lumy-pack/syncpoint restore --dry-run
307
317
  ```
308
318
 
309
319
  **Safety Features:**
320
+
310
321
  - Automatic safety backup before any file is overwritten
311
322
  - Hash-based comparison to skip identical files
312
323
  - Symlink validation to prevent directory traversal attacks
@@ -318,6 +329,7 @@ npx @lumy-pack/syncpoint restore --dry-run
318
329
  Run template-based machine provisioning to install software and configure your system.
319
330
 
320
331
  **What it does:**
332
+
321
333
  1. Loads template YAML from `~/.syncpoint/templates/` (by name) or from a custom path (with `--file`)
322
334
  2. Validates template structure and security
323
335
  3. Checks for sudo requirement (prompts if needed)
@@ -328,11 +340,11 @@ Run template-based machine provisioning to install software and configure your s
328
340
 
329
341
  **Options:**
330
342
 
331
- | Option | Description |
332
- |--------|-------------|
343
+ | Option | Description |
344
+ | ------------------- | ---------------------------------------------------- |
333
345
  | `-f, --file <path>` | Path to template file (alternative to template name) |
334
- | `--dry-run` | Show execution plan without running commands |
335
- | `--skip-restore` | Skip automatic config restore after provisioning |
346
+ | `--dry-run` | Show execution plan without running commands |
347
+ | `--skip-restore` | Skip automatic config restore after provisioning |
336
348
 
337
349
  **Usage:**
338
350
 
@@ -357,12 +369,14 @@ npx @lumy-pack/syncpoint provision -f ./template.yml --dry-run --skip-restore
357
369
  ```
358
370
 
359
371
  **Path Resolution:**
372
+
360
373
  - Supports absolute paths: `/path/to/template.yml`
361
374
  - Supports relative paths: `./template.yml`, `../templates/setup.yaml`
362
375
  - Supports tilde expansion: `~/templates/custom.yml`
363
376
  - Must have `.yml` or `.yaml` extension
364
377
 
365
378
  **Security:**
379
+
366
380
  - Blocks dangerous remote script patterns (`curl | bash`, `wget | sh`)
367
381
  - Sanitizes error output to mask sensitive paths and credentials
368
382
  - Validates all templates against schema
@@ -375,6 +389,7 @@ npx @lumy-pack/syncpoint provision -f ./template.yml --dry-run --skip-restore
375
389
  Browse and manage backups and templates interactively.
376
390
 
377
391
  **What it does:**
392
+
378
393
  - Displays interactive menu to browse backups or templates
379
394
  - Shows detailed metadata (size, date, file count, description)
380
395
  - Allows safe deletion of backups with confirmation
@@ -392,6 +407,7 @@ npx @lumy-pack/syncpoint list templates
392
407
  ```
393
408
 
394
409
  **Navigation:**
410
+
395
411
  - Use arrow keys to select items
396
412
  - Press Enter to view details
397
413
  - Press ESC to go back
@@ -404,6 +420,7 @@ npx @lumy-pack/syncpoint list templates
404
420
  Show status summary and manage cleanup of `~/.syncpoint/` directory.
405
421
 
406
422
  **What it does:**
423
+
407
424
  - Scans all subdirectories and calculates statistics
408
425
  - Displays file counts and total sizes
409
426
  - Shows backup timeline (newest and oldest)
@@ -411,8 +428,8 @@ Show status summary and manage cleanup of `~/.syncpoint/` directory.
411
428
 
412
429
  **Options:**
413
430
 
414
- | Option | Description |
415
- |--------|-------------|
431
+ | Option | Description |
432
+ | ----------- | ------------------------------ |
416
433
  | `--cleanup` | Enter interactive cleanup mode |
417
434
 
418
435
  **Usage:**
@@ -426,6 +443,7 @@ npx @lumy-pack/syncpoint status --cleanup
426
443
  ```
427
444
 
428
445
  **Cleanup Strategies:**
446
+
429
447
  - Keep only 5 most recent backups
430
448
  - Remove backups older than 30 days
431
449
  - Delete all log files
@@ -457,14 +475,14 @@ backup:
457
475
  # (Required) Patterns to exclude from backup
458
476
  # Supports glob and regex patterns
459
477
  exclude:
460
- - "**/*.swp"
461
- - "**/.DS_Store"
462
- - "**/node_modules"
478
+ - '**/*.swp'
479
+ - '**/.DS_Store'
480
+ - '**/node_modules'
463
481
  # Example regex: "/\\.bak$/" excludes all .bak files
464
482
 
465
483
  # (Required) Backup filename pattern
466
484
  # Available placeholders: {hostname}, {date}, {time}, {datetime}, {tag}
467
- filename: "{hostname}_{datetime}"
485
+ filename: '{hostname}_{datetime}'
468
486
 
469
487
  # (Optional) Custom backup destination
470
488
  # Default: ~/.syncpoint/backups/
@@ -478,13 +496,13 @@ scripts:
478
496
 
479
497
  ### Filename Placeholders
480
498
 
481
- | Placeholder | Example | Description |
482
- |-------------|---------|-------------|
483
- | `{hostname}` | `macbook-pro` | System hostname |
484
- | `{date}` | `2024-01-15` | Current date (YYYY-MM-DD) |
485
- | `{time}` | `14-30-00` | Current time (HH-MM-SS) |
486
- | `{datetime}` | `2024-01-15_14-30-00` | Combined date and time |
487
- | `{tag}` | `before-upgrade` | Custom tag from `--tag` option |
499
+ | Placeholder | Example | Description |
500
+ | ------------ | --------------------- | ------------------------------ |
501
+ | `{hostname}` | `macbook-pro` | System hostname |
502
+ | `{date}` | `2024-01-15` | Current date (YYYY-MM-DD) |
503
+ | `{time}` | `14-30-00` | Current time (HH-MM-SS) |
504
+ | `{datetime}` | `2024-01-15_14-30-00` | Combined date and time |
505
+ | `{tag}` | `before-upgrade` | Custom tag from `--tag` option |
488
506
 
489
507
  ### Pattern Types
490
508
 
@@ -495,6 +513,7 @@ Syncpoint supports three types of patterns for `targets` and `exclude` fields:
495
513
  Direct file or directory paths. Tilde (`~`) is automatically expanded to home directory.
496
514
 
497
515
  **Examples:**
516
+
498
517
  - `~/.zshrc` — Specific file in home directory
499
518
  - `/etc/hosts` — Absolute path
500
519
  - `~/.ssh/config` — Nested file
@@ -504,6 +523,7 @@ Direct file or directory paths. Tilde (`~`) is automatically expanded to home di
504
523
  Wildcard patterns for matching multiple files. Uses standard glob syntax.
505
524
 
506
525
  **Examples:**
526
+
507
527
  - `*.conf` — All .conf files in current directory
508
528
  - `~/.config/*.yml` — All .yml files in ~/.config/
509
529
  - `**/*.toml` — All .toml files recursively
@@ -518,17 +538,20 @@ Regular expressions for advanced pattern matching. Must be enclosed in forward s
518
538
  **Format:** `/pattern/` (e.g., `/\.conf$/`)
519
539
 
520
540
  **Examples:**
541
+
521
542
  - `/\.conf$/` — Files ending with .conf
522
543
  - `/\.toml$/` — Files ending with .toml
523
544
  - `/\.(bak|tmp)$/` — Files ending with .bak or .tmp
524
545
  - `/^\.config\//` — Files starting with .config/
525
546
 
526
547
  **Limitations:**
548
+
527
549
  - Regex targets scan home directory (`~/`) only
528
550
  - Maximum depth: 5 levels for performance
529
551
  - No unescaped forward slashes in pattern body
530
552
 
531
553
  **When to use regex:**
554
+
532
555
  - Complex extension matching: `/\.(conf|toml|yaml)$/`
533
556
  - Pattern-based exclusions: `/\.(bak|tmp|cache)$/`
534
557
  - Path prefix/suffix matching
@@ -547,12 +570,12 @@ backup:
547
570
  - ~/Documents/notes
548
571
 
549
572
  exclude:
550
- - "**/*.swp"
551
- - "**/*.tmp"
552
- - "**/.DS_Store"
553
- - "**/*cache*"
573
+ - '**/*.swp'
574
+ - '**/*.tmp'
575
+ - '**/.DS_Store'
576
+ - '**/*cache*'
554
577
 
555
- filename: "{hostname}_{date}_{tag}"
578
+ filename: '{hostname}_{date}_{tag}'
556
579
  destination: ~/Dropbox/backups
557
580
 
558
581
  scripts:
@@ -582,10 +605,10 @@ sudo: boolean
582
605
 
583
606
  # (Required) List of provisioning steps
584
607
  steps:
585
- - name: string # (Required) Step name
586
- description: string # (Optional) Step description
587
- command: string # (Required) Shell command to execute
588
- skip_if: string # (Optional) Skip if this command succeeds
608
+ - name: string # (Required) Step name
609
+ description: string # (Optional) Step description
610
+ command: string # (Required) Shell command to execute
611
+ skip_if: string # (Optional) Skip if this command succeeds
589
612
  continue_on_error: boolean # (Optional) Continue on failure (default: false)
590
613
  ```
591
614
 
@@ -671,6 +694,7 @@ After initialization, syncpoint creates the following structure:
671
694
  ### Backup Archive Contents
672
695
 
673
696
  Each backup archive contains:
697
+
674
698
  - Your configuration files in their relative paths
675
699
  - `_metadata.json` with backup information:
676
700
  - File hashes for comparison
@@ -810,6 +834,7 @@ Syncpoint includes multiple security layers to protect your data and system:
810
834
  **Claude Code CLI not found**
811
835
 
812
836
  If you see "Claude Code CLI not found" error:
837
+
813
838
  1. Install Claude Code CLI: Visit [claude.ai/code](https://claude.ai/code) for installation instructions
814
839
  2. Or use `--print` mode to get the prompt and use it with your preferred LLM
815
840
  3. Verify installation: `claude --version`
@@ -817,6 +842,7 @@ If you see "Claude Code CLI not found" error:
817
842
  **Validation errors after LLM generation**
818
843
 
819
844
  The wizard automatically retries up to 3 times when validation fails:
845
+
820
846
  - Each retry includes error feedback to help the LLM correct the issues
821
847
  - If all retries fail, check the validation error messages
822
848
  - Common issues:
@@ -827,6 +853,7 @@ The wizard automatically retries up to 3 times when validation fails:
827
853
  **Print mode usage**
828
854
 
829
855
  Use `--print` mode when Claude Code is not available:
856
+
830
857
  ```bash
831
858
  # Get the prompt
832
859
  npx @lumy-pack/syncpoint wizard --print > prompt.txt
@@ -838,6 +865,7 @@ npx @lumy-pack/syncpoint wizard --print > prompt.txt
838
865
  **Session context lost**
839
866
 
840
867
  The wizard preserves session context across retries using Claude Code's session management. If context is lost:
868
+
841
869
  - The wizard will start a new session on the next retry
842
870
  - Manual intervention may be needed after 3 failed attempts
843
871
 
@@ -846,6 +874,7 @@ The wizard preserves session context across retries using Claude Code's session
846
874
  **Permission errors**
847
875
 
848
876
  If you encounter permission errors:
877
+
849
878
  - Ensure you have write access to `~/.syncpoint/`
850
879
  - Check file permissions: `ls -la ~/.syncpoint/`
851
880
  - Run with appropriate permissions (avoid unnecessary sudo)
@@ -853,6 +882,7 @@ If you encounter permission errors:
853
882
  **Large file warnings**
854
883
 
855
884
  Files larger than 10MB trigger warnings:
885
+
856
886
  - Consider excluding large files using `exclude` patterns
857
887
  - Review if these files should be in version control instead
858
888
  - Compress large files before backing up
@@ -860,6 +890,7 @@ Files larger than 10MB trigger warnings:
860
890
  **Backup restore conflicts**
861
891
 
862
892
  If restore shows many "overwrite" actions:
893
+
863
894
  - Use `--dry-run` to preview changes first
864
895
  - Automatic safety backup is created before overwrite
865
896
  - Review the safety backup in `~/.syncpoint/backups/` tagged with `_pre-restore_`
@@ -3,18 +3,12 @@
3
3
  "title": "Syncpoint Config",
4
4
  "description": "Configuration for syncpoint backup tool",
5
5
  "type": "object",
6
- "required": [
7
- "backup"
8
- ],
6
+ "required": ["backup"],
9
7
  "properties": {
10
8
  "backup": {
11
9
  "type": "object",
12
10
  "description": "Backup configuration",
13
- "required": [
14
- "targets",
15
- "exclude",
16
- "filename"
17
- ],
11
+ "required": ["targets", "exclude", "filename"],
18
12
  "properties": {
19
13
  "targets": {
20
14
  "type": "array",
@@ -65,4 +59,4 @@
65
59
  }
66
60
  },
67
61
  "additionalProperties": false
68
- }
62
+ }