mirror of
https://github.com/obra/superpowers.git
synced 2026-06-19 17:19:04 +08:00
fix(writing-skills): run graphviz without a shell in render-graphs.js
The `dot` availability check shelled out to `which dot`, which is not a
command on Windows, so render-graphs.js reported graphviz as missing on
Windows even when it was installed. Replace it with a direct `dot -V`
probe via execFileSync.
Also switch the SVG render call from execSync to execFileSync('dot',
['-Tsvg']). Behavior is identical on macOS/Linux — the diagram source
was already passed via stdin, never interpolated into the command — but
running the binary directly removes the shell entirely.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { execSync } = require('child_process');
|
||||
const { execFileSync } = require('child_process');
|
||||
|
||||
function extractDotBlocks(markdown) {
|
||||
const blocks = [];
|
||||
@@ -69,7 +69,7 @@ ${bodies.join('\n\n')}
|
||||
|
||||
function renderToSvg(dotContent) {
|
||||
try {
|
||||
return execSync('dot -Tsvg', {
|
||||
return execFileSync('dot', ['-Tsvg'], {
|
||||
input: dotContent,
|
||||
encoding: 'utf-8',
|
||||
maxBuffer: 10 * 1024 * 1024
|
||||
@@ -107,9 +107,10 @@ function main() {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Check if dot is available
|
||||
// Check if dot is available. Run the binary directly rather than probing
|
||||
// with `which`, which is not a command on Windows.
|
||||
try {
|
||||
execSync('which dot', { encoding: 'utf-8' });
|
||||
execFileSync('dot', ['-V'], { stdio: 'ignore' });
|
||||
} catch {
|
||||
console.error('Error: graphviz (dot) not found. Install with:');
|
||||
console.error(' brew install graphviz # macOS');
|
||||
|
||||
Reference in New Issue
Block a user