Jan is an open source alternative to ChatGPT that runs 100% offline on your computer.
This report summarizes scanner evidence for janhq/jan, a Rust project with 45,191 GitHub stars. SynthScan examined 423,966 lines of code across 1954 source files, recording 1017 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 3.0 (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? 764 finding(s).
Are imports declared and package/API names verified? 129 finding(s).
Are wrappers, guards, and repeated structures necessary? 251 finding(s).
Which changes need focused human review? 1017 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 1017 distinct pattern matches across 19 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 | build-tui.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | web-app/src/hooks/useCoworkRun.ts | 221 | // terminal event); untouched by a `null` usage so a provider that doesn't | COMMENT |
| LOW | web-app/src/routes/threads/$threadId.tsx | 121 | } as const | COMMENT |
| LOW | web-app/src/routes/threads/$threadId.tsx | 141 | // controller, so a Stop settles that turn even when the user has sent another | COMMENT |
| LOW | web-app/src/routes/threads/$threadId.tsx | 1121 | // router path, leaving the SDK stream stuck at 'submitted' so the | COMMENT |
| LOW | web-app/src/routes/threads/$threadId.tsx | 1381 | } | COMMENT |
| LOW | extensions/llamacpp-extension/src/preset.ts | 661 | // A model with speculative decoding gets one slot when parallel is auto. | COMMENT |
| LOW | extensions/llamacpp-extension/src/preset.ts | 701 | // moe-cache-mib default = 0 (off): a GPU cache for the experts that | COMMENT |
| LOW | mlx-server/Sources/MLXServer/ReasoningSplitter.swift | 1 | import Foundation | COMMENT |
| LOW | packages/adk/tests/types.ts | 1 | // Compile-time assertions over the generated types and the public surface. | COMMENT |
| LOW | packages/adk/src/index.js | 1 | // JavaScript/TypeScript client for the Jan agent runtime. | COMMENT |
| LOW | packages/adk/src/index.js | 161 | }) | COMMENT |
| LOW | packages/adk/src/index.js | 241 | // Why the runtime failed this session, once it has: nothing it was still | COMMENT |
| LOW | packages/adk/src/index.js | 441 | } | COMMENT |
| LOW | packages/adk/src/index.js | 541 | // that cannot speak this protocol version fails before any work starts rather | COMMENT |
| LOW | packages/adk/src/install.js | 1 | // Installing a pinned Jan runtime, without a Rust toolchain and without Jan | COMMENT |
| LOW | packages/adk/src/install.js | 301 | // The archives are a tarball on macOS and Linux and a zip on Windows. The | COMMENT |
| LOW | packages/adk/src/index.d.ts | 1 | // The public surface of the JavaScript/TypeScript ADK, declared by hand over | COMMENT |
| LOW | .github/workflows/rust-check.yml | 161 | # a tree whose manifests agree but lag the last tag (0.8.5 through v0.8.8). | COMMENT |
| LOW | .github/workflows/rust-check.yml | 261 | # Each plugin and src-tauri/utils is its own workspace, so checking the app | COMMENT |
| LOW | .github/workflows/e2e-suite.yml | 1 | # Runs the desktop e2e suite against a real Jan build on all four supported | COMMENT |
| LOW | .github/workflows/jan-tauri-build-nightly.yaml | 221 | # build-linux-x64, | COMMENT |
| LOW | .github/workflows/jan-tauri-build-nightly.yaml | 241 | # get-update-version, | COMMENT |
| LOW | .github/workflows/jan-tauri-build-nightly.yaml | 261 | # set-public-provider, | COMMENT |
| LOW | .github/workflows/template-tauri-build-windows-x64.yml | 441 | # if: inputs.public_provider == 'github' | COMMENT |
| LOW | .github/workflows/template-cli-build-linux-x64.yml | 81 | # so a regression here would surface as a confusing linker error later. | COMMENT |
| LOW | .github/workflows/update-feed-check.yml | 1 | # Guards the release-update feeds that the in-app updater polls | COMMENT |
| LOW | .github/workflows/update-feed-check.yml | 21 | # build. (Follow-up: also run the live check as the final step of the publish | COMMENT |
| LOW | .github/scripts/stamp-version.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/scripts/stamp-version.sh | 21 | # bumping them is still a commit (see `chore(release): bump app version to | COMMENT |
| LOW | .github/scripts/rename-tauri-app.sh | 61 | COMMENT | |
| LOW | .github/actions/setup-engine-toolchain/action.yml | 61 | COMMENT | |
| LOW | src-tauri/jan-cli/tests/stream_json_host_tools.rs | 1 | //! `--host-tools` end to end, through the real binary. | COMMENT |
| LOW | src-tauri/jan-cli/tests/stream_json_init.rs | 1 | //! The first line of a `stream-json` run is the `init` handshake -- for a run | COMMENT |
| LOW | src-tauri/jan-cli/tests/tui_panic.rs | 1 | //! A panic inside the TUI (`JAN_TUI_PANIC_AFTER_RAW_MODE`, see | COMMENT |
| LOW | src-tauri/jan-cli/tests/rpc_parity.rs | 421 | /// A `permission/request` answered over RPC and the same prompt answered with a | COMMENT |
| LOW | src-tauri/jan-cli/tests/adk_examples.rs | 1 | //! The ADK cookbook's runnable source, run. | COMMENT |
| LOW | src-tauri/jan-cli/tests/agent_rpc.rs | 1181 | } | COMMENT |
| LOW | src-tauri/jan-cli/.cargo/config.toml | 1 | # Redirect build output into the desktop crate's target dir so the produced | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 61 | #[arg(long, default_value = ".")] | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 81 | /// Ignored when a subcommand is given. | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 101 | sandbox: bool, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 181 | /// it may take, `--max-budget-usd` bounds what it may spend; the token ceiling | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 241 | paste_token: bool, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 261 | /// figure loses digits, so this forwards the bytes as received. | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 281 | cmd: McpServeCommands, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 301 | force: bool, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 321 | /// Also serve the shell tool (runs under the same OS sandbox as the agent) | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 341 | /// the provider recorded -- not the local per-session estimate the TUI's bare | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 501 | #[command(flatten)] | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 521 | input_format: InputFormat, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 541 | project: String, | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 581 | /// Read/write the user-wide `~/.jan/config.toml` provider store. This is the | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 601 | #[arg(long)] | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 681 | /// Manage MCP servers in the shared <jan_data>/mcp_config.json, the same store | COMMENT |
| LOW | src-tauri/jan-cli/src/main.rs | 701 | /// Command for a stdio server (e.g. npx, uvx) | COMMENT |
| LOW | src-tauri/plugins/tauri-plugin-vector-db/src/db.rs | 41 | #[derive(Debug, Serialize, Deserialize, Clone)] | COMMENT |
| LOW | src-tauri/plugins/tauri-plugin-llamacpp/build.rs | 1 | //! Permission generation, plus the optional native llama.cpp engine build. | COMMENT |
| LOW | src-tauri/plugins/tauri-plugin-llamacpp/build.rs | 221 | /// nested. The toolchain file sets `CMAKE_SYSTEM_NAME`, which makes | COMMENT |
| LOW | src-tauri/plugins/tauri-plugin-llamacpp/build.rs | 341 | "cargo:rustc-env=JAN_GGML_BACKEND_DIR={}", | COMMENT |
| 497 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | build-tui.sh | 4 | # ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | build-tui.sh | 14 | # ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/FilePickerPopover.tsx | 12 | // ─── File-type icon helper ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/FilePickerPopover.tsx | 51 | // ─── Props ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 38 | // ── Types ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 42 | // ── Context ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 67 | // ── ChainOfThought (root) ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 190 | // ── ChainOfThoughtHeader ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 311 | // ── ChainOfThoughtContent ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 334 | // ── ChainOfThoughtText ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 361 | // ── ChainOfThoughtStep ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 403 | // ── ChainOfThoughtSearchResults ──────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 427 | // ── ChainOfThoughtSearchResult ───────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 448 | // ── ChainOfThoughtImage ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 468 | // ── Display names ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/lib/path-references.ts | 16 | // ── Exports ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/lib/path-references.ts | 65 | // ── Parsing references from text ───────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/lib/path-references.ts | 119 | // ── Fuzzy file search ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/lib/path-references.ts | 170 | // ── Resolving a single reference content ───────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/lib/path-references.ts | 296 | // ── Internal helpers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ib/mcp-orchestrator/__tests__/mcp-orchestrator.test.ts | 44 | // ─── below threshold — uses getTools() ─────────────────────────────────── | COMMENT |
| MEDIUM | …ib/mcp-orchestrator/__tests__/mcp-orchestrator.test.ts | 100 | // ─── above threshold — uses getToolsForServers() ───────────────────────── | COMMENT |
| MEDIUM | …ib/mcp-orchestrator/__tests__/mcp-orchestrator.test.ts | 137 | // ─── caching ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ib/mcp-orchestrator/__tests__/mcp-orchestrator.test.ts | 192 | // ─── summary caching ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ib/mcp-orchestrator/__tests__/mcp-orchestrator.test.ts | 222 | // ─── error resilience ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/services/__tests__/mcp.test.ts | 461 | // ─── getToolsForServers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web-app/src/services/__tests__/mcp.test.ts | 505 | // ─── getServerSummaries ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 115 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 117 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 204 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 206 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 279 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 281 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 26 | // ── Top-level CLI ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 434 | // ── Agent subcommands ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 632 | // ── Threads subcommands ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 655 | // ── Models subcommands ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 679 | // ── MCP subcommands ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 740 | // ── ASCII logo ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 760 | // ── Entry point ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 883 | // ── ACP server handler ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 908 | // ── MCP server handler ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 933 | // ── Update handler ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 1074 | // ── CLI dispatch ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 1090 | // ── Agent handlers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 1373 | // ── Threads handlers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 1413 | // ── Models handlers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/server/tests.rs | 584 | // ── Pure helper coverage ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 3676 | // ── intersect_allowed_tools ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 3852 | // ── resolve_dispatch ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 4273 | // ── event forwarding + final text ─────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 4358 | // ── tool schemas + arg parsing ────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 4372 | // ── background registry (spawn/await/abort) ───────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/subagent.rs | 4529 | // ── max-parallel admission (semaphore queue) ─────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/context.rs | 966 | // ── Runtime environment block ──────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/otel/encode.rs | 100 | // ── OTLP/JSON ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/otel/encode.rs | 229 | // ── OTLP/protobuf ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/otel/mod.rs | 385 | // ── The process-wide exporter ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/otel/mod.rs | 574 | // ── Aggregation ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/core/agent/otel/mod.rs | 1339 | // ── Export ─────────────────────────────────────────────────────────────────── | COMMENT |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web-app/src/providers/DataProvider.tsx | 73 | async function seedProviderKeysFromKeyring( | CODE |
| LOW | web-app/src/providers/KeyboardShortcuts.tsx | 13 | export function KeyboardShortcutsProvider() { | CODE |
| LOW | web-app/src/utils/reasoning.ts | 44 | export function extractReasoningFromMessage( | CODE |
| LOW | web-app/src/utils/toastPlacement.ts | 23 | export function getDefaultNotificationPosition(): NotificationPosition { | CODE |
| LOW | web-app/src/utils/error.ts | 30 | export function isLocalContextOverflowMessage(message: string): boolean { | CODE |
| LOW | web-app/src/components/left-sidebar/NavMain.tsx | 141 | function NavMainItemWithAnimatedIcon({ | CODE |
| LOW | web-app/src/hooks/useReconcileVideoCapability.ts | 38 | export function useReconcileVideoCapability( | CODE |
| LOW | web-app/src/lib/provider-api-keys.ts | 18 | export function providerRemoteApiKeyChain(provider: { | CODE |
| LOW | web-app/src/lib/migrateLocalStorageSettings.ts | 51 | async function transformModelProviderBlob( | CODE |
| LOW | web-app/src/lib/migrateLocalStorageSettings.ts | 148 | export async function migrateLocalStorageToBackend(): Promise<void> { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 224 | export function reconcileConstraintParams(body: Record<string, unknown>): void { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 367 | export function cleanUpstreamErrorMessage(raw: string): string { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 662 | export function stripAssistantReasoningInBody( | CODE |
| LOW | web-app/src/lib/model-factory.ts | 677 | function shouldStripReasoningFromContext(): boolean { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 708 | function withAssistantReasoningStripped( | CODE |
| LOW | web-app/src/lib/model-factory.ts | 728 | export function decodeAudioSentinelsInBody(body: Record<string, unknown>): void { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 770 | export function decodeVideoSentinelsInBody(body: Record<string, unknown>): void { | CODE |
| LOW | web-app/src/lib/model-factory.ts | 811 | export function decodeToolImageSentinelsInBody( | CODE |
| LOW | web-app/src/lib/model-factory.ts | 832 | function createApiKeyRotatingFetch( | CODE |
| LOW | web-app/src/lib/partialJson.ts | 88 | export function unescapePartialJsonString(raw: string): string { | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 171 | function extractModelSamplingDefaults( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 213 | function extractModelTemplateKwargs( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 238 | async function resolveThinkingBudgetTokens( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 294 | function normalizeToolInputSchemaValue(value: unknown): unknown { | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 478 | export function extractContextInfoFromError( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 518 | export function stripUnsupportedImageParts( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 672 | export function coalesceMessagesForAlternation( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 771 | export function buildLlamacppReasoningParams( | CODE |
| LOW | web-app/src/lib/custom-chat-transport.ts | 817 | function prependContinuationToUIStream( | CODE |
| LOW | web-app/src/lib/chatFinish.ts | 14 | export function providerHasContextSetting(provider: string | undefined): boolean { | CODE |
| LOW | web-app/src/lib/coworkPrompt.ts | 199 | export function buildSubagentSystemPrompt( | CODE |
| LOW | web-app/src/lib/messages.ts | 17 | export function convertUIMessageToThreadMessage( | CODE |
| LOW | web-app/src/lib/messages.ts | 138 | export function convertUIMessagesToThreadMessages( | CODE |
| LOW | web-app/src/lib/messages.ts | 255 | export function convertThreadMessageToUIMessage( | CODE |
| LOW | web-app/src/lib/messages.ts | 402 | export function uiMessageHasMeaningfulContent(message: { | CODE |
| LOW | web-app/src/lib/messages.ts | 452 | export function convertThreadMessagesToUIMessages( | CODE |
| LOW | web-app/src/lib/messages.ts | 491 | export function extractContentPartsFromUIMessage(message: UIMessage): ThreadContent[] { | CODE |
| LOW | web-app/src/lib/reasoningProviderOptions.ts | 58 | export function buildReasoningProviderOptions( | CODE |
| LOW | web-app/src/lib/utils.ts | 34 | export function disableIndentedCodeBlockPlugin() { | CODE |
| LOW | web-app/src/lib/backendDependencies.ts | 26 | export function getInstallRecommendations( | CODE |
| LOW | web-app/src/lib/mcp-router-model-filter.ts | 48 | export function isLikelyLightweightRouterModel(model: Model): boolean { | CODE |
| LOW | web-app/src/lib/thinkingBudget.ts | 26 | export function tokensForThinkingBudgetLevel( | CODE |
| LOW | web-app/src/lib/remoteModelCatalog.ts | 155 | function inferAnthropicCapabilities(id: string): string[] | null { | CODE |
| LOW | web-app/src/lib/context-manager.ts | 96 | export function estimateConversationTokens( | CODE |
| LOW | web-app/src/lib/toolCallRepair.ts | 12 | export function sanitizeInvalidJsonEscapes(raw: string): string { | CODE |
| LOW | web-app/src/lib/providerCaps.ts | 191 | export function buildsOwnToolImageRequest( | CODE |
| LOW | web-app/src/lib/providerCaps.ts | 208 | export function isPredefinedRemoteProvider( | CODE |
| LOW | web-app/src/lib/citation-parser.ts | 86 | export function parseCitationsFromToolOutput( | CODE |
| LOW | web-app/src/containers/DownloadButton.tsx | 27 | export function DownloadButtonPlaceholder({ | CODE |
| LOW | web-app/src/containers/ParametersSection.tsx | 462 | function isGroupCapabilitySupported( | CODE |
| LOW | web-app/src/containers/TokenCounterCompactSwitcher.tsx | 4 | export function TokenCounterCompactSwitcher() { | CODE |
| LOW | web-app/src/containers/NotificationPositionSwitcher.tsx | 30 | export function NotificationPositionSwitcher() { | CODE |
| LOW | …p/src/containers/dialogs/MissingDependenciesDialog.tsx | 23 | export default function MissingDependenciesDialog() { | CODE |
| LOW | …p/src/containers/dialogs/ImportLlamacppModelDialog.tsx | 126 | function detectEmbeddingFromMetadata( | CODE |
| LOW | …p/src/containers/dialogs/JanBrowserExtensionDialog.tsx | 31 | export default function JanBrowserExtensionDialog({ | CODE |
| LOW | web-app/src/containers/dialogs/llamacppRouterError.ts | 23 | export function stampErrorOnLastUserMessage( | CODE |
| LOW | …containers/dialogs/DeleteAllThreadsInProjectDialog.tsx | 25 | export function DeleteAllThreadsInProjectDialog({ | CODE |
| LOW | …p/src/containers/dialogs/AttachmentIngestionDialog.tsx | 14 | export default function AttachmentIngestionDialog() { | CODE |
| LOW | web-app/src/routes/threads/$threadId.tsx | 342 | function stampContextErrorOnThread( | CODE |
| LOW | web-app/src/services/app/console-logger.ts | 18 | export function installConsoleLogForwarding(): void { | CODE |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web-app/src/locales/de-DE/mcp-servers.json | 36 | "placeholder": "JSON Konfiguration eingeben", | CODE |
| LOW | web-app/src/locales/de-DE/common.json | 130 | "placeholder": { | CODE |
| LOW | web-app/src/locales/de-DE/common.json | 181 | "placeholder": "JSON-Konfiguration eingeben...", | CODE |
| LOW | web-app/src/locales/pl/mcp-servers.json | 36 | "placeholder": "Wprowadź konfigurację JSON", | CODE |
| LOW | web-app/src/locales/pl/common.json | 128 | "placeholder": { | CODE |
| LOW | web-app/src/locales/pl/common.json | 175 | "placeholder": "Wprowadź konfigurację JSON…", | CODE |
| LOW | web-app/src/locales/vn/mcp-servers.json | 36 | "placeholder": "Nhập cấu hình JSON", | CODE |
| LOW | web-app/src/locales/vn/common.json | 135 | "placeholder": { | CODE |
| LOW | web-app/src/locales/vn/common.json | 181 | "placeholder": "Nhập cấu hình JSON...", | CODE |
| LOW | web-app/src/locales/ja/mcp-servers.json | 36 | "placeholder": "JSON構成を入力", | CODE |
| LOW | web-app/src/locales/ja/common.json | 148 | "placeholder": { | CODE |
| LOW | web-app/src/locales/ja/common.json | 203 | "placeholder": "JSON構成を入力...", | CODE |
| LOW | web-app/src/locales/ja/providers.json | 97 | "placeholder": "sk-…\nsk-…", | CODE |
| LOW | web-app/src/locales/it/mcp-servers.json | 36 | "placeholder": "Inserisci la configurazione JSON", | CODE |
| LOW | web-app/src/locales/it/common.json | 143 | "placeholder": { | CODE |
| LOW | web-app/src/locales/it/common.json | 195 | "placeholder": "Inserisci configurazione JSON...", | CODE |
| LOW | web-app/src/locales/it/providers.json | 91 | "placeholder": "sk-…\nsk-…", | CODE |
| LOW | web-app/src/locales/ca/mcp-servers.json | 36 | "placeholder": "Introdueix la configuració JSON", | CODE |
| LOW | web-app/src/locales/ca/common.json | 123 | "placeholder": { | CODE |
| LOW | web-app/src/locales/ca/common.json | 175 | "placeholder": "Introdueix la configuració JSON...", | CODE |
| LOW | web-app/src/locales/cs/mcp-servers.json | 36 | "placeholder": "Zadejte konfiguraci JSON", | CODE |
| LOW | web-app/src/locales/cs/common.json | 130 | "placeholder": { | CODE |
| LOW | web-app/src/locales/cs/common.json | 182 | "placeholder": "Zadejte konfiguraci JSON...", | CODE |
| LOW | web-app/src/locales/ru/mcp-servers.json | 36 | "placeholder": "Введите конфигурацию JSON", | CODE |
| LOW | web-app/src/locales/ru/common.json | 130 | "placeholder": { | CODE |
| LOW | web-app/src/locales/ru/common.json | 182 | "placeholder": "Введите конфигурацию JSON", | CODE |
| LOW | web-app/src/locales/zh-CN/mcp-servers.json | 36 | "placeholder": "输入 JSON 配置", | CODE |
| LOW | web-app/src/locales/zh-CN/common.json | 142 | "placeholder": { | CODE |
| LOW | web-app/src/locales/zh-CN/common.json | 188 | "placeholder": "输入 JSON 配置...", | CODE |
| LOW | web-app/src/locales/zh-TW/mcp-servers.json | 36 | "placeholder": "輸入 JSON 設定", | CODE |
| LOW | web-app/src/locales/zh-TW/common.json | 142 | "placeholder": { | CODE |
| LOW | web-app/src/locales/zh-TW/common.json | 188 | "placeholder": "輸入 JSON 組態...", | CODE |
| LOW | web-app/src/locales/pt-BR/mcp-servers.json | 36 | "placeholder": "Digite a configuração JSON", | CODE |
| LOW | web-app/src/locales/pt-BR/common.json | 128 | "placeholder": { | CODE |
| LOW | web-app/src/locales/pt-BR/common.json | 179 | "placeholder": "Entre com a configuração do JSON...", | CODE |
| LOW | web-app/src/locales/hi/settings.json | 398 | "placeholder": "यहाँ अपना बॉट टोकन पेस्ट करें", | CODE |
| LOW | web-app/src/locales/hi/mcp-servers.json | 36 | "placeholder": "JSON कॉन्फ़िगरेशन दर्ज करें", | CODE |
| LOW | web-app/src/locales/hi/common.json | 142 | "placeholder": { | CODE |
| LOW | web-app/src/locales/hi/common.json | 194 | "placeholder": "JSON कॉन्फ़िगरेशन दर्ज करें...", | CODE |
| LOW | web-app/src/locales/ko/settings.json | 398 | "placeholder": "여기에 봇 토큰을 붙여넣으세요", | CODE |
| LOW | web-app/src/locales/ko/mcp-servers.json | 36 | "placeholder": "JSON 설정을 입력하세요", | CODE |
| LOW | web-app/src/locales/ko/common.json | 141 | "placeholder": { | CODE |
| LOW | web-app/src/locales/ko/common.json | 193 | "placeholder": "JSON 구성을 입력하세요...", | CODE |
| LOW | web-app/src/locales/id/mcp-servers.json | 36 | "placeholder": "Masukkan konfigurasi JSON", | CODE |
| LOW | web-app/src/locales/id/common.json | 130 | "placeholder": { | CODE |
| LOW | web-app/src/locales/id/common.json | 181 | "placeholder": "Masukkan konfigurasi JSON...", | CODE |
| LOW | web-app/src/locales/fr/mcp-servers.json | 36 | "placeholder": "Entrez la configuration JSON", | CODE |
| LOW | web-app/src/locales/fr/common.json | 130 | "placeholder": { | CODE |
| LOW | web-app/src/locales/fr/common.json | 181 | "placeholder": "Entrez la configuration JSON...", | CODE |
| LOW | web-app/src/locales/es/settings.json | 398 | "placeholder": "Pega tu token del bot aquí", | CODE |
| LOW | web-app/src/locales/es/mcp-servers.json | 36 | "placeholder": "Ingresa la configuración JSON", | CODE |
| LOW | web-app/src/locales/es/common.json | 142 | "placeholder": { | CODE |
| LOW | web-app/src/locales/es/common.json | 194 | "placeholder": "Ingresa la configuración JSON...", | CODE |
| LOW | web-app/src/locales/en/mcp-servers.json | 36 | "placeholder": "Enter JSON configuration", | CODE |
| LOW | web-app/src/locales/en/common.json | 243 | "placeholder": { | CODE |
| LOW | web-app/src/locales/en/common.json | 298 | "placeholder": "Enter JSON configuration...", | CODE |
| LOW | web-app/src/locales/en/common.json | 769 | "placeholder": "Ask for a plan. The agent won't change any files." | CODE |
| LOW | web-app/src/locales/en/providers.json | 113 | "placeholder": "sk-…\nsk-…", | CODE |
| LOW | web-app/src/containers/__tests__/ModelCombobox.test.tsx | 79 | expect(input).toHaveAttribute('placeholder', 'Type or select a model...') | CODE |
| LOW | web-app/src/containers/__tests__/ModelCombobox.test.tsx | 88 | expect(input).toHaveAttribute('placeholder', 'Choose a model') | CODE |
| 36 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web-app/src/components/ai-elements/chain-of-thought.tsx | 150 | // Accumulated, not replaced: an agentic turn reasons, answers, then | COMMENT |
| MEDIUM | …-elements/__tests__/chain-of-thought-duration.test.tsx | 84 | // An agentic turn reasons, answers, then reasons again. Each window used to | COMMENT |
| MEDIUM | web-app/src/hooks/useSkills.ts | 18 | // [] -> all skills enabled (scaffold default; backward compatible) | COMMENT |
| MEDIUM | web-app/src/lib/__tests__/skillStore.test.ts | 94 | // guest-js would silently drop the scaffold. | COMMENT |
| MEDIUM | src-tauri/jan-cli/src/main.rs | 188 | /// Fail the run after at most N agentic turns; bounds this run only, not | COMMENT |
| MEDIUM | …c-tauri/plugins/tauri-plugin-agent-tools/src/skills.rs | 348 | /// (backward-compatible with the agent.toml scaffold, which ships `enabled = []`). | COMMENT |
| MEDIUM | src-tauri/src/core/agent/global_config.rs | 1856 | // the scaffold are not preserved, but no provider data is lost). | COMMENT |
| MEDIUM | src-tauri/src/core/agent/store_migration.rs | 151 | // An empty store directory (a scaffold from an earlier launch that found | COMMENT |
| MEDIUM | src-tauri/src/core/agent/skills.rs | 735 | /// (backward-compatible with the agent.toml scaffold, which ships `enabled = []`). | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 173 | /// `enabled` list means "all skills" (backward-compatible with the scaffold | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 349 | # run. Defaults to the model's context window when unset (128000 if the window | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 673 | /// Delete keys an older scaffold wrote that nothing reads any more, in place and | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 675 | /// agent.toml is Jan's own scaffold in Jan's store, so tidying it here beats a | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 961 | /// The scaffold documents the key, so it has to stay parseable as written. | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 971 | // A mistyped --project (e.g. wrong case) must fail fast, not scaffold a | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 984 | /// user's (or `/init`'s) to create -- the scaffold must not plant an empty | COMMENT |
| MEDIUM | src-tauri/src/core/agent/project.rs | 1295 | /// The scaffold leaves the key commented out, so a fresh project picks up | COMMENT |
| MEDIUM | src-tauri/src/core/agent/compaction.rs | 251 | /// one. Forward first, since that drops the most; but a long agentic run under | COMMENT |
| MEDIUM | src-tauri/src/core/agent/compaction.rs | 987 | /// One prompt driving a long agentic run is the normal shape here: a single | COMMENT |
| MEDIUM | src-tauri/src/core/agent/context.rs | 240 | const SUBAGENT_GUIDE: &str = "# Subagents\n\nYour own context window is limited. For open-ended exploration \ | CODE |
| MEDIUM | src-tauri/src/core/cli/mod.rs | 1550 | /// `--max-turns`: hard cap on agentic turns for this run, and the only | COMMENT |
| MEDIUM | src-tauri/src/core/cli/mod.rs | 1687 | /// `--max-turns`: hard cap on agentic turns, and the only setting that | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | adk/python/jan_adk/session.py | 408 | except Exception: # noqa: BLE001 - nothing left to tell | CODE |
| HIGH | adk/python/jan_adk/runtime.py | 400 | except (ProcessLookupError, OSError): | CODE |
| HIGH | adk/python/jan_adk/runtime.py | 346 | except OSError: | CODE |
| HIGH | scripts/adk-nightly/smoke_client.py | 52 | except ProcessLookupError: | CODE |
| HIGH | autoqa/utils.py | 32 | except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): | CODE |
| HIGH | autoqa/utils.py | 49 | except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): | CODE |
| HIGH | autoqa/main.py | 128 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | web-app/src/routes/threads/__tests__/$threadId.test.tsx | 1034 | const added = h.messagesState.addMessage.mock.calls.map((c: any[]) => c[0]) | CODE |
| CRITICAL | web-app/src/routes/threads/__tests__/$threadId.test.tsx | 1063 | const added = h.messagesState.addMessage.mock.calls.map((c: any[]) => c[0]) | CODE |
| CRITICAL | web-app/src/routes/threads/__tests__/$threadId.test.tsx | 1078 | const added = h.messagesState.addMessage.mock.calls.map((c: any[]) => c[0]) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adk/python/jan_adk/session.py | 393 | except Exception as error: # noqa: BLE001 - classified below | CODE |
| LOW | adk/python/jan_adk/session.py | 408 | except Exception: # noqa: BLE001 - nothing left to tell | CODE |
| LOW | adk/python/jan_adk/runtime.py | 424 | except Exception as error: # noqa: BLE001 - one bad frame must not stop the reader | CODE |
| LOW | adk/python/jan_adk/runtime.py | 502 | except Exception as error: # noqa: BLE001 - a listener chose to raise | CODE |
| LOW | adk/python/jan_adk/errors.py | 68 | except Exception: # noqa: BLE001 | CODE |
| LOW | examples/adk/python/host_tool.py | 101 | except Exception as error: # the model sees this as the tool's error | CODE |
| LOW | autoqa/reportportal_handler.py | 40 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 64 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 161 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 207 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 265 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 282 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 328 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 395 | except Exception as e: | CODE |
| LOW | autoqa/reportportal_handler.py | 433 | except Exception as e: | CODE |
| LOW | autoqa/screen_recorder.py | 76 | except Exception as e: | CODE |
| LOW | autoqa/screen_recorder.py | 80 | except Exception as e: | CODE |
| LOW | autoqa/utils.py | 163 | except Exception as e: | STRING |
| LOW | autoqa/utils.py | 201 | except Exception as e: | STRING |
| LOW | autoqa/utils.py | 217 | except Exception as e2: | STRING |
| LOW | autoqa/utils.py | 285 | except Exception as e: | STRING |
| LOW | autoqa/utils.py | 316 | except Exception as e: | STRING |
| LOW⚡ | autoqa/test_runner.py | 143 | except Exception as e: | CODE |
| LOW⚡ | autoqa/test_runner.py | 201 | except Exception as e: | CODE |
| LOW | autoqa/test_runner.py | 185 | except Exception as e: | CODE |
| LOW | autoqa/test_runner.py | 249 | except Exception as e: | CODE |
| LOW | autoqa/test_runner.py | 257 | except Exception as upload_error: | CODE |
| LOW | autoqa/main.py | 120 | except Exception as e: | CODE |
| LOW | autoqa/main.py | 151 | except Exception as e: | CODE |
| LOW | autoqa/main.py | 380 | except Exception as e: | STRING |
| LOW | autoqa/main.py | 451 | except Exception as e: | STRING |
| LOW | autoqa/main.py | 480 | except Exception as e: | STRING |
| LOW | autoqa/main.py | 493 | except Exception as e: | STRING |
| MEDIUM | autoqa/main.py | 106 | def run_server(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adk/python/tests/test_adk.py | 14 | CODE | |
| LOW | adk/python/tests/harness.py | 9 | CODE | |
| LOW | adk/python/tests/test_install.py | 10 | CODE | |
| LOW | adk/python/jan_adk/_generated.py | 5 | CODE | |
| LOW | adk/python/jan_adk/session.py | 3 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 19 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 19 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 20 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 20 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 21 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 32 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 32 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 33 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 33 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 33 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 33 | CODE | |
| LOW | adk/python/jan_adk/__init__.py | 33 | CODE | |
| LOW | adk/python/jan_adk/_queue.py | 8 | CODE | |
| LOW | adk/python/jan_adk/runtime.py | 9 | CODE | |
| LOW | adk/python/jan_adk/install.py | 21 | CODE | |
| LOW | adk/python/jan_adk/errors.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …orkflows/template-tauri-build-windows-x64-external.yml | 84 | # Check if it has a "-" | COMMENT |
| LOW | …orkflows/template-tauri-build-windows-x64-external.yml | 88 | # Check if it is rcX-beta | COMMENT |
| LOW | .github/workflows/template-tauri-build-windows-x64.yml | 196 | # Check if it has a "-" | COMMENT |
| LOW | .github/workflows/template-tauri-build-windows-x64.yml | 200 | # Check if it is rcX-beta | COMMENT |
| LOW | .github/workflows/autoqa-template.yml | 393 | # Check if Homebrew is available | COMMENT |
| LOW | .github/scripts/rename-uninstaller.sh | 6 | # Check if the correct number of arguments is provided | COMMENT |
| LOW | .github/scripts/rename-uninstaller.sh | 14 | # Check if the file exists | COMMENT |
| LOW | .github/scripts/rename-app.sh | 3 | # Check if the correct number of arguments is provided | COMMENT |
| LOW | .github/scripts/rename-app.sh | 19 | # Check if the input file exists | COMMENT |
| LOW | .github/scripts/auto-sign.sh | 3 | # Check if both APP_PATH and DEVELOPER_ID environment variables are set | COMMENT |
| LOW | .github/scripts/rename-tauri-app.sh | 3 | # Check if the correct number of arguments is provided | COMMENT |
| LOW | .github/scripts/rename-tauri-app.sh | 19 | # Check if the input file exists | COMMENT |
| LOW | .github/scripts/rename-workspace.sh | 8 | # Check if the file exists | COMMENT |
| LOW | autoqa/utils.py | 304 | # Read file content | STRING |
| LOW | autoqa/main.py | 139 | # Check if thread is still alive (server is running) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/components/OAICoverage/index.tsx | 109 | // Step 2: Find the first date for each group | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 82 | # Step 1: Check and force close Jan app if running | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 87 | # Step 2: Start Jan app in maximized mode | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 93 | # Step 3: Start screen recording | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 96 | # Step 4: Create agent for this test using config | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 151 | # Step 6: Run the test with prompt | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 197 | # Step 7: Stop screen recording | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 204 | # Step 8: Upload results to ReportPortal only if enabled | COMMENT |
| LOW | autoqa/test_runner.py | 108 | # Step 5: Start monitoring thread | COMMENT |
| LOW | autoqa/test_runner.py | 317 | # Step 9: Always force close Jan app after test completion | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web-app/src/lib/custom-chat-transport.ts | 1744 | // user sees a seamless continuation rather than an empty box. | COMMENT |
| MEDIUM | adk/python/jan_adk/_generated.py | 518 | # SHA-256 of the request body as Jan built it, as canonical JSON: every object's keys sorted, recursively, so re-enc | COMMENT |
| MEDIUM | scripts/find-missing-i18n-key.js | 72 | /\bt\(\s*["']([^"']+)["']\s*(?:,\s*[^)]+)?\)/g, // Match t("key") format with optional parameters - simplified and mor | CODE |
| MEDIUM | .github/workflows/e2e-suite.yml | 2 | # platforms. e2e-check.yml is the per-PR gate and only type-checks the harness; | COMMENT |
| MEDIUM | .github/workflows/e2e-suite.yml | 148 | # Produces the debug binary the harness expects at | COMMENT |
| MEDIUM | src-tauri/src/core/openai_schema.rs | 51 | /// To be robust, we default `type` to `"string"` for description-only leaf schemas | COMMENT |
| MEDIUM | src-tauri/src/core/agent/goal.rs | 71 | /// Seconds elapsed since the goal was set (saturating; robust to clock skew). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/components/OAICoverage/index.tsx | 109 | // Step 2: Find the first date for each group | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 82 | # Step 1: Check and force close Jan app if running | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 87 | # Step 2: Start Jan app in maximized mode | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 93 | # Step 3: Start screen recording | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 96 | # Step 4: Create agent for this test using config | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 151 | # Step 6: Run the test with prompt | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 197 | # Step 7: Stop screen recording | COMMENT |
| LOW⚡ | autoqa/test_runner.py | 204 | # Step 8: Upload results to ReportPortal only if enabled | COMMENT |
| LOW | autoqa/test_runner.py | 108 | # Step 5: Start monitoring thread | COMMENT |
| LOW | autoqa/test_runner.py | 317 | # Step 9: Always force close Jan app after test completion | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adk/python/jan_adk/install.py | 358 | CODE | |
| LOW | examples/adk/python/host_tool.py | 47 | CODE | |
| LOW | examples/adk/python/first_turn.py | 20 | CODE | |
| LOW | autoqa/reportportal_handler.py | 12 | CODE | |
| LOW | autoqa/reportportal_handler.py | 93 | CODE | |
| LOW | autoqa/reportportal_handler.py | 192 | CODE | |
| LOW | autoqa/reportportal_handler.py | 291 | CODE | |
| LOW | autoqa/utils.py | 58 | CODE | |
| LOW | autoqa/utils.py | 168 | CODE | |
| LOW | autoqa/utils.py | 221 | CODE | |
| LOW | autoqa/test_runner.py | 18 | CODE | |
| LOW | autoqa/test_runner.py | 109 | CODE | |
| LOW | autoqa/main.py | 287 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adk/python/jan_adk/__init__.py | 37 | __all__ = [ | CODE |
| LOW | autoqa/reportportal_handler.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | autoqa/screen_recorder.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | autoqa/utils.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | autoqa/test_runner.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | autoqa/main.py | 24 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | adk/python/jan_adk/session.py | 119 | self._queue.push(event) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | autoqa/test_runner.py | 155 | # Create the agent task | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | build-tui.sh | 8 | # Usage: | COMMENT |
| LOW | jan-agent.sh | 3 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adk/python/jan_adk/runtime.py | 71 | CODE | |
| LOW | adk/python/jan_adk/runtime.py | 201 | CODE |