Band Lineup Display, the backstage app itself
The Electron app that runs on the backstage PC: stage lineup photos with mic/pack labels, packaged for Windows. It also carries the ProPresenter Now/Next feature in two forms that share one engine — propresenter-core, where every ProPresenter 7/20 quirk lives, and propresenter-app, the standalone display it serves. Until now this existed only on the production machine and as a read-only snapshot inside the ProdDash repo. Source only: the 231 MB dist/ is build output, and credentials, photos and processed images are written to the Electron userData directory, never here. tmp/pp-mock.js stays — it is the ProPresenter mock ProdDash's own CLAUDE.md tells people to run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"permissions": {
|
||||
"defaultMode": "auto"
|
||||
},
|
||||
"skipAutoPermissionPrompt": true
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"WebSearch",
|
||||
"WebFetch(domain:openapi.propresenter.com)",
|
||||
"WebFetch(domain:raw.githubusercontent.com)",
|
||||
"Read(//private/tmp/**)",
|
||||
"Bash(curl -sSL --max-time 60 \"https://raw.githubusercontent.com/jeffmikels/ProPresenter-API/master/pro7.9.openapi-spec.json\" -o pp.json)",
|
||||
"Bash(python3 -)",
|
||||
"Bash(node --check main.js)",
|
||||
"Bash(node --check renderer.js)",
|
||||
"Bash(node --check preload.js)",
|
||||
"Bash(PP_STEP_MS=400 node tmp/pp-mock.js 1599)",
|
||||
"Bash(node tmp/pp-verify.js 1599)",
|
||||
"Bash(pkill -f \"tmp/pp-mock.js\")",
|
||||
"Bash(PP_STEP_MS=600 node tmp/pp-mock.js 1599)",
|
||||
"Bash(echo \"mock pid $!\")",
|
||||
"Bash(curl -N --max-time 3 -s -X POST -H 'Content-Type: application/json' -d '[\"presentation/slide_index\"]' http://127.0.0.1:1599/v1/status/updates)",
|
||||
"Bash(pkill -f \"tmp/pp-mock.js\" 2>/dev/null; sleep 0.3 *)",
|
||||
"Bash(echo \"verify exit: $?\")",
|
||||
"Bash(pkill -f \"electron .*pp-test-profile\")",
|
||||
"Bash(npm run *)",
|
||||
"Bash(tee /tmp/pp-build.log)",
|
||||
"Bash(open -R \"/Users/Studio/Documents/BandLineupDisplay/dist/Band Lineup Setup 1.0.0.exe\")",
|
||||
"Bash(tee /tmp/pp-build2.log)",
|
||||
"Bash(tee /tmp/pp-build3.log)",
|
||||
"Bash(tee /tmp/pp-build4.log)",
|
||||
"Bash(curl -sSL --max-time 30 \"https://api.github.com/repos/jeffmikels/ProPresenter-API/contents/\")",
|
||||
"Bash(curl -sSL --max-time 30 \"https://api.github.com/repos/bitfocus/companion-module-renewedvision-propresenter-api/contents/\")",
|
||||
"Bash(curl -sSL --max-time 30 \"https://api.github.com/repos/bitfocus/companion-module-renewedvision-propresenter-api/contents/src\")",
|
||||
"Bash(curl -sSL --max-time 30 https://raw.githubusercontent.com/bitfocus/companion-module-renewedvision-propresenter-api/master/src/__TRACKED_VAR__.ts -o comp-__TRACKED_VAR__.ts)",
|
||||
"Bash(curl -sSL --max-time 30 \"https://raw.githubusercontent.com/bitfocus/companion-module-renewedvision-propresenter-api/master/package.json\")",
|
||||
"Bash(curl -sSL --max-time 30 \"https://unpkg.com/renewedvision-propresenter@7.7.2/package.json\")",
|
||||
"Bash(curl -sSL --max-time 30 \"https://unpkg.com/renewedvision-propresenter@7.7.2/dist/index.js\" -o rvpro.js)",
|
||||
"Bash(grep -noE \"playlistPlaylistIdGet[^\\\\n]{0,120}\" rvpro.js)",
|
||||
"Bash(grep -noE \"/v1/playlist[^\\\\\"\\\\\\\\\\\\`]{0,60}\" rvpro.js)",
|
||||
"Bash(curl -sSL --max-time 30 \"https://unpkg.com/renewedvision-propresenter@7.7.2/?meta\")",
|
||||
"Bash(curl -sSL --max-time 30 \"https://unpkg.com/renewedvision-propresenter@7.7.2/dist/propresenter.js\" -o rvpro2.js)",
|
||||
"Bash(grep -noE \"playlistPlaylistIdGet[\\\\s\\\\S]{0,200}\" rvpro2.js)",
|
||||
"Bash(grep -noE \"v1/playlist[^\\\\\"\\\\\\\\\\\\`]{0,80}\" rvpro2.js)",
|
||||
"Bash(curl -sSL --max-time 30 \"https://registry.npmjs.org/renewedvision-propresenter\")",
|
||||
"Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\('latest:', d['dist-tags']\\); print\\('all versions:', list\\(d['versions'].keys\\(\\)\\)[-12:]\\)\")",
|
||||
"Bash(tee /tmp/pp-build5.log)",
|
||||
"Bash(node --check tmp/pp-mock.js)",
|
||||
"Bash(PP_STEP_MS=5000 node tmp/pp-mock.js 1599)",
|
||||
"Bash(node tmp/pp-verify-slides.js 1599)",
|
||||
"Bash(tee /tmp/pp-build6.log)",
|
||||
"Skill(update-config)",
|
||||
"Skill(update-config:*)",
|
||||
"Bash(echo \"=== ~/.claude/settings.json ===\"; cat ~/.claude/settings.json 2>/dev/null || echo \"\\(none\\)\" *)",
|
||||
"Bash(PORT=3000 node server.js)",
|
||||
"Bash(curl -s http://localhost:3000/healthz)",
|
||||
"Bash(curl -s -X POST http://localhost:3000/api/login -H 'Content-Type: application/json' -d '{\"username\":\"admin\",\"password\":\"?WaT3rs2016!\"}')",
|
||||
"Bash(rm -f /Users/Studio/Documents/recurring-checklist-app/.claude/launch.json)",
|
||||
"Bash(rmdir /Users/Studio/Documents/recurring-checklist-app/.claude)",
|
||||
"Bash(mkdir -p /Users/Studio/Documents/BandLineupDisplay/.claude)",
|
||||
"mcp__Claude_Preview__preview_start",
|
||||
"Bash(tee /tmp/pp-build7.log)",
|
||||
"Bash(tee /tmp/pp-build8.log)",
|
||||
"Bash(tee /tmp/pp-build9.log)",
|
||||
"Bash(tee /tmp/pp-build10.log)",
|
||||
"Bash(node --check server.js)",
|
||||
"Bash(node --check app.js)",
|
||||
"WebFetch(domain:api.propresenter.com)",
|
||||
"Bash(curl -s -o pp-spec.json \"https://raw.githubusercontent.com/jeffmikels/ProPresenter-API/master/pro7.9.openapi-spec.json\")",
|
||||
"Bash(python3 -c ' *)",
|
||||
"WebFetch(domain:api.github.com)",
|
||||
"Bash(curl -s -L --max-time 20 \"https://api.github.com/search/code?q=group_identifiers+propresenter\" -H \"Accept: application/vnd.github+json\")",
|
||||
"Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\(d.get\\('total_count'\\)\\); [print\\(i['repository']['full_name'], i['path']\\) for i in d.get\\('items',[]\\)[:15]]\")",
|
||||
"Bash(curl -s -L --max-time 15 \"https://openapi.propresenter.com/\")",
|
||||
"Bash(curl -s -o /dev/null -w '%{http_code}' --max-time 10 https://openapi.propresenter.com/__TRACKED_VAR__)",
|
||||
"Bash(curl -s -L --max-time 30 \"https://openapi.propresenter.com/swagger.json\" -o pp20-spec.json)",
|
||||
"Bash(node --check public/app.js)",
|
||||
"Bash(pkill -f \"node server.js\")",
|
||||
"Bash(curl -s -X POST http://localhost:3000/api/login -H 'Content-Type: application/json' -d '{\"username\":\"admin\",\"password\":\"changeme\"}')",
|
||||
"Bash(node -pe \"JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\).users.map\\(u=>u.username+' ['+u.location+'/'+u.team+'/'+u.role+']'\\).join\\('\\\\n'\\)\")",
|
||||
"Bash(node -pe \"JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\).lists.find\\(l=>l.id==='woonprod'\\).items.map\\(i=>i.title\\).join\\(', '\\)\")",
|
||||
"Bash(node -pe ' *)",
|
||||
"Bash(pkill -f \"pp-mock.js\")",
|
||||
"Bash(node -e ' *)",
|
||||
"Bash(node -pe \"JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\).lists.find\\(l=>l.id==='global1'\\).items.map\\(i=>i.title\\).join\\(', '\\)\")",
|
||||
"Bash(pkill -f \"node server.js\" 2>/dev/null *)",
|
||||
"Bash(node -pe \"const d=JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\); 'locations: '+d.locations.map\\(l=>l.name+'='+l.abbrev\\).join\\(', '\\)+'\\\\nteams: '+d.teams.map\\(t=>t.name+'='+t.abbrev\\).join\\(', '\\)\")",
|
||||
"Bash(node -pe \"const d=JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\); 'locations: '+d.locations.map\\(l=>l.name\\).join\\(', '\\)+'\\\\nteams: '+d.teams.map\\(t=>t.name\\).join\\(', '\\)\")",
|
||||
"Bash(node -pe \"JSON.parse\\(require\\('fs'\\).readFileSync\\(0\\)\\).teams.map\\(t=>t.name\\).join\\(', '\\)\")",
|
||||
"Bash(curl -s -X POST http://localhost:3000/api/login -H 'Content-Type: application/json' -d '{\"username\":\"admin\",\"location\":\"executive\",\"password\":\"changeme\"}')",
|
||||
"Bash(curl -sS -m 8 -o /dev/null -w \"HTTP %{http_code}\\\\n\" http://10.1.1.5:3000/healthz)",
|
||||
"Bash(curl -sS -m 8 http://10.1.1.5:3000/app.js)",
|
||||
"Bash(curl -sS -m 8 http://10.1.1.5:3000/styles.css)",
|
||||
"Bash(sed -n '/function openListModal/,/^ }/p' app.js)",
|
||||
"Bash(sed -n '/function handleModalSave/,/^ }/p' app.js)",
|
||||
"Bash(sed -n '/\\\\.list-tabs-row {/,/^}/p' styles.css)",
|
||||
"Bash(sed -n '/^\\\\.list-menu-handle {/,/^}/p' styles.css)",
|
||||
"Bash(node -c server.js)",
|
||||
"Bash(node -c public/app.js)",
|
||||
"Bash(DATA_DIR=/tmp/cl-test-data PORT=3999 ADMIN_PASSWORD=changeme node server.js)",
|
||||
"Bash(echo \"started pid $!\")",
|
||||
"Bash(curl -sf http://127.0.0.1:3999/healthz)",
|
||||
"Bash(break)",
|
||||
"Bash(node /tmp/cl-test.mjs)",
|
||||
"Bash(echo \"exit: $?\")",
|
||||
"Bash(kill 92507)",
|
||||
"Bash(awk '/^\\\\.list-tab \\\\{/,/^}/' styles.css)",
|
||||
"Bash(awk '/^\\\\.list-tab-loc/,/^}/' styles.css)",
|
||||
"Bash(awk '/^\\\\.list-tab\\\\.active \\\\{/,/^}/' styles.css)",
|
||||
"Bash(rm -rf /tmp/cl-preview-data /tmp/cl-server.log /tmp/cl-test-data *)",
|
||||
"Bash(./build-deploy.sh)",
|
||||
"Bash(kill 93146 93148 93160 93162)",
|
||||
"Bash(pkill -f \"ssh.*10.1.1.5.*checklist-deploy\")",
|
||||
"Bash(echo \"EXIT=$?\")",
|
||||
"Bash(expect /tmp/sshstdin.exp 10.1.1.5 Christian Waters2010! ' *)",
|
||||
"Bash(expect /tmp/sshstdin.exp \"10.1.1.5\" \"Christian\" 'Waters2010!' \"REMOTE_PASS='Waters2010!' bash -s\" /tmp/verify.sh)",
|
||||
"Bash(rm -f checklist-deploy.tgz /tmp/verify.sh /tmp/deploy2.log /tmp/sshstdin.exp /tmp/deploy.sh)",
|
||||
"Bash(ls checklist-deploy.tgz)",
|
||||
"Bash(awk '/^\\(html|body|\\\\.app-container|header|\\\\.main-content|\\\\.app-wrap\\)[ ,{]/{p=1} p{print} /^}/{if\\(p\\)print\"---\"; p=0}' styles.css)",
|
||||
"Bash(awk '/^\\\\.modal-overlay[ ,{]/{p=1} p{print} /^}/{if\\(p\\)print\"---\"; p=0}' styles.css)",
|
||||
"Bash(awk '/function openLogin/{p=1} p{print} p&&/^ }/{exit}' app.js)",
|
||||
"Bash(grep -vE \"spawn|password:|chdir|^$\")",
|
||||
"Bash(grep -vE \"spawn|chdir|^$\")",
|
||||
"Bash(kill 96250 96254 96256)",
|
||||
"Bash(pkill -f \"ssh.*10.1.1.5.*checklists.backup\")",
|
||||
"Bash(pkill -f \"/tmp/sshbackup.exp\")",
|
||||
"Bash(pkill -9 -f \"ssh.*10.1.1.5.*checklists.backup\")",
|
||||
"Bash(awk '/^\\\\.list-tabs \\\\{/,/^}/' styles.css)",
|
||||
"Bash(awk '/^\\\\.tab-view[ ,{.]/{p=1} p{print} /^}/{if\\(p\\)print\"---\"; p=0}' styles.css)",
|
||||
"Bash(awk '/^\\\\.checklists-section \\\\{/,/^}/' styles.css)",
|
||||
"Bash(awk '/^\\\\.checklist-column \\\\{/,/^}/' styles.css)",
|
||||
"Bash(awk '/^\\\\.checklist-list \\\\{/,/^}/' styles.css)",
|
||||
"Bash(rm -rf /tmp/cl-preview-data *)",
|
||||
"Bash(grep -avE \"spawn|password:|chdir|^$\")",
|
||||
"Bash(expect /tmp/sshstdin.exp \"10.1.1.5\" \"Christian\" 'Waters2010!' \"echo PROBE_OK\" /dev/null)",
|
||||
"Bash(echo \"probe_exit=$?\")",
|
||||
"Bash(pkill -9 -f \"ssh.*10.1.1.5\")",
|
||||
"Bash(pkill -9 -f \"expect /tmp/sshstdin\")",
|
||||
"Bash(pkill -9 -f sshprobe)",
|
||||
"Bash(pkill -9 -f \"b5wgdco4c\")",
|
||||
"Bash(ps -p 99173 -o pid,command)",
|
||||
"Bash(kill -9 99173)",
|
||||
"Bash(chmod +x /tmp/run-deploy.sh)",
|
||||
"Bash(bash /tmp/run-deploy.sh)",
|
||||
"Bash(echo \"launcher exit=$?\")",
|
||||
"Bash(expect /tmp/sshstdin.exp \"10.1.1.5\" \"Christian\" 'Waters2010!' \"REMOTE_PASS='Waters2010!' sh -s\" /tmp/verify.sh)",
|
||||
"Bash(curl -sS -m 10 -o /dev/null -w \"healthz -> HTTP %{http_code}\\\\n\" https://check.watersmedia.org/healthz)",
|
||||
"Bash(curl -sS -m 10 https://check.watersmedia.org/)",
|
||||
"Bash(echo \"hide-lists toggle \\(D4\\): $\\(curl -sS -m 10 https://check.watersmedia.org/)",
|
||||
"Bash(rm -f checklist-deploy.tgz /tmp/deploy3.log /tmp/run-deploy.sh /tmp/sshhard.exp /tmp/verify.sh)",
|
||||
"Bash(rm -f /tmp/sshstdin.exp)",
|
||||
"Bash(sed -n '/function executiveSession/,/^}/p' server.js)",
|
||||
"Bash(sed -n '/function findExecutive/,/^}/p' server.js)",
|
||||
"Bash(curl -sS -m 10 -o /dev/null -w '%{http_code}' https://check.watersmedia.org/healthz)",
|
||||
"Bash(echo \"healthz: $\\(curl -sS -m 10 -o /dev/null -w '%{http_code}' https://check.watersmedia.org/healthz\\)\")",
|
||||
"Bash(curl -sS -m 10 https://check.watersmedia.org/app.js)",
|
||||
"Bash(echo \"exec rename button \\(data-exec-action=rename\\): $\\(curl -sS -m 10 https://check.watersmedia.org/app.js)",
|
||||
"Bash(echo \"team-login search box: $\\(curl -sS -m 10 https://check.watersmedia.org/)",
|
||||
"Bash(rm -rf /tmp/cl-preview-data)",
|
||||
"Bash(rm -f /Users/Studio/Documents/BandLineupDisplay/.claude/launch.json)",
|
||||
"Bash(rmdir /Users/Studio/Documents/BandLineupDisplay/.claude)",
|
||||
"Bash(node -c server/server.js)",
|
||||
"Bash(node -c server/public/app.js)",
|
||||
"Bash(echo \"exec scope badge \\(showScope in app.js\\): $\\(curl -sS -m 10 https://check.watersmedia.org/app.js)",
|
||||
"Bash(grep -niE \"\\\\.\\(tile|card|cell|person|slot|name|label|photo|badge|pill\\)[ .{:,]\" styles.css)",
|
||||
"Bash(cd \"/Users/Studio/Library/Application Support/Band Lineup\" 2>/dev/null && ls -la *.json 2>/dev/null; echo \"---\"; cat pco-credentials.json 2>/dev/null | head -20)",
|
||||
"Read(//Users/Studio/Library/Application Support/**)",
|
||||
"Read(//Users/Studio/Library/Application Support/Electron/**)",
|
||||
"Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\(list\\(d.keys\\(\\)\\)\\); print\\(json.dumps\\(d.get\\('proPresenter',{}\\),indent=1\\)[:200]\\); print\\('pco key present:', 'pco' in json.dumps\\(d\\).lower\\(\\)\\)\")"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user