Skip to content

Commit 4b9efb2

Browse files
committed
chore: prepare plugin marketplace submission
1 parent 479167b commit 4b9efb2

11 files changed

Lines changed: 118 additions & 39 deletions

File tree

.codex-plugin/plugin.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"Check schema and Core Web Vitals for this URL.",
5959
"Build an SEO action plan for this business."
6060
],
61-
"brandColor": "#D4AF37"
61+
"brandColor": "#D4AF37",
62+
"composerIcon": "./assets/icon.svg"
6263
}
6364
}

.codexignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
.codex/
2+
.codex-work/
3+
.git/
4+
.github/
5+
.pytest_cache/
6+
.venv/
7+
build/
8+
dist/
9+
dungeon/.logs/
10+
dungeon/dist/
11+
dungeon/node_modules/
12+
node_modules/
13+
output/
14+
playwright-report/
15+
site/
16+
test-results/
17+
*.egg-info/
18+
*.log

.github/workflows/ci.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ jobs:
1414
name: Python Syntax Check
1515
runs-on: ubuntu-latest
1616
steps:
17-
- uses: actions/checkout@v6
17+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
1818

1919
- name: Set up Python 3.10
20-
uses: actions/setup-python@v6
20+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
2121
with:
2222
python-version: "3.10"
2323

@@ -36,10 +36,10 @@ jobs:
3636
# limit and the sync_flow dry-run test fails on shared-runner IPs.
3737
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3838
steps:
39-
- uses: actions/checkout@v6
39+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
4040

4141
- name: Set up Python 3.10
42-
uses: actions/setup-python@v6
42+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
4343
with:
4444
python-version: "3.10"
4545

@@ -59,10 +59,10 @@ jobs:
5959
name: Dungeon app build
6060
runs-on: ubuntu-latest
6161
steps:
62-
- uses: actions/checkout@v6
62+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
6363

6464
- name: Set up Node 22
65-
uses: actions/setup-node@v5
65+
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
6666
with:
6767
node-version: "22"
6868
cache: npm
@@ -88,7 +88,7 @@ jobs:
8888
name: Secret scan
8989
runs-on: ubuntu-latest
9090
steps:
91-
- uses: actions/checkout@v6
91+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
9292

9393
- name: Scan tracked files for leaked credentials
9494
run: |
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: HOL Plugin Scanner
2+
3+
on:
4+
push:
5+
branches: [main, master]
6+
pull_request:
7+
branches: [main, master]
8+
9+
permissions:
10+
contents: read
11+
security-events: write
12+
13+
jobs:
14+
scan:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
18+
19+
- name: HOL Plugin Scanner
20+
uses: hashgraph-online/ai-plugin-scanner-action@18666b10a2e953318e119f61ea6d5bbb717b9bda # v1
21+
with:
22+
plugin_dir: "."
23+
mode: scan
24+
min_score: 80
25+
fail_on_severity: high
26+
format: sarif
27+
upload_sarif: true

.github/workflows/v2.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ jobs:
2727
name: Manifest consistency (13 assertions)
2828
runs-on: ubuntu-latest
2929
steps:
30-
- uses: actions/checkout@v6
30+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
3131

3232
- name: Set up Python 3.10
33-
uses: actions/setup-python@v6
33+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
3434
with:
3535
python-version: "3.10"
3636

@@ -44,10 +44,10 @@ jobs:
4444
name: SSRF + DNS rebinding suite
4545
runs-on: ubuntu-latest
4646
steps:
47-
- uses: actions/checkout@v6
47+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
4848

4949
- name: Set up Python 3.10
50-
uses: actions/setup-python@v6
50+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
5151
with:
5252
python-version: "3.10"
5353

@@ -76,10 +76,10 @@ jobs:
7676
# 60/hr anonymous rate limit. Identical to ci.yml.
7777
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7878
steps:
79-
- uses: actions/checkout@v6
79+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
8080

8181
- name: Set up Python 3.10
82-
uses: actions/setup-python@v6
82+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
8383
with:
8484
python-version: "3.10"
8585

@@ -95,7 +95,7 @@ jobs:
9595
name: Secret scan
9696
runs-on: ubuntu-latest
9797
steps:
98-
- uses: actions/checkout@v6
98+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
9999

100100
- name: Scan tracked files for leaked credentials
101101
run: |

assets/icon.svg

Lines changed: 12 additions & 0 deletions
Loading

