@haus-tech/haus-workflow 0.6.0 → 0.8.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,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.8.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.7.0...v0.8.0) (2026-05-28)
4
+
5
+ ### Features
6
+
7
+ * **scanner:** tooling detection (T19-T25) ([2ae293b](https://github.com/WeAreHausTech/haus-workflow/commit/2ae293b69cf97be15017021e16703e19aa3c2223))
8
+
9
+ ## [0.7.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.6.0...v0.7.0) (2026-05-28)
10
+
11
+ ### Features
12
+
13
+ * **scanner:** detect expo + react-native (T18) ([290a5ba](https://github.com/WeAreHausTech/haus-workflow/commit/290a5bac13faa8ec515d8dd9363caa2c00ce74cc))
14
+
3
15
  ## [0.6.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.5.0...v0.6.0) (2026-05-28)
4
16
 
5
17
  ### Features
package/dist/cli.js CHANGED
@@ -1421,6 +1421,7 @@ function detectRoles(deps, files) {
1421
1421
  if (deps.includes("react-router") && deps.includes("@react-router/node")) roles.add("react-router-app");
1422
1422
  if (deps.includes("sanity")) roles.add("sanity-studio");
1423
1423
  if (deps.includes("@strapi/strapi") || deps.some((d) => d.startsWith("@strapi/"))) roles.add("strapi-app");
1424
+ if (deps.includes("expo")) roles.add("expo-app");
1424
1425
  if (deps.includes("@vendure/core")) roles.add("vendure-app");
1425
1426
  if (deps.some((d) => d.startsWith("@haus/vendure-")) || files.some((f) => f.includes("vendure-config")))
1426
1427
  roles.add("vendure-plugin");
@@ -1479,6 +1480,16 @@ async function detectStacks(root, deps, files, packageManager) {
1479
1480
  add("backend", "strapi");
1480
1481
  }
1481
1482
  if (deps.includes("prisma") || deps.includes("@prisma/client")) add("backend", "prisma");
1483
+ if (deps.includes("expo")) add("frontend", "expo");
1484
+ if (deps.includes("react-native")) add("frontend", "react-native");
1485
+ if (deps.includes("i18next") || deps.includes("react-i18next")) add("tooling", "i18next");
1486
+ if (deps.includes("bullmq")) add("tooling", "bullmq");
1487
+ if (files.some((f) => f === "Dockerfile" || f.startsWith("docker-compose"))) add("tooling", "docker");
1488
+ if (deps.includes("pm2") || files.some((f) => f.includes("ecosystem.config"))) add("tooling", "pm2");
1489
+ if (deps.some((d) => d.startsWith("@sentry/"))) add("tooling", "sentry");
1490
+ if (deps.includes("deployer/deployer")) add("tooling", "deployer-php");
1491
+ if (!deps.includes("prettier")) add("tooling", "missing-prettier");
1492
+ if (!deps.includes("eslint")) add("tooling", "missing-eslint");
1482
1493
  if (deps.includes("@vendure/core")) add("backend", "vendure3");
1483
1494
  if (deps.includes("@nestjs/core")) add("backend", "nestjs");
1484
1495
  if (await hasNeedle(root, files, "NestFactory")) add("backend", "nestjs");
@@ -80,6 +80,23 @@
80
80
  "mysql",
81
81
  "saml2",
82
82
  "next-auth",
83
- "auth"
83
+ "auth",
84
+ "expo",
85
+ "react-native",
86
+ "mobile",
87
+ "i18next",
88
+ "i18n",
89
+ "bullmq",
90
+ "queue",
91
+ "sentry",
92
+ "observability",
93
+ "tooling",
94
+ "prettier",
95
+ "eslint",
96
+ "missing-prettier",
97
+ "missing-eslint",
98
+ "docker",
99
+ "pm2",
100
+ "deployer-php"
84
101
  ]
85
102
  }
@@ -232,6 +232,241 @@
232
232
  "tokenEstimate": 2000,
233
233
  "installMode": "copy-selected"
234
234
  },
235
+ {
236
+ "id": "haus.expo-react-native-patterns",
237
+ "version": "1.0.0",
238
+ "source": "haus",
239
+ "type": "skill",
240
+ "path": "skills/expo-react-native-patterns",
241
+ "title": "Haus Expo / React Native patterns",
242
+ "purpose": "Guide Expo Router, React Native component, native module, and EAS build changes.",
243
+ "whenToUse": "Use for Expo Router routes, RN components, native modules, expo config plugins, and EAS build/submit.",
244
+ "whenNotToUse": "Do not use for web-only React apps or unrelated mobile native projects (Swift/Kotlin without Expo).",
245
+ "references": [
246
+ "references/conventions.md",
247
+ "references/scope.md",
248
+ "references/workflow.md",
249
+ "https://docs.expo.dev/"
250
+ ],
251
+ "tokenBudget": 1200,
252
+ "tags": [
253
+ "expo",
254
+ "react-native",
255
+ "mobile",
256
+ "react"
257
+ ],
258
+ "repoRoles": [
259
+ "expo-app"
260
+ ],
261
+ "requiresAny": [
262
+ {
263
+ "stack": "expo"
264
+ },
265
+ {
266
+ "stack": "react-native"
267
+ },
268
+ {
269
+ "role": "expo-app"
270
+ },
271
+ {
272
+ "dependency": "expo"
273
+ },
274
+ {
275
+ "dependency": "react-native"
276
+ }
277
+ ],
278
+ "ecosystem": "mobile",
279
+ "tokenEstimate": 2200,
280
+ "installMode": "copy-selected"
281
+ },
282
+ {
283
+ "id": "haus.i18next-patterns",
284
+ "version": "1.0.0",
285
+ "source": "haus",
286
+ "type": "skill",
287
+ "path": "skills/i18next-patterns",
288
+ "title": "Haus i18next patterns",
289
+ "purpose": "Guide i18next setup, namespace structure, translation key conventions, and SSR-safe usage.",
290
+ "whenToUse": "Use for adding/changing translations, configuring i18next, or wiring react-i18next / next-i18next.",
291
+ "whenNotToUse": "Do not use for non-i18next translation systems or static-only content with no locale.",
292
+ "references": [
293
+ "references/conventions.md",
294
+ "references/scope.md",
295
+ "references/workflow.md",
296
+ "https://www.i18next.com/"
297
+ ],
298
+ "tokenBudget": 1200,
299
+ "tags": [
300
+ "i18next",
301
+ "i18n",
302
+ "frontend"
303
+ ],
304
+ "repoRoles": [
305
+ "next-app",
306
+ "react-app",
307
+ "vue-app",
308
+ "vite-app"
309
+ ],
310
+ "requiresAny": [
311
+ {
312
+ "stack": "i18next"
313
+ },
314
+ {
315
+ "dependency": "i18next"
316
+ },
317
+ {
318
+ "dependency": "react-i18next"
319
+ }
320
+ ],
321
+ "ecosystem": "tooling",
322
+ "tokenEstimate": 1800,
323
+ "installMode": "copy-selected"
324
+ },
325
+ {
326
+ "id": "haus.bullmq-patterns",
327
+ "version": "1.0.0",
328
+ "source": "haus",
329
+ "type": "skill",
330
+ "path": "skills/bullmq-patterns",
331
+ "title": "Haus BullMQ patterns",
332
+ "purpose": "Guide BullMQ queue, worker, scheduler, and Redis-connection lifecycle changes.",
333
+ "whenToUse": "Use for BullMQ queue definitions, processors, schedulers, and graceful shutdown.",
334
+ "whenNotToUse": "Do not use for non-BullMQ job systems or in-process scheduling without Redis.",
335
+ "references": [
336
+ "references/conventions.md",
337
+ "references/scope.md",
338
+ "references/workflow.md",
339
+ "https://docs.bullmq.io/"
340
+ ],
341
+ "tokenBudget": 1200,
342
+ "tags": [
343
+ "bullmq",
344
+ "queue",
345
+ "backend"
346
+ ],
347
+ "repoRoles": [
348
+ "vendure-app",
349
+ "nestjs-api"
350
+ ],
351
+ "requiresAny": [
352
+ {
353
+ "stack": "bullmq"
354
+ },
355
+ {
356
+ "dependency": "bullmq"
357
+ }
358
+ ],
359
+ "ecosystem": "tooling",
360
+ "tokenEstimate": 1800,
361
+ "installMode": "copy-selected"
362
+ },
363
+ {
364
+ "id": "haus.sentry-patterns",
365
+ "version": "1.0.0",
366
+ "source": "haus",
367
+ "type": "skill",
368
+ "path": "skills/sentry-patterns",
369
+ "title": "Haus Sentry patterns",
370
+ "purpose": "Guide Sentry SDK setup, error capture, performance tracing, and PII scrubbing.",
371
+ "whenToUse": "Use for `@sentry/*` SDK init, scope/breadcrumb config, source map upload, and PII redaction.",
372
+ "whenNotToUse": "Do not use for non-Sentry monitoring (Datadog, New Relic, etc.).",
373
+ "references": [
374
+ "references/conventions.md",
375
+ "references/scope.md",
376
+ "references/workflow.md",
377
+ "https://docs.sentry.io/"
378
+ ],
379
+ "tokenBudget": 1200,
380
+ "tags": [
381
+ "sentry",
382
+ "observability",
383
+ "tooling"
384
+ ],
385
+ "repoRoles": [
386
+ "next-app",
387
+ "nestjs-api",
388
+ "vendure-app"
389
+ ],
390
+ "requiresAny": [
391
+ {
392
+ "stack": "sentry"
393
+ },
394
+ {
395
+ "dependency": "@sentry/node"
396
+ },
397
+ {
398
+ "dependency": "@sentry/nextjs"
399
+ },
400
+ {
401
+ "packageNamePattern": "@sentry/*"
402
+ }
403
+ ],
404
+ "ecosystem": "tooling",
405
+ "tokenEstimate": 1800,
406
+ "installMode": "copy-selected"
407
+ },
408
+ {
409
+ "id": "haus.prettier-setup",
410
+ "version": "1.0.0",
411
+ "source": "haus",
412
+ "type": "skill",
413
+ "path": "skills/prettier-setup",
414
+ "title": "Haus Prettier setup",
415
+ "purpose": "Install `@haus-tech/prettier-config` and wire `.prettierrc` to the shared config.",
416
+ "whenToUse": "Use when Prettier is missing from a haus repo or when migrating an ad-hoc Prettier config to the shared package.",
417
+ "whenNotToUse": "Do not use when Prettier is already configured against `@haus-tech/prettier-config`.",
418
+ "references": [
419
+ "references/conventions.md",
420
+ "references/scope.md",
421
+ "references/workflow.md"
422
+ ],
423
+ "tokenBudget": 800,
424
+ "tags": [
425
+ "prettier",
426
+ "tooling",
427
+ "quality"
428
+ ],
429
+ "repoRoles": [],
430
+ "requiresAny": [
431
+ {
432
+ "stack": "missing-prettier"
433
+ }
434
+ ],
435
+ "ecosystem": "tooling",
436
+ "tokenEstimate": 1000,
437
+ "installMode": "copy-selected"
438
+ },
439
+ {
440
+ "id": "haus.eslint-setup",
441
+ "version": "1.0.0",
442
+ "source": "haus",
443
+ "type": "skill",
444
+ "path": "skills/eslint-setup",
445
+ "title": "Haus ESLint setup",
446
+ "purpose": "Install `@haus-tech/tech-config` and wire ESLint flat config to the shared rules.",
447
+ "whenToUse": "Use when ESLint is missing from a haus repo or migrating from a legacy `.eslintrc` to flat config.",
448
+ "whenNotToUse": "Do not use when ESLint is already configured against `@haus-tech/tech-config`.",
449
+ "references": [
450
+ "references/conventions.md",
451
+ "references/scope.md",
452
+ "references/workflow.md"
453
+ ],
454
+ "tokenBudget": 800,
455
+ "tags": [
456
+ "eslint",
457
+ "tooling",
458
+ "quality"
459
+ ],
460
+ "repoRoles": [],
461
+ "requiresAny": [
462
+ {
463
+ "stack": "missing-eslint"
464
+ }
465
+ ],
466
+ "ecosystem": "tooling",
467
+ "tokenEstimate": 1000,
468
+ "installMode": "copy-selected"
469
+ },
235
470
  {
236
471
  "id": "haus.sanity-patterns",
237
472
  "version": "1.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -128,6 +128,136 @@
128
128
  "tokenEstimate": 2000,
129
129
  "installMode": "copy-selected"
130
130
  },
131
+ {
132
+ "id": "haus.expo-react-native-patterns",
133
+ "source": "haus",
134
+ "type": "skill",
135
+ "path": "skills/expo-react-native-patterns",
136
+ "title": "Haus Expo / React Native patterns",
137
+ "purpose": "Guide Expo Router, React Native component, native module, and EAS build changes.",
138
+ "whenToUse": "Use for Expo Router routes, RN components, native modules, expo config plugins, and EAS build/submit.",
139
+ "whenNotToUse": "Do not use for web-only React apps or unrelated mobile native projects (Swift/Kotlin without Expo).",
140
+ "references": ["references/scope.md", "references/workflow.md", "https://docs.expo.dev/"],
141
+ "tokenBudget": 1200,
142
+ "tags": ["expo", "react-native", "mobile", "react"],
143
+ "repoRoles": ["expo-app"],
144
+ "requiresAny": [
145
+ { "stack": "expo" },
146
+ { "stack": "react-native" },
147
+ { "role": "expo-app" },
148
+ { "dependency": "expo" },
149
+ { "dependency": "react-native" }
150
+ ],
151
+ "ecosystem": "mobile",
152
+ "tokenEstimate": 2200,
153
+ "installMode": "copy-selected"
154
+ },
155
+ {
156
+ "id": "haus.i18next-patterns",
157
+ "source": "haus",
158
+ "type": "skill",
159
+ "path": "skills/i18next-patterns",
160
+ "title": "Haus i18next patterns",
161
+ "purpose": "Guide i18next setup, namespace structure, translation key conventions, and SSR-safe usage.",
162
+ "whenToUse": "Use for adding/changing translations, configuring i18next, or wiring react-i18next / next-i18next.",
163
+ "whenNotToUse": "Do not use for non-i18next translation systems or static-only content with no locale.",
164
+ "references": ["references/scope.md", "references/workflow.md", "https://www.i18next.com/"],
165
+ "tokenBudget": 1200,
166
+ "tags": ["i18next", "i18n", "frontend"],
167
+ "repoRoles": ["next-app", "react-app", "vue-app", "vite-app"],
168
+ "requiresAny": [
169
+ { "stack": "i18next" },
170
+ { "dependency": "i18next" },
171
+ { "dependency": "react-i18next" }
172
+ ],
173
+ "ecosystem": "tooling",
174
+ "tokenEstimate": 1800,
175
+ "installMode": "copy-selected"
176
+ },
177
+ {
178
+ "id": "haus.bullmq-patterns",
179
+ "source": "haus",
180
+ "type": "skill",
181
+ "path": "skills/bullmq-patterns",
182
+ "title": "Haus BullMQ patterns",
183
+ "purpose": "Guide BullMQ queue, worker, scheduler, and Redis-connection lifecycle changes.",
184
+ "whenToUse": "Use for BullMQ queue definitions, processors, schedulers, and graceful shutdown.",
185
+ "whenNotToUse": "Do not use for non-BullMQ job systems or in-process scheduling without Redis.",
186
+ "references": ["references/scope.md", "references/workflow.md", "https://docs.bullmq.io/"],
187
+ "tokenBudget": 1200,
188
+ "tags": ["bullmq", "queue", "backend"],
189
+ "repoRoles": ["vendure-app", "nestjs-api"],
190
+ "requiresAny": [
191
+ { "stack": "bullmq" },
192
+ { "dependency": "bullmq" }
193
+ ],
194
+ "ecosystem": "tooling",
195
+ "tokenEstimate": 1800,
196
+ "installMode": "copy-selected"
197
+ },
198
+ {
199
+ "id": "haus.sentry-patterns",
200
+ "source": "haus",
201
+ "type": "skill",
202
+ "path": "skills/sentry-patterns",
203
+ "title": "Haus Sentry patterns",
204
+ "purpose": "Guide Sentry SDK setup, error capture, performance tracing, and PII scrubbing.",
205
+ "whenToUse": "Use for `@sentry/*` SDK init, scope/breadcrumb config, source map upload, and PII redaction.",
206
+ "whenNotToUse": "Do not use for non-Sentry monitoring (Datadog, New Relic, etc.).",
207
+ "references": ["references/scope.md", "references/workflow.md", "https://docs.sentry.io/"],
208
+ "tokenBudget": 1200,
209
+ "tags": ["sentry", "observability", "tooling"],
210
+ "repoRoles": ["next-app", "nestjs-api", "vendure-app"],
211
+ "requiresAny": [
212
+ { "stack": "sentry" },
213
+ { "dependency": "@sentry/node" },
214
+ { "dependency": "@sentry/nextjs" },
215
+ { "packageNamePattern": "@sentry/*" }
216
+ ],
217
+ "ecosystem": "tooling",
218
+ "tokenEstimate": 1800,
219
+ "installMode": "copy-selected"
220
+ },
221
+ {
222
+ "id": "haus.prettier-setup",
223
+ "source": "haus",
224
+ "type": "skill",
225
+ "path": "skills/prettier-setup",
226
+ "title": "Haus Prettier setup",
227
+ "purpose": "Install `@haus-tech/prettier-config` and wire `.prettierrc` to the shared config.",
228
+ "whenToUse": "Use when Prettier is missing from a haus repo or when migrating an ad-hoc Prettier config to the shared package.",
229
+ "whenNotToUse": "Do not use when Prettier is already configured against `@haus-tech/prettier-config`.",
230
+ "references": ["references/scope.md", "references/workflow.md"],
231
+ "tokenBudget": 800,
232
+ "tags": ["prettier", "tooling", "quality"],
233
+ "repoRoles": [],
234
+ "requiresAny": [
235
+ { "stack": "missing-prettier" }
236
+ ],
237
+ "ecosystem": "tooling",
238
+ "tokenEstimate": 1000,
239
+ "installMode": "copy-selected"
240
+ },
241
+ {
242
+ "id": "haus.eslint-setup",
243
+ "source": "haus",
244
+ "type": "skill",
245
+ "path": "skills/eslint-setup",
246
+ "title": "Haus ESLint setup",
247
+ "purpose": "Install `@haus-tech/tech-config` and wire ESLint flat config to the shared rules.",
248
+ "whenToUse": "Use when ESLint is missing from a haus repo or migrating from a legacy `.eslintrc` to flat config.",
249
+ "whenNotToUse": "Do not use when ESLint is already configured against `@haus-tech/tech-config`.",
250
+ "references": ["references/scope.md", "references/workflow.md"],
251
+ "tokenBudget": 800,
252
+ "tags": ["eslint", "tooling", "quality"],
253
+ "repoRoles": [],
254
+ "requiresAny": [
255
+ { "stack": "missing-eslint" }
256
+ ],
257
+ "ecosystem": "tooling",
258
+ "tokenEstimate": 1000,
259
+ "installMode": "copy-selected"
260
+ },
131
261
  {
132
262
  "id": "haus.sanity-patterns",
133
263
  "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.
@@ -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.
@@ -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.