@dzhechkov/harness-cli 0.8.17 → 0.8.19
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/.dz-manifest.json +7 -7
- package/README.md +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -2
- package/dist/cli.js.map +1 -1
- package/package.json +8 -8
- package/sbom.json +6 -6
- package/src/cli.ts +28 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/harness-cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.19",
|
|
4
4
|
"description": "The dz CLI — install AI skills for Claude Code, Codex, OpenCode, Hermes, OpenClaude, GitHub Copilot. 87 commands, 14 presets, 10 platform targets.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,23 +42,23 @@
|
|
|
42
42
|
"src"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@dzhechkov/harness-core": "^0.8.
|
|
45
|
+
"@dzhechkov/harness-core": "^0.8.27",
|
|
46
46
|
"@dzhechkov/harness-presets": "^0.5.18",
|
|
47
47
|
"@dzhechkov/skills-devops": "^0.3.17",
|
|
48
48
|
"@dzhechkov/scout": "^0.8.11",
|
|
49
49
|
"@dzhechkov/skills-mcp": "^0.3.10",
|
|
50
50
|
"@dzhechkov/skills-web3": "^0.2.9",
|
|
51
|
-
"@dzhechkov/skills-qe": "^0.3.14",
|
|
52
51
|
"@dzhechkov/skills-meta": "^0.9.55",
|
|
53
|
-
"@dzhechkov/skills-ecc": "^0.1.12",
|
|
54
|
-
"@dzhechkov/skills-news": "^0.1.16",
|
|
55
52
|
"@dzhechkov/skills-academic": "^0.3.7",
|
|
53
|
+
"@dzhechkov/skills-qe": "^0.3.14",
|
|
54
|
+
"@dzhechkov/skills-news": "^0.1.16",
|
|
55
|
+
"@dzhechkov/skills-ecc": "^0.1.12",
|
|
56
56
|
"@dzhechkov/skills-pm": "^0.1.5",
|
|
57
|
-
"@dzhechkov/skills-idea2prd": "^0.1.15",
|
|
58
57
|
"@dzhechkov/skills-taste": "^0.1.5",
|
|
59
|
-
"@dzhechkov/skills-
|
|
58
|
+
"@dzhechkov/skills-idea2prd": "^0.1.15",
|
|
60
59
|
"@dzhechkov/skills-reverse-engineering": "^0.3.4",
|
|
61
|
-
"@dzhechkov/skills-website-cloner": "^0.1.5"
|
|
60
|
+
"@dzhechkov/skills-website-cloner": "^0.1.5",
|
|
61
|
+
"@dzhechkov/skills-presentation-storyteller": "^0.1.14"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@types/node": "^25.6.0",
|
package/sbom.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"hashes": [
|
|
26
26
|
{
|
|
27
27
|
"alg": "SHA-256",
|
|
28
|
-
"content": "
|
|
28
|
+
"content": "45af5a47278e24f2049789ac96bba2c18597e29e26f3a9df3ac95fc5b52719c2"
|
|
29
29
|
}
|
|
30
30
|
]
|
|
31
31
|
},
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"hashes": [
|
|
126
126
|
{
|
|
127
127
|
"alg": "SHA-256",
|
|
128
|
-
"content": "
|
|
128
|
+
"content": "22cddd1ff809cea9301af0905195bc1f2ff29730ce1b8a257c99c518457cff34"
|
|
129
129
|
}
|
|
130
130
|
]
|
|
131
131
|
},
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"hashes": [
|
|
136
136
|
{
|
|
137
137
|
"alg": "SHA-256",
|
|
138
|
-
"content": "
|
|
138
|
+
"content": "724695fafaa2a68b6c279ea1f55f14732888ee7ba6919f991ace14fa54620b08"
|
|
139
139
|
}
|
|
140
140
|
]
|
|
141
141
|
},
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"hashes": [
|
|
146
146
|
{
|
|
147
147
|
"alg": "SHA-256",
|
|
148
|
-
"content": "
|
|
148
|
+
"content": "2935abfc89e4a704d9615b0417ff19279487c05a8a97347b2de6c88908276d33"
|
|
149
149
|
}
|
|
150
150
|
]
|
|
151
151
|
},
|
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
},
|
|
380
380
|
{
|
|
381
381
|
"name": "dz:canonical-json-sha256-v2",
|
|
382
|
-
"value": "
|
|
382
|
+
"value": "5f0c597e704b7b515d40f4a95b784b26d4fe2a5adf1f1309a350541506eb14d4"
|
|
383
383
|
}
|
|
384
384
|
]
|
|
385
385
|
},
|
|
@@ -409,7 +409,7 @@
|
|
|
409
409
|
"hashes": [
|
|
410
410
|
{
|
|
411
411
|
"alg": "SHA-256",
|
|
412
|
-
"content": "
|
|
412
|
+
"content": "f0bc9f52737064a3d5b26fb2ef07c0aa79e003dfca5e1277cd0988a65cdeeb8e"
|
|
413
413
|
}
|
|
414
414
|
]
|
|
415
415
|
},
|
package/src/cli.ts
CHANGED
|
@@ -6855,10 +6855,15 @@ function cmdSbom(options: Map<string, string>, flags: Set<string>, cwd: string,
|
|
|
6855
6855
|
return 0;
|
|
6856
6856
|
}
|
|
6857
6857
|
|
|
6858
|
-
function cmdPublish(options: Map<string, string>, flags: Set<string>, cwd: string,
|
|
6858
|
+
function cmdPublish(options: Map<string, string>, flags: Set<string>, cwd: string, writeOutput: Write): number {
|
|
6859
|
+
const json = flags.has('json');
|
|
6860
|
+
// Under --json stdout carries exactly one JSON document, so every human line — guard notes, refusals,
|
|
6861
|
+
// progress — goes to stderr instead of being dropped: a refusal that prints nothing is the silent
|
|
6862
|
+
// failure this repo forbids (QE P2 2026-09-10).
|
|
6863
|
+
const write: Write = json ? (line) => { process.stderr.write(`${line}\n`); } : writeOutput;
|
|
6859
6864
|
// Reject unknown flags/options so a typo (e.g. `--dry-rum`) can NEVER be
|
|
6860
6865
|
// silently swallowed and flip the command into live-publish mode.
|
|
6861
|
-
const allowedFlags = new Set(['dry-run', 'no-dry-run', 'yes', 'confirm', 'bump-only', 'help', 'require-signing', 'provenance', 'no-provenance']);
|
|
6866
|
+
const allowedFlags = new Set(['dry-run', 'no-dry-run', 'yes', 'confirm', 'bump-only', 'help', 'require-signing', 'provenance', 'no-provenance', 'json']);
|
|
6862
6867
|
const allowedOptions = new Set(['filter', 'claim-check', 'no-guard', 'sign-key']);
|
|
6863
6868
|
const allowedHelp = ' allowed: --dry-run (default), --yes/--confirm/--no-dry-run (go live), --bump-only, --filter <substr>, --claim-check <off|warn|error>, --no-guard "<reason>" (skip the guard pre-flight; logged)';
|
|
6864
6869
|
for (const flag of flags) {
|
|
@@ -7120,6 +7125,11 @@ function cmdPublish(options: Map<string, string>, flags: Set<string>, cwd: strin
|
|
|
7120
7125
|
},
|
|
7121
7126
|
});
|
|
7122
7127
|
|
|
7128
|
+
if (json) {
|
|
7129
|
+
writeOutput(JSON.stringify(report));
|
|
7130
|
+
return report.errors > 0 ? 1 : 0;
|
|
7131
|
+
}
|
|
7132
|
+
|
|
7123
7133
|
write(`\ndz publish${dryRun ? ' --dry-run' : ''}${bumpOnly ? ' --bump-only' : ''}${claimCheckOpt !== 'warn' ? ` --claim-check ${claimCheckOpt}` : ''}`);
|
|
7124
7134
|
write(` Published: ${report.published} Skipped: ${report.skipped} Errors: ${report.errors}\n`);
|
|
7125
7135
|
for (const pkg of report.packages) {
|
|
@@ -7134,6 +7144,22 @@ function cmdPublish(options: Map<string, string>, flags: Set<string>, cwd: strin
|
|
|
7134
7144
|
if (pkg.status === 'error' && pkg.error) {
|
|
7135
7145
|
for (const line of pkg.error.split('\n')) write(` ${line}`);
|
|
7136
7146
|
}
|
|
7147
|
+
const probeLog = (pkg as typeof pkg & {
|
|
7148
|
+
readonly probeLog?: readonly {
|
|
7149
|
+
readonly attempt: number;
|
|
7150
|
+
readonly stdout: string;
|
|
7151
|
+
readonly stderr: string;
|
|
7152
|
+
readonly code: number | null;
|
|
7153
|
+
readonly ms: number;
|
|
7154
|
+
}[];
|
|
7155
|
+
}).probeLog;
|
|
7156
|
+
if (pkg.status === 'error' && probeLog && probeLog.length > 0) {
|
|
7157
|
+
for (const probe of probeLog.slice(-3)) {
|
|
7158
|
+
const output = probe.stderr || probe.stdout;
|
|
7159
|
+
const firstLine = output.split(/\r?\n/, 1)[0]?.trim() || '(empty)';
|
|
7160
|
+
write(` probe ${probe.attempt}: code ${String(probe.code)}, ${probe.ms}ms — ${firstLine}`);
|
|
7161
|
+
}
|
|
7162
|
+
}
|
|
7137
7163
|
// The rollback branch cannot tell "publish failed" from "publish landed, registry never answered":
|
|
7138
7164
|
// both restore package.json. The operator can — one registry query — so say what to check.
|
|
7139
7165
|
if (pkg.status === 'error' && pkg.error?.startsWith('registry did not confirm')) {
|