@haus-tech/haus-workflow 0.13.1 → 0.14.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 +15 -0
- package/dist/cli.js +967 -359
- package/library/catalog/manifest.json +1 -1
- package/package.json +5 -1
- package/tests/fixtures/catalog/policy-gates-manifest.json +120 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haus-tech/haus-workflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Haus AI workflow CLI for Claude Code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"build": "tsup src/cli.ts --format esm --dts --clean --out-dir dist --external @inquirer/checkbox",
|
|
27
27
|
"dev": "tsx src/cli.ts",
|
|
28
28
|
"test": "node --import tsx --test tests/**/*.test.js",
|
|
29
|
+
"test:coverage": "c8 yarn test",
|
|
30
|
+
"coverage:check": "c8 --check-coverage yarn test",
|
|
29
31
|
"lint": "eslint src scripts",
|
|
30
32
|
"format:check": "prettier --check .",
|
|
31
33
|
"format": "prettier --write .",
|
|
@@ -38,6 +40,7 @@
|
|
|
38
40
|
"release:dry": "GITHUB_TOKEN=$(gh auth token) release-it --dry-run",
|
|
39
41
|
"prepack": "yarn build",
|
|
40
42
|
"verify": "yarn typecheck && yarn typecheck:scripts && yarn lint && yarn build && yarn test",
|
|
43
|
+
"verify:full": "yarn verify && yarn coverage:check",
|
|
41
44
|
"postinstall": "node ./scripts/postinstall.mjs || true",
|
|
42
45
|
"prepare": "lefthook install || true",
|
|
43
46
|
"security:audit": "yarn npm audit -A -R --severity high --environment production"
|
|
@@ -62,6 +65,7 @@
|
|
|
62
65
|
"@types/semver": "7.7.1",
|
|
63
66
|
"@typescript-eslint/eslint-plugin": "8.59.3",
|
|
64
67
|
"@typescript-eslint/parser": "8.59.3",
|
|
68
|
+
"c8": "11.0.0",
|
|
65
69
|
"eslint": "9.39.4",
|
|
66
70
|
"eslint-plugin-import": "2.32.0",
|
|
67
71
|
"lefthook": "1.13.6",
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"_note": "Policy gates test fixture. One item per gate exercised by recommend-eligibility.test.js.",
|
|
4
|
+
"items": [
|
|
5
|
+
{
|
|
6
|
+
"id": "test.unsupported-python",
|
|
7
|
+
"source": "haus",
|
|
8
|
+
"type": "skill",
|
|
9
|
+
"path": "skills/test.unsupported-python",
|
|
10
|
+
"title": "Test: Unsupported Python",
|
|
11
|
+
"purpose": "Triggers UNSUPPORTED gate (python in tags).",
|
|
12
|
+
"tags": ["python", "backend"],
|
|
13
|
+
"repoRoles": [],
|
|
14
|
+
"default": false,
|
|
15
|
+
"tokenEstimate": 100
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "test.curated-not-approved",
|
|
19
|
+
"source": "curated",
|
|
20
|
+
"type": "skill",
|
|
21
|
+
"path": "skills/test.curated-not-approved",
|
|
22
|
+
"title": "Test: Curated Not Approved",
|
|
23
|
+
"purpose": "Triggers curated-not-approved gate (reviewStatus:candidate).",
|
|
24
|
+
"tags": ["frontend"],
|
|
25
|
+
"repoRoles": [],
|
|
26
|
+
"reviewStatus": "candidate",
|
|
27
|
+
"default": false,
|
|
28
|
+
"tokenEstimate": 100
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "test.curated-risk-blocked",
|
|
32
|
+
"source": "curated",
|
|
33
|
+
"type": "skill",
|
|
34
|
+
"path": "skills/test.curated-risk-blocked",
|
|
35
|
+
"title": "Test: Curated Risk Blocked",
|
|
36
|
+
"purpose": "Triggers curated-risk-blocked gate (reviewStatus:approved but riskLevel:blocked).",
|
|
37
|
+
"tags": ["frontend"],
|
|
38
|
+
"repoRoles": [],
|
|
39
|
+
"reviewStatus": "approved",
|
|
40
|
+
"riskLevel": "blocked",
|
|
41
|
+
"default": false,
|
|
42
|
+
"tokenEstimate": 100
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "test.env-management",
|
|
46
|
+
"source": "haus",
|
|
47
|
+
"type": "skill",
|
|
48
|
+
"path": "skills/test.env-management",
|
|
49
|
+
"title": "Test: Sensitive Secrets Item",
|
|
50
|
+
"purpose": "Triggers sensitive-policy gate (secrets in tags, matched by SENSITIVE_ITEM_KEYWORDS).",
|
|
51
|
+
"tags": ["secrets", "workflow"],
|
|
52
|
+
"repoRoles": [],
|
|
53
|
+
"default": false,
|
|
54
|
+
"tokenEstimate": 100
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "test.third-party-unapproved",
|
|
58
|
+
"source": "third-party-plugin",
|
|
59
|
+
"type": "skill",
|
|
60
|
+
"path": "skills/test.third-party-unapproved",
|
|
61
|
+
"title": "Test: Third-Party Unapproved",
|
|
62
|
+
"purpose": "Triggers source-approval gate (non-haus, non-curated, not in sources-report.json).",
|
|
63
|
+
"tags": ["typescript"],
|
|
64
|
+
"repoRoles": [],
|
|
65
|
+
"default": false,
|
|
66
|
+
"tokenEstimate": 100
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "test.requires-svelte",
|
|
70
|
+
"source": "haus",
|
|
71
|
+
"type": "skill",
|
|
72
|
+
"path": "skills/test.requires-svelte",
|
|
73
|
+
"title": "Test: Requires Svelte",
|
|
74
|
+
"purpose": "Triggers requiresAny unsatisfied gate when svelte not in context.",
|
|
75
|
+
"tags": ["svelte"],
|
|
76
|
+
"repoRoles": [],
|
|
77
|
+
"requiresAny": [{ "dependency": "svelte" }],
|
|
78
|
+
"default": false,
|
|
79
|
+
"tokenEstimate": 100
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "test.default-baseline",
|
|
83
|
+
"source": "haus",
|
|
84
|
+
"type": "skill",
|
|
85
|
+
"path": "skills/test.default-baseline",
|
|
86
|
+
"title": "Test: Default Baseline",
|
|
87
|
+
"purpose": "Passes all gates because default:true. Used to verify tokenEstimate is preserved.",
|
|
88
|
+
"tags": ["workflow"],
|
|
89
|
+
"repoRoles": [],
|
|
90
|
+
"default": true,
|
|
91
|
+
"tokenEstimate": 999
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "test.role-matched",
|
|
95
|
+
"source": "haus",
|
|
96
|
+
"type": "skill",
|
|
97
|
+
"path": "skills/test.role-matched",
|
|
98
|
+
"title": "Test: Role Matched",
|
|
99
|
+
"purpose": "Recommended when context has nextjs stack. Tests positive matching path.",
|
|
100
|
+
"tags": ["nextjs", "frontend"],
|
|
101
|
+
"repoRoles": ["next-app"],
|
|
102
|
+
"requiresAny": [{ "stack": "nextjs" }],
|
|
103
|
+
"default": false,
|
|
104
|
+
"tokenEstimate": 100
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "haus.nx21-monorepo-patterns",
|
|
108
|
+
"source": "haus",
|
|
109
|
+
"type": "skill",
|
|
110
|
+
"path": "skills/haus.nx21-monorepo-patterns",
|
|
111
|
+
"title": "Haus Nx 21 Monorepo Patterns",
|
|
112
|
+
"purpose": "Triggers required-role-missing gate when nx-monorepo role is absent. Hardcoded check in recommend().",
|
|
113
|
+
"tags": ["nx", "monorepo"],
|
|
114
|
+
"repoRoles": ["nx-monorepo"],
|
|
115
|
+
"requiresAny": [{ "stack": "nx" }],
|
|
116
|
+
"default": false,
|
|
117
|
+
"tokenEstimate": 100
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|