用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/pawan67/helm --skill verify命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | verify |
| description | Build/launch/drive recipe for verifying the Helm web app at runtime — including screenshotting authenticated pages. |
Runtime observation for web/. Next.js 16 (webpack) + Chakra v3 + Postgres (Drizzle) + MQTT.
http://localhost:3000 (from web/). Next 16 allows only one dev instance — don't start a second (npm run dev will just print "Another next dev server is already running"). If none is up, npm run dev (reads .env).pt-dev-db on host port 5455, db pullups, user postgres. Query with docker exec pt-dev-db psql -U postgres -d pullups -tc "...".pt-dev-mqtt on 1884.Password lives in web/.env as APP_PASSWORD. Session cookie name is pt_session (signed, web/src/lib/session.ts).
PW=$(grep '^APP_PASSWORD=' .env | cut -d= -f2-)
curl -s -c /tmp/cj.txt -H 'Content-Type: application/json' -d "{\"password\":\"$PW\"}" \
http://localhost:3000/api/auth/login # -> {"ok":true}, writes pt_session to /tmp/cj.txt
Then hit the API surface directly: curl -s -b /tmp/cj.txt "http://localhost:3000/api/sessions?type=dead_hang&from=2026-07-25&to=2026-07-25&page=2".
Playwright/puppeteer are NOT installed. Use headless google-chrome-stable driven over CDP from a Node script (Node 22 has a global WebSocket). Inject the pt_session cookie via Network.setCookie, navigate, then Page.captureScreenshot. A reusable pair of scripts (screenshot + interaction-driver) was written to the session scratchpad — pattern:
google-chrome-stable --headless=new --remote-debugging-port=PORT --remote-allow-origins=* --user-data-dir=$(mktemp -d) --no-sandbox --window-size=1440,3200GET http://localhost:PORT/json → find target with type:"page" → connect its webSocketDebuggerUrlNetwork.enable → Network.setCookie {name:"pt_session", value:<from /tmp/cj.txt>, domain:"localhost", path:"/", httpOnly:true} → Page.enable → Page.navigate → sleep ~9s (dev-mode first-compile + client fetch are slow) → Page.captureScreenshot {captureBeyondViewport:true}.Runtime.evaluate with returnByValue:true (e.g. click thead input[type=checkbox], click a segment by text, click [aria-label="Next page"]), then read back document.body.innerText.Gotchas:
--remote-allow-origins=* is required (Chrome ≥111 rejects CDP WS otherwise).ResponsiveContainer) render blank for the first few seconds in headless until the container is measured — wait before shooting./history client table fetches /api/sessions on mount; give it time before asserting row content.npm test / tsc --noEmit as verification (they're CI). Drive the running app.