⚡️ Open-source AI Gateway — Use any SDK to call 100+ LLMs. Built-in failover, load balancing, cost control & end-to-end tracing.
This report summarizes scanner evidence for looplj/axonhub, a Go project with 5,416 GitHub stars. SynthScan examined 821,812 lines of code across 2716 source files, recording 698 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 1.2 (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? 616 finding(s).
Are imports declared and package/API names verified? 67 finding(s).
Are wrappers, guards, and repeated structures necessary? 212 finding(s).
Which changes need focused human review? 698 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 698 distinct pattern matches across 15 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 | config.example.yml | 1 | # yaml-language-server: $schema=https://github.com/looplj/axonhub/releases/latest/download/config.schema.json | COMMENT |
| LOW | config.example.yml | 181 | # Examples: | COMMENT |
| LOW | config.example.yml | 201 | # Warning channels are checked at check_interval / ratio | COMMENT |
| LOW | .golangci.yml | 341 | no-prefix-comments: false | COMMENT |
| LOW | .golangci.yml | 361 | reformat-tags: false | COMMENT |
| LOW | .golangci.yml | 401 | # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. | COMMENT |
| LOW | docker-compose.yml | 1 | # AxonHub Docker Compose Configuration | COMMENT |
| LOW | docker-compose.yml | 101 | interval: 30s | COMMENT |
| LOW | docker-compose.yml | 121 | # # 配置文件挂载 - 用于复杂配置 | COMMENT |
| LOW | docker-compose.yml | 141 | # "--tries=1", | COMMENT |
| LOW | docker-compose.yml | 161 | # - mysql_data:/var/lib/mysql | COMMENT |
| LOW | docker-compose.yml | 181 | # - "${AXONHUB_BIND_ADDRESS:-127.0.0.1}:${AXONHUB_HOST_PORT:-8090}:8090" | COMMENT |
| LOW | docker-compose.yml | 201 | # healthcheck: | COMMENT |
| LOW | …t/openai/responses/streaming/client_disconnect_test.go | 21 | // | COMMENT |
| LOW | llm/embedding.go | 101 | type EmbeddingRequest struct { | COMMENT |
| LOW | llm/tools.go | 41 | // such as OpenAI Responses. Flat-name transformers use Name and ignore it. | COMMENT |
| LOW | llm/model.go | 21 | COMMENT | |
| LOW | llm/model.go | 41 | // | COMMENT |
| LOW | llm/model.go | 61 | // documentation](https://platform.openai.com/docs/api-reference/parameter-details) | COMMENT |
| LOW | llm/model.go | 81 | // [o-series models](https://platform.openai.com/docs/guides/reasoning). | COMMENT |
| LOW | llm/model.go | 101 | COMMENT | |
| LOW | llm/model.go | 121 | // model considers the results of the tokens with top_p probability mass. So 0.1 | COMMENT |
| LOW | llm/model.go | 141 | COMMENT | |
| LOW | llm/model.go | 161 | // increase likelihood of selection; values like -100 or 100 should result in a ban | COMMENT |
| LOW | llm/model.go | 181 | // Please note that not all models support audio and image generation. | COMMENT |
| LOW | llm/model.go | 201 | COMMENT | |
| LOW | llm/model.go | 221 | // Whether to enable | COMMENT |
| LOW | llm/model.go | 281 | COMMENT | |
| LOW | llm/model.go | 301 | // - "include": []string - additional output data to include in the model response | COMMENT |
| LOW | llm/model.go | 401 | COMMENT | |
| LOW | llm/model.go | 421 | // Annotations contains citation information for the message. | COMMENT |
| LOW | llm/model.go | 441 | // Signature is opaque provider data and must not be concatenated or modified. | COMMENT |
| LOW | llm/model.go | 661 | // And other llm provider should convert the response to this format. | COMMENT |
| LOW | llm/pipeline/pipeline.go | 41 | // also implement to override the global max same-channel retries for the current | COMMENT |
| LOW | llm/pipeline/middleware.go | 21 | // Timing: Once per Request, before any attempts. | COMMENT |
| LOW | llm/pipeline/middleware.go | 41 | // Timing: Once per failed Attempt. | COMMENT |
| LOW | llm/httpclient/decoder.go | 81 | // newline, as sent by synthetic.new) loses its terminal event entirely. The | COMMENT |
| LOW | llm/httpclient/decoder.go | 161 | func (r *newlineTerminatingReader) Close() error { | COMMENT |
| LOW | llm/httpclient/decoder.go | 181 | // Why we close the underlying reader instead of sse.Stream.Close: | COMMENT |
| LOW | llm/httpclient/decoder.go | 201 | // that race is gone at the source. The pass-through producer goroutine | COMMENT |
| LOW | llm/oauth/device_flow_provider.go | 61 | // Returns the exchanged token, expiration timestamp, and any error. | COMMENT |
| LOW | llm/transformer/interfaces.go | 41 | // The returned httpclient.Request must have RequestType and APIFormat fields set, | COMMENT |
| LOW | llm/transformer/gemini/convert.go | 81 | // OTHER Unknown reason. | COMMENT |
| LOW | llm/transformer/gemini/model.go | 161 | } | COMMENT |
| LOW | llm/transformer/gemini/model.go | 181 | // for the parameter. For function with no parameters, this can be left unset. Parameter | COMMENT |
| LOW | llm/transformer/gemini/model.go | 421 | TokenID int64 `json:"tokenId,omitempty"` | COMMENT |
| LOW | llm/transformer/gemini/convert_test.go | 521 | }) | COMMENT |
| LOW | llm/transformer/gemini/openai/outbound.go | 161 | } | COMMENT |
| LOW | llm/transformer/aisdk/model.go | 41 | type Usage struct { | COMMENT |
| LOW | llm/transformer/aisdk/model.go | 61 | // State of the part. | COMMENT |
| LOW | llm/transformer/aisdk/model.go | 81 | URL string `json:"url,omitempty"` | COMMENT |
| LOW | llm/transformer/aisdk/steam.go | 1 | package aisdk | COMMENT |
| LOW | llm/transformer/anthropic/outbound_stream.go | 341 | default: | COMMENT |
| LOW | llm/transformer/anthropic/outbound_stream_delta_test.go | 21 | // errors in the openai-go client's streaming parser. | COMMENT |
| LOW | llm/transformer/anthropic/tool_blocks.go | 21 | // `caller` object as json.RawMessage so it round-trips without the proxy | COMMENT |
| LOW | …mer/anthropic/server_tool_use_stream_roundtrip_test.go | 21 | // anthropic SSE → llm.Response chunks → anthropic SSE pipeline with the | COMMENT |
| LOW | llm/transformer/anthropic/outbound.go | 181 | // System and developer messages are extracted into the top-level system | COMMENT |
| LOW | llm/transformer/anthropic/model.go | 21 | // A list of beta features to use for this request, for bedrock only. | COMMENT |
| LOW | llm/transformer/anthropic/model.go | 41 | // Recommended for advanced use cases only. You usually only need to use | COMMENT |
| LOW | llm/transformer/anthropic/model.go | 61 | // | COMMENT |
| 223 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | integration_test/gemini/node/qa_simple.js | 68 | function containsAnyCaseInsensitive(text, ...substrings) { | CODE |
| LOW | integration_test/gemini/node/qa_simple.js | 130 | async function testSimpleQAWithDifferentQuestion() { | CODE |
| LOW | integration_test/gemini/node/streaming.js | 61 | async function testBasicStreamingChatCompletion() { | CODE |
| LOW | integration_test/gemini/node/streaming.js | 109 | async function testLongResponseStreaming() { | CODE |
| LOW | frontend/tests/data-storages.spec.ts | 4 | async function createFilesystemDataStorage(page: Page) { | CODE |
| LOW | frontend/tests/responsive-page-header.spec.ts | 28 | async function expectPaginationReachable(page: Page, pagination: Locator, table: Locator) { | CODE |
| LOW | frontend/src/gql/graphql.ts | 42 | export function isUnauthorizedGraphQLError(error: any): boolean { | CODE |
| LOW | frontend/src/features/traces/utils/span-display.ts | 67 | export function getSpanTypeTranslationKey(type?: string | null): string { | CODE |
| LOW | frontend/src/features/traces/data/traces.ts | 86 | function buildTraceWithRequestTracesQuery() { | CODE |
| LOW | …eatures/projects/components/projects-action-dialog.tsx | 343 | function ProjectProfilesDialogWrapper() { | CODE |
| LOW | …/apikeys/components/apikeys-create-template-dialog.tsx | 28 | export function ApiKeyCreateTemplateDialog({ open, onOpenChange }: ApiKeyCreateTemplateDialogProps) { | CODE |
| LOW | …nd/src/features/apikeys/components/apikeys-dialogs.tsx | 36 | function ApiKeysProfilesDialogWrapper() { | CODE |
| LOW | …nd/src/features/apikeys/components/apikeys-dialogs.tsx | 72 | function ApiKeysProfileTemplatesDialogWrapper() { | CODE |
| LOW | …pikeys/components/apikeys-profile-templates-dialog.tsx | 95 | export function ApiKeysProfileTemplatesDialog({ open, onOpenChange }: ApiKeysProfileTemplatesDialogProps) { | CODE |
| LOW | …s/apikeys/components/apikeys-load-template-popover.tsx | 84 | export function ApiKeyLoadTemplatePopover({ | CODE |
| LOW | …pikeys/components/apikeys-template-transfer-dialog.tsx | 62 | export function exportApiKeyProfileTemplate(template: ApiKeyProfileTemplate) { | CODE |
| LOW | …pikeys/components/apikeys-template-transfer-dialog.tsx | 83 | export function ApiKeyTemplateTransferDialog({ open, onOpenChange, mode, template }: ApiKeyTemplateTransferDialogProps) | CODE |
| LOW | frontend/src/features/apikeys/data/schema.ts | 25 | export function normalizeRoutingPolicyValue(value?: string | null): string { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 134 | function buildCreateApiKeyMutation(permissions: { canViewUsers: boolean }) { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 161 | function buildUpdateApiKeyMutation(permissions: { canViewUsers: boolean }) { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 858 | export function useApiKeyProfileTemplates(projectID: string | null) { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 885 | export function useCreateApiKeyProfileTemplate() { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 911 | export function useUpdateApiKeyProfileTemplate() { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 935 | export function useDeleteApiKeyProfileTemplate() { | CODE |
| LOW | frontend/src/features/apikeys/data/apikeys.ts | 961 | export function useLoadApiKeyProfileTemplate() { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 175 | function dailyTimeRangeHasDifferentEndpoints(value: string): boolean { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 229 | function hasDailyTimeConditionNode(condition?: FilterBuilderCondition): boolean { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 245 | function validateWhenConditionNode( | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 472 | function isCompleteAssociationFormRow(assoc: AssociationFormRow, inheritedModelID?: string) { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 590 | function formAssociationToModelAssociation(assoc: AssociationFormRow): ModelAssociation { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 645 | function modelAssociationToFormRow(assoc: ModelAssociation, inheritModel = false): AssociationFormRow { | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 672 | function buildDeveloperChannelPreview(associations: AssociationFormRow[], channelOptions: ChannelOption[]): ModelChannel | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 1197 | function readPromptTokensCondition( | CODE |
| LOW | …atures/models/components/models-association-dialog.tsx | 1325 | function AssociationTypeSelectContent({ isDeveloperMode }: { isDeveloperMode: boolean }) { | CODE |
| LOW | frontend/src/features/models/data/schema.ts | 132 | export function normalizeModelRoutingPolicyValue(value?: string | null): string { | CODE |
| LOW | …ntend/src/features/models/data/association-priority.ts | 18 | export function hasInvalidAssociationPriority(priorities: ReadonlyArray<number | null | undefined>): boolean { | CODE |
| LOW | frontend/src/features/models/data/providers.ts | 101 | export function useRefreshProvidersCatalog() { | CODE |
| LOW | frontend/src/features/models/data/models.ts | 750 | export function useQueryUnassociatedChannels() { | CODE |
| LOW | frontend/src/features/models/data/models.ts | 779 | export function useQueryModelChannelConnections() { | CODE |
| LOW | frontend/src/features/requests/index.tsx | 142 | function parseRequestSearchFilters(search: Record<string, unknown>): RequestSearchFilters { | CODE |
| LOW | frontend/src/features/requests/utils/curl-generator.ts | 17 | function getApiFormatFromChannelType(channelType?: ChannelType): ApiFormat | undefined { | CODE |
| LOW | frontend/src/features/requests/utils/curl-generator.ts | 111 | function generateResponsesWebSocketCommand(headers: Record<string, unknown> | undefined, body: unknown, url: string): st | CODE |
| LOW | …nd/src/features/requests/utils/upstream-model-audit.ts | 74 | export function getRequestModelAuditTooltip(modelAudit: ModelAuditSummary, requestStatus: ModelAuditExecution['status'], | CODE |
| LOW | …nd/src/features/requests/utils/upstream-model-audit.ts | 99 | export function getExecutionModelAuditVerdict( | CODE |
| LOW | …es/requests/components/request-conversation-viewer.tsx | 398 | export function RequestConversationViewer({ body, format, className }: RequestConversationViewerProps) { | CODE |
| LOW | frontend/src/features/requests/data/requests.ts | 182 | function buildRequestDetailPollingQuery(permissions: { canViewApiKeys: boolean; canViewChannels: boolean; canViewCallerU | CODE |
| LOW | frontend/src/features/requests/data/requests.ts | 228 | function buildRequestExecutionsQuery(permissions: { canViewChannels: boolean }) { | CODE |
| LOW | …-storages/components/data-storages-primary-buttons.tsx | 9 | export function DataStoragesPrimaryButtons() { | CODE |
| LOW | …src/features/dashboard/channel-success-rates/index.tsx | 19 | export default function DashboardChannelSuccessRates() { | CODE |
| LOW | frontend/src/features/dashboard/data/dashboard.ts | 642 | export function useChannelPerformanceStats() { | CODE |
| LOW | …res/system/components/codex-compatibility-settings.tsx | 40 | export function CodexCompatibilitySettings() { | CODE |
| LOW | frontend/src/features/system/data/quotas.ts | 447 | export function isClineActivePassQuotaData(qd: ProviderClineQuotaData): qd is ProviderClinePassQuotaData { | CODE |
| LOW | frontend/src/features/system/data/quotas.ts | 451 | export function isClineUnavailablePassQuotaData(qd: ProviderClineQuotaData): qd is ProviderClineUnavailablePassQuotaData | CODE |
| LOW | …src/features/system/data/claude-code-safeguards-api.ts | 23 | export function useClaudeCodeSafeguardsSettings() { | CODE |
| LOW | …src/features/system/data/claude-code-safeguards-api.ts | 37 | export function useSaveClaudeCodeSafeguardsSettings() { | CODE |
| LOW | …nd/src/features/system/data/codex-compatibility-api.ts | 71 | export function useCodexCompatibilitySettings() { | CODE |
| LOW | …nd/src/features/system/data/codex-compatibility-api.ts | 90 | export function useCodexCompatibilityEnabled() { | CODE |
| LOW | …nd/src/features/system/data/codex-compatibility-api.ts | 128 | export function useUpdateCodexCompatibilitySettings() { | CODE |
| LOW | frontend/src/features/system/data/system.ts | 613 | export function useUpdateWebhookNotifierConfig() { | CODE |
| LOW | frontend/src/features/system/data/system.ts | 650 | export function useUpdateDefaultDataStorage() { | CODE |
| 137 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | integration_test/gemini/README.md | 49 | export TEST_AXONHUB_API_KEY="your-api-key-here" | CODE |
| HIGH | integration_test/openai/README.md | 77 | export TEST_AXONHUB_API_KEY="your-api-key-here" | CODE |
| HIGH | …gration_test/openai/chat/load_balance/TESTING_GUIDE.md | 9 | export TEST_AXONHUB_API_KEY="your-api-key" | CODE |
| HIGH | integration_test/openai/chat/load_balance/README.md | 96 | export TEST_AXONHUB_API_KEY="your-api-key" | CODE |
| HIGH | docs/zh/api-reference/anthropic-api.md | 112 | - **头部**:`X-API-Key: <your-api-key>` | CODE |
| HIGH | docs/zh/api-reference/rerank-api.md | 80 | - **请求头**:`Authorization: Bearer <your-api-key>` | CODE |
| HIGH⚡ | docs/zh/api-reference/openai-api.md | 661 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH⚡ | docs/zh/api-reference/openai-api.md | 667 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH⚡ | docs/zh/api-reference/openai-api.md | 673 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH | docs/zh/api-reference/openai-api.md | 728 | - **头部**:`Authorization: Bearer <your-api-key>` | CODE |
| HIGH | docs/zh/api-reference/gemini-api.md | 161 | - **头部**:`X-Goog-API-Key: <your-api-key>` | CODE |
| HIGH | docs/zh/api-reference/embedding-api.md | 161 | - **请求头**: `Authorization: Bearer <your-api-key>` | CODE |
| HIGH | docs/zh/guides/security.md | 100 | -H "Authorization: Bearer your-api-key" \ | CODE |
| HIGH | docs/zh/guides/security.md | 105 | -H "Authorization: Bearer your-api-key" \ | CODE |
| HIGH | docs/en/api-reference/anthropic-api.md | 112 | - **Header**: `X-API-Key: <your-api-key>` | CODE |
| HIGH | docs/en/api-reference/rerank-api.md | 80 | - **Header**: `Authorization: Bearer <your-api-key>` | CODE |
| HIGH⚡ | docs/en/api-reference/openai-api.md | 684 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH⚡ | docs/en/api-reference/openai-api.md | 690 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH⚡ | docs/en/api-reference/openai-api.md | 696 | -H "Authorization: Bearer your-api-key" | jq | CODE |
| HIGH | docs/en/api-reference/openai-api.md | 751 | - **Header**: `Authorization: Bearer <your-api-key>` | CODE |
| HIGH | docs/en/api-reference/gemini-api.md | 161 | - **Header**: `X-Goog-API-Key: <your-api-key>` | CODE |
| HIGH | docs/en/api-reference/embedding-api.md | 161 | - **Header**: `Authorization: Bearer <your-api-key>` | CODE |
| HIGH | docs/en/guides/security.md | 100 | -H "Authorization: Bearer your-api-key" \ | CODE |
| HIGH | docs/en/guides/security.md | 105 | -H "Authorization: Bearer your-api-key" \ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | llm/pipeline/pipeline.go | 291 | // Step 1: Transform httpclient.Request to llm.Request using inbound transformer | COMMENT |
| LOW⚡ | llm/pipeline/pipeline.go | 300 | // Step 2: Apply before request middlewares | COMMENT |
| LOW | llm/pipeline/pipeline.go | 313 | // Step 3: Process the request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 160 | // Step 1: Transform Gemini request to LLM Request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 190 | // Step 2: Transform LLM Request to Gemini outbound request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 215 | // Step 3: Simulate Gemini response and transform back | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 246 | // Step 4: Transform Gemini response to LLM Response | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 260 | // Step 5: Transform LLM Response back to Gemini format | COMMENT |
| LOW⚡ | llm/transformer/gemini/integraion_test.go | 722 | // Step 1: Gemini -> LLM | COMMENT |
| LOW⚡ | llm/transformer/gemini/integraion_test.go | 726 | // Step 2: LLM -> Gemini | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 176 | // Step 1: Transform Anthropic request to ChatCompletionRequest | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 193 | // Step 2: Transform ChatCompletionRequest to Anthropic outbound request | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 220 | // Step 3: Simulate Anthropic response and transform back | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 247 | // Step 4: Transform Anthropic response to ChatCompletionResponse | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 265 | // Step 5: Transform ChatCompletionResponse back to Anthropic format | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 34 | // Step 1: Check for explicit suffix | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 43 | // Step 2: Check for explicit antigravity- prefix | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 48 | // Step 3: Check for Antigravity-only models | COMMENT |
| LOW | llm/transformer/antigravity/router.go | 74 | // Step 4: Default to Gemini CLI quota for standard Gemini models | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 110 | // Step 1: Inbound transformation (HTTP -> ChatCompletionRequest) | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 125 | // Step 2: Outbound transformation (ChatCompletionRequest -> HTTP) | COMMENT |
| LOW⚡ | llm/transformer/openai/integration_test.go | 139 | // Step 3: Execute HTTP request | COMMENT |
| LOW⚡ | llm/transformer/openai/integration_test.go | 149 | // Step 4: Outbound response transformation (HTTP -> ChatCompletionResponse) | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 173 | // Step 5: Inbound response transformation (ChatCompletionResponse -> HTTP) | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 16 | // Step 1: Create a new project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 44 | // Step 2: Edit the project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 71 | // Step 3: Archive the project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 97 | // Step 4: Activate the project | COMMENT |
| LOW | frontend/tests/project-users.spec.ts | 16 | // Step 1: Create a new user first | COMMENT |
| LOW⚡ | frontend/tests/project-users.spec.ts | 49 | // Step 2: Navigate back to project users page | COMMENT |
| LOW⚡ | frontend/tests/project-users.spec.ts | 54 | // Step 3: Add the newly created user to project | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 23 | // Step 1: Create a new channel | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 115 | // Step 2: Edit the channel (click the dedicated edit button in the actions cell) | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 145 | // Step 3: Archive the channel | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 247 | // Step 1: Create a channel with a custom response timeout. | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 317 | // Step 2: Reopen the channel and verify the override was persisted and echoed. | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 329 | // Step 3: Switch back to inherit and confirm the override is cleared. | COMMENT |
| LOW⚡ | internal/server/biz/system_onboarding_test.go | 271 | // Step 1: Initially no onboarding info | COMMENT |
| LOW⚡ | internal/server/biz/system_onboarding_test.go | 276 | // Step 2: Complete system model setting onboarding | COMMENT |
| LOW | internal/server/biz/system_onboarding_test.go | 288 | // Step 3: Complete main onboarding | COMMENT |
| LOW | internal/server/biz/system_onboarding_test.go | 302 | // Step 4: Complete auto-disable channel onboarding explicitly (should update timestamp) | COMMENT |
| LOW | internal/server/biz/channel_llm.go | 170 | // NOTE: This function panics when there is no enabled API key. This is intended as an assertion: | COMMENT |
| LOW | internal/server/gql/dashboard.resolvers.go | 783 | // Step 1: Get success/failure counts from request_execution | COMMENT |
| LOW | internal/server/api/copilot.go | 180 | // Step 1: Request device code from GitHub | COMMENT |
| LOW | internal/server/api/copilot.go | 300 | // Step 2: Poll for access token | COMMENT |
| LOW⚡ | internal/server/orchestrator/performance_test.go | 190 | // Step 1: Inbound request processing | COMMENT |
| LOW⚡ | internal/server/orchestrator/performance_test.go | 200 | // Step 2: Outbound request processing (this is where the bug occurred) | COMMENT |
| LOW⚡ | docs/en/guides/api-key-profiles.md | 57 | ### Step 1: Open the profile UI | COMMENT |
| LOW⚡ | docs/en/guides/api-key-profiles.md | 65 | ### Step 2: Create a profile | COMMENT |
| LOW⚡ | docs/en/guides/api-key-profiles.md | 71 | ### Step 3: Configure model mappings | COMMENT |
| LOW | docs/en/guides/api-key-profiles.md | 91 | ### Step 4: Set the active profile | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | llm/pipeline/pipeline.go | 291 | // Step 1: Transform httpclient.Request to llm.Request using inbound transformer | COMMENT |
| LOW⚡ | llm/pipeline/pipeline.go | 300 | // Step 2: Apply before request middlewares | COMMENT |
| LOW | llm/pipeline/pipeline.go | 313 | // Step 3: Process the request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 160 | // Step 1: Transform Gemini request to LLM Request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 190 | // Step 2: Transform LLM Request to Gemini outbound request | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 215 | // Step 3: Simulate Gemini response and transform back | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 246 | // Step 4: Transform Gemini response to LLM Response | COMMENT |
| LOW | llm/transformer/gemini/integraion_test.go | 260 | // Step 5: Transform LLM Response back to Gemini format | COMMENT |
| LOW⚡ | llm/transformer/gemini/integraion_test.go | 722 | // Step 1: Gemini -> LLM | COMMENT |
| LOW⚡ | llm/transformer/gemini/integraion_test.go | 726 | // Step 2: LLM -> Gemini | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 176 | // Step 1: Transform Anthropic request to ChatCompletionRequest | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 193 | // Step 2: Transform ChatCompletionRequest to Anthropic outbound request | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 220 | // Step 3: Simulate Anthropic response and transform back | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 247 | // Step 4: Transform Anthropic response to ChatCompletionResponse | COMMENT |
| LOW | llm/transformer/anthropic/integration_test.go | 265 | // Step 5: Transform ChatCompletionResponse back to Anthropic format | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 34 | // Step 1: Check for explicit suffix | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 43 | // Step 2: Check for explicit antigravity- prefix | COMMENT |
| LOW⚡ | llm/transformer/antigravity/router.go | 48 | // Step 3: Check for Antigravity-only models | COMMENT |
| LOW | llm/transformer/antigravity/router.go | 74 | // Step 4: Default to Gemini CLI quota for standard Gemini models | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 110 | // Step 1: Inbound transformation (HTTP -> ChatCompletionRequest) | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 125 | // Step 2: Outbound transformation (ChatCompletionRequest -> HTTP) | COMMENT |
| LOW⚡ | llm/transformer/openai/integration_test.go | 139 | // Step 3: Execute HTTP request | COMMENT |
| LOW⚡ | llm/transformer/openai/integration_test.go | 149 | // Step 4: Outbound response transformation (HTTP -> ChatCompletionResponse) | COMMENT |
| LOW | llm/transformer/openai/integration_test.go | 173 | // Step 5: Inbound response transformation (ChatCompletionResponse -> HTTP) | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 16 | // Step 1: Create a new project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 44 | // Step 2: Edit the project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 71 | // Step 3: Archive the project | COMMENT |
| LOW | frontend/tests/projects.spec.ts | 97 | // Step 4: Activate the project | COMMENT |
| LOW | frontend/tests/project-users.spec.ts | 16 | // Step 1: Create a new user first | COMMENT |
| LOW⚡ | frontend/tests/project-users.spec.ts | 49 | // Step 2: Navigate back to project users page | COMMENT |
| LOW⚡ | frontend/tests/project-users.spec.ts | 54 | // Step 3: Add the newly created user to project | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 23 | // Step 1: Create a new channel | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 115 | // Step 2: Edit the channel (click the dedicated edit button in the actions cell) | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 145 | // Step 3: Archive the channel | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 247 | // Step 1: Create a channel with a custom response timeout. | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 317 | // Step 2: Reopen the channel and verify the override was persisted and echoed. | COMMENT |
| LOW | frontend/tests/channels.spec.ts | 329 | // Step 3: Switch back to inherit and confirm the override is cleared. | COMMENT |
| LOW⚡ | internal/server/biz/system_onboarding_test.go | 271 | // Step 1: Initially no onboarding info | COMMENT |
| LOW⚡ | internal/server/biz/system_onboarding_test.go | 276 | // Step 2: Complete system model setting onboarding | COMMENT |
| LOW | internal/server/biz/system_onboarding_test.go | 288 | // Step 3: Complete main onboarding | COMMENT |
| LOW | internal/server/biz/system_onboarding_test.go | 302 | // Step 4: Complete auto-disable channel onboarding explicitly (should update timestamp) | COMMENT |
| LOW | internal/server/gql/dashboard.resolvers.go | 783 | // Step 1: Get success/failure counts from request_execution | COMMENT |
| LOW | internal/server/api/copilot.go | 180 | // Step 1: Request device code from GitHub | COMMENT |
| LOW | internal/server/api/copilot.go | 300 | // Step 2: Poll for access token | COMMENT |
| LOW⚡ | internal/server/orchestrator/performance_test.go | 190 | // Step 1: Inbound request processing | COMMENT |
| LOW⚡ | internal/server/orchestrator/performance_test.go | 200 | // Step 2: Outbound request processing (this is where the bug occurred) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/channels/components/channels-model-mapping-dialog.tsx | 385 | <p className='text-destructive mt-2 text-sm'>{form.formState.errors.extraModelPrefix.message.toStrin | CODE |
| CRITICAL | …/channels/components/channels-model-mapping-dialog.tsx | 555 | <p className='text-destructive text-sm'>{form.formState.errors.modelMappings.message.toString()}</p> | CODE |
| CRITICAL | …tures/channels/components/channels-override-dialog.tsx | 460 | <p className='text-destructive text-sm'>{t(form.formState.errors.headerOverrideOperations.message. | CODE |
| CRITICAL | …tures/channels/components/channels-override-dialog.tsx | 489 | <p className='text-destructive text-sm'>{t(form.formState.errors.bodyOverrideOperations.message.to | CODE |
| CRITICAL | internal/server/orchestrator/pass_through.go | 443 | if clientUA := outbound.state.LlmRequest.RawRequest.Headers.Get("User-Agent"); clientUA != "" { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 36 | // ─── Layout constants ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 52 | // ─── Color ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 67 | // ─── Tree layout (variable height) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 123 | // ─── Span info for node data ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 137 | // ─── Convert to ReactFlow elements ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 193 | // ─── Custom Segment Node ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 292 | // ─── Inner component (inside ReactFlowProvider) ────────────────────────────── | COMMENT |
| MEDIUM | …src/features/traces/components/trace-flow-timeline.tsx | 339 | // ─── Export ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 73 | // ── internal navigation state ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 97 | // ── toggle for expanding/collapsing all string values ──────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 119 | // ── fetch detail for current request ────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 135 | // ── active tab ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 151 | // ── copy / curl ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 184 | // ── navigation ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/features/requests/components/request-body-drawer.tsx | 276 | // ── render ───────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/sidebar.ts | 101 | email: user?.email || 'user@example.com', | CODE |
| LOW | frontend/src/locales/zh-CN/base.json | 294 | "initialization.form.placeholders.ownerEmail": "admin@example.com", | CODE |
| LOW | frontend/src/locales/en/base.json | 218 | "initialization.form.placeholders.ownerEmail": "admin@example.com", | CODE |
| LOW | frontend/src/features/chats/data/convo.json | 110 | "fullName": "John Doe", | CODE |
| LOW | internal/ent/migrate/datamigrate/v0.3.0_test.go | 284 | SetEmail("user@example.com"). | CODE |
| LOW | internal/ent/migrate/datamigrate/v1.0.0-beta7_test.go | 129 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 146 | SetEmail("admin@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 214 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 441 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 479 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 546 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 582 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 617 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 662 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 692 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 818 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 862 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 928 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 995 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1073 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1109 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1172 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1214 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1327 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1368 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1417 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/user_test.go | 1468 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/role_test.go | 539 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/permission_validator_test.go | 65 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/permission_validator_test.go | 295 | SetEmail("user@example.com"). | CODE |
| LOW | internal/server/biz/oidc_claims_test.go | 14 | "email": "user@example.com", | CODE |
| LOW | internal/server/biz/oidc_claims_test.go | 24 | require.Equal(t, "user@example.com", claims.Email) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 232 | print(message.content)`, | CODE |
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 251 | print(message.content)`, | CODE |
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 267 | print(response.output_text)`, | CODE |
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 280 | print(response.output_text)`, | CODE |
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 301 | print(response.text)`, | CODE |
| HIGH | …rc/features/apikeys/components/apikeys-view-dialog.tsx | 319 | print(response.text)`, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …/anthropic/testdata/anthropic-claude-code.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| MEDIUM⚡ | …anthropic/testdata/anthropic-claude-code2.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| MEDIUM⚡ | …r/openai/responses/testdata/llm-reasoning.request.json | 6 | "content": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer | CODE |
| MEDIUM⚡ | …r/openai/responses/testdata/llm-reasoning.request.json | 6 | "content": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer | CODE |
| MEDIUM | …former/openai/responses/testdata/compact.response.json | 25 | "text": "# AGENTS.md instructions for axonhub/dev\n\n<INSTRUCTIONS>\n# AGENTS.md\n\nThis file provides guidanc | CODE |
| MEDIUM⚡ | …ormer/openai/responses/testdata/reasoning.request.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| MEDIUM⚡ | …ormer/openai/responses/testdata/reasoning.request.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| MEDIUM⚡ | …nai/responses/testdata/reasoning.request.expected.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| MEDIUM⚡ | …nai/responses/testdata/reasoning.request.expected.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deploy/setup.sh | 388 | # Check if loaded | COMMENT |
| LOW | deploy/setup.sh | 463 | # Check if running | COMMENT |
| LOW | deploy/install.sh | 435 | # Check if running as root | COMMENT |
| LOW | deploy/stop.sh | 132 | # Check if any processes are still running | COMMENT |
| LOW | deploy/start.sh | 54 | # Check if already running | COMMENT |
| LOW | deploy/start.sh | 66 | # Check if binary exists | COMMENT |
| LOW | deploy/start.sh | 73 | # Check if config exists | COMMENT |
| LOW | deploy/start.sh | 172 | # Check if port is available | COMMENT |
| LOW | scripts/utils/filter-load-balance-logs.sh | 516 | # Check if any logs found | COMMENT |
| LOW | scripts/e2e/e2e-backend.sh | 138 | # Check if server is already running | COMMENT |
| LOW | scripts/e2e/e2e-backend.sh | 201 | # Check if binary is older than 30 minutes (1800 seconds) | COMMENT |
| LOW | scripts/migration/migration-test.sh | 359 | # Check if cached | COMMENT |
| LOW | scripts/migration/migration-test.sh | 547 | # Check if the server process is still running after becoming ready | COMMENT |
| LOW | .github/workflows/release.yml | 64 | # Check if VERSION files have changes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …/anthropic/testdata/anthropic-claude-code.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| MEDIUM⚡ | …anthropic/testdata/anthropic-claude-code2.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| LOW⚡ | …r/openai/responses/testdata/llm-reasoning.request.json | 6 | "content": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer | CODE |
| LOW⚡ | …ormer/openai/responses/testdata/reasoning.request.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| LOW⚡ | …nai/responses/testdata/reasoning.request.expected.json | 3 | "instructions": "You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's compute | CODE |
| MEDIUM | frontend/src/features/chats/data/convo.json | 57 | "message": "Great! Let me know if you need any help.", | CODE |
| MEDIUM | frontend/src/features/chats/data/convo.json | 178 | "message": "Just sent you the files. Let me know if you need any changes.", | CODE |
| MEDIUM | frontend/src/features/chats/data/convo.json | 298 | "message": "Let me know if you need anything else.", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …/anthropic/testdata/anthropic-claude-code.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| MEDIUM⚡ | …anthropic/testdata/anthropic-claude-code2.request.json | 1 | {"model":"deepseek-reasoner","messages":[{"role":"user","content":"<system-reminder>\nCalled the Bash tool with the foll | CODE |
| MEDIUM | …former/openai/responses/testdata/compact.response.json | 25 | "text": "# AGENTS.md instructions for axonhub/dev\n\n<INSTRUCTIONS>\n# AGENTS.md\n\nThis file provides guidanc | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | internal/authz/bypass.go | 52 | // Example usage: | COMMENT |
| LOW | internal/authz/bypass.go | 70 | // Example usage: | COMMENT |
| LOW | internal/pkg/xcache/cache.go | 32 | // Usage example: | COMMENT |
| LOW | scripts/cleanup-sqlite.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .golangci.yml | 1 | # This file contains all available configuration options | COMMENT |