@harness-lab/cli 0.2.3 → 0.2.4

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/README.md CHANGED
@@ -36,6 +36,11 @@ Participant-facing default install:
36
36
  npm install -g @harness-lab/cli
37
37
  ```
38
38
 
39
+ Supported runtime:
40
+
41
+ - Node `22` or newer
42
+ - npm `10` or newer recommended
43
+
39
44
  Verify the binary:
40
45
 
41
46
  ```bash
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifestVersion": 1,
3
3
  "bundleName": "harness-lab-workshop",
4
- "bundleVersion": "0.2.3",
4
+ "bundleVersion": "0.2.4",
5
5
  "contentHash": "9e57d44e4a3f9296f4913cd51eefbf9dff7d6d9da8d4afb1ae5a2ce2a7dc4323",
6
6
  "files": [
7
7
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harness-lab/cli",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Participant-facing Harness Lab CLI for facilitator auth and workshop operations",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -20,7 +20,7 @@
20
20
  "ai-agents"
21
21
  ],
22
22
  "engines": {
23
- "node": "22.x"
23
+ "node": ">=22"
24
24
  },
25
25
  "publishConfig": {
26
26
  "access": "public"
@@ -63,7 +63,29 @@ export async function pathExists(targetPath) {
63
63
 
64
64
  async function copyDirectoryTree(sourceRoot, targetRoot) {
65
65
  for (const [sourceRelativePath, targetRelativePath] of DIRECTORY_COPIES) {
66
- await fs.cp(path.join(sourceRoot, sourceRelativePath), path.join(targetRoot, targetRelativePath), { recursive: true });
66
+ await copyDirectoryRecursive(
67
+ path.join(sourceRoot, sourceRelativePath),
68
+ path.join(targetRoot, targetRelativePath),
69
+ );
70
+ }
71
+ }
72
+
73
+ async function copyDirectoryRecursive(sourcePath, targetPath) {
74
+ const entries = await fs.readdir(sourcePath, { withFileTypes: true });
75
+ await fs.mkdir(targetPath, { recursive: true });
76
+
77
+ for (const entry of entries) {
78
+ const sourceEntryPath = path.join(sourcePath, entry.name);
79
+ const targetEntryPath = path.join(targetPath, entry.name);
80
+
81
+ if (entry.isDirectory()) {
82
+ await copyDirectoryRecursive(sourceEntryPath, targetEntryPath);
83
+ continue;
84
+ }
85
+
86
+ if (entry.isFile()) {
87
+ await fs.copyFile(sourceEntryPath, targetEntryPath);
88
+ }
67
89
  }
68
90
  }
69
91