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.)
Summary
npm run checkonmain(currently @502b0f4) reports 75 TypeScript errors across 24 files. They're not blocking the build (vite buildstill succeeds via Svelte's loose-by-default mode), but they hide real type-drift between$lib/typesand its consumers, plus a few missing dependencies. Cleaning them up gets the project to a greentsc --noEmitbaseline so future drift is caught immediately.I ran the classification while touching
ModelConfigEditorfor #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
Classification
I grouped errors by root cause. Each group is independently fixable; numbers are the count contributed to the 75 total.
SubAgent/ParsedSubAgenttype driftSubAgentForm.svelte(1)disallowedTools,maxTurns,memory,background,effort,isolation,hooks,mcpServers,initialPrompt— none declared on theSubAgent/ParsedSubAgentinterfaces.DockerStatusTypeexport,Containerinterface drift (isFavorite,dockerHostIdetc. used at call sites but absent on type), missing@xterm/xtermand@xterm/addon-fitdeps.AutoModeEditor.svelte,SettingsAutoModeTab.svelteClaudeSettingsmissingdisableAutoMode,autoModeEnvironment,autoModeAllow,autoModeSoftDeny.Component<…>mismatchProjectCard,ProjectList,McpLibrarylucide-sveltetypes out of sync with current Svelte runes —RefreshCw,ExternalLink,Trash_2,Package,FolderOpenall flagged."Input"contextkeybindingsLibrary.test.tsKeybindingContextunion doesn't include"Input"but tests assert it.ModelOverridessetting fieldModelOverridesEditor.svelteClaudeSettings.modelOverridesnot declared on the interface.SkillType,skillType)markdownParser.ts,skillLibrary.test.tsSkillTypenot exported;skillTypefield used in test fixture but absent onCreateSkillRequest.routes/sessions/+page.svelteselectedSessionSummary+"sessionSummary"prop no longer exist onSessionStoreState/ target component.ProjectCardtoast variantProjectCard.svelte"info"not in toast variant union.spinnerverbs.test.tssortOrder, missing fromSpinnerVerb.InvokeArgsmockhelpers/invokeMock.tsInvokeArgs; helper still usesRecord<string, unknown>.SandboxFilesystemEditor.svelteSandboxFiles*not exported from$lib/types.selectedProjectAgentMemoryPanel.svelteProjectsState.selectedProjectmissing — 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:
$lib/types. No behavior change.SubAgent/ParsedSubAgentto match what the form already reads. Largest payoff per PR.lucide-svelteto a version aligned with Svelte runes. Smoke-test icon rendering.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 ifnpm run checkis intentionally not gating; in that case the only thing worth doing is updatingpackage.jsonscript to make that explicit.(For context: I noticed this while sending #213. None of those 75 errors are caused by that PR.)