@haus-tech/haus-workflow 5.11.0 → 5.12.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/dist/cli.js +27 -6
- package/library/catalog/manifest.json +80 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.12.1](https://github.com/WeAreHausTech/haus-workflow/compare/v5.12.0...v5.12.1) (2026-10-08)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- **security:** allow the desktop app's auto-merge tool ([#646](https://github.com/WeAreHausTech/haus-workflow/issues/646)) ([cc29b3e](https://github.com/WeAreHausTech/haus-workflow/commit/cc29b3e18f63e72766839c06d398007a199b22c0))
|
|
8
|
+
|
|
9
|
+
## [5.12.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.11.0...v5.12.0) (2026-10-08)
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- **doctor:** AGENT REFS skips bold terms and agent words outside the sentence (ADR-0149) ([#633](https://github.com/WeAreHausTech/haus-workflow/issues/633)) ([c67b09c](https://github.com/WeAreHausTech/haus-workflow/commit/c67b09c40341f17ccafa89ecb2515129de407827)), closes [#307](https://github.com/WeAreHausTech/haus-workflow/issues/307) [#328](https://github.com/WeAreHausTech/haus-workflow/issues/328) [#329](https://github.com/WeAreHausTech/haus-workflow/issues/329) [WeAreHausTech/haus-workflow-catalog#307](https://github.com/WeAreHausTech/haus-workflow-catalog/issues/307)
|
|
14
|
+
|
|
3
15
|
## [5.11.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.10.1...v5.11.0) (2026-10-07)
|
|
4
16
|
|
|
5
17
|
### Features
|
package/dist/cli.js
CHANGED
|
@@ -4669,11 +4669,20 @@ var ALLOWED_COMMANDS = [
|
|
|
4669
4669
|
"gh search prs",
|
|
4670
4670
|
"gh search issues"
|
|
4671
4671
|
];
|
|
4672
|
+
var ALLOWED_TOOLS = [
|
|
4673
|
+
// The Claude desktop Code tab's auto-merge switch. The auto mode classifier blocked it
|
|
4674
|
+
// after `gh pr merge` itself was allowed. It reaches the same outcome as
|
|
4675
|
+
// `gh pr merge --auto`, which `Bash(gh pr merge:*)` already carries, and GitHub only
|
|
4676
|
+
// enables auto-merge where required checks exist, so branch protection stays the gate.
|
|
4677
|
+
// Outside the desktop app no such tool exists and the rule matches nothing.
|
|
4678
|
+
"mcp__ccd_pr__set_auto_merge"
|
|
4679
|
+
];
|
|
4672
4680
|
function buildAllowRules() {
|
|
4673
4681
|
return [
|
|
4674
4682
|
.../* @__PURE__ */ new Set([
|
|
4675
4683
|
...ALLOWED_SUBCOMMANDS.map((sub) => `Bash(haus ${sub}:*)`),
|
|
4676
|
-
...ALLOWED_COMMANDS.map((command) => `Bash(${command}:*)`)
|
|
4684
|
+
...ALLOWED_COMMANDS.map((command) => `Bash(${command}:*)`),
|
|
4685
|
+
...ALLOWED_TOOLS
|
|
4677
4686
|
])
|
|
4678
4687
|
];
|
|
4679
4688
|
}
|
|
@@ -8910,11 +8919,13 @@ var BOLD_SPAN = /\*\*([^*\n]+)\*\*/g;
|
|
|
8910
8919
|
var BARE_NAME = /^[a-z0-9][a-z0-9-]{2,}$/;
|
|
8911
8920
|
var KEBAB_NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/;
|
|
8912
8921
|
var AGENT_WORD = /\bagents?\b/i;
|
|
8922
|
+
var SENTENCE_END = /[.!?](?=\s|$)/g;
|
|
8913
8923
|
var ITEMS_HEADING = /\b(?:skills?|agents?)\b/i;
|
|
8914
8924
|
var LIST_ITEM = /^(\s*(?:[-*+]|\d+[.)])\s+)(.*)$/;
|
|
8915
8925
|
var LIST_LABEL = /^[A-Za-z][A-Za-z /]{0,24}:\s*/;
|
|
8916
8926
|
var KEYWORD_BEFORE = /(?:sub)?(?:skills?|agents?)\s*[:=-]*\s*$/i;
|
|
8917
8927
|
var KEYWORD_AFTER = /^\s+(?:[A-Za-z]+\s+)?(?:sub)?(?:skills?|agents?)\b/i;
|
|
8928
|
+
var ARTICLE_BEFORE = /\b(?:a|an)\s+$/i;
|
|
8918
8929
|
var ROUTER_BEFORE = /\b(?:routes?|routing|delegates?|dispatch(?:es)?|hands? off)\s*(?:to|→|->|:)?\s*$/i;
|
|
8919
8930
|
var RUN_SEPARATOR = /^\s*(?:\([^)\n]*\))?\s*(?:,|;|\/|\band\b|\bor\b|\bplus\b)\s*(?:the\s+)?$/i;
|
|
8920
8931
|
var INLINE_KEYWORD_NAME = /^(?:sub)?(?:skills?|agents?)\s*[:=]\s*(\S+)$/i;
|
|
@@ -8948,7 +8959,15 @@ function groupRuns(line2, spans) {
|
|
|
8948
8959
|
}
|
|
8949
8960
|
return runs;
|
|
8950
8961
|
}
|
|
8951
|
-
function
|
|
8962
|
+
function sentenceAround(line2, token) {
|
|
8963
|
+
let start = 0;
|
|
8964
|
+
for (const end of line2.matchAll(SENTENCE_END)) {
|
|
8965
|
+
if (end.index >= token.end) return [start, end.index + 1];
|
|
8966
|
+
start = end.index + 1;
|
|
8967
|
+
}
|
|
8968
|
+
return [start, line2.length];
|
|
8969
|
+
}
|
|
8970
|
+
function isAgentContext(line2, token, nearestHeading) {
|
|
8952
8971
|
let blanked = "";
|
|
8953
8972
|
let cursor = 0;
|
|
8954
8973
|
for (const span of boldNameSpans(line2)) {
|
|
@@ -8956,7 +8975,8 @@ function isAgentContext(line2, nearestHeading) {
|
|
|
8956
8975
|
cursor = span.end;
|
|
8957
8976
|
}
|
|
8958
8977
|
blanked += line2.slice(cursor);
|
|
8959
|
-
|
|
8978
|
+
const [start, end] = sentenceAround(line2, token);
|
|
8979
|
+
return AGENT_WORD.test(blanked.slice(start, end)) || AGENT_WORD.test(nearestHeading);
|
|
8960
8980
|
}
|
|
8961
8981
|
function extractNameReferences(lines, { knownNames = /* @__PURE__ */ new Set() } = {}) {
|
|
8962
8982
|
const out = [];
|
|
@@ -8970,16 +8990,17 @@ function extractNameReferences(lines, { knownNames = /* @__PURE__ */ new Set() }
|
|
|
8970
8990
|
const itemBody = listMatch?.[2]?.replace(LIST_LABEL, "");
|
|
8971
8991
|
const itemBodyStart = itemBody === void 0 ? -1 : line2.length - itemBody.length;
|
|
8972
8992
|
const underItemsHeading = ITEMS_HEADING.test(nearestHeading);
|
|
8973
|
-
const looseContext = isAgentContext(line2, nearestHeading);
|
|
8993
|
+
const looseContext = (span) => KEBAB_NAME.test(span.text) && isAgentContext(line2, span, nearestHeading);
|
|
8974
8994
|
for (const run of groupRuns(line2, boldNameSpans(line2))) {
|
|
8975
8995
|
const before = line2.slice(0, run[0].start);
|
|
8976
8996
|
const after = line2.slice(run.at(-1).end);
|
|
8977
|
-
const
|
|
8997
|
+
const classifier = ARTICLE_BEFORE.test(before);
|
|
8998
|
+
const positional = KEYWORD_BEFORE.test(before) || ROUTER_BEFORE.test(before) || !classifier && KEYWORD_AFTER.test(after) || // Two co-listed installed items make the run an item list. One is not enough:
|
|
8978
8999
|
// package names share basenames with skills.
|
|
8979
9000
|
run.filter((span) => knownNames.has(span.text)).length >= 2 || underItemsHeading && run[0].start === itemBodyStart;
|
|
8980
9001
|
for (const span of run) {
|
|
8981
9002
|
if (inCodeSpan(span.start)) continue;
|
|
8982
|
-
if (!positional &&
|
|
9003
|
+
if (!positional && (classifier || !looseContext(span))) continue;
|
|
8983
9004
|
out.push({ line: lineNumber, name: span.text, kind: "bold" });
|
|
8984
9005
|
}
|
|
8985
9006
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "6.
|
|
2
|
+
"version": "6.10.0",
|
|
3
3
|
"manifestFormat": 2,
|
|
4
4
|
"globalPlugins": [
|
|
5
5
|
{
|
|
@@ -40,7 +40,9 @@
|
|
|
40
40
|
"haus.mattpocock-domain-modeling",
|
|
41
41
|
"haus.mattpocock-grill-with-docs",
|
|
42
42
|
"haus.mattpocock-research",
|
|
43
|
-
"haus.mattpocock-handoff"
|
|
43
|
+
"haus.mattpocock-handoff",
|
|
44
|
+
"haus.mattpocock-retro",
|
|
45
|
+
"haus.mattpocock-writing-for-agents"
|
|
44
46
|
]
|
|
45
47
|
},
|
|
46
48
|
"keepIds": ["haus.currents-dev-playwright-best-practices"]
|
|
@@ -49,7 +51,7 @@
|
|
|
49
51
|
"items": [
|
|
50
52
|
{
|
|
51
53
|
"id": "haus.agentic-workflow-standard",
|
|
52
|
-
"version": "2.1
|
|
54
|
+
"version": "2.2.1",
|
|
53
55
|
"source": "haus",
|
|
54
56
|
"type": "template",
|
|
55
57
|
"path": "templates/agentic-workflow-standard.md",
|
|
@@ -60,7 +62,7 @@
|
|
|
60
62
|
"tags": ["workflow", "baseline", "project-instructions"],
|
|
61
63
|
"repoRoles": [],
|
|
62
64
|
"installMode": "copy-selected",
|
|
63
|
-
"tokenEstimate":
|
|
65
|
+
"tokenEstimate": 3434,
|
|
64
66
|
"tokenBudget": 5131,
|
|
65
67
|
"default": true,
|
|
66
68
|
"reviewStatus": "approved",
|
|
@@ -1656,7 +1658,7 @@
|
|
|
1656
1658
|
},
|
|
1657
1659
|
{
|
|
1658
1660
|
"id": "haus.adr-decisions",
|
|
1659
|
-
"version": "1.
|
|
1661
|
+
"version": "1.2.0",
|
|
1660
1662
|
"source": "haus",
|
|
1661
1663
|
"type": "skill",
|
|
1662
1664
|
"path": "skills/haus-owned/general/adr-decisions",
|
|
@@ -1668,7 +1670,7 @@
|
|
|
1668
1670
|
"repoRoles": [],
|
|
1669
1671
|
"ecosystem": "general",
|
|
1670
1672
|
"installMode": "copy-selected",
|
|
1671
|
-
"tokenEstimate":
|
|
1673
|
+
"tokenEstimate": 924,
|
|
1672
1674
|
"tokenBudget": 1122,
|
|
1673
1675
|
"default": true,
|
|
1674
1676
|
"reviewStatus": "approved",
|
|
@@ -1676,7 +1678,7 @@
|
|
|
1676
1678
|
},
|
|
1677
1679
|
{
|
|
1678
1680
|
"id": "haus.issue-authoring",
|
|
1679
|
-
"version": "1.
|
|
1681
|
+
"version": "1.4.1",
|
|
1680
1682
|
"source": "haus",
|
|
1681
1683
|
"type": "skill",
|
|
1682
1684
|
"path": "skills/haus-owned/general/issue-authoring",
|
|
@@ -1688,7 +1690,7 @@
|
|
|
1688
1690
|
"repoRoles": [],
|
|
1689
1691
|
"ecosystem": "general",
|
|
1690
1692
|
"installMode": "copy-selected",
|
|
1691
|
-
"tokenEstimate":
|
|
1693
|
+
"tokenEstimate": 2590,
|
|
1692
1694
|
"tokenBudget": 2970,
|
|
1693
1695
|
"default": true,
|
|
1694
1696
|
"reviewStatus": "approved",
|
|
@@ -1725,7 +1727,7 @@
|
|
|
1725
1727
|
},
|
|
1726
1728
|
{
|
|
1727
1729
|
"id": "haus.issue-creator",
|
|
1728
|
-
"version": "1.
|
|
1730
|
+
"version": "1.3.0",
|
|
1729
1731
|
"source": "haus",
|
|
1730
1732
|
"type": "agent",
|
|
1731
1733
|
"path": "agents/haus-owned/issue-creator.md",
|
|
@@ -1737,7 +1739,7 @@
|
|
|
1737
1739
|
"repoRoles": [],
|
|
1738
1740
|
"ecosystem": "general",
|
|
1739
1741
|
"installMode": "copy-selected",
|
|
1740
|
-
"tokenEstimate":
|
|
1742
|
+
"tokenEstimate": 797,
|
|
1741
1743
|
"tokenBudget": 974,
|
|
1742
1744
|
"default": true,
|
|
1743
1745
|
"reviewStatus": "approved",
|
|
@@ -5564,14 +5566,14 @@
|
|
|
5564
5566
|
},
|
|
5565
5567
|
{
|
|
5566
5568
|
"id": "haus.mattpocock-grill-with-docs",
|
|
5567
|
-
"version": "1.0.
|
|
5569
|
+
"version": "1.0.1",
|
|
5568
5570
|
"source": "curated",
|
|
5569
5571
|
"type": "skill",
|
|
5570
5572
|
"path": "sources/mattpocock/skills/engineering/grill-with-docs",
|
|
5571
5573
|
"title": "Mattpocock Grill With Docs",
|
|
5572
5574
|
"purpose": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.",
|
|
5573
5575
|
"whenToUse": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.",
|
|
5574
|
-
"whenNotToUse": "Not for a customer request that is to be specced: the request flow never asks questions back. Run it on a branch
|
|
5576
|
+
"whenNotToUse": "Not for a customer request that is to be specced: the request flow never asks questions back. Run it on a branch (a worktree only from a clean, committed state), because it writes files. One session: split larger work first.",
|
|
5575
5577
|
"tags": ["workflow"],
|
|
5576
5578
|
"repoRoles": [],
|
|
5577
5579
|
"tokenEstimate": 62,
|
|
@@ -5660,6 +5662,72 @@
|
|
|
5660
5662
|
"role": "handoff-workflow"
|
|
5661
5663
|
}
|
|
5662
5664
|
]
|
|
5665
|
+
},
|
|
5666
|
+
{
|
|
5667
|
+
"id": "haus.mattpocock-retro",
|
|
5668
|
+
"version": "1.0.0",
|
|
5669
|
+
"source": "curated",
|
|
5670
|
+
"type": "skill",
|
|
5671
|
+
"path": "sources/mattpocock/skills/engineering/retro",
|
|
5672
|
+
"title": "Mattpocock Retro",
|
|
5673
|
+
"purpose": "Conduct a retrospective on a coding session.",
|
|
5674
|
+
"whenToUse": "Conduct a retrospective on a coding session.",
|
|
5675
|
+
"whenNotToUse": "Not for a verdict on the code a session produced. A candidate about haus-shipped content is filed upstream, never hand-edited. Only the candidates you pick are filed.",
|
|
5676
|
+
"tags": ["workflow"],
|
|
5677
|
+
"repoRoles": [],
|
|
5678
|
+
"tokenEstimate": 1093,
|
|
5679
|
+
"tokenBudget": 1421,
|
|
5680
|
+
"installMode": "copy-selected",
|
|
5681
|
+
"default": false,
|
|
5682
|
+
"reviewStatus": "approved",
|
|
5683
|
+
"riskLevel": "low",
|
|
5684
|
+
"useMode": "copy",
|
|
5685
|
+
"license": "MIT",
|
|
5686
|
+
"licenseConfidence": "high",
|
|
5687
|
+
"originSourceId": "mattpocock-skills",
|
|
5688
|
+
"originUrl": "https://github.com/mattpocock/skills/blob/4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d/skills/engineering/retro/SKILL.md",
|
|
5689
|
+
"pinnedRef": "4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d",
|
|
5690
|
+
"ecosystem": "general",
|
|
5691
|
+
"optInTier": "workflow",
|
|
5692
|
+
"optInGroup": "Session retrospective",
|
|
5693
|
+
"requiresAny": [
|
|
5694
|
+
{
|
|
5695
|
+
"role": "retro-workflow"
|
|
5696
|
+
}
|
|
5697
|
+
]
|
|
5698
|
+
},
|
|
5699
|
+
{
|
|
5700
|
+
"id": "haus.mattpocock-writing-for-agents",
|
|
5701
|
+
"version": "1.0.0",
|
|
5702
|
+
"source": "curated",
|
|
5703
|
+
"type": "skill",
|
|
5704
|
+
"path": "sources/mattpocock/skills/productivity/writing-for-agents",
|
|
5705
|
+
"title": "Mattpocock Writing For Agents",
|
|
5706
|
+
"purpose": "Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.",
|
|
5707
|
+
"whenToUse": "Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.",
|
|
5708
|
+
"whenNotToUse": "Not for generating or refreshing project docs or the CLAUDE.md body: the writing-documentation skill owns that. Not for testing a skill before shipping: the superpowers writing-skills skill does that. Never on haus-managed files and blocks, which change only through the catalog and haus apply.",
|
|
5709
|
+
"tags": ["workflow"],
|
|
5710
|
+
"repoRoles": [],
|
|
5711
|
+
"tokenEstimate": 2722,
|
|
5712
|
+
"tokenBudget": 3539,
|
|
5713
|
+
"installMode": "copy-selected",
|
|
5714
|
+
"default": false,
|
|
5715
|
+
"reviewStatus": "approved",
|
|
5716
|
+
"riskLevel": "low",
|
|
5717
|
+
"useMode": "copy",
|
|
5718
|
+
"license": "MIT",
|
|
5719
|
+
"licenseConfidence": "high",
|
|
5720
|
+
"originSourceId": "mattpocock-skills",
|
|
5721
|
+
"originUrl": "https://github.com/mattpocock/skills/blob/4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d/skills/productivity/writing-for-agents/SKILL.md",
|
|
5722
|
+
"pinnedRef": "4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d",
|
|
5723
|
+
"ecosystem": "general",
|
|
5724
|
+
"optInTier": "workflow",
|
|
5725
|
+
"optInGroup": "Session retrospective",
|
|
5726
|
+
"requiresAny": [
|
|
5727
|
+
{
|
|
5728
|
+
"role": "retro-workflow"
|
|
5729
|
+
}
|
|
5730
|
+
]
|
|
5663
5731
|
}
|
|
5664
5732
|
]
|
|
5665
5733
|
}
|