@haus-tech/haus-workflow 0.7.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 +6 -0
- package/dist/cli.js +8 -0
- package/library/catalog/allowed-stacks.json +15 -1
- package/library/catalog/manifest.json +188 -0
- package/package.json +1 -1
- package/tests/fixtures/catalog/manifest.json +106 -0
- package/tests/fixtures/catalog/skills/bullmq-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/eslint-setup/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/i18next-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/prettier-setup/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/sentry-patterns/SKILL.md +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
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
|
+
|
|
3
9
|
## [0.7.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.6.0...v0.7.0) (2026-05-28)
|
|
4
10
|
|
|
5
11
|
### Features
|
package/dist/cli.js
CHANGED
|
@@ -1482,6 +1482,14 @@ async function detectStacks(root, deps, files, packageManager) {
|
|
|
1482
1482
|
if (deps.includes("prisma") || deps.includes("@prisma/client")) add("backend", "prisma");
|
|
1483
1483
|
if (deps.includes("expo")) add("frontend", "expo");
|
|
1484
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");
|
|
1485
1493
|
if (deps.includes("@vendure/core")) add("backend", "vendure3");
|
|
1486
1494
|
if (deps.includes("@nestjs/core")) add("backend", "nestjs");
|
|
1487
1495
|
if (await hasNeedle(root, files, "NestFactory")) add("backend", "nestjs");
|
|
@@ -83,6 +83,20 @@
|
|
|
83
83
|
"auth",
|
|
84
84
|
"expo",
|
|
85
85
|
"react-native",
|
|
86
|
-
"mobile"
|
|
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"
|
|
87
101
|
]
|
|
88
102
|
}
|
|
@@ -279,6 +279,194 @@
|
|
|
279
279
|
"tokenEstimate": 2200,
|
|
280
280
|
"installMode": "copy-selected"
|
|
281
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
|
+
},
|
|
282
470
|
{
|
|
283
471
|
"id": "haus.sanity-patterns",
|
|
284
472
|
"version": "1.0.0",
|
package/package.json
CHANGED
|
@@ -152,6 +152,112 @@
|
|
|
152
152
|
"tokenEstimate": 2200,
|
|
153
153
|
"installMode": "copy-selected"
|
|
154
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
|
+
},
|
|
155
261
|
{
|
|
156
262
|
"id": "haus.sanity-patterns",
|
|
157
263
|
"source": "haus",
|