arashi 1.31.0 → 1.32.1
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 +94 -84
- package/package.json +1 -1
- package/schema/config.schema.json +44 -1
package/README.md
CHANGED
|
@@ -8,6 +8,8 @@ Arashi is a Git worktree manager for meta-repositories.
|
|
|
8
8
|
|
|
9
9
|
It keeps related repositories aligned while you work on a feature branch across a shared workspace.
|
|
10
10
|
|
|
11
|
+
Arashi makes a polyrepo work like a monorepo during development, while every repository keeps its own history, CI, and pull requests.
|
|
12
|
+
|
|
11
13
|
[Documentation](https://arashi.haphazard.dev)
|
|
12
14
|
|
|
13
15
|
## Installation
|
|
@@ -33,13 +35,13 @@ curl -fsSL https://arashi.haphazard.dev/install | ARASHI_VERSION=1.4.0 bash
|
|
|
33
35
|
Verify install:
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
|
-
|
|
38
|
+
aw --version
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
By default, the installer places `arashi` in `~/.arashi/bin`, adds that path to your shell config, and in interactive installs offers to enable shell integration for `
|
|
40
|
-
|
|
41
|
+
By default, the installer places `arashi` in `~/.arashi/bin`, adds that path to your shell config, and in interactive installs offers to enable shell integration for `aw switch --cd`.
|
|
42
|
+
Use `aw` for documented workflows. The `arashi` executable remains supported for existing scripts and workflows, and both names run the same implementation. Product names, configuration, environment variables, packages, and native binaries retain their established Arashi names.
|
|
41
43
|
|
|
42
|
-
The installer transaction verifies
|
|
44
|
+
The installer transaction verifies that both executable entrypoints report the same non-empty version before declaring success.
|
|
43
45
|
|
|
44
46
|
If curl installation fails, or if the smoke test reports a bad release artifact, use npm installation below or the manual release instructions in [`docs/INSTALLATION.md`](./docs/INSTALLATION.md).
|
|
45
47
|
|
|
@@ -51,7 +53,7 @@ PowerShell is the canonical Windows installer:
|
|
|
51
53
|
powershell -c "irm https://arashi.haphazard.dev/install.ps1 | iex"
|
|
52
54
|
```
|
|
53
55
|
|
|
54
|
-
It verifies and installs one `arashi.bin.exe` plus `arashi`/`aw` wrappers for Git Bash, `arashi.ps1`/`aw.ps1`, and `arashi.bat`/`aw.bat` from the same release. The default directory is `%USERPROFILE%\.arashi\bin`; the installer adds it to the persistent user PATH. It does not create or modify `.bashrc` or another shell profile. Open a new Git Bash window before
|
|
56
|
+
It verifies and installs one `arashi.bin.exe` plus `arashi`/`aw` wrappers for Git Bash, `arashi.ps1`/`aw.ps1`, and `arashi.bat`/`aw.bat` from the same release. The default directory is `%USERPROFILE%\.arashi\bin`; the installer adds it to the persistent user PATH. It does not create or modify `.bashrc` or another shell profile. Open a new Git Bash window before verifying the installed version so it inherits the PATH change.
|
|
55
57
|
|
|
56
58
|
### Option 3: Install with npm
|
|
57
59
|
|
|
@@ -64,23 +66,23 @@ The npm package is script-free: it does not require package-manager lifecycle sc
|
|
|
64
66
|
To preinstall the binary explicitly, run:
|
|
65
67
|
|
|
66
68
|
```bash
|
|
67
|
-
|
|
69
|
+
aw install
|
|
68
70
|
```
|
|
69
71
|
|
|
70
72
|
To check for package updates or refresh the matching platform binary, run:
|
|
71
73
|
|
|
72
74
|
```bash
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
aw update --check
|
|
76
|
+
aw update --dry-run
|
|
77
|
+
aw update --yes
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
`
|
|
80
|
+
`aw update` can update npm-managed installs when it can confidently detect the package manager, including npm, pnpm, Yarn, Bun, and Vite+ (`vp update -g arashi`). For official direct-installer installs, `aw update --yes` reruns the platform installer against the current binary directory: the POSIX curl installer on macOS/Linux and a deferred PowerShell installer on Windows after the current Arashi process exits.
|
|
79
81
|
|
|
80
82
|
Verify install:
|
|
81
83
|
|
|
82
84
|
```bash
|
|
83
|
-
|
|
85
|
+
aw --version
|
|
84
86
|
```
|
|
85
87
|
|
|
86
88
|
If npm is unavailable or binary installation fails, use the curl installer command above or the manual release instructions in [`docs/INSTALLATION.md`](./docs/INSTALLATION.md).
|
|
@@ -133,58 +135,60 @@ pnpm run build
|
|
|
133
135
|
|
|
134
136
|
Arashi currently provides these commands:
|
|
135
137
|
|
|
136
|
-
- `
|
|
137
|
-
- [`
|
|
138
|
-
- `
|
|
139
|
-
- `
|
|
140
|
-
- `
|
|
141
|
-
- `
|
|
142
|
-
- `
|
|
143
|
-
- `
|
|
144
|
-
- `
|
|
145
|
-
- `
|
|
146
|
-
- `
|
|
147
|
-
- `
|
|
148
|
-
- `
|
|
149
|
-
- `
|
|
150
|
-
- `
|
|
151
|
-
- `
|
|
152
|
-
- `
|
|
153
|
-
- `
|
|
154
|
-
- `
|
|
138
|
+
- `aw init`
|
|
139
|
+
- [`aw init --zero-config`](docs/standalone.md) for a single repository with `.worktrees/<branch>` paths and no persisted Arashi configuration
|
|
140
|
+
- `aw install`
|
|
141
|
+
- `aw update [--check] [--dry-run] [--yes]`
|
|
142
|
+
- `aw add <git-url>`
|
|
143
|
+
- `aw clone [--all] [--base <branch>] [--repo-base <repository=branch>]`
|
|
144
|
+
- `aw create <branch> [--base <branch>] [--repo-base <repository=branch>] [--tab] [--tmux|--sesh|--herdr]`
|
|
145
|
+
- `aw list`
|
|
146
|
+
- `aw status`
|
|
147
|
+
- `aw remove <branch|path>`
|
|
148
|
+
- `aw prune [--dry-run]` - clean stale Git worktree metadata
|
|
149
|
+
- `aw switch [filter] [--repos|--all] [--tab] [--cd|--launch] [--tmux|--sesh|--herdr] [--ignore-configured-launcher]`
|
|
150
|
+
- `aw completion <bash|zsh|fish>`
|
|
151
|
+
- `aw shell init <bash|zsh|fish>`
|
|
152
|
+
- `aw shell install`
|
|
153
|
+
- `aw pull`
|
|
154
|
+
- `aw push [--set-upstream] [--dry-run] [--only <repo>] [--json]`
|
|
155
|
+
- `aw sync`
|
|
156
|
+
- `aw setup [--only <repo>] [--verbose]`
|
|
155
157
|
|
|
156
158
|
## Quick Example
|
|
157
159
|
|
|
158
160
|
```bash
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
161
|
+
aw init # repository-local ignore rules (default)
|
|
162
|
+
aw init --ignore-scope tracked # opt in to a shared .gitignore block
|
|
163
|
+
aw add git@github.com:your-org/frontend.git
|
|
164
|
+
aw add git@github.com:your-org/backend.git
|
|
165
|
+
aw create feature-auth-refresh
|
|
166
|
+
aw create feature-auth-refresh --base feature/auth
|
|
167
|
+
aw create feature-auth-refresh --repo-base @meta=develop --repo-base frontend=release/2.x
|
|
168
|
+
aw clone --all --base main --repo-base frontend=release/2.x
|
|
169
|
+
aw create feature-auth-refresh --launch
|
|
170
|
+
aw create feature-auth-refresh --tmux
|
|
171
|
+
aw create feature-auth-refresh --herdr
|
|
172
|
+
aw create feature-auth-refresh --tab
|
|
173
|
+
aw create feature-auth-refresh --no-launch
|
|
174
|
+
aw shell install
|
|
175
|
+
aw status
|
|
176
|
+
aw switch feature-auth-refresh # parent repo worktrees
|
|
177
|
+
aw switch --repos feature-auth-refresh # child repo worktrees in current workspace
|
|
178
|
+
aw switch --all feature-auth-refresh # all repos
|
|
179
|
+
aw switch --repos docs # repo-name matching in child repos
|
|
180
|
+
aw switch --cd feature-auth-refresh # parent-shell cd when shell integration is active
|
|
181
|
+
aw switch --launch feature-auth-refresh # force launch while preserving a configured launcher
|
|
182
|
+
aw switch --tmux feature-auth-refresh # force a new plain tmux window
|
|
183
|
+
aw switch --herdr feature-auth-refresh # open or focus a persistent Herdr workspace
|
|
184
|
+
aw switch --tab feature-auth-refresh # request a true tab or managed equivalent
|
|
185
|
+
aw switch --ignore-configured-launcher # bypass configured sesh/Herdr mode once
|
|
186
|
+
aw switch --launch --ignore-configured-launcher # force generic automatic launch
|
|
183
187
|
```
|
|
184
188
|
|
|
185
189
|
### Add from a linked parent worktree
|
|
186
190
|
|
|
187
|
-
When `
|
|
191
|
+
When `aw add` runs from an active linked parent worktree, Arashi creates one canonical clone in the parent main checkout and leaves it on the child default branch. It then creates the active child as a linked worktree on the coordinated branch and updates only the active parent configuration. Direct-main and configured-bare adds keep their existing single-placement behavior. See the [add command guide](https://arashi.haphazard.dev/commands/add/) for branch, managed-ignore, JSON, and rollback details.
|
|
188
192
|
|
|
189
193
|
Explicit `--tmux` is a per-invocation launcher override for `create` and `switch`; it is not a persisted configuration mode. It requires an active tmux context whose `TMUX` value is non-empty after trimming, uses the selected worktree path as one argv-safe `tmux new-window -c` argument, and does not fall back to another launcher when the prerequisite or launch fails. On `create`, it implies both launch and switch, while validation failures occur before worktree mutation.
|
|
190
194
|
|
|
@@ -198,10 +202,10 @@ global excludes rule is honored without duplication. Missing safe repository-rel
|
|
|
198
202
|
the common repository's local exclude file by default, including when a command runs in a linked
|
|
199
203
|
worktree.
|
|
200
204
|
|
|
201
|
-
Use `
|
|
202
|
-
workspace `.gitignore`. Use `
|
|
205
|
+
Use `aw init --ignore-scope tracked` when the team wants Arashi-owned rules committed in the
|
|
206
|
+
workspace `.gitignore`. Use `aw init --ignore-scope none` for a fully manual workflow; Arashi
|
|
203
207
|
will warn about unignored managed paths but will not edit ignore files. Running
|
|
204
|
-
`
|
|
208
|
+
`aw init --ignore-scope local` resets that clone-local preference without recreating an
|
|
205
209
|
existing workspace. The explicit `tracked` or `none` preference is stored only in local Git config
|
|
206
210
|
as `arashi.ignoreScope`; Arashi never creates or modifies global Git ignore configuration.
|
|
207
211
|
|
|
@@ -226,41 +230,41 @@ Use shell integration for parent-shell directory switching and native tab comple
|
|
|
226
230
|
The official curl installer can offer this automatically. If you skip it or use npm, install it for the active shell with:
|
|
227
231
|
|
|
228
232
|
```bash
|
|
229
|
-
|
|
233
|
+
aw shell install
|
|
230
234
|
```
|
|
231
235
|
|
|
232
|
-
`
|
|
236
|
+
`aw shell install` adds a managed pair to the active shell startup file: the parent-shell wrapper first and completion activation second. Repeating the command is idempotent and upgrades older wrapper-only blocks.
|
|
233
237
|
|
|
234
238
|
For manual setup, activate the wrapper and completion independently:
|
|
235
239
|
|
|
236
240
|
```bash
|
|
237
241
|
# Bash
|
|
238
|
-
eval "$(command
|
|
239
|
-
source <(command
|
|
242
|
+
eval "$(command aw shell init bash)"
|
|
243
|
+
source <(command aw completion bash)
|
|
240
244
|
|
|
241
245
|
# Zsh
|
|
242
|
-
eval "$(command
|
|
243
|
-
source <(command
|
|
246
|
+
eval "$(command aw shell init zsh)"
|
|
247
|
+
source <(command aw completion zsh)
|
|
244
248
|
|
|
245
249
|
# Fish
|
|
246
|
-
command
|
|
247
|
-
command
|
|
250
|
+
command aw shell init fish | source
|
|
251
|
+
command aw completion fish | source
|
|
248
252
|
```
|
|
249
253
|
|
|
250
|
-
`
|
|
254
|
+
`aw shell init <shell>` remains wrapper-only and defines both parent-shell functions, unless an unrelated `aw` alias or function already owns that shell name. `aw completion <shell>` registers the same completion model for both executable names and emits only deterministic sourceable shell code, including on npm first use when the platform binary must be installed.
|
|
251
255
|
|
|
252
256
|
Completion covers commands, aliases, options, finite choices, conflicts, and positional boundaries. In an Arashi workspace it also resolves configured repository and group selector segments, switch/remove worktrees and paths, and move source/target references. Dynamic lookup is local and read-only, silent on unavailable or broken metadata, and limited to a 200 ms whole-query budget; it performs no network requests, hooks, prompts, workspace mutations, or child operations. Static completion remains available outside a workspace.
|
|
253
257
|
|
|
254
|
-
Once installed, you can use `
|
|
258
|
+
Once installed, you can use `aw switch --cd <filter>` for one-off parent-shell switching or set `.arashi/config.json` `defaults.switch.mode` to `"cd"` or contextual `"auto"`. The canonical modes are `auto` | `cd` | `launch` | `sesh` | `herdr`.
|
|
255
259
|
|
|
256
|
-
If shell integration is inactive, `
|
|
260
|
+
If shell integration is inactive, `aw switch --cd` warns and skips launch fallback for that invocation.
|
|
257
261
|
|
|
258
262
|
For automated installs, set `ARASHI_SHELL_INTEGRATION=yes` to enable it without prompting or `ARASHI_SHELL_INTEGRATION=no` to skip it.
|
|
259
263
|
|
|
260
264
|
## Hooks
|
|
261
265
|
|
|
262
|
-
Arashi can run file-backed or configured inline lifecycle hooks during `
|
|
263
|
-
`
|
|
266
|
+
Arashi can run file-backed or configured inline lifecycle hooks during `aw create` and
|
|
267
|
+
`aw remove`. Inline workspace values live only at root `hooks.scripts.<lifecycle>`; repository
|
|
264
268
|
values live only at `repos.<name>.hooks.<lifecycle>`. Use inline config for short reviewable commands
|
|
265
269
|
and native files for substantial scripts. One inline/file source may own a logical location; a
|
|
266
270
|
same-location collision fails preflight instead of running both.
|
|
@@ -279,65 +283,71 @@ See [`docs/configuration.md`](./docs/configuration.md#inline-lifecycle-hook-conf
|
|
|
279
283
|
|
|
280
284
|
## Workflow Shortcuts
|
|
281
285
|
|
|
282
|
-
Use `
|
|
286
|
+
Use `aw list` with `fzf` and optional keybinds to speed up daily navigation.
|
|
283
287
|
|
|
284
288
|
### Jump to a worktree (`cd`)
|
|
285
289
|
|
|
286
290
|
```bash
|
|
287
291
|
# One-off jump
|
|
288
|
-
cd "$(
|
|
292
|
+
cd "$(aw list | fzf)"
|
|
289
293
|
```
|
|
290
294
|
|
|
291
295
|
```bash
|
|
292
296
|
# Bash keybind (Ctrl+G)
|
|
293
|
-
bind '"\C-g":"cd \$(
|
|
297
|
+
bind '"\C-g":"cd \$(aw list | fzf)\n"'
|
|
294
298
|
```
|
|
295
299
|
|
|
296
300
|
```zsh
|
|
297
301
|
# Zsh keybind (Ctrl+G)
|
|
298
|
-
bindkey -s '^g' 'cd $(
|
|
302
|
+
bindkey -s '^g' 'cd $(aw list | fzf)\n'
|
|
299
303
|
```
|
|
300
304
|
|
|
301
305
|
### Open or switch tmux sessions with `sesh`
|
|
302
306
|
|
|
303
307
|
```bash
|
|
304
308
|
# One-off session connect
|
|
305
|
-
sesh connect "$(
|
|
309
|
+
sesh connect "$(aw list | fzf)"
|
|
306
310
|
```
|
|
307
311
|
|
|
308
312
|
```bash
|
|
309
313
|
# Bash keybind (Ctrl+S)
|
|
310
|
-
bind '"\C-s":"sesh connect \$(
|
|
314
|
+
bind '"\C-s":"sesh connect \$(aw list | fzf)\n"'
|
|
311
315
|
```
|
|
312
316
|
|
|
313
317
|
```zsh
|
|
314
318
|
# Zsh keybind (Ctrl+S)
|
|
315
|
-
bindkey -s '^s' 'sesh connect $(
|
|
319
|
+
bindkey -s '^s' 'sesh connect $(aw list | fzf)\n'
|
|
316
320
|
```
|
|
317
321
|
|
|
318
|
-
You can also use `
|
|
322
|
+
You can also use `aw switch --sesh` directly inside tmux to open the selected worktree in a new tmux window.
|
|
319
323
|
|
|
320
|
-
`
|
|
324
|
+
`aw switch` checks managed contexts in this order: tmux → Herdr → cmux → integrated IDE → Kitty. Managed Kitty selection applies when any one of `KITTY_PID`, `KITTY_WINDOW_ID`, or `TERM=xterm-kitty` is present after normalization.
|
|
321
325
|
|
|
322
326
|
Managed Kitty requires Kitty 0.43 or newer plus working `kitten @` remote control. Arashi reuses only its exact worktree marker and focuses that tab before launching a new session-backed tab. Once managed Kitty is selected, missing or unsupported tooling, denied remote control, duplicate markers, and validation failures are reported directly instead of falling back to another launcher.
|
|
323
327
|
|
|
324
|
-
`
|
|
328
|
+
`aw create --launch` and `defaults.create.launch: "auto"` use the same managed Kitty behavior. If that post-create launch fails, Arashi exits nonzero but preserves the successfully created worktree and reports the launch as partial success. Fix the launcher problem and use `aw switch`; do not retry creation for the same branch.
|
|
325
329
|
|
|
326
330
|
### Fast remove selection
|
|
327
331
|
|
|
328
332
|
```bash
|
|
329
333
|
# Select and remove a worktree quickly
|
|
330
|
-
|
|
334
|
+
aw remove -f "$(aw list | fzf)"
|
|
331
335
|
```
|
|
332
336
|
|
|
333
337
|
If you prefer the term `delete`, create a shell alias:
|
|
334
338
|
|
|
335
339
|
```bash
|
|
336
|
-
alias arashi-delete='
|
|
340
|
+
alias arashi-delete='aw remove -f'
|
|
337
341
|
```
|
|
338
342
|
|
|
339
343
|
## Configuration Schema
|
|
340
344
|
|
|
345
|
+
### Configured worktree files
|
|
346
|
+
|
|
347
|
+
Configured repositories can copy isolated files or create native symlinks for intentionally shared state when coordinated worktrees are created. See [Worktree file materialization](docs/configuration.md#worktree-file-materialization) for direct `copy`/`symlink` arrays, Git-primary sourcing, lifecycle order, safety rules, dry-run previews, and doctor diagnostics.
|
|
348
|
+
|
|
349
|
+
## Configuration Schema
|
|
350
|
+
|
|
341
351
|
Arashi publishes a JSON Schema for `.arashi/config.json` so editors can validate and autocomplete your config.
|
|
342
352
|
|
|
343
353
|
- Stable URL: `https://unpkg.com/arashi/schema/config.schema.json`
|
|
@@ -376,7 +386,7 @@ Explicit launcher flags take precedence over `--cd` / `--launch`, which take pre
|
|
|
376
386
|
|
|
377
387
|
Legacy switch-only `launchMode` and `launch_mode` fields remain readable for a bounded compatibility window. Arashi warns with the exact replacement `defaults.switch.mode` on stderr; migrate promptly. Ambiguous `cd` plus an explicit legacy launcher and conflicting legacy aliases are rejected.
|
|
378
388
|
|
|
379
|
-
Use `defaults.create` for terminal `
|
|
389
|
+
Use `defaults.create` for terminal `aw create` behavior. Use `defaults.editors.<host>.create` for editor-specific overrides such as VS Code extension create flows. Supported hosts are `vscode`, `cursor`, and `kiro`. Each scope has one canonical `launch` choice: `none` | `auto` | `sesh` | `herdr`. `switch` stays independent, while any enabled launch implies switch handling for the newly created primary worktree.
|
|
380
390
|
|
|
381
391
|
Create precedence is: reject `--sesh` plus `--herdr`; then explicit `--sesh` / `--herdr`; `--tab` or `--launch`; `--no-launch`; the matching configured scope; and built-in `none`. `--tab` bypasses the matching configured scope unless an explicit launcher selector is present. An editor-hosted invocation does not fall back to terminal or another editor scope.
|
|
382
392
|
|
package/package.json
CHANGED
|
@@ -19,12 +19,18 @@
|
|
|
19
19
|
},
|
|
20
20
|
"Config": {
|
|
21
21
|
"additionalProperties": false,
|
|
22
|
-
"description": "Root configuration object for Arashi",
|
|
22
|
+
"description": "Root configuration object for Arashi.",
|
|
23
23
|
"properties": {
|
|
24
24
|
"$schema": {
|
|
25
25
|
"description": "JSON Schema URL for editor validation/autocomplete",
|
|
26
26
|
"type": "string"
|
|
27
27
|
},
|
|
28
|
+
"baseBranch": {
|
|
29
|
+
"description": "Workspace base branch shared by configured create and clone",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
|
|
32
|
+
"type": "string"
|
|
33
|
+
},
|
|
28
34
|
"defaults": {
|
|
29
35
|
"$ref": "#/definitions/CommandDefaultsConfig",
|
|
30
36
|
"description": "Optional command-scoped defaults for create and switch"
|
|
@@ -47,6 +53,10 @@
|
|
|
47
53
|
},
|
|
48
54
|
"type": "object"
|
|
49
55
|
},
|
|
56
|
+
"meta": {
|
|
57
|
+
"$ref": "#/definitions/MetaRepositoryConfig",
|
|
58
|
+
"description": "Optional meta-repository-specific policy"
|
|
59
|
+
},
|
|
50
60
|
"repos": {
|
|
51
61
|
"additionalProperties": {
|
|
52
62
|
"$ref": "#/definitions/RepoConfig"
|
|
@@ -208,10 +218,36 @@
|
|
|
208
218
|
],
|
|
209
219
|
"description": "Bash shorthand or interpreter-specific alternatives for one inline hook."
|
|
210
220
|
},
|
|
221
|
+
"MetaRepositoryConfig": {
|
|
222
|
+
"additionalProperties": false,
|
|
223
|
+
"description": "Meta-repository-specific configuration.",
|
|
224
|
+
"properties": {
|
|
225
|
+
"baseBranch": {
|
|
226
|
+
"description": "Meta-repository-specific base branch for configured create",
|
|
227
|
+
"minLength": 1,
|
|
228
|
+
"pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
|
|
229
|
+
"type": "string"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"type": "object"
|
|
233
|
+
},
|
|
211
234
|
"RepoConfig": {
|
|
212
235
|
"additionalProperties": false,
|
|
213
236
|
"description": "Configuration for a single repository",
|
|
214
237
|
"properties": {
|
|
238
|
+
"baseBranch": {
|
|
239
|
+
"description": "Repository-specific base branch for configured create and clone",
|
|
240
|
+
"minLength": 1,
|
|
241
|
+
"pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
|
|
242
|
+
"type": "string"
|
|
243
|
+
},
|
|
244
|
+
"copy": {
|
|
245
|
+
"description": "Repository-relative paths copied into new worktrees in declaration order",
|
|
246
|
+
"items": {
|
|
247
|
+
"type": "string"
|
|
248
|
+
},
|
|
249
|
+
"type": "array"
|
|
250
|
+
},
|
|
215
251
|
"gitUrl": {
|
|
216
252
|
"description": "Canonical git URL for cloning the repository",
|
|
217
253
|
"type": "string"
|
|
@@ -230,6 +266,13 @@
|
|
|
230
266
|
"path": {
|
|
231
267
|
"description": "Path to the repository (relative or absolute)",
|
|
232
268
|
"type": "string"
|
|
269
|
+
},
|
|
270
|
+
"symlink": {
|
|
271
|
+
"description": "Repository-relative paths symlinked into new worktrees in declaration order",
|
|
272
|
+
"items": {
|
|
273
|
+
"type": "string"
|
|
274
|
+
},
|
|
275
|
+
"type": "array"
|
|
233
276
|
}
|
|
234
277
|
},
|
|
235
278
|
"required": ["path"],
|