@haus-tech/haus-workflow 0.16.2 → 0.16.3

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.16.3](https://github.com/WeAreHausTech/haus-workflow/compare/v0.16.2...v0.16.3) (2026-06-09)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **install:** keep skill frontmatter valid by stamping marker as a field ([#79](https://github.com/WeAreHausTech/haus-workflow/issues/79)) ([76ddbf1](https://github.com/WeAreHausTech/haus-workflow/commit/76ddbf1248b8844538363dcfd3744cd975d96f52))
8
+
3
9
  ## [0.16.2](https://github.com/WeAreHausTech/haus-workflow/compare/v0.16.1...v0.16.2) (2026-06-09)
4
10
 
5
11
  ## [0.16.1](https://github.com/WeAreHausTech/haus-workflow/compare/v0.16.0...v0.16.1) (2026-06-09)
package/dist/cli.js CHANGED
@@ -3323,6 +3323,8 @@ import fs15 from "fs-extra";
3323
3323
  // src/install/header.ts
3324
3324
  var MD_PREFIX = "<!-- HAUS-MANAGED";
3325
3325
  var MD_SUFFIX = " -->";
3326
+ var FM_FENCE = "---";
3327
+ var FM_KEY = "haus_managed";
3326
3328
  function parseAttrs(raw) {
3327
3329
  const idMatch = /\bid=(\S+)/.exec(raw);
3328
3330
  const vMatch = /\bv=(\S+)/.exec(raw);
@@ -3330,20 +3332,67 @@ function parseAttrs(raw) {
3330
3332
  if (!idMatch || !vMatch || !srcMatch) return void 0;
3331
3333
  return { stableId: idMatch[1], schemaVersion: vMatch[1], source: srcMatch[1] };
3332
3334
  }
3335
+ function isFence(line2) {
3336
+ return (line2 ?? "").replace(/\r$/, "") === FM_FENCE;
3337
+ }
3338
+ function hasFrontmatter(content2) {
3339
+ return isFence(content2.split("\n", 1)[0]);
3340
+ }
3341
+ function frontmatterMarkerValue(content2) {
3342
+ const lines = content2.split("\n");
3343
+ if (!isFence(lines[0])) return void 0;
3344
+ for (let i = 1; i < lines.length; i++) {
3345
+ if (isFence(lines[i])) return void 0;
3346
+ const m = /^haus_managed:\s*"?(.*?)"?\s*$/.exec(lines[i]);
3347
+ if (m) return m[1];
3348
+ }
3349
+ return void 0;
3350
+ }
3333
3351
  function parseMarkdownHeader(content2) {
3334
3352
  const firstLine = content2.split("\n")[0] ?? "";
3335
- if (!firstLine.startsWith(MD_PREFIX)) return void 0;
3336
- return parseAttrs(firstLine);
3353
+ if (firstLine.startsWith(MD_PREFIX)) return parseAttrs(firstLine);
3354
+ const fmValue = frontmatterMarkerValue(content2);
3355
+ if (fmValue !== void 0) return parseAttrs(fmValue);
3356
+ return void 0;
3337
3357
  }
3338
3358
  function buildMarkdownHeader(h) {
3339
3359
  return `${MD_PREFIX} id=${h.stableId} v=${h.schemaVersion} source=${h.source}${MD_SUFFIX}`;
3340
3360
  }
3361
+ function buildMarkerValue(h) {
3362
+ return `id=${h.stableId} v=${h.schemaVersion} source=${h.source}`;
3363
+ }
3364
+ function stampFrontmatter(content2, h) {
3365
+ const lines = content2.split("\n");
3366
+ let close = -1;
3367
+ for (let i = 1; i < lines.length; i++) {
3368
+ if (isFence(lines[i])) {
3369
+ close = i;
3370
+ break;
3371
+ }
3372
+ }
3373
+ if (close === -1) return content2;
3374
+ const fields2 = [];
3375
+ for (let i = 1; i < close; i++) {
3376
+ if (/^haus_managed:/.test(lines[i])) continue;
3377
+ fields2.push(lines[i]);
3378
+ }
3379
+ const rebuilt = [
3380
+ FM_FENCE,
3381
+ ...fields2,
3382
+ `${FM_KEY}: "${buildMarkerValue(h)}"`,
3383
+ ...lines.slice(close)
3384
+ // closing fence + body
3385
+ ];
3386
+ return rebuilt.join("\n");
3387
+ }
3341
3388
  function stampMarkdown(content2, h) {
3389
+ if (hasFrontmatter(content2)) return stampFrontmatter(content2, h);
3342
3390
  const header = buildMarkdownHeader(h);
3343
- const existing = parseMarkdownHeader(content2);
3344
- if (existing) {
3345
- const rest = content2.slice(content2.indexOf("\n") + 1);
3346
- return `${header}
3391
+ const firstLine = content2.split("\n")[0] ?? "";
3392
+ if (firstLine.startsWith(MD_PREFIX)) {
3393
+ const nl = content2.indexOf("\n");
3394
+ const rest = nl === -1 ? "" : content2.slice(nl + 1);
3395
+ return rest === "" ? header : `${header}
3347
3396
  ${rest}`;
3348
3397
  }
3349
3398
  return `${header}
@@ -1,8 +1,6 @@
1
- ## <!-- HAUS-MANAGED id=skill.haus-workflow v=2 source=@haus-tech/haus-workflow@0.1.0 -->
2
-
1
+ ---
3
2
  name: haus-workflow
4
3
  description: Haus all-in-one workflow skill. Handles project setup, update, catalog refresh, and CLAUDE.md regeneration. Invoke with a task name or without to get a menu.
5
-
6
4
  ---
7
5
 
8
6
  # haus-workflow
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "0.16.2",
3
+ "version": "0.16.3",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,9 +18,7 @@
18
18
  "library/catalog",
19
19
  "tests/fixtures/catalog",
20
20
  "README.md",
21
- "CHANGELOG.md",
22
- "LICENSE",
23
- "NOTICE"
21
+ "CHANGELOG.md"
24
22
  ],
25
23
  "scripts": {
26
24
  "build": "tsup src/cli.ts --format esm --dts --clean --out-dir dist --external @inquirer/checkbox",
@@ -34,8 +32,6 @@
34
32
  "typecheck": "tsc --noEmit",
35
33
  "typecheck:scripts": "tsc --noEmit --project tsconfig.scripts.json",
36
34
  "pack:local": "yarn pack",
37
- "publish:dry": "npm pack --dry-run",
38
- "publish:public": "yarn npm publish --access public",
39
35
  "release": "GITHUB_TOKEN=$(gh auth token) release-it",
40
36
  "release:dry": "GITHUB_TOKEN=$(gh auth token) release-it --dry-run",
41
37
  "prepack": "yarn build",