docs/TROUBLESHOOTING.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,11 @@ Confirm Gemini CLI is available on `PATH`:
9292
gemini --version
9393
```
9494

95-
If Gemini reports `GEMINI_API_KEY` is required, configure Gemini CLI auth or set:
95+
If Gemini reports `GEMINI_API_KEY` is required, configure Gemini CLI auth or set
96+
the variable in your shell without committing the value:
9697

9798
```powershell
98-
$env:GEMINI_API_KEY='your-key'
99+
$env:GEMINI_API_KEY = Read-Host 'Paste Gemini API key'
99100
```
100101

101102
The bridge default is:

dungeon/launch.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ const ROOT = __dirname;
1616
const DIST = path.join(ROOT, 'dist');
1717
const LOG_DIR = path.join(ROOT, '.logs');
1818

19+
function resolveNpxCommand() {
20+
return process.platform === 'win32' ? 'npx.cmd' : 'npx';
21+
}
22+
1923
// Ensure log directory exists. Bridge stdout/stderr get piped here so we
2024
// can diagnose audit parse failures, disconnects, and agent CLI errors
2125
// after the fact. Previously the bridge ran with stdio:'ignore' and
@@ -45,7 +49,7 @@ console.log('');
4549
if (!fs.existsSync(path.join(DIST, 'index.html'))) {
4650
console.log(' Building optimized production bundle...');
4751
try {
48-
execFileSync('npx', ['vite', 'build'], { cwd: ROOT, stdio: 'inherit', shell: true });
52+
execFileSync(resolveNpxCommand(), ['vite', 'build'], { cwd: ROOT, stdio: 'inherit', shell: false });
4953
console.log(' ✓ Build complete');
5054
console.log('');
5155
} catch (e) {
@@ -91,7 +95,7 @@ let bridge = null;
9195
// a file keeps both readable and gives us a post-mortem for bugs that
9296
// only happen during long audits.
9397
const bridgeLog = fs.openSync(bridgeLogPath, 'a');
94-
fs.writeSync(bridgeLog, `\n=== Bridge started ${new Date().toISOString()} on ${bridgeUrl} ===\n`);
98+
fs.writeSync(bridgeLog, '\n=== Bridge started ' + new Date().toISOString() + ' on ' + bridgeUrl + ' ===\n');
9599
bridge = spawn('node', [path.join(ROOT, 'server', 'index.js')], {
96100
cwd: ROOT,
97101
env: {
@@ -116,9 +120,9 @@ let bridge = null;
116120
console.log(` ✓ Remote session ledger: ${path.relative(ROOT, sessionLogPath)}`);
117121

118122
// Serve optimized production build
119-
const serve = spawn('npx', ['serve', 'dist', '-l', String(appPort), '-s'], {
123+
const serve = spawn(resolveNpxCommand(), ['serve', 'dist', '-l', String(appPort), '-s'], {
120124
cwd: ROOT,
121-
shell: true,
125+
shell: false,
122126
stdio: 'inherit',
123127
windowsHide: true
124128
});

dungeon/server/index.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,21 @@ function resolveNpmPowerShellShim(ps1Path) {
567567
}
568568
}
569569

570+
function resolveCmdExe() {
571+
if (process.env.ComSpec) return process.env.ComSpec;
572+
if (process.env.SystemRoot) return path.join(process.env.SystemRoot, 'System32', 'cmd.exe');
573+
return 'cmd.exe';
574+
}
575+
576+
function resolveWindowsBatchShim(batchPath) {
577+
return {
578+
command: resolveCmdExe(),
579+
argsPrefix: ['/d', '/s', '/c', batchPath],
580+
shell: false,
581+
display: batchPath
582+
};
583+
}
584+
570585
function resolveCliLaunch(execPath) {
571586
const raw = String(execPath || '').trim();
572587
if (!raw) throw new Error('CLI executable path is empty.');
@@ -578,7 +593,7 @@ function resolveCliLaunch(execPath) {
578593
const ext = path.extname(selected).toLowerCase();
579594

580595
if (ext === '.cmd' || ext === '.bat') {
581-
return { command: selected, argsPrefix: [], shell: true, display: selected };
596+
return resolveWindowsBatchShim(selected);
582597
}
583598

584599
if (ext === '.ps1') {
@@ -599,7 +614,7 @@ function resolveCliLaunch(execPath) {
599614
return {
600615
command: selected,
601616
argsPrefix: [],
602-
shell: !path.extname(selected),
617+
shell: false,
603618
display: selected
604619
};
605620
}
@@ -1854,12 +1869,12 @@ function createCodexAppServerRun({ prompt, onStream, onStatus, workDir, requestI
18541869

18551870
console.log(` Running with codex app-server (profile: ${codexProfile.key}, effort: ${codexProfile.effort}${codexProfile.model ? `, model: ${codexProfile.model}` : ''}, bypass: ${dangerousBypass ? 'on' : 'off'})`);
18561871
console.log(` Executable: ${launchDisplay}`);
1857-
console.log(` CWD: ${workDir}`);
1872+
console.log(' CWD: ' + workDir);
18581873

18591874
const child = spawn(launch.command, appArgs, {
18601875
cwd: workDir,
18611876
env: safeEnv(workDir),
1862-
shell: launch.shell,
1877+
shell: false,
18631878
stdio: ['pipe', 'pipe', 'pipe'],
18641879
windowsHide: true
18651880
});
@@ -2306,11 +2321,11 @@ function runTextCli(runtime, prompt, onStream, cwd, requestId, profile, options
23062321

23072322
console.log(` Running with ${normalizedRuntime} CLI (profile: ${cliProfile.key}${cliProfile.model ? `, model: ${cliProfile.model}` : ', default model'})`);
23082323
console.log(` Executable: ${launch.display}`);
2309-
console.log(` CWD: ${workDir}`);
2324+
console.log(' CWD: ' + workDir);
23102325
const proc = spawn(launch.command, launchArgs, {
23112326
cwd: workDir,
23122327
env: safeEnv(workDir),
2313-
shell: launch.shell,
2328+
shell: false,
23142329
stdio: ['ignore', 'pipe', 'pipe'],
23152330
windowsHide: true
23162331
});
@@ -2393,11 +2408,11 @@ function runCodexExec(prompt, onStream, cwd, requestId, profile, options = {}) {
23932408

23942409
console.log(` Running with codex exec (profile: ${codexProfile.key}, effort: ${codexProfile.effort}${codexProfile.model ? `, model: ${codexProfile.model}` : ''}, bypass: ${dangerousBypass ? 'on' : 'off'})`);
23952410
console.log(` Executable: ${launch.display}`);
2396-
console.log(` CWD: ${workDir}`);
2411+
console.log(' CWD: ' + workDir);
23972412
const proc = spawn(launch.command, launchArgs, {
23982413
cwd: workDir,
23992414
env: safeEnv(workDir),
2400-
shell: launch.shell,
2415+
shell: false,
24012416
stdio: ['ignore', 'pipe', 'pipe'],
24022417
windowsHide: true
24032418
});

scripts/backlinks_auth.py

Lines changed: 9 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)