@metasession.co/devaudit-cli 0.1.34 → 0.1.35

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/dist/index.js CHANGED
@@ -55,7 +55,7 @@ function emitJsonResult(payload) {
55
55
 
56
56
  // package.json
57
57
  var package_default = {
58
- version: "0.1.34"};
58
+ version: "0.1.35"};
59
59
 
60
60
  // src/lib/version.ts
61
61
  var CLI_VERSION = package_default.version;
@@ -1787,26 +1787,37 @@ async function syncSkills(ctx) {
1787
1787
  }
1788
1788
  return { name: "Claude Code skills", filesSynced: count, message: `${count} synced to .claude/skills/` };
1789
1789
  }
1790
+ var HELPER_FILES = ["evidence.ts", "evidence-shot-core.ts"];
1790
1791
  async function syncEvidenceHelper(ctx) {
1791
1792
  if (ctx.stack !== "node") {
1792
1793
  return { name: "E2E evidence helper", filesSynced: 0, skipped: true };
1793
1794
  }
1794
- const src = join(
1795
+ const srcDir = join(
1795
1796
  ctx.installerRoot,
1796
1797
  "sdlc",
1797
1798
  "files",
1798
1799
  "_common",
1799
1800
  "skills",
1800
1801
  "e2e-test-engineer",
1801
- "references",
1802
- "evidence.ts"
1802
+ "references"
1803
1803
  );
1804
- if (!await exists(src)) {
1805
- return { name: "E2E evidence helper", filesSynced: 0, skipped: true, message: "source not found" };
1804
+ let copied = 0;
1805
+ const missing = [];
1806
+ for (const fname of HELPER_FILES) {
1807
+ const src = join(srcDir, fname);
1808
+ if (!await exists(src)) {
1809
+ missing.push(fname);
1810
+ continue;
1811
+ }
1812
+ const dst = join(ctx.projectPath, "e2e", "helpers", fname);
1813
+ await copyFile(src, dst);
1814
+ copied += 1;
1806
1815
  }
1807
- const dst = join(ctx.projectPath, "e2e", "helpers", "evidence.ts");
1808
- await copyFile(src, dst);
1809
- return { name: "E2E evidence helper", filesSynced: 1, message: "synced to e2e/helpers/evidence.ts" };
1816
+ if (copied === 0) {
1817
+ return { name: "E2E evidence helper", filesSynced: 0, skipped: true, message: "no sources found" };
1818
+ }
1819
+ const message = missing.length > 0 ? `synced ${copied} to e2e/helpers/ (missing: ${missing.join(", ")})` : `synced to e2e/helpers/ (${HELPER_FILES.join(" + ")})`;
1820
+ return { name: "E2E evidence helper", filesSynced: copied, message };
1810
1821
  }
1811
1822
 
1812
1823
  // src/lib/templates.ts
@@ -1820,14 +1831,20 @@ function substituteTokens(content, tokens) {
1820
1831
  }
1821
1832
  function substituteBlocks(content, blocks) {
1822
1833
  if (Object.keys(blocks).length === 0) return content;
1823
- Object.keys(blocks).map((k) => `{{${k}}}`);
1824
- return content.split("\n").map((line) => {
1834
+ const out = [];
1835
+ for (const line of content.split("\n")) {
1836
+ let matched = false;
1825
1837
  for (const [key, replacement] of Object.entries(blocks)) {
1826
1838
  const needle = `{{${key}}}`;
1827
- if (line.includes(needle)) return replacement;
1839
+ if (line.includes(needle)) {
1840
+ matched = true;
1841
+ if (replacement.length > 0) out.push(replacement);
1842
+ break;
1843
+ }
1828
1844
  }
1829
- return line;
1830
- }).join("\n");
1845
+ if (!matched) out.push(line);
1846
+ }
1847
+ return out.join("\n");
1831
1848
  }
1832
1849
  function stripServicesBlock(content) {
1833
1850
  const lines = content.split("\n");