{"data":{"skill":{"slug":"qingyuna-answer-me-with-html","name":"answer-me-with-html","icon":"📦","repo":"https://github.com/qingyuna/answer-me-with-html/tree/0f2e0f18280b29c875b56a5f41253ee49c4b7956/skills/answer-me-with-html","status":"approved","author":"qingyuna","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"ae199c09-b907-4644-98e6-1c69f104c980","skill_id":"2be7b216-905b-4f9e-b607-ae11230ba034","version":1,"content_hash":"v3:747cc4a202a58444d48f42de73cfce79288af501:02aa9484b130d0d1592cfab38fb145cd59a0aea8ae9435aa144125dcd389e1a4:5c89427a7b18ae2b2e07b01a09c3308414a79e555890d7e609da295e0a5e0084:736b696c6c732f71696e6779756e612f616e737765722d6d652d776974682d68746d6c:23a2d3611e26095cf926e47989969a87","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Most supplied matches concern embedded assets, parser syntax, or secret-blocking checks; no evidence found of destructive intent or audit-targeted prompt injection. Speech transport, implicit cloud narration, and optional plaintext LAN sharing create credential and privacy risks. All 400 supplied findings are adjudicated; 1,812 unpresented matches still require manual review before automatic publication. Static review was capped at 400/2212 representative findings; omitted static matches are unconfirmed, so automatic publishing stays disabled until manual review.","remediation":[{"issue":"Static review capped","severity":"medium","suggestion":"Manually review the omitted 1812 static analyzer matches or reduce bundled generated/vendor/reference content before enabling automatic publication."},{"issue":"Configured speech requests can send credentials and narration over remote plaintext HTTP.","severity":"high","suggestion":"Require HTTPS for non-loopback speech endpoints, reject URL credentials, and revalidate redirects before forwarding authorization headers."},{"issue":"Automatic voice selection treats an existing ElevenLabs key as permission to upload narration.","severity":"medium","suggestion":"Default to system speech or subtitles. Require an explicit provider choice before sending narration to a cloud service."},{"issue":"Optional LAN sharing exposes bearer capability links over plaintext HTTP on every IPv4 interface.","severity":"medium","suggestion":"Retain loopback defaults and require explicit sharing consent. Prefer a selected interface with HTTPS or a trusted encrypted tunnel."},{"issue":"The static analyzer presented only 400 of 2,212 matches.","severity":"high","suggestion":"Review the remaining 1,812 matches and verify bundled dependency provenance before enabling automatic publication."}],"risk_factor_evidence":[{"factor":"filesystem","evidence":[{"file":"references/settings.md","line_end":19,"line_start":19},{"file":"references/settings.md","line_end":19,"line_start":19},{"file":"references/video.md","line_end":3,"line_start":3},{"file":"references/video.md","line_end":35,"line_start":35},{"file":"references/video.md","line_end":35,"line_start":35},{"file":"scripts/am.mjs","line_end":33,"line_start":33},{"file":"scripts/am.mjs","line_end":2065,"line_start":2065},{"file":"scripts/am.mjs","line_end":2409,"line_start":2409},{"file":"scripts/am.mjs","line_end":9155,"line_start":9155},{"file":"scripts/am.mjs","line_end":9161,"line_start":9161},{"file":"scripts/am.mjs","line_end":9341,"line_start":9341},{"file":"scripts/am.mjs","line_end":9490,"line_start":9490},{"file":"scripts/am.mjs","line_end":9847,"line_start":9847},{"file":"scripts/am.mjs","line_end":9946,"line_start":9946},{"file":"scripts/am.mjs","line_end":9973,"line_start":9973},{"file":"scripts/am.mjs","line_end":9991,"line_start":9991},{"file":"scripts/am.mjs","line_end":9995,"line_start":9995},{"file":"scripts/am.mjs","line_end":10001,"line_start":10001},{"file":"scripts/am.mjs","line_end":10011,"line_start":10011},{"file":"scripts/am.mjs","line_end":10169,"line_start":10169},{"file":"scripts/am.mjs","line_end":10183,"line_start":10183},{"file":"scripts/am.mjs","line_end":10507,"line_start":10507},{"file":"scripts/am.mjs","line_end":10682,"line_start":10682},{"file":"scripts/am.mjs","line_end":10698,"line_start":10698},{"file":"scripts/am.mjs","line_end":10765,"line_start":10765},{"file":"scripts/am.mjs","line_end":10850,"line_start":10850},{"file":"scripts/am.mjs","line_end":10861,"line_start":10861},{"file":"scripts/am.mjs","line_end":11057,"line_start":11057},{"file":"scripts/am.mjs","line_end":11157,"line_start":11157},{"file":"scripts/am.mjs","line_end":11247,"line_start":11247},{"file":"scripts/am.mjs","line_end":11565,"line_start":11565},{"file":"scripts/am.mjs","line_end":11670,"line_start":11670},{"file":"scripts/am.mjs","line_end":11682,"line_start":11682},{"file":"scripts/am.mjs","line_end":11730,"line_start":11730},{"file":"scripts/am.mjs","line_end":11756,"line_start":11756},{"file":"scripts/am.mjs","line_end":11765,"line_start":11765},{"file":"scripts/am.mjs","line_end":12279,"line_start":12279},{"file":"scripts/am.mjs","line_end":12361,"line_start":12361},{"file":"scripts/am.mjs","line_end":12477,"line_start":12477},{"file":"scripts/am.mjs","line_end":12491,"line_start":12491},{"file":"scripts/am.mjs","line_end":12635,"line_start":12635},{"file":"scripts/am.mjs","line_end":12638,"line_start":12638},{"file":"scripts/am.mjs","line_end":639,"line_start":639},{"file":"scripts/am.mjs","line_end":7327,"line_start":7327},{"file":"scripts/am.mjs","line_end":7613,"line_start":7613},{"file":"scripts/am.mjs","line_end":12048,"line_start":12048},{"file":"scripts/am.mjs","line_end":12182,"line_start":12182},{"file":"scripts/am.mjs","line_end":12415,"line_start":12415},{"file":"scripts/am.mjs","line_end":12424,"line_start":12424},{"file":"scripts/am.mjs","line_end":27,"line_start":27}]},{"factor":"env_access","evidence":[{"file":"references/video.md","line_end":34,"line_start":34},{"file":"scripts/am.mjs","line_end":9909,"line_start":9909},{"file":"scripts/am.mjs","line_end":9912,"line_start":9912},{"file":"scripts/am.mjs","line_end":9952,"line_start":9952},{"file":"scripts/am.mjs","line_end":9976,"line_start":9976},{"file":"scripts/am.mjs","line_end":9982,"line_start":9982},{"file":"scripts/am.mjs","line_end":10040,"line_start":10040},{"file":"scripts/am.mjs","line_end":10104,"line_start":10104},{"file":"scripts/am.mjs","line_end":11084,"line_start":11084},{"file":"scripts/am.mjs","line_end":11149,"line_start":11149},{"file":"scripts/am.mjs","line_end":11222,"line_start":11222},{"file":"scripts/am.mjs","line_end":11391,"line_start":11391},{"file":"scripts/am.mjs","line_end":11605,"line_start":11605},{"file":"scripts/am.mjs","line_end":12191,"line_start":12191},{"file":"scripts/am.mjs","line_end":9905,"line_start":9905},{"file":"scripts/am.mjs","line_end":10552,"line_start":10552},{"file":"scripts/am.mjs","line_end":10561,"line_start":10561},{"file":"scripts/am.mjs","line_end":10580,"line_start":10580},{"file":"scripts/am.mjs","line_end":10612,"line_start":10612},{"file":"scripts/am.mjs","line_end":12171,"line_start":12171},{"file":"scripts/am.mjs","line_end":12178,"line_start":12178}]},{"factor":"scripts","evidence":[{"file":"scripts/am.mjs","line_end":639,"line_start":639},{"file":"scripts/am.mjs","line_end":10520,"line_start":10520},{"file":"scripts/am.mjs","line_end":639,"line_start":639},{"file":"scripts/am.mjs","line_end":1355,"line_start":1355},{"file":"scripts/am.mjs","line_end":27,"line_start":27},{"file":"scripts/am.mjs","line_end":27,"line_start":27},{"file":"scripts/am.mjs","line_end":27,"line_start":27},{"file":"scripts/am.mjs","line_end":1146,"line_start":1146},{"file":"scripts/am.mjs","line_end":2694,"line_start":2694},{"file":"scripts/am.mjs","line_end":2701,"line_start":2701},{"file":"scripts/am.mjs","line_end":2717,"line_start":2717},{"file":"scripts/am.mjs","line_end":2721,"line_start":2721},{"file":"scripts/am.mjs","line_end":2728,"line_start":2728},{"file":"scripts/am.mjs","line_end":2735,"line_start":2735},{"file":"scripts/am.mjs","line_end":2747,"line_start":2747},{"file":"scripts/am.mjs","line_end":2752,"line_start":2752},{"file":"scripts/am.mjs","line_end":2797,"line_start":2797},{"file":"scripts/am.mjs","line_end":2804,"line_start":2804},{"file":"scripts/am.mjs","line_end":2845,"line_start":2845},{"file":"scripts/am.mjs","line_end":2860,"line_start":2860},{"file":"scripts/am.mjs","line_end":2867,"line_start":2867},{"file":"scripts/am.mjs","line_end":2875,"line_start":2875},{"file":"scripts/am.mjs","line_end":2888,"line_start":2888},{"file":"scripts/am.mjs","line_end":2896,"line_start":2896},{"file":"scripts/am.mjs","line_end":2904,"line_start":2904},{"file":"scripts/am.mjs","line_end":2908,"line_start":2908},{"file":"scripts/am.mjs","line_end":2912,"line_start":2912},{"file":"scripts/am.mjs","line_end":2916,"line_start":2916},{"file":"scripts/am.mjs","line_end":2935,"line_start":2935},{"file":"scripts/am.mjs","line_end":2943,"line_start":2943},{"file":"scripts/am.mjs","line_end":2955,"line_start":2955},{"file":"scripts/am.mjs","line_end":2957,"line_start":2957},{"file":"scripts/am.mjs","line_end":2959,"line_start":2959},{"file":"scripts/am.mjs","line_end":2984,"line_start":2984},{"file":"scripts/am.mjs","line_end":2991,"line_start":2991},{"file":"scripts/am.mjs","line_end":2995,"line_start":2995},{"file":"scripts/am.mjs","line_end":2997,"line_start":2997},{"file":"scripts/am.mjs","line_end":2999,"line_start":2999},{"file":"scripts/am.mjs","line_end":3013,"line_start":3013},{"file":"scripts/am.mjs","line_end":3021,"line_start":3021},{"file":"scripts/am.mjs","line_end":3027,"line_start":3027},{"file":"scripts/am.mjs","line_end":3035,"line_start":3035},{"file":"scripts/am.mjs","line_end":4007,"line_start":4007},{"file":"scripts/am.mjs","line_end":4032,"line_start":4032},{"file":"scripts/am.mjs","line_end":4034,"line_start":4034},{"file":"scripts/am.mjs","line_end":4107,"line_start":4107},{"file":"scripts/am.mjs","line_end":4112,"line_start":4112},{"file":"scripts/am.mjs","line_end":4204,"line_start":4204},{"file":"scripts/am.mjs","line_end":4206,"line_start":4206}]},{"factor":"external_commands","evidence":[{"file":"scripts/am.mjs","line_end":1361,"line_start":1361},{"file":"scripts/am.mjs","line_end":10505,"line_start":10505},{"file":"scripts/am.mjs","line_end":10512,"line_start":10512},{"file":"scripts/am.mjs","line_end":11056,"line_start":11056},{"file":"scripts/am.mjs","line_end":11323,"line_start":11323},{"file":"scripts/am.mjs","line_end":11562,"line_start":11562},{"file":"scripts/am.mjs","line_end":10754,"line_start":10754},{"file":"scripts/am.mjs","line_end":27,"line_start":27},{"file":"scripts/am.mjs","line_end":1146,"line_start":1146},{"file":"scripts/am.mjs","line_end":2694,"line_start":2694},{"file":"scripts/am.mjs","line_end":2701,"line_start":2701},{"file":"scripts/am.mjs","line_end":2717,"line_start":2717},{"file":"scripts/am.mjs","line_end":2721,"line_start":2721},{"file":"scripts/am.mjs","line_end":2728,"line_start":2728},{"file":"scripts/am.mjs","line_end":2735,"line_start":2735},{"file":"scripts/am.mjs","line_end":2747,"line_start":2747},{"file":"scripts/am.mjs","line_end":2752,"line_start":2752},{"file":"scripts/am.mjs","line_end":2797,"line_start":2797},{"file":"scripts/am.mjs","line_end":2804,"line_start":2804},{"file":"scripts/am.mjs","line_end":2845,"line_start":2845},{"file":"scripts/am.mjs","line_end":2860,"line_start":2860},{"file":"scripts/am.mjs","line_end":2867,"line_start":2867},{"file":"scripts/am.mjs","line_end":2875,"line_start":2875},{"file":"scripts/am.mjs","line_end":2888,"line_start":2888},{"file":"scripts/am.mjs","line_end":2896,"line_start":2896},{"file":"scripts/am.mjs","line_end":2904,"line_start":2904},{"file":"scripts/am.mjs","line_end":2908,"line_start":2908},{"file":"scripts/am.mjs","line_end":2912,"line_start":2912},{"file":"scripts/am.mjs","line_end":2916,"line_start":2916},{"file":"scripts/am.mjs","line_end":2935,"line_start":2935},{"file":"scripts/am.mjs","line_end":2943,"line_start":2943},{"file":"scripts/am.mjs","line_end":2955,"line_start":2955},{"file":"scripts/am.mjs","line_end":2957,"line_start":2957},{"file":"scripts/am.mjs","line_end":2959,"line_start":2959},{"file":"scripts/am.mjs","line_end":2984,"line_start":2984},{"file":"scripts/am.mjs","line_end":2991,"line_start":2991},{"file":"scripts/am.mjs","line_end":2995,"line_start":2995},{"file":"scripts/am.mjs","line_end":2997,"line_start":2997},{"file":"scripts/am.mjs","line_end":2999,"line_start":2999},{"file":"scripts/am.mjs","line_end":3013,"line_start":3013},{"file":"scripts/am.mjs","line_end":3021,"line_start":3021},{"file":"scripts/am.mjs","line_end":3027,"line_start":3027},{"file":"scripts/am.mjs","line_end":3035,"line_start":3035},{"file":"scripts/am.mjs","line_end":4007,"line_start":4007},{"file":"scripts/am.mjs","line_end":4032,"line_start":4032},{"file":"scripts/am.mjs","line_end":4034,"line_start":4034},{"file":"scripts/am.mjs","line_end":4107,"line_start":4107},{"file":"scripts/am.mjs","line_end":4112,"line_start":4112},{"file":"scripts/am.mjs","line_end":4204,"line_start":4204},{"file":"scripts/am.mjs","line_end":4206,"line_start":4206}]},{"factor":"network","evidence":[{"file":"scripts/am.mjs","line_end":27,"line_start":27},{"file":"scripts/am.mjs","line_end":10576,"line_start":10576},{"file":"scripts/am.mjs","line_end":10618,"line_start":10618},{"file":"scripts/am.mjs","line_end":10649,"line_start":10649},{"file":"scripts/am.mjs","line_end":11277,"line_start":11277},{"file":"scripts/am.mjs","line_end":1146,"line_start":1146},{"file":"scripts/am.mjs","line_end":2,"line_start":2},{"file":"scripts/am.mjs","line_end":1116,"line_start":1116},{"file":"scripts/am.mjs","line_end":2112,"line_start":2112},{"file":"scripts/am.mjs","line_end":3761,"line_start":3761},{"file":"scripts/am.mjs","line_end":9743,"line_start":9743},{"file":"scripts/am.mjs","line_end":9772,"line_start":9772},{"file":"scripts/am.mjs","line_end":10019,"line_start":10019},{"file":"scripts/am.mjs","line_end":10573,"line_start":10573},{"file":"scripts/am.mjs","line_end":10594,"line_start":10594},{"file":"scripts/am.mjs","line_end":11328,"line_start":11328},{"file":"scripts/am.mjs","line_end":11329,"line_start":11329},{"file":"scripts/am.mjs","line_end":11609,"line_start":11609},{"file":"scripts/am.mjs","line_end":11703,"line_start":11703},{"file":"scripts/am.mjs","line_end":11960,"line_start":11960},{"file":"scripts/am.mjs","line_end":11966,"line_start":11966},{"file":"scripts/am.mjs","line_end":11971,"line_start":11971},{"file":"scripts/am.mjs","line_end":12012,"line_start":12012},{"file":"scripts/am.mjs","line_end":12014,"line_start":12014},{"file":"scripts/am.mjs","line_end":12181,"line_start":12181},{"file":"scripts/am.mjs","line_end":12297,"line_start":12297},{"file":"scripts/am.mjs","line_end":12999,"line_start":12999},{"file":"scripts/am.mjs","line_end":13014,"line_start":13014},{"file":"scripts/am.mjs","line_end":1356,"line_start":1356},{"file":"scripts/am.mjs","line_end":10028,"line_start":10028},{"file":"scripts/am.mjs","line_end":10594,"line_start":10594},{"file":"scripts/am.mjs","line_end":11569,"line_start":11569},{"file":"scripts/am.mjs","line_end":11570,"line_start":11570},{"file":"scripts/am.mjs","line_end":12038,"line_start":12038},{"file":"scripts/am.mjs","line_end":12181,"line_start":12181},{"file":"SKILL.md","line_end":187,"line_start":187},{"file":"SKILL.md","line_end":199,"line_start":199}]}],"critical_findings":[],"high_findings":[{"title":"Environment file access","locations":[{"file":"scripts/am.mjs","line_end":10612,"line_start":10612}],"confidence":0.96,"description":"const headers = { \"content-type\": \"application/json\", ...env.AM_TTS_API_KEY ? { authorization: `Bear","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"AM_TTS_API_KEY becomes a Bearer header for AM_TTS_URL. localSpeech does not require HTTPS or loopback, so remote HTTP exposes credentials and narration."},{"title":"Generic API/secret keys","locations":[{"file":"scripts/am.mjs","line_end":10612,"line_start":10612}],"confidence":0.96,"description":"const headers = { \"content-type\": \"application/json\", ...env.AM_TTS_API_KEY ? { authorization: `Bear","review_kind":"capability","source_category":"env_access","source_severity":"high","confidence_reasoning":"The optional AM_TTS_API_KEY is sent to an unrestricted configured URL. Plaintext remote HTTP can disclose the token and narration."}],"medium_findings":[{"title":"Hardcoded IP address","locations":[{"file":"scripts/am.mjs","line_end":11570,"line_start":11570}],"confidence":0.97,"description":"var LAN_BIND = \"0.0.0.0\";","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The optional LAN mode binds 0.0.0.0 and serves capability URLs over HTTP. Network observers can capture links and read shared private pages."},{"title":"Cloud Narration Selected Without Provider-Specific Consent","locations":[{"file":"references/video.md","line_end":34,"line_start":34},{"file":"scripts/am.mjs","line_end":10562,"line_start":10545}],"confidence":0.96,"description":"Video narration defaults to auto and selects ElevenLabs whenever ELEVENLABS_API_KEY exists. A video request can therefore send private narration externally without a provider-specific choice.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The instructions require a video request but no cloud-provider confirmation. pickProvider chooses ElevenLabs from an ambient key before considering system speech."}],"low_findings":[{"title":"Fetch API call","locations":[{"file":"scripts/am.mjs","line_end":10618,"line_start":10618}],"confidence":0.96,"description":"res = await fetch(url, {","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"localSpeech posts narration and optional Bearer credentials to AM_TTS_URL without transport restrictions. A remote HTTP endpoint exposes this data in transit."},{"title":"HTTP client library","locations":[{"file":"scripts/am.mjs","line_end":10649,"line_start":10649}],"confidence":0.96,"description":"const samples = trimSilence(await request(text2));","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"request(text2) invokes localSpeech against the configured endpoint. Its URL lacks HTTPS or loopback enforcement, so narration can cross an unencrypted remote connection."}],"dangerous_patterns":[],"files_scanned":5,"total_lines":13383,"audit_model":"codex","audited_at":"2026-10-29T14:54:03.426+00:00","created_at":"2026-10-29T15:49:57.771822+00:00","static_findings":[{"id":"blocker:scripts/am.mjs:1116:disk-destruction-command","file":"scripts/am.mjs","pattern":"Disk destruction command","snippet":"var FONT_CSS = { \"bangers\": '/* Bangers, Copyright 2010 The Bangers Project Authors (https://github.","category":"blocker","line_end":1116,"severity":"critical","line_start":1116},{"id":"sensitive:scripts/am.mjs:9268:git-credentials-file","file":"scripts/am.mjs","pattern":"Git credentials file","snippet":"\"^(?:\\\\.netrc|\\\\.npmrc|\\\\.yarnrc(?:\\\\.yml)?|\\\\.pypirc|\\\\.pgpass|\\\\.my\\\\.cnf|\\\\.git-credentials|\\\\.ht","category":"sensitive","line_end":9268,"severity":"critical","line_start":9268},{"id":"sensitive:scripts/am.mjs:9268:netrc-credentials-file","file":"scripts/am.mjs","pattern":"netrc credentials file","snippet":"\"^(?:\\\\.netrc|\\\\.npmrc|\\\\.yarnrc(?:\\\\.yml)?|\\\\.pypirc|\\\\.pgpass|\\\\.my\\\\.cnf|\\\\.git-credentials|\\\\.ht","category":"sensitive","line_end":9268,"severity":"critical","line_start":9268},{"id":"sensitive:scripts/am.mjs:9272:pass-password-store","file":"scripts/am.mjs","pattern":"pass password store","snippet":"var SECRET_DIR = /* @__PURE__ */ new Set([\".git\", \".ssh\", \".aws\", \".azure\", \".gnupg\", \".kube\", \".doc","category":"sensitive","line_end":9272,"severity":"critical","line_start":9272},{"id":"sensitive:scripts/am.mjs:12114:ssh-directory-access","file":"scripts/am.mjs","pattern":"SSH directory access","snippet":"- Files that hold keys by convention (.env, *.pem, id_rsa, .ssh/, .git/ \\u2026) and files with anyth","category":"sensitive","line_end":12114,"severity":"critical","line_start":12114},{"id":"sensitive:scripts/am.mjs:12114:ssh-private-key-file","file":"scripts/am.mjs","pattern":"SSH private key file","snippet":"- Files that hold keys by convention (.env, *.pem, id_rsa, .ssh/, .git/ \\u2026) and files with anyth","category":"sensitive","line_end":12114,"severity":"critical","line_start":12114},{"id":"obfuscation:scripts/am.mjs:1356:long-fromcharcode-sequence","file":"scripts/am.mjs","pattern":"Long fromCharCode sequence","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"obfuscation","line_end":1356,"severity":"critical","line_start":1356},{"id":"blocker:scripts/am.mjs:639:screen-capture-upload","file":"scripts/am.mjs","pattern":"Screen capture upload","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"blocker","line_end":639,"severity":"high","line_start":639},{"id":"blocker:scripts/am.mjs:11142:screen-capture-upload","file":"scripts/am.mjs","pattern":"Screen capture upload","snippet":"const screenshot = async () => (await page(\"Page.captureScreenshot\", { format: \"jpeg\", quality: QUAL","category":"blocker","line_end":11142,"severity":"high","line_start":11142},{"id":"sensitive:scripts/am.mjs:27:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"sensitive","line_end":27,"severity":"high","line_start":27},{"id":"sensitive:scripts/am.mjs:639:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"sensitive","line_end":639,"severity":"high","line_start":639},{"id":"sensitive:scripts/am.mjs:1355:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"sensitive","line_end":1355,"severity":"high","line_start":1355},{"id":"sensitive:scripts/am.mjs:1357:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"var VIDEO_MUX_JS = \"// Minimal WebM (Matroska) writer for the export path that has no ffmpeg: the br","category":"sensitive","line_end":1357,"severity":"high","line_start":1357},{"id":"sensitive:scripts/am.mjs:2115:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"var FONT_NAMES = Object.freeze(Object.keys(FONTS));","category":"sensitive","line_end":2115,"severity":"high","line_start":2115},{"id":"sensitive:scripts/am.mjs:4540:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"var STATES = Object.keys(SIGN);","category":"sensitive","line_end":4540,"severity":"high","line_start":4540},{"id":"sensitive:scripts/am.mjs:5076:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return Object.keys(this._nodes);","category":"sensitive","line_end":5076,"severity":"high","line_start":5076},{"id":"sensitive:scripts/am.mjs:5079:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return this.nodes().filter((e) => Object.keys(this._in[e]).length === 0);","category":"sensitive","line_end":5079,"severity":"high","line_start":5079},{"id":"sensitive:scripts/am.mjs:5082:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return this.nodes().filter((e) => Object.keys(this._out[e]).length === 0);","category":"sensitive","line_end":5082,"severity":"high","line_start":5082},{"id":"sensitive:scripts/am.mjs:5103:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"}), delete this._children[e]), Object.keys(this._in[e]).forEach(n), delete this._in[e], delete this.","category":"sensitive","line_end":5103,"severity":"high","line_start":5103},{"id":"sensitive:scripts/am.mjs:5126:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"if (n) return Object.keys(n);","category":"sensitive","line_end":5126,"severity":"high","line_start":5126},{"id":"sensitive:scripts/am.mjs:5135:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"if (n) return Object.keys(n);","category":"sensitive","line_end":5135,"severity":"high","line_start":5135},{"id":"sensitive:scripts/am.mjs:5139:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"if (n) return Object.keys(n);","category":"sensitive","line_end":5139,"severity":"high","line_start":5139},{"id":"sensitive:scripts/am.mjs:5328:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return this._arr.map((e) => e.key);","category":"sensitive","line_end":5328,"severity":"high","line_start":5328},{"id":"sensitive:scripts/am.mjs:5339:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return this._arr[0].key;","category":"sensitive","line_end":5339,"severity":"high","line_start":5339},{"id":"sensitive:scripts/am.mjs:5353:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return delete this._keyIndices[e.key], this._heapify(0), e.key;","category":"sensitive","line_end":5353,"severity":"high","line_start":5353},{"id":"sensitive:scripts/am.mjs:5372:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"t[e] = i, t[n] = o, r[i.key] = e, r[o.key] = n;","category":"sensitive","line_end":5372,"severity":"high","line_start":5372},{"id":"sensitive:scripts/am.mjs:5485:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"if (e.sinks().forEach(o), Object.keys(n).length !== e.nodeCount()) throw new K();","category":"sensitive","line_end":5485,"severity":"high","line_start":5485},{"id":"sensitive:scripts/am.mjs:6505:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"return l3(u, c), l3(d, f2), Object.keys(r).forEach((h2) => {","category":"sensitive","line_end":6505,"severity":"high","line_start":6505},{"id":"sensitive:scripts/am.mjs:6780:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"Object.keys(Tn2).forEach((a) => {","category":"sensitive","line_end":6780,"severity":"high","line_start":6780},{"id":"sensitive:scripts/am.mjs:7159:certificate-key-files","file":"scripts/am.mjs","pattern":"Certificate/key files","snippet":"const key = new Map([...nodes.keys()].map((name, i) => [name, nodeKey(i)]));","category":"sensitive","line_end":7159,"severity":"high","line_start":7159},{"id":"sensitive:scripts/am.mjs:9273:crypto-seed-private-key-mention","file":"scripts/am.mjs","pattern":"Crypto seed/private key mention","snippet":"var SECRET_TEXT = /:\\/\\/[^\\s:@/\"'`$<>{}]*:[^\\s@/\"'`$<>{}]+@|sk-ant-|sk-[A-Za-z0-9]{32,}|AKIA[0-9A-Z]","category":"sensitive","line_end":9273,"severity":"high","line_start":9273},{"id":"sensitive:scripts/am.mjs:9267:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"\"^\\\\.env(?!\\\\.(?:example|sample|template)$)(?:\\\\..*)?$\",","category":"sensitive","line_end":9267,"severity":"high","line_start":9267},{"id":"sensitive:scripts/am.mjs:9909:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function amHome(env = process.env) {","category":"sensitive","line_end":9909,"severity":"high","line_start":9909},{"id":"sensitive:scripts/am.mjs:9912:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function configPath(env = process.env) {","category":"sensitive","line_end":9912,"severity":"high","line_start":9912},{"id":"sensitive:scripts/am.mjs:9952:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function readConfig(env = process.env, themes2 = loadThemes(amHome(env))) {","category":"sensitive","line_end":9952,"severity":"high","line_start":9952},{"id":"sensitive:scripts/am.mjs:9976:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function setConfig(key, raw, env = process.env, themes2 = loadThemes(amHome(env))) {","category":"sensitive","line_end":9976,"severity":"high","line_start":9976},{"id":"sensitive:scripts/am.mjs:9982:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function resetConfig(key, env = process.env) {","category":"sensitive","line_end":9982,"severity":"high","line_start":9982},{"id":"sensitive:scripts/am.mjs:10040:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function catalogUrl(env = process.env) {","category":"sensitive","line_end":10040,"severity":"high","line_start":10040},{"id":"sensitive:scripts/am.mjs:10104:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"async function fetchIndex(env = process.env, net = {}) {","category":"sensitive","line_end":10104,"severity":"high","line_start":10104},{"id":"sensitive:scripts/am.mjs:10612:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"const headers = { \"content-type\": \"application/json\", ...env.AM_TTS_API_KEY ? { authorization: `Bear","category":"sensitive","line_end":10612,"severity":"high","line_start":10612},{"id":"sensitive:scripts/am.mjs:11084:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function findChrome(env = process.env, platform = process.platform) {","category":"sensitive","line_end":11084,"severity":"high","line_start":11084},{"id":"sensitive:scripts/am.mjs:11149:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"async function exportMp4(htmlFile, mp4File, { wav: wav2, env = process.env, onProgress = () => {","category":"sensitive","line_end":11149,"severity":"high","line_start":11149},{"id":"sensitive:scripts/am.mjs:11222:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"async function exportWebm(htmlFile, webmFile, { env = process.env, onProgress = () => {","category":"sensitive","line_end":11222,"severity":"high","line_start":11222},{"id":"sensitive:scripts/am.mjs:11391:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"spawn3(process.execPath, [scriptPath, \"__update-check\"], { detached: true, stdio: \"ignore\", env: { .","category":"sensitive","line_end":11391,"severity":"high","line_start":11391},{"id":"sensitive:scripts/am.mjs:11605:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"function readTailscaleStatus(run2 = (cmd) => spawnSync3(cmd, [\"status\", \"--json\"], { encoding: \"utf8","category":"sensitive","line_end":11605,"severity":"high","line_start":11605},{"id":"sensitive:scripts/am.mjs:12114:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"- Files that hold keys by convention (.env, *.pem, id_rsa, .ssh/, .git/ \\u2026) and files with anyth","category":"sensitive","line_end":12114,"severity":"high","line_start":12114},{"id":"sensitive:scripts/am.mjs:12191:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"const env = io.env ?? process.env;","category":"sensitive","line_end":12191,"severity":"high","line_start":12191},{"id":"sensitive:scripts/am.mjs:12310:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"fail(`\\u2717 --replace takes a page that am render wrote (a .html file in ${join11(amHome(ctx.env), ","category":"sensitive","line_end":12310,"severity":"high","line_start":12310},{"id":"sensitive:scripts/am.mjs:12329:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"const held = !opts.open && hasRetryWarnings(result) && shouldOpen(opts, ctx.env, config.values);","category":"sensitive","line_end":12329,"severity":"high","line_start":12329},{"id":"sensitive:scripts/am.mjs:12730:environment-file-access","file":"scripts/am.mjs","pattern":"Environment file access","snippet":"if (shouldOpen(opts, ctx.env, config.values)) (ctx.io.open ?? openFile)(file);","category":"sensitive","line_end":12730,"severity":"high","line_start":12730},{"id":"sensitive:scripts/am.mjs:9268:npm-config-file-may-contain-tokens","file":"scripts/am.mjs","pattern":"NPM config file (may contain tokens)","snippet":"\"^(?:\\\\.netrc|\\\\.npmrc|\\\\.yarnrc(?:\\\\.yml)?|\\\\.pypirc|\\\\.pgpass|\\\\.my\\\\.cnf|\\\\.git-credentials|\\\\.ht","category":"sensitive","line_end":9268,"severity":"high","line_start":9268},{"id":"sensitive:scripts/am.mjs:9268:pypi-config-file-may-contain-tokens","file":"scripts/am.mjs","pattern":"PyPI config file (may contain tokens)","snippet":"\"^(?:\\\\.netrc|\\\\.npmrc|\\\\.yarnrc(?:\\\\.yml)?|\\\\.pypirc|\\\\.pgpass|\\\\.my\\\\.cnf|\\\\.git-credentials|\\\\.ht","category":"sensitive","line_end":9268,"severity":"high","line_start":9268},{"id":"sensitive:scripts/am.mjs:9268:yarn-config-file","file":"scripts/am.mjs","pattern":"Yarn config file","snippet":"\"^(?:\\\\.netrc|\\\\.npmrc|\\\\.yarnrc(?:\\\\.yml)?|\\\\.pypirc|\\\\.pgpass|\\\\.my\\\\.cnf|\\\\.git-credentials|\\\\.ht","category":"sensitive","line_end":9268,"severity":"high","line_start":9268},{"id":"obfuscation:scripts/am.mjs:1356:heuristic-extremely-long-line-12573-chars-likely","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (12573 chars) - likely obfuscated","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"obfuscation","line_end":1356,"severity":"high","line_start":1356},{"id":"obfuscation:scripts/am.mjs:739:heuristic-extremely-long-line-12594-chars-likely","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (12594 chars) - likely obfuscated","snippet":"  src: url('data:font/woff2;base64,d09GMgABAAAAACS8AA4AAAAAQFQAACRnAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB","category":"obfuscation","line_end":739,"severity":"high","line_start":739},{"id":"obfuscation:scripts/am.mjs:27:heuristic-extremely-long-line-180603-chars-likel","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (180603 chars) - likely obfuscated","snippet":"    temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{cons","category":"obfuscation","line_end":27,"severity":"high","line_start":27},{"id":"obfuscation:scripts/am.mjs:640:heuristic-extremely-long-line-2073-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (2073 chars) - likely obfuscated","snippet":"var DIFF_CSS = \"/* Diff block (only on pages that have one): red and green lines, a hunk row, and tw","category":"obfuscation","line_end":640,"severity":"high","line_start":640},{"id":"obfuscation:scripts/am.mjs:1355:heuristic-extremely-long-line-22189-chars-likely","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (22189 chars) - likely obfuscated","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"obfuscation","line_end":1355,"severity":"high","line_start":1355},{"id":"obfuscation:scripts/am.mjs:2510:heuristic-extremely-long-line-2285-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (2285 chars) - likely obfuscated","snippet":"var x = { codeRemoveIndent: /^(?: {0,3}\\t| {1,4})/gm, outputLinkReplace: /\\\\([\\[\\]])/g, indentCodeCo","category":"obfuscation","line_end":2510,"severity":"high","line_start":2510},{"id":"obfuscation:scripts/am.mjs:1116:heuristic-extremely-long-line-31706-chars-likely","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (31706 chars) - likely obfuscated","snippet":"var FONT_CSS = { \"bangers\": '/* Bangers, Copyright 2010 The Bangers Project Authors (https://github.","category":"obfuscation","line_end":1116,"severity":"high","line_start":1116},{"id":"obfuscation:scripts/am.mjs:9063:heuristic-extremely-long-line-3899-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (3899 chars) - likely obfuscated","snippet":"var PAIRS = \"\\u8FD9\\u9019 \\u4E2A\\u500B \\u4EEC\\u5011 \\u8BF4\\u8AAA \\u56FD\\u570B \\u4E3A\\u70BA \\u6765\\u4","category":"obfuscation","line_end":9063,"severity":"high","line_start":9063},{"id":"obfuscation:scripts/am.mjs:729:heuristic-extremely-long-line-4609-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (4609 chars) - likely obfuscated","snippet":"var RTL_CSS = '/* Right-to-left pages (html[dir=\"rtl\"]: Hebrew, Arabic, Persian, Urdu, Yiddish). bas","category":"obfuscation","line_end":729,"severity":"high","line_start":729},{"id":"obfuscation:scripts/am.mjs:1146:heuristic-extremely-long-line-5390-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (5390 chars) - likely obfuscated","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"obfuscation","line_end":1146,"severity":"high","line_start":1146},{"id":"obfuscation:scripts/am.mjs:1357:heuristic-extremely-long-line-6878-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (6878 chars) - likely obfuscated","snippet":"var VIDEO_MUX_JS = \"// Minimal WebM (Matroska) writer for the export path that has no ffmpeg: the br","category":"obfuscation","line_end":1357,"severity":"high","line_start":1357},{"id":"obfuscation:scripts/am.mjs:730:heuristic-extremely-long-line-6948-chars-likely-","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (6948 chars) - likely obfuscated","snippet":"var CHART_CSS = '/* Charts (src/components/chart.js). Only a page with a chart carries this file, th","category":"obfuscation","line_end":730,"severity":"high","line_start":730},{"id":"obfuscation:scripts/am.mjs:639:heuristic-extremely-long-line-77110-chars-likely","file":"scripts/am.mjs","pattern":"[HEURISTIC] Extremely long line (77110 chars) - likely obfuscated","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"obfuscation","line_end":639,"severity":"high","line_start":639},{"id":"obfuscation:scripts/am.mjs:1:heuristic-multiple-bracket-chains-238-jsfuck-obf","file":"scripts/am.mjs","pattern":"[HEURISTIC] Multiple bracket chains (238) - JSFuck/obfuscation pattern","snippet":"]])(, )})(, ())}","category":"obfuscation","line_end":1,"severity":"high","line_start":1},{"id":"obfuscation:scripts/am.mjs:27:heuristic-very-high-entropy-string-5-70-bits-lik","file":"scripts/am.mjs","pattern":"[HEURISTIC] Very high entropy string (5.70 bits) - likely encoded/encrypted payload","snippet":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","category":"obfuscation","line_end":27,"severity":"high","line_start":27},{"id":"obfuscation:scripts/am.mjs:739:heuristic-very-high-entropy-string-6-00-bits-lik","file":"scripts/am.mjs","pattern":"[HEURISTIC] Very high entropy string (6.00 bits) - likely encoded/encrypted payload","snippet":"data:font/woff2;base64,d09GMgABAAAAACS8AA4AAAAAQFQAACRnAAEAAAAAAAAAAAAAAAAAAAAAA...","category":"obfuscation","line_end":739,"severity":"high","line_start":739},{"id":"obfuscation:scripts/am.mjs:1116:heuristic-very-high-entropy-string-6-01-bits-lik","file":"scripts/am.mjs","pattern":"[HEURISTIC] Very high entropy string (6.01 bits) - likely encoded/encrypted payload","snippet":";\\n  font-style: normal;\\n  font-weight: 400 900;\\n  src: url(data:font/woff2;ba...","category":"obfuscation","line_end":1116,"severity":"high","line_start":1116},{"id":"obfuscation:scripts/am.mjs:27:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"obfuscation","line_end":27,"severity":"high","line_start":27},{"id":"obfuscation:scripts/am.mjs:639:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"obfuscation","line_end":639,"severity":"high","line_start":639},{"id":"obfuscation:scripts/am.mjs:1146:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"obfuscation","line_end":1146,"severity":"high","line_start":1146},{"id":"obfuscation:scripts/am.mjs:1193:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var VIDEO_CSS = `/* Video player: the 1920\\xD71080 stage scales to the window. All colors come from ","category":"obfuscation","line_end":1193,"severity":"high","line_start":1193},{"id":"obfuscation:scripts/am.mjs:1355:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"obfuscation","line_end":1355,"severity":"high","line_start":1355},{"id":"obfuscation:scripts/am.mjs:2567:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var ct = h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).","category":"obfuscation","line_end":2567,"severity":"high","line_start":2567},{"id":"obfuscation:scripts/am.mjs:2572:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var kt = h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace(\"la","category":"obfuscation","line_end":2572,"severity":"high","line_start":2572},{"id":"obfuscation:scripts/am.mjs:4049:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"const url = decode(value.replace(/^[\"']|[\"']$/g, \"\")).replace(/[\\x00-\\x20\\x7f]/g, \"\").toLowerCase();","category":"obfuscation","line_end":4049,"severity":"high","line_start":4049},{"id":"obfuscation:scripts/am.mjs:4756:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"var WORD_LEAD = new RegExp(`^(?:\\\\p{Script=Hebrew}{1,3}[-\\\\u05BE]|[([{\\xAB\\u201C\\u2018\"']|&quot;|&#3","category":"obfuscation","line_end":4756,"severity":"high","line_start":4756},{"id":"obfuscation:scripts/am.mjs:8733:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"const ticks = panels.map((p) => `<i class=\"am-tick\" data-id=\"${esc(p.id)}\" data-title=\"${esc(p.id)} ","category":"obfuscation","line_end":8733,"severity":"high","line_start":8733},{"id":"obfuscation:scripts/am.mjs:8734:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"const links = panels.map((p) => `<li><a href=\"#panel-${esc(p.id)}\">${esc(p.id)} \\xB7 ${esc(p.title)}","category":"obfuscation","line_end":8734,"severity":"high","line_start":8734},{"id":"obfuscation:scripts/am.mjs:9010:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"if (text2.includes(c)) out.push({ line, rule: \"cliche\", message: `clich\\xE9 \"${c}\"`, suggestion: \"de","category":"obfuscation","line_end":9010,"severity":"high","line_start":9010},{"id":"obfuscation:scripts/am.mjs:9461:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"\"image/png\": (buf) => startsWith(buf, \"\\x89PNG\\r\\n\u001a\\n\"),","category":"obfuscation","line_end":9461,"severity":"high","line_start":9461},{"id":"obfuscation:scripts/am.mjs:9462:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"\"image/jpeg\": (buf) => startsWith(buf, \"\\xFF\\xD8\\xFF\"),","category":"obfuscation","line_end":9462,"severity":"high","line_start":9462},{"id":"obfuscation:scripts/am.mjs:9748:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"if (language.dir === \"rtl\") return `<p class=\"am-colophon\">${label} <bdi>${link} ${VERSION}</bdi> \\x","category":"obfuscation","line_end":9748,"severity":"high","line_start":9748},{"id":"obfuscation:scripts/am.mjs:9749:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"return `<p class=\"am-colophon\">${label} ${link} ${VERSION} \\xB7 ${time} \\xB7 ${star}</p>`;","category":"obfuscation","line_end":9749,"severity":"high","line_start":9749},{"id":"obfuscation:scripts/am.mjs:11039:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"<button class=\"amv-btn amv-rate\" type=\"button\" data-amv=\"rate\" data-speed=\"${esc(ui.speed)}\" aria-la","category":"obfuscation","line_end":11039,"severity":"high","line_start":11039},{"id":"obfuscation:scripts/am.mjs:11041:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"<span class=\"amv-brand\">Answer me with HTML ${VERSION} \\xB7 ${esc(timestamp())}</span>","category":"obfuscation","line_end":11041,"severity":"high","line_start":11041},{"id":"obfuscation:scripts/am.mjs:12103:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"\\`\\`\\`ts title=\"limits.ts \\xB7 sketch\"","category":"obfuscation","line_end":12103,"severity":"high","line_start":12103},{"id":"obfuscation:scripts/am.mjs:12722:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"return `video \\xB7 ${meta.theme} \\xB7 ${count(stats.panels, \"scene\")} \\xB7 ${count(result.beats, \"be","category":"obfuscation","line_end":12722,"severity":"high","line_start":12722},{"id":"obfuscation:scripts/am.mjs:12724:hex-encoded-characters","file":"scripts/am.mjs","pattern":"Hex-encoded characters","snippet":"const comps = Object.entries(stats.components).map(([k2, v]) => `${k2}\\xD7${v}`).join(\" \");","category":"obfuscation","line_end":12724,"severity":"high","line_start":12724},{"id":"scripts:scripts/am.mjs:27:direct-proto-assignment","file":"scripts/am.mjs","pattern":"Direct __proto__ assignment","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"scripts","line_end":27,"severity":"high","line_start":27},{"id":"env_access:references/video.md:34:generic-api-secret-keys","file":"references/video.md","pattern":"Generic API/secret keys","snippet":"- Narration voice: the default is `--voice auto`: ElevenLabs when `ELEVENLABS_API_KEY` is set, other","category":"env_access","line_end":34,"severity":"high","line_start":34},{"id":"env_access:scripts/am.mjs:9905:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"voice: { type: \"enum\", choices: VOICES, default: \"auto\", label: \"Video narration voice-over (auto: E","category":"env_access","line_end":9905,"severity":"high","line_start":9905},{"id":"env_access:scripts/am.mjs:10552:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"if (!env.ELEVENLABS_API_KEY) throw new TtsError(\"voice=elevenlabs needs the ELEVENLABS_API_KEY envir","category":"env_access","line_end":10552,"severity":"high","line_start":10552},{"id":"env_access:scripts/am.mjs:10561:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"if (env.ELEVENLABS_API_KEY) return eleven();","category":"env_access","line_end":10561,"severity":"high","line_start":10561},{"id":"env_access:scripts/am.mjs:10580:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"headers: { \"xi-api-key\": env.ELEVENLABS_API_KEY, \"content-type\": \"application/json\" },","category":"env_access","line_end":10580,"severity":"high","line_start":10580},{"id":"env_access:scripts/am.mjs:10612:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"const headers = { \"content-type\": \"application/json\", ...env.AM_TTS_API_KEY ? { authorization: `Bear","category":"env_access","line_end":10612,"severity":"high","line_start":10612},{"id":"env_access:scripts/am.mjs:12171:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"- Voice-over: --voice auto (default: ElevenLabs if ELEVENLABS_API_KEY is set, otherwise system TTS) ","category":"env_access","line_end":12171,"severity":"high","line_start":12171},{"id":"env_access:scripts/am.mjs:12178:generic-api-secret-keys","file":"scripts/am.mjs","pattern":"Generic API/secret keys","snippet":"AM_TTS_API_KEY is sent as a Bearer token when set; AM_TTS_EXTRA holds model-specific parameters (a J","category":"env_access","line_end":12178,"severity":"high","line_start":12178},{"id":"filesystem:references/settings.md:19:hidden-file-in-home-directory","file":"references/settings.md","pattern":"Hidden file in home directory","snippet":"When the arguments start with `update`, or the user asks to update this skill: update according to h","category":"filesystem","line_end":19,"severity":"high","line_start":19},{"id":"filesystem:references/video.md:35:hidden-file-in-home-directory","file":"references/video.md","pattern":"Hidden file in home directory","snippet":"- The output is a single-file player page under `~/.answer-me-with-html/videos/` (audio embedded). T","category":"filesystem","line_end":35,"severity":"high","line_start":35},{"id":"filesystem:scripts/am.mjs:12048:hidden-file-in-home-directory","file":"scripts/am.mjs","pattern":"Hidden file in home directory","snippet":"- Output goes to ~/.answer-me-with-html/pages/ by default (change it with the AM_HOME environment va","category":"filesystem","line_end":12048,"severity":"high","line_start":12048},{"id":"filesystem:scripts/am.mjs:12182:hidden-file-in-home-directory","file":"scripts/am.mjs","pattern":"Hidden file in home directory","snippet":"- Output goes to ~/.answer-me-with-html/videos/. The player carries a chapter strip (a chip jumps in","category":"filesystem","line_end":12182,"severity":"high","line_start":12182},{"id":"filesystem:scripts/am.mjs:12415:hidden-file-in-home-directory","file":"scripts/am.mjs","pattern":"Hidden file in home directory","snippet":"- Reads the catalog, downloads themes/<name>.json, checks its size, sha256, colors and links, and sa","category":"filesystem","line_end":12415,"severity":"high","line_start":12415},{"id":"filesystem:scripts/am.mjs:12424:hidden-file-in-home-directory","file":"scripts/am.mjs","pattern":"Hidden file in home directory","snippet":"Your own theme: one JSON file per theme in ~/.answer-me-with-html/themes/ (AM_HOME moves it)","category":"filesystem","line_end":12424,"severity":"high","line_start":12424},{"id":"filesystem:SKILL.md:69:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"On every other host the token is left as it stands or comes out empty. There, before your first comm","category":"filesystem","line_end":69,"severity":"high","line_start":69},{"id":"filesystem:SKILL.md:71:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"Keep the default output; it needs no flag. If the session cannot write to `~/.answer-me-with-html/pa","category":"filesystem","line_end":71,"severity":"high","line_start":71},{"id":"external_commands:scripts/am.mjs:1361:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawn as spawn4 } from \"node:child_process\";","category":"external_commands","line_end":1361,"severity":"high","line_start":1361},{"id":"external_commands:scripts/am.mjs:10505:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawn, spawnSync as spawnSync2 } from \"node:child_process\";","category":"external_commands","line_end":10505,"severity":"high","line_start":10505},{"id":"external_commands:scripts/am.mjs:10512:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawnSync } from \"node:child_process\";","category":"external_commands","line_end":10512,"severity":"high","line_start":10512},{"id":"external_commands:scripts/am.mjs:11056:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawn as spawn2 } from \"node:child_process\";","category":"external_commands","line_end":11056,"severity":"high","line_start":11056},{"id":"external_commands:scripts/am.mjs:11323:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawn as spawn3 } from \"node:child_process\";","category":"external_commands","line_end":11323,"severity":"high","line_start":11323},{"id":"external_commands:scripts/am.mjs:11562:node-js-child-process-module","file":"scripts/am.mjs","pattern":"Node.js child_process module","snippet":"import { spawnSync as spawnSync3 } from \"node:child_process\";","category":"external_commands","line_end":11562,"severity":"high","line_start":11562},{"id":"filesystem:references/video.md:3:path-traversal-sequence","file":"references/video.md","pattern":"Path traversal sequence","snippet":"Read this when SKILL.md section 7 sends you here. `am` means the full `node \".../scripts/am.mjs\"` co","category":"filesystem","line_end":3,"severity":"high","line_start":3},{"id":"filesystem:scripts/am.mjs:639:path-traversal-sequence","file":"scripts/am.mjs","pattern":"Path traversal sequence","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"filesystem","line_end":639,"severity":"high","line_start":639},{"id":"filesystem:scripts/am.mjs:7327:path-traversal-sequence","file":"scripts/am.mjs","pattern":"Path traversal sequence","snippet":"const stepOf = new Map([.../* @__PURE__ */ new Set([...[...nodes.values()].map((n) => n.line), ...ed","category":"filesystem","line_end":7327,"severity":"high","line_start":7327},{"id":"filesystem:scripts/am.mjs:7613:path-traversal-sequence","file":"scripts/am.mjs","pattern":"Path traversal sequence","snippet":"const steps2 = [.../* @__PURE__ */ new Set([...[...entities.values()].map((e) => e.line), ...rels.ma","category":"filesystem","line_end":7613,"severity":"high","line_start":7613},{"id":"external_commands:scripts/am.mjs:27:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"external_commands","line_end":27,"severity":"high","line_start":27},{"id":"external_commands:scripts/am.mjs:1146:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"external_commands","line_end":1146,"severity":"high","line_start":1146},{"id":"external_commands:scripts/am.mjs:2694:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let i = n.inline.code.exec(e.slice(s));","category":"external_commands","line_end":2694,"severity":"high","line_start":2694},{"id":"external_commands:scripts/am.mjs:2701:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let r = l3.slice(t + s), o = n.inline.tag.exec(r) || n.inline.autolink.exec(r);","category":"external_commands","line_end":2701,"severity":"high","line_start":2701},{"id":"external_commands:scripts/am.mjs:2717:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.newline.exec(e);","category":"external_commands","line_end":2717,"severity":"high","line_start":2717},{"id":"external_commands:scripts/am.mjs:2721:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.code.exec(e);","category":"external_commands","line_end":2721,"severity":"high","line_start":2721},{"id":"external_commands:scripts/am.mjs:2728:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.fences.exec(e);","category":"external_commands","line_end":2728,"severity":"high","line_start":2728},{"id":"external_commands:scripts/am.mjs:2735:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.heading.exec(e);","category":"external_commands","line_end":2735,"severity":"high","line_start":2735},{"id":"external_commands:scripts/am.mjs:2747:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.hr.exec(e);","category":"external_commands","line_end":2747,"severity":"high","line_start":2747},{"id":"external_commands:scripts/am.mjs:2752:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.blockquote.exec(e);","category":"external_commands","line_end":2752,"severity":"high","line_start":2752},{"id":"external_commands:scripts/am.mjs:2797:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.list.exec(e);","category":"external_commands","line_end":2797,"severity":"high","line_start":2797},{"id":"external_commands:scripts/am.mjs:2804:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"if (!(t = o.exec(e)) || this.rules.block.hr.test(e)) break;","category":"external_commands","line_end":2804,"severity":"high","line_start":2804},{"id":"external_commands:scripts/am.mjs:2845:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let c = this.rules.other.listTaskCheckbox.exec(a.raw);","category":"external_commands","line_end":2845,"severity":"high","line_start":2845},{"id":"external_commands:scripts/am.mjs:2860:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.html.exec(e);","category":"external_commands","line_end":2860,"severity":"high","line_start":2860},{"id":"external_commands:scripts/am.mjs:2867:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.def.exec(e);","category":"external_commands","line_end":2867,"severity":"high","line_start":2867},{"id":"external_commands:scripts/am.mjs:2875:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.table.exec(e);","category":"external_commands","line_end":2875,"severity":"high","line_start":2875},{"id":"external_commands:scripts/am.mjs:2888:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.lheading.exec(e);","category":"external_commands","line_end":2888,"severity":"high","line_start":2888},{"id":"external_commands:scripts/am.mjs:2896:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.paragraph.exec(e);","category":"external_commands","line_end":2896,"severity":"high","line_start":2896},{"id":"external_commands:scripts/am.mjs:2904:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.block.text.exec(e);","category":"external_commands","line_end":2904,"severity":"high","line_start":2904},{"id":"external_commands:scripts/am.mjs:2908:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.inline.escape.exec(e);","category":"external_commands","line_end":2908,"severity":"high","line_start":2908},{"id":"external_commands:scripts/am.mjs:2912:process-exec","file":"scripts/am.mjs","pattern":"Process exec","snippet":"let t = this.rules.inline.tag.exec(e);","category":"external_commands","line_end":2912,"severity":"high","line_start":2912},{"id":"external_commands:scripts/am.mjs:10754:process-spawn","file":"scripts/am.mjs","pattern":"Process spawn","snippet":"const p = spawn(cmd, args, { stdio: [\"ignore\", \"ignore\", \"pipe\"] });","category":"external_commands","line_end":10754,"severity":"high","line_start":10754},{"id":"scripts:scripts/am.mjs:27:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"scripts","line_end":27,"severity":"high","line_start":27},{"id":"scripts:scripts/am.mjs:1146:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"scripts","line_end":1146,"severity":"high","line_start":1146},{"id":"scripts:scripts/am.mjs:2694:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let i = n.inline.code.exec(e.slice(s));","category":"scripts","line_end":2694,"severity":"high","line_start":2694},{"id":"scripts:scripts/am.mjs:2701:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let r = l3.slice(t + s), o = n.inline.tag.exec(r) || n.inline.autolink.exec(r);","category":"scripts","line_end":2701,"severity":"high","line_start":2701},{"id":"scripts:scripts/am.mjs:2717:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.newline.exec(e);","category":"scripts","line_end":2717,"severity":"high","line_start":2717},{"id":"scripts:scripts/am.mjs:2721:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.code.exec(e);","category":"scripts","line_end":2721,"severity":"high","line_start":2721},{"id":"scripts:scripts/am.mjs:2728:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.fences.exec(e);","category":"scripts","line_end":2728,"severity":"high","line_start":2728},{"id":"scripts:scripts/am.mjs:2735:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.heading.exec(e);","category":"scripts","line_end":2735,"severity":"high","line_start":2735},{"id":"scripts:scripts/am.mjs:2747:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.hr.exec(e);","category":"scripts","line_end":2747,"severity":"high","line_start":2747},{"id":"scripts:scripts/am.mjs:2752:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.blockquote.exec(e);","category":"scripts","line_end":2752,"severity":"high","line_start":2752},{"id":"scripts:scripts/am.mjs:2797:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.list.exec(e);","category":"scripts","line_end":2797,"severity":"high","line_start":2797},{"id":"scripts:scripts/am.mjs:2804:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"if (!(t = o.exec(e)) || this.rules.block.hr.test(e)) break;","category":"scripts","line_end":2804,"severity":"high","line_start":2804},{"id":"scripts:scripts/am.mjs:2845:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let c = this.rules.other.listTaskCheckbox.exec(a.raw);","category":"scripts","line_end":2845,"severity":"high","line_start":2845},{"id":"scripts:scripts/am.mjs:2860:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.html.exec(e);","category":"scripts","line_end":2860,"severity":"high","line_start":2860},{"id":"scripts:scripts/am.mjs:2867:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.def.exec(e);","category":"scripts","line_end":2867,"severity":"high","line_start":2867},{"id":"scripts:scripts/am.mjs:2875:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.table.exec(e);","category":"scripts","line_end":2875,"severity":"high","line_start":2875},{"id":"scripts:scripts/am.mjs:2888:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.lheading.exec(e);","category":"scripts","line_end":2888,"severity":"high","line_start":2888},{"id":"scripts:scripts/am.mjs:2896:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.paragraph.exec(e);","category":"scripts","line_end":2896,"severity":"high","line_start":2896},{"id":"scripts:scripts/am.mjs:2904:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.block.text.exec(e);","category":"scripts","line_end":2904,"severity":"high","line_start":2904},{"id":"scripts:scripts/am.mjs:2908:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.inline.escape.exec(e);","category":"scripts","line_end":2908,"severity":"high","line_start":2908},{"id":"scripts:scripts/am.mjs:2912:python-exec-function","file":"scripts/am.mjs","pattern":"Python exec() function","snippet":"let t = this.rules.inline.tag.exec(e);","category":"scripts","line_end":2912,"severity":"high","line_start":2912},{"id":"external_commands:scripts/am.mjs:10517:synchronous-spawn","file":"scripts/am.mjs","pattern":"Synchronous spawn","snippet":"return spawnSync(process.platform === \"win32\" ? \"where\" : \"which\", [cmd], { stdio: \"ignore\" }).statu","category":"external_commands","line_end":10517,"severity":"high","line_start":10517},{"id":"obfuscation:scripts/am.mjs:1355:base64-decode","file":"scripts/am.mjs","pattern":"Base64 decode","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"obfuscation","line_end":1355,"severity":"medium","line_start":1355},{"id":"obfuscation:scripts/am.mjs:1356:base64-decode","file":"scripts/am.mjs","pattern":"Base64 decode","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"obfuscation","line_end":1356,"severity":"medium","line_start":1356},{"id":"obfuscation:scripts/am.mjs:11209:buffer-base64-decode","file":"scripts/am.mjs","pattern":"Buffer base64 decode","snippet":"if (!ffmpeg.stdin.write(Buffer.from(data, \"base64\"))) {","category":"obfuscation","line_end":11209,"severity":"medium","line_start":11209},{"id":"obfuscation:scripts/am.mjs:11245:buffer-base64-decode","file":"scripts/am.mjs","pattern":"Buffer base64 decode","snippet":"Buffer.from(slice, \"base64\").copy(file, at3);","category":"obfuscation","line_end":11245,"severity":"medium","line_start":11245},{"id":"obfuscation:scripts/am.mjs:27:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"obfuscation","line_end":27,"severity":"medium","line_start":27},{"id":"obfuscation:scripts/am.mjs:639:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"obfuscation","line_end":639,"severity":"medium","line_start":639},{"id":"obfuscation:scripts/am.mjs:1355:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"obfuscation","line_end":1355,"severity":"medium","line_start":1355},{"id":"obfuscation:scripts/am.mjs:1356:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"obfuscation","line_end":1356,"severity":"medium","line_start":1356},{"id":"obfuscation:scripts/am.mjs:4752:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var WJ = String.fromCharCode(8288);","category":"obfuscation","line_end":4752,"severity":"medium","line_start":4752},{"id":"obfuscation:scripts/am.mjs:4766:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var LRI = String.fromCharCode(8294);","category":"obfuscation","line_end":4766,"severity":"medium","line_start":4766},{"id":"obfuscation:scripts/am.mjs:4767:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"var PDI = String.fromCharCode(8297);","category":"obfuscation","line_end":4767,"severity":"medium","line_start":4767},{"id":"obfuscation:scripts/am.mjs:8613:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"const idAt = (c) => c <= 90 ? String.fromCharCode(c) : `P${c - 64}`;","category":"obfuscation","line_end":8613,"severity":"medium","line_start":8613},{"id":"obfuscation:scripts/am.mjs:9566:character-code-conversion","file":"scripts/am.mjs","pattern":"Character code conversion","snippet":"return btoa(String.fromCharCode(...out));","category":"obfuscation","line_end":9566,"severity":"medium","line_start":9566},{"id":"scripts:scripts/am.mjs:639:dynamic-import-expression","file":"scripts/am.mjs","pattern":"Dynamic import() expression","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"scripts","line_end":639,"severity":"medium","line_start":639},{"id":"filesystem:scripts/am.mjs:227:hard-link-creation","file":"scripts/am.mjs","pattern":"Hard link creation","snippet":".am-ln { display: block; padding: 0 14px; min-height: 1.5em; white-space: pre; }","category":"filesystem","line_end":227,"severity":"medium","line_start":227},{"id":"filesystem:scripts/am.mjs:640:hard-link-creation","file":"scripts/am.mjs","pattern":"Hard link creation","snippet":"var DIFF_CSS = \"/* Diff block (only on pages that have one): red and green lines, a hunk row, and tw","category":"filesystem","line_end":640,"severity":"medium","line_start":640},{"id":"filesystem:scripts/am.mjs:6008:hard-link-creation","file":"scripts/am.mjs","pattern":"Hard link creation","snippet":"var ln = Ct;","category":"filesystem","line_end":6008,"severity":"medium","line_start":6008},{"id":"filesystem:scripts/am.mjs:9255:hard-link-creation","file":"scripts/am.mjs","pattern":"Hard link creation","snippet":"return `<span class=\"am-ln am-ln--${r.kind}${marked2}\"${nums}>${esc(r.text)}</span>`;","category":"filesystem","line_end":9255,"severity":"medium","line_start":9255},{"id":"network:scripts/am.mjs:1356:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"network","line_end":1356,"severity":"medium","line_start":1356},{"id":"network:scripts/am.mjs:10028:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"var LOOPBACK = [\"localhost\", \"127.0.0.1\", \"[::1]\"];","category":"network","line_end":10028,"severity":"medium","line_start":10028},{"id":"network:scripts/am.mjs:10594:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"if (!env.AM_TTS_URL) throw new TtsError(\"voice=local needs the AM_TTS_URL environment variable (such","category":"network","line_end":10594,"severity":"medium","line_start":10594},{"id":"network:scripts/am.mjs:11569:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"var HOST = \"127.0.0.1\";","category":"network","line_end":11569,"severity":"medium","line_start":11569},{"id":"network:scripts/am.mjs:11570:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"var LAN_BIND = \"0.0.0.0\";","category":"network","line_end":11570,"severity":"medium","line_start":11570},{"id":"network:scripts/am.mjs:12038:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"am serve  [--port 8765] [--lan | --tailscale | --public-url <origin>] [--secret-file <path>]  serve ","category":"network","line_end":12038,"severity":"medium","line_start":12038},{"id":"network:scripts/am.mjs:12181:hardcoded-ip-address","file":"scripts/am.mjs","pattern":"Hardcoded IP address","snippet":"Example: AM_TTS_URL=http://127.0.0.1:8000 AM_TTS_MODEL=mlx-community/Qwen3-TTS-12Hz-1.7B-CustomVoice","category":"network","line_end":12181,"severity":"medium","line_start":12181},{"id":"filesystem:references/settings.md:19:hidden-file-access","file":"references/settings.md","pattern":"Hidden file access","snippet":"When the arguments start with `update`, or the user asks to update this skill: update according to h","category":"filesystem","line_end":19,"severity":"medium","line_start":19},{"id":"filesystem:references/video.md:35:hidden-file-access","file":"references/video.md","pattern":"Hidden file access","snippet":"- The output is a single-file player page under `~/.answer-me-with-html/videos/` (audio embedded). T","category":"filesystem","line_end":35,"severity":"medium","line_start":35},{"id":"filesystem:scripts/am.mjs:27:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"filesystem","line_end":27,"severity":"medium","line_start":27},{"id":"filesystem:scripts/am.mjs:639:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"filesystem","line_end":639,"severity":"medium","line_start":639},{"id":"filesystem:scripts/am.mjs:2228:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"else if (LENGTH_TOKENS.includes(k2) && /^[\\d.]+$/.test(v.trim())) out[k2] = `${v.trim()}px`;","category":"filesystem","line_end":2228,"severity":"medium","line_start":2228},{"id":"filesystem:scripts/am.mjs:2279:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (typeof requires !== \"string\" || !/^\\d+\\.\\d+\\.\\d+$/.test(requires)) errors.push(\"requires must be","category":"filesystem","line_end":2279,"severity":"medium","line_start":2279},{"id":"filesystem:scripts/am.mjs:3954:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (/^\\s+$/.test(tok)) {","category":"filesystem","line_end":3954,"severity":"medium","line_start":3954},{"id":"filesystem:scripts/am.mjs:4032:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"const m = /^<(\\/?)([A-Za-z][^\\s/>]*)/.exec(text2);","category":"filesystem","line_end":4032,"severity":"medium","line_start":4032},{"id":"filesystem:scripts/am.mjs:4034:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"const bogus = /^<[?!](?!--)\\[?\\w*/.exec(text2);","category":"filesystem","line_end":4034,"severity":"medium","line_start":4034},{"id":"filesystem:scripts/am.mjs:4050:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (/^(javascript|vbscript):/.test(url)) return true;","category":"filesystem","line_end":4050,"severity":"medium","line_start":4050},{"id":"filesystem:scripts/am.mjs:4054:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (/^on|^(srcdoc|formaction)$/.test(attr)) return true;","category":"filesystem","line_end":4054,"severity":"medium","line_start":4054},{"id":"filesystem:scripts/am.mjs:4107:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"const special = /^ {0,3}(<[?!](?!--)\\[?\\w*|<!--)/.exec(raw);","category":"filesystem","line_end":4107,"severity":"medium","line_start":4107},{"id":"filesystem:scripts/am.mjs:4197:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"var opensDisplay = (line) => /^ {0,3}\\$\\$[ \\t]*$/.test(line);","category":"filesystem","line_end":4197,"severity":"medium","line_start":4197},{"id":"filesystem:scripts/am.mjs:4198:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"var closesDisplay = (line) => /\\$\\$[ \\t]*$/.test(line);","category":"filesystem","line_end":4198,"severity":"medium","line_start":4198},{"id":"filesystem:scripts/am.mjs:4276:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (!/^ {0,3}\\$\\$/.test(src) || !ready()) return void 0;","category":"filesystem","line_end":4276,"severity":"medium","line_start":4276},{"id":"filesystem:scripts/am.mjs:4334:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"return text2.replace(SPACED_IMAGE, (whole, code, head, dest, title = \"\") => code || !/\\s/.test(dest)","category":"filesystem","line_end":4334,"severity":"medium","line_start":4334},{"id":"filesystem:scripts/am.mjs:4399:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"return /^([\"']).*\\1$/.test(s) ? s.slice(1, -1) : s;","category":"filesystem","line_end":4399,"severity":"medium","line_start":4399},{"id":"filesystem:scripts/am.mjs:4402:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (NUMERIC_KEYS.has(key) && /^\\d+$/.test(value)) return Number(value);","category":"filesystem","line_end":4402,"severity":"medium","line_start":4402},{"id":"filesystem:scripts/am.mjs:4453:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"const vertical = /\\bv(ertical)?\\b/.test(args) || !/\\bh(orizontal)?\\b/.test(args) && items.length > 6","category":"filesystem","line_end":4453,"severity":"medium","line_start":4453},{"id":"filesystem:scripts/am.mjs:4505:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"if (/\\[[^\\]]*\\]\\{|\\]\\{[^}]*$/.test(stripped)) {","category":"filesystem","line_end":4505,"severity":"medium","line_start":4505},{"id":"filesystem:scripts/am.mjs:4596:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"return withDelta(treeHtml(roots, /\\blist\\b/.test(args), ui), statesOf(roots), { ui, video });","category":"filesystem","line_end":4596,"severity":"medium","line_start":4596},{"id":"filesystem:scripts/am.mjs:4636:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"const escaped = /^\\\\[+\\-~] /.test(t);","category":"filesystem","line_end":4636,"severity":"medium","line_start":4636},{"id":"filesystem:scripts/am.mjs:4944:hidden-file-access","file":"scripts/am.mjs","pattern":"Hidden file access","snippet":"return `<figure class=\"am-diagram am-seq\">${layout(model, { num: /\\bnum\\b/.test(args), id: uid(), ui","category":"filesystem","line_end":4944,"severity":"medium","line_start":4944},{"id":"filesystem:SKILL.md:69:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"On every other host the token is left as it stands or comes out empty. There, before your first comm","category":"filesystem","line_end":69,"severity":"medium","line_start":69},{"id":"filesystem:SKILL.md:71:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"Keep the default output; it needs no flag. If the session cannot write to `~/.answer-me-with-html/pa","category":"filesystem","line_end":71,"severity":"medium","line_start":71},{"id":"scripts:scripts/am.mjs:639:innerhtml-assignment-xss-risk","file":"scripts/am.mjs","pattern":"innerHTML assignment (XSS risk)","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"scripts","line_end":639,"severity":"medium","line_start":639},{"id":"scripts:scripts/am.mjs:1355:innerhtml-assignment-xss-risk","file":"scripts/am.mjs","pattern":"innerHTML assignment (XSS risk)","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"scripts","line_end":1355,"severity":"medium","line_start":1355},{"id":"scripts:scripts/am.mjs:27:prototype-manipulation","file":"scripts/am.mjs","pattern":"Prototype manipulation","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"scripts","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:scripts/am.mjs:27:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:scripts/am.mjs:638:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":639,"severity":"medium","line_start":638},{"id":"external_commands:scripts/am.mjs:639:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"external_commands","line_end":639,"severity":"medium","line_start":639},{"id":"external_commands:scripts/am.mjs:728:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":731,"severity":"medium","line_start":728},{"id":"external_commands:scripts/am.mjs:1115:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":1117,"severity":"medium","line_start":1115},{"id":"external_commands:scripts/am.mjs:1117:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var DELTA_JS = \"\\n// \\u2500\\u2500 Change markers: the Before / Changes / After switch \\u2500\\u2500\\u","category":"external_commands","line_end":1117,"severity":"medium","line_start":1117},{"id":"external_commands:scripts/am.mjs:1145:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":1146,"severity":"medium","line_start":1145},{"id":"external_commands:scripts/am.mjs:1146:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"external_commands","line_end":1146,"severity":"medium","line_start":1146},{"id":"external_commands:scripts/am.mjs:1192:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":1193,"severity":"medium","line_start":1192},{"id":"external_commands:scripts/am.mjs:1354:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"`;","category":"external_commands","line_end":1355,"severity":"medium","line_start":1354},{"id":"external_commands:scripts/am.mjs:1355:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var VIDEO_JS = \"(() => {\\n  const D = JSON.parse(document.getElementById('amv-data').textContent);\\n","category":"external_commands","line_end":1355,"severity":"medium","line_start":1355},{"id":"external_commands:scripts/am.mjs:1356:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"external_commands","line_end":1356,"severity":"medium","line_start":1356},{"id":"external_commands:scripts/am.mjs:1746:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"// Names for the frontmatter keys an agent writes most (`author: ...`), shown under the title. Other","category":"external_commands","line_end":1746,"severity":"medium","line_start":1746},{"id":"external_commands:scripts/am.mjs:1802:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var langSelector = (language, base, rest) => language.langs.map((tag) => `${base}:lang(${tag})${rest","category":"external_commands","line_end":1802,"severity":"medium","line_start":1802},{"id":"external_commands:scripts/am.mjs:1803:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"var serifByLanguage = (variable, head) => fontLanguages().map((l3) => `${langSelector(l3, \"&\", \"[dat","category":"external_commands","line_end":1803,"severity":"medium","line_start":1803},{"id":"external_commands:scripts/am.mjs:1855:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"css: `& .am-frame { border: 1px solid var(--line); padding: 30px; }","category":"external_commands","line_end":1865,"severity":"medium","line_start":1855},{"id":"external_commands:scripts/am.mjs:1870:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"\"--v-stage\": `linear-gradient(var(--line-2) 1px, transparent 1px) 0 0 / 40px 40px,","category":"external_commands","line_end":1871,"severity":"medium","line_start":1870},{"id":"external_commands:scripts/am.mjs:1874:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"\"--v-stage\": `linear-gradient(rgba(201, 214, 232, 0.07) 1px, transparent 1px) 0 0 / 40px 40px,","category":"external_commands","line_end":1875,"severity":"medium","line_start":1874},{"id":"external_commands:scripts/am.mjs:1878:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"css: `& .amv-sheet {","category":"external_commands","line_end":1883,"severity":"medium","line_start":1878},{"id":"external_commands:scripts/am.mjs:1937:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"css: `& .am-panel-id { border-radius: 6px; min-width: 24px; height: 24px; margin: 9px 0 9px 14px; fo","category":"external_commands","line_end":1939,"severity":"medium","line_start":1937},{"id":"external_commands:scripts/am.mjs:1941:ruby-shell-backtick-execution","file":"scripts/am.mjs","pattern":"Ruby/shell backtick execution","snippet":"css: `& .amv-scene-n { margin: 12px 0 12px 14px; min-width: 40px; border-radius: 8px; font-size: 22p","category":"external_commands","line_end":1942,"severity":"medium","line_start":1941},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"You write only the **content draft** (extended Markdown). The `am` CLI does all layout, colours, dar","category":"external_commands","line_end":20,"severity":"medium","line_start":20},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Arguments for this call: `$ARGUMENTS`","category":"external_commands","line_end":26,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"When the arguments start with `config`, `clean` or `update`, or the user asks to change a setting, c","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If the context contains the `[answer-me-with-html always-on]` reminder (the user added the always-on","category":"external_commands","line_end":49,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Render with `--no-open`, so no browser window interrupts the user. The user opens the page by clic","category":"external_commands","line_end":54,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Order: render the page first, then write the text reply. The reply is the last thing in the turn, ","category":"external_commands","line_end":55,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The CLI is bundled in this skill's directory: `scripts/am.mjs`, a single file with no dependencies t","category":"external_commands","line_end":61,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":65,"severity":"medium","line_start":63},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":67,"severity":"medium","line_start":65},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"In Claude Code, `${CLAUDE_SKILL_DIR}` is replaced with this skill's directory before you read this f","category":"external_commands","line_end":69,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"On every other host the token is left as it stands or comes out empty. There, before your first comm","category":"external_commands","line_end":69,"severity":"medium","line_start":69},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Keep the default output; it needs no flag. If the session cannot write to `~/.answer-me-with-html/pa","category":"external_commands","line_end":71,"severity":"medium","line_start":71},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The draft language follows the language of the user's question: an English question gets an English ","category":"external_commands","line_end":74,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"````bash","category":"external_commands","line_end":84,"severity":"medium","line_start":78},{"id":"external_commands:SKILL.md:84:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```flow","category":"external_commands","line_end":86,"severity":"medium","line_start":84},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":88,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"````","category":"external_commands","line_end":91,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `✓ <path>`: success. Whether the browser opens automatically depends on the user's settings (`am c","category":"external_commands","line_end":91,"severity":"medium","line_start":91},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `✗ L<line> ...` + `Correct example:`: no page was written. The CLI lists every error of the draft ","category":"external_commands","line_end":92,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `  draft: <path>`: the CLI saved your stdin draft there, and every `L<line>` in the output matches","category":"external_commands","line_end":93,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `code n warnings`: a code block is longer than 40 lines, or a diff hunk has a different number of ","category":"external_commands","line_end":94,"severity":"medium","line_start":94},{"id":"network:scripts/am.mjs:1146:server-sent-events","file":"scripts/am.mjs","pattern":"Server-Sent Events","snippet":"var LIVE_JS = \"// am serve only: src/serve.js adds this script to the page it sends (never to the fi","category":"network","line_end":1146,"severity":"medium","line_start":1146},{"id":"scripts:scripts/am.mjs:10520:sharedarraybuffer-spectre-risk","file":"scripts/am.mjs","pattern":"SharedArrayBuffer (Spectre risk)","snippet":"var sleep = (ms) => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);","category":"scripts","line_end":10520,"severity":"medium","line_start":10520},{"id":"external_commands:scripts/am.mjs:27:shell-command-substitution","file":"scripts/am.mjs","pattern":"Shell command substitution","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:scripts/am.mjs:4199:shell-command-substitution","file":"scripts/am.mjs","pattern":"Shell command substitution","snippet":"var ONE_LINE = /^ {0,3}\\$\\$((?:[^$\\\\\\n]|\\\\.)+)\\$\\$[ \\t]*(?:\\n|$)/;","category":"external_commands","line_end":4199,"severity":"medium","line_start":4199},{"id":"filesystem:scripts/am.mjs:33:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { readFileSync as readFileSync9, writeFileSync as writeFileSync7, mkdirSync as mkdirSync4, ex","category":"filesystem","line_end":33,"severity":"medium","line_start":33},{"id":"filesystem:scripts/am.mjs:2065:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { existsSync, readdirSync, readFileSync } from \"node:fs\";","category":"filesystem","line_end":2065,"severity":"medium","line_start":2065},{"id":"filesystem:scripts/am.mjs:2409:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"data = JSON.parse(readFileSync(file, \"utf8\"));","category":"filesystem","line_end":2409,"severity":"medium","line_start":2409},{"id":"filesystem:scripts/am.mjs:9155:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { readFileSync as readFileSync3, realpathSync as realpathSync2, statSync as statSync2 } from ","category":"filesystem","line_end":9155,"severity":"medium","line_start":9155},{"id":"filesystem:scripts/am.mjs:9161:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { readFileSync as readFileSync2, realpathSync, statSync } from \"node:fs\";","category":"filesystem","line_end":9161,"severity":"medium","line_start":9161},{"id":"filesystem:scripts/am.mjs:9341:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"const buf = readFileSync2(path);","category":"filesystem","line_end":9341,"severity":"medium","line_start":9341},{"id":"filesystem:scripts/am.mjs:9490:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"const buf = readFileSync3(real);","category":"filesystem","line_end":9490,"severity":"medium","line_start":9490},{"id":"filesystem:scripts/am.mjs:9847:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { readFileSync as readFileSync4, writeFileSync, rmSync, existsSync as existsSync3 } from \"nod","category":"filesystem","line_end":9847,"severity":"medium","line_start":9847},{"id":"filesystem:scripts/am.mjs:9946:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"const data = JSON.parse(readFileSync4(file, \"utf8\"));","category":"filesystem","line_end":9946,"severity":"medium","line_start":9946},{"id":"filesystem:scripts/am.mjs:9973:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"writeFileSync(file, `${JSON.stringify(stored, null, 2)}","category":"filesystem","line_end":9973,"severity":"medium","line_start":9973},{"id":"filesystem:scripts/am.mjs:9991:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { mkdirSync as mkdirSync2, readFileSync as readFileSync6, renameSync as renameSync2, rmSync a","category":"filesystem","line_end":9991,"severity":"medium","line_start":9991},{"id":"filesystem:scripts/am.mjs:9995:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { readFileSync as readFileSync5, writeFileSync as writeFileSync2, renameSync } from \"node:fs\"","category":"filesystem","line_end":9995,"severity":"medium","line_start":9995},{"id":"filesystem:scripts/am.mjs:10001:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"const data = JSON.parse(readFileSync5(statePath(home), \"utf8\"));","category":"filesystem","line_end":10001,"severity":"medium","line_start":10001},{"id":"filesystem:scripts/am.mjs:10011:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"writeFileSync2(tmp, `${JSON.stringify(next, null, 2)}","category":"filesystem","line_end":10011,"severity":"medium","line_start":10011},{"id":"filesystem:scripts/am.mjs:10169:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"return readFileSync6(themeFile(home, name));","category":"filesystem","line_end":10169,"severity":"medium","line_start":10169},{"id":"filesystem:scripts/am.mjs:10183:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"writeFileSync3(tmp, bytes);","category":"filesystem","line_end":10183,"severity":"medium","line_start":10183},{"id":"filesystem:scripts/am.mjs:10507:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"import { mkdirSync as mkdirSync3, readFileSync as readFileSync7, writeFileSync as writeFileSync4, ex","category":"filesystem","line_end":10507,"severity":"medium","line_start":10507},{"id":"filesystem:scripts/am.mjs:10682:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"return readWav(readFileSync7(file));","category":"filesystem","line_end":10682,"severity":"medium","line_start":10682},{"id":"filesystem:scripts/am.mjs:10698:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"return readWav(readFileSync7(file));","category":"filesystem","line_end":10698,"severity":"medium","line_start":10698},{"id":"filesystem:scripts/am.mjs:10765:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"writeFileSync4(p, text2);","category":"filesystem","line_end":10765,"severity":"medium","line_start":10765},{"id":"filesystem:scripts/am.mjs:10850:synchronous-file-operations","file":"scripts/am.mjs","pattern":"Synchronous file operations","snippet":"buf = readFileSync7(file);","category":"filesystem","line_end":10850,"severity":"medium","line_start":10850},{"id":"external_commands:scripts/am.mjs:27:template-literal-with-command-substitution","file":"scripts/am.mjs","pattern":"Template literal with command substitution","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:scripts/am.mjs:4164:template-literal-with-command-substitution","file":"scripts/am.mjs","pattern":"Template literal with command substitution","snippet":"if (c === \"\\n\" || c === \"`\") return -1;","category":"external_commands","line_end":4201,"severity":"medium","line_start":4164},{"id":"network:scripts/am.mjs:11277:websocket-connection","file":"scripts/am.mjs","pattern":"WebSocket connection","snippet":"const ws = new WebSocket(url);","category":"network","line_end":11277,"severity":"medium","line_start":11277},{"id":"blocker:scripts/am.mjs:6978:network-reconnaissance","file":"scripts/am.mjs","pattern":"Network reconnaissance","snippet":"+ Cache -> Service: miss","category":"blocker","line_end":6979,"severity":"low","line_start":6978},{"id":"blocker:scripts/am.mjs:6342:object-assign-review-for-prototype-pollution","file":"scripts/am.mjs","pattern":"Object.assign (review for prototype pollution)","snippet":"f2 < a ? (c = 0, l3 = Object.assign({}, s), a = f2) : f2 === a && (l3 = structuredClone(s));","category":"blocker","line_end":6342,"severity":"low","line_start":6342},{"id":"blocker:scripts/am.mjs:6778:object-assign-review-for-prototype-pollution","file":"scripts/am.mjs","pattern":"Object.assign (review for prototype pollution)","snippet":"return n.setGraph(Object.assign({}, ar, xe2(t, sr), B2(t, dr))), e.nodes().forEach((r) => {","category":"blocker","line_end":6778,"severity":"low","line_start":6778},{"id":"blocker:scripts/am.mjs:6787:object-assign-review-for-prototype-pollution","file":"scripts/am.mjs","pattern":"Object.assign (review for prototype pollution)","snippet":"n.setEdge(r, Object.assign({}, cr, xe2(o, ur), B2(o, fr)));","category":"blocker","line_end":6787,"severity":"low","line_start":6787},{"id":"blocker:licenses/OFL-Bangers.txt:81:system-reconnaissance","file":"licenses/OFL-Bangers.txt","pattern":"System reconnaissance","snippet":"This license becomes null and void if any of the above conditions are","category":"blocker","line_end":81,"severity":"low","line_start":81},{"id":"blocker:scripts/am.mjs:27:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"blocker","line_end":27,"severity":"low","line_start":27},{"id":"blocker:scripts/am.mjs:53:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"border: 1px solid var(--line-2); border-radius: var(--radius); padding: 7px 10px; cursor: pointer;","category":"blocker","line_end":53,"severity":"low","line_start":53},{"id":"blocker:scripts/am.mjs:56:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }","category":"blocker","line_end":56,"severity":"low","line_start":56},{"id":"blocker:scripts/am.mjs:62:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"border: 1px solid var(--line-2); border-radius: var(--radius); padding-block: 0; padding-inline: 10p","category":"blocker","line_end":62,"severity":"low","line_start":62},{"id":"blocker:scripts/am.mjs:65:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-pick:focus-within { outline: 2px solid var(--accent); outline-offset: 2px; }","category":"blocker","line_end":65,"severity":"low","line_start":65},{"id":"blocker:scripts/am.mjs:82:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-grid {","category":"blocker","line_end":82,"severity":"low","line_start":82},{"id":"blocker:scripts/am.mjs:94:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-ruler--top span + span, .am-ruler--bottom span + span { border-inline-start: 1px solid var(--lin","category":"blocker","line_end":94,"severity":"low","line_start":94},{"id":"blocker:scripts/am.mjs:95:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-ruler--left span + span, .am-ruler--right span + span { border-top: 1px solid var(--line); }","category":"blocker","line_end":95,"severity":"low","line_start":95},{"id":"blocker:scripts/am.mjs:99:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"background: var(--paper); border: var(--bw) solid var(--line); border-radius: var(--radius);","category":"blocker","line_end":99,"severity":"low","line_start":99},{"id":"blocker:scripts/am.mjs:103:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"display: flex; align-items: stretch; gap: 0; border-bottom: var(--bw) solid var(--line); min-height:","category":"blocker","line_end":103,"severity":"low","line_start":103},{"id":"blocker:scripts/am.mjs:105:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-panel-id {","category":"blocker","line_end":105,"severity":"low","line_start":105},{"id":"blocker:scripts/am.mjs:122:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-md blockquote { margin: 0 0 8px; padding: 2px 12px; border-inline-start: 3px solid var(--line-2)","category":"blocker","line_end":122,"severity":"low","line_start":122},{"id":"blocker:scripts/am.mjs:124:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-md hr { border: 0; border-top: 1px solid var(--line-2); margin: 12px 0; }","category":"blocker","line_end":124,"severity":"low","line_start":124},{"id":"blocker:scripts/am.mjs:128:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"padding: 6px 10px; border-bottom: 1px solid var(--line-2);","category":"blocker","line_end":128,"severity":"low","line_start":128},{"id":"blocker:scripts/am.mjs:133:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-md td { padding: 7px 10px; border-bottom: 1px solid var(--line-2); vertical-align: top; }","category":"blocker","line_end":133,"severity":"low","line_start":133},{"id":"blocker:scripts/am.mjs:139:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-figure img { display: block; margin: 0 auto; border: 1px solid var(--line-2); border-radius: var","category":"blocker","line_end":139,"severity":"low","line_start":139},{"id":"blocker:scripts/am.mjs:142:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"margin: 0; padding: 12px 14px; background: var(--fill); border: 1px solid var(--line-2);","category":"blocker","line_end":142,"severity":"low","line_start":142},{"id":"blocker:scripts/am.mjs:146:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-ask { margin: 10px 0; padding: 10px 12px 8px; border: 1px solid var(--line-2); border-radius: va","category":"blocker","line_end":146,"severity":"low","line_start":146},{"id":"blocker:scripts/am.mjs:152:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":".am-ask-tag { display: inline-block; font-size: var(--am-fs-label); line-height: 1.5; color: var(--a","category":"blocker","line_end":152,"severity":"low","line_start":152},{"id":"blocker:scripts/am.mjs:157:system-reconnaissance","file":"scripts/am.mjs","pattern":"System reconnaissance","snippet":"border: 1px solid transparent; border-radius: var(--radius); padding: 3px; cursor: pointer;","category":"blocker","line_end":157,"severity":"low","line_start":157},{"id":"blocker:SKILL.md:148:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| A data model: entities, their columns and the relations between them | `er [LR]` | entity at colum","category":"blocker","line_end":148,"severity":"low","line_start":148},{"id":"blocker:SKILL.md:168:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- `span` is a hint. In a browser the sheet sizes each panel to its content and fills every row, so w","category":"blocker","line_end":168,"severity":"low","line_start":168},{"id":"obfuscation:scripts/am.mjs:27:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"obfuscation","line_end":27,"severity":"low","line_start":27},{"id":"obfuscation:scripts/am.mjs:639:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"obfuscation","line_end":639,"severity":"low","line_start":639},{"id":"obfuscation:scripts/am.mjs:2076:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"if (h3.length <= 4) h3 = [...h3].map((c) => c + c).join(\"\");","category":"obfuscation","line_end":2076,"severity":"low","line_start":2076},{"id":"obfuscation:scripts/am.mjs:3939:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"out.push(chars.slice(i, j2).join(\"\"));","category":"obfuscation","line_end":3939,"severity":"low","line_start":3939},{"id":"obfuscation:scripts/am.mjs:3944:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"out.push(...runUnits(chars.slice(i, j2).join(\"\"), maxWidth, size, opts));","category":"obfuscation","line_end":3944,"severity":"low","line_start":3944},{"id":"obfuscation:scripts/am.mjs:4431:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return `<dl class=\"am-kv\" style=\"--kv-cols: ${cols}\">${cells.join(\"\")}</dl>`;","category":"obfuscation","line_end":4431,"severity":"low","line_start":4431},{"id":"obfuscation:scripts/am.mjs:4455:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return vertical ? `<ol class=\"am-timeline am-timeline--v\">${lis.join(\"\")}</ol>` : `<div class=\"am-tl","category":"obfuscation","line_end":4455,"severity":"low","line_start":4455},{"id":"obfuscation:scripts/am.mjs:4489:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return groups.map(groupHtml).join(\"\");","category":"obfuscation","line_end":4489,"severity":"low","line_start":4489},{"id":"obfuscation:scripts/am.mjs:4499:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"const lines = g.lines.map((l3) => `<div class=\"am-annot-scroll\">${l3}</div>`).join(\"\");","category":"obfuscation","line_end":4499,"severity":"low","line_start":4499},{"id":"obfuscation:scripts/am.mjs:4500:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"const caps = g.captions.map((c) => `<div class=\"am-annot-caption\">${esc(c)}</div>`).join(\"\");","category":"obfuscation","line_end":4500,"severity":"low","line_start":4500},{"id":"obfuscation:scripts/am.mjs:4559:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"const views = [\"before\", \"changes\", \"after\"].map((v) => `<button type=\"button\" data-view=\"${v}\" aria","category":"obfuscation","line_end":4559,"severity":"low","line_start":4559},{"id":"obfuscation:scripts/am.mjs:4654:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"}).join(\"\");","category":"obfuscation","line_end":4654,"severity":"low","line_start":4654},{"id":"obfuscation:scripts/am.mjs:4656:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"var dropAttrs = (children) => Object.entries(HIDDEN_IN).map(([view, hidden]) => children.every((c) =","category":"obfuscation","line_end":4656,"severity":"low","line_start":4656},{"id":"obfuscation:scripts/am.mjs:4666:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"var colsHtml = (nodes, ui) => nodes.map((n, i) => colHtml(n, ui, nodes, i)).join(\"\");","category":"obfuscation","line_end":4666,"severity":"low","line_start":4666},{"id":"obfuscation:scripts/am.mjs:4671:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return `<ul class=\"am-tree-list\">${nodes.map((n, i) => liHtml(n, ui, nodes, i)).join(\"\")}</ul>`;","category":"obfuscation","line_end":4671,"severity":"low","line_start":4671},{"id":"obfuscation:scripts/am.mjs:4675:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"const kids = n.children.length ? `<ul>${n.children.map((c, k2) => liHtml(c, ui, n.children, k2)).joi","category":"obfuscation","line_end":4675,"severity":"low","line_start":4675},{"id":"obfuscation:scripts/am.mjs:4709:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return `<div class=\"am-limits\">${rows.map((row) => rowHtml(row, dir === \"rtl\" ? \"right\" : \"left\", wo","category":"obfuscation","line_end":4709,"severity":"low","line_start":4709},{"id":"obfuscation:scripts/am.mjs:4736:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"<div class=\"am-lim-ticks\" aria-hidden=\"true\">${ticks.join(\"\")}</div>","category":"obfuscation","line_end":4736,"severity":"low","line_start":4736},{"id":"obfuscation:scripts/am.mjs:4785:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"const text2 = run2.filter((t) => !t.startsWith(\"<\")).join(\"\");","category":"obfuscation","line_end":4785,"severity":"low","line_start":4785},{"id":"obfuscation:scripts/am.mjs:4829:array-join-empty-string","file":"scripts/am.mjs","pattern":"Array join empty string","snippet":"return out.join(\"\");","category":"obfuscation","line_end":4829,"severity":"low","line_start":4829},{"id":"obfuscation:scripts/am.mjs:1356:base64-encode","file":"scripts/am.mjs","pattern":"Base64 encode","snippet":"var VIDEO_EXPORT_JS = \"// The export engine for the path that has no ffmpeg: the player page drives ","category":"obfuscation","line_end":1356,"severity":"low","line_start":1356},{"id":"obfuscation:scripts/am.mjs:9566:base64-encode","file":"scripts/am.mjs","pattern":"Base64 encode","snippet":"return btoa(String.fromCharCode(...out));","category":"obfuscation","line_end":9566,"severity":"low","line_start":9566},{"id":"obfuscation:scripts/am.mjs:27:unicode-code-point-escape","file":"scripts/am.mjs","pattern":"Unicode code point escape","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"obfuscation","line_end":27,"severity":"low","line_start":27},{"id":"obfuscation:scripts/am.mjs:27:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"obfuscation","line_end":27,"severity":"low","line_start":27},{"id":"obfuscation:scripts/am.mjs:37:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"var BASE_CSS = `/* Answer me with HTML base \\u2014 uses theme variables only, never hard-coded color","category":"obfuscation","line_end":37,"severity":"low","line_start":37},{"id":"obfuscation:scripts/am.mjs:47:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Toolbar \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u25","category":"obfuscation","line_end":47,"severity":"low","line_start":47},{"id":"obfuscation:scripts/am.mjs:71:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Header \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u250","category":"obfuscation","line_end":71,"severity":"low","line_start":71},{"id":"obfuscation:scripts/am.mjs:79:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 sheet template \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":79,"severity":"low","line_start":79},{"id":"obfuscation:scripts/am.mjs:97:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Panels \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u250","category":"obfuscation","line_end":97,"severity":"low","line_start":97},{"id":"obfuscation:scripts/am.mjs:114:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Markdown body \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u25","category":"obfuscation","line_end":114,"severity":"low","line_start":114},{"id":"obfuscation:scripts/am.mjs:234:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Status badges ok / no / warn \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\","category":"obfuscation","line_end":234,"severity":"low","line_start":234},{"id":"obfuscation:scripts/am.mjs:241:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 callout \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u25","category":"obfuscation","line_end":241,"severity":"low","line_start":241},{"id":"obfuscation:scripts/am.mjs:251:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 kv title block \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":251,"severity":"low","line_start":251},{"id":"obfuscation:scripts/am.mjs:262:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 timeline \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":262,"severity":"low","line_start":262},{"id":"obfuscation:scripts/am.mjs:303:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 annot sentence notes \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":303,"severity":"low","line_start":303},{"id":"obfuscation:scripts/am.mjs:328:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 limits bars \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500","category":"obfuscation","line_end":328,"severity":"low","line_start":328},{"id":"obfuscation:scripts/am.mjs:342:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 tree \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\","category":"obfuscation","line_end":342,"severity":"low","line_start":342},{"id":"obfuscation:scripts/am.mjs:377:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Diagrams (flow / sequence) \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":377,"severity":"low","line_start":377},{"id":"obfuscation:scripts/am.mjs:428:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Diagram Lightbox and Pan-Zoom Viewer \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u250","category":"obfuscation","line_end":428,"severity":"low","line_start":428},{"id":"obfuscation:scripts/am.mjs:504:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 doc template \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u250","category":"obfuscation","line_end":504,"severity":"low","line_start":504},{"id":"obfuscation:scripts/am.mjs:550:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"/* \\u2500\\u2500 Responsive and print \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2","category":"obfuscation","line_end":550,"severity":"low","line_start":550},{"id":"obfuscation:scripts/am.mjs:639:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"var RUNTIME_JS = \"(() => {\\n// How a formula reads in a quote. MathML has no plain text, so src/math","category":"obfuscation","line_end":639,"severity":"low","line_start":639},{"id":"obfuscation:scripts/am.mjs:1117:unicode-escape-sequence","file":"scripts/am.mjs","pattern":"Unicode escape sequence","snippet":"var DELTA_JS = \"\\n// \\u2500\\u2500 Change markers: the Before / Changes / After switch \\u2500\\u2500\\u","category":"obfuscation","line_end":1117,"severity":"low","line_start":1117},{"id":"obfuscation:scripts/am.mjs:11918:url-decode","file":"scripts/am.mjs","pattern":"URL decode","snippet":"file = decodeURIComponent(raw);","category":"obfuscation","line_end":11918,"severity":"low","line_start":11918},{"id":"env_access:scripts/am.mjs:9909:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function amHome(env = process.env) {","category":"env_access","line_end":9909,"severity":"low","line_start":9909},{"id":"env_access:scripts/am.mjs:9912:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function configPath(env = process.env) {","category":"env_access","line_end":9912,"severity":"low","line_start":9912},{"id":"env_access:scripts/am.mjs:9952:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function readConfig(env = process.env, themes2 = loadThemes(amHome(env))) {","category":"env_access","line_end":9952,"severity":"low","line_start":9952},{"id":"env_access:scripts/am.mjs:9976:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function setConfig(key, raw, env = process.env, themes2 = loadThemes(amHome(env))) {","category":"env_access","line_end":9976,"severity":"low","line_start":9976},{"id":"env_access:scripts/am.mjs:9982:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function resetConfig(key, env = process.env) {","category":"env_access","line_end":9982,"severity":"low","line_start":9982},{"id":"env_access:scripts/am.mjs:10040:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function catalogUrl(env = process.env) {","category":"env_access","line_end":10040,"severity":"low","line_start":10040},{"id":"env_access:scripts/am.mjs:10104:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"async function fetchIndex(env = process.env, net = {}) {","category":"env_access","line_end":10104,"severity":"low","line_start":10104},{"id":"env_access:scripts/am.mjs:11084:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function findChrome(env = process.env, platform = process.platform) {","category":"env_access","line_end":11084,"severity":"low","line_start":11084},{"id":"env_access:scripts/am.mjs:11149:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"async function exportMp4(htmlFile, mp4File, { wav: wav2, env = process.env, onProgress = () => {","category":"env_access","line_end":11149,"severity":"low","line_start":11149},{"id":"env_access:scripts/am.mjs:11222:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"async function exportWebm(htmlFile, webmFile, { env = process.env, onProgress = () => {","category":"env_access","line_end":11222,"severity":"low","line_start":11222},{"id":"env_access:scripts/am.mjs:11391:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"spawn3(process.execPath, [scriptPath, \"__update-check\"], { detached: true, stdio: \"ignore\", env: { .","category":"env_access","line_end":11391,"severity":"low","line_start":11391},{"id":"env_access:scripts/am.mjs:11605:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"function readTailscaleStatus(run2 = (cmd) => spawnSync3(cmd, [\"status\", \"--json\"], { encoding: \"utf8","category":"env_access","line_end":11605,"severity":"low","line_start":11605},{"id":"env_access:scripts/am.mjs:12191:environment-variable-object","file":"scripts/am.mjs","pattern":"Environment variable object","snippet":"const env = io.env ?? process.env;","category":"env_access","line_end":12191,"severity":"low","line_start":12191},{"id":"network:scripts/am.mjs:27:fetch-api-call","file":"scripts/am.mjs","pattern":"Fetch API call","snippet":"temml_default = runInThisContext('(function () {\\nvar temml=function(){\"use strict\";class e{construc","category":"network","line_end":27,"severity":"low","line_start":27},{"id":"network:scripts/am.mjs:10576:fetch-api-call","file":"scripts/am.mjs","pattern":"Fetch API call","snippet":"res = await fetch(url, {","category":"network","line_end":10576,"severity":"low","line_start":10576},{"id":"network:scripts/am.mjs:10618:fetch-api-call","file":"scripts/am.mjs","pattern":"Fetch API call","snippet":"res = await fetch(url, {","category":"network","line_end":10618,"severity":"low","line_start":10618},{"id":"network:scripts/am.mjs:2:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"// answer-me-with-html CLI — generated by scripts/build.mjs, do not edit. Source: https://github.com","category":"network","line_end":2,"severity":"low","line_start":2},{"id":"network:scripts/am.mjs:1116:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"var FONT_CSS = { \"bangers\": '/* Bangers, Copyright 2010 The Bangers Project Authors (https://github.","category":"network","line_end":1116,"severity":"low","line_start":1116},{"id":"network:scripts/am.mjs:2112:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"notice: \"Bangers, Copyright 2010 The Bangers Project Authors (https://github.com/googlefonts/bangers","category":"network","line_end":2112,"severity":"low","line_start":2112},{"id":"network:scripts/am.mjs:3761:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"Please report this to https://github.com/markedjs/marked.`, e) {","category":"network","line_end":3761,"severity":"low","line_start":3761},{"id":"network:scripts/am.mjs:9743:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"const repo = \"https://github.com/QingYunA/answer-me-with-html\";","category":"network","line_end":9743,"severity":"low","line_start":9743},{"id":"network:scripts/am.mjs:9772:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"<a href=\"https://github.com/QingYunA/answer-me-with-html/releases\" target=\"_blank\" rel=\"noopener\">${","category":"network","line_end":9772,"severity":"low","line_start":9772},{"id":"network:scripts/am.mjs:10019:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"url: \"https://answer-me-with-html.com/themes/index.json\",","category":"network","line_end":10019,"severity":"low","line_start":10019},{"id":"network:scripts/am.mjs:10573:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"const url = `https://api.elevenlabs.io/v1/text-to-speech/${voice}?output_format=pcm_${SAMPLE_RATE}`;","category":"network","line_end":10573,"severity":"low","line_start":10573},{"id":"network:scripts/am.mjs:10594:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"if (!env.AM_TTS_URL) throw new TtsError(\"voice=local needs the AM_TTS_URL environment variable (such","category":"network","line_end":10594,"severity":"low","line_start":10594},{"id":"network:scripts/am.mjs:11328:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"url: \"https://raw.githubusercontent.com/QingYunA/answer-me-with-html/main/package.json\",","category":"network","line_end":11328,"severity":"low","line_start":11328},{"id":"network:scripts/am.mjs:11329:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"highlightsUrl: \"https://raw.githubusercontent.com/QingYunA/answer-me-with-html/main/highlights.json\"","category":"network","line_end":11329,"severity":"low","line_start":11329},{"id":"network:scripts/am.mjs:11609:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"throw new ServeError(\"--tailscale needs the tailscale CLI: install Tailscale (https://tailscale.com/","category":"network","line_end":11609,"severity":"low","line_start":11609},{"id":"network:scripts/am.mjs:11703:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"const origin = baseUrl ?? `http://${HOST}:${port}`;","category":"network","line_end":11703,"severity":"low","line_start":11703},{"id":"network:scripts/am.mjs:11960:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"if (running && await listening(running.port, running.host)) throw new ServeError(`am serve is alread","category":"network","line_end":11960,"severity":"low","line_start":11960},{"id":"network:scripts/am.mjs:11966:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"server.once(\"error\", (e) => fail(e.code === \"EADDRINUSE\" ? new ServeError(`Port ${port} is already i","category":"network","line_end":11966,"severity":"low","line_start":11966},{"id":"network:scripts/am.mjs:11971:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"const baseUrl = publicOrigin ?? (tail ? new URL(`http://${tail.host}:${actual}`).origin : `http://${","category":"network","line_end":11971,"severity":"low","line_start":11971},{"id":"network:scripts/am.mjs:12012:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"for (const address of srv.addresses) print(`LAN address: http://${address}:${srv.port}`);","category":"network","line_end":12012,"severity":"low","line_start":12012},{"id":"network:scripts/am.mjs:12014:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"print(`Serving pages on http://${HOST}:${srv.port} (Ctrl-C to stop). am render prints a link for eac","category":"network","line_end":12014,"severity":"low","line_start":12014},{"id":"network:scripts/am.mjs:12181:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"Example: AM_TTS_URL=http://127.0.0.1:8000 AM_TTS_MODEL=mlx-community/Qwen3-TTS-12Hz-1.7B-CustomVoice","category":"network","line_end":12181,"severity":"low","line_start":12181},{"id":"network:scripts/am.mjs:12297:hardcoded-url","file":"scripts/am.mjs","pattern":"Hardcoded URL","snippet":"return `Answer me with HTML needs Node.js 20 or newer (found ${version}). Update Node.js: https://no","category":"network","line_end":12297,"severity":"low","line_start":12297},{"id":"network:SKILL.md:187:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Every sentence on the page gives the reader one fact they need. The idea comes from [ASD-STE100](htt","category":"network","line_end":187,"severity":"low","line_start":187},{"id":"network:SKILL.md:199:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Sentence length: steps (ordered lists) 20 words in English / 35 characters in Chinese; description","category":"network","line_end":199,"severity":"low","line_start":199},{"id":"network:scripts/am.mjs:10649:http-client-library","file":"scripts/am.mjs","pattern":"HTTP client library","snippet":"const samples = trimSilence(await request(text2));","category":"network","line_end":10649,"severity":"low","line_start":10649},{"id":"filesystem:scripts/am.mjs:9179:standard-device-file-access","file":"scripts/am.mjs","pattern":"Standard device file access","snippet":"return path === \"/dev/null\" ? \"\" : path;","category":"filesystem","line_end":9179,"severity":"low","line_start":9179},{"id":"filesystem:scripts/am.mjs:10507:temp-file-creation","file":"scripts/am.mjs","pattern":"Temp file creation","snippet":"import { mkdirSync as mkdirSync3, readFileSync as readFileSync7, writeFileSync as writeFileSync4, ex","category":"filesystem","line_end":10507,"severity":"low","line_start":10507},{"id":"filesystem:scripts/am.mjs:10769:temp-file-creation","file":"scripts/am.mjs","pattern":"Temp file creation","snippet":"const dir = mkdtempSync(join7(tmpdir2(), \"am-tts-\"));","category":"filesystem","line_end":10769,"severity":"low","line_start":10769},{"id":"filesystem:scripts/am.mjs:11057:temp-file-creation","file":"scripts/am.mjs","pattern":"Temp file creation","snippet":"import { existsSync as existsSync5, mkdtempSync as mkdtempSync2, rmSync as rmSync4, writeFileSync as","category":"filesystem","line_end":11057,"severity":"low","line_start":11057},{"id":"filesystem:scripts/am.mjs:11093:temp-file-creation","file":"scripts/am.mjs","pattern":"Temp file creation","snippet":"const tmp = mkdtempSync2(join8(tmpdir3(), \"am-export-\"));","category":"filesystem","line_end":11093,"severity":"low","line_start":11093}],"finding_verdicts":[{"id":"blocker:scripts/am.mjs:1116:disk-destruction-command","reason":"This line defines FONT_CSS with embedded WOFF2 font data. The matched bytes are string content, not a disk command or process invocation.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9268:git-credentials-file","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9268:netrc-credentials-file","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9272:pass-password-store","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:12114:ssh-directory-access","reason":"The CLI help lists sensitive filenames that code embedding refuses. This text does not read SSH keys or environment files.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:12114:ssh-private-key-file","reason":"The CLI help lists sensitive filenames that code embedding refuses. This text does not read SSH keys or environment files.","verdict":"false_positive","confidence":0.99},{"id":"obfuscation:scripts/am.mjs:1356:long-fromcharcode-sequence","reason":"The export engine converts WAV header bytes and encoded video chunks to strings. These conversions support local media encoding, not hidden code execution.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:639:screen-capture-upload","reason":"The embedded runtime uses pointer capture and DOM interaction for diagram navigation. No screen-capture upload appears in this runtime.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/am.mjs:11142:screen-capture-upload","reason":"Page.captureScreenshot captures the generated player in a fresh headless browser profile. Frames go to local ffmpeg, not an upload destination.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:scripts/am.mjs:27:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:639:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:1355:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:1357:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:2115:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:4540:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5076:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5079:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5082:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5103:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5126:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5135:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5139:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5328:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5339:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5353:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5372:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:5485:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:6505:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:6780:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:7159:certificate-key-files","reason":"The match is JavaScript object key enumeration, graph key access, or embedded rendering code. No certificate or private-key file is opened here.","verdict":"false_positive","confidence":0.96},{"id":"sensitive:scripts/am.mjs:9273:crypto-seed-private-key-mention","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9267:environment-file-access","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9909:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:9912:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:9952:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:9976:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:9982:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:10040:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:10104:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:10612:environment-file-access","reason":"AM_TTS_API_KEY becomes a Bearer header for AM_TTS_URL. localSpeech does not require HTTPS or loopback, so remote HTTP exposes credentials and narration.","verdict":"confirmed","confidence":0.96},{"id":"sensitive:scripts/am.mjs:11084:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:11149:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:11222:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:11391:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:11605:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:12114:environment-file-access","reason":"The CLI help lists sensitive filenames that code embedding refuses. This text does not read SSH keys or environment files.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:12191:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:12310:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:12329:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:12730:environment-file-access","reason":"This uses the runtime environment for application paths, settings, browser discovery, or subprocess configuration. It does not open a dotenv or credential file.","verdict":"false_positive","confidence":0.95},{"id":"sensitive:scripts/am.mjs:9268:npm-config-file-may-contain-tokens","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9268:pypi-config-file-may-contain-tokens","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:scripts/am.mjs:9268:yarn-config-file","reason":"SECRET_FILE, SECRET_DIR, and SECRET_TEXT identify credentials to reject before embedding code. These deny rules prevent secret disclosure rather than collect credentials.","verdict":"false_positive","confidence":0.99},{"id":"obfuscation:scripts/am.mjs:1356:heuristic-extremely-long-line-12573-chars-likely","reason":"The long line contains the serialized browser video encoder. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:739:heuristic-extremely-long-line-12594-chars-likely","reason":"The long line contains an embedded WOFF2 font. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:27:heuristic-extremely-long-line-180603-chars-likel","reason":"The long line contains the bundled Temml math renderer. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:640:heuristic-extremely-long-line-2073-chars-likely-","reason":"The long line contains serialized diff styling. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:1355:heuristic-extremely-long-line-22189-chars-likely","reason":"The long line contains the serialized video player. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:2510:heuristic-extremely-long-line-2285-chars-likely-","reason":"The long line contains Markdown parser regular expressions. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:1116:heuristic-extremely-long-line-31706-chars-likely","reason":"The long line contains embedded font CSS and WOFF2 data. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:9063:heuristic-extremely-long-line-3899-chars-likely-","reason":"The long line contains a Simplified and Traditional Chinese character mapping. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:729:heuristic-extremely-long-line-4609-chars-likely-","reason":"The long line contains serialized right-to-left styling. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:1146:heuristic-extremely-long-line-5390-chars-likely-","reason":"The long line contains the serialized live-reload script. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:1357:heuristic-extremely-long-line-6878-chars-likely-","reason":"The long line contains the serialized WebM container writer. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:730:heuristic-extremely-long-line-6948-chars-likely-","reason":"The long line contains serialized chart styling. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:639:heuristic-extremely-long-line-77110-chars-likely","reason":"The long line contains readable browser layout and reply scripts serialized as one string. Bundling explains its length; this match does not establish concealed executable payloads.","verdict":"false_positive","confidence":0.95},{"id":"obfuscation:scripts/am.mjs:1:heuristic-multiple-bracket-chains-238-jsfuck-obf","reason":"The heuristic aggregates bracket sequences across a large generated bundle. Readable renderer and parser code explains these chains; no JSFuck execution wrapper was identified.","verdict":"false_positive","confidence":0.9},{"id":"obfuscation:scripts/am.mjs:27:heuristic-very-high-entropy-string-5-70-bits-lik","reason":"The reported high-entropy sample is an alphabet string inside the bundled math renderer. It is not an encrypted payload.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:739:heuristic-very-high-entropy-string-6-00-bits-lik","reason":"The high-entropy text is a data:font/woff2 base64 asset. The browser decodes font bytes, not executable JavaScript.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:1116:heuristic-very-high-entropy-string-6-01-bits-lik","reason":"The high-entropy text is a data:font/woff2 base64 asset. The browser decodes font bytes, not executable JavaScript.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:27:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:639:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1146:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1193:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1355:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:2567:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:2572:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4049:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4756:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:8733:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:8734:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9010:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9461:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9462:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9748:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9749:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:11039:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:11041:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:12103:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:12722:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:12724:hex-encoded-characters","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"scripts:scripts/am.mjs:27:direct-proto-assignment","reason":"Temml links its ParseError class to Error and removes dangerous macro property names. The assignment does not use attacker-selected prototypes.","verdict":"false_positive","confidence":0.98},{"id":"env_access:references/video.md:34:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/am.mjs:9905:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/am.mjs:10552:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/am.mjs:10561:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/am.mjs:10580:generic-api-secret-keys","reason":"The ElevenLabs key authenticates the documented speech API over HTTPS. The key is not sent to an unrelated service.","verdict":"false_positive","confidence":0.97},{"id":"env_access:scripts/am.mjs:10612:generic-api-secret-keys","reason":"The optional AM_TTS_API_KEY is sent to an unrestricted configured URL. Plaintext remote HTTP can disclose the token and narration.","verdict":"confirmed","confidence":0.96},{"id":"env_access:scripts/am.mjs:12171:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"env_access:scripts/am.mjs:12178:generic-api-secret-keys","reason":"This documents or checks the named speech-provider configuration. No secret value is embedded in these instructions or configuration labels.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:references/settings.md:19:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:references/video.md:35:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:12048:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:12182:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:12415:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:12424:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:69:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:71:hidden-file-in-home-directory","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:scripts/am.mjs:1361:node-js-child-process-module","reason":"This imports subprocess support for opening the generated page with the platform browser. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:scripts/am.mjs:10505:node-js-child-process-module","reason":"This imports subprocess support for local speech tools invoked with argument arrays. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:scripts/am.mjs:10512:node-js-child-process-module","reason":"This imports subprocess support for checking executable availability with which or where. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:scripts/am.mjs:11056:node-js-child-process-module","reason":"This imports subprocess support for headless browser and ffmpeg video export. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:scripts/am.mjs:11323:node-js-child-process-module","reason":"This imports subprocess support for a background update check using the current Node executable. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:scripts/am.mjs:11562:node-js-child-process-module","reason":"This imports subprocess support for the explicitly requested Tailscale status query. The examined calls use argument arrays, not a shell-interpolated command.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:references/video.md:3:path-traversal-sequence","reason":"The match is explanatory text or JavaScript spread syntax used to combine diagram data. No filesystem path traversal is performed.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:639:path-traversal-sequence","reason":"The match is explanatory text or JavaScript spread syntax used to combine diagram data. No filesystem path traversal is performed.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:7327:path-traversal-sequence","reason":"The match is explanatory text or JavaScript spread syntax used to combine diagram data. No filesystem path traversal is performed.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:7613:path-traversal-sequence","reason":"The match is explanatory text or JavaScript spread syntax used to combine diagram data. No filesystem path traversal is performed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:27:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1146:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2694:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2701:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2717:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2721:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2728:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2735:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2747:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2752:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2797:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2804:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2845:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2860:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2867:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2875:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2888:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2896:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2904:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2908:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:2912:process-exec","reason":"The exec call is JavaScript RegExp.exec in a parser or live-reload matcher. It does not execute an operating-system process.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:10754:process-spawn","reason":"The helper launches say or espeak-ng with argument arrays and narration in a temporary input file. No shell executes narration text.","verdict":"false_positive","confidence":0.98},{"id":"scripts:scripts/am.mjs:27:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:1146:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2694:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2701:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2717:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2721:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2728:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2735:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2747:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2752:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2797:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2804:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2845:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2860:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2867:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2875:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2888:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2896:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2904:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2908:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"scripts:scripts/am.mjs:2912:python-exec-function","reason":"The file is JavaScript, and exec is a regular-expression method. No Python exec or dynamic code evaluation occurs at this match.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:10517:synchronous-spawn","reason":"This calls which or where with the executable name as a separate argument. It checks tool availability without shell interpolation.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:1355:base64-decode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:1356:base64-decode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:11209:buffer-base64-decode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:11245:buffer-base64-decode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:27:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:639:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1355:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1356:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4752:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4766:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4767:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:8613:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:9566:character-code-conversion","reason":"Character conversion produces Unicode layout controls, panel identifiers, media headers, or digest bytes. It does not assemble executable code.","verdict":"false_positive","confidence":0.97},{"id":"scripts:scripts/am.mjs:639:dynamic-import-expression","reason":"The apparent import expression is in a comment describing build-time script composition. It does not dynamically import an attacker-controlled module.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:227:hard-link-creation","reason":"The matched ln text is a CSS line class, rendered line markup, or a graph-library identifier. It is not a hard-link syscall.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:640:hard-link-creation","reason":"The matched ln text is a CSS line class, rendered line markup, or a graph-library identifier. It is not a hard-link syscall.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:6008:hard-link-creation","reason":"The matched ln text is a CSS line class, rendered line markup, or a graph-library identifier. It is not a hard-link syscall.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:9255:hard-link-creation","reason":"The matched ln text is a CSS line class, rendered line markup, or a graph-library identifier. It is not a hard-link syscall.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:1356:hardcoded-ip-address","reason":"The dotted numeric text belongs to VP9 codec identifiers, not an IP address or network endpoint.","verdict":"false_positive","confidence":1},{"id":"network:scripts/am.mjs:10028:hardcoded-ip-address","reason":"These are loopback addresses allowed for local HTTP theme testing. Remote catalog URLs otherwise require HTTPS.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:10594:hardcoded-ip-address","reason":"The address appears in CLI usage or an example local speech URL. This text does not initiate an external connection.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:11569:hardcoded-ip-address","reason":"127.0.0.1 is the default page-server binding. It prevents remote interfaces from accepting requests by default.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:11570:hardcoded-ip-address","reason":"The optional LAN mode binds 0.0.0.0 and serves capability URLs over HTTP. Network observers can capture links and read shared private pages.","verdict":"confirmed","confidence":0.97},{"id":"network:scripts/am.mjs:12038:hardcoded-ip-address","reason":"The address appears in CLI usage or an example local speech URL. This text does not initiate an external connection.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:12181:hardcoded-ip-address","reason":"The address appears in CLI usage or an example local speech URL. This text does not initiate an external connection.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:references/settings.md:19:hidden-file-access","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:references/video.md:35:hidden-file-access","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:27:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:639:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:2228:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:2279:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:3954:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4032:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4034:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4050:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4054:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4107:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4197:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4198:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4276:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4334:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4399:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4402:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4453:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4505:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4596:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4636:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:4944:hidden-file-access","reason":"The matched syntax belongs to rendering text, regular expressions, or browser DOM code. It is not an operation on a hidden filesystem path.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:69:hidden-file-access","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:71:hidden-file-access","reason":"This documentation names the skill installation or its application-owned output, settings, and theme directories. It does not target unrelated hidden credentials.","verdict":"false_positive","confidence":0.98},{"id":"scripts:scripts/am.mjs:639:innerhtml-assignment-xss-risk","reason":"Runtime assignments clear containers or insert fixed and escaped reply markup. User reply text passes through escHtml, and generated pages restrict scripts with CSP hashes.","verdict":"false_positive","confidence":0.96},{"id":"scripts:scripts/am.mjs:1355:innerhtml-assignment-xss-risk","reason":"Video captions are escaped by captionHtml before insertion; other shown assignments use fixed markup. Generated pages also restrict scripts with CSP hashes.","verdict":"false_positive","confidence":0.96},{"id":"scripts:scripts/am.mjs:27:prototype-manipulation","reason":"Temml links its ParseError class to Error and removes dangerous macro property names. The assignment does not use attacker-selected prototypes.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:scripts/am.mjs:27:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:638:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:639:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:728:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1115:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1117:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1145:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1146:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1192:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1354:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1355:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1356:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1746:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1802:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1803:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1855:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1870:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1874:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1878:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1937:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:1941:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:84:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"Backticks delimit Markdown examples, JavaScript template strings, or comments. This is not Ruby execution or shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:1146:server-sent-events","reason":"The live-reload runtime subscribes to its page-specific event URL. The server validates the page capability token before opening the stream.","verdict":"false_positive","confidence":0.98},{"id":"scripts:scripts/am.mjs:10520:sharedarraybuffer-spectre-risk","reason":"A four-byte SharedArrayBuffer implements a bounded Atomics.wait delay for Windows rename retries. No cross-origin memory access or speculative-execution attack appears.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:27:shell-command-substitution","reason":"The matched dollars or backticks belong to math parsing, JavaScript strings, or comments. No shell evaluates this text.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:4199:shell-command-substitution","reason":"The matched dollars or backticks belong to math parsing, JavaScript strings, or comments. No shell evaluates this text.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/am.mjs:33:synchronous-file-operations","reason":"This imports filesystem APIs for the local CLI; imports alone do not access arbitrary files. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:2065:synchronous-file-operations","reason":"These imports support loading local JSON themes rather than collecting private documents. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:2409:synchronous-file-operations","reason":"The selected theme file is read and parsed as JSON before theme validation; it is not executed. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9155:synchronous-file-operations","reason":"These imports support local image embedding with file type, size, and secret-directory checks. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9161:synchronous-file-operations","reason":"These imports support code quotation with workspace containment and secret checks. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9341:synchronous-file-operations","reason":"readSlice resolves symlinks, checks workspace containment, and rejects sensitive filenames and token-containing content before quoting code. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9490:synchronous-file-operations","reason":"readImage reads a selected local image after type, size, and secret-directory checks. Embedding requested images is expected functionality. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9847:synchronous-file-operations","reason":"The imported APIs read and update application settings, not unrelated system files. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9946:synchronous-file-operations","reason":"The application-owned config.json is parsed as JSON, and supported setting values are validated. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9973:synchronous-file-operations","reason":"This writes validated user settings to the application configuration file. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9991:synchronous-file-operations","reason":"These imports support validated theme downloads and application-owned theme files. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:9995:synchronous-file-operations","reason":"These imports support application state reads and atomic state updates. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10001:synchronous-file-operations","reason":"The application state file is parsed as JSON with a safe empty-state fallback. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10011:synchronous-file-operations","reason":"This writes application state to a temporary sibling before renaming it into place. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10169:synchronous-file-operations","reason":"This reads an installed theme selected by a validated catalog name. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10183:synchronous-file-operations","reason":"The downloaded theme has size, SHA-256, schema, color, and external-resource checks before this atomic installation write. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10507:synchronous-file-operations","reason":"These imports support audio generation, temporary files, and the application speech cache. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10682:synchronous-file-operations","reason":"This reads the WAV produced by the local say process inside its temporary working directory. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10698:synchronous-file-operations","reason":"This reads the WAV produced by espeak-ng inside its temporary working directory. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10765:synchronous-file-operations","reason":"Narration is written to a temporary text file and passed to speech tools as a filename, not a shell command. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/am.mjs:10850:synchronous-file-operations","reason":"This reads an application speech-cache entry and rejects empty or invalid-length PCM data. Synchronous execution itself is not a security vulnerability.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:scripts/am.mjs:27:template-literal-with-command-substitution","reason":"The matched dollars or backticks belong to math parsing, JavaScript strings, or comments. No shell evaluates this text.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:scripts/am.mjs:4164:template-literal-with-command-substitution","reason":"The matched dollars or backticks belong to math parsing, JavaScript strings, or comments. No shell evaluates this text.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:11277:websocket-connection","reason":"The WebSocket URL comes from the freshly launched headless browser DevTools endpoint. It controls local video export rather than an external command server.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:6978:network-reconnaissance","reason":"The text is a flow-diagram example showing a cache miss. No network discovery or reconnaissance command runs.","verdict":"false_positive","confidence":1},{"id":"blocker:scripts/am.mjs:6342:object-assign-review-for-prototype-pollution","reason":"The layout library copies internal ordering data or allowlisted graph attributes into fresh objects. This match does not show attacker-controlled prototype properties being assigned.","verdict":"false_positive","confidence":0.94},{"id":"blocker:scripts/am.mjs:6778:object-assign-review-for-prototype-pollution","reason":"The layout library copies internal ordering data or allowlisted graph attributes into fresh objects. This match does not show attacker-controlled prototype properties being assigned.","verdict":"false_positive","confidence":0.94},{"id":"blocker:scripts/am.mjs:6787:object-assign-review-for-prototype-pollution","reason":"The layout library copies internal ordering data or allowlisted graph attributes into fresh objects. This match does not show attacker-controlled prototype properties being assigned.","verdict":"false_positive","confidence":0.94},{"id":"blocker:licenses/OFL-Bangers.txt:81:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:27:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:53:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:56:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:62:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:65:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:82:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:94:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:95:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:99:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:103:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:105:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:122:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:124:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:128:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:133:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:139:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:142:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:146:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:152:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:scripts/am.mjs:157:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:148:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:168:system-reconnaissance","reason":"The match is license prose, layout CSS, math-rendering code, or diagram documentation. It does not run a system reconnaissance command.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:27:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:639:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:2076:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:3939:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:3944:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4431:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4455:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4489:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4499:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4500:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4559:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4654:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4656:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4666:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4671:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4675:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4709:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4736:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4785:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:4829:array-join-empty-string","reason":"The join combines rendered markup, text fragments, or normalized color digits. It does not reconstruct and execute concealed commands.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1356:base64-encode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:9566:base64-encode","reason":"Base64 carries embedded audio, video chunks, screenshot frames, or a SHA-256 digest. Decoded bytes are media or hashes, never passed to code execution.","verdict":"false_positive","confidence":0.98},{"id":"obfuscation:scripts/am.mjs:27:unicode-code-point-escape","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:27:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:37:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:47:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:71:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:79:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:97:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:114:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:234:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:241:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:251:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:262:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:303:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:328:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:342:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:377:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:428:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:504:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:550:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:639:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:1117:unicode-escape-sequence","reason":"These escapes represent display characters, parser character ranges, comments, or image signatures. The cited usage does not decode a hidden program.","verdict":"false_positive","confidence":0.97},{"id":"obfuscation:scripts/am.mjs:11918:url-decode","reason":"URL decoding reads a requested page filename. validFileName rejects traversal and tokenMatches authenticates the page before it is read.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/am.mjs:9909:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:9912:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:9952:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:9976:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:9982:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:10040:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:10104:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:11084:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:11149:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:11222:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:11391:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:11605:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"env_access:scripts/am.mjs:12191:environment-variable-object","reason":"The environment supplies application configuration or is inherited by known local subprocesses. No environment dump or credential collection appears at this location.","verdict":"false_positive","confidence":0.94},{"id":"network:scripts/am.mjs:27:fetch-api-call","reason":"Temml fetch is an internal lexer method that returns tokens. It is not the network Fetch API.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:10576:fetch-api-call","reason":"This sends narration to the documented ElevenLabs HTTPS speech endpoint. It is the intended provider request, not an unrelated exfiltration endpoint.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:10618:fetch-api-call","reason":"localSpeech posts narration and optional Bearer credentials to AM_TTS_URL without transport restrictions. A remote HTTP endpoint exposes this data in transit.","verdict":"confirmed","confidence":0.96},{"id":"network:scripts/am.mjs:2:hardcoded-url","reason":"The URL is a source attribution comment, not a network request.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:1116:hardcoded-url","reason":"Font copyright URLs appear beside embedded font data, not as upload targets.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:2112:hardcoded-url","reason":"This font copyright notice is attribution text, not an executable request.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:3761:hardcoded-url","reason":"The Markdown parser error message links to its issue tracker.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:9743:hardcoded-url","reason":"This constructs the project attribution link shown on generated pages.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:9772:hardcoded-url","reason":"The release URL is a user-clicked project link with rel=noopener.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:10019:hardcoded-url","reason":"This is the intended HTTPS theme catalog; downloads have size, format, integrity, and external-resource checks.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:10573:hardcoded-url","reason":"The HTTPS endpoint is the documented ElevenLabs speech provider, not an unrelated upload destination.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:10594:hardcoded-url","reason":"This error message gives a loopback speech-server example; it does not make a request.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11328:hardcoded-url","reason":"The background check downloads project package metadata over HTTPS; it does not send pages or install updates.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11329:hardcoded-url","reason":"The background check downloads project release highlights over HTTPS; it does not upload user content.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11609:hardcoded-url","reason":"The Tailscale download URL is an installation hint in an error message.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11703:hardcoded-url","reason":"The default page link uses the local loopback server and a page-specific HMAC token.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11960:hardcoded-url","reason":"The error reports an already-running application page server.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11966:hardcoded-url","reason":"The bind-error message offers local port and Tailscale troubleshooting guidance.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:11971:hardcoded-url","reason":"This constructs links for the explicitly configured server mode; default mode uses loopback and page capability tokens.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:12012:hardcoded-url","reason":"This prints addresses after the user explicitly selected LAN sharing; it is not an unsolicited upload.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:12014:hardcoded-url","reason":"This prints the loopback server address for user navigation.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:12181:hardcoded-url","reason":"This help text demonstrates a loopback speech endpoint.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/am.mjs:12297:hardcoded-url","reason":"This error links to the official Node.js site for a required runtime upgrade.","verdict":"false_positive","confidence":0.97},{"id":"network:SKILL.md:187:hardcoded-url","reason":"The link cites technical-writing guidance. It is documentation, not a request to upload data.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:199:hardcoded-url","reason":"The link cites technical-writing guidance. It is documentation, not a request to upload data.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/am.mjs:10649:http-client-library","reason":"request(text2) invokes localSpeech against the configured endpoint. Its URL lacks HTTPS or loopback enforcement, so narration can cross an unencrypted remote connection.","verdict":"confirmed","confidence":0.96},{"id":"filesystem:scripts/am.mjs:9179:standard-device-file-access","reason":"The diff parser recognizes /dev/null as a filename sentinel and returns an empty label. It does not open the device.","verdict":"false_positive","confidence":1},{"id":"filesystem:scripts/am.mjs:10507:temp-file-creation","reason":"mkdtemp creates isolated working directories for speech audio or browser export. The workflow removes these directories after use.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:10769:temp-file-creation","reason":"mkdtemp creates isolated working directories for speech audio or browser export. The workflow removes these directories after use.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:11057:temp-file-creation","reason":"mkdtemp creates isolated working directories for speech audio or browser export. The workflow removes these directories after use.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:scripts/am.mjs:11093:temp-file-creation","reason":"mkdtemp creates isolated working directories for speech audio or browser export. The workflow removes these directories after use.","verdict":"false_positive","confidence":0.98}],"semantic_findings":[{"title":"Cloud Narration Selected Without Provider-Specific Consent","severity":"medium","locations":[{"file":"references/video.md","line_end":34,"line_start":34},{"file":"scripts/am.mjs","line_end":10562,"line_start":10545}],"confidence":0.96,"description":"Video narration defaults to auto and selects ElevenLabs whenever ELEVENLABS_API_KEY exists. A video request can therefore send private narration externally without a provider-specific choice.","confidence_reasoning":"The instructions require a video request but no cloud-provider confirmation. pickProvider chooses ElevenLabs from an ambient key before considering system speech."}],"subject_marketplace_commit_sha":"747cc4a202a58444d48f42de73cfce79288af501","subject_content_hash":"02aa9484b130d0d1592cfab38fb145cd59a0aea8ae9435aa144125dcd389e1a4","subject_tree_hash":"5c89427a7b18ae2b2e07b01a09c3308414a79e555890d7e609da295e0a5e0084","subject_plugin_path":"skills/qingyuna/answer-me-with-html","audit_payload_hash":"23a2d3611e26095cf926e47989969a87","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"747cc4a202a58444d48f42de73cfce79288af501","contentHash":"02aa9484b130d0d1592cfab38fb145cd59a0aea8ae9435aa144125dcd389e1a4","treeHash":"5c89427a7b18ae2b2e07b01a09c3308414a79e555890d7e609da295e0a5e0084","pluginPath":"skills/qingyuna/answer-me-with-html","auditPayloadHash":"23a2d3611e26095cf926e47989969a87"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/qingyuna-answer-me-with-html/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":2,"capabilityReviewCount":4,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}