An open-source, AI-integrated, cross-platform terminal for seamless workflows
This report summarizes scanner evidence for wavetermdev/waveterm, a Go project with 22,625 GitHub stars. SynthScan examined 188,642 lines of code across 915 source files, recording 175 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 159 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 84 finding(s).
Which changes need focused human review? 175 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 175 distinct pattern matches across 10 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 | tsunami/frontend/src/util/clientid.ts | 11 | export function getOrCreateClientId(): string { | CODE |
| LOW | tsunami/frontend/src/util/keyutil.ts | 247 | function adaptFromReactOrNativeKeyEvent(event: React.KeyboardEvent | KeyboardEvent): VDomKeyboardEvent { | CODE |
| LOW | tsunami/frontend/src/util/keyutil.ts | 270 | function adaptFromElectronKeyEvent(event: any): VDomKeyboardEvent { | CODE |
| LOW | frontend/app/app.tsx | 61 | function isContentEditableBeingEdited(): boolean { | CODE |
| LOW | frontend/app/suggestion/suggestion.tsx | 131 | function BlockHeaderSuggestionControl(props: BlockHeaderSuggestionControlProps) { | CODE |
| LOW | frontend/app/suggestion/suggestion.tsx | 152 | function SuggestionControlNoResults({ children }: { children?: React.ReactNode }) { | CODE |
| LOW | frontend/app/workspace/widgetfilter.ts | 4 | function shouldIncludeWidgetForWorkspace(widget: WidgetConfigType, workspaceId?: string): boolean { | CODE |
| LOW | frontend/app/modals/conntypeahead.tsx | 55 | function createRemoteSuggestionItems( | CODE |
| LOW | frontend/app/modals/conntypeahead.tsx | 97 | function createFilteredLocalSuggestionItem( | CODE |
| LOW | frontend/app/modals/conntypeahead.tsx | 259 | function getNewConnectionSuggestionItem( | CODE |
| LOW | frontend/app/view/term/osc-handlers.ts | 98 | function handleShellIntegrationCommandStart( | CODE |
| LOW | frontend/app/view/term/shellblocking.ts | 38 | function looksInteractiveShellArgs(args: string[]): boolean { | CODE |
| LOW | frontend/app/view/term/shellblocking.ts | 48 | function isNonInteractiveShellExec(args: string[]): boolean { | CODE |
| LOW | frontend/app/view/term/termutil.ts | 176 | function findFirstDataTransferItem( | CODE |
| LOW | frontend/app/view/sysinfo/sysinfo.tsx | 93 | function convertWaveEventToDataItem(event: Extract<WaveEvent, { event: "sysinfo" }>): DataItem { | CODE |
| LOW | frontend/app/view/preview/preview-directory-utils.tsx | 155 | export function makeDirectoryDefaultMenuItems(model: PreviewModel): ContextMenuItem[] { | CODE |
| LOW | frontend/app/view/vdom/vdom-utils.tsx | 28 | export function validateAndWrapCss(model: VDomModel, cssText: string, wrapperClassName: string) { | CODE |
| LOW | frontend/app/view/vdom/vdom-utils.tsx | 114 | export function validateAndWrapReactStyle(model: VDomModel, style: Record<string, any>): Record<string, any> { | CODE |
| LOW | frontend/app/view/vdom/vdom-utils.tsx | 114 | export function validateAndWrapReactStyle(model: VDomModel, style: Record<string, any>): Record<string, any> { | CODE |
| LOW | frontend/app/aipanel/aimode.tsx | 65 | function computeCompatibleSections( | CODE |
| LOW | frontend/app/aipanel/aitooluse.tsx | 80 | function getEffectiveApprovalStatus(baseApproval: string, isStreaming: boolean): string { | CODE |
| LOW | frontend/app/store/badge.ts | 53 | function clearBadgesForBlockOnFocus(blockId: string, env?: BadgeEnv) { | CODE |
| LOW | frontend/app/store/keymodel.ts | 68 | function getFocusedBlockInStaticTab(): string { | CODE |
| LOW | frontend/app/store/keymodel.ts | 74 | function getSimpleControlShiftAtom() { | CODE |
| LOW | frontend/app/store/keymodel.ts | 470 | function registerControlShiftStateUpdateHandler() { | CODE |
| LOW | frontend/app/store/keymodel.ts | 480 | function registerElectronReinjectKeyHandler() { | CODE |
| LOW | frontend/app/store/keymodel.ts | 773 | function registerBuilderGlobalKeys() { | CODE |
| LOW | frontend/app/store/global.ts | 362 | async function createBlockSplitHorizontally( | CODE |
| LOW | frontend/app/store/global.ts | 385 | async function createBlockSplitVertically( | CODE |
| LOW | frontend/app/store/global.ts | 527 | function getLocalHostDisplayNameAtom(): Atom<string> { | CODE |
| LOW⚡ | frontend/app/store/global.ts | 550 | function registerBlockComponentModel(blockId: string, bcm: BlockComponentModel) { | CODE |
| LOW⚡ | frontend/app/store/global.ts | 554 | function unregisterBlockComponentModel(blockId: string) { | CODE |
| LOW⚡ | frontend/app/store/global.ts | 562 | function getAllBlockComponentModels(): BlockComponentModel[] { | CODE |
| LOW | frontend/util/keyutil.ts | 231 | function adaptFromReactOrNativeKeyEvent(event: React.KeyboardEvent | KeyboardEvent): WaveKeyboardEvent { | CODE |
| LOW | frontend/util/keyutil.ts | 252 | function adaptFromElectronKeyEvent(event: any): WaveKeyboardEvent { | CODE |
| LOW | frontend/layout/lib/utils.ts | 91 | export function navigateDirectionToOffset(direction: NavigateDirection): Point { | CODE |
| LOW | frontend/layout/lib/layoutModelHooks.ts | 45 | export function getLayoutModelForStaticTab() { | CODE |
| LOW | frontend/layout/lib/layoutModelHooks.ts | 76 | export function useDebouncedNodeInnerRect(nodeModel: NodeModel): CSSProperties { | CODE |
| LOW | frontend/layout/lib/types.ts | 14 | export function navigateDirectionToString(dir: NavigateDirection): string { | CODE |
| LOW | frontend/layout/lib/layoutAtom.ts | 7 | export function getLayoutStateAtomFromTab(tabAtom: Atom<Tab>, get: Getter): Atom<LayoutState> { | CODE |
| LOW | frontend/layout/lib/layoutNode.ts | 241 | export function findInsertLocationFromIndexArr( | CODE |
| LOW | frontend/layout/lib/layoutNode.ts | 263 | function findNextInsertLocationHelper( | CODE |
| LOW | frontend/preview/preview-contextmenu.tsx | 82 | function getPreviewContextMenuItemId(item: ContextMenuItem): string { | CODE |
| LOW | frontend/preview/mock/mockfilesystem.ts | 172 | function createMockFilesystemEntries(): MockFsEntryInput[] { | CODE |
| LOW | frontend/preview/mock/preview-electron-api.ts | 64 | function installPreviewElectronApi() { | CODE |
| LOW | frontend/preview/previews/processviewer.preview.tsx | 40 | function makeMockProcessListResponse(data: CommandRemoteProcessListData): ProcessListResponse { | CODE |
| LOW | frontend/preview/previews/aifilediff.preview-util.ts | 29 | export function makeMockAiFileDiffResponse( | CODE |
| LOW | frontend/builder/builder-buildpanel.tsx | 13 | function handleBuildPanelContextMenu(e: React.MouseEvent, selectedText: string): void { | CODE |
| LOW | emain/emain-platform.ts | 156 | function getElectronAppUnpackedBasePath(): string { | CODE |
| LOW | emain/emain-platform.ts | 160 | function getElectronAppResourcesPath(): string { | CODE |
| LOW | emain/emain-platform.ts | 230 | function callWithOriginalXdgCurrentDesktop(callback: () => void) { | CODE |
| LOW | emain/emain-platform.ts | 252 | async function callWithOriginalXdgCurrentDesktopAsync(callback: () => Promise<void>) { | CODE |
| LOW | emain/emain-menu.ts | 56 | function getWorkspaceSwitchAccelerator(i: number): string { | CODE |
| LOW | emain/emain-menu.ts | 401 | function initMenuEventSubscriptions() { | CODE |
| LOW | emain/emain-menu.ts | 408 | function getWebContentsByWorkspaceOrBuilderId(workspaceOrBuilderId: string): electron.WebContents { | CODE |
| LOW | emain/emain-tabview.ts | 24 | function handleWindowsMenuAccelerators( | CODE |
| LOW | emain/emain-tabview.ts | 111 | export function getWaveTabViewByWebContentsId(webContentsId: number): WaveTabView { | CODE |
| LOW | emain/emain-tabview.ts | 304 | export async function getOrCreateWebViewForTab(waveWindowId: string, tabId: string): Promise<[WaveTabView, boolean]> { | CODE |
| LOW | emain/authkey.ts | 15 | export function configureAuthKeyRequestInjection(session: Electron.Session) { | CODE |
| LOW | emain/emain-util.ts | 21 | function broadcastZoomFactorChanged(newZoomFactor: number): void { | CODE |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tsunami/frontend/src/model/model-utils.ts | 27 | // Step 1: Create text map from transfertext | COMMENT |
| LOW⚡ | tsunami/frontend/src/model/model-utils.ts | 35 | // Step 2: Map of waveid to VDomElem, skipping any without a waveid | COMMENT |
| LOW | tsunami/frontend/src/model/model-utils.ts | 50 | // Step 3: Build VDomElem trees by linking children | COMMENT |
| LOW | tsunami/frontend/src/model/model-utils.ts | 76 | // Step 4: Update renderupdates with rebuilt VDomElem trees | COMMENT |
| LOW | frontend/app/view/vdom/vdom-utils.tsx | 143 | // Step 1: Map of waveid to VDomElem, skipping any without a waveid | COMMENT |
| LOW⚡ | frontend/app/view/vdom/vdom-utils.tsx | 158 | // Step 2: Build VDomElem trees by linking children | COMMENT |
| LOW⚡ | frontend/app/view/vdom/vdom-utils.tsx | 167 | // Step 3: Update renderupdates with rebuilt VDomElem trees | COMMENT |
| LOW | .kilocode/skills/wps-events/SKILL.md | 34 | ### Step 1: Define the Event Constant | COMMENT |
| LOW | .kilocode/skills/wps-events/SKILL.md | 54 | ### Step 2: Add to AllEvents | COMMENT |
| LOW | .kilocode/skills/wps-events/SKILL.md | 65 | ### Step 3: Register in WaveEventDataTypes (REQUIRED) | COMMENT |
| LOW | .kilocode/skills/wps-events/SKILL.md | 82 | ### Step 4: Define Event Data Structure (Optional) | COMMENT |
| LOW | .kilocode/skills/wps-events/SKILL.md | 93 | ### Step 5: Expose Type to Frontend (If Needed) | COMMENT |
| LOW | .kilocode/skills/add-rpc/SKILL.md | 35 | ### Step 1: Define the Command in the Interface | COMMENT |
| LOW | .kilocode/skills/add-rpc/SKILL.md | 56 | ### Step 2: Define Request and Response Types | COMMENT |
| LOW | .kilocode/skills/add-rpc/SKILL.md | 80 | ### Step 3: Generate Bindings | COMMENT |
| LOW | .kilocode/skills/add-rpc/SKILL.md | 95 | ### Step 4: Implement the Command | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 24 | ### Step 1: Create Command File | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 90 | ### Step 2: Command Structure | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 140 | ### Step 3: Implement Command Logic | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 146 | // Step 1: Always track activity (for telemetry) | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 151 | // Step 2: Validate arguments and flags | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 157 | // Step 3: Parse/prepare data | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 160 | // Step 4: Make RPC call if needed | COMMENT |
| LOW⚡ | .kilocode/skills/add-wshcmd/SKILL.md | 168 | // Step 5: Output results | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 212 | ### Step 4: Define Flags | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 252 | ### Step 5: Working with Block Arguments | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 305 | ### Step 6: Making RPC Calls | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 341 | ### Step 7: Add Documentation | COMMENT |
| LOW | .kilocode/skills/add-wshcmd/SKILL.md | 391 | ### Step 8: Test Your Command | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 25 | ### Step 1: Add to Go Struct Definition | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 95 | ### Step 2: Set Default Value (Optional) | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 119 | ### Step 3: Update Documentation | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 140 | ### Step 4: Regenerate Schema and TypeScript Types | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 157 | ### Step 5: Use in Frontend Code | COMMENT |
| LOW | .kilocode/skills/add-config/SKILL.md | 197 | ### Step 6: Use in Backend Code | COMMENT |
| LOW | aiprompts/config-system.md | 96 | ### Step 1: Add to Go Struct Definition | COMMENT |
| LOW | aiprompts/config-system.md | 155 | ### Step 2: Set Default Value (Optional) | COMMENT |
| LOW | aiprompts/config-system.md | 178 | ### Step 3: Update Documentation | COMMENT |
| LOW | aiprompts/config-system.md | 194 | ### Step 4: Regenerate Schema and TypeScript Types | COMMENT |
| LOW | aiprompts/config-system.md | 210 | ### Step 5: Use in Frontend Code | COMMENT |
| LOW | aiprompts/config-system.md | 244 | ### Step 6: Use in Backend Code | COMMENT |
| LOW | aiprompts/focus-layout.md | 79 | // Step 1: isFocused → blockClicked | COMMENT |
| LOW | aiprompts/focus-layout.md | 84 | // Step 2: blockClicked → physical focus | COMMENT |
| LOW | aiprompts/wps-events.md | 29 | ### Step 1: Define the Event Constant | COMMENT |
| LOW | aiprompts/wps-events.md | 48 | ### Step 2: Define Event Data Structure (Optional) | COMMENT |
| LOW | aiprompts/wps-events.md | 59 | ### Step 3: Expose Type to Frontend (If Needed) | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_preexec.sh | 82 | # WARNING: This variable is no longer used and should not be relied upon. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/types/jsx.d.ts | 1 | // Copyright 2025, Command Line Inc. | COMMENT |
| LOW | frontend/types/vite-env.d.ts | 1 | // Copyright 2025, Command Line Inc. | COMMENT |
| LOW | frontend/preview/mock/mockwaveenv.ts | 21 | export const PreviewWorkspaceId = crypto.randomUUID(); | COMMENT |
| LOW | .github/workflows/codeql.yml | 1 | # For most projects, this workflow file will not need changing; you simply need | COMMENT |
| LOW | pkg/util/daystr/daystr.go | 21 | return dayStr | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_preexec.sh | 1 | # License for bash-preexec.sh follows below from https://github.com/rcaloras/bash-preexec v0.6.0 | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_preexec.sh | 21 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_preexec.sh | 41 | # General Usage: | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_preexec.sh | 161 | # This function is installed as part of the PROMPT_COMMAND; | COMMENT |
| LOW | pkg/aiusechat/gemini/doc.go | 1 | // Copyright 2025, Command Line Inc. | COMMENT |
| LOW | pkg/aiusechat/gemini/doc.go | 21 | // - Image uploads (JPEG, PNG, etc.) - inline base64 encoding | COMMENT |
| LOW | pkg/aiusechat/gemini/doc.go | 41 | // | COMMENT |
| LOW | pkg/aiusechat/gemini/doc.go | 61 | // | COMMENT |
| LOW | pkg/aiusechat/gemini/doc.go | 81 | // | COMMENT |
| LOW | pkg/aiusechat/google/doc.go | 1 | // Copyright 2025, Command Line Inc. | COMMENT |
| LOW | pkg/aiusechat/google/doc.go | 21 | // | COMMENT |
| LOW | pkg/aiusechat/anthropic/anthropic-backend.go | 381 | BudgetTokens: thinkingBudget, | COMMENT |
| LOW | pkg/wcore/workspace.go | 381 | ws.TabIds = tabIds | COMMENT |
| LOW | pkg/remote/sshclient.go | 261 | return []ssh.Signer{dummySigner}, nil | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/app/view/term/term-tooltip.tsx | 9 | // ── low-level primitive ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/app/view/term/term-tooltip.tsx | 66 | // ── wired-up sub-component ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/layout/lib/layoutTree.ts | 452 | // ─── SPLIT HORIZONTAL ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/layout/lib/layoutTree.ts | 495 | // ─── SPLIT VERTICAL ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | pkg/util/shellutil/shellintegration/bash_preexec.sh | 2 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pkg/util/shellutil/shellintegration/bash_preexec.sh | 25 | # ----------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tsunami/frontend/src/model/model-utils.ts | 27 | // Step 1: Create text map from transfertext | COMMENT |
| LOW⚡ | tsunami/frontend/src/model/model-utils.ts | 35 | // Step 2: Map of waveid to VDomElem, skipping any without a waveid | COMMENT |
| LOW | tsunami/frontend/src/model/model-utils.ts | 50 | // Step 3: Build VDomElem trees by linking children | COMMENT |
| LOW | tsunami/frontend/src/model/model-utils.ts | 76 | // Step 4: Update renderupdates with rebuilt VDomElem trees | COMMENT |
| LOW | frontend/app/view/vdom/vdom-utils.tsx | 143 | // Step 1: Map of waveid to VDomElem, skipping any without a waveid | COMMENT |
| LOW⚡ | frontend/app/view/vdom/vdom-utils.tsx | 158 | // Step 2: Build VDomElem trees by linking children | COMMENT |
| LOW⚡ | frontend/app/view/vdom/vdom-utils.tsx | 167 | // Step 3: Update renderupdates with rebuilt VDomElem trees | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/bump-version.yml | 68 | # Create a new commit for the package version bump in package.json | COMMENT |
| MEDIUM | pkg/util/shellutil/shellintegration/bash_preexec.sh | 161 | # This function is installed as part of the PROMPT_COMMAND; | COMMENT |
| MEDIUM | pkg/util/shellutil/shellintegration/bash_preexec.sh | 169 | # This function is installed as part of the PROMPT_COMMAND. | COMMENT |
| MEDIUM | pkg/util/shellutil/shellintegration/bash_preexec.sh | 229 | # This function is installed as the DEBUG trap. It is invoked before each | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cmd/wsh/cmd/wshcmd-ssh_test.go | 26 | want: "foo@bar.com", | CODE |
| LOW | cmd/wsh/cmd/wshcmd-ssh_test.go | 45 | want: "foo@bar.com", | CODE |
| LOW | tsunami/demo/tsunamiconfig/app.go | 42 | Placeholder string `json:"placeholder"` | CODE |
| LOW | tsunami/demo/tsunamiconfig/app.go | 165 | "placeholder": "Enter URL (e.g., localhost:52848, http://localhost:52848/api/config, or just 52848)", | CODE |
| LOW | tsunami/demo/tsunamiconfig/app.go | 202 | "placeholder": props.Placeholder, | CODE |
| LOW | tsunami/demo/todo/app.go | 56 | "placeholder": "What needs to be done?", | CODE |
| LOW | frontend/app/view/preview/preview-directory.tsx | 460 | <div className="dir-table-body-cell">dummy-data</div> | CODE |
| LOW | frontend/layout/lib/TileLayout.tsx | 131 | <Placeholder key="placeholder" layoutModel={layoutModel} style={{ top: 10000, ...overlayTransform }} /> | CODE |
| LOW | frontend/layout/lib/TileLayout.tsx | 499 | setPlaceholderOverlay(<div className="placeholder" style={placeholderTransform} />); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pkg/aiusechat/google/doc.go | 26 | // APIKey: "YOUR_API_KEY", | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pkg/util/shellutil/shellintegration/pwsh_wavepwsh.sh | 27 | # Check if we're in tmux or screen | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/fish_wavefish.sh | 16 | # Check if we're in tmux or screen (using fish-native checks) | COMMENT |
| LOW | pkg/util/shellutil/shellintegration/bash_bashrc.sh | 49 | # Check if bash-preexec was successfully imported | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tsunami/util/util.go | 20 | // Example usage: | COMMENT |