oh-my-space 0.13.0 → 0.14.0

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
@@ -75,7 +75,7 @@ oms/
75
75
  Start a branch, commit inside the submodule, push it, then record the pointer move in your project history. Each command stays in a single Git scope:
76
76
 
77
77
  ```bash
78
- oms switch api feature/login # local branch, no remote needed
78
+ oms branch switch api feature/login # local branch, no remote needed
79
79
  oms commit api -m "feat: add login" # commit inside oms/api (submodule only)
80
80
  oms push api # creates origin/feature/login (submodule branch only)
81
81
  oms record api # commit the moved oms/api pointer in your project history
@@ -83,7 +83,7 @@ oms record api # commit the moved oms/api pointer in your
83
83
 
84
84
  `oms commit` and `oms push` stay inside the submodule and never touch the root gitlink; `oms record` is the only command that commits an existing root pointer update. After a successful `oms commit`/`oms pull`/`oms push`, `oms` prints an `oms record <alias>` hint when the pointer has moved. Run `oms status --json` for a machine-readable view of which scope changed.
85
85
 
86
- Omit the alias or branch on `oms switch` and `oms checkout` to pick one interactively — synced submodules, and local or `origin/*` branches respectively.
86
+ Omit the alias or branch on `oms branch switch` and `oms branch checkout` to pick one interactively — synced submodules, and local or `origin/*` branches respectively.
87
87
 
88
88
  ## Listing branches
89
89
 
@@ -92,7 +92,7 @@ Omit the alias or branch on `oms switch` and `oms checkout` to pick one interact
92
92
  ```bash
93
93
  oms branch list api
94
94
  oms branch list
95
- oms branch # choose list or delete interactively
95
+ oms branch # choose list, switch, checkout, or delete interactively
96
96
  ```
97
97
 
98
98
  Before listing, OMS safely initializes an existing registered submodule when needed, reconciles every remote declared for that alias in `oms.yaml`, and runs `git fetch <remote> --prune` sequentially in manifest order. A failed fetch is retried once. If both attempts fail, cached refs remain visible as `stale`; a failed remote without usable refs is `unavailable`. These degraded states still exit 0 when local refs can be inspected. Extra local remotes are not fetched or included in the remote inventory, although an actual configured upstream on one of them remains visible for its local branch.
@@ -113,7 +113,7 @@ When `branch` is omitted from `oms.yaml`, a successful origin fetch refreshes `o
113
113
  oms branch delete api feature/login # safe delete (git branch -d)
114
114
  oms branch delete api feature/login --force # force delete (git branch -D)
115
115
  oms branch delete # pick alias, then branch, interactively
116
- oms branch # interactive list/delete action selector
116
+ oms branch # interactive list/switch/checkout/delete action selector
117
117
  ```
118
118
 
119
119
  - **Local only.** It never deletes a remote branch or a remote-tracking ref, never fetches or pushes, and never stages or commits the root gitlink. A missing local branch whose name exists on `origin` is reported as local-only.
@@ -133,7 +133,7 @@ oms branch # interactive list/delete action sel
133
133
 
134
134
  `oms` does not replace Git submodules. It adds a small command layer for the workflow details that make submodules awkward. Submodules already give you a reproducible pin (the parent records each source's exact commit), visibility (`git status` shows when a pointer moved), and history (the pointer travels with your commits). The friction is in everyday branch work, and that is what `oms` smooths over:
135
135
 
136
- - **Start branches locally.** `oms switch <alias> <branch>` starts a local branch right away, even before it exists on the remote. `oms checkout <alias> <branch>` fetches origin and checks out an existing remote branch as a tracking branch. The remote branch is created lazily on your first `oms push`.
136
+ - **Start branches locally.** `oms branch switch <alias> <branch>` starts a local branch right away, even before it exists on the remote. `oms branch checkout <alias> <branch>` fetches origin and checks out an existing remote branch as a tracking branch. The remote branch is created lazily on your first `oms push`.
137
137
  - **Stay on a branch.** `oms sync` attaches the baseline branch at the pinned commit instead of leaving a detached HEAD, so everyday submodule work never strands you off a branch.
138
138
  - **Keep pointer moves visible, commit them explicitly.** `oms pull` and `oms push` synchronize only the submodule branch — they never stage or commit the root gitlink. The moved pointer shows up in `git status`, `oms status` flags when a submodule has drifted from the recorded pointer, and `oms record <alias>` commits that pointer update in the parent repo.
139
139
 
@@ -173,7 +173,7 @@ The three skills are named by the Git domain each manages:
173
173
  | --- | --- | --- |
174
174
  | `oms-workspace` | Scope-ambiguous Git work in the workspace — committing from the root, a moved `oms status` pointer, a push, or adding/removing a repo with `oms sync`/`oms unsync`. | Establishes workspace state and root-versus-submodule scope before acting, and separates repo add/remove topology from recording a moved pointer. |
175
175
  | `oms-pointer` | After `oms commit` or `oms pull` moves a submodule's commit. | Records the moved root pointer with `oms record`, so a submodule change is not left without a recorded pointer and the root pointer is not committed by mistake. |
176
- | `oms-branch` | Starting or switching a branch inside a submodule. | Chooses `oms switch` (new local branch) versus `oms checkout` (track a remote branch) and avoids detached HEAD. |
176
+ | `oms-branch` | Starting or switching a branch inside a submodule. | Chooses `oms branch switch` (new local branch) versus `oms branch checkout` (track a remote branch) and avoids detached HEAD. |
177
177
 
178
178
  Skill firing is best-effort — an agent loads a skill only when it judges the skill's description relevant — so the skills complement, rather than replace, `oms <command> --help` and the always-on marker block inside `oms/`. Each skill defers exact `oms status --json` field semantics to `oms status --help`, the version-matched authoritative source that ships with the installed CLI.
179
179
 
@@ -189,8 +189,8 @@ Skill firing is best-effort — an agent loads a skill only when it judges the s
189
189
  | `oms status [alias...]` / `--all` | anywhere under root | Prints branch, pointer state (`ok`/`moved`/`uninit`/`missing`/`conflict`), dirtiness, and ahead/behind for each submodule. | `moved` means the working commit differs from the recorded pointer — record it with `oms record`. `--json` prints one machine-readable object on stdout for tooling and agents. |
190
190
  | `oms commit [alias]` | workspace root or inside `oms/<alias>/` | Commits source changes inside the selected submodule only; never the root gitlink. | `-m <message>` is required (repeatable). Commits existing staged changes as-is, otherwise stages all with `git add -A`. Infers the alias from the current `oms/<alias>/` directory. |
191
191
  | `oms record [alias]` | workspace root or inside `oms/<alias>/` | Commits an existing root gitlink pointer update for one alias (`chore(oms): update <alias> submodule to <sha>`). | Root repo only, path-limited to `oms/<alias>`; refuses unrelated staged changes. Not for adds/removals — use `oms sync`/`oms unsync`. |
192
- | `oms switch [alias] [branch]` | workspace root | `git switch` to a LOCAL branch, creating it locally if it does not exist yet (no remote required). | `--from <ref>` sets the start point for a new branch. Omit alias/branch to pick interactively (or create a new branch). |
193
- | `oms checkout [alias] [branch]` | workspace root | `git fetch origin --prune`, then check out a REMOTE branch (`origin/*`) as a local tracking branch (or switch to an existing local counterpart). | Omit alias/branch to pick interactively. To create a brand-new local branch, use `oms switch`. |
192
+ | `oms branch switch [alias] [branch]` | workspace root | `git switch` to a LOCAL branch, creating it locally if it does not exist yet (no remote required). | `--from <ref>` sets the start point for a new branch. Omit alias/branch to pick interactively (or create a new branch). |
193
+ | `oms branch checkout [alias] [branch]` | workspace root | `git fetch origin --prune`, then check out a REMOTE branch (`origin/*`) as a local tracking branch (or switch to an existing local counterpart). | Omit alias/branch to pick interactively. To create a brand-new local branch, use `oms branch switch`. |
194
194
  | `oms branch list [alias]` | workspace root | Safely prepares one declared submodule, refreshes all declared remotes, and lists local and remote-tracking branches. | Shows baseline certainty, current/baseline flags, exact upstream divergence, detached HEAD, and per-remote `fresh`/`stale`/`unavailable` state. Never switches a branch or changes a root gitlink outside an explicitly accepted `oms sync`. |
195
195
  | `oms branch delete [alias] [branch]` | workspace root | Deletes one LOCAL branch inside one initialized submodule with `git branch -d` (safe) or `-D` (`--force`). | Local only — never deletes a remote or remote-tracking ref, never touches the root gitlink. Protects the current branch and every resolved baseline (see below). Omit alias/branch to pick interactively; a registered-but-uninitialized alias is initialized first. Exit 0 on success, 1 on input/precondition errors, 2 on a declined/failed/concurrent deletion. |
196
196
  | `oms fetch ...` | workspace root | `git fetch <remote> --prune` in each submodule. | `--remote <name>` (repeatable) picks the remote(s); omit to choose interactively, defaults to `origin`. |
@@ -256,6 +256,7 @@ JSON schema: [`oms.schema.json`](./oms.schema.json) (also reachable at `https://
256
256
 
257
257
  Detailed migration steps are organized per version under [`docs/migrations/`](./docs/migrations/).
258
258
 
259
+ - [0.13.x → 0.14.0](./docs/migrations/0.13.x-to-0.14.0.md) — relocates `oms switch` / `oms checkout` under the `oms branch` group as `oms branch switch` / `oms branch checkout` (top-level commands removed, no aliases)
259
260
  - [0.11.x → 0.12.0](./docs/migrations/0.11.x-to-0.12.0.md) — adds `oms branch delete` and makes `oms sync` reconcile declarative `.gitmodules` metadata with stricter baseline validation and a durable finalization recovery preflight
260
261
  - [0.9.x → 0.10.0](./docs/migrations/0.9.x-to-0.10.0.md) — scopes each command to a single Git boundary and makes root pointer commits explicit via `oms record`
261
262
  - [0.7.x → 0.8.0](./docs/migrations/0.7.x-to-0.8.0.md) — splits `oms checkout` into `oms switch` (local branches) and `oms checkout` (remote branches)
@@ -1 +1 @@
1
- {"commit":"be1d798a55c5e7fae0b33ef6057661a1ac25a5d7"}
1
+ {"commit":"a0692fa946bc1ae17a53ecdda5077dad9dbd894d"}
package/dist/oms.js CHANGED
@@ -16033,7 +16033,7 @@ async function resolveInitializedAlias(repos, repoRoot, alias, actionLabel) {
16033
16033
  }
16034
16034
  const initialized2 = repos.filter((r) => submoduleInitialized(repoRoot, r.alias));
16035
16035
  if (initialized2.length === 0) {
16036
- R2.error(`No synced submodules to ${actionLabel}. Run "oms sync" first.`);
16036
+ R2.error(`No synced submodules available for "oms ${actionLabel}". Run "oms sync" first.`);
16037
16037
  return null;
16038
16038
  }
16039
16039
  if (!process.stdin.isTTY) {
@@ -16041,7 +16041,7 @@ async function resolveInitializedAlias(repos, repoRoot, alias, actionLabel) {
16041
16041
  return null;
16042
16042
  }
16043
16043
  const choice = await xe({
16044
- message: `Select a source repo to ${actionLabel}`,
16044
+ message: `Select a source repo for "oms ${actionLabel}"`,
16045
16045
  options: initialized2.map((r) => ({
16046
16046
  value: r.alias,
16047
16047
  label: r.alias,
@@ -17118,6 +17118,72 @@ async function runBranchList(aliasArg) {
17118
17118
  }
17119
17119
  __name(runBranchList, "runBranchList");
17120
17120
 
17121
+ // scripts/lib/branch-ops.ts
17122
+ async function runSwitch(alias, branch, options) {
17123
+ const loaded = loadForSubmodules();
17124
+ if (!loaded) return 1;
17125
+ const { repos, repoRoot } = loaded;
17126
+ const repo = await resolveInitializedAlias(repos, repoRoot, alias, "branch switch");
17127
+ if (!repo) return 1;
17128
+ const dir = aliasDir(repoRoot, repo.alias);
17129
+ let target = branch;
17130
+ if (!target) {
17131
+ const picked = await pickBranch(listLocalBranches(dir), `${repo.alias}: select a local branch`, true);
17132
+ if (!picked) return 1;
17133
+ target = picked;
17134
+ }
17135
+ if (localBranchExists(dir, target)) {
17136
+ R2.step(`${repo.alias}: git switch ${target}`);
17137
+ const r2 = runSub(repoRoot, repo.alias, ["switch", target], true);
17138
+ if (!r2.success) return 2;
17139
+ R2.success(`${repo.alias}: on ${target}`);
17140
+ return 0;
17141
+ }
17142
+ const args = ["switch", "-c", target, ...options.from ? [options.from] : []];
17143
+ R2.step(`${repo.alias}: git ${args.join(" ")}`);
17144
+ const r = runSub(repoRoot, repo.alias, args, true);
17145
+ if (!r.success) return 2;
17146
+ R2.success(`${repo.alias}: created new local branch ${target}. Push it with "oms push ${repo.alias}".`);
17147
+ return 0;
17148
+ }
17149
+ __name(runSwitch, "runSwitch");
17150
+ async function runCheckout(alias, branch) {
17151
+ const loaded = loadForSubmodules();
17152
+ if (!loaded) return 1;
17153
+ const { repos, repoRoot } = loaded;
17154
+ const repo = await resolveInitializedAlias(repos, repoRoot, alias, "branch checkout");
17155
+ if (!repo) return 1;
17156
+ const dir = aliasDir(repoRoot, repo.alias);
17157
+ R2.step(`${repo.alias}: git fetch origin --prune`);
17158
+ const fetch2 = runSub(repoRoot, repo.alias, ["fetch", "origin", "--prune"], true);
17159
+ if (!fetch2.success) return 2;
17160
+ let target = branch;
17161
+ if (!target) {
17162
+ const picked = await pickBranch(listRemoteBranches(dir), `${repo.alias}: select a remote branch (origin/*)`, false);
17163
+ if (!picked) return 1;
17164
+ target = picked;
17165
+ }
17166
+ if (localBranchExists(dir, target)) {
17167
+ R2.step(`${repo.alias}: git switch ${target}`);
17168
+ const r = runSub(repoRoot, repo.alias, ["switch", target], true);
17169
+ if (!r.success) return 2;
17170
+ R2.success(`${repo.alias}: on ${target}`);
17171
+ return 0;
17172
+ }
17173
+ if (remoteBranchExists(dir, target)) {
17174
+ R2.step(`${repo.alias}: git switch -c ${target} origin/${target}`);
17175
+ const r = runSub(repoRoot, repo.alias, ["switch", "-c", target, `origin/${target}`], true);
17176
+ if (!r.success) return 2;
17177
+ R2.success(`${repo.alias}: on ${target} (tracking origin/${target})`);
17178
+ return 0;
17179
+ }
17180
+ R2.error(
17181
+ `${repo.alias}: "${target}" not found on origin. To create a new local branch, run "oms branch switch ${repo.alias} ${target}".`
17182
+ );
17183
+ return 1;
17184
+ }
17185
+ __name(runCheckout, "runCheckout");
17186
+
17121
17187
  // scripts/lib/branch-delete.ts
17122
17188
  function interactive2() {
17123
17189
  return Boolean(process.stdin.isTTY) || promptQueueActive();
@@ -17136,6 +17202,8 @@ async function runBranch(command) {
17136
17202
  message: "Select a branch action",
17137
17203
  options: [
17138
17204
  { value: "list", label: "list branches in a submodule" },
17205
+ { value: "switch", label: "switch to or create a local branch in a submodule" },
17206
+ { value: "checkout", label: "check out a remote branch in a submodule" },
17139
17207
  { value: "delete", label: "delete a local branch in a submodule" }
17140
17208
  ]
17141
17209
  });
@@ -17144,6 +17212,8 @@ async function runBranch(command) {
17144
17212
  return 1;
17145
17213
  }
17146
17214
  if (action === "list") return runBranchList(void 0);
17215
+ if (action === "switch") return runSwitch(void 0, void 0, {});
17216
+ if (action === "checkout") return runCheckout(void 0, void 0);
17147
17217
  if (action === "delete") return runBranchDelete(void 0, void 0, {});
17148
17218
  return 1;
17149
17219
  }
@@ -17218,7 +17288,7 @@ function checkSubmodulePreconditions(repoRoot, repo) {
17218
17288
  if (!anchored) {
17219
17289
  return {
17220
17290
  ok: false,
17221
- reason: `${repo.alias}: submodule HEAD is detached and not anchored to the recorded gitlink. Attach it with "oms switch ${repo.alias} <branch>" first.`
17291
+ reason: `${repo.alias}: submodule HEAD is detached and not anchored to the recorded gitlink. Attach it with "oms branch switch ${repo.alias} <branch>" first.`
17222
17292
  };
17223
17293
  }
17224
17294
  }
@@ -17408,72 +17478,6 @@ async function runBranchDelete(aliasArg, branchArg, options) {
17408
17478
  }
17409
17479
  __name(runBranchDelete, "runBranchDelete");
17410
17480
 
17411
- // scripts/lib/branch-ops.ts
17412
- async function runSwitch(alias, branch, options) {
17413
- const loaded = loadForSubmodules();
17414
- if (!loaded) return 1;
17415
- const { repos, repoRoot } = loaded;
17416
- const repo = await resolveInitializedAlias(repos, repoRoot, alias, "switch");
17417
- if (!repo) return 1;
17418
- const dir = aliasDir(repoRoot, repo.alias);
17419
- let target = branch;
17420
- if (!target) {
17421
- const picked = await pickBranch(listLocalBranches(dir), `${repo.alias}: select a local branch`, true);
17422
- if (!picked) return 1;
17423
- target = picked;
17424
- }
17425
- if (localBranchExists(dir, target)) {
17426
- R2.step(`${repo.alias}: git switch ${target}`);
17427
- const r2 = runSub(repoRoot, repo.alias, ["switch", target], true);
17428
- if (!r2.success) return 2;
17429
- R2.success(`${repo.alias}: on ${target}`);
17430
- return 0;
17431
- }
17432
- const args = ["switch", "-c", target, ...options.from ? [options.from] : []];
17433
- R2.step(`${repo.alias}: git ${args.join(" ")}`);
17434
- const r = runSub(repoRoot, repo.alias, args, true);
17435
- if (!r.success) return 2;
17436
- R2.success(`${repo.alias}: created new local branch ${target}. Push it with "oms push ${repo.alias}".`);
17437
- return 0;
17438
- }
17439
- __name(runSwitch, "runSwitch");
17440
- async function runCheckout(alias, branch) {
17441
- const loaded = loadForSubmodules();
17442
- if (!loaded) return 1;
17443
- const { repos, repoRoot } = loaded;
17444
- const repo = await resolveInitializedAlias(repos, repoRoot, alias, "checkout");
17445
- if (!repo) return 1;
17446
- const dir = aliasDir(repoRoot, repo.alias);
17447
- R2.step(`${repo.alias}: git fetch origin --prune`);
17448
- const fetch2 = runSub(repoRoot, repo.alias, ["fetch", "origin", "--prune"], true);
17449
- if (!fetch2.success) return 2;
17450
- let target = branch;
17451
- if (!target) {
17452
- const picked = await pickBranch(listRemoteBranches(dir), `${repo.alias}: select a remote branch (origin/*)`, false);
17453
- if (!picked) return 1;
17454
- target = picked;
17455
- }
17456
- if (localBranchExists(dir, target)) {
17457
- R2.step(`${repo.alias}: git switch ${target}`);
17458
- const r = runSub(repoRoot, repo.alias, ["switch", target], true);
17459
- if (!r.success) return 2;
17460
- R2.success(`${repo.alias}: on ${target}`);
17461
- return 0;
17462
- }
17463
- if (remoteBranchExists(dir, target)) {
17464
- R2.step(`${repo.alias}: git switch -c ${target} origin/${target}`);
17465
- const r = runSub(repoRoot, repo.alias, ["switch", "-c", target, `origin/${target}`], true);
17466
- if (!r.success) return 2;
17467
- R2.success(`${repo.alias}: on ${target} (tracking origin/${target})`);
17468
- return 0;
17469
- }
17470
- R2.error(
17471
- `${repo.alias}: "${target}" not found on origin. To create a new local branch, run "oms switch ${repo.alias} ${target}".`
17472
- );
17473
- return 1;
17474
- }
17475
- __name(runCheckout, "runCheckout");
17476
-
17477
17481
  // scripts/lib/commit.ts
17478
17482
  async function runCommit(alias, options) {
17479
17483
  const loaded = loadForSubmodules();
@@ -17496,7 +17500,7 @@ async function runCommit(alias, options) {
17496
17500
  return 1;
17497
17501
  }
17498
17502
  if (currentBranch(dir) === null) {
17499
- R2.error(`${selected}: detached HEAD. Run "oms switch ${selected} <branch>" before committing.`);
17503
+ R2.error(`${selected}: detached HEAD. Run "oms branch switch ${selected} <branch>" before committing.`);
17500
17504
  return 1;
17501
17505
  }
17502
17506
  const messages = options.message ?? [];
@@ -17657,7 +17661,7 @@ async function runDoctor() {
17657
17661
  const dir = aliasDir(repoRoot, repo.alias);
17658
17662
  const branch = currentBranch(dir);
17659
17663
  if (!branch) {
17660
- R2.warn(`${repo.alias}: detached HEAD. Run "oms switch ${repo.alias} <branch>" to get on a branch.`);
17664
+ R2.warn(`${repo.alias}: detached HEAD. Run "oms branch switch ${repo.alias} <branch>" to get on a branch.`);
17661
17665
  warnings++;
17662
17666
  } else {
17663
17667
  R2.success(`${repo.alias}: submodule OK (branch=${branch})`);
@@ -17805,7 +17809,7 @@ function pullRepo(repo, repoRoot, remote) {
17805
17809
  const branch = currentBranch(aliasDir(repoRoot, repo.alias));
17806
17810
  if (!branch) {
17807
17811
  R2.error(
17808
- `${repo.alias}: detached HEAD. Run "oms switch ${repo.alias} <branch>" before pulling.`
17812
+ `${repo.alias}: detached HEAD. Run "oms branch switch ${repo.alias} <branch>" before pulling.`
17809
17813
  );
17810
17814
  return "failed";
17811
17815
  }
@@ -17834,7 +17838,7 @@ function pushRepo(repo, repoRoot, remotes) {
17834
17838
  const branch = currentBranch(aliasDir(repoRoot, repo.alias));
17835
17839
  if (!branch) {
17836
17840
  R2.error(
17837
- `${repo.alias}: detached HEAD. Run "oms switch ${repo.alias} <branch>" before pushing.`
17841
+ `${repo.alias}: detached HEAD. Run "oms branch switch ${repo.alias} <branch>" before pushing.`
17838
17842
  );
17839
17843
  return "failed";
17840
17844
  }
@@ -18438,8 +18442,6 @@ var commandNames = /* @__PURE__ */ new Set([
18438
18442
  "status",
18439
18443
  "commit",
18440
18444
  "record",
18441
- "switch",
18442
- "checkout",
18443
18445
  "branch",
18444
18446
  "fetch",
18445
18447
  "pull",
@@ -18477,19 +18479,19 @@ program2.command("commit").description("Commit source changes inside the selecte
18477
18479
  program2.command("record").description("Commit an existing root gitlink pointer update for the selected submodule (root repo only).").argument("[alias]", "registered source alias (omit to infer from the current oms/<alias>/ directory)").addHelpText("after", `${recordHelp}${exitHelp}`).action(async (alias) => {
18478
18480
  await exitWith(runRecord(alias));
18479
18481
  });
18480
- program2.command("switch").description(
18482
+ var branchCommand = program2.command("branch").description("Inspect, switch, checkout, or delete submodule branches (interactive action selector).").addHelpText("after", exitHelp).action(async () => {
18483
+ await exitWith(runBranch(branchCommand));
18484
+ });
18485
+ branchCommand.command("switch").description(
18481
18486
  "Switch a submodule to a LOCAL branch, creating it locally if it does not exist yet (no remote required)."
18482
18487
  ).argument("[alias]", "registered source alias (omit to pick interactively)").argument("[branch]", "local branch name (omit to pick from local branches or create one)").option("--from <ref>", "start point for a new branch (default: current HEAD)").addHelpText("after", exitHelp).action(async (alias, branch, options) => {
18483
18488
  await exitWith(runSwitch(alias, branch, options));
18484
18489
  });
18485
- program2.command("checkout").description(
18490
+ branchCommand.command("checkout").description(
18486
18491
  "Fetch origin, then check out a REMOTE branch (origin/*) as a local tracking branch."
18487
18492
  ).argument("[alias]", "registered source alias (omit to pick interactively)").argument("[branch]", "remote branch name (omit to pick from origin/* branches)").addHelpText("after", exitHelp).action(async (alias, branch) => {
18488
18493
  await exitWith(runCheckout(alias, branch));
18489
18494
  });
18490
- var branchCommand = program2.command("branch").description("Inspect or delete submodule branches (interactive action selector).").addHelpText("after", exitHelp).action(async () => {
18491
- await exitWith(runBranch(branchCommand));
18492
- });
18493
18495
  branchCommand.command("list").description("Prepare one submodule, refresh declared remotes, and list local and remote branches.").argument("[alias]", "declared source alias (the sole alias is selected automatically)").addHelpText(
18494
18496
  "after",
18495
18497
  `
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-space",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Manage multi-repo workspaces with Git submodules.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/divlook/oh-my-space",