@haus-tech/haus-workflow 0.2.2 → 0.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 +8 -0
- package/dist/cli.js +22 -4
- package/library/catalog/allowed-stacks.json +4 -1
- package/library/catalog/manifest.json +96 -1
- package/package.json +1 -1
- package/tests/fixtures/catalog/manifest.json +48 -3
- package/tests/fixtures/catalog/skills/jest-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/vitest-patterns/SKILL.md +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.2.2...v0.3.0) (2026-05-28)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **catalog:** allow vitest, jest, and redis tags ([ea08ab6](https://github.com/WeAreHausTech/haus-workflow/commit/ea08ab6cbd66a80bbcb94ce99c5d338dbaefc184))
|
|
8
|
+
* **scanner:** detect elementor, ACF/JetEngine, redis (T5-T7) ([262925c](https://github.com/WeAreHausTech/haus-workflow/commit/262925c02e695e9469c9c1ee4e9c03c87f9e1478))
|
|
9
|
+
* **scanner:** detect vitest and jest (T3, T4) ([1b917af](https://github.com/WeAreHausTech/haus-workflow/commit/1b917af88d10c8ca443dd8d6c9b5fe3b27a850fa))
|
|
10
|
+
|
|
3
11
|
## [0.2.2](https://github.com/WeAreHausTech/haus-workflow/compare/v0.2.1...v0.2.2) (2026-05-28)
|
|
4
12
|
|
|
5
13
|
### Bug Fixes
|
package/dist/cli.js
CHANGED
|
@@ -1427,13 +1427,17 @@ function detectRoles(deps, files) {
|
|
|
1427
1427
|
if (files.some((f) => f.endsWith("turbo.json"))) roles.add("turbo-monorepo");
|
|
1428
1428
|
if (files.some((f) => f.endsWith("artisan")) || deps.includes("laravel/framework")) roles.add("laravel-app");
|
|
1429
1429
|
if (deps.includes("laravel/nova")) roles.add("laravel-nova-app");
|
|
1430
|
-
|
|
1430
|
+
const hasWpConfig = files.some((f) => f.endsWith("wp-config.php"));
|
|
1431
|
+
const hasBedrockLayout = files.some((f) => f.includes("web/app")) || deps.includes("roots/wordpress");
|
|
1432
|
+
if (hasWpConfig && hasBedrockLayout) {
|
|
1431
1433
|
roles.add("wordpress-bedrock-site");
|
|
1432
1434
|
roles.add("wordpress-site");
|
|
1433
|
-
}
|
|
1434
|
-
if (files.some((f) => f.endsWith("wp-config.php")) && !files.some((f) => f.includes("web/app"))) {
|
|
1435
|
+
} else if (hasWpConfig) {
|
|
1435
1436
|
roles.add("wordpress-vanilla-site");
|
|
1436
1437
|
roles.add("wordpress-site");
|
|
1438
|
+
} else if (deps.includes("roots/wordpress")) {
|
|
1439
|
+
roles.add("wordpress-bedrock-site");
|
|
1440
|
+
roles.add("wordpress-site");
|
|
1437
1441
|
}
|
|
1438
1442
|
if (files.some((f) => f.endsWith(".csproj") || f.endsWith(".sln"))) roles.add("dotnet-service");
|
|
1439
1443
|
if (deps.includes("express")) roles.add("express-service");
|
|
@@ -1465,17 +1469,31 @@ async function detectStacks(root, deps, files, packageManager) {
|
|
|
1465
1469
|
if (files.some((f) => f.endsWith(".graphql") || f.endsWith("schema.graphql"))) add("backend", "graphql");
|
|
1466
1470
|
if (deps.includes("laravel/framework")) add("backend", "laravel");
|
|
1467
1471
|
if (files.some((f) => f.includes("app/Providers/") || f.includes("routes/"))) add("backend", "laravel");
|
|
1468
|
-
if (files.some((f) => f.endsWith("wp-config.php"))) add("backend", "wordpress");
|
|
1472
|
+
if (files.some((f) => f.endsWith("wp-config.php")) || deps.includes("roots/wordpress")) add("backend", "wordpress");
|
|
1473
|
+
if (deps.includes("wpackagist-plugin/elementor") || deps.includes("wearehaus/elementor-pro") || deps.includes("wpackagist-theme/hello-elementor")) {
|
|
1474
|
+
add("backend", "elementor");
|
|
1475
|
+
}
|
|
1476
|
+
if (deps.includes("wearehaus/advanced-custom-fields-pro") || deps.includes("wpackagist-plugin/advanced-custom-fields")) {
|
|
1477
|
+
add("backend", "acf-pro");
|
|
1478
|
+
}
|
|
1479
|
+
if (deps.includes("wearehaus/jet-engine")) add("backend", "jetengine");
|
|
1480
|
+
if (deps.includes("wearehaus/jet-smart-filters")) add("backend", "jetsmartfilters");
|
|
1481
|
+
if (deps.includes("wearehaus/gravityforms")) add("backend", "gravityforms");
|
|
1469
1482
|
if (files.some((f) => f.endsWith(".csproj") || f.endsWith(".sln"))) add("backend", "dotnet");
|
|
1470
1483
|
if (deps.includes("@playwright/test")) add("testing", "playwright");
|
|
1471
1484
|
if (files.some((f) => f.includes(".storybook"))) add("testing", "storybook");
|
|
1472
1485
|
if (deps.some((d) => d.startsWith("@testing-library/"))) add("testing", "testing-library");
|
|
1473
1486
|
if (files.some((f) => f.endsWith("phpunit.xml"))) add("testing", "phpunit");
|
|
1474
1487
|
if (deps.some((d) => d.startsWith("@storybook/"))) add("testing", "storybook");
|
|
1488
|
+
if (deps.includes("vitest")) add("testing", "vitest");
|
|
1489
|
+
if (deps.includes("jest") || deps.includes("jest-environment-jsdom")) add("testing", "jest");
|
|
1475
1490
|
if (deps.includes("pg")) add("databases", "postgresql");
|
|
1476
1491
|
if (deps.includes("mariadb") || deps.includes("mysql2")) add("databases", "mariadb");
|
|
1477
1492
|
if (deps.includes("mssql")) add("databases", "mssql");
|
|
1478
1493
|
if (deps.includes("@elastic/elasticsearch")) add("databases", "elasticsearch");
|
|
1494
|
+
if (deps.includes("predis/predis") || deps.includes("ioredis") || deps.includes("redis")) {
|
|
1495
|
+
add("databases", "redis");
|
|
1496
|
+
}
|
|
1479
1497
|
if (await hasNeedle(root, files, "openid")) add("auth", "oidc");
|
|
1480
1498
|
if (await hasNeedle(root, files, "AZURE_AD")) add("auth", "azure-ad");
|
|
1481
1499
|
if (await hasNeedle(root, files, "BANKID")) add("auth", "bankid");
|
|
@@ -888,6 +888,15 @@
|
|
|
888
888
|
},
|
|
889
889
|
{
|
|
890
890
|
"stack": "wordpress"
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"stack": "elementor"
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
"stack": "acf-pro"
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
"stack": "jetengine"
|
|
891
900
|
}
|
|
892
901
|
],
|
|
893
902
|
"ecosystem": "wordpress",
|
|
@@ -985,7 +994,8 @@
|
|
|
985
994
|
"postgresql",
|
|
986
995
|
"mariadb",
|
|
987
996
|
"mssql",
|
|
988
|
-
"elasticsearch"
|
|
997
|
+
"elasticsearch",
|
|
998
|
+
"redis"
|
|
989
999
|
],
|
|
990
1000
|
"repoRoles": [],
|
|
991
1001
|
"requiresAny": [
|
|
@@ -1000,6 +1010,9 @@
|
|
|
1000
1010
|
},
|
|
1001
1011
|
{
|
|
1002
1012
|
"stack": "elasticsearch"
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
"stack": "redis"
|
|
1003
1016
|
}
|
|
1004
1017
|
],
|
|
1005
1018
|
"tokenEstimate": 1700,
|
|
@@ -1078,6 +1091,88 @@
|
|
|
1078
1091
|
"installMode": "copy-selected",
|
|
1079
1092
|
"ecosystem": "testing"
|
|
1080
1093
|
},
|
|
1094
|
+
{
|
|
1095
|
+
"id": "haus.vitest-patterns",
|
|
1096
|
+
"version": "1.0.0",
|
|
1097
|
+
"source": "haus",
|
|
1098
|
+
"type": "skill",
|
|
1099
|
+
"path": "skills/vitest-patterns",
|
|
1100
|
+
"title": "Haus Vitest patterns",
|
|
1101
|
+
"purpose": "Guide Vitest unit/integration test structure, mocking, and coverage config.",
|
|
1102
|
+
"whenToUse": "Use when writing or modifying Vitest tests in TypeScript/JS frontends and Node services.",
|
|
1103
|
+
"whenNotToUse": "Do not use for Jest, Playwright, or PHPUnit test tasks.",
|
|
1104
|
+
"references": [
|
|
1105
|
+
"references/conventions.md",
|
|
1106
|
+
"references/scope.md",
|
|
1107
|
+
"references/workflow.md",
|
|
1108
|
+
"https://vitest.dev/guide/"
|
|
1109
|
+
],
|
|
1110
|
+
"tokenBudget": 1200,
|
|
1111
|
+
"tags": [
|
|
1112
|
+
"testing",
|
|
1113
|
+
"vitest",
|
|
1114
|
+
"typescript"
|
|
1115
|
+
],
|
|
1116
|
+
"repoRoles": [
|
|
1117
|
+
"next-app",
|
|
1118
|
+
"react-app",
|
|
1119
|
+
"vue-app",
|
|
1120
|
+
"vite-app",
|
|
1121
|
+
"vendure-app",
|
|
1122
|
+
"vendure-plugin"
|
|
1123
|
+
],
|
|
1124
|
+
"requiresAny": [
|
|
1125
|
+
{
|
|
1126
|
+
"stack": "vitest"
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"dependency": "vitest"
|
|
1130
|
+
}
|
|
1131
|
+
],
|
|
1132
|
+
"tokenEstimate": 1500,
|
|
1133
|
+
"installMode": "copy-selected"
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"id": "haus.jest-patterns",
|
|
1137
|
+
"version": "1.0.0",
|
|
1138
|
+
"source": "haus",
|
|
1139
|
+
"type": "skill",
|
|
1140
|
+
"path": "skills/jest-patterns",
|
|
1141
|
+
"title": "Haus Jest patterns",
|
|
1142
|
+
"purpose": "Guide Jest unit/integration test structure, mocking, and Nx-style setup.",
|
|
1143
|
+
"whenToUse": "Use when writing or modifying Jest tests, including Nx workspace projects.",
|
|
1144
|
+
"whenNotToUse": "Do not use for Vitest, Playwright, or PHPUnit test tasks.",
|
|
1145
|
+
"references": [
|
|
1146
|
+
"references/conventions.md",
|
|
1147
|
+
"references/scope.md",
|
|
1148
|
+
"references/workflow.md",
|
|
1149
|
+
"https://jestjs.io/docs/getting-started"
|
|
1150
|
+
],
|
|
1151
|
+
"tokenBudget": 1200,
|
|
1152
|
+
"tags": [
|
|
1153
|
+
"testing",
|
|
1154
|
+
"jest",
|
|
1155
|
+
"typescript"
|
|
1156
|
+
],
|
|
1157
|
+
"repoRoles": [
|
|
1158
|
+
"next-app",
|
|
1159
|
+
"react-app",
|
|
1160
|
+
"nx-monorepo"
|
|
1161
|
+
],
|
|
1162
|
+
"requiresAny": [
|
|
1163
|
+
{
|
|
1164
|
+
"stack": "jest"
|
|
1165
|
+
},
|
|
1166
|
+
{
|
|
1167
|
+
"dependency": "jest"
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
"dependency": "jest-environment-jsdom"
|
|
1171
|
+
}
|
|
1172
|
+
],
|
|
1173
|
+
"tokenEstimate": 1500,
|
|
1174
|
+
"installMode": "copy-selected"
|
|
1175
|
+
},
|
|
1081
1176
|
{
|
|
1082
1177
|
"id": "haus.phpunit-patterns",
|
|
1083
1178
|
"version": "1.0.0",
|
package/package.json
CHANGED
|
@@ -501,7 +501,10 @@
|
|
|
501
501
|
"requiresAny": [
|
|
502
502
|
{ "role": "wordpress-bedrock-site" },
|
|
503
503
|
{ "role": "wordpress-vanilla-site" },
|
|
504
|
-
{ "stack": "wordpress" }
|
|
504
|
+
{ "stack": "wordpress" },
|
|
505
|
+
{ "stack": "elementor" },
|
|
506
|
+
{ "stack": "acf-pro" },
|
|
507
|
+
{ "stack": "jetengine" }
|
|
505
508
|
],
|
|
506
509
|
"ecosystem": "wordpress",
|
|
507
510
|
"tokenEstimate": 2600,
|
|
@@ -557,13 +560,14 @@
|
|
|
557
560
|
"whenNotToUse": "Do not use for UI-only changes without persistence/search impact.",
|
|
558
561
|
"references": ["references/scope.md", "references/workflow.md"],
|
|
559
562
|
"tokenBudget": 1200,
|
|
560
|
-
"tags": ["postgresql", "mariadb", "mssql", "elasticsearch"],
|
|
563
|
+
"tags": ["postgresql", "mariadb", "mssql", "elasticsearch", "redis"],
|
|
561
564
|
"repoRoles": [],
|
|
562
565
|
"requiresAny": [
|
|
563
566
|
{ "stack": "postgresql" },
|
|
564
567
|
{ "stack": "mariadb" },
|
|
565
568
|
{ "stack": "mssql" },
|
|
566
|
-
{ "stack": "elasticsearch" }
|
|
569
|
+
{ "stack": "elasticsearch" },
|
|
570
|
+
{ "stack": "redis" }
|
|
567
571
|
],
|
|
568
572
|
"tokenEstimate": 1700,
|
|
569
573
|
"installMode": "copy-selected"
|
|
@@ -610,6 +614,47 @@
|
|
|
610
614
|
"tokenEstimate": 1500,
|
|
611
615
|
"installMode": "copy-selected"
|
|
612
616
|
},
|
|
617
|
+
{
|
|
618
|
+
"id": "haus.vitest-patterns",
|
|
619
|
+
"source": "haus",
|
|
620
|
+
"type": "skill",
|
|
621
|
+
"path": "skills/vitest-patterns",
|
|
622
|
+
"title": "Haus Vitest patterns",
|
|
623
|
+
"purpose": "Guide Vitest unit/integration test structure, mocking, and coverage config.",
|
|
624
|
+
"whenToUse": "Use when writing or modifying Vitest tests in TypeScript/JS frontends and Node services.",
|
|
625
|
+
"whenNotToUse": "Do not use for Jest, Playwright, or PHPUnit test tasks.",
|
|
626
|
+
"references": ["references/scope.md", "references/workflow.md", "https://vitest.dev/guide/"],
|
|
627
|
+
"tokenBudget": 1200,
|
|
628
|
+
"tags": ["testing", "vitest", "typescript"],
|
|
629
|
+
"repoRoles": ["next-app", "react-app", "vue-app", "vite-app", "vendure-app", "vendure-plugin"],
|
|
630
|
+
"requiresAny": [
|
|
631
|
+
{ "stack": "vitest" },
|
|
632
|
+
{ "dependency": "vitest" }
|
|
633
|
+
],
|
|
634
|
+
"tokenEstimate": 1500,
|
|
635
|
+
"installMode": "copy-selected"
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"id": "haus.jest-patterns",
|
|
639
|
+
"source": "haus",
|
|
640
|
+
"type": "skill",
|
|
641
|
+
"path": "skills/jest-patterns",
|
|
642
|
+
"title": "Haus Jest patterns",
|
|
643
|
+
"purpose": "Guide Jest unit/integration test structure, mocking, and Nx-style setup.",
|
|
644
|
+
"whenToUse": "Use when writing or modifying Jest tests, including Nx workspace projects.",
|
|
645
|
+
"whenNotToUse": "Do not use for Vitest, Playwright, or PHPUnit test tasks.",
|
|
646
|
+
"references": ["references/scope.md", "references/workflow.md", "https://jestjs.io/docs/getting-started"],
|
|
647
|
+
"tokenBudget": 1200,
|
|
648
|
+
"tags": ["testing", "jest", "typescript"],
|
|
649
|
+
"repoRoles": ["next-app", "react-app", "nx-monorepo"],
|
|
650
|
+
"requiresAny": [
|
|
651
|
+
{ "stack": "jest" },
|
|
652
|
+
{ "dependency": "jest" },
|
|
653
|
+
{ "dependency": "jest-environment-jsdom" }
|
|
654
|
+
],
|
|
655
|
+
"tokenEstimate": 1500,
|
|
656
|
+
"installMode": "copy-selected"
|
|
657
|
+
},
|
|
613
658
|
{
|
|
614
659
|
"id": "haus.phpunit-patterns",
|
|
615
660
|
"source": "haus",
|