@haus-tech/haus-workflow 0.25.1 → 0.26.1
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 +12 -0
- package/LICENSE +21 -0
- package/dist/cli.js +17 -2
- package/library/catalog/manifest.json +318 -1
- package/library/catalog/validation-rules.json +1 -0
- package/library/global/commands/haus-cloneandsetup.md +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.26.1](https://github.com/WeAreHausTech/haus-workflow/compare/v0.26.0...v0.26.1) (2026-06-15)
|
|
4
|
+
|
|
5
|
+
## [0.26.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.25.1...v0.26.0) (2026-06-15)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **catalog:** exempt agent content from the only-npx-tsx rule ([#107](https://github.com/WeAreHausTech/haus-workflow/issues/107)) ([e335ecc](https://github.com/WeAreHausTech/haus-workflow/commit/e335eccd9e33e70781f3172cc96952fc070c28a9))
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- **scanner:** detect php stack so php-gated catalog items are recommendable ([#109](https://github.com/WeAreHausTech/haus-workflow/issues/109)) ([4daa09e](https://github.com/WeAreHausTech/haus-workflow/commit/4daa09e2ef2e5133f43437b5a6e73277b8c6ab69))
|
|
14
|
+
|
|
3
15
|
## [0.25.1](https://github.com/WeAreHausTech/haus-workflow/compare/v0.25.0...v0.25.1) (2026-06-15)
|
|
4
16
|
|
|
5
17
|
## [0.25.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.24.1...v0.25.0) (2026-06-12)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Haus Tech AB
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/cli.js
CHANGED
|
@@ -119,6 +119,7 @@ var validation_rules_default = {
|
|
|
119
119
|
],
|
|
120
120
|
allowedNpxPattern: { source: "\\bnpx\\s+tsx\\b", flags: "i" },
|
|
121
121
|
anyNpxPattern: { source: "\\bnpx\\s+\\S+", flags: "i" },
|
|
122
|
+
npxTsxOnlyExemptTypes: ["agent"],
|
|
122
123
|
httpUrlPattern: { source: "^http:\\/\\/", flags: "i" },
|
|
123
124
|
placeholderPattern: { source: "\\bTODO\\b|\\bPLACEHOLDER\\b", flags: "i" },
|
|
124
125
|
allowedStacks: [
|
|
@@ -239,6 +240,7 @@ var REQUIRED_SKILL_FRONTMATTER = validation_rules_default.requiredSkillFrontmatt
|
|
|
239
240
|
var RISKY_INSTALL_PATTERNS = validation_rules_default.riskyInstallPatterns.map(toRegExp);
|
|
240
241
|
var ALLOWED_NPX_PATTERN = toRegExp(validation_rules_default.allowedNpxPattern);
|
|
241
242
|
var ANY_NPX_PATTERN = toRegExp(validation_rules_default.anyNpxPattern);
|
|
243
|
+
var NPX_TSX_ONLY_EXEMPT_TYPES = validation_rules_default.npxTsxOnlyExemptTypes ?? [];
|
|
242
244
|
var HTTP_URL_PATTERN = toRegExp(validation_rules_default.httpUrlPattern);
|
|
243
245
|
var PLACEHOLDER_PATTERN = toRegExp(validation_rules_default.placeholderPattern);
|
|
244
246
|
var ALLOWED_STACKS = validation_rules_default.allowedStacks;
|
|
@@ -317,13 +319,14 @@ ${extractUseWhenSection(text)}`;
|
|
|
317
319
|
// src/catalog/ingest-catalog.ts
|
|
318
320
|
function validateCatalogItem(item, content2) {
|
|
319
321
|
const label = item.id;
|
|
322
|
+
const checkNonTsxNpx = !NPX_TSX_ONLY_EXEMPT_TYPES.includes(item.type);
|
|
320
323
|
const lines = content2.split(/\r?\n/);
|
|
321
324
|
for (let i = 0; i < lines.length; i++) {
|
|
322
325
|
const line2 = lines[i] ?? "";
|
|
323
326
|
if (RISKY_INSTALL_PATTERNS.some((re) => re.test(line2))) {
|
|
324
327
|
return { ok: false, reason: `${label}: risky install pattern at line ${i + 1}` };
|
|
325
328
|
}
|
|
326
|
-
if (ANY_NPX_PATTERN.test(line2) && !ALLOWED_NPX_PATTERN.test(line2)) {
|
|
329
|
+
if (checkNonTsxNpx && ANY_NPX_PATTERN.test(line2) && !ALLOWED_NPX_PATTERN.test(line2)) {
|
|
327
330
|
return { ok: false, reason: `${label}: disallowed npx at line ${i + 1}` };
|
|
328
331
|
}
|
|
329
332
|
}
|
|
@@ -2471,6 +2474,11 @@ var STACK_RULES = [
|
|
|
2471
2474
|
stack: ["backend", "graphql"],
|
|
2472
2475
|
any: [fileEndsWith(".graphql"), fileEndsWith("schema.graphql")]
|
|
2473
2476
|
},
|
|
2477
|
+
// PHP (Composer-managed) — broad language signal so php-tooling catalog items
|
|
2478
|
+
// (e.g. the php-reviewer agent gated on { stack: 'php' }) are recommendable on any
|
|
2479
|
+
// Composer project. Placed before laravel/wordpress so 'php' precedes the
|
|
2480
|
+
// framework-specific stacks in the backend bucket.
|
|
2481
|
+
{ stack: ["backend", "php"], any: [fileEndsWith("composer.json")] },
|
|
2474
2482
|
{ stack: ["backend", "laravel"], any: [dep("laravel/framework")] },
|
|
2475
2483
|
{ stack: ["backend", "laravel"], any: [fileIncludes("app/Providers/"), fileIncludes("routes/")] },
|
|
2476
2484
|
{ stack: ["backend", "wordpress"], any: [fileEndsWith("wp-config.php"), dep("roots/wordpress")] },
|
|
@@ -4386,12 +4394,19 @@ function auditTemplateContent(manifestDir, absPath, itemId) {
|
|
|
4386
4394
|
failures.push(...auditForbiddenTagsInText(text, `${itemId}: ${rel}`));
|
|
4387
4395
|
return failures;
|
|
4388
4396
|
}
|
|
4397
|
+
var DIR_ITEM_TYPE = {
|
|
4398
|
+
skills: "skill",
|
|
4399
|
+
agents: "agent",
|
|
4400
|
+
templates: "template",
|
|
4401
|
+
commands: "command"
|
|
4402
|
+
};
|
|
4389
4403
|
function auditMarkdownContent(manifestDir) {
|
|
4390
4404
|
const failures = [];
|
|
4391
4405
|
const dirs = ["skills", "agents", "templates", "commands"];
|
|
4392
4406
|
for (const dir of dirs) {
|
|
4393
4407
|
const abs = path26.join(manifestDir, dir);
|
|
4394
4408
|
if (!fs20.existsSync(abs)) continue;
|
|
4409
|
+
const checkNonTsxNpx = !NPX_TSX_ONLY_EXEMPT_TYPES.includes(DIR_ITEM_TYPE[dir] ?? "");
|
|
4395
4410
|
walkMd(abs, (file) => {
|
|
4396
4411
|
const text = fs20.readFileSync(file, "utf8");
|
|
4397
4412
|
const rel = path26.relative(manifestDir, file);
|
|
@@ -4401,7 +4416,7 @@ function auditMarkdownContent(manifestDir) {
|
|
|
4401
4416
|
if (RISKY_INSTALL_PATTERNS.some((re) => re.test(line2))) {
|
|
4402
4417
|
failures.push(`${rel}:${i + 1}: risky install pattern`);
|
|
4403
4418
|
}
|
|
4404
|
-
if (ANY_NPX_PATTERN.test(line2) && !ALLOWED_NPX_PATTERN.test(line2)) {
|
|
4419
|
+
if (checkNonTsxNpx && ANY_NPX_PATTERN.test(line2) && !ALLOWED_NPX_PATTERN.test(line2)) {
|
|
4405
4420
|
failures.push(`${rel}:${i + 1}: disallowed npx (only npx tsx allowed)`);
|
|
4406
4421
|
}
|
|
4407
4422
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
2
|
+
"version": "2.7.0",
|
|
3
3
|
"items": [
|
|
4
4
|
{
|
|
5
5
|
"id": "haus.nextjs-patterns",
|
|
@@ -1911,6 +1911,323 @@
|
|
|
1911
1911
|
"originUrl": "https://github.com/pcvelz/superpowers/blob/48f5123e18a1a92dfba962da8dc2509391c821ee/commands/onboard.md",
|
|
1912
1912
|
"pinnedRef": "48f5123e18a1a92dfba962da8dc2509391c821ee",
|
|
1913
1913
|
"ecosystem": "superpowers"
|
|
1914
|
+
},
|
|
1915
|
+
{
|
|
1916
|
+
"id": "haus.ecc-react-reviewer",
|
|
1917
|
+
"version": "1.0.0",
|
|
1918
|
+
"source": "curated",
|
|
1919
|
+
"type": "agent",
|
|
1920
|
+
"path": "agents/ecc/react-reviewer.md",
|
|
1921
|
+
"title": "React Reviewer",
|
|
1922
|
+
"purpose": "Expert React/JSX code reviewer specializing in hook correctness, render performance, server/client component boundaries, accessibility, and React-specific security. Use for any change touching .tsx/.jsx files or React component logic. MUST BE USED for React projects.",
|
|
1923
|
+
"whenToUse": "Expert React/JSX code reviewer specializing in hook correctness, render performance, server/client component boundaries, accessibility, and React-specific security. Use for any change touching .tsx/.jsx files or React component logic. MUST BE USED for React projects.",
|
|
1924
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
1925
|
+
"tags": ["agent", "review", "react"],
|
|
1926
|
+
"repoRoles": [],
|
|
1927
|
+
"tokenEstimate": 2856,
|
|
1928
|
+
"installMode": "copy-selected",
|
|
1929
|
+
"reviewStatus": "approved",
|
|
1930
|
+
"riskLevel": "low",
|
|
1931
|
+
"useMode": "copy",
|
|
1932
|
+
"license": "MIT",
|
|
1933
|
+
"licenseConfidence": "high",
|
|
1934
|
+
"originSourceId": "ecc-affaanm",
|
|
1935
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/react-reviewer.md",
|
|
1936
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
1937
|
+
"ecosystem": "react",
|
|
1938
|
+
"requiresAny": [
|
|
1939
|
+
{
|
|
1940
|
+
"stack": "react"
|
|
1941
|
+
},
|
|
1942
|
+
{
|
|
1943
|
+
"dependency": "react"
|
|
1944
|
+
}
|
|
1945
|
+
]
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
"id": "haus.ecc-react-build-resolver",
|
|
1949
|
+
"version": "1.0.0",
|
|
1950
|
+
"source": "curated",
|
|
1951
|
+
"type": "agent",
|
|
1952
|
+
"path": "agents/ecc/react-build-resolver.md",
|
|
1953
|
+
"title": "React Build Resolver",
|
|
1954
|
+
"purpose": "Diagnose and fix React build failures across Vite, webpack, Next.js, CRA, Parcel, esbuild, and Bun. Handles JSX/TSX compile errors, hydration mismatches, server/client component boundary failures, missing types, and bundler-specific configuration issues with minimal, surgical changes. MUST BE USED when a React build fails.",
|
|
1955
|
+
"whenToUse": "Diagnose and fix React build failures across Vite, webpack, Next.js, CRA, Parcel, esbuild, and Bun. Handles JSX/TSX compile errors, hydration mismatches, server/client component boundary failures, missing types, and bundler-specific configuration issues with minimal, surgical changes. MUST BE USED when a React build fails.",
|
|
1956
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
1957
|
+
"tags": ["agent", "react"],
|
|
1958
|
+
"repoRoles": [],
|
|
1959
|
+
"tokenEstimate": 2801,
|
|
1960
|
+
"installMode": "copy-selected",
|
|
1961
|
+
"reviewStatus": "approved",
|
|
1962
|
+
"riskLevel": "low",
|
|
1963
|
+
"useMode": "copy",
|
|
1964
|
+
"license": "MIT",
|
|
1965
|
+
"licenseConfidence": "high",
|
|
1966
|
+
"originSourceId": "ecc-affaanm",
|
|
1967
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/react-build-resolver.md",
|
|
1968
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
1969
|
+
"ecosystem": "react",
|
|
1970
|
+
"requiresAny": [
|
|
1971
|
+
{
|
|
1972
|
+
"stack": "react"
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"dependency": "react"
|
|
1976
|
+
}
|
|
1977
|
+
]
|
|
1978
|
+
},
|
|
1979
|
+
{
|
|
1980
|
+
"id": "haus.ecc-php-reviewer",
|
|
1981
|
+
"version": "1.0.0",
|
|
1982
|
+
"source": "curated",
|
|
1983
|
+
"type": "agent",
|
|
1984
|
+
"path": "agents/ecc/php-reviewer.md",
|
|
1985
|
+
"title": "PHP Reviewer",
|
|
1986
|
+
"purpose": "Expert PHP code reviewer specializing in PSR-12 compliance, PHP type system, Eloquent ORM patterns, security, and performance. Use for all PHP code changes. MUST BE USED for PHP projects.",
|
|
1987
|
+
"whenToUse": "Expert PHP code reviewer specializing in PSR-12 compliance, PHP type system, Eloquent ORM patterns, security, and performance. Use for all PHP code changes. MUST BE USED for PHP projects.",
|
|
1988
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
1989
|
+
"tags": ["agent", "review", "php"],
|
|
1990
|
+
"repoRoles": [],
|
|
1991
|
+
"tokenEstimate": 1431,
|
|
1992
|
+
"installMode": "copy-selected",
|
|
1993
|
+
"reviewStatus": "approved",
|
|
1994
|
+
"riskLevel": "low",
|
|
1995
|
+
"useMode": "copy",
|
|
1996
|
+
"license": "MIT",
|
|
1997
|
+
"licenseConfidence": "high",
|
|
1998
|
+
"originSourceId": "ecc-affaanm",
|
|
1999
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/php-reviewer.md",
|
|
2000
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2001
|
+
"ecosystem": "php",
|
|
2002
|
+
"requiresAny": [
|
|
2003
|
+
{
|
|
2004
|
+
"stack": "php"
|
|
2005
|
+
}
|
|
2006
|
+
]
|
|
2007
|
+
},
|
|
2008
|
+
{
|
|
2009
|
+
"id": "haus.ecc-csharp-reviewer",
|
|
2010
|
+
"version": "1.0.0",
|
|
2011
|
+
"source": "curated",
|
|
2012
|
+
"type": "agent",
|
|
2013
|
+
"path": "agents/ecc/csharp-reviewer.md",
|
|
2014
|
+
"title": "C# Reviewer",
|
|
2015
|
+
"purpose": "Expert C# code reviewer specializing in .NET conventions, async patterns, security, nullable reference types, and performance. Use for all C# code changes. MUST BE USED for C# projects.",
|
|
2016
|
+
"whenToUse": "Expert C# code reviewer specializing in .NET conventions, async patterns, security, nullable reference types, and performance. Use for all C# code changes. MUST BE USED for C# projects.",
|
|
2017
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2018
|
+
"tags": ["agent", "review", "csharp", "dotnet"],
|
|
2019
|
+
"repoRoles": [],
|
|
2020
|
+
"tokenEstimate": 1426,
|
|
2021
|
+
"installMode": "copy-selected",
|
|
2022
|
+
"reviewStatus": "approved",
|
|
2023
|
+
"riskLevel": "low",
|
|
2024
|
+
"useMode": "copy",
|
|
2025
|
+
"license": "MIT",
|
|
2026
|
+
"licenseConfidence": "high",
|
|
2027
|
+
"originSourceId": "ecc-affaanm",
|
|
2028
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/csharp-reviewer.md",
|
|
2029
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2030
|
+
"ecosystem": "dotnet",
|
|
2031
|
+
"requiresAny": [
|
|
2032
|
+
{
|
|
2033
|
+
"stack": "dotnet"
|
|
2034
|
+
}
|
|
2035
|
+
]
|
|
2036
|
+
},
|
|
2037
|
+
{
|
|
2038
|
+
"id": "haus.ecc-database-reviewer",
|
|
2039
|
+
"version": "1.0.0",
|
|
2040
|
+
"source": "curated",
|
|
2041
|
+
"type": "agent",
|
|
2042
|
+
"path": "agents/ecc/database-reviewer.md",
|
|
2043
|
+
"title": "Database Reviewer",
|
|
2044
|
+
"purpose": "PostgreSQL database specialist for query optimization, schema design, security, and performance. Use PROACTIVELY when writing SQL, creating migrations, designing schemas, or troubleshooting database performance. Incorporates Supabase best practices.",
|
|
2045
|
+
"whenToUse": "PostgreSQL database specialist for query optimization, schema design, security, and performance. Use PROACTIVELY when writing SQL, creating migrations, designing schemas, or troubleshooting database performance. Incorporates Supabase best practices.",
|
|
2046
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2047
|
+
"tags": ["agent", "review", "database"],
|
|
2048
|
+
"repoRoles": [],
|
|
2049
|
+
"tokenEstimate": 1336,
|
|
2050
|
+
"installMode": "copy-selected",
|
|
2051
|
+
"reviewStatus": "approved",
|
|
2052
|
+
"riskLevel": "low",
|
|
2053
|
+
"useMode": "copy",
|
|
2054
|
+
"license": "MIT",
|
|
2055
|
+
"licenseConfidence": "high",
|
|
2056
|
+
"originSourceId": "ecc-affaanm",
|
|
2057
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/database-reviewer.md",
|
|
2058
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2059
|
+
"ecosystem": "database",
|
|
2060
|
+
"requiresAny": [
|
|
2061
|
+
{
|
|
2062
|
+
"stack": "postgresql"
|
|
2063
|
+
},
|
|
2064
|
+
{
|
|
2065
|
+
"stack": "mysql"
|
|
2066
|
+
},
|
|
2067
|
+
{
|
|
2068
|
+
"stack": "mariadb"
|
|
2069
|
+
},
|
|
2070
|
+
{
|
|
2071
|
+
"stack": "mssql"
|
|
2072
|
+
}
|
|
2073
|
+
]
|
|
2074
|
+
},
|
|
2075
|
+
{
|
|
2076
|
+
"id": "haus.ecc-e2e-runner",
|
|
2077
|
+
"version": "1.0.0",
|
|
2078
|
+
"source": "curated",
|
|
2079
|
+
"type": "agent",
|
|
2080
|
+
"path": "agents/ecc/e2e-runner.md",
|
|
2081
|
+
"title": "E2E Runner",
|
|
2082
|
+
"purpose": "End-to-end testing specialist using Vercel Agent Browser (preferred) with Playwright fallback. Use PROACTIVELY for generating, maintaining, and running E2E tests. Manages test journeys, quarantines flaky tests, uploads artifacts (screenshots, videos, traces), and ensures critical user flows work.",
|
|
2083
|
+
"whenToUse": "End-to-end testing specialist using Vercel Agent Browser (preferred) with Playwright fallback. Use PROACTIVELY for generating, maintaining, and running E2E tests. Manages test journeys, quarantines flaky tests, uploads artifacts (screenshots, videos, traces), and ensures critical user flows work.",
|
|
2084
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2085
|
+
"tags": ["agent", "testing"],
|
|
2086
|
+
"repoRoles": [],
|
|
2087
|
+
"tokenEstimate": 1274,
|
|
2088
|
+
"installMode": "copy-selected",
|
|
2089
|
+
"reviewStatus": "approved",
|
|
2090
|
+
"riskLevel": "low",
|
|
2091
|
+
"useMode": "copy",
|
|
2092
|
+
"license": "MIT",
|
|
2093
|
+
"licenseConfidence": "high",
|
|
2094
|
+
"originSourceId": "ecc-affaanm",
|
|
2095
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/e2e-runner.md",
|
|
2096
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2097
|
+
"ecosystem": "testing",
|
|
2098
|
+
"requiresAny": [
|
|
2099
|
+
{
|
|
2100
|
+
"stack": "playwright"
|
|
2101
|
+
},
|
|
2102
|
+
{
|
|
2103
|
+
"dependency": "@playwright/test"
|
|
2104
|
+
}
|
|
2105
|
+
]
|
|
2106
|
+
},
|
|
2107
|
+
{
|
|
2108
|
+
"id": "haus.ecc-performance-optimizer",
|
|
2109
|
+
"version": "1.0.0",
|
|
2110
|
+
"source": "curated",
|
|
2111
|
+
"type": "agent",
|
|
2112
|
+
"path": "agents/ecc/performance-optimizer.md",
|
|
2113
|
+
"title": "Performance Optimizer",
|
|
2114
|
+
"purpose": "Performance analysis and optimization specialist. Use PROACTIVELY for identifying bottlenecks, optimizing slow code, reducing bundle sizes, and improving runtime performance. Profiling, memory leaks, render optimization, and algorithmic improvements.",
|
|
2115
|
+
"whenToUse": "Performance analysis and optimization specialist. Use PROACTIVELY for identifying bottlenecks, optimizing slow code, reducing bundle sizes, and improving runtime performance. Profiling, memory leaks, render optimization, and algorithmic improvements.",
|
|
2116
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2117
|
+
"tags": ["agent", "quality"],
|
|
2118
|
+
"repoRoles": [],
|
|
2119
|
+
"tokenEstimate": 3367,
|
|
2120
|
+
"installMode": "copy-selected",
|
|
2121
|
+
"reviewStatus": "approved",
|
|
2122
|
+
"riskLevel": "low",
|
|
2123
|
+
"useMode": "copy",
|
|
2124
|
+
"license": "MIT",
|
|
2125
|
+
"licenseConfidence": "high",
|
|
2126
|
+
"originSourceId": "ecc-affaanm",
|
|
2127
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/agents/performance-optimizer.md",
|
|
2128
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2129
|
+
"ecosystem": "ecc",
|
|
2130
|
+
"default": true
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
"id": "haus.ecc-refactor-cleaner",
|
|
2134
|
+
"version": "1.0.0",
|
|
2135
|
+
"source": "curated",
|
|
2136
|
+
"type": "agent",
|
|
2137
|
+
"path": "agents/ecc/refactor-cleaner.md",
|
|
2138
|
+
"title": "Refactor Cleaner",
|
|
2139
|
+
"purpose": "Dead code cleanup and consolidation specialist. Use PROACTIVELY for removing unused code, duplicates, and refactoring. Runs analysis tools (knip, depcheck, ts-prune) to identify dead code and safely removes it.",
|
|
2140
|
+
"whenToUse": "Dead code cleanup and consolidation specialist. Use PROACTIVELY for removing unused code, duplicates, and refactoring. Runs analysis tools (knip, depcheck, ts-prune) to identify dead code and safely removes it.",
|
|
2141
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2142
|
+
"tags": ["agent", "quality"],
|
|
2143
|
+
"repoRoles": [],
|
|
2144
|
+
"tokenEstimate": 670,
|
|
2145
|
+
"installMode": "copy-selected",
|
|
2146
|
+
"reviewStatus": "approved",
|
|
2147
|
+
"riskLevel": "low",
|
|
2148
|
+
"useMode": "copy",
|
|
2149
|
+
"license": "MIT",
|
|
2150
|
+
"licenseConfidence": "high",
|
|
2151
|
+
"originSourceId": "ecc-affaanm",
|
|
2152
|
+
"originUrl": "https://github.com/affaan-m/ECC/blob/5b173d2e6c11b976a0f13b2f59125e08956c1d47/.kiro/agents/refactor-cleaner.md",
|
|
2153
|
+
"pinnedRef": "5b173d2e6c11b976a0f13b2f59125e08956c1d47",
|
|
2154
|
+
"ecosystem": "ecc",
|
|
2155
|
+
"default": true
|
|
2156
|
+
},
|
|
2157
|
+
{
|
|
2158
|
+
"id": "haus.oh-my-claudecode-test-engineer",
|
|
2159
|
+
"version": "1.0.0",
|
|
2160
|
+
"source": "curated",
|
|
2161
|
+
"type": "agent",
|
|
2162
|
+
"path": "agents/oh-my-claudecode/test-engineer.md",
|
|
2163
|
+
"title": "Test Engineer",
|
|
2164
|
+
"purpose": "Test strategy, integration/e2e coverage, flaky test hardening, TDD workflows",
|
|
2165
|
+
"whenToUse": "Test strategy, integration/e2e coverage, flaky test hardening, TDD workflows",
|
|
2166
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2167
|
+
"tags": ["agent", "testing"],
|
|
2168
|
+
"repoRoles": [],
|
|
2169
|
+
"tokenEstimate": 1656,
|
|
2170
|
+
"installMode": "copy-selected",
|
|
2171
|
+
"reviewStatus": "approved",
|
|
2172
|
+
"riskLevel": "low",
|
|
2173
|
+
"useMode": "copy",
|
|
2174
|
+
"license": "MIT",
|
|
2175
|
+
"licenseConfidence": "high",
|
|
2176
|
+
"originSourceId": "omcc-yeachanheo",
|
|
2177
|
+
"originUrl": "https://github.com/yeachan-heo/oh-my-claudecode/blob/50f6ff05eb5d9ebed66f05d8c4580c0b119f37af/agents/test-engineer.md",
|
|
2178
|
+
"pinnedRef": "50f6ff05eb5d9ebed66f05d8c4580c0b119f37af",
|
|
2179
|
+
"ecosystem": "oh-my-claudecode",
|
|
2180
|
+
"default": true
|
|
2181
|
+
},
|
|
2182
|
+
{
|
|
2183
|
+
"id": "haus.oh-my-claudecode-designer",
|
|
2184
|
+
"version": "1.0.0",
|
|
2185
|
+
"source": "curated",
|
|
2186
|
+
"type": "agent",
|
|
2187
|
+
"path": "agents/oh-my-claudecode/designer.md",
|
|
2188
|
+
"title": "Designer",
|
|
2189
|
+
"purpose": "UI/UX Designer-Developer for stunning interfaces (Sonnet)",
|
|
2190
|
+
"whenToUse": "UI/UX Designer-Developer for stunning interfaces (Sonnet)",
|
|
2191
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2192
|
+
"tags": ["agent", "frontend"],
|
|
2193
|
+
"repoRoles": [],
|
|
2194
|
+
"tokenEstimate": 2407,
|
|
2195
|
+
"installMode": "copy-selected",
|
|
2196
|
+
"reviewStatus": "approved",
|
|
2197
|
+
"riskLevel": "low",
|
|
2198
|
+
"useMode": "copy",
|
|
2199
|
+
"license": "MIT",
|
|
2200
|
+
"licenseConfidence": "high",
|
|
2201
|
+
"originSourceId": "omcc-yeachanheo",
|
|
2202
|
+
"originUrl": "https://github.com/yeachan-heo/oh-my-claudecode/blob/50f6ff05eb5d9ebed66f05d8c4580c0b119f37af/agents/designer.md",
|
|
2203
|
+
"pinnedRef": "50f6ff05eb5d9ebed66f05d8c4580c0b119f37af",
|
|
2204
|
+
"ecosystem": "oh-my-claudecode",
|
|
2205
|
+
"default": true
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"id": "haus.oh-my-claudecode-tracer",
|
|
2209
|
+
"version": "1.0.0",
|
|
2210
|
+
"source": "curated",
|
|
2211
|
+
"type": "agent",
|
|
2212
|
+
"path": "agents/oh-my-claudecode/tracer.md",
|
|
2213
|
+
"title": "Tracer",
|
|
2214
|
+
"purpose": "Evidence-driven causal tracing with competing hypotheses, evidence for/against, uncertainty tracking, and next-probe recommendations",
|
|
2215
|
+
"whenToUse": "Evidence-driven causal tracing with competing hypotheses, evidence for/against, uncertainty tracking, and next-probe recommendations",
|
|
2216
|
+
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
2217
|
+
"tags": ["agent", "quality"],
|
|
2218
|
+
"repoRoles": [],
|
|
2219
|
+
"tokenEstimate": 3004,
|
|
2220
|
+
"installMode": "copy-selected",
|
|
2221
|
+
"reviewStatus": "approved",
|
|
2222
|
+
"riskLevel": "low",
|
|
2223
|
+
"useMode": "copy",
|
|
2224
|
+
"license": "MIT",
|
|
2225
|
+
"licenseConfidence": "high",
|
|
2226
|
+
"originSourceId": "omcc-yeachanheo",
|
|
2227
|
+
"originUrl": "https://github.com/yeachan-heo/oh-my-claudecode/blob/50f6ff05eb5d9ebed66f05d8c4580c0b119f37af/agents/tracer.md",
|
|
2228
|
+
"pinnedRef": "50f6ff05eb5d9ebed66f05d8c4580c0b119f37af",
|
|
2229
|
+
"ecosystem": "oh-my-claudecode",
|
|
2230
|
+
"default": true
|
|
1914
2231
|
}
|
|
1915
2232
|
]
|
|
1916
2233
|
}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
],
|
|
26
26
|
"allowedNpxPattern": { "source": "\\bnpx\\s+tsx\\b", "flags": "i" },
|
|
27
27
|
"anyNpxPattern": { "source": "\\bnpx\\s+\\S+", "flags": "i" },
|
|
28
|
+
"npxTsxOnlyExemptTypes": ["agent"],
|
|
28
29
|
"httpUrlPattern": { "source": "^http:\\/\\/", "flags": "i" },
|
|
29
30
|
"placeholderPattern": { "source": "\\bTODO\\b|\\bPLACEHOLDER\\b", "flags": "i" },
|
|
30
31
|
"allowedStacks": [
|
|
@@ -34,7 +34,7 @@ Specify the least. Infer the rest from the repo's stack + these conventions, and
|
|
|
34
34
|
|
|
35
35
|
- **IMPORTANT — never install anything without asking first; global/system tools especially** (Homebrew, Docker, Laravel Herd, global `npm`/`composer` packages). Detect what's already present; if something required is missing, name it, say why it's needed, and get an explicit **yes** before installing. Prefer the least-invasive option, and don't switch or override tools the dev already has.
|
|
36
36
|
- **PHP / WordPress sites are served by the developer's own PHP environment.** If they already have one — detect `valet`, `herd`, `ddev`, or `php` on PATH — **use it**: just satisfy the env contract (docroot → the repo's `web/`, HTTPS) and report the URL; never override what they already run. **Only when no local PHP environment exists** (a completely fresh machine) suggest installing **[Laravel Herd](https://herd.laravel.com)** as the default (asking first) and point its docroot at `web/` + `herd secure`.
|
|
37
|
-
- **Databases and other services (a repo's `needs:`) run in Docker as
|
|
37
|
+
- **Databases and other services (a repo's `needs:`) run in Docker as a shared, workspace-owned `docker-compose` project** — grouped and self-contained (`up`/`down` together, named volumes), namespaced per workspace instance via `COMPOSE_PROJECT_NAME` + its own host ports so the workspace can run multiple times side by side. Image/port/env per the house convention (`mysql:8`, `postgres:16`, …). Don't reuse a repo's own compose that bind-mounts repo-relative init files (`seed.sql`) — author the service in the workspace compose. Services come up **empty** (seeding is the separate `seed:` step); record chosen host ports in the workspace `localdev.yml` `env` map.
|
|
38
38
|
- **Dependencies** install from the lockfile (Step 3).
|
|
39
39
|
- A repo's `localdev.yml` carries **only what can't be inferred** — its `needs`, repo-specific `build`/`seed` commands, env keys, and URL. Detect the stack (e.g. Bedrock = `composer.json` + `web/` docroot + `wp-cli.yml`; Vendure/Node = `docker-compose.yml` + `@vendure/*`) and apply the matching convention.
|
|
40
40
|
|
|
@@ -84,7 +84,7 @@ env:
|
|
|
84
84
|
1. **Discover** `.haus-workflow/localdev.yml` in the workspace root and each repo.
|
|
85
85
|
2. **Resolve order** from the workspace `order` (repos not listed run last, in manifest order). No workspace file → manifest order.
|
|
86
86
|
3. **Per repo, in order**, apply intent via the conventions:
|
|
87
|
-
- **`needs`** →
|
|
87
|
+
- **`needs`** → add the service to the **workspace compose project** and `docker compose up -d` if not already running (namespaced by `COMPOSE_PROJECT_NAME`, free host ports per instance; not the repo's own bind-mounting compose). Comes up **empty**; record host ports in the workspace `localdev.yml` `env` map — data lands in `seed:`.
|
|
88
88
|
- **`build`** → run it (honor any node version the repo's docs note).
|
|
89
89
|
- **`serve`** → for `via: herd` / PHP envs, install nothing — verify the dev's environment serves `web/`, and report the URL.
|
|
90
90
|
- **`seed`** → populate the empty datastore. **Always a distinct, confirm-gated step, separate from `needs:` bring-up** (don't conflate "DB up" with "DB has data"). Before running, **check its prerequisites and report any gap instead of running blind** — e.g. WP-CLI present (for `wp` / `db:pull` seeds), the target repo's **`.env` written** (the seed reads connection values from it — done in the Env step above), the **SSH alias resolves** (for remote pulls like `dep db:pull staging-oderland`). **Confirm first** for every remote (SSH) or destructive (overwrites data) seed — every run, even on re-run. Missing prerequisite → skip with a clear message, don't guess.
|
|
@@ -112,13 +112,13 @@ env:
|
|
|
112
112
|
- **Yes** → start each repo in the workspace `order` (its `serve.start`, e.g. `yarn dev`; bring up any remaining foreground services), run any follow-ups (e.g. `wp sync-products sync`), then **print the live URLs** (each repo's `serve.url`).
|
|
113
113
|
- **No** → just print the ordered start commands + follow-ups as next steps; start nothing.
|
|
114
114
|
|
|
115
|
-
**Default is "ready to run" (D2):** the preparation — datastores up (
|
|
115
|
+
**Default is "ready to run" (D2):** the preparation — datastores up (workspace `docker compose` project), seeds applied (confirm-gated), links, builds, each repo's `.env` written — always happens. Starting the **foreground** dev servers and the initial product sync happen **only if the user says yes** to the start prompt above; otherwise they're printed, not run.
|
|
116
116
|
|
|
117
117
|
## Step 5 — Report and define "done"
|
|
118
118
|
|
|
119
119
|
**"Done" is an explicit terminal state**, not "looks set up". The preparation reaches:
|
|
120
120
|
|
|
121
|
-
- datastores up (
|
|
121
|
+
- datastores up (workspace `docker compose` project),
|
|
122
122
|
- dependencies installed and builds green,
|
|
123
123
|
- links wired,
|
|
124
124
|
- each repo's `.env` written from known values.
|