{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-074bc406991f239a", "name": "Icon-only button without accessible name \u2014 components/PluginsConfig.tsx:751", "shortDescription": {"text": "Icon-only button without accessible name \u2014 components/PluginsConfig.tsx:751"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 0.85}}, {"id": "scanner-74da7872fbfc33b7", "name": "Icon-only button without accessible name \u2014 components/ModelsConfig.tsx:1466", "shortDescription": {"text": "Icon-only button without accessible name \u2014 components/ModelsConfig.tsx:1466"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 0.85}}, {"id": "scanner-cec03ccf48034e29", "name": "Icon-only button without accessible name \u2014 components/SkillsConfig.tsx:905", "shortDescription": {"text": "Icon-only button without accessible name \u2014 components/SkillsConfig.tsx:905"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 0.85}}, {"id": "scanner-9aeffe62e09ab7b3", "name": "react insecure request \u2014 lib/http-dispatcher.test.mjs:71", "shortDescription": {"text": "react insecure request \u2014 lib/http-dispatcher.test.mjs:71"}, "fullDescription": {"text": "Unencrypted request over HTTP detected.\n\nRule: typescript.react.security.react-insecure-request.react-insecure-request\nSeverity: ERROR\nOWASP: A03:2017 - Sensitive Data Exposure, A02:2021 - Cryptographic Failures, A04:2025 - Cryptographic Failures\nCWE: CWE-319: Cleartext Transmission of Sensitive Information\nCategory: security\nContext: production"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.75}}, {"id": "scanner-e83532792afd4290", "name": "CVE-2026-44288: @protobufjs/utf8 1.1.0 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44288: @protobufjs/utf8 1.1.0 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Security control bypass due to improper handling of overlong UTF-8 sequences\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs includes a minimal UTF-8 decoder that accepted overlong UTF-8 byte sequences and decoded them to their canonical characters instead of replacing them. An attacker who can provide protobuf binary data decoded through the affected UTF-8 path may be able to bypass application-level checks that inspect raw bytes before protobuf string decoding. For example, bytes that do not contain certain \n\nPackage: @protobufjs/utf8\nInstalled: 1.1.0\nFixed in: 1.1.1\nSeverity: MEDIUM\nFix: Upgrade @protobufjs/utf8 to 1.1.1"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23d137638b1c2221", "name": "CVE-2026-13149: brace-expansion 1.1.12 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-13149: brace-expansion 1.1.12 \u2014 bun.lock"}, "fullDescription": {"text": "brace-expansion: Brace-expansion: Denial of Service due to exponential-time complexity\n\nbrace-expansion through 5.0.6 is vulnerable to denial of service. The expand() function exhibits exponential-time complexity in the number of consecutive non-expanding '{}' brace groups. An attacker who passes a crafted string to expand(), directly or transitively, can cause significant CPU consumption and event-loop blocking. The max option does not mitigate this, as it bounds the output size rather than the recursion work.\n\nPackage: brace-expansion\nInstalled: 1.1.12\nFixed in: 5.0.7, 1.1.16, 2.1.2\nSeverity: HIGH\nFix: Upgrade brace-expansion to 5.0.7, 1.1.16, 2.1.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92e4bc86e262ea92", "name": "CVE-2026-33750: brace-expansion 1.1.12 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-33750: brace-expansion 1.1.12 \u2014 bun.lock"}, "fullDescription": {"text": "brace-expansion: brace-expansion: Denial of Service via zero step value in brace pattern\n\nThe brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., `{1..2..0}`) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to `expand()` to ensure a step value of `0` is not used.\n\nPackage: brace-expansion\nInstalled: 1.1.12\nFixed in: 5.0.5, 3.0.2, 2.0.3, 1.1.13\nSeverity: MEDIUM\nFix: Upgrade brace-expansion to 5.0.5, 3.0.2, 2.0.3, 1.1.13"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6654f721bb3e6588", "name": "CVE-2026-64641: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64641: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Denial of Service in App Router using Server Actions\n\n## Impact\n\nCrafted requests targeting Next.js applications using App Router with at least one Server Action can lead to excessive CPU usage blocking processing of further requests in the same process.\n\n## Workarounds\n\nNo workaround exists besides upgrading. Applications using Pages Router or not using Server Actions are not vulnerable.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bab2e0622f16d47", "name": "CVE-2026-64642: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64642: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Middleware / Proxy bypass in App Router applications using Turbopack and single locale\n\n## Impact\n\nCrafted requests targeting Next.js applications using App Router built with Turbopack and a **single** entry in `config.i18n.locales` can bypass middleware/proxy based authentication.\n\n## Workarounds\n\nIf you cannot upgrade immediately, enforce authorization in the page's server-side data path instead of relying solely on middleware.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6122d5492e99ad7", "name": "CVE-2026-64645: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64645: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Server-Side Request Forgery in rewrites via attacker-controlled destination hostname\n\n## Impact\n\nA `rewrites()` or `redirects()` rule that builds its external destination hostname from request-controlled input can be pointed at an arbitrary hostname, regardless of the rule's\u00a0hostname suffix. For a rewrite, Next.js proxies the request to that arbitrary host and serves the response from the application's origin, leading to Server-Side Request forgery. A `redirects()` rule configured this way is vulnerable to an Open Redirect.\n\nThis affects any destination that puts a dynamic segmen\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce977812d5d389f8", "name": "CVE-2026-64649: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64649: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Server-Side Request Forgery in Server Actions on custom servers\n\n## Impact\n\nWhen a Server Action forwards or redirects a request, an attacker can cause the server to send that outbound request to a malicious host (Server-Side Request Forgery). This requires the attacker's request to control Host-associated headers. In some configurations, it's also possible to obtain internal values that weaken middleware/proxy authorization.\n\nApplications that use Server Actions are affected when the incoming host header is not fixed to a trusted value. This typically occurs\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b195181a640f2fe2", "name": "CVE-2026-64643: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64643: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Unauthenticated disclosure of internal Server Function endpoints\n\n## Impact\n\nIn Next.js applications using App Router, Server Actions (`use server`) or `use cache` endpoints can be disclosed bypassing any authentication on the pages where these endpoints are usually used.\n\nServer Action IDs can be disclosed to unauthenticated users via publicly served client artifacts (for example, static chunks containing action references).\n\nAffected users are applications using App Router + Server Actions.  \n\nBy itself, this disclosure is typically a recon/enumeration primi\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fbc16999fe8d1c8", "name": "CVE-2026-64644: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64644: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Denial of Service in the Image Optimization API using SVGs\n\n### Impact\n\nWhen self-hosting Next.js with the default image loader, the Image Optimization API can optimize remotely hosted images if configured (not enabled by default). If those images contain malicious content, they can cause CPU exhaustion in  `/_next/image` endpoints.\n\n- If you are using `config.images.remotePatterns`, only the patterns in that array are impacted.\n- If you are using `config.images.unoptimized: true`, you are NOT impacted.\n- If you are using `config.images.loader: 'custom'`\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7efc48095dfdcb72", "name": "CVE-2026-64646: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64646: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Unbounded Server Action payload in Edge runtime\n\n## Impact\n\nRequests targeting Next.js applications using App Router with at least one Server Action can lead to excessive memory consumption if that Server Actions uses the Edge runtime\n\n## Workarounds\n\nIf you cannot upgrade, ensure your hosting provider limits the request's body size. 5 MiB should be allowed at max by your hosting provider.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20eca23b9a121d3e", "name": "CVE-2026-64647: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64647: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Cache confusion of response bodies for requests with bodies containing invalid UTF-8 byte sequences\n\n## Impact\n\nA server-side `fetch` with a request body may return a cached **response** body from a different request to the same URL but different body. Confidential data in the `POST`'s **response** body would then leak to unauthorized requests. Though the request itself will not be deduped.\n\nThis is only an issue when receiving request bodies with a content type charset other than UTF-8. For example, the UTF-16 byte sequences for `\uc083\uc083` and `\uc104\uc104` in the request body would share the same cache.\n\n##\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a54cc4d58cfd1a4a", "name": "CVE-2026-64648: next 16.2.9 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-64648: next 16.2.9 \u2014 bun.lock"}, "fullDescription": {"text": "Next.js: Cache confusion of response bodies for requests with bodies\n\n## Impact\n\nA server-side `fetch` with a request body may return a cached **response** body from a different request to the same URL but different body. Confidential data in the `POST`'s **response** body would then leak to unauthorized requests. Though the request itself will not be deduped.\n\nThis only applies to `fetch` calls with a request that has a different init than the one passed to `fetch`.\nSafe: `fetch(new Request(init), init)`\nUnsafe: `fetch(new Request(init), aDifferentInit)`\n\n## Work\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7c62192633e4a60", "name": "CVE-2026-41305: postcss 8.5.8 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-41305: postcss 8.5.8 \u2014 bun.lock"}, "fullDescription": {"text": "postcss: PostCSS: Cross-Site Scripting (XSS) via improper escaping of style closing tags\n\nPostCSS takes a CSS file and provides an API to analyze and modify its rules by transforming the rules into an Abstract Syntax Tree. Versions prior to 8.5.10 do not escape `</style>` sequences when stringifying CSS ASTs. When user-submitted CSS is parsed and re-stringified for embedding in HTML `<style>` tags, `</style>` in CSS values breaks out of the style context, enabling XSS. Version 8.5.10 fixes the issue.\n\nPackage: postcss\nInstalled: 8.5.8\nFixed in: 8.5.10\nSeverity: MEDIUM\nFix: Upgrade postcss to 8.5.10"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c941e96e5fb02bb4", "name": "CVE-2026-41242: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-41242: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Arbitrary code execution via injected protobuf definition type fields\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. In versions prior to 8.0.1 and 7.5.5, attackers can inject arbitrary code in the \"type\" fields of protobuf definitions, which will then execute during object decoding using that definition. Versions 8.0.1 and 7.5.5 patch the issue.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 8.0.1, 7.5.5\nSeverity: CRITICAL\nFix: Upgrade protobufjs to 8.0.1, 7.5.5"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1ce9c3eb11295eda", "name": "CVE-2026-44289: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44289: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via uncontrolled recursion in protobuf decoding\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs could recurse without a depth limit while decoding nested protobuf data. This affected both skipping unknown group fields and generated decoding of nested message fields. A crafted protobuf binary payload could cause the JavaScript call stack to be exhausted during decoding. This vulnerability is fixed in 7.5.6 and 8.0.2.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: HIGH\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6e3fe7eddfc8991", "name": "CVE-2026-44290: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44290: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via crafted schema\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs allowed certain schema option paths to traverse through inherited object properties while applying options. A crafted protobuf schema or JSON descriptor could cause option handling to write to properties on global JavaScript constructors, corrupting process-wide built-in functionality. This vulnerability is fixed in 7.5.6 and 8.0.2.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: HIGH\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54675f9428c574e1", "name": "CVE-2026-44291: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44291: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Arbitrary Code Execution via prototype pollution\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs used plain objects with inherited prototypes for internal type lookup tables used by generated encode and decode functions. If Object.prototype had already been polluted, those lookup tables could resolve attacker-controlled inherited properties as valid protobuf type information. This could cause attacker-controlled strings to be emitted into generated JavaScript code. This vulnerabilit\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: HIGH\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60972e811e329c95", "name": "CVE-2026-44293: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44293: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Arbitrary code execution due to unsafe expression generation from crafted protobuf descriptors\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs generated JavaScript for toObject conversion could include an unsafe expression derived from a schema-controlled bytes field default value. A crafted descriptor with a non-string default value for a bytes field could cause attacker-controlled code to be emitted into the generated conversion function. This vulnerability is fixed in 7.5.6 and 8.0.2.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: HIGH\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4da92d5bca5c6b4d", "name": "CVE-2026-48712: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-48712: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via uncontrolled recursion with crafted protobuf payload\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.6.1 and 8.4.1, protobufjs could recurse without a depth limit while converting decoded messages to plain objects or JSON. This affected generated toObject() conversion and the custom google.protobuf.Any JSON conversion path. A crafted protobuf binary payload containing deeply nested Any values could cause the JavaScript call stack to be exhausted during conversion to JSON. This vulnerability is fixed in 7.6.1 and\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.6.1, 8.4.1\nSeverity: HIGH\nFix: Upgrade protobufjs to 7.6.1, 8.4.1"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5de07f49a87ca5df", "name": "CVE-2026-44288: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44288: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Security control bypass due to improper handling of overlong UTF-8 sequences\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs includes a minimal UTF-8 decoder that accepted overlong UTF-8 byte sequences and decoded them to their canonical characters instead of replacing them. An attacker who can provide protobuf binary data decoded through the affected UTF-8 path may be able to bypass application-level checks that inspect raw bytes before protobuf string decoding. For example, bytes that do not contain certain \n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d3bc2d0cab2486b", "name": "CVE-2026-44292: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44292: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Data integrity impact due to prototype pollution\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs generated message constructors copied enumerable properties from a provided properties object without filtering the __proto__ key. If an application constructed a message from an attacker-controlled plain object, an own enumerable __proto__ property could alter the prototype of that individual message instance. This vulnerability is fixed in 7.5.6 and 8.0.2.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e87bd8c6b496f1cf", "name": "CVE-2026-44294: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-44294: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service due to unescaped control characters in field names\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.6 and 8.0.2, protobufjs generated JavaScript property accessors from schema-controlled field and oneof names. Certain control characters in field names were not escaped before being embedded into generated function bodies. A crafted schema or JSON descriptor could therefore cause generated encode, decode, verify, or conversion functions to fail during compilation. This vulnerability is fixed in 7.5.6 and 8.0.2.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.6, 8.0.2\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.5.6, 8.0.2"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73298d7424f24f84", "name": "CVE-2026-45740: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-45740: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via crafted JSON descriptors\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.5.8 and 8.2.0, protobufjs could recurse without a depth limit while expanding nested JSON descriptors through Root.fromJSON() and Namespace.addJSON(). A crafted JSON descriptor with deeply nested namespace definitions could cause the JavaScript call stack to be exhausted during descriptor loading. This vulnerability is fixed in 7.5.8 and 8.2.0.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.5.8, 8.2.0\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.5.8, 8.2.0"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ddea26019ce2745", "name": "CVE-2026-54269: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-54269: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs-cli: protobufjs: Denial of Service due to name collision with runtime helpers\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 8.6.0 and 7.6.3, protobufjs accepted certain schema-derived names that could collide with properties used by protobufjs runtime helpers. The known affected names are fields named hasOwnProperty, field or oneof names such as $type when loaded through protobufjs JSON/reflection descriptors, and service methods whose generated helper name is rpcCall. When affected message or service types were used, protobufjs could r\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.6.3, 8.6.0\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.6.3, 8.6.0"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a25d01f9dbc69b84", "name": "CVE-2026-59877: protobufjs 7.5.4 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-59877: protobufjs 7.5.4 \u2014 bun.lock"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via crafted .proto schema\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.6.5 and 8.6.6, protobufjs parsed option names by advancing through schema tokens until reaching an = token without checking for end of input, so a crafted .proto schema that opens an option declaration and ends prematurely can cause parse, Root.load, or Root.loadSync to loop indefinitely. This issue is fixed in versions 7.6.5 and 8.6.6.\n\nPackage: protobufjs\nInstalled: 7.5.4\nFixed in: 7.6.5, 8.6.6\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.6.5, 8.6.6"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01beebbe89c64b20", "name": "CVE-2026-48779: ws 8.19.0 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-48779: ws 8.19.0 \u2014 bun.lock"}, "fullDescription": {"text": "ws: ws: Denial of Service via memory exhaustion from small WebSocket fragments\n\nws is an open source WebSocket client and server for Node.js. All versions from 1.1.0 up to (but not including) 5.2.5, from 6.0.0 up to 6.2.4, from 7.0.0 up to 7.5.11, and from 8.0.0 up to 8.21.0 are affected by a memory exhaustion DoS vulnerability. A peer can send a high volume of exceptionally small fragments and data chunks, with modest network traffic, to force the remote peer into allocating and holding structural wrappers that consume far more memory than the default documented message-si\n\nPackage: ws\nInstalled: 8.19.0\nFixed in: 5.2.5, 6.2.4, 7.5.11, 8.21.0\nSeverity: HIGH\nFix: Upgrade ws to 5.2.5, 6.2.4, 7.5.11, 8.21.0"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc65c90399f372d1", "name": "CVE-2026-45736: ws 8.19.0 \u2014 bun.lock", "shortDescription": {"text": "CVE-2026-45736: ws 8.19.0 \u2014 bun.lock"}, "fullDescription": {"text": "ws: ws: Uninitialized memory disclosure via `websocket.close()` with `TypedArray`\n\nws is an open source WebSocket client and server for Node.js. Prior to 8.20.1, the websocket.close() implementation is vulnerable to uninitialized memory disclosure when a TypedArray is passed as the reason argument. This vulnerability is fixed in 8.20.1.\n\nPackage: ws\nInstalled: 8.19.0\nFixed in: 8.20.1\nSeverity: MEDIUM\nFix: Upgrade ws to 8.20.1"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-356a24a248fb9f2a", "name": "CVE-2026-64641: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64641: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Denial of Service in App Router using Server Actions\n\n## Impact\n\nCrafted requests targeting Next.js applications using App Router with at least one Server Action can lead to excessive CPU usage blocking processing of further requests in the same process.\n\n## Workarounds\n\nNo workaround exists besides upgrading. Applications using Pages Router or not using Server Actions are not vulnerable.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94d46e2a23b01433", "name": "CVE-2026-64642: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64642: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Middleware / Proxy bypass in App Router applications using Turbopack and single locale\n\n## Impact\n\nCrafted requests targeting Next.js applications using App Router built with Turbopack and a **single** entry in `config.i18n.locales` can bypass middleware/proxy based authentication.\n\n## Workarounds\n\nIf you cannot upgrade immediately, enforce authorization in the page's server-side data path instead of relying solely on middleware.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3164145f97e27a78", "name": "CVE-2026-64645: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64645: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Server-Side Request Forgery in rewrites via attacker-controlled destination hostname\n\n## Impact\n\nA `rewrites()` or `redirects()` rule that builds its external destination hostname from request-controlled input can be pointed at an arbitrary hostname, regardless of the rule's\u00a0hostname suffix. For a rewrite, Next.js proxies the request to that arbitrary host and serves the response from the application's origin, leading to Server-Side Request forgery. A `redirects()` rule configured this way is vulnerable to an Open Redirect.\n\nThis affects any destination that puts a dynamic segmen\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8b80a03bfa649e4", "name": "CVE-2026-64649: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64649: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Server-Side Request Forgery in Server Actions on custom servers\n\n## Impact\n\nWhen a Server Action forwards or redirects a request, an attacker can cause the server to send that outbound request to a malicious host (Server-Side Request Forgery). This requires the attacker's request to control Host-associated headers. In some configurations, it's also possible to obtain internal values that weaken middleware/proxy authorization.\n\nApplications that use Server Actions are affected when the incoming host header is not fixed to a trusted value. This typically occurs\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: HIGH\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0afa881f61a69309", "name": "CVE-2026-64643: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64643: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Unauthenticated disclosure of internal Server Function endpoints\n\n## Impact\n\nIn Next.js applications using App Router, Server Actions (`use server`) or `use cache` endpoints can be disclosed bypassing any authentication on the pages where these endpoints are usually used.\n\nServer Action IDs can be disclosed to unauthenticated users via publicly served client artifacts (for example, static chunks containing action references).\n\nAffected users are applications using App Router + Server Actions.  \n\nBy itself, this disclosure is typically a recon/enumeration primi\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5c93a93a1ebc294", "name": "CVE-2026-64644: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64644: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Denial of Service in the Image Optimization API using SVGs\n\n### Impact\n\nWhen self-hosting Next.js with the default image loader, the Image Optimization API can optimize remotely hosted images if configured (not enabled by default). If those images contain malicious content, they can cause CPU exhaustion in  `/_next/image` endpoints.\n\n- If you are using `config.images.remotePatterns`, only the patterns in that array are impacted.\n- If you are using `config.images.unoptimized: true`, you are NOT impacted.\n- If you are using `config.images.loader: 'custom'`\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a6547dbddf3aa21", "name": "CVE-2026-64646: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64646: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Unbounded Server Action payload in Edge runtime\n\n## Impact\n\nRequests targeting Next.js applications using App Router with at least one Server Action can lead to excessive memory consumption if that Server Actions uses the Edge runtime\n\n## Workarounds\n\nIf you cannot upgrade, ensure your hosting provider limits the request's body size. 5 MiB should be allowed at max by your hosting provider.\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-837a3a4ee4df6ac0", "name": "CVE-2026-64647: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64647: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Cache confusion of response bodies for requests with bodies containing invalid UTF-8 byte sequences\n\n## Impact\n\nA server-side `fetch` with a request body may return a cached **response** body from a different request to the same URL but different body. Confidential data in the `POST`'s **response** body would then leak to unauthorized requests. Though the request itself will not be deduped.\n\nThis is only an issue when receiving request bodies with a content type charset other than UTF-8. For example, the UTF-16 byte sequences for `\uc083\uc083` and `\uc104\uc104` in the request body would share the same cache.\n\n##\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aaec1bb3a35bd14d", "name": "CVE-2026-64648: next 16.2.9 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-64648: next 16.2.9 \u2014 package-lock.json"}, "fullDescription": {"text": "Next.js: Cache confusion of response bodies for requests with bodies\n\n## Impact\n\nA server-side `fetch` with a request body may return a cached **response** body from a different request to the same URL but different body. Confidential data in the `POST`'s **response** body would then leak to unauthorized requests. Though the request itself will not be deduped.\n\nThis only applies to `fetch` calls with a request that has a different init than the one passed to `fetch`.\nSafe: `fetch(new Request(init), init)`\nUnsafe: `fetch(new Request(init), aDifferentInit)`\n\n## Work\n\nPackage: next\nInstalled: 16.2.9\nFixed in: 15.5.21, 16.2.11\nSeverity: MEDIUM\nFix: Upgrade next to 15.5.21, 16.2.11"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a03a7023015b81a9", "name": "CVE-2026-41305: postcss 8.4.31 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-41305: postcss 8.4.31 \u2014 package-lock.json"}, "fullDescription": {"text": "postcss: PostCSS: Cross-Site Scripting (XSS) via improper escaping of style closing tags\n\nPostCSS takes a CSS file and provides an API to analyze and modify its rules by transforming the rules into an Abstract Syntax Tree. Versions prior to 8.5.10 do not escape `</style>` sequences when stringifying CSS ASTs. When user-submitted CSS is parsed and re-stringified for embedding in HTML `<style>` tags, `</style>` in CSS values breaks out of the style context, enabling XSS. Version 8.5.10 fixes the issue.\n\nPackage: postcss\nInstalled: 8.4.31\nFixed in: 8.5.10\nSeverity: MEDIUM\nFix: Upgrade postcss to 8.5.10"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-382e4c9b06555799", "name": "CVE-2026-59877: protobufjs 7.6.4 \u2014 package-lock.json", "shortDescription": {"text": "CVE-2026-59877: protobufjs 7.6.4 \u2014 package-lock.json"}, "fullDescription": {"text": "protobufjs: protobufjs: Denial of Service via crafted .proto schema\n\nprotobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 7.6.5 and 8.6.6, protobufjs parsed option names by advancing through schema tokens until reaching an = token without checking for end of input, so a crafted .proto schema that opens an option declaration and ends prematurely can cause parse, Root.load, or Root.loadSync to loop indefinitely. This issue is fixed in versions 7.6.5 and 8.6.6.\n\nPackage: protobufjs\nInstalled: 7.6.4\nFixed in: 7.6.5, 8.6.6\nSeverity: MEDIUM\nFix: Upgrade protobufjs to 7.6.5, 8.6.6"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-696edaf1bfda3eab", "name": "GHSA-f88m-g3jw-g9cj: sharp 0.34.5 \u2014 package-lock.json", "shortDescription": {"text": "GHSA-f88m-g3jw-g9cj: sharp 0.34.5 \u2014 package-lock.json"}, "fullDescription": {"text": "sharp inherited vulnerabilities in libvips: CVE-2026-33327, CVE-2026-33328, CVE-2026-35590, CVE-2026-35591\n\n### Impact\n\nA number of vulnerabilities, two rated as \"High\" severity using CVSSv4, have been discovered and fixed in the upstream libvips dependency.\n\nThose processing untrusted input with versions of sharp prior to 0.35.0 are affected.\n\n### Patches\n\n#### Using prebuilt binaries provided by sharp?\n\nMost people rely on the prebuilt binaries provided by sharp.\n\nPlease upgrade sharp to the latest version, currently 0.35.3, which provides libvips 8.18.3.\n\n#### Using a globally-installed libvips?\n\nP\n\nPackage: sharp\nInstalled: 0.34.5\nFixed in: 0.35.0\nSeverity: HIGH\nFix: Upgrade sharp to 0.35.0"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f2f8803197dda224", "name": "SkillSpector E1 (data-exfil) in components/ModelsConfig.tsx", "shortDescription": {"text": "SkillSpector E1 (data-exfil) in components/ModelsConfig.tsx"}, "fullDescription": {"text": "https://api.example.com/\n\nData is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.\n\nSkill: unknown\nRule: E1  Category: data-exfil\nSeverity: MEDIUM  Confidence: 0.50\n\nRemediation: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.5}}, {"id": "scanner-67c1dc86af8cf275", "name": "SkillSpector E1 (data-exfil) in lib/skill-updates.ts", "shortDescription": {"text": "SkillSpector E1 (data-exfil) in lib/skill-updates.ts"}, "fullDescription": {"text": "https://api.github.com/\n\nData is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.\n\nSkill: unknown\nRule: E1  Category: data-exfil\nSeverity: MEDIUM  Confidence: 0.50\n\nRemediation: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.5}}, {"id": "scanner-f3321f3de07fb846", "name": "SkillSpector EA3 (excessive-agency) in LICENSE", "shortDescription": {"text": "SkillSpector EA3 (excessive-agency) in LICENSE"}, "fullDescription": {"text": "NOT LIMITED TO\n\nSkill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.\n\nSkill: unknown\nRule: EA3  Category: excessive-agency\nSeverity: LOW  Confidence: 0.70\n\nRemediation: Limit the skill's scope to its documented purpose. Remove instructions that enable the agent to perform actions outside its stated functionality."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 0.7}}, {"id": "scanner-8df2a9a34ca07e8a", "name": "SkillSpector EA1 (excessive-agency) in lib/session-title.ts", "shortDescription": {"text": "SkillSpector EA1 (excessive-agency) in lib/session-title.ts"}, "fullDescription": {"text": "call any tools\n\nSkill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.\n\nSkill: unknown\nRule: EA1  Category: excessive-agency\nSeverity: MEDIUM  Confidence: 0.80\n\nRemediation: Restrict tool access to only the tools required for the skill's stated purpose. Use an explicit allowlist rather than granting blanket access."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.8}}, {"id": "scanner-82c0dea0704877ea", "name": "SkillSpector MP3 (memory-poisoning) in components/ModelsConfig.tsx", "shortDescription": {"text": "SkillSpector MP3 (memory-poisoning) in components/ModelsConfig.tsx"}, "fullDescription": {"text": "Reset state\n\nSkill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.\n\nSkill: unknown\nRule: MP3  Category: memory-poisoning\nSeverity: HIGH  Confidence: 0.80\n\nRemediation: Protect agent memory and state from modification by untrusted content. Use read-only memory for critical instructions and validate all state changes."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.8}}, {"id": "scanner-a1c8703dd1d3654e", "name": "SkillSpector OH1 (output-handling) in app/layout.tsx", "shortDescription": {"text": "SkillSpector OH1 (output-handling) in app/layout.tsx"}, "fullDescription": {"text": "dangerouslySetInnerHTML={\n\nModel output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.\n\nSkill: unknown\nRule: OH1  Category: output-handling\nSeverity: HIGH  Confidence: 0.65\n\nRemediation: Validate and sanitize all model output before using it in downstream contexts. Use parameterized queries for SQL, shell quoting for commands, and HTML encoding for web output."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.65}}, {"id": "scanner-40de28a909a577a2", "name": "SkillSpector OH1 (output-handling) in components/MarkdownBody.tsx", "shortDescription": {"text": "SkillSpector OH1 (output-handling) in components/MarkdownBody.tsx"}, "fullDescription": {"text": "dangerouslySetInnerHTML={\n\nModel output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.\n\nSkill: unknown\nRule: OH1  Category: output-handling\nSeverity: HIGH  Confidence: 0.65\n\nRemediation: Validate and sanitize all model output before using it in downstream contexts. Use parameterized queries for SQL, shell quoting for commands, and HTML encoding for web output."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.65}}, {"id": "scanner-5d36a8a26e369a65", "name": "SkillSpector PE3 (priv-esc) in app/api/files/[...path]/route.ts", "shortDescription": {"text": "SkillSpector PE3 (priv-esc) in app/api/files/[...path]/route.ts"}, "fullDescription": {"text": ".env\"\n\nCode accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.\n\nSkill: unknown\nRule: PE3  Category: priv-esc\nSeverity: HIGH  Confidence: 0.60\n\nRemediation: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.6}}, {"id": "scanner-493b846591b7d4f3", "name": "SkillSpector PE3 (priv-esc) in bin/pi-web.js", "shortDescription": {"text": "SkillSpector PE3 (priv-esc) in bin/pi-web.js"}, "fullDescription": {"text": ".env\n\nCode accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.\n\nSkill: unknown\nRule: PE3  Category: priv-esc\nSeverity: HIGH  Confidence: 0.60\n\nRemediation: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.6}}, {"id": "scanner-7612a62a91c35b95", "name": "SkillSpector PE3 (priv-esc) in components/FileIcons.tsx", "shortDescription": {"text": "SkillSpector PE3 (priv-esc) in components/FileIcons.tsx"}, "fullDescription": {"text": ".env\"\n\nCode accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.\n\nSkill: unknown\nRule: PE3  Category: priv-esc\nSeverity: HIGH  Confidence: 0.60\n\nRemediation: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.6}}, {"id": "scanner-c2c7e069a36ad737", "name": "SkillSpector PE3 (priv-esc) in lib/file-upload.test.mjs", "shortDescription": {"text": "SkillSpector PE3 (priv-esc) in lib/file-upload.test.mjs"}, "fullDescription": {"text": "secret.txt\n\nCode accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.\n\nSkill: unknown\nRule: PE3  Category: priv-esc\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-08bcd5c6d9372ce7", "name": "SkillSpector RA2 (rogue-agent) in AGENTS.md", "shortDescription": {"text": "SkillSpector RA2 (rogue-agent) in AGENTS.md"}, "fullDescription": {"text": "create ~/pi-cwd-YYYYMMDD\n  files/[...path]/route.ts        GET file contents for viewer\n  home/route.ts                   GET user home directory\n  models/route.ts                 GET { models, modelL\n\nSkill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.\n\nSkill: unknown\nRule: RA2  Category: rogue-agent\nSeverity: MEDIUM  Confidence: 0.60\n\nRemediation: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.6}}, {"id": "scanner-04d43b874f8c9cdc", "name": "SkillSpector RA1 (rogue-agent) in components/SessionSidebar.tsx", "shortDescription": {"text": "SkillSpector RA1 (rogue-agent) in components/SessionSidebar.tsx"}, "fullDescription": {"text": "remove check\n\nSkill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.\n\nSkill: unknown\nRule: RA1  Category: rogue-agent\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-1474af525032cfbf", "name": "SkillSpector SC1 (supply-chain) in package.json", "shortDescription": {"text": "SkillSpector SC1 (supply-chain) in package.json"}, "fullDescription": {"text": "\"react\": \"^19.2.4\"\n\nDependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.\n\nSkill: unknown\nRule: SC1  Category: supply-chain\nSeverity: LOW  Confidence: 0.40\n\nRemediation: Pin all dependency versions in requirements.txt or pyproject.toml. Use exact versions (==) or compatible ranges. Run pip-audit regularly."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 0.4}}, {"id": "scanner-3b5b4d5fd228b862", "name": "SkillSpector SC4 (supply-chain) in package.json", "shortDescription": {"text": "SkillSpector SC4 (supply-chain) in package.json"}, "fullDescription": {"text": "next==16.2.9\n\nDependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.\n\nSkill: unknown\nRule: SC4  Category: supply-chain\nSeverity: HIGH  Confidence: 0.80\n\nRemediation: Update the dependency to a patched version that addresses the known CVE. Check OSV (osv.dev) or NVD for details on the vulnerability."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.8}}, {"id": "scanner-c48d54072d7b9202", "name": "SkillSpector SC6 (supply-chain) in package.json", "shortDescription": {"text": "SkillSpector SC6 (supply-chain) in package.json"}, "fullDescription": {"text": "next\n\nPackage name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.\n\nSkill: unknown\nRule: SC6  Category: supply-chain\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Verify the package name is correct and not a typosquatting variant. Compare against the official package name on PyPI or npm."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-cdda5c2fadf768f4", "name": "SkillSpector TM1 (tool-misuse) in app/api/auth/api-key/[provider]/route.ts", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in app/api/auth/api-key/[provider]/route.ts"}, "fullDescription": {"text": "DELETE /api/auth/api-key/[provider]\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.80\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.8}}, {"id": "scanner-e259810bc4a779cf", "name": "SkillSpector TM1 (tool-misuse) in app/api/sessions/[id]/route.ts", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in app/api/sessions/[id]/route.ts"}, "fullDescription": {"text": "DELETE /api/sessions/[id]\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.80\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.8}}, {"id": "scanner-f97c9fa5752d868d", "name": "SkillSpector TM1 (tool-misuse) in app/api/worktrees/route.ts", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in app/api/worktrees/route.ts"}, "fullDescription": {"text": "DELETE /api/worktrees\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.80\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.8}}, {"id": "scanner-739fbb07a5aa6434", "name": "SkillSpector TM1 (tool-misuse) in bun.lock", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in bun.lock"}, "fullDescription": {"text": "RmB/\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-00a2b1259f90d451", "name": "SkillSpector TM1 (tool-misuse) in lib/bash-output.test.mjs", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in lib/bash-output.test.mjs"}, "fullDescription": {"text": "rm, symlink, writeFile } from \"node:fs/\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-e3eff1b0a754a49f", "name": "SkillSpector TM1 (tool-misuse) in lib/skill-updates.ts", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in lib/skill-updates.ts"}, "fullDescription": {"text": "rm } from \"fs/\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-7cbbdcade7d3ae01", "name": "SkillSpector TM1 (tool-misuse) in package-lock.json", "shortDescription": {"text": "SkillSpector TM1 (tool-misuse) in package-lock.json"}, "fullDescription": {"text": "rMq+zAPHodfHGZu4sGVehvAQt/\n\nTool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).\n\nSkill: unknown\nRule: TM1  Category: tool-misuse\nSeverity: HIGH  Confidence: 0.85\n\nRemediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.85}}, {"id": "scanner-e637c415447867e4", "name": "Run SkillSpector's LLM-backed analysis in your own pipeline", "shortDescription": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "fullDescription": {"text": "Repobility ran SkillSpector's static rules server-side. The deeper LLM-backed analyzers \u2014 tool-poisoning (TP*), semantic security discovery (SSD*), developer-intent mismatch (SDI*) \u2014 are meant to run on YOUR machine with YOUR model; repobility never sends your code to an LLM. Recipe:\n\n# 1. Install SkillSpector in your own isolated env\npipx install \"skillspector @ git+https://github.com/NVIDIA/SkillSpector.git\"\n\n# 2. Point it at YOUR LLM pipeline (pick one) - your code stays on your machine\nexport SKILLSPECTOR_PROVIDER=anthropic && export ANTHROPIC_API_KEY=sk-ant-...\n# export SKILLSPECTOR_PROVIDER=openai   && export OPENAI_API_KEY=sk-...\n# export SKILLSPECTOR_PROVIDER=openai OPENAI_API_KEY=ollama OPENAI_BASE_URL=http://localhost:11434/v1 SKILLSPECTOR_MODEL=llama3.1:8b\n# export SKILLSPECTOR_PROVIDER=nv_build && export NVIDIA_INFERENCE_KEY=nvapi-...\n\n# 3. Run the LLM-backed scan per skill (omit --no-llm to enable the LLM analyzers)\nskillspector scan . --format sarif --output skillspector-"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "info", "confidence": 1.0}}, {"id": "scanner-372f6b31662959ea", "name": "Insecure pattern 'dangerous_innerhtml' in components/MarkdownBody.tsx:193", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/MarkdownBody.tsx:193"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.65}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa46af0416a179a3", "name": "Very large file: components/SessionSidebar.tsx (2065 lines)", "shortDescription": {"text": "Very large file: components/SessionSidebar.tsx (2065 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c1c4219cecb75c9", "name": "Very large file: components/MessageView.tsx (1450 lines)", "shortDescription": {"text": "Very large file: components/MessageView.tsx (1450 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02bc490b69cc3aad", "name": "Very large file: components/AppShell.tsx (1290 lines)", "shortDescription": {"text": "Very large file: components/AppShell.tsx (1290 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-349ec49234e2d1a5", "name": "Very large file: components/ChatInput.tsx (1967 lines)", "shortDescription": {"text": "Very large file: components/ChatInput.tsx (1967 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3e43e5af5d08194", "name": "Very large file: components/ModelsConfig.tsx (1648 lines)", "shortDescription": {"text": "Very large file: components/ModelsConfig.tsx (1648 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66506a5645365a78", "name": "Very large file: hooks/useAgentSession.ts (1644 lines)", "shortDescription": {"text": "Very large file: hooks/useAgentSession.ts (1644 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 47 placeholder/mock markers across 11 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f0ca9bca09642e4", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/SessionSidebar.tsx:462", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/SessionSidebar.tsx:462"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-c89a836c25c0c967", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/AppShell.tsx:280", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/AppShell.tsx:280"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-b4dbb45a216cd9cb", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ChatInput.tsx:481", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ChatInput.tsx:481"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-bb7f591dbb2020b9", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ModelsConfig.tsx:1301", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ModelsConfig.tsx:1301"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-82f6ef5b0c2dad53", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/FileViewer.tsx:607", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/FileViewer.tsx:607"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-629e0fc790072314", "name": "Fire-and-forget `fetch()` has no rejection handler \u2014 hooks/useAgentSession.ts:897", "shortDescription": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 hooks/useAgentSession.ts:897"}, "fullDescription": {"text": "This fetch result is neither awaited, returned, assigned, nor followed by `.catch(...)`. A network failure can therefore become an unhandled promise rejection. Await/return the promise or attach an explicit rejection handler."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-51aa4b6b094fa3b2", "name": "Vulnerable dependency mermaid 11.14.0: GHSA-6m6c-36f7-fhxh", "shortDescription": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-6m6c-36f7-fhxh"}, "fullDescription": {"text": "OSV.dev reports `mermaid` at version `11.14.0` (resolved in `bun.lock`) is affected by GHSA-6m6c-36f7-fhxh (aka CVE-2026-41150).\n\nMermaid Gantt Charts are vulnerable to an Infinite Loop DoS\n\nAliases: CVE-2026-41150\nAdvisory: https://osv.dev/vulnerability/GHSA-6m6c-36f7-fhxh\nFix: upgrade `mermaid` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-3fd7d7738f918ea0", "name": "Vulnerable dependency mermaid 11.14.0: GHSA-87f9-hvmw-gh4p", "shortDescription": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-87f9-hvmw-gh4p"}, "fullDescription": {"text": "OSV.dev reports `mermaid` at version `11.14.0` (resolved in `bun.lock`) is affected by GHSA-87f9-hvmw-gh4p (aka CVE-2026-41159).\n\nMermaid: Improper sanitization of configuration leads to CSS injection\n\nAliases: CVE-2026-41159\nAdvisory: https://osv.dev/vulnerability/GHSA-87f9-hvmw-gh4p\nFix: upgrade `mermaid` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-058a198841a211c7", "name": "Vulnerable dependency mermaid 11.14.0: GHSA-ghcm-xqfw-q4vr", "shortDescription": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-ghcm-xqfw-q4vr"}, "fullDescription": {"text": "OSV.dev reports `mermaid` at version `11.14.0` (resolved in `bun.lock`) is affected by GHSA-ghcm-xqfw-q4vr (aka CVE-2026-41149).\n\nMermaid: Improper sanitization of `classDef` in state diagrams leads to HTML injection\n\nAliases: CVE-2026-41149\nAdvisory: https://osv.dev/vulnerability/GHSA-ghcm-xqfw-q4vr\nFix: upgrade `mermaid` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-ae1a10956815560a", "name": "Vulnerable dependency mermaid 11.14.0: GHSA-xcj9-5m2h-648r", "shortDescription": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-xcj9-5m2h-648r"}, "fullDescription": {"text": "OSV.dev reports `mermaid` at version `11.14.0` (resolved in `bun.lock`) is affected by GHSA-xcj9-5m2h-648r.\n\nNo summary published yet.\n\nAdvisory: https://osv.dev/vulnerability/GHSA-xcj9-5m2h-648r\nFix: upgrade `mermaid` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-67bf7544fdb46620", "name": "Vulnerable dependency next 16.2.9: GHSA-4633-3j49-mh5q", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-4633-3j49-mh5q"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-4633-3j49-mh5q (aka CVE-2026-64647).\n\nNext.js: Cache confusion of response bodies for requests with bodies containing invalid UTF-8 byte sequences\n\nAliases: CVE-2026-64647\nAdvisory: https://osv.dev/vulnerability/GHSA-4633-3j49-mh5q\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6f065efbc7c3c61c", "name": "Vulnerable dependency next 16.2.9: GHSA-4c39-4ccg-62r3", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-4c39-4ccg-62r3"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-4c39-4ccg-62r3 (aka CVE-2026-64646).\n\nNext.js: Unbounded Server Action payload in Edge runtime\n\nAliases: CVE-2026-64646\nAdvisory: https://osv.dev/vulnerability/GHSA-4c39-4ccg-62r3\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebf793515afde37a", "name": "Vulnerable dependency next 16.2.9: GHSA-68g3-v927-f742", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-68g3-v927-f742"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-68g3-v927-f742 (aka CVE-2026-64648).\n\nNext.js: Cache confusion of response bodies for requests with bodies\n\nAliases: CVE-2026-64648\nAdvisory: https://osv.dev/vulnerability/GHSA-68g3-v927-f742\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb7062e0651e5a1f", "name": "Vulnerable dependency next 16.2.9: GHSA-6gpp-xcg3-4w24", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-6gpp-xcg3-4w24"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-6gpp-xcg3-4w24 (aka CVE-2026-64642).\n\nNext.js: Middleware / Proxy bypass in App Router applications using Turbopack and single locale\n\nAliases: CVE-2026-64642\nAdvisory: https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 1.0}}, {"id": "scanner-779abf66dc6f9f8b", "name": "Vulnerable dependency next 16.2.9: GHSA-89xv-2m56-2m9x", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-89xv-2m56-2m9x"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-89xv-2m56-2m9x (aka CVE-2026-64649).\n\nNext.js: Server-Side Request Forgery in Server Actions on custom servers\n\nAliases: CVE-2026-64649\nAdvisory: https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0bcf3ad05b09f02", "name": "Vulnerable dependency next 16.2.9: GHSA-955p-x3mx-jcvp", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-955p-x3mx-jcvp"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-955p-x3mx-jcvp (aka CVE-2026-64643).\n\nNext.js: Unauthenticated disclosure of internal Server Function endpoints\n\nAliases: CVE-2026-64643\nAdvisory: https://osv.dev/vulnerability/GHSA-955p-x3mx-jcvp\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93df71d06086668c", "name": "Vulnerable dependency next 16.2.9: GHSA-m99w-x7hq-7vfj", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-m99w-x7hq-7vfj"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-m99w-x7hq-7vfj (aka CVE-2026-64641).\n\nNext.js: Denial of Service in App Router using Server Actions\n\nAliases: CVE-2026-64641\nAdvisory: https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e236f4a2e363158", "name": "Vulnerable dependency next 16.2.9: GHSA-p9j2-gv94-2wf4", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-p9j2-gv94-2wf4"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-p9j2-gv94-2wf4 (aka CVE-2026-64645).\n\nNext.js: Server-Side Request Forgery in rewrites via attacker-controlled destination hostname\n\nAliases: CVE-2026-64645\nAdvisory: https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ddf74c37214bd22", "name": "Vulnerable dependency next 16.2.9: GHSA-q8wf-6r8g-63ch", "shortDescription": {"text": "Vulnerable dependency next 16.2.9: GHSA-q8wf-6r8g-63ch"}, "fullDescription": {"text": "OSV.dev reports `next` at version `16.2.9` (resolved in `bun.lock`) is affected by GHSA-q8wf-6r8g-63ch.\n\nNo summary published yet.\n\nAdvisory: https://osv.dev/vulnerability/GHSA-q8wf-6r8g-63ch\nFix: upgrade `next` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90d0e88a8d5852eb", "name": "Vulnerable dependency postcss 8.5.8: GHSA-6g55-p6wh-862q", "shortDescription": {"text": "Vulnerable dependency postcss 8.5.8: GHSA-6g55-p6wh-862q"}, "fullDescription": {"text": "OSV.dev reports `postcss` at version `8.5.8` (resolved in `bun.lock`) is affected by GHSA-6g55-p6wh-862q (aka CVE-2026-45623).\n\nPostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments\n\nAliases: CVE-2026-45623\nAdvisory: https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q\nFix: upgrade `postcss` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 0.9}}, {"id": "scanner-8d6ef904ba8f1a39", "name": "Vulnerable dependency postcss 8.5.8: GHSA-qx2v-qp2m-jg93", "shortDescription": {"text": "Vulnerable dependency postcss 8.5.8: GHSA-qx2v-qp2m-jg93"}, "fullDescription": {"text": "OSV.dev reports `postcss` at version `8.5.8` (resolved in `bun.lock`) is affected by GHSA-qx2v-qp2m-jg93 (aka CVE-2026-41305).\n\nPostCSS has XSS via Unescaped </style> in its CSS Stringify Output\n\nAliases: CVE-2026-41305\nAdvisory: https://osv.dev/vulnerability/GHSA-qx2v-qp2m-jg93\nFix: upgrade `postcss` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-f00cecc9e22562b8", "name": "Vulnerable dependency postcss 8.4.31: GHSA-6g55-p6wh-862q", "shortDescription": {"text": "Vulnerable dependency postcss 8.4.31: GHSA-6g55-p6wh-862q"}, "fullDescription": {"text": "OSV.dev reports `postcss` at version `8.4.31` (resolved in `bun.lock`) is affected by GHSA-6g55-p6wh-862q (aka CVE-2026-45623).\n\nPostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments\n\nAliases: CVE-2026-45623\nAdvisory: https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q\nFix: upgrade `postcss` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 0.9}}, {"id": "scanner-755167a8c51f0c81", "name": "Vulnerable dependency postcss 8.4.31: GHSA-qx2v-qp2m-jg93", "shortDescription": {"text": "Vulnerable dependency postcss 8.4.31: GHSA-qx2v-qp2m-jg93"}, "fullDescription": {"text": "OSV.dev reports `postcss` at version `8.4.31` (resolved in `bun.lock`) is affected by GHSA-qx2v-qp2m-jg93 (aka CVE-2026-41305).\n\nPostCSS has XSS via Unescaped </style> in its CSS Stringify Output\n\nAliases: CVE-2026-41305\nAdvisory: https://osv.dev/vulnerability/GHSA-qx2v-qp2m-jg93\nFix: upgrade `postcss` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-60030abbe7499635", "name": "Vulnerable dependency @babel/core 7.29.0: GHSA-4x5r-pxfx-6jf8", "shortDescription": {"text": "Vulnerable dependency @babel/core 7.29.0: GHSA-4x5r-pxfx-6jf8"}, "fullDescription": {"text": "OSV.dev reports `@babel/core` at version `7.29.0` (resolved in `bun.lock`) is affected by GHSA-4x5r-pxfx-6jf8 (aka CVE-2026-49356).\nNote: `@babel/core` is a transitive dependency \u2014 pulled in by another package, not declared directly in a manifest.\n\n@babel/core: Arbitrary File Read via sourceMappingURL Comment\n\nAliases: CVE-2026-49356\nAdvisory: https://osv.dev/vulnerability/GHSA-4x5r-pxfx-6jf8\nFix: upgrade `@babel/core` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "low", "confidence": 0.9}}, {"id": "scanner-9e41bdab51977fb3", "name": "Vulnerable dependency @protobufjs/utf8 1.1.0: GHSA-q6x5-8v7m-xcrf", "shortDescription": {"text": "Vulnerable dependency @protobufjs/utf8 1.1.0: GHSA-q6x5-8v7m-xcrf"}, "fullDescription": {"text": "OSV.dev reports `@protobufjs/utf8` at version `1.1.0` (resolved in `bun.lock`) is affected by GHSA-q6x5-8v7m-xcrf (aka CVE-2026-44288).\nNote: `@protobufjs/utf8` is a transitive dependency \u2014 pulled in by another package, not declared directly in a manifest.\n\nprotobufjs has overlong UTF-8 decoding\n\nAliases: CVE-2026-44288\nAdvisory: https://osv.dev/vulnerability/GHSA-q6x5-8v7m-xcrf\nFix: upgrade `@protobufjs/utf8` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-0fecd96894f7839e", "name": "Vulnerable dependency brace-expansion 1.1.12: GHSA-3jxr-9vmj-r5cp", "shortDescription": {"text": "Vulnerable dependency brace-expansion 1.1.12: GHSA-3jxr-9vmj-r5cp"}, "fullDescription": {"text": "OSV.dev reports `brace-expansion` at version `1.1.12` (resolved in `bun.lock`) is affected by GHSA-3jxr-9vmj-r5cp (aka CVE-2026-13149).\nNote: `brace-expansion` is a transitive dependency \u2014 pulled in by another package, not declared directly in a manifest.\n\nbrace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups\n\nAliases: CVE-2026-13149\nAdvisory: https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp\nFix: upgrade `brace-expansion` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "high", "confidence": 0.9}}, {"id": "scanner-f8baa36b152a15a9", "name": "Vulnerable dependency brace-expansion 1.1.12: GHSA-f886-m6hf-6m8v", "shortDescription": {"text": "Vulnerable dependency brace-expansion 1.1.12: GHSA-f886-m6hf-6m8v"}, "fullDescription": {"text": "OSV.dev reports `brace-expansion` at version `1.1.12` (resolved in `bun.lock`) is affected by GHSA-f886-m6hf-6m8v (aka CVE-2026-33750).\nNote: `brace-expansion` is a transitive dependency \u2014 pulled in by another package, not declared directly in a manifest.\n\nbrace-expansion: Zero-step sequence causes process hang and memory exhaustion\n\nAliases: CVE-2026-33750\nAdvisory: https://osv.dev/vulnerability/GHSA-f886-m6hf-6m8v\nFix: upgrade `brace-expansion` past the affected range per the advisory."}, "properties": {"scanner": "scanner-primary", "layer": "dependencies", "severity": "medium", "confidence": 0.9}}, {"id": "scanner-c29fee08cb03a50e", "name": "Dangling fetch: POST /api/models-config/test (components/ModelsConfig.tsx:546)", "shortDescription": {"text": "Dangling fetch: POST /api/models-config/test (components/ModelsConfig.tsx:546)"}, "fullDescription": {"text": "`components/ModelsConfig.tsx:546` calls `POST /api/models-config/test` but no backend route in the scanned graph matches that path. This is a likely runtime 404 unless an external gateway or unsupported router provides it.\n\nTool: fetch\nNormalized path used for matching: `/models-config/test`"}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 0.9}}, {"id": "scanner-cac6681ba8e8fa1d", "name": "5 backend endpoints not called by scanned frontend", "shortDescription": {"text": "5 backend endpoints not called by scanned frontend"}, "fullDescription": {"text": "No scanned frontend call matched these backend routes. Sample: GET /api/models, GET /api/auth/api-key/{provider}, GET /api/agent/{id}/bash-output, GET /api/agent/{id}/events, GET /api/agent/running/events. This is fine when endpoints serve external clients (mobile apps, SDKs, third-party integrations, server-side webhooks). Otherwise document consumers or remove dead routes."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/30749"}, "properties": {"repository": "agegr/pi-web", "repoUrl": "https://github.com/agegr/pi-web", "branch": "main"}, "results": [{"ruleId": "scanner-074bc406991f239a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 components/PluginsConfig.tsx:751"}, "properties": {"repobilityId": "4b3d99c7e2cbec41", "scanner": "scanner-primary", "fingerprint": "074bc406991f239a", "layer": "frontend", "severity": "low", "confidence": 0.85, "tags": ["frontend-quality", "fq.button.no-label"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/PluginsConfig.tsx"}, "region": {"startLine": 751}}}]}, {"ruleId": "scanner-74da7872fbfc33b7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 components/ModelsConfig.tsx:1466"}, "properties": {"repobilityId": "5fc7d47958c51824", "scanner": "scanner-primary", "fingerprint": "74da7872fbfc33b7", "layer": "frontend", "severity": "low", "confidence": 0.85, "tags": ["frontend-quality", "fq.button.no-label"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ModelsConfig.tsx"}, "region": {"startLine": 1466}}}]}, {"ruleId": "scanner-cec03ccf48034e29", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 components/SkillsConfig.tsx:905"}, "properties": {"repobilityId": "ef989346bddb86e0", "scanner": "scanner-primary", "fingerprint": "cec03ccf48034e29", "layer": "frontend", "severity": "low", "confidence": 0.85, "tags": ["frontend-quality", "fq.button.no-label"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/SkillsConfig.tsx"}, "region": {"startLine": 905}}}]}, {"ruleId": "scanner-9aeffe62e09ab7b3", "level": "error", "message": {"text": "react insecure request \u2014 lib/http-dispatcher.test.mjs:71"}, "properties": {"repobilityId": "116487105a46967b", "scanner": "scanner-primary", "fingerprint": "9aeffe62e09ab7b3", "layer": "security", "severity": "high", "confidence": 0.75, "tags": ["semgrep", "security", "react"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/http-dispatcher.test.mjs"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-e83532792afd4290", "level": "warning", "message": {"text": "CVE-2026-44288: @protobufjs/utf8 1.1.0 \u2014 bun.lock"}, "properties": {"repobilityId": "98054590c9710631", "scanner": "scanner-primary", "fingerprint": "e83532792afd4290", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44288"]}}, {"ruleId": "scanner-23d137638b1c2221", "level": "error", "message": {"text": "CVE-2026-13149: brace-expansion 1.1.12 \u2014 bun.lock"}, "properties": {"repobilityId": "cb67cf3a073866ed", "scanner": "scanner-primary", "fingerprint": "23d137638b1c2221", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-13149"]}}, {"ruleId": "scanner-92e4bc86e262ea92", "level": "warning", "message": {"text": "CVE-2026-33750: brace-expansion 1.1.12 \u2014 bun.lock"}, "properties": {"repobilityId": "86ce9f3a535db7d8", "scanner": "scanner-primary", "fingerprint": "92e4bc86e262ea92", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-33750"]}}, {"ruleId": "scanner-6654f721bb3e6588", "level": "error", "message": {"text": "CVE-2026-64641: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "abb877e81c59ccfe", "scanner": "scanner-primary", "fingerprint": "6654f721bb3e6588", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64641"]}}, {"ruleId": "scanner-8bab2e0622f16d47", "level": "error", "message": {"text": "CVE-2026-64642: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "19c6bb00b17cea32", "scanner": "scanner-primary", "fingerprint": "8bab2e0622f16d47", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64642"]}}, {"ruleId": "scanner-b6122d5492e99ad7", "level": "error", "message": {"text": "CVE-2026-64645: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "ee5a1cfe9fed695e", "scanner": "scanner-primary", "fingerprint": "b6122d5492e99ad7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64645"]}}, {"ruleId": "scanner-ce977812d5d389f8", "level": "error", "message": {"text": "CVE-2026-64649: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "89a38baa4779f486", "scanner": "scanner-primary", "fingerprint": "ce977812d5d389f8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64649"]}}, {"ruleId": "scanner-b195181a640f2fe2", "level": "warning", "message": {"text": "CVE-2026-64643: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "4c04e607bd96e016", "scanner": "scanner-primary", "fingerprint": "b195181a640f2fe2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64643"]}}, {"ruleId": "scanner-2fbc16999fe8d1c8", "level": "warning", "message": {"text": "CVE-2026-64644: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "906492d2b5a9dcfb", "scanner": "scanner-primary", "fingerprint": "2fbc16999fe8d1c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64644"]}}, {"ruleId": "scanner-7efc48095dfdcb72", "level": "warning", "message": {"text": "CVE-2026-64646: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "2ef3022a308d3ded", "scanner": "scanner-primary", "fingerprint": "7efc48095dfdcb72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64646"]}}, {"ruleId": "scanner-20eca23b9a121d3e", "level": "warning", "message": {"text": "CVE-2026-64647: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "ce92d86982a6b329", "scanner": "scanner-primary", "fingerprint": "20eca23b9a121d3e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64647"]}}, {"ruleId": "scanner-a54cc4d58cfd1a4a", "level": "warning", "message": {"text": "CVE-2026-64648: next 16.2.9 \u2014 bun.lock"}, "properties": {"repobilityId": "61d69d1d5135b65e", "scanner": "scanner-primary", "fingerprint": "a54cc4d58cfd1a4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64648"]}}, {"ruleId": "scanner-b7c62192633e4a60", "level": "warning", "message": {"text": "CVE-2026-41305: postcss 8.5.8 \u2014 bun.lock"}, "properties": {"repobilityId": "426f7364ac3866ee", "scanner": "scanner-primary", "fingerprint": "b7c62192633e4a60", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-41305"]}}, {"ruleId": "scanner-c941e96e5fb02bb4", "level": "error", "message": {"text": "CVE-2026-41242: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "ab0aea43bb0cbb23", "scanner": "scanner-primary", "fingerprint": "c941e96e5fb02bb4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-41242"]}}, {"ruleId": "scanner-1ce9c3eb11295eda", "level": "error", "message": {"text": "CVE-2026-44289: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "b9f0a385b5c418e6", "scanner": "scanner-primary", "fingerprint": "1ce9c3eb11295eda", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44289"]}}, {"ruleId": "scanner-c6e3fe7eddfc8991", "level": "error", "message": {"text": "CVE-2026-44290: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "4cf00acd5d418eb7", "scanner": "scanner-primary", "fingerprint": "c6e3fe7eddfc8991", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44290"]}}, {"ruleId": "scanner-54675f9428c574e1", "level": "error", "message": {"text": "CVE-2026-44291: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "40b28dd1f07251c8", "scanner": "scanner-primary", "fingerprint": "54675f9428c574e1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44291"]}}, {"ruleId": "scanner-60972e811e329c95", "level": "error", "message": {"text": "CVE-2026-44293: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "9f01a14bae92b98f", "scanner": "scanner-primary", "fingerprint": "60972e811e329c95", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44293"]}}, {"ruleId": "scanner-4da92d5bca5c6b4d", "level": "error", "message": {"text": "CVE-2026-48712: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "be60186f9c85135f", "scanner": "scanner-primary", "fingerprint": "4da92d5bca5c6b4d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-48712"]}}, {"ruleId": "scanner-5de07f49a87ca5df", "level": "warning", "message": {"text": "CVE-2026-44288: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "a9d85a11bffcfe25", "scanner": "scanner-primary", "fingerprint": "5de07f49a87ca5df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44288"]}}, {"ruleId": "scanner-0d3bc2d0cab2486b", "level": "warning", "message": {"text": "CVE-2026-44292: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "511b38448f6e8f26", "scanner": "scanner-primary", "fingerprint": "0d3bc2d0cab2486b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44292"]}}, {"ruleId": "scanner-e87bd8c6b496f1cf", "level": "warning", "message": {"text": "CVE-2026-44294: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "f0daa32316cfd2bd", "scanner": "scanner-primary", "fingerprint": "e87bd8c6b496f1cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-44294"]}}, {"ruleId": "scanner-73298d7424f24f84", "level": "warning", "message": {"text": "CVE-2026-45740: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "574ae43bd6062310", "scanner": "scanner-primary", "fingerprint": "73298d7424f24f84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-45740"]}}, {"ruleId": "scanner-3ddea26019ce2745", "level": "warning", "message": {"text": "CVE-2026-54269: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "52127ef0df1cbf87", "scanner": "scanner-primary", "fingerprint": "3ddea26019ce2745", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-54269"]}}, {"ruleId": "scanner-a25d01f9dbc69b84", "level": "warning", "message": {"text": "CVE-2026-59877: protobufjs 7.5.4 \u2014 bun.lock"}, "properties": {"repobilityId": "a52d9f3ff551dd62", "scanner": "scanner-primary", "fingerprint": "a25d01f9dbc69b84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-59877"]}}, {"ruleId": "scanner-01beebbe89c64b20", "level": "error", "message": {"text": "CVE-2026-48779: ws 8.19.0 \u2014 bun.lock"}, "properties": {"repobilityId": "9a75ec762b2a9ab4", "scanner": "scanner-primary", "fingerprint": "01beebbe89c64b20", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-48779"]}}, {"ruleId": "scanner-dc65c90399f372d1", "level": "warning", "message": {"text": "CVE-2026-45736: ws 8.19.0 \u2014 bun.lock"}, "properties": {"repobilityId": "1b799f9b4071cbe2", "scanner": "scanner-primary", "fingerprint": "dc65c90399f372d1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-45736"]}}, {"ruleId": "scanner-356a24a248fb9f2a", "level": "error", "message": {"text": "CVE-2026-64641: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "29a41f937d601da7", "scanner": "scanner-primary", "fingerprint": "356a24a248fb9f2a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64641"]}}, {"ruleId": "scanner-94d46e2a23b01433", "level": "error", "message": {"text": "CVE-2026-64642: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "b564d25f3e29d7cb", "scanner": "scanner-primary", "fingerprint": "94d46e2a23b01433", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64642"]}}, {"ruleId": "scanner-3164145f97e27a78", "level": "error", "message": {"text": "CVE-2026-64645: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "c4bc0f12b3260df8", "scanner": "scanner-primary", "fingerprint": "3164145f97e27a78", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64645"]}}, {"ruleId": "scanner-c8b80a03bfa649e4", "level": "error", "message": {"text": "CVE-2026-64649: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "92ef7b09dead9bb3", "scanner": "scanner-primary", "fingerprint": "c8b80a03bfa649e4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64649"]}}, {"ruleId": "scanner-0afa881f61a69309", "level": "warning", "message": {"text": "CVE-2026-64643: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "6c3f9b89a0cd4b01", "scanner": "scanner-primary", "fingerprint": "0afa881f61a69309", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64643"]}}, {"ruleId": "scanner-b5c93a93a1ebc294", "level": "warning", "message": {"text": "CVE-2026-64644: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "1e7ab9c3e63e6232", "scanner": "scanner-primary", "fingerprint": "b5c93a93a1ebc294", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64644"]}}, {"ruleId": "scanner-0a6547dbddf3aa21", "level": "warning", "message": {"text": "CVE-2026-64646: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "dd8f4971b9f14555", "scanner": "scanner-primary", "fingerprint": "0a6547dbddf3aa21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64646"]}}, {"ruleId": "scanner-837a3a4ee4df6ac0", "level": "warning", "message": {"text": "CVE-2026-64647: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "0744c38f1c7ae818", "scanner": "scanner-primary", "fingerprint": "837a3a4ee4df6ac0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64647"]}}, {"ruleId": "scanner-aaec1bb3a35bd14d", "level": "warning", "message": {"text": "CVE-2026-64648: next 16.2.9 \u2014 package-lock.json"}, "properties": {"repobilityId": "eb38aafed50013b0", "scanner": "scanner-primary", "fingerprint": "aaec1bb3a35bd14d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-64648"]}}, {"ruleId": "scanner-a03a7023015b81a9", "level": "warning", "message": {"text": "CVE-2026-41305: postcss 8.4.31 \u2014 package-lock.json"}, "properties": {"repobilityId": "10b93266de05d9b1", "scanner": "scanner-primary", "fingerprint": "a03a7023015b81a9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-41305"]}}, {"ruleId": "scanner-382e4c9b06555799", "level": "warning", "message": {"text": "CVE-2026-59877: protobufjs 7.6.4 \u2014 package-lock.json"}, "properties": {"repobilityId": "0585cee0a924cd91", "scanner": "scanner-primary", "fingerprint": "382e4c9b06555799", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["trivy", "vuln", "CVE-2026-59877"]}}, {"ruleId": "scanner-696edaf1bfda3eab", "level": "error", "message": {"text": "GHSA-f88m-g3jw-g9cj: sharp 0.34.5 \u2014 package-lock.json"}, "properties": {"repobilityId": "d0b02bd3a646af1f", "scanner": "scanner-primary", "fingerprint": "696edaf1bfda3eab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["trivy", "vuln", "GHSA-f88m-g3jw-g9cj"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f2f8803197dda224", "level": "warning", "message": {"text": "SkillSpector E1 (data-exfil) in components/ModelsConfig.tsx"}, "properties": {"repobilityId": "d12c7067751a3108", "scanner": "scanner-primary", "fingerprint": "f2f8803197dda224", "layer": "security", "severity": "medium", "confidence": 0.5, "tags": ["skillspector", "mcp-skill", "data-exfil", "E1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ModelsConfig.tsx"}, "region": {"startLine": 324}}}]}, {"ruleId": "scanner-67c1dc86af8cf275", "level": "warning", "message": {"text": "SkillSpector E1 (data-exfil) in lib/skill-updates.ts"}, "properties": {"repobilityId": "8cce0e934f426d1d", "scanner": "scanner-primary", "fingerprint": "67c1dc86af8cf275", "layer": "security", "severity": "medium", "confidence": 0.5, "tags": ["skillspector", "mcp-skill", "data-exfil", "E1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/skill-updates.ts"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-f3321f3de07fb846", "level": "note", "message": {"text": "SkillSpector EA3 (excessive-agency) in LICENSE"}, "properties": {"repobilityId": "1b29968a80e56e5c", "scanner": "scanner-primary", "fingerprint": "f3321f3de07fb846", "layer": "security", "severity": "low", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "LICENSE"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-8df2a9a34ca07e8a", "level": "warning", "message": {"text": "SkillSpector EA1 (excessive-agency) in lib/session-title.ts"}, "properties": {"repobilityId": "4ffab22cb01643be", "scanner": "scanner-primary", "fingerprint": "8df2a9a34ca07e8a", "layer": "security", "severity": "medium", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/session-title.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-82c0dea0704877ea", "level": "error", "message": {"text": "SkillSpector MP3 (memory-poisoning) in components/ModelsConfig.tsx"}, "properties": {"repobilityId": "a4d881f206802489", "scanner": "scanner-primary", "fingerprint": "82c0dea0704877ea", "layer": "security", "severity": "high", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "memory-poisoning", "MP3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ModelsConfig.tsx"}, "region": {"startLine": 721}}}]}, {"ruleId": "scanner-a1c8703dd1d3654e", "level": "error", "message": {"text": "SkillSpector OH1 (output-handling) in app/layout.tsx"}, "properties": {"repobilityId": "6d4332fbd49dc6bf", "scanner": "scanner-primary", "fingerprint": "a1c8703dd1d3654e", "layer": "security", "severity": "high", "confidence": 0.65, "tags": ["skillspector", "mcp-skill", "output-handling", "OH1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-40de28a909a577a2", "level": "error", "message": {"text": "SkillSpector OH1 (output-handling) in components/MarkdownBody.tsx"}, "properties": {"repobilityId": "cefb220f0527e8e0", "scanner": "scanner-primary", "fingerprint": "40de28a909a577a2", "layer": "security", "severity": "high", "confidence": 0.65, "tags": ["skillspector", "mcp-skill", "output-handling", "OH1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/MarkdownBody.tsx"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-5d36a8a26e369a65", "level": "error", "message": {"text": "SkillSpector PE3 (priv-esc) in app/api/files/[...path]/route.ts"}, "properties": {"repobilityId": "ccf009b1af567c61", "scanner": "scanner-primary", "fingerprint": "5d36a8a26e369a65", "layer": "security", "severity": "high", "confidence": 0.6, "tags": ["skillspector", "mcp-skill", "priv-esc", "PE3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/files/[...path]/route.ts"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-493b846591b7d4f3", "level": "error", "message": {"text": "SkillSpector PE3 (priv-esc) in bin/pi-web.js"}, "properties": {"repobilityId": "6952656eb2f0a0aa", "scanner": "scanner-primary", "fingerprint": "493b846591b7d4f3", "layer": "security", "severity": "high", "confidence": 0.6, "tags": ["skillspector", "mcp-skill", "priv-esc", "PE3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bin/pi-web.js"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-7612a62a91c35b95", "level": "error", "message": {"text": "SkillSpector PE3 (priv-esc) in components/FileIcons.tsx"}, "properties": {"repobilityId": "d03e14de5d2cf9cb", "scanner": "scanner-primary", "fingerprint": "7612a62a91c35b95", "layer": "security", "severity": "high", "confidence": 0.6, "tags": ["skillspector", "mcp-skill", "priv-esc", "PE3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/FileIcons.tsx"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-c2c7e069a36ad737", "level": "error", "message": {"text": "SkillSpector PE3 (priv-esc) in lib/file-upload.test.mjs"}, "properties": {"repobilityId": "37a9b1df79352df3", "scanner": "scanner-primary", "fingerprint": "c2c7e069a36ad737", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "priv-esc", "PE3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/file-upload.test.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-08bcd5c6d9372ce7", "level": "warning", "message": {"text": "SkillSpector RA2 (rogue-agent) in AGENTS.md"}, "properties": {"repobilityId": "4fa77b2691c1f8d7", "scanner": "scanner-primary", "fingerprint": "08bcd5c6d9372ce7", "layer": "security", "severity": "medium", "confidence": 0.6, "tags": ["skillspector", "mcp-skill", "rogue-agent", "RA2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-04d43b874f8c9cdc", "level": "error", "message": {"text": "SkillSpector RA1 (rogue-agent) in components/SessionSidebar.tsx"}, "properties": {"repobilityId": "d03fb5ddf20ea995", "scanner": "scanner-primary", "fingerprint": "04d43b874f8c9cdc", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "rogue-agent", "RA1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/SessionSidebar.tsx"}, "region": {"startLine": 1223}}}]}, {"ruleId": "scanner-1474af525032cfbf", "level": "note", "message": {"text": "SkillSpector SC1 (supply-chain) in package.json"}, "properties": {"repobilityId": "3383129e33c8e7f0", "scanner": "scanner-primary", "fingerprint": "1474af525032cfbf", "layer": "security", "severity": "low", "confidence": 0.4, "tags": ["skillspector", "mcp-skill", "supply-chain", "SC1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-3b5b4d5fd228b862", "level": "error", "message": {"text": "SkillSpector SC4 (supply-chain) in package.json"}, "properties": {"repobilityId": "5cf524c71d4922e2", "scanner": "scanner-primary", "fingerprint": "3b5b4d5fd228b862", "layer": "security", "severity": "high", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "supply-chain", "SC4"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-c48d54072d7b9202", "level": "error", "message": {"text": "SkillSpector SC6 (supply-chain) in package.json"}, "properties": {"repobilityId": "0898d2a6b27a3a5c", "scanner": "scanner-primary", "fingerprint": "c48d54072d7b9202", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "supply-chain", "SC6"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-cdda5c2fadf768f4", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in app/api/auth/api-key/[provider]/route.ts"}, "properties": {"repobilityId": "7c0b7963b63f127e", "scanner": "scanner-primary", "fingerprint": "cdda5c2fadf768f4", "layer": "security", "severity": "high", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/auth/api-key/[provider]/route.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-e259810bc4a779cf", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in app/api/sessions/[id]/route.ts"}, "properties": {"repobilityId": "3efb411dda5eac88", "scanner": "scanner-primary", "fingerprint": "e259810bc4a779cf", "layer": "security", "severity": "high", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/sessions/[id]/route.ts"}, "region": {"startLine": 196}}}]}, {"ruleId": "scanner-f97c9fa5752d868d", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in app/api/worktrees/route.ts"}, "properties": {"repobilityId": "7a1bd6672233c4d7", "scanner": "scanner-primary", "fingerprint": "f97c9fa5752d868d", "layer": "security", "severity": "high", "confidence": 0.8, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/worktrees/route.ts"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-739fbb07a5aa6434", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in bun.lock"}, "properties": {"repobilityId": "cae8fe22825e38d6", "scanner": "scanner-primary", "fingerprint": "739fbb07a5aa6434", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 816}}}]}, {"ruleId": "scanner-00a2b1259f90d451", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in lib/bash-output.test.mjs"}, "properties": {"repobilityId": "795e9719035a02a7", "scanner": "scanner-primary", "fingerprint": "00a2b1259f90d451", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/bash-output.test.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-e3eff1b0a754a49f", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in lib/skill-updates.ts"}, "properties": {"repobilityId": "c50e913674727bef", "scanner": "scanner-primary", "fingerprint": "e3eff1b0a754a49f", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/skill-updates.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-7cbbdcade7d3ae01", "level": "error", "message": {"text": "SkillSpector TM1 (tool-misuse) in package-lock.json"}, "properties": {"repobilityId": "aa03d253b8eee8af", "scanner": "scanner-primary", "fingerprint": "7cbbdcade7d3ae01", "layer": "security", "severity": "high", "confidence": 0.85, "tags": ["skillspector", "mcp-skill", "tool-misuse", "TM1"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package-lock.json"}, "region": {"startLine": 2236}}}]}, {"ruleId": "scanner-e637c415447867e4", "level": "none", "message": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "properties": {"repobilityId": "1936f198ff5212bf", "scanner": "scanner-primary", "fingerprint": "e637c415447867e4", "layer": "security", "severity": "info", "confidence": 1.0, "tags": ["skillspector", "mcp-skill", "llm-advisory", "ai-coder"]}}, {"ruleId": "scanner-372f6b31662959ea", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/MarkdownBody.tsx:193"}, "properties": {"repobilityId": "663b2c1c2119d200", "scanner": "scanner-primary", "fingerprint": "372f6b31662959ea", "layer": "security", "severity": "medium", "confidence": 0.65, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/MarkdownBody.tsx"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-fa46af0416a179a3", "level": "note", "message": {"text": "Very large file: components/SessionSidebar.tsx (2065 lines)"}, "properties": {"repobilityId": "e41cf6733ba18086", "scanner": "scanner-primary", "fingerprint": "fa46af0416a179a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1c1c4219cecb75c9", "level": "note", "message": {"text": "Very large file: components/MessageView.tsx (1450 lines)"}, "properties": {"repobilityId": "97935a3e3fa2c812", "scanner": "scanner-primary", "fingerprint": "1c1c4219cecb75c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-02bc490b69cc3aad", "level": "note", "message": {"text": "Very large file: components/AppShell.tsx (1290 lines)"}, "properties": {"repobilityId": "6c9a52246ab3e72e", "scanner": "scanner-primary", "fingerprint": "02bc490b69cc3aad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-349ec49234e2d1a5", "level": "note", "message": {"text": "Very large file: components/ChatInput.tsx (1967 lines)"}, "properties": {"repobilityId": "fe4cc6661300e22e", "scanner": "scanner-primary", "fingerprint": "349ec49234e2d1a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f3e43e5af5d08194", "level": "note", "message": {"text": "Very large file: components/ModelsConfig.tsx (1648 lines)"}, "properties": {"repobilityId": "85b0a581c49f5e5f", "scanner": "scanner-primary", "fingerprint": "f3e43e5af5d08194", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-66506a5645365a78", "level": "note", "message": {"text": "Very large file: hooks/useAgentSession.ts (1644 lines)"}, "properties": {"repobilityId": "6a6d52d9fe4b13fa", "scanner": "scanner-primary", "fingerprint": "66506a5645365a78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "7b0bba39b558bf08", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "c30796dda89c30cd", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "eb3c85ff4e825cbd", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-7f0ca9bca09642e4", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/SessionSidebar.tsx:462"}, "properties": {"repobilityId": "ffde87d0134b7c5a", "scanner": "scanner-primary", "fingerprint": "7f0ca9bca09642e4", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/SessionSidebar.tsx"}, "region": {"startLine": 462}}}]}, {"ruleId": "scanner-c89a836c25c0c967", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/AppShell.tsx:280"}, "properties": {"repobilityId": "936bceac35767c02", "scanner": "scanner-primary", "fingerprint": "c89a836c25c0c967", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/AppShell.tsx"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-b4dbb45a216cd9cb", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ChatInput.tsx:481"}, "properties": {"repobilityId": "7e5e7f0cfe1ffff6", "scanner": "scanner-primary", "fingerprint": "b4dbb45a216cd9cb", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ChatInput.tsx"}, "region": {"startLine": 481}}}]}, {"ruleId": "scanner-bb7f591dbb2020b9", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/ModelsConfig.tsx:1301"}, "properties": {"repobilityId": "e30b15a77301292e", "scanner": "scanner-primary", "fingerprint": "bb7f591dbb2020b9", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ModelsConfig.tsx"}, "region": {"startLine": 1301}}}]}, {"ruleId": "scanner-82f6ef5b0c2dad53", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 components/FileViewer.tsx:607"}, "properties": {"repobilityId": "1716556719b2cdce", "scanner": "scanner-primary", "fingerprint": "82f6ef5b0c2dad53", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/FileViewer.tsx"}, "region": {"startLine": 607}}}]}, {"ruleId": "scanner-629e0fc790072314", "level": "warning", "message": {"text": "Fire-and-forget `fetch()` has no rejection handler \u2014 hooks/useAgentSession.ts:897"}, "properties": {"repobilityId": "efd5c685ea8025b6", "scanner": "scanner-primary", "fingerprint": "629e0fc790072314", "layer": "quality", "severity": "medium", "confidence": 0.9, "tags": ["integrity", "fragile-runtime", "robustness", "unhandled-promise"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hooks/useAgentSession.ts"}, "region": {"startLine": 897}}}]}, {"ruleId": "scanner-51aa4b6b094fa3b2", "level": "warning", "message": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-6m6c-36f7-fhxh"}, "properties": {"repobilityId": "c2432a300de057ef", "scanner": "scanner-primary", "fingerprint": "51aa4b6b094fa3b2", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-6m6c-36f7-fhxh", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fd7d7738f918ea0", "level": "warning", "message": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-87f9-hvmw-gh4p"}, "properties": {"repobilityId": "e1b3aa347542de5e", "scanner": "scanner-primary", "fingerprint": "3fd7d7738f918ea0", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-87f9-hvmw-gh4p", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-058a198841a211c7", "level": "warning", "message": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-ghcm-xqfw-q4vr"}, "properties": {"repobilityId": "225d6303f90867e6", "scanner": "scanner-primary", "fingerprint": "058a198841a211c7", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-ghcm-xqfw-q4vr", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae1a10956815560a", "level": "warning", "message": {"text": "Vulnerable dependency mermaid 11.14.0: GHSA-xcj9-5m2h-648r"}, "properties": {"repobilityId": "9e863977192fcd66", "scanner": "scanner-primary", "fingerprint": "ae1a10956815560a", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-xcj9-5m2h-648r", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-67bf7544fdb46620", "level": "warning", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-4633-3j49-mh5q"}, "properties": {"repobilityId": "55ffe109d479e348", "scanner": "scanner-primary", "fingerprint": "67bf7544fdb46620", "layer": "dependencies", "severity": "medium", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-4633-3j49-mh5q"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f065efbc7c3c61c", "level": "warning", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-4c39-4ccg-62r3"}, "properties": {"repobilityId": "d447579e2c9a6609", "scanner": "scanner-primary", "fingerprint": "6f065efbc7c3c61c", "layer": "dependencies", "severity": "medium", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-4c39-4ccg-62r3"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ebf793515afde37a", "level": "warning", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-68g3-v927-f742"}, "properties": {"repobilityId": "f5282b17a31b5ef4", "scanner": "scanner-primary", "fingerprint": "ebf793515afde37a", "layer": "dependencies", "severity": "medium", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-68g3-v927-f742"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb7062e0651e5a1f", "level": "error", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-6gpp-xcg3-4w24"}, "properties": {"repobilityId": "522e8b4bfe96afb3", "scanner": "scanner-primary", "fingerprint": "bb7062e0651e5a1f", "layer": "dependencies", "severity": "high", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-6gpp-xcg3-4w24"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-779abf66dc6f9f8b", "level": "error", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-89xv-2m56-2m9x"}, "properties": {"repobilityId": "b3f01ea202afce30", "scanner": "scanner-primary", "fingerprint": "779abf66dc6f9f8b", "layer": "dependencies", "severity": "high", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-89xv-2m56-2m9x"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0bcf3ad05b09f02", "level": "warning", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-955p-x3mx-jcvp"}, "properties": {"repobilityId": "eff220e90e139124", "scanner": "scanner-primary", "fingerprint": "e0bcf3ad05b09f02", "layer": "dependencies", "severity": "medium", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-955p-x3mx-jcvp"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93df71d06086668c", "level": "error", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-m99w-x7hq-7vfj"}, "properties": {"repobilityId": "210f4fdb9341a43e", "scanner": "scanner-primary", "fingerprint": "93df71d06086668c", "layer": "dependencies", "severity": "high", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-m99w-x7hq-7vfj"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1e236f4a2e363158", "level": "error", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-p9j2-gv94-2wf4"}, "properties": {"repobilityId": "35affa696e11bdf4", "scanner": "scanner-primary", "fingerprint": "1e236f4a2e363158", "layer": "dependencies", "severity": "high", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-p9j2-gv94-2wf4"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ddf74c37214bd22", "level": "warning", "message": {"text": "Vulnerable dependency next 16.2.9: GHSA-q8wf-6r8g-63ch"}, "properties": {"repobilityId": "89fd3fba482603ef", "scanner": "scanner-primary", "fingerprint": "7ddf74c37214bd22", "layer": "dependencies", "severity": "medium", "confidence": 1.0, "tags": ["dependency", "sca", "osv", "GHSA-q8wf-6r8g-63ch"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90d0e88a8d5852eb", "level": "error", "message": {"text": "Vulnerable dependency postcss 8.5.8: GHSA-6g55-p6wh-862q"}, "properties": {"repobilityId": "f8e5c9580aa38973", "scanner": "scanner-primary", "fingerprint": "90d0e88a8d5852eb", "layer": "dependencies", "severity": "high", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-6g55-p6wh-862q", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d6ef904ba8f1a39", "level": "warning", "message": {"text": "Vulnerable dependency postcss 8.5.8: GHSA-qx2v-qp2m-jg93"}, "properties": {"repobilityId": "cd077b2d3b1cc33b", "scanner": "scanner-primary", "fingerprint": "8d6ef904ba8f1a39", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-qx2v-qp2m-jg93", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f00cecc9e22562b8", "level": "error", "message": {"text": "Vulnerable dependency postcss 8.4.31: GHSA-6g55-p6wh-862q"}, "properties": {"repobilityId": "86c312e6e8a1e925", "scanner": "scanner-primary", "fingerprint": "f00cecc9e22562b8", "layer": "dependencies", "severity": "high", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-6g55-p6wh-862q", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-755167a8c51f0c81", "level": "warning", "message": {"text": "Vulnerable dependency postcss 8.4.31: GHSA-qx2v-qp2m-jg93"}, "properties": {"repobilityId": "00a7666aebb4f6a3", "scanner": "scanner-primary", "fingerprint": "755167a8c51f0c81", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-qx2v-qp2m-jg93", "dev-dependency"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60030abbe7499635", "level": "note", "message": {"text": "Vulnerable dependency @babel/core 7.29.0: GHSA-4x5r-pxfx-6jf8"}, "properties": {"repobilityId": "048ec5a9afac1732", "scanner": "scanner-primary", "fingerprint": "60030abbe7499635", "layer": "dependencies", "severity": "low", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-4x5r-pxfx-6jf8", "transitive"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e41bdab51977fb3", "level": "warning", "message": {"text": "Vulnerable dependency @protobufjs/utf8 1.1.0: GHSA-q6x5-8v7m-xcrf"}, "properties": {"repobilityId": "d845ffffe8ff2904", "scanner": "scanner-primary", "fingerprint": "9e41bdab51977fb3", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-q6x5-8v7m-xcrf", "transitive"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0fecd96894f7839e", "level": "error", "message": {"text": "Vulnerable dependency brace-expansion 1.1.12: GHSA-3jxr-9vmj-r5cp"}, "properties": {"repobilityId": "5d2ce580505ef5a7", "scanner": "scanner-primary", "fingerprint": "0fecd96894f7839e", "layer": "dependencies", "severity": "high", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-3jxr-9vmj-r5cp", "transitive"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8baa36b152a15a9", "level": "warning", "message": {"text": "Vulnerable dependency brace-expansion 1.1.12: GHSA-f886-m6hf-6m8v"}, "properties": {"repobilityId": "c4fa6cea7167ee7e", "scanner": "scanner-primary", "fingerprint": "f8baa36b152a15a9", "layer": "dependencies", "severity": "medium", "confidence": 0.9, "tags": ["dependency", "sca", "osv", "GHSA-f886-m6hf-6m8v", "transitive"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bun.lock"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c29fee08cb03a50e", "level": "error", "message": {"text": "Dangling fetch: POST /api/models-config/test (components/ModelsConfig.tsx:546)"}, "properties": {"repobilityId": "8d0aaaaa606bbda9", "scanner": "scanner-primary", "fingerprint": "c29fee08cb03a50e", "layer": "api", "severity": "high", "confidence": 0.9, "tags": ["wiring", "dangling-fetch", "fetch"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ModelsConfig.tsx"}, "region": {"startLine": 546}}}]}, {"ruleId": "scanner-cac6681ba8e8fa1d", "level": "note", "message": {"text": "5 backend endpoints not called by scanned frontend"}, "properties": {"repobilityId": "3c8e96670c5e1f9f", "scanner": "scanner-primary", "fingerprint": "cac6681ba8e8fa1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}