@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 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
- if (files.some((f) => f.endsWith("wp-config.php")) && files.some((f) => f.includes("web/app"))) {
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");
@@ -68,6 +68,9 @@
68
68
  "testing-library",
69
69
  "phpunit",
70
70
  "storybook",
71
- "wisest"
71
+ "wisest",
72
+ "vitest",
73
+ "jest",
74
+ "redis"
72
75
  ]
73
76
  }
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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",
@@ -0,0 +1,9 @@
1
+ <!-- Fixture stub — minimal valid SKILL.md for CLI tests. -->
2
+
3
+ ## Use when
4
+
5
+ Use this skill when working with the relevant technology.
6
+
7
+ ## Do not use when
8
+
9
+ Do not use for unrelated tasks.
@@ -0,0 +1,9 @@
1
+ <!-- Fixture stub — minimal valid SKILL.md for CLI tests. -->
2
+
3
+ ## Use when
4
+
5
+ Use this skill when working with the relevant technology.
6
+
7
+ ## Do not use when
8
+
9
+ Do not use for unrelated tasks.