arashi 1.6.0 → 1.8.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 +48 -2
- package/package.json +7 -1
- package/schema/config.schema.json +127 -0
package/README.md
CHANGED
|
@@ -94,11 +94,12 @@ Arashi currently provides these commands:
|
|
|
94
94
|
|
|
95
95
|
- `arashi init`
|
|
96
96
|
- `arashi add <git-url>`
|
|
97
|
+
- `arashi clone [--all]`
|
|
97
98
|
- `arashi create <branch>`
|
|
98
99
|
- `arashi list`
|
|
99
100
|
- `arashi status`
|
|
100
101
|
- `arashi remove <branch|path>`
|
|
101
|
-
- `arashi switch [filter] [--repos|--all] [--sesh]`
|
|
102
|
+
- `arashi switch [filter] [--repos|--all] [--sesh] [--no-default-launch]`
|
|
102
103
|
- `arashi pull`
|
|
103
104
|
- `arashi sync`
|
|
104
105
|
- `arashi setup [--only <repo>] [--verbose]`
|
|
@@ -110,23 +111,36 @@ arashi init
|
|
|
110
111
|
arashi add git@github.com:your-org/frontend.git
|
|
111
112
|
arashi add git@github.com:your-org/backend.git
|
|
112
113
|
arashi create feature-auth-refresh
|
|
114
|
+
arashi create feature-auth-refresh --launch
|
|
115
|
+
arashi create feature-auth-refresh --no-launch
|
|
113
116
|
arashi status
|
|
114
117
|
arashi switch feature-auth-refresh # parent repo worktrees
|
|
115
118
|
arashi switch --repos feature-auth-refresh # child repo worktrees in current workspace
|
|
116
119
|
arashi switch --all feature-auth-refresh # all repos
|
|
117
120
|
arashi switch --repos docs # repo-name matching in child repos
|
|
121
|
+
arashi switch --no-default-launch # bypass configured launch mode defaults once
|
|
118
122
|
```
|
|
119
123
|
|
|
120
124
|
## Hooks
|
|
121
125
|
|
|
122
|
-
Arashi can run lifecycle hooks during `arashi create`
|
|
126
|
+
Arashi can run lifecycle hooks during `arashi create` and `arashi remove`.
|
|
123
127
|
|
|
124
128
|
- Global hooks in `.arashi/hooks/`:
|
|
125
129
|
- `pre-create.sh`
|
|
126
130
|
- `post-create.sh`
|
|
131
|
+
- `pre-remove.sh`
|
|
132
|
+
- `post-remove.sh`
|
|
127
133
|
- Repository-specific hooks:
|
|
128
134
|
- `pre-create.<repo>.sh`
|
|
129
135
|
- `post-create.<repo>.sh`
|
|
136
|
+
- Scoped remove hooks:
|
|
137
|
+
- repository scope: `repos/<repo>/.arashi/hooks/pre-remove.sh` and `post-remove.sh`
|
|
138
|
+
- global shared: `~/.arashi/hooks/pre-remove.sh` and `post-remove.sh`
|
|
139
|
+
- global targeted: `~/.arashi/hooks/<repo>/pre-remove.sh` and `post-remove.sh`
|
|
140
|
+
|
|
141
|
+
For `arashi remove`, hook execution order is: repository scope -> workspace-root scope -> global targeted scope -> global shared scope.
|
|
142
|
+
|
|
143
|
+
`pre-remove.sh` is useful for teardown before deletion (for example, stopping tmux sessions), and `post-remove.sh` can run final cleanup after remove operations complete.
|
|
130
144
|
|
|
131
145
|
See [`docs/hooks.md`](./docs/hooks.md) for hook behavior, environment variables, and examples.
|
|
132
146
|
|
|
@@ -185,6 +199,36 @@ If you prefer the term `delete`, create a shell alias:
|
|
|
185
199
|
alias arashi-delete='arashi remove -f'
|
|
186
200
|
```
|
|
187
201
|
|
|
202
|
+
## Configuration Schema
|
|
203
|
+
|
|
204
|
+
Arashi publishes a JSON Schema for `.arashi/config.json` so editors can validate and autocomplete your config.
|
|
205
|
+
|
|
206
|
+
- Stable URL: `https://unpkg.com/arashi/schema/config.schema.json`
|
|
207
|
+
- Version-pinned URL: `https://unpkg.com/arashi@1.7.0/schema/config.schema.json`
|
|
208
|
+
|
|
209
|
+
Example config header:
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"$schema": "https://unpkg.com/arashi/schema/config.schema.json",
|
|
214
|
+
"version": "1.0.0",
|
|
215
|
+
"reposDir": "./repos",
|
|
216
|
+
"defaults": {
|
|
217
|
+
"create": {
|
|
218
|
+
"switch": true,
|
|
219
|
+
"launch": true,
|
|
220
|
+
"launchMode": "sesh"
|
|
221
|
+
},
|
|
222
|
+
"switch": {
|
|
223
|
+
"launchMode": "sesh"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"repos": {}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Defaults precedence for create/switch behavior: explicit CLI flag > opt-out flag > config default > built-in default.
|
|
231
|
+
|
|
188
232
|
## skills.sh Integration
|
|
189
233
|
|
|
190
234
|
Arashi also ships a dedicated `skills.sh` integration package for guided installation, workflow examples, and troubleshooting.
|
|
@@ -197,6 +241,8 @@ Arashi also ships a dedicated `skills.sh` integration package for guided install
|
|
|
197
241
|
## Documentation
|
|
198
242
|
|
|
199
243
|
- Installation details: [`docs/INSTALLATION.md`](./docs/INSTALLATION.md)
|
|
244
|
+
- Configuration details: [`docs/configuration.md`](./docs/configuration.md)
|
|
245
|
+
- Clone command details: [`docs/commands/clone.md`](./docs/commands/clone.md)
|
|
200
246
|
- Hook behavior: [`docs/hooks.md`](./docs/hooks.md)
|
|
201
247
|
- Setup command details: [`docs/commands/setup.md`](./docs/commands/setup.md)
|
|
202
248
|
- Switch command details: [`docs/commands/switch.md`](./docs/commands/switch.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arashi",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Git worktree manager for meta-repositories - The eye of the storm for your development workflow",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"bin/arashi.bat",
|
|
33
33
|
"bin/arashi.ps1",
|
|
34
34
|
"scripts/postinstall.js",
|
|
35
|
+
"schema/config.schema.json",
|
|
35
36
|
"README.md",
|
|
36
37
|
"LICENSE"
|
|
37
38
|
],
|
|
@@ -57,10 +58,14 @@
|
|
|
57
58
|
"lint": "oxlint -D no-explicit-any .",
|
|
58
59
|
"lint:fix": "oxlint --fix -D no-explicit-any .",
|
|
59
60
|
"lint:ci": "oxlint --format github -D no-explicit-any .",
|
|
61
|
+
"schema:generate": "ts-json-schema-generator --tsconfig tsconfig.schema.json --path src/lib/config.ts --type Config --expose export --jsDoc extended --out schema/config.schema.json",
|
|
62
|
+
"schema:publish": "bun run schema:generate && oxfmt --config .oxfmtrc.json --write schema/config.schema.json",
|
|
63
|
+
"schema:check": "bun run schema:publish && git diff --exit-code -- schema/config.schema.json",
|
|
60
64
|
"format": "oxfmt --config .oxfmtrc.json --write .",
|
|
61
65
|
"format:check": "oxfmt --config .oxfmtrc.json --check .",
|
|
62
66
|
"quality:changed": "bun run scripts/quality/changed-files-quality.ts",
|
|
63
67
|
"postinstall": "node scripts/postinstall.js",
|
|
68
|
+
"prepublishOnly": "bun run schema:publish",
|
|
64
69
|
"prepare": "husky"
|
|
65
70
|
},
|
|
66
71
|
"devDependencies": {
|
|
@@ -80,6 +85,7 @@
|
|
|
80
85
|
"oxfmt": "0.28.0",
|
|
81
86
|
"oxlint": "1.43.0",
|
|
82
87
|
"semantic-release": "^24.2.0",
|
|
88
|
+
"ts-json-schema-generator": "2.4.0",
|
|
83
89
|
"typescript": "^5.9.3"
|
|
84
90
|
},
|
|
85
91
|
"lint-staged": {
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$ref": "#/definitions/Config",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"definitions": {
|
|
5
|
+
"CommandDefaultsConfig": {
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"create": {
|
|
9
|
+
"$ref": "#/definitions/CreateCommandDefaults"
|
|
10
|
+
},
|
|
11
|
+
"switch": {
|
|
12
|
+
"$ref": "#/definitions/SwitchCommandDefaults"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"type": "object"
|
|
16
|
+
},
|
|
17
|
+
"Config": {
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"description": "Root configuration object for Arashi",
|
|
20
|
+
"properties": {
|
|
21
|
+
"$schema": {
|
|
22
|
+
"description": "JSON Schema URL for editor validation/autocomplete",
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"defaults": {
|
|
26
|
+
"$ref": "#/definitions/CommandDefaultsConfig",
|
|
27
|
+
"description": "Optional command-scoped defaults for create and switch"
|
|
28
|
+
},
|
|
29
|
+
"hooks": {
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"description": "Optional workspace-level hooks settings",
|
|
32
|
+
"properties": {
|
|
33
|
+
"timeout": {
|
|
34
|
+
"description": "Timeout in milliseconds for long-running operations",
|
|
35
|
+
"type": "number"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"type": "object"
|
|
39
|
+
},
|
|
40
|
+
"repos": {
|
|
41
|
+
"additionalProperties": {
|
|
42
|
+
"$ref": "#/definitions/RepoConfig"
|
|
43
|
+
},
|
|
44
|
+
"description": "Map of repository names to their configurations",
|
|
45
|
+
"type": "object"
|
|
46
|
+
},
|
|
47
|
+
"reposDir": {
|
|
48
|
+
"description": "Directory where repositories are located",
|
|
49
|
+
"type": "string"
|
|
50
|
+
},
|
|
51
|
+
"sync": {
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"description": "Optional sync command settings",
|
|
54
|
+
"properties": {
|
|
55
|
+
"timeoutSeconds": {
|
|
56
|
+
"description": "Sync timeout in seconds",
|
|
57
|
+
"type": "number"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"type": "object"
|
|
61
|
+
},
|
|
62
|
+
"version": {
|
|
63
|
+
"$ref": "#/definitions/ConfigVersion",
|
|
64
|
+
"description": "Configuration schema version for migrations"
|
|
65
|
+
},
|
|
66
|
+
"worktreesDir": {
|
|
67
|
+
"description": "Base directory where worktrees are created (workspace-relative)",
|
|
68
|
+
"type": "string"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"required": ["version", "reposDir", "repos"],
|
|
72
|
+
"type": "object"
|
|
73
|
+
},
|
|
74
|
+
"ConfigVersion": {
|
|
75
|
+
"const": "1.0.0",
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
"CreateCommandDefaults": {
|
|
79
|
+
"additionalProperties": false,
|
|
80
|
+
"properties": {
|
|
81
|
+
"launch": {
|
|
82
|
+
"description": "Default to launching a terminal/editor context after create",
|
|
83
|
+
"type": "boolean"
|
|
84
|
+
},
|
|
85
|
+
"launchMode": {
|
|
86
|
+
"$ref": "#/definitions/LaunchMode",
|
|
87
|
+
"description": "Preferred launch mode for create-triggered launch"
|
|
88
|
+
},
|
|
89
|
+
"switch": {
|
|
90
|
+
"description": "Default to switching to the new worktree after create",
|
|
91
|
+
"type": "boolean"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"type": "object"
|
|
95
|
+
},
|
|
96
|
+
"LaunchMode": {
|
|
97
|
+
"enum": ["auto", "sesh"],
|
|
98
|
+
"type": "string"
|
|
99
|
+
},
|
|
100
|
+
"RepoConfig": {
|
|
101
|
+
"additionalProperties": false,
|
|
102
|
+
"description": "Configuration for a single repository",
|
|
103
|
+
"properties": {
|
|
104
|
+
"gitUrl": {
|
|
105
|
+
"description": "Canonical git URL for cloning the repository",
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"path": {
|
|
109
|
+
"description": "Path to the repository (relative or absolute)",
|
|
110
|
+
"type": "string"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"required": ["path"],
|
|
114
|
+
"type": "object"
|
|
115
|
+
},
|
|
116
|
+
"SwitchCommandDefaults": {
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"properties": {
|
|
119
|
+
"launchMode": {
|
|
120
|
+
"$ref": "#/definitions/LaunchMode",
|
|
121
|
+
"description": "Preferred launch mode when running switch"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"type": "object"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|