arashi 1.37.0 → 1.39.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 +1 -10
- package/package.json +5 -4
- package/schema/config.schema.json +40 -0
- package/schema/user-config.schema.json +193 -0
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ Verify the installation:
|
|
|
36
36
|
aw --version
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
`aw` is the preferred command name. `arashi` remains available for existing scripts and workflows. See the [installation guide](
|
|
39
|
+
`aw` is the preferred command name. `arashi` remains available for existing scripts and workflows. See the [installation guide](https://arashi.haphazard.dev/getting-started/) for version pinning, manual installation, and troubleshooting, or the [`update` command guide](https://arashi.haphazard.dev/commands/update/) for upgrades.
|
|
40
40
|
|
|
41
41
|
## Quick start
|
|
42
42
|
|
|
@@ -84,14 +84,6 @@ For a single repository without persisted Arashi configuration, use `aw init --z
|
|
|
84
84
|
|
|
85
85
|
Run `aw --help`, `aw <command> --help`, or use the [complete command reference](https://arashi.haphazard.dev/commands/) for options and examples.
|
|
86
86
|
|
|
87
|
-
### Finishing a coordinated workspace
|
|
88
|
-
|
|
89
|
-
`aw finish <branch-or-parent-path> --dry-run` inventories the registered parent and configured children, refreshes named base/upstream refs into disposable private Git storage, and previews the exact cleanup scope and remove hooks. It does not run hooks, ask for completion/discard/removal consent, or write managed worktrees, refs, config, or index; network metadata refresh is permitted. A blocked or unknown preview still exits successfully **as a preview**, not as cleanup authorization. In main, a human TTY can omit the target to select one parent; selection is not consent. JSON/non-TTY requires an explicit target.
|
|
90
|
-
|
|
91
|
-
Current `repos.<key>.baseBranch` overrides workspace `baseBranch` (`meta.baseBranch` overrides it for the parent). This is **current policy**, not a record of the create-time base or invocation-only overrides. With no configured base, preview leaves integration unknown; interactive execution can supply a repository-specific remote and full `refs/heads/...` target without saving it. Exact inspected HEAD ancestry of a freshly fetched named base can prove integration, but a negative ancestry result cannot prove non-integration after squash, rebase, or cherry-pick. GitHub PR correlation is attempted when ancestry is unproven and head/base remotes identify the same GitHub repository, including during dry-run: finish runs `gh auth status` and up to three paginated `gh api` requests. A match is only a correlation, not immutable historical merge-time HEAD proof; squash/rebase and other unproven completion still require explicit per-repository manual judgment in a human TTY. `--force` never supplies that judgment.
|
|
92
|
-
|
|
93
|
-
Run `aw finish <target>` to review unknown completion, then separately consent to discarding dirty, untracked, or ignored local data and absent/ahead-upstream state and to removal. `--force` covers the latter two consents only; `--keep-branches` retains local branches. `--json` / `-j` emits one schema-versioned report and never prompts. Finish rechecks identity, policy, fresh evidence, and exact remove actions after consent and after successful pre-remove hooks before mutation. Hooks may already have side effects if that gate aborts; once removal starts, partial failures retain the existing remove ledger and require manual inspection/retry. External Git/filesystem actors can still race after the final gate: finish does **not** make deletion atomic or serialize other Arashi commands. It does not merge, push, delete remote branches, or detect later reverts.
|
|
94
|
-
|
|
95
87
|
## Shell integration
|
|
96
88
|
|
|
97
89
|
Install shell integration for parent-shell directory switching and completion in Bash, Zsh, or Fish:
|
|
@@ -133,7 +125,6 @@ files, and the containing install directory.
|
|
|
133
125
|
- [Hooks](https://arashi.haphazard.dev/workflows/hooks/)
|
|
134
126
|
- [Editor and terminal integrations](https://arashi.haphazard.dev/workflows/)
|
|
135
127
|
- [Agents and automation](https://arashi.haphazard.dev/workflows/agents-and-specs/#automation-and-json)
|
|
136
|
-
- [Local configuration reference](./docs/configuration.md)
|
|
137
128
|
|
|
138
129
|
## Contributing
|
|
139
130
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arashi",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.39.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",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"bin/aw.bat",
|
|
41
41
|
"bin/aw.ps1",
|
|
42
42
|
"schema/config.schema.json",
|
|
43
|
+
"schema/user-config.schema.json",
|
|
43
44
|
"scripts/uninstall.sh",
|
|
44
45
|
"scripts/uninstall.ps1",
|
|
45
46
|
"README.md",
|
|
@@ -73,9 +74,9 @@
|
|
|
73
74
|
"lint": "oxlint -D no-explicit-any .",
|
|
74
75
|
"lint:fix": "oxlint --fix -D no-explicit-any .",
|
|
75
76
|
"lint:ci": "oxlint --format github -D no-explicit-any .",
|
|
76
|
-
"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",
|
|
77
|
-
"schema:publish": "pnpm run schema:generate && oxfmt --config .oxfmtrc.json --write schema/config.schema.json",
|
|
78
|
-
"schema:check": "pnpm run schema:publish && git diff --exit-code -- schema/config.schema.json",
|
|
77
|
+
"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 && ts-json-schema-generator --tsconfig tsconfig.schema.json --path src/lib/user-config.ts --type UserConfig --expose export --jsDoc extended --out schema/user-config.schema.json",
|
|
78
|
+
"schema:publish": "pnpm run schema:generate && oxfmt --config .oxfmtrc.json --write schema/config.schema.json schema/user-config.schema.json",
|
|
79
|
+
"schema:check": "pnpm run schema:publish && git diff --exit-code -- schema/config.schema.json schema/user-config.schema.json",
|
|
79
80
|
"contract:generate": "node scripts/contracts/cli-commands.ts && node scripts/contracts/inline-lifecycle-hooks.ts && node scripts/contracts/executable-distribution.ts",
|
|
80
81
|
"contract:check": "node scripts/contracts/cli-commands.ts --check && node scripts/contracts/inline-lifecycle-hooks.ts --check && node scripts/contracts/executable-distribution.ts --check",
|
|
81
82
|
"executable-contract:generate": "node scripts/contracts/executable-distribution.ts",
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
},
|
|
14
14
|
"switch": {
|
|
15
15
|
"$ref": "#/definitions/SwitchCommandDefaults"
|
|
16
|
+
},
|
|
17
|
+
"t3": {
|
|
18
|
+
"$ref": "#/definitions/T3Settings"
|
|
16
19
|
}
|
|
17
20
|
},
|
|
18
21
|
"type": "object"
|
|
@@ -290,6 +293,43 @@
|
|
|
290
293
|
"enum": ["auto", "cd", "launch", "sesh", "herdr"],
|
|
291
294
|
"type": "string"
|
|
292
295
|
},
|
|
296
|
+
"T3Settings": {
|
|
297
|
+
"additionalProperties": false,
|
|
298
|
+
"description": "Personal handoff choices; credentials and transport addresses never belong here.",
|
|
299
|
+
"properties": {
|
|
300
|
+
"baseDir": {
|
|
301
|
+
"description": "Official T3 data directory (absolute path).",
|
|
302
|
+
"minLength": 1,
|
|
303
|
+
"pattern": "^(?=(?:/|[A-Za-z]:[\\\\/]|\\\\\\\\))(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
304
|
+
"type": "string"
|
|
305
|
+
},
|
|
306
|
+
"cli": {
|
|
307
|
+
"description": "Installed official t3 executable (command name or absolute path).",
|
|
308
|
+
"minLength": 1,
|
|
309
|
+
"pattern": "^(?=(?:/|[A-Za-z]:[\\\\/]|\\\\\\\\|[^/\\\\]+$))(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
310
|
+
"type": "string"
|
|
311
|
+
},
|
|
312
|
+
"effort": {
|
|
313
|
+
"description": "Supported reasoning effort.",
|
|
314
|
+
"minLength": 1,
|
|
315
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
316
|
+
"type": "string"
|
|
317
|
+
},
|
|
318
|
+
"model": {
|
|
319
|
+
"description": "Supported model slug or alias.",
|
|
320
|
+
"minLength": 1,
|
|
321
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
322
|
+
"type": "string"
|
|
323
|
+
},
|
|
324
|
+
"provider": {
|
|
325
|
+
"description": "Configured provider instance id, or an unambiguous driver name.",
|
|
326
|
+
"minLength": 1,
|
|
327
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
328
|
+
"type": "string"
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
"type": "object"
|
|
332
|
+
},
|
|
293
333
|
"WorktreeNamingBranchSlashes": {
|
|
294
334
|
"enum": ["preserve", "flatten"],
|
|
295
335
|
"type": "string"
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$ref": "#/definitions/UserConfig",
|
|
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
|
+
"editors": {
|
|
12
|
+
"$ref": "#/definitions/EditorDefaultsConfig"
|
|
13
|
+
},
|
|
14
|
+
"switch": {
|
|
15
|
+
"$ref": "#/definitions/SwitchCommandDefaults"
|
|
16
|
+
},
|
|
17
|
+
"t3": {
|
|
18
|
+
"$ref": "#/definitions/T3Settings"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"type": "object"
|
|
22
|
+
},
|
|
23
|
+
"ConfigVersion": {
|
|
24
|
+
"const": "1.0.0",
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"CreateCommandDefaults": {
|
|
28
|
+
"additionalProperties": false,
|
|
29
|
+
"properties": {
|
|
30
|
+
"launch": {
|
|
31
|
+
"$ref": "#/definitions/CreateLaunchMode",
|
|
32
|
+
"description": "Post-create launch choice; omitted preserves built-in no-launch behavior"
|
|
33
|
+
},
|
|
34
|
+
"switch": {
|
|
35
|
+
"description": "Default to switching to the new worktree after create",
|
|
36
|
+
"type": "boolean"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"type": "object"
|
|
40
|
+
},
|
|
41
|
+
"CreateLaunchMode": {
|
|
42
|
+
"enum": ["none", "auto", "sesh", "herdr"],
|
|
43
|
+
"type": "string"
|
|
44
|
+
},
|
|
45
|
+
"EditorCommandDefaults": {
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"properties": {
|
|
48
|
+
"create": {
|
|
49
|
+
"$ref": "#/definitions/EditorCreateCommandDefaults",
|
|
50
|
+
"description": "Editor-scoped create defaults"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"type": "object"
|
|
54
|
+
},
|
|
55
|
+
"EditorCreateCommandDefaults": {
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"properties": {
|
|
58
|
+
"launch": {
|
|
59
|
+
"$ref": "#/definitions/CreateLaunchMode",
|
|
60
|
+
"description": "Post-create launch choice; omitted preserves built-in no-launch behavior"
|
|
61
|
+
},
|
|
62
|
+
"switch": {
|
|
63
|
+
"description": "Default to switching to the new worktree after create",
|
|
64
|
+
"type": "boolean"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"type": "object"
|
|
68
|
+
},
|
|
69
|
+
"EditorDefaultsConfig": {
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"properties": {
|
|
72
|
+
"cursor": {
|
|
73
|
+
"$ref": "#/definitions/EditorCommandDefaults"
|
|
74
|
+
},
|
|
75
|
+
"kiro": {
|
|
76
|
+
"$ref": "#/definitions/EditorCommandDefaults"
|
|
77
|
+
},
|
|
78
|
+
"vscode": {
|
|
79
|
+
"$ref": "#/definitions/EditorCommandDefaults"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"type": "object"
|
|
83
|
+
},
|
|
84
|
+
"SwitchCommandDefaults": {
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"properties": {
|
|
87
|
+
"mode": {
|
|
88
|
+
"$ref": "#/definitions/SwitchMode",
|
|
89
|
+
"description": "Preferred switch behavior and launcher when running switch"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"type": "object"
|
|
93
|
+
},
|
|
94
|
+
"SwitchMode": {
|
|
95
|
+
"enum": ["auto", "cd", "launch", "sesh", "herdr"],
|
|
96
|
+
"type": "string"
|
|
97
|
+
},
|
|
98
|
+
"T3Settings": {
|
|
99
|
+
"additionalProperties": false,
|
|
100
|
+
"description": "Personal handoff choices; credentials and transport addresses never belong here.",
|
|
101
|
+
"properties": {
|
|
102
|
+
"baseDir": {
|
|
103
|
+
"description": "Official T3 data directory (absolute path).",
|
|
104
|
+
"minLength": 1,
|
|
105
|
+
"pattern": "^(?=(?:/|[A-Za-z]:[\\\\/]|\\\\\\\\))(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"cli": {
|
|
109
|
+
"description": "Installed official t3 executable (command name or absolute path).",
|
|
110
|
+
"minLength": 1,
|
|
111
|
+
"pattern": "^(?=(?:/|[A-Za-z]:[\\\\/]|\\\\\\\\|[^/\\\\]+$))(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
112
|
+
"type": "string"
|
|
113
|
+
},
|
|
114
|
+
"effort": {
|
|
115
|
+
"description": "Supported reasoning effort.",
|
|
116
|
+
"minLength": 1,
|
|
117
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
118
|
+
"type": "string"
|
|
119
|
+
},
|
|
120
|
+
"model": {
|
|
121
|
+
"description": "Supported model slug or alias.",
|
|
122
|
+
"minLength": 1,
|
|
123
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
124
|
+
"type": "string"
|
|
125
|
+
},
|
|
126
|
+
"provider": {
|
|
127
|
+
"description": "Configured provider instance id, or an unambiguous driver name.",
|
|
128
|
+
"minLength": 1,
|
|
129
|
+
"pattern": "^(?=[\\s\\S]*\\S)[^\\u0000-\\u001F]+$(?![\\s\\S])",
|
|
130
|
+
"type": "string"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"type": "object"
|
|
134
|
+
},
|
|
135
|
+
"UserConfig": {
|
|
136
|
+
"additionalProperties": false,
|
|
137
|
+
"properties": {
|
|
138
|
+
"$schema": {
|
|
139
|
+
"description": "JSON Schema URL for editor validation/autocomplete",
|
|
140
|
+
"type": "string"
|
|
141
|
+
},
|
|
142
|
+
"defaults": {
|
|
143
|
+
"$ref": "#/definitions/CommandDefaultsConfig",
|
|
144
|
+
"description": "Personal command and editor defaults"
|
|
145
|
+
},
|
|
146
|
+
"version": {
|
|
147
|
+
"$ref": "#/definitions/ConfigVersion",
|
|
148
|
+
"description": "User configuration schema version"
|
|
149
|
+
},
|
|
150
|
+
"worktreeNaming": {
|
|
151
|
+
"$ref": "#/definitions/WorktreeNamingConfig",
|
|
152
|
+
"description": "Personal fallback worktree naming policy"
|
|
153
|
+
},
|
|
154
|
+
"worktreesDir": {
|
|
155
|
+
"description": "Personal fallback worktree directory; absolute paths are repository-qualified",
|
|
156
|
+
"type": "string"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"required": ["version"],
|
|
160
|
+
"type": "object"
|
|
161
|
+
},
|
|
162
|
+
"WorktreeNamingBranchSlashes": {
|
|
163
|
+
"enum": ["preserve", "flatten"],
|
|
164
|
+
"type": "string"
|
|
165
|
+
},
|
|
166
|
+
"WorktreeNamingConfig": {
|
|
167
|
+
"additionalProperties": false,
|
|
168
|
+
"description": "Filesystem naming policy for configured create destinations.",
|
|
169
|
+
"properties": {
|
|
170
|
+
"branchSlashes": {
|
|
171
|
+
"$ref": "#/definitions/WorktreeNamingBranchSlashes",
|
|
172
|
+
"description": "Preserve branch slash hierarchy or flatten slashes to hyphens"
|
|
173
|
+
},
|
|
174
|
+
"maxPathLength": {
|
|
175
|
+
"description": "Maximum UTF-16 code units for each absolute newly planned configured-worktree destination",
|
|
176
|
+
"maximum": 2147483647,
|
|
177
|
+
"minimum": 1,
|
|
178
|
+
"multipleOf": 1,
|
|
179
|
+
"type": "number"
|
|
180
|
+
},
|
|
181
|
+
"style": {
|
|
182
|
+
"$ref": "#/definitions/WorktreeNamingStyle",
|
|
183
|
+
"description": "Repository-shape-aware default, branch-only, or repository-prefixed naming"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"type": "object"
|
|
187
|
+
},
|
|
188
|
+
"WorktreeNamingStyle": {
|
|
189
|
+
"enum": ["default", "branch", "repo-branch"],
|
|
190
|
+
"type": "string"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|