@haus-tech/haus-workflow 1.2.0 → 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.
@@ -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 | No name: clone a **workspace**'s repos from `repos.manifest.json`. With a `name`: find & clone one repo by name from GitHub |
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). Ask two separate questions, one after another — first
47
- Question 1, read the answer, then ask Question 2 (a second, sequential `AskUserQuestion`
48
- call; do not try to cram both into a single question):
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: clone a workspace from repos.manifest.json; with a name: find & clone one repo by name from GitHub)
59
- 4. [project] project:cloneandsetup [name] — clone repos, then set them up for local dev
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: "Anything else?"
65
+ Question 2: "What would you like to do?" (only shown if "More options" was picked)
63
66
  Options:
64
- 1. [project] project:add-skills — add optional skills, agents, or config to this 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
- 2. [project] project:reinit — full re-setup from scratch
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
- 3. [global] update — update haus package + catalog + global files
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
- 4. [—] help — explain what haus-workflow is and list all available tasks
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 clones a workspace's repos from `repos.manifest.json`. This task only clones — to also install dependencies, use `project:cloneandsetup`.
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.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -73,7 +73,7 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "packageManager": "yarn@4.15.0",
76
+ "packageManager": "yarn@4.18.0",
77
77
  "dependenciesMeta": {
78
78
  "lefthook": {
79
79
  "built": true