Skip to content

Type check: 75 TypeScript errors on main, classified into 5 fixable clusters #214

@prefrontalsys

Description

@prefrontalsys

Summary

npm run check on main (currently @ 502b0f4) reports 75 TypeScript errors across 24 files. They're not blocking the build (vite build still succeeds via Svelte's loose-by-default mode), but they hide real type-drift between $lib/types and its consumers, plus a few missing dependencies. Cleaning them up gets the project to a green tsc --noEmit baseline so future drift is caught immediately.

I ran the classification while touching ModelConfigEditor for #213 — happy to send the fixes if useful. Wanted to surface the picture and check scope/priority before opening 5 PRs that might collide with work-in-progress.

Reproduction

git checkout main
npm install
npm run check 2>&1 | grep -c '^[0-9]\+ ERROR'
# → 75

Classification

I grouped errors by root cause. Each group is independently fixable; numbers are the count contributed to the 75 total.

Group Errors Files Root cause
A. SubAgent / ParsedSubAgent type drift 26 SubAgentForm.svelte (1) Component reads disallowedTools, maxTurns, memory, background, effort, isolation, hooks, mcpServers, initialPrompt — none declared on the SubAgent / ParsedSubAgent interfaces.
B. Containers feature 10 9 Missing DockerStatusType export, Container interface drift (isFavorite, dockerHostId etc. used at call sites but absent on type), missing @xterm/xterm and @xterm/addon-fit deps.
C. Auto-mode settings fields 9 AutoModeEditor.svelte, SettingsAutoModeTab.svelte ClaudeSettings missing disableAutoMode, autoModeEnvironment, autoModeAllow, autoModeSoftDeny.
D. Lucide icon Component<…> mismatch 7 ProjectCard, ProjectList, McpLibrary lucide-svelte types out of sync with current Svelte runes — RefreshCw, ExternalLink, Trash_2, Package, FolderOpen all flagged.
E. Keybindings test: "Input" context 6 keybindingsLibrary.test.ts KeybindingContext union doesn't include "Input" but tests assert it.
F. ModelOverrides setting field 3 ModelOverridesEditor.svelte ClaudeSettings.modelOverrides not declared on the interface.
G. Skill type (SkillType, skillType) 3 markdownParser.ts, skillLibrary.test.ts SkillType not exported; skillType field used in test fixture but absent on CreateSkillRequest.
H. Sessions store rename 2 routes/sessions/+page.svelte selectedSessionSummary + "sessionSummary" prop no longer exist on SessionStoreState / target component.
I. ProjectCard toast variant 1 ProjectCard.svelte "info" not in toast variant union.
J. Spinner verbs test fixture 1 spinnerverbs.test.ts Fixture passes sortOrder, missing from SpinnerVerb.
K. Tauri InvokeArgs mock 1 helpers/invokeMock.ts Tauri tightened InvokeArgs; helper still uses Record<string, unknown>.
L. Sandbox type missing 1 SandboxFilesystemEditor.svelte SandboxFiles* not exported from $lib/types.
M. Subagents selectedProject 1 AgentMemoryPanel.svelte ProjectsState.selectedProject missing — store restructured.

Proposed PR sequence

I'd batch these into ~5 PRs to keep review surface small and reverts cheap if any fix turns out to be wrong about intent:

PR Groups Errors fixed Risk Notes
PR 1 — quick wins C, F, G, I, J, L 18 Low All additive: add missing fields/exports to $lib/types. No behavior change.
PR 2 — SubAgent type drift A 26 Low Extend SubAgent / ParsedSubAgent to match what the form already reads. Largest payoff per PR.
PR 3 — Lucide icon types D 7 Low Bump lucide-svelte to a version aligned with Svelte runes. Smoke-test icon rendering.
PR 4 — test-fixture cleanup E, H, K, M 10 Low Touches test files + a couple of call sites. Aligns fixtures with current types.
PR 5 — containers feature B 10 Med Touches in-progress containers code. Needs more context on intent. Last in line.

Total recoverable: 65 / 75 in PRs 1–4 (low risk). PR 5 deferred until you confirm the containers feature direction.

Offer

Happy to open these one at a time against main, smallest first, each with its own test plan. Will hold off until I hear back — if any of these are already in flight on your end, just say which groups to skip. Also fine to close this if npm run check is intentionally not gating; in that case the only thing worth doing is updating package.json script to make that explicit.

(For context: I noticed this while sending #213. None of those 75 errors are caused by that PR.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions