An app that brings language models directly to your phone.
This report summarizes scanner evidence for a-ghorbani/pocketpal-ai, a TypeScript project with 8,907 GitHub stars. SynthScan examined 343,427 lines of code across 1605 source files, recording 344 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.5 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 159 finding(s).
Are imports declared and package/API names verified? 180 finding(s).
Are wrappers, guards, and repeated structures necessary? 52 finding(s).
Which changes need focused human review? 344 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 344 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/types/pal.ts | 260 | "placeholder": "e.g., Medieval fantasy kingdom", | CODE |
| LOW⚡ | src/types/pal.ts | 267 | "placeholder": "e.g., Royal castle throne room", | CODE |
| LOW⚡ | src/types/pal.ts | 274 | "placeholder": "e.g., Wise wizard advisor", | CODE |
| LOW⚡ | src/types/pal.ts | 281 | "placeholder": "e.g., Young adventurer", | CODE |
| LOW⚡ | src/types/pal.ts | 288 | "placeholder": "e.g., Seeking advice before a dangerous quest", | CODE |
| LOW⚡ | src/types/pal.ts | 295 | "placeholder": "e.g., Epic fantasy, lighthearted adventure", | CODE |
| LOW | src/locales/zh.json | 468 | "placeholder": "在此输入聊天模板...", | CODE |
| LOW | src/locales/zh.json | 473 | "placeholder": "添加新停止词" | CODE |
| LOW⚡ | src/locales/zh.json | 568 | "placeholder": "例如:摘要、角色扮演等。" | CODE |
| LOW⚡ | src/locales/zh.json | 572 | "placeholder": "您希望看到哪些新功能?" | CODE |
| LOW⚡ | src/locales/zh.json | 576 | "placeholder": "如果您有其他想法,请随时分享。" | CODE |
| LOW | src/locales/zh.json | 589 | "placeholder": "您的电子邮件地址" | CODE |
| LOW | src/locales/zh.json | 973 | "placeholder": "选择模型" | CODE |
| LOW | src/locales/zh.json | 977 | "placeholder": "描述此 Pal 的角色、目的或场景..." | CODE |
| LOW | src/locales/zh.json | 989 | "placeholder": "你是一个乐于助人的助手" | CODE |
| LOW | src/locales/ms.json | 468 | "placeholder": "Masukkan templat sembang anda di sini...", | CODE |
| LOW | src/locales/ms.json | 473 | "placeholder": "Tambah perkataan henti baharu" | CODE |
| LOW⚡ | src/locales/ms.json | 568 | "placeholder": "cth., meringkaskan, main peranan, dll." | CODE |
| LOW⚡ | src/locales/ms.json | 572 | "placeholder": "Ciri apa yang anda mahu lihat?" | CODE |
| LOW⚡ | src/locales/ms.json | 576 | "placeholder": "Kongsi pemikiran lain yang anda ada." | CODE |
| LOW | src/locales/ms.json | 589 | "placeholder": "Alamat emel anda" | CODE |
| LOW | src/locales/ms.json | 973 | "placeholder": "Pilih model" | CODE |
| LOW | src/locales/ms.json | 977 | "placeholder": "Terangkan peranan, tujuan, atau senario untuk Pal ini..." | CODE |
| LOW | src/locales/ms.json | 989 | "placeholder": "Anda adalah pembantu yang membantu" | CODE |
| LOW | src/locales/ja.json | 468 | "placeholder": "チャットテンプレートをここに入力...", | CODE |
| LOW | src/locales/ja.json | 473 | "placeholder": "新しいストップワードを追加" | CODE |
| LOW⚡ | src/locales/ja.json | 568 | "placeholder": "例:要約、ロールプレイなど" | CODE |
| LOW⚡ | src/locales/ja.json | 572 | "placeholder": "追加してほしい機能をお知らせください" | CODE |
| LOW⚡ | src/locales/ja.json | 576 | "placeholder": "その他のご感想やアイデアをぜひお聞かせください" | CODE |
| LOW | src/locales/ja.json | 589 | "placeholder": "メールアドレス" | CODE |
| LOW | src/locales/ja.json | 973 | "placeholder": "モデルを選択" | CODE |
| LOW | src/locales/ja.json | 977 | "placeholder": "このPalの役割、目的、シナリオを説明してください..." | CODE |
| LOW | src/locales/ja.json | 989 | "placeholder": "あなたは役立つアシスタントです" | CODE |
| LOW | src/locales/de.json | 468 | "placeholder": "Chatvorlage hier eingeben...", | CODE |
| LOW | src/locales/de.json | 473 | "placeholder": "Neues Stopwort hinzufügen" | CODE |
| LOW⚡ | src/locales/de.json | 568 | "placeholder": "z.b. zur Zusammenfassung, für Rollenspiele, etc." | CODE |
| LOW⚡ | src/locales/de.json | 572 | "placeholder": "Welche Funktion würden Sie gerne sehen wollen?" | CODE |
| LOW⚡ | src/locales/de.json | 576 | "placeholder": "Teilen Sie ihre weiteren Gedanken mit." | CODE |
| LOW | src/locales/de.json | 589 | "placeholder": "Ihre E-Mail-Adresse" | CODE |
| LOW | src/locales/de.json | 983 | "placeholder": "Modell auswählen" | CODE |
| LOW | src/locales/de.json | 987 | "placeholder": "Beschreib die Rolle, Zweck, oder Szenario für diesen Pal..." | CODE |
| LOW | src/locales/de.json | 999 | "placeholder": "Du bist ein hilfsbereiter Assistent" | CODE |
| LOW | src/locales/ru.json | 452 | "placeholder": "Выбрать модель" | CODE |
| LOW | src/locales/ru.json | 456 | "placeholder": "Опишите роль, цель или сценарий для этого Pal..." | CODE |
| LOW | src/locales/ru.json | 468 | "placeholder": "Вы полезный ассистент" | CODE |
| LOW⚡ | src/locales/ru.json | 782 | "placeholder": "напр., суммаризация, ролевая игра и т.д." | CODE |
| LOW⚡ | src/locales/ru.json | 786 | "placeholder": "Чего вам не хватает в приложении?" | CODE |
| LOW⚡ | src/locales/ru.json | 790 | "placeholder": "Поделитесь любыми другими мыслями или пожеланиями." | CODE |
| LOW | src/locales/ru.json | 803 | "placeholder": "Ваш Email" | CODE |
| LOW | src/locales/ru.json | 986 | "placeholder": "Введите шаблон чата...", | CODE |
| LOW | src/locales/ru.json | 991 | "placeholder": "Добавить стоп-слово" | CODE |
| LOW | src/locales/pl.json | 447 | "placeholder": "Dodaj nowe słowo wykluczające" | CODE |
| LOW | src/locales/pl.json | 455 | "placeholder": "Wprowadź tutaj szablon czatu...", | CODE |
| LOW | src/locales/pl.json | 548 | "placeholder": "Twój adres e-mail" | CODE |
| LOW⚡ | src/locales/pl.json | 562 | "placeholder": "np. streszczanie, odgrywanie ról itp." | CODE |
| LOW⚡ | src/locales/pl.json | 566 | "placeholder": "Jakie funkcje chcesz zobaczyć?" | CODE |
| LOW⚡ | src/locales/pl.json | 570 | "placeholder": "Podziel się wszelkimi innymi przemyśleniami, jakie przyjdą Ci do głowy." | CODE |
| LOW | src/locales/pl.json | 949 | "placeholder": "Wybierz model" | CODE |
| LOW | src/locales/pl.json | 953 | "placeholder": "Opisz rolę, przeznaczenie lub scenariusz dla tego kumpla..." | CODE |
| LOW | src/locales/pl.json | 965 | "placeholder": "Jesteś pomocnym asystentem" | CODE |
| 112 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ns/ModelsScreen/ModelCard/__tests__/ModelCard.test.tsx | 670 | l10n.en.models.modelCapabilities.mtp.replace( | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.pipeline.test.ts | 470 | return h.api.refresh.mock.calls.at(-1)![2]; | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.pipeline.test.ts | 1531 | const palFetches = h.store.fetchProducts.mock.calls.filter( | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.recover.test.ts | 630 | expect(h.api.refresh.mock.calls.at(-1)![2][PAL_ID].purchaseRef).toBe( | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.plus.test.ts | 165 | h.storage.setItem.mock.calls.filter(([key]) => key === PLUS_KEY), | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.plus.test.ts | 338 | h.storage.getItem.mock.calls.filter(([key]) => key === PLUS_KEY), | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.plus.test.ts | 968 | h.store.fetchProducts.mock.calls.filter(([ids]) => | CODE |
| CRITICAL | src/store/__tests__/PurchaseStore.plus.test.ts | 1035 | h.store.fetchProducts.mock.calls.some(([ids]) => | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | .github/workflows/release.yml | 60 | # Step 2: Set up JDK 17 | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 67 | # Step 3: Set up Node.js | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 74 | # Step 4: Install dependencies using Yarn | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 99 | # Step 5: Set up Ruby and Bundler | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 106 | # Step 6: Combined version bump | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 111 | # Step 7: Commit and push version changes | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 125 | # Step 8: Set up Android Keystore | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 131 | # Step 9: Authenticate to Google Cloud | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 289 | # Step 2: Set up Node.js | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 296 | # Step 3: Install dependencies using Yarn | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 300 | # Step 4: Set up Ruby and Bundler | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 307 | # Step 5: Install CocoaPods dependencies | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 312 | # Step 6: Create Env.xcconfig | COMMENT |
| LOW | .github/workflows/release.yml | 45 | # Step 1: Checkout the code | COMMENT |
| LOW | .github/workflows/release.yml | 248 | # Step 11: Create GitHub Release with APK | COMMENT |
| LOW | .github/workflows/release.yml | 277 | # Step 1: Select the default Xcode shipped on macOS 26. | COMMENT |
| LOW | .github/workflows/release.yml | 323 | # Step 7: Create .env file | COMMENT |
| LOW | .github/workflows/release.yml | 347 | # Step 8: Build and upload iOS app to TestFlight | COMMENT |
| LOW | .github/workflows/release.yml | 361 | # Step 9: Extract iOS version info for dSYM artifact naming | COMMENT |
| LOW | .github/workflows/release.yml | 372 | # Step 10: Retain dSYM as a workflow artifact for crash symbolication (FOU-86) | COMMENT |
| LOW | .github/workflows/ci.yml | 57 | # Step 1: Check out the repository | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 68 | # Step 2: Set up Node.js environment | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 78 | # Step 3: Install dependencies and iOS Pods | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 82 | # Step 4: Validate l10n files | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 91 | # Step 5: Run linters (ESLint) | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 95 | # Step 5: Run TypeScript type checks | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 99 | # Step 6: Run unit tests (Jest) | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 97 | # Step 1: Build (unless skipped) | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 108 | # Step 2: Run memory profile E2E spec | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 124 | # Step 3: Compare with baseline (if provided) | COMMENT |
| LOW | …c/hooks/__tests__/useChatSession.assistantTurn.test.ts | 890 | // Step 0: invoke calculate. Step 1: invoke datetime. Step 2: final | COMMENT |
| LOW⚡ | src/services/agent/__tests__/AgentRunner.test.ts | 801 | // Step 0: model emits marker, parsed tool_calls arrive → | COMMENT |
| LOW⚡ | src/services/agent/__tests__/AgentRunner.test.ts | 803 | // Step 1: model emits marker again in the follow-up content. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | .github/workflows/release.yml | 60 | # Step 2: Set up JDK 17 | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 67 | # Step 3: Set up Node.js | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 74 | # Step 4: Install dependencies using Yarn | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 99 | # Step 5: Set up Ruby and Bundler | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 106 | # Step 6: Combined version bump | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 111 | # Step 7: Commit and push version changes | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 125 | # Step 8: Set up Android Keystore | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 131 | # Step 9: Authenticate to Google Cloud | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 289 | # Step 2: Set up Node.js | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 296 | # Step 3: Install dependencies using Yarn | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 300 | # Step 4: Set up Ruby and Bundler | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 307 | # Step 5: Install CocoaPods dependencies | COMMENT |
| LOW⚡ | .github/workflows/release.yml | 312 | # Step 6: Create Env.xcconfig | COMMENT |
| LOW | .github/workflows/release.yml | 45 | # Step 1: Checkout the code | COMMENT |
| LOW | .github/workflows/release.yml | 248 | # Step 11: Create GitHub Release with APK | COMMENT |
| LOW | .github/workflows/release.yml | 277 | # Step 1: Select the default Xcode shipped on macOS 26. | COMMENT |
| LOW | .github/workflows/release.yml | 323 | # Step 7: Create .env file | COMMENT |
| LOW | .github/workflows/release.yml | 347 | # Step 8: Build and upload iOS app to TestFlight | COMMENT |
| LOW | .github/workflows/release.yml | 361 | # Step 9: Extract iOS version info for dSYM artifact naming | COMMENT |
| LOW | .github/workflows/release.yml | 372 | # Step 10: Retain dSYM as a workflow artifact for crash symbolication (FOU-86) | COMMENT |
| LOW | .github/workflows/ci.yml | 57 | # Step 1: Check out the repository | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 68 | # Step 2: Set up Node.js environment | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 78 | # Step 3: Install dependencies and iOS Pods | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 82 | # Step 4: Validate l10n files | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 91 | # Step 5: Run linters (ESLint) | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 95 | # Step 5: Run TypeScript type checks | COMMENT |
| LOW⚡ | .github/workflows/ci.yml | 99 | # Step 6: Run unit tests (Jest) | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 97 | # Step 1: Build (unless skipped) | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 108 | # Step 2: Run memory profile E2E spec | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 124 | # Step 3: Compare with baseline (if provided) | COMMENT |
| LOW | …c/hooks/__tests__/useChatSession.assistantTurn.test.ts | 890 | // Step 0: invoke calculate. Step 1: invoke datetime. Step 2: final | COMMENT |
| LOW⚡ | src/services/agent/__tests__/AgentRunner.test.ts | 801 | // Step 0: model emits marker, parsed tool_calls arrive → | COMMENT |
| LOW⚡ | src/services/agent/__tests__/AgentRunner.test.ts | 803 | // Step 1: model emits marker again in the follow-up content. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | __mocks__/utils/completionSettingsVersions.js | 34 | export function migrateCompletionSettings(settings) { | CODE |
| LOW | scripts/verify-android-payload.js | 100 | function assertRuleDemandsSomething(rule, manifestPath) { | CODE |
| LOW | scripts/verify-fonts.js | 216 | function verifyHeadlineGlyphCoverage() { | CODE |
| LOW | scripts/__tests__/language-sync.test.js | 30 | function parseLanguageAssertionKeys(specSource) { | CODE |
| LOW | scripts/__tests__/generate-app-icons.test.js | 566 | function palPointsOutsideSafeCircle(text) { | CODE |
| LOW | e2e/specs/quick-smoke.spec.ts | 38 | async function dismissPerformanceWarningIfPresent(): Promise<void> { | CODE |
| LOW | e2e/specs/load-stress.spec.ts | 76 | async function dismissPerformanceWarningIfPresent(): Promise<void> { | CODE |
| LOW | e2e/specs/features/speculative.spec.ts | 159 | async function enableSpeculativeGlobally( | CODE |
| LOW | e2e/specs/features/hub-run.spec.ts | 56 | async function dismissPerformanceWarningIfPresent(): Promise<void> { | CODE |
| LOW | e2e/specs/features/speculative-paired.spec.ts | 257 | async function enableSpeculativeGlobally( | CODE |
| LOW | e2e/helpers/model-actions.ts | 67 | export async function dismissPerformanceWarningIfPresent(): Promise<void> { | CODE |
| LOW | e2e/helpers/model-actions.ts | 93 | export async function dismissContextRoomSheetIfPresent(): Promise<void> { | CODE |
| LOW | e2e/helpers/model-actions.ts | 254 | export async function downloadAndLoadModelVariant( | CODE |
| LOW | e2e/helpers/gestures.ts | 296 | async function swipeUpInSheetBelowInputs(): Promise<void> { | CODE |
| LOW | e2e/helpers/gestures.ts | 337 | async function scrollInSheetClearOfOverlay( | CODE |
| LOW | e2e/helpers/gestures.ts | 375 | async function scrollInSheetToElementExists( | CODE |
| LOW | src/types/pal.ts | 351 | export function getDefaultTemplateForPalType( | CODE |
| LOW | src/__automation__/deepLink.ts | 33 | export async function dispatchAutomationDeepLink( | CODE |
| LOW | src/utils/hf.ts | 81 | export function createSiblingsFromFileDetails( | CODE |
| LOW | src/utils/completionSettingsVersions.ts | 57 | export function migrateCompletionSettings(settings: any): any { | CODE |
| LOW | src/utils/hexagonDetection.ts | 81 | export function isHexagonVersionSupported(version: HexagonVersion): boolean { | CODE |
| LOW | src/utils/flashAttnCompatibility.ts | 174 | export function getAllowedCacheTypeVOptions( | CODE |
| LOW | src/utils/flashAttnCompatibility.ts | 207 | export function getAllowedCacheTypeKOptions( | CODE |
| LOW | src/utils/bannerVariantResolver.ts | 35 | function endsWithTerminalPunctuation(text: string | undefined): boolean { | CODE |
| LOW | src/utils/chat.ts | 439 | export function getLocalModelDefaultSettings(): { | CODE |
| LOW | src/utils/contextInitParamsVersions.ts | 198 | export function validateContextInitParams( | CODE |
| LOW | src/utils/contextInitParamsVersions.ts | 217 | export function createDefaultContextInitParams(): ContextInitParams { | CODE |
| LOW | src/utils/palshub-template-parser.ts | 90 | function convertJsonSchemaToPocketPal( | CODE |
| LOW | src/utils/palshub-template-parser.ts | 141 | function extractDefaultParametersFromSchema( | CODE |
| LOW | src/utils/palshub-template-parser.ts | 173 | export function generateFinalSystemPrompt( | CODE |
| LOW | src/utils/palshub-template-parser.ts | 206 | function processParametersForMustache( | CODE |
| LOW | src/utils/deviceSelection.ts | 230 | export function validateModelQuantizationForDevice( | CODE |
| LOW | src/utils/memoryEstimator.ts | 89 | export function getModelMemoryRequirement( | CODE |
| LOW | src/utils/index.ts | 517 | export async function enrichSiblingsWithStorage( | CODE |
| LOW | src/utils/androidPermission.ts | 4 | export async function ensureLegacyStoragePermission() { | CODE |
| LOW | src/utils/androidPermission.ts | 46 | async function askNotificationPermission(): Promise<void> { | CODE |
| LOW | src/utils/androidPermission.ts | 58 | export function ensureNotificationPermission(): Promise<void> { | CODE |
| LOW | src/utils/multimodalHelpers.ts | 51 | export function getRecommendedProjectionModel( | CODE |
| LOW | src/utils/multimodalHelpers.ts | 128 | export function getVisionModelSizeBreakdown( | CODE |
| LOW | src/utils/reasoningCapability.ts | 85 | export function resolveReasoningCapability( | CODE |
| LOW | src/utils/deviceCapabilities.ts | 193 | export async function getRecommendedThreadCount(): Promise<number> { | CODE |
| LOW | src/theme/tokens/typography.ts | 233 | export function resolveTypographyForLocale( | CODE |
| LOW | src/api/openai.ts | 196 | function liftModelEntryCapabilities( | CODE |
| LOW | src/api/feedback.ts | 243 | export async function submitModelLoadErrorReport( | CODE |
| LOW | src/services/tts/streamingHandle.ts | 32 | export function createEngineStreamingHandle( | CODE |
| LOW | src/services/talents/registerTalentUIs.ts | 18 | export function resetRegisteredTalentUIsFlag(): void { | CODE |
| LOW | src/services/talents/index.ts | 94 | export function collectSystemPromptFragments( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .eslintrc.js | 61 | files: ['scripts/**/*.js'], | COMMENT |
| LOW | ios/PocketPal-Bridging-Header.h | 1 | // | COMMENT |
| LOW | ios/PocketPal/AppIntents/LlamaInferenceEngine.swift | 1 | // | COMMENT |
| LOW | ios/PocketPal/AppIntents/LlamaContextWrapper.mm | 1 | // | COMMENT |
| LOW | ios/PocketPal/AppIntents/MustacheRenderer.swift | 1 | // | COMMENT |
| LOW | ios/PocketPal/AppIntents/LlamaContextWrapper.h | 1 | // | COMMENT |
| LOW | ios/PocketPal/AppIntents/LlamaContextWrapper.h | 41 | - (NSString *)getFormattedChat:(NSString *)messages | COMMENT |
| LOW | android/app/src/main/jni/CMakeLists.txt | 1 | # PocketPal application CMake. | COMMENT |
| LOW | android/app/src/main/jni/src/hardware_info.cpp | 1 | // JNI shim exposing bionic's mallopt(M_PURGE_ALL) to React Native. | COMMENT |
| LOW | .github/workflows/l10n-upload.yml | 1 | # Weblate Translation Workflow Lifecycle: | COMMENT |
| LOW | .github/actions/setup-hexagon-sdk/action.yml | 1 | name: Set up the Hexagon SDK | COMMENT |
| LOW | e2e/specs/features/speculative.spec.ts | 281 | expect(responseText.length).toBeGreaterThan(0); | COMMENT |
| LOW | e2e/scripts/memory-profile.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | src/__automation__/logSignals.ts | 121 | // "llama_model_load_from_file_impl: using device GPUOpenCL (QUALCOMM Adreno(TM) 840) ..." | COMMENT |
| LOW | src/__automation__/logSignals.ts | 141 | // Layer-offload reuses `offloadedRe` because the underlying log line | COMMENT |
| LOW | src/__automation__/benchmarkRoute.ts | 1 | // Deep-link protocol surface for the E2E benchmark runner. Owns the URL | COMMENT |
| LOW | src/__automation__/benchmarkRoute.ts | 21 | return typeof url === 'string' && url.startsWith(BENCHMARK_RUNNER_URL_PREFIX); | COMMENT |
| LOW | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 561 | // From here on the runner acquires global state (native logging, | COMMENT |
| LOW | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 641 | }; | COMMENT |
| LOW | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 741 | createdAt: '', | COMMENT |
| LOW | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 981 | // Without this distinction, a single cell failure would make the spec | COMMENT |
| LOW | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 1041 | // tear-down on a worker thread, Hexagon HTP FastRPC | COMMENT |
| LOW | src/utils/multimodalPatterns.ts | 1 | // Projector (mmproj) filename pattern. Kept in a dependency-free module so the | COMMENT |
| LOW | …eens/OnboardingScreens/illustrations/PhoneWithPals.tsx | 41 | * hex in the file outside the inline Figma palette constants | COMMENT |
| LOW | src/components/ChatView/ChatView.tsx | 461 | // One reconciled "keyboard occlusion above the input" value. The library | COMMENT |
| LOW | src/components/ChatView/ChatView.tsx | 1021 | COMMENT | |
| LOW | src/components/ChatView/__tests__/ChatView.test.tsx | 201 | onSendPress={onSendPress} | COMMENT |
| LOW | src/components/ThinkingBubble/ThinkingBubble.tsx | 61 | // Track animation state to optimize rendering | COMMENT |
| LOW | src/components/ResponseBubble/ResponseBubble.tsx | 141 | // // Scroll when layout changes | COMMENT |
| LOW | src/theme/tokens/__tests__/invariants.test.ts | 101 | describe('no production consumer of new token surface yet', () => { | COMMENT |
| LOW | src/hooks/useDeepLinking.ts | 121 | // Two paths: | COMMENT |
| LOW | src/hooks/useChatSession.ts | 901 | // resumption from queue.next(), starving the macrotask queue | COMMENT |
| LOW | src/hooks/useChatSession.ts | 1001 | const isToolArgsParseError = | COMMENT |
| LOW | src/services/agent/__tests__/agentStateReducer.test.ts | 341 | s = agentStateReducer(s, e); | COMMENT |
| LOW | src/store/ModelStore.ts | 241 | COMMENT | |
| LOW | src/store/UIStore.ts | 61 | // Persisted so each model warns at most once per device. | COMMENT |
| LOW | src/store/ChatSessionStore.ts | 101 | // Draft autosave: ephemeral map of sessionId → unsent input text | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/locales/index.ts | 8 | // ─── Language Registry (single source of truth) ────────────────────── | COMMENT |
| MEDIUM | src/locales/index.ts | 59 | // ─── Lazy Loading ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/locales/index.ts | 119 | // ─── Getter-based l10n object ──────────────────────────────────────── | COMMENT |
| MEDIUM | src/locales/index.ts | 173 | // ─── Interpolation helper ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/locales/index.ts | 191 | // ─── Dayjs locale ─────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/e2e-tests.yml | 160 | # This build may ADD test scaffolding — different flavor, automation | COMMENT |
| MEDIUM | e2e/README.md | 289 | │ ├── run-aws-device-farm.ts # AWS Device Farm orchestration | CODE |
| MEDIUM | …/screens/OnboardingScreens/Onboarding3Screen/styles.ts | 6 | // Image to its intrinsic 1572×925 inside the centered scaffold body. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | e2e/testspec-android.yml | 4 | # This file defines the test environment and execution steps for Appium Node.js tests | COMMENT |
| MEDIUM | e2e/testspec-ios.yml | 4 | # This file defines the test environment and execution steps for Appium Node.js tests | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/__automation__/screens/BenchmarkRunnerScreen.tsx | 483 | // than throwing — keeps the matrix robust to a typo'd config value | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/ci.yml | 38 | # Check if ALL changed files are under src/locales/ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | e2e/scripts/memory-profile.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/store/UIStore.ts | 95 | // TODO: Implement error display logic (e.g., toast, alert, etc.) | COMMENT |