@haus-tech/haus-workflow 1.1.2 → 1.3.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/CHANGELOG.md +36 -0
- package/dist/cli.js +2045 -1179
- package/library/catalog/manifest.json +236 -338
- package/library/catalog/validation-rules.json +20 -0
- package/library/global/skills/haus-workflow/SKILL.md +35 -14
- package/library/global/skills/haus-workflow/references/clone.md +24 -0
- package/package.json +10 -10
|
@@ -130,6 +130,26 @@
|
|
|
130
130
|
"collection2",
|
|
131
131
|
"deployer-php"
|
|
132
132
|
],
|
|
133
|
+
"safetyNotesRequiredTags": [
|
|
134
|
+
"stripe",
|
|
135
|
+
"qliro",
|
|
136
|
+
"payments",
|
|
137
|
+
"bankid",
|
|
138
|
+
"myid",
|
|
139
|
+
"oidc",
|
|
140
|
+
"azure-ad",
|
|
141
|
+
"saml2"
|
|
142
|
+
],
|
|
143
|
+
"intentsRequiredTags": [
|
|
144
|
+
"stripe",
|
|
145
|
+
"qliro",
|
|
146
|
+
"payments",
|
|
147
|
+
"bankid",
|
|
148
|
+
"myid",
|
|
149
|
+
"oidc",
|
|
150
|
+
"azure-ad",
|
|
151
|
+
"saml2"
|
|
152
|
+
],
|
|
133
153
|
"alwaysAllowedTags": [
|
|
134
154
|
"haus",
|
|
135
155
|
"security",
|
|
@@ -27,7 +27,7 @@ repo's files. The short legacy aliases still work but the names below are canoni
|
|
|
27
27
|
| ----------------------------------------------------------------- | ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
28
|
| `project:init` (`setup`, `init`) | _Setup procedure below_ | project | First-time setup of an **existing** repo: adds AI skills, commands, workflow + project docs |
|
|
29
29
|
| `project:reinit` (`reinit`, `re-init`) | _Reinit procedure below_ | project | **Full re-setup.** Removes all haus-managed project files (backed up first, user content preserved), then re-runs `project:init` from scratch |
|
|
30
|
-
| `project:clone [name]` (`clone`) | _Clone procedure below_ | project |
|
|
30
|
+
| `project:clone [name]` (`clone`) | _Clone procedure below_ | project | With a `name`: find & clone one repo by name from GitHub. No name: asks single-repo-vs-workspace first, then either mode — workspace mode clones from `repos.manifest.json` |
|
|
31
31
|
| `project:cloneandsetup [name]` (`cloneandsetup`) | _Clone & setup procedure below_ | project | Run `project:clone`, then set up each repo for local dev — deps, databases, cross-repo links, and env — via each repo's `.haus-workflow/localdev.yml` (+ the workspace's order/links/env) |
|
|
32
32
|
| `project:add-skills` (`add-skills`, `opt-in`) | _Add-skills procedure below_ | project | Add optional skills, agents, or config (ESLint/Prettier) to an already-set-up project without re-running full setup |
|
|
33
33
|
| `project:refresh` (`apply`, `refresh`, `claude-md`, `regenerate`) | _Refresh procedure below_ | project | **Full non-destructive sync.** Updates the haus package + catalog first, then re-runs `project:init`'s pipeline in place — nothing is removed up front; new catalog items get added, changed ones updated, and anything removed upstream gets pruned by `apply`'s existing orphan-pruning |
|
|
@@ -43,9 +43,13 @@ repo's files. The short legacy aliases still work but the names below are canoni
|
|
|
43
43
|
**If a task argument was passed:** look it up in the alias table above. If no match, tell the user and list valid options. If matched, skip to Step 2.
|
|
44
44
|
|
|
45
45
|
**If no task was passed:** the menu has more options than one `AskUserQuestion` question can
|
|
46
|
-
hold (max 4 options per question).
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
hold (max 4 options per question). Page through all 12 tasks in batches: each page shows the
|
|
47
|
+
next 3 tasks plus a 4th "More options" choice, except the last page, which shows whatever
|
|
48
|
+
tasks remain (≤4) with no continuation choice — nothing is dropped, and this pattern
|
|
49
|
+
generalizes automatically if a task is ever added to or removed from the alias table above
|
|
50
|
+
(just re-batch in the same 3-per-page-plus-continuation shape; don't hand-tune page counts).
|
|
51
|
+
Ask each question only after the previous one is answered — never try to cram multiple pages
|
|
52
|
+
into a single `AskUserQuestion` call:
|
|
49
53
|
|
|
50
54
|
```
|
|
51
55
|
Question 1: "What would you like to do?"
|
|
@@ -55,19 +59,36 @@ Options:
|
|
|
55
59
|
2. [project] project:refresh — full non-destructive sync with the latest haus
|
|
56
60
|
(updates the haus package + catalog, then re-runs setup in place — nothing removed first)
|
|
57
61
|
3. [project] project:clone [name] — clone repos
|
|
58
|
-
(no name
|
|
59
|
-
4. [
|
|
60
|
-
(project:clone, then per-repo deps + databases + cross-repo links + env from localdev.yml)
|
|
62
|
+
(picked from here with no name yet — clone.md will ask whether it's a single repo or a whole workspace next)
|
|
63
|
+
4. [—] More options — see: project:cloneandsetup, project:add-skills, project:reinit, and 6 more
|
|
61
64
|
|
|
62
|
-
Question 2: "
|
|
65
|
+
Question 2: "What would you like to do?" (only shown if "More options" was picked)
|
|
63
66
|
Options:
|
|
64
|
-
1. [project] project:
|
|
67
|
+
1. [project] project:cloneandsetup [name] — clone repos, then set them up for local dev
|
|
68
|
+
(project:clone — asking single-repo-vs-workspace since no name is known yet — then per-repo deps + databases + cross-repo links + env from localdev.yml)
|
|
69
|
+
2. [project] project:add-skills — add optional skills, agents, or config to this project
|
|
65
70
|
(offers opt-in helpers matching your stack that aren't installed yet — no full re-setup)
|
|
66
|
-
|
|
71
|
+
3. [project] project:reinit — full re-setup from scratch
|
|
67
72
|
(removes all haus-managed project files, backed up first, then re-runs project:init)
|
|
68
|
-
|
|
73
|
+
4. [—] More options — see: update, project:doctor, project:fix, and 3 more
|
|
74
|
+
|
|
75
|
+
Question 3: "What would you like to do?" (only shown if "More options" was picked again)
|
|
76
|
+
Options:
|
|
77
|
+
1. [global] update — update haus package + catalog + global files
|
|
69
78
|
(haus update — checks npm for new version, fetches catalog, refreshes ~/.claude/)
|
|
70
|
-
|
|
79
|
+
2. [project] project:doctor — check for install drift
|
|
80
|
+
(haus doctor — a one-line plain-language verdict, healthy or a list of what needs attention)
|
|
81
|
+
3. [project] project:fix — diagnose and fix install drift
|
|
82
|
+
(runs doctor, applies the suggested fixes, confirms green)
|
|
83
|
+
4. [—] More options — see: install, uninstall, help
|
|
84
|
+
|
|
85
|
+
Question 4: "What would you like to do?" (only shown if "More options" was picked a third time — last page, no further continuation)
|
|
86
|
+
Options:
|
|
87
|
+
1. [global] install — seed ~/.claude/ with haus-owned files
|
|
88
|
+
(haus install)
|
|
89
|
+
2. [global] uninstall — remove all haus global files from ~/.claude/
|
|
90
|
+
(haus uninstall)
|
|
91
|
+
3. [—] help — explain what haus-workflow is and list all available tasks
|
|
71
92
|
(touches no files — points to docs/cli.md and docs/runbook.md for depth)
|
|
72
93
|
```
|
|
73
94
|
|
|
@@ -137,11 +158,11 @@ upstream gets pruned automatically by `apply`'s existing orphan-pruning.
|
|
|
137
158
|
|
|
138
159
|
### Clone (`project:clone`)
|
|
139
160
|
|
|
140
|
-
1. Open and follow `references/clone.md` in this skill's directory. With a `name` argument it finds and clones one matching repo from GitHub; with no argument it
|
|
161
|
+
1. Open and follow `references/clone.md` in this skill's directory. With a `name` argument it finds and clones one matching repo from GitHub; with no argument (e.g. reached via the no-arg menu) it starts with clone.md's Step 0, which asks whether this is a single repo or a whole workspace before picking a mode. This task only clones — to also install dependencies, use `project:cloneandsetup`.
|
|
141
162
|
|
|
142
163
|
### Clone & setup (`project:cloneandsetup`)
|
|
143
164
|
|
|
144
|
-
1. Open and follow `references/cloneandsetup.md` in this skill's directory — it runs the full `project:clone` flow, then sets up each cloned repo locally: selects the node version (`nvm install` from `.nvmrc`), enables corepack, installs JS/PHP dependencies, and seeds `.env`, confirming before each phase. It does not start servers.
|
|
165
|
+
1. Open and follow `references/cloneandsetup.md` in this skill's directory — it runs the full `project:clone` flow (including clone.md's Step 0 when no name is already known), then sets up each cloned repo locally: selects the node version (`nvm install` from `.nvmrc`), enables corepack, installs JS/PHP dependencies, and seeds `.env`, confirming before each phase. It does not start servers.
|
|
145
166
|
|
|
146
167
|
### Add optional skills (`project:add-skills`)
|
|
147
168
|
|
|
@@ -6,6 +6,30 @@ Cloning a single repo is always `haus clone <url> [dir]`. This procedure picks _
|
|
|
6
6
|
|
|
7
7
|
**Always ask before cloning — never assume.** The user may already have the repos on disk. Do not start cloning until they have confirmed. A missing `repos.local.json` does **not** mean they want a fresh clone; it just means nothing is recorded yet — you must still ask.
|
|
8
8
|
|
|
9
|
+
## Step 0 — determine the mode, if not already known
|
|
10
|
+
|
|
11
|
+
`project:clone <name>` typed directly already tells you the mode (name given → Mode A). But
|
|
12
|
+
whenever this procedure is reached with **no name** — whether from the no-arg menu
|
|
13
|
+
(`SKILL.md` Step 1, where the option is just a label) or a bare `project:clone`/`clone` with
|
|
14
|
+
no argument — do **not** silently fall through to Mode B (workspace); ask first, via
|
|
15
|
+
`AskUserQuestion`:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
"Clone a single repo, or a whole workspace?"
|
|
19
|
+
Options:
|
|
20
|
+
1. A single repo — I'll tell you its name
|
|
21
|
+
2. A whole workspace — clone everything in repos.manifest.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- **Single repo** — ask for the name/identifier as a follow-up (plain text is fine; it feeds
|
|
25
|
+
straight into Mode A's GitHub search below, which already handles 0/1/2+ matches), then
|
|
26
|
+
continue with Mode A.
|
|
27
|
+
- **Whole workspace** — continue with Mode B, unchanged.
|
|
28
|
+
|
|
29
|
+
Skip this step entirely when a name is already known (typed as an argument, or already
|
|
30
|
+
established earlier in the conversation) — go straight to Mode A in that case, exactly as
|
|
31
|
+
before this step existed.
|
|
32
|
+
|
|
9
33
|
## Mode A — a project name was given (`project:clone <name>`)
|
|
10
34
|
|
|
11
35
|
Find one repo by name on GitHub and clone it. Does **not** require a workspace or `repos.manifest.json`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haus-tech/haus-workflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Haus AI workflow CLI for Claude Code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -46,25 +46,25 @@
|
|
|
46
46
|
"diff": "8.0.4",
|
|
47
47
|
"execa": "9.6.1",
|
|
48
48
|
"fast-glob": "3.3.3",
|
|
49
|
-
"fs-extra": "11.
|
|
49
|
+
"fs-extra": "11.4.0",
|
|
50
50
|
"semver": "7.8.5",
|
|
51
51
|
"yaml": "2.9.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@release-it/conventional-changelog": "11.0.1",
|
|
55
55
|
"@types/fs-extra": "11.0.4",
|
|
56
|
-
"@types/node": "22.20.
|
|
56
|
+
"@types/node": "22.20.1",
|
|
57
57
|
"@types/semver": "7.7.1",
|
|
58
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
59
|
-
"@typescript-eslint/parser": "8.
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "8.65.0",
|
|
59
|
+
"@typescript-eslint/parser": "8.65.0",
|
|
60
60
|
"c8": "11.0.0",
|
|
61
61
|
"esbuild": "0.28.1",
|
|
62
|
-
"eslint": "9.39.
|
|
62
|
+
"eslint": "9.39.5",
|
|
63
63
|
"eslint-plugin-import": "2.32.0",
|
|
64
64
|
"lefthook": "1.13.6",
|
|
65
|
-
"prettier": "3.
|
|
66
|
-
"release-it": "20.2.
|
|
67
|
-
"tsx": "4.
|
|
65
|
+
"prettier": "3.9.6",
|
|
66
|
+
"release-it": "20.2.1",
|
|
67
|
+
"tsx": "4.23.1",
|
|
68
68
|
"typescript": "5.9.3"
|
|
69
69
|
},
|
|
70
70
|
"engines": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
|
-
"packageManager": "yarn@4.
|
|
76
|
+
"packageManager": "yarn@4.18.0",
|
|
77
77
|
"dependenciesMeta": {
|
|
78
78
|
"lefthook": {
|
|
79
79
|
"built": true
|