@reyanshgupta/ditto-cli 0.3.6 → 0.3.7

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.
Files changed (2) hide show
  1. package/README.md +17 -4
  2. package/package.json +5 -5
package/README.md CHANGED
@@ -194,7 +194,9 @@ ditto-cli delete work --yes # removes credentials and sessions for good
194
194
  ditto-cli list
195
195
  ditto-cli status client-a # sign-in state for all six tools
196
196
  ditto-cli paths client-a
197
- ditto-cli sync client-a # re-copy your Claude Code settings into it
197
+ ditto-cli sync client-a # preserve configuration for one profile
198
+ ditto-cli sync --all # preserve it for every managed profile
199
+ ditto-cli sync --all --history # also backfill existing conversations
198
200
 
199
201
  # Launch a tool, with short aliases where shown
200
202
  ditto-cli claude client-a # or: cc
@@ -461,7 +463,7 @@ ditto-cli --json status client-a
461
463
  }
462
464
  ```
463
465
 
464
- `list`, `status`, `paths`, `create`, `rename`, `delete`, `default`, `workspace`, and `indicator` all answer in JSON. Errors become `{"error": "..."}` on stderr, and every failure exits 1. `shell-init` prints a script for a shell to read rather than a report, so `--json` has nothing to do there.
466
+ `list`, `status`, `paths`, `create`, `rename`, `delete`, `sync`, `default`, `workspace`, and `indicator` all answer in JSON. Errors become `{"error": "..."}` on stderr, and every failure exits 1. `shell-init` prints a script for a shell to read rather than a report, so `--json` has nothing to do there.
465
467
 
466
468
  Running `ditto-cli` with no subcommand opens the picker, which needs an interactive terminal. Without one it exits 1 and names the commands to use instead, rather than failing on a terminal that was never there.
467
469
 
@@ -481,11 +483,12 @@ So creating a profile copies `~/.claude/settings.json` into it. What Ditto CLI i
481
483
  From then on the profile's settings are its own. Change the model in one profile and the others keep theirs; a later `ditto-cli sync` fills in settings the profile has never answered and leaves the ones it has:
482
484
 
483
485
  ```bash
484
- ditto-cli sync client-a # bring it up to date, keeping its own answers
486
+ ditto-cli sync client-a # bring one profile up to date
487
+ ditto-cli sync --all # bring every managed profile up to date
485
488
  ditto-cli sync client-a --overwrite # your configuration wins outright
486
489
  ```
487
490
 
488
- `sync` is also how profiles created before this behaviour existed catch up.
491
+ Naming a profile preserves configuration for that profile only; `--all` makes the scope every managed profile. `sync` is also how profiles created before this behaviour existed catch up, including tool directories added by a newer Ditto release.
489
492
 
490
493
  ## Skills, subagents, and everything else you set up once
491
494
 
@@ -502,12 +505,22 @@ A profile exists to be signed in as somebody else, not to be a different working
502
505
 
503
506
  These are symbolic links, so a skill you write tomorrow is in every profile the moment you save it, with nothing to sync and no copies to drift apart. Everything else — `.claude.json`, `auth.json`, sessions, session artifacts, history, `agent.db` — stays inside the profile, which is the whole of what a profile keeps to itself. Prime Agent and Pi keep `models.json` private too, because custom provider definitions may contain literal API keys and secret headers.
504
507
 
508
+ Conversation history is not linked: chats can contain account- or client-specific work, and shared writable session stores would make every profile's future activity visible to every other profile. Existing Claude Code, Codex, opencode, OMP, Prime Agent, and Pi conversations can instead be copied once, without replacing anything already in the destination. Choose one profile explicitly or all managed profiles explicitly:
509
+
510
+ ```bash
511
+ ditto-cli sync client-a --history
512
+ ditto-cli sync --all --history
513
+ ```
514
+
515
+ After the copy, every tool keeps writing to that profile's own history store.
516
+
505
517
  What is shared is a named list rather than everything-but-the-credentials. Ditto CLI learning about a new extension directory late costs you a missing feature; sharing a new credential file by accident would cost you the isolation the tool exists for.
506
518
 
507
519
  Profiles created before this have real directories where the links go. `sync` reports those and leaves them alone; `--adopt` points them at yours, moving what was there aside as `<name>.before-ditto` rather than deleting it:
508
520
 
509
521
  ```bash
510
522
  ditto-cli sync client-a # link what can be linked, report what cannot
523
+ ditto-cli sync --all # do that for every managed profile
511
524
  ditto-cli sync client-a --adopt # replace the profile's own copies too
512
525
  ```
513
526
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reyanshgupta/ditto-cli",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Switch between Claude Code, Codex, opencode, OMP, and Prime Agent accounts",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -33,9 +33,9 @@
33
33
  "node": ">=18"
34
34
  },
35
35
  "optionalDependencies": {
36
- "@reyanshgupta/ditto-cli-darwin-arm64": "0.3.6",
37
- "@reyanshgupta/ditto-cli-darwin-x64": "0.3.6",
38
- "@reyanshgupta/ditto-cli-linux-x64": "0.3.6",
39
- "@reyanshgupta/ditto-cli-win32-x64": "0.3.6"
36
+ "@reyanshgupta/ditto-cli-darwin-arm64": "0.3.7",
37
+ "@reyanshgupta/ditto-cli-darwin-x64": "0.3.7",
38
+ "@reyanshgupta/ditto-cli-linux-x64": "0.3.7",
39
+ "@reyanshgupta/ditto-cli-win32-x64": "0.3.7"
40
40
  }
41
41
  }