soroban-abacus-flashcards/.claude/settings.local.json

675 lines
35 KiB
JSON

{
"permissions": {
"allow": [
"Bash(mkdir:*)",
"Bash(chmod:*)",
"Bash(curl:*)",
"Bash(tar:*)",
"Bash(python3:*)",
"Bash(tree:*)",
"Bash(brew install:*)",
"Bash(./generate_samples.sh:*)",
"Bash(make:*)",
"Bash(git init:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git reset:*)",
"Bash(qpdf:*)",
"Bash(git remote add:*)",
"Bash(git push:*)",
"Bash(pdftoppm:*)",
"Bash(python -m pytest tests/test_quiz_functionality.py -v)",
"Bash(python:*)",
"Bash(git restore:*)",
"Bash(open test_heaven_beads.html)",
"Bash(open test_scaling.html)",
"Read(//private/tmp/**)",
"Bash(open test_smart_input.html)",
"Bash(open test_matching.html)",
"Bash(open test_matching_with_indicators.html)",
"Bash(open test_matching_responsive.html)",
"Bash(open test_matching_final.html)",
"Bash(open test_matching_fully_responsive.html)",
"Bash(open test_matching_one_click.html)",
"Bash(open test_matching_two_player.html)",
"Bash(open test_player_indicators.html)",
"Bash(open test_countdown_timer.html)",
"Bash(open test_matched_card_deemphasis.html)",
"Bash(open test_all_fixes.html)",
"Bash(open test_print_behavior.html)",
"Bash(open test_pdf_generation.html)",
"Bash(open test_improved_print.html)",
"Bash(open ../test_improved_print.html)",
"Bash(open ../test_pdf_direct.html)",
"Bash(open ../test_print_fixed.html)",
"Bash(open ../test_sectioned_layout.html)",
"Bash(open ../test_beautiful_ui.html)",
"Bash(open ../test_tutorial_complete.html)",
"Bash(open ../test_arithmetic_complete.html)",
"Bash(open ../test_complete_guide.html)",
"Bash(open ../test_welcome_intro.html)",
"Bash(open ../test_prefix_conflicts.html)",
"Bash(open ../test_debug_prefix.html)",
"Bash(open ../test_memory_fix.html)",
"Bash(open ../test_complement_twins.html)",
"Bash(open test_complement_twins.html)",
"Bash(open test_particle_effects.html)",
"Bash(open test_adaptive_difficulty.html)",
"Bash(open ../test_memory_grid_hiding.html)",
"Bash(open ../test_memory_partial_hiding.html)",
"Bash(open test_achievement_system.html)",
"Bash(open test_polished_matching.html)",
"Bash(open test_fixed_matching_controls.html)",
"Bash(open test_complement_filtering.html)",
"Bash(open test_race_track.html)",
"Bash(open test_input_reliability.html)",
"Bash(open test_emergency_fix.html)",
"Bash(open test_timeout_config.html)",
"Bash(open test_medal_scoring.html)",
"Bash(open flashcards_en.html)",
"Bash(find:*)",
"Bash(open test_lightning_sprint.html)",
"Bash(open debug_tunnel_digging.html)",
"Bash(git stash:*)",
"Bash(git checkout:*)",
"Bash(open test_endrace_fix.html)",
"Bash(grep:*)",
"Bash(npx create-next-app:*)",
"Bash(pnpm install:*)",
"Bash(pnpm build:*)",
"Bash(pnpm --filter @soroban/core install)",
"Bash(pnpm --filter @soroban/core build)",
"Bash(pnpm --filter @soroban/client build)",
"Bash(pnpm panda:*)",
"Bash(pnpm turbo run:*)",
"Bash(pnpm --filter @soroban/web type-check)",
"Bash(sed:*)",
"Bash(pnpm type-check:*)",
"Bash(git bisect:*)",
"Bash(pnpm --filter @soroban/web dev)",
"Bash(pnpm --filter @soroban/web panda:*)",
"Bash(npx @pandacss/dev:*)",
"Bash(pnpm add:*)",
"Bash(pnpm:*)",
"WebFetch(domain:github.com)",
"Bash(node:*)",
"Read(//tmp/**)",
"Bash(open http://localhost:3000/test-typst)",
"Bash(open http://localhost:3001/test-typst)",
"WebFetch(domain:www.radix-ui.com)",
"Read(//Users/antialias/**)",
"Bash(turbo run:*)",
"Bash(npx turbo run:*)",
"Bash(open http://localhost:3003/guide)",
"Bash(open http://localhost:3000/games/memory-quiz)",
"Bash(open http://localhost:3002/tutorial-editor)",
"Bash(open http://localhost:3001/tutorial-editor)",
"Bash(timeout 30s pnpm test src/components/tutorial/__tests__/ReasonTooltip.provenance.test.tsx)",
"Bash(timeout 30s pnpm test src/components/tutorial/__tests__/ReasonTooltip.simple.test.tsx)",
"Bash(timeout:*)",
"Bash(open http://localhost:3002/games/memory-quiz)",
"Bash(open http://localhost:6009)",
"Bash(open http://localhost:3004/tutorial-editor)",
"Bash(open http://localhost:6008)",
"Bash(npm run gallery:*)",
"Bash(ssh:*)",
"Bash(open http://localhost:3000/games/matching)",
"Bash(docker build:*)",
"Bash(docker run:*)",
"WebSearch",
"Bash(docker logs:*)",
"Bash(docker rm:*)",
"Bash(open \"http://localhost:3001/games/matching\")",
"Bash(scp:*)",
"Bash(cat:*)",
"Bash(npm test:*)",
"Bash(gh run list:*)",
"Bash(gh run view:*)",
"Bash(nslookup:*)",
"Bash(docker stop:*)",
"Bash(open http://localhost:3000/games)",
"Bash(open http://localhost:3004/games)",
"Bash(npx tsc:*)",
"Bash(git rm:*)",
"Bash(git check-ignore:*)",
"Bash(open http://localhost:3002/arcade)",
"Bash(open http://localhost:3002/games)",
"Bash(open http://localhost:3000/arcade)",
"Bash(open http://localhost:3004/arcade)",
"Bash(open http://localhost:3005/arcade)",
"Bash(npx next lint:*)",
"Bash(npx next build:*)",
"Bash(git log:*)",
"Bash(gh run watch:*)",
"Bash(open http://localhost:3005/games/matching)",
"Bash(open test_fullscreen_persistence.html)",
"Bash(npx eslint:*)",
"Bash(npm run build:*)",
"Bash(awk:*)",
"Bash(gh release list:*)",
"Bash(gh release view:*)",
"Bash(git pull:*)",
"WebFetch(domain:antialias.github.io)",
"Bash(open http://localhost:3006/games/matching)",
"Bash(gh api:*)",
"Bash(npx playwright test:*)",
"Bash(open http://localhost:3001/games/matching)",
"Bash(open http://localhost:3001/games/memory-quiz)",
"Bash(open http://localhost:3002)",
"Bash(open \"data:text/html,<script>console.log(''Current localStorage:'', localStorage.getItem(''soroban-abacus-display-config'')); localStorage.setItem(''soroban-abacus-display-config'', JSON.stringify({colorScheme: ''place-value'', beadShape: ''diamond'', hideInactiveBeads: false, coloredNumerals: false, scaleFactor: 1.0, soundEnabled: true, soundVolume: 0.8})); console.log(''After test save:'', localStorage.getItem(''soroban-abacus-display-config''));</script><h1>Check browser console</h1>\")",
"Bash(npx playwright:*)",
"Bash(open \"data:text/html,<script>\nconsole.log(''Current localStorage:'', localStorage.getItem(''soroban-abacus-display-config'')); \nlocalStorage.setItem(''soroban-abacus-display-config'', JSON.stringify({\n colorScheme: ''place-value'', \n beadShape: ''diamond'', \n hideInactiveBeads: false, \n coloredNumerals: false, \n scaleFactor: 1.0, \n soundEnabled: true, \n soundVolume: 0.8\n})); \nconsole.log(''After test save:'', localStorage.getItem(''soroban-abacus-display-config''));\n</script><h1>Check browser console</h1>\")",
"Bash(xargs sed:*)",
"Bash(open http://localhost:3003/games/matching)",
"Bash(open http://localhost:3003/arcade/matching)",
"Bash(open http://localhost:3000)",
"Bash(open http://localhost:3003/games/memory-quiz)",
"Bash(open http://localhost:3001)",
"Bash(open http://localhost:3001/arcade)",
"Bash(open http://localhost:6006)",
"Bash(open http://localhost:3002/games/matching)",
"Bash(open http://localhost:3002/create)",
"Bash(open http://localhost:3002/games/complement-race/practice)",
"Bash(open http://localhost:3002/games/complement-race)",
"Bash(npx vitest run:*)",
"Bash(sqlite3:*)",
"Bash(NODE_ENV=development node server.js)",
"Bash(lsof:*)",
"Bash(xargs kill:*)",
"Bash(./test-arcade-api.sh:*)",
"Bash(pkill:*)",
"Bash(shasum:*)",
"Bash(open http://localhost:3000/arcade/matching)",
"Bash(echo:*)",
"Bash(npm run type-check:*)",
"mcp__sqlite__read_query",
"mcp__sqlite__list_tables",
"mcp__sqlite__describe_table",
"Bash(npm run format:*)",
"Bash(npm run lint:fix:*)",
"Bash(npm run lint:*)",
"Bash(npx drizzle-kit:*)",
"Bash(npm run db:migrate:*)",
"Bash(npm run pre-commit:*)",
"Bash(npm run seed:test-students:*)",
"Bash(npx @biomejs/biome lint:*)",
"Bash(npm run build:seed-script:*)",
"Bash(ls:*)",
"mcp__sqlite__write_query",
"Bash(apps/web/src/lib/curriculum/session-mode.ts )",
"Bash(apps/web/src/app/api/curriculum/[playerId]/session-mode/ )",
"Bash(apps/web/src/hooks/useSessionMode.ts )",
"Bash(apps/web/src/components/practice/SessionModeBanner.tsx )",
"Bash(apps/web/src/components/practice/SessionModeBanner.stories.tsx )",
"Bash(apps/web/src/components/practice/index.ts )",
"Bash(apps/web/src/app/practice/[studentId]/dashboard/DashboardClient.tsx )",
"Bash(apps/web/src/app/practice/[studentId]/summary/SummaryClient.tsx )",
"Bash(apps/web/src/components/practice/StartPracticeModal.tsx )",
"Bash(apps/web/src/components/practice/StartPracticeModal.stories.tsx)",
"Bash(apps/web/src/lib/curriculum/session-planner.ts )",
"Bash(apps/web/src/lib/curriculum/index.ts )",
"Bash(apps/web/src/app/api/curriculum/[playerId]/sessions/plans/route.ts )",
"Bash(apps/web/src/hooks/useSessionPlan.ts )",
"Bash(apps/web/src/components/practice/StartPracticeModal.tsx)",
"Bash(apps/web/.claude/REMEDIATION_CTA_PLAN.md)",
"Bash(npx @biomejs/biome:*)",
"Bash(apps/web/package.json )",
"Bash(pnpm-lock.yaml )",
"Bash(apps/web/src/components/practice/BannerSlots.tsx )",
"Bash(apps/web/src/components/practice/BannerSlots.stories.tsx )",
"Bash(apps/web/src/components/practice/ProjectingBanner.tsx )",
"Bash(apps/web/src/components/practice/ProjectingBanner.stories.tsx )",
"Bash(apps/web/src/components/practice/PracticeSubNav.tsx )",
"Bash(apps/web/src/contexts/SessionModeBannerContext.tsx )",
"Bash(apps/web/src/app/practice/[studentId]/summary/SummaryClient.tsx)",
"Bash(\"apps/web/src/app/practice/[studentId]/dashboard/DashboardClient.tsx\" )",
"Bash(apps/web/src/utils/__tests__/problemGenerator.budget.test.ts )",
"Bash(apps/web/src/utils/__tests__/problemGenerator.stateAware.test.ts )",
"Bash(apps/web/src/utils/__tests__/skillComplexity.test.ts )",
"Bash(apps/web/src/lib/curriculum/progress-manager.ts )",
"Bash(apps/web/src/lib/curriculum/config/complexity-budgets.ts )",
"Bash(apps/web/src/lib/curriculum/config/skill-costs.ts )",
"Bash(apps/web/src/lib/curriculum/config/bkt-integration.ts )",
"Bash(apps/web/src/app/api/curriculum/[playerId]/skills/route.ts )",
"Bash(apps/web/src/utils/skillComplexity.ts )",
"Bash(apps/web/src/test/journey-simulator/comprehensive-ab-test.test.ts )",
"Bash(apps/web/src/components/practice/TermSkillAnnotation.tsx )",
"Bash(apps/web/src/components/practice/DetailedProblemCard.tsx )",
"Bash(apps/web/src/db/schema/session-plans.ts)",
"Bash(\"apps/web/src/app/api/curriculum/[playerId]/skills/route.ts\" )",
"Bash(npm run test:*)",
"Bash(\"apps/web/src/app/practice/[studentId]/placement-test/\" )",
"Bash(\"apps/web/src/app/practice/[studentId]/skills/SkillsClient.tsx\" )",
"Bash(\"apps/web/src/components/practice/ManualSkillSelector.tsx\" )",
"Bash(\"apps/web/src/components/practice/OfflineSessionForm.tsx\" )",
"Bash(\"apps/web/src/components/practice/OfflineSessionForm.stories.tsx\" )",
"Bash(\"apps/web/src/components/practice/PlacementTest.tsx\" )",
"Bash(\"apps/web/src/components/practice/PlacementTest.stories.tsx\" )",
"Bash(\"apps/web/src/components/practice/PracticeSubNav.tsx\" )",
"Bash(\"apps/web/src/components/practice/ProgressDashboard.tsx\" )",
"Bash(\"apps/web/src/components/practice/ProgressDashboard.stories.tsx\" )",
"Bash(\"apps/web/src/lib/curriculum/placement-test.ts\" )",
"Bash(\"apps/web/src/test/journey-simulator/profiles/per-skill-deficiency.ts\")",
"Bash(mcp__sqlite__read_query:*)",
"Bash(mcp__sqlite__describe_table:*)",
"Bash(git diff:*)",
"Bash(git show:*)",
"Bash(npx tsx:*)",
"Bash(xargs ls:*)",
"Bash(mcp__sqlite__list_tables)",
"WebFetch(domain:developer.chrome.com)",
"Bash(claude mcp add:*)",
"Bash(claude mcp:*)",
"Bash(git rev-parse:*)",
"Bash(wc:*)",
"Bash(src/lib/classroom/query-invalidations.ts )",
"Bash(src/lib/classroom/socket-emitter.ts )",
"Bash(src/lib/classroom/socket-events.ts )",
"Bash(src/lib/queryKeys.ts )",
"Bash(src/hooks/useClassroomSocket.ts )",
"Bash(src/hooks/useParentSocket.ts )",
"Bash(\"src/app/api/classrooms/[classroomId]/enrollment-requests/[requestId]/approve/route.ts\" )",
"Bash(\"src/app/api/classrooms/[classroomId]/enrollment-requests/[requestId]/deny/route.ts\" )",
"Bash(\"src/app/api/enrollment-requests/[requestId]/deny/route.ts\" )",
"Bash(src/components/practice/NotesModal.tsx )",
"Bash(src/components/classroom/EnterClassroomButton.tsx )",
"Bash(src/components/classroom/index.ts )",
"Bash(src/app/practice/PracticeClient.tsx)",
"Bash(apps/web/src/app/api/curriculum/[playerId]/sessions/plans/[planId]/route.ts )",
"Bash(apps/web/src/app/api/enrollment-requests/[requestId]/approve/route.ts )",
"Bash(apps/web/src/components/classroom/EnterClassroomButton.tsx )",
"Bash(apps/web/src/hooks/useClassroom.ts )",
"Bash(apps/web/src/hooks/useClassroomSocket.ts )",
"Bash(apps/web/src/hooks/usePlayerEnrollmentSocket.ts )",
"Bash(apps/web/src/lib/classroom/query-invalidations.ts )",
"Bash(apps/web/src/lib/classroom/socket-emitter.ts )",
"Bash(apps/web/src/lib/classroom/socket-events.ts)",
"Bash(apps/web/src/components/practice/SessionObserver.tsx )",
"Bash(apps/web/src/components/practice/TeacherPausedOverlay.tsx )",
"Bash(apps/web/drizzle/0043_add_session_pause_columns.sql )",
"Bash(apps/web/drizzle/meta/0043_snapshot.json)",
"Bash(apps/web/src/hooks/useSessionBroadcast.ts )",
"Bash(apps/web/src/app/practice/[studentId]/PracticeClient.tsx )",
"Bash(apps/web/src/components/classroom/ClassroomTab.tsx)",
"Bash(src/app/practice/[studentId]/PracticeClient.tsx )",
"Bash(src/components/classroom/ClassroomDashboard.tsx )",
"Bash(src/components/classroom/ClassroomTab.tsx )",
"Bash(src/components/classroom/SessionObserverModal.tsx )",
"Bash(src/components/practice/ActiveSession.tsx )",
"Bash(src/components/practice/index.ts )",
"Bash(src/components/practice/PracticeFeedback.tsx )",
"Bash(src/components/practice/PurposeBadge.tsx )",
"Bash(src/components/ui/Tooltip.tsx )",
"Bash(src/constants/zIndex.ts )",
"Bash(src/hooks/useSessionBroadcast.ts )",
"Bash(src/hooks/useSessionObserver.ts )",
"Bash(src/socket-server.ts)",
"Bash(src/components/MyAbacus.tsx )",
"Bash(src/contexts/MyAbacusContext.tsx )",
"Bash(src/components/practice/StartPracticeModal.tsx )",
"Bash(src/components/tutorial/SkillTutorialLauncher.tsx )",
"Bash(src/hooks/useSkillTutorialBroadcast.ts)",
"Bash(\"src/app/practice/[studentId]/PracticeClient.tsx\" )",
"Bash(apps/web/drizzle/meta/0044_snapshot.json )",
"Bash(apps/web/drizzle/meta/_journal.json )",
"Bash(apps/web/src/app/practice/PracticeClient.tsx )",
"Bash(apps/web/src/components/classroom/EnrollChildModal.tsx )",
"Bash(apps/web/src/components/classroom/index.ts )",
"Bash(apps/web/src/components/family/FamilyCodeDisplay.tsx )",
"Bash(apps/web/src/components/practice/NotesModal.tsx )",
"Bash(apps/web/src/components/practice/StudentFilterBar.tsx )",
"Bash(apps/web/src/components/practice/StudentSelector.tsx )",
"Bash(apps/web/src/components/practice/StudentActionMenu.tsx )",
"Bash(apps/web/src/components/practice/ViewSelector.tsx )",
"Bash(apps/web/src/components/practice/studentActions.ts )",
"Bash(apps/web/src/hooks/useStudentActions.ts )",
"Bash(apps/web/src/hooks/useUnifiedStudents.ts )",
"Bash(apps/web/src/types/student.ts)",
"Bash(drizzle/meta/0044_snapshot.json )",
"Bash(drizzle/meta/_journal.json )",
"Bash(\"src/app/practice/[studentId]/dashboard/DashboardClient.tsx\" )",
"Bash(src/components/classroom/EnrollChildModal.tsx )",
"Bash(src/components/family/FamilyCodeDisplay.tsx )",
"Bash(src/components/practice/StudentFilterBar.tsx )",
"Bash(src/components/practice/StudentSelector.tsx )",
"Bash(src/components/practice/StudentActionMenu.tsx )",
"Bash(src/components/practice/ViewSelector.tsx )",
"Bash(src/components/practice/studentActions.ts )",
"Bash(src/hooks/useStudentActions.ts )",
"Bash(src/hooks/useUnifiedStudents.ts )",
"Bash(src/types/student.ts)",
"Bash(ANALYZE=true pnpm next build:*)",
"Bash(du:*)",
"Bash(gzip:*)",
"Bash({}/1024/1024\" | bc\\)MB\")",
"Bash(114595/1024\" | bc\\) KB\" curl -s 'http://localhost:3000/_next/static/chunks/app/practice/page.js')",
"Bash(done)",
"Bash(PLAYWRIGHT_SKIP_BROWSER_GC=1 npx playwright test:*)",
"Bash(BASE_URL=http://localhost:3000 npx playwright test:*)",
"Bash(BASE_URL=http://localhost:3000 pnpm --filter @soroban/web exec playwright test:*)",
"Bash(BASE_URL=http://localhost:3000 pnpm exec playwright test:*)",
"Bash(git rebase:*)",
"Bash(GIT_EDITOR=true git rebase:*)",
"Bash(npm run test:run:*)",
"Bash(git mv:*)",
"Bash(drizzle/0050_abandoned_salo.sql )",
"Bash(drizzle/meta/0050_snapshot.json )",
"Bash(src/db/schema/practice-attachments.ts )",
"Bash(src/db/schema/index.ts )",
"Bash(\"src/app/api/curriculum/[playerId]/attachments/\" )",
"Bash(\"src/app/api/curriculum/[playerId]/offline-sessions/\" )",
"Bash(\"src/app/api/curriculum/[playerId]/sessions/[sessionId]/\" )",
"Bash(src/components/practice/PhotoUploadZone.tsx )",
"Bash(src/components/practice/SessionPhotoGallery.tsx )",
"Bash(src/components/practice/OfflineSessionModal.tsx )",
"Bash(src/components/practice/VirtualizedSessionList.tsx )",
"Bash(\"src/app/practice/[studentId]/summary/SummaryClient.tsx\" )",
"Bash(git ls-tree:*)",
"Bash(apps/web/drizzle/0051_luxuriant_selene.sql )",
"Bash(apps/web/drizzle/0052_remarkable_karnak.sql )",
"Bash(apps/web/drizzle/0053_premium_expediter.sql )",
"Bash(apps/web/drizzle/meta/0051_snapshot.json )",
"Bash(apps/web/drizzle/meta/0052_snapshot.json )",
"Bash(apps/web/drizzle/meta/0053_snapshot.json )",
"Bash(\"apps/web/src/app/api/curriculum/[playerId]/attachments/[attachmentId]/file/route.ts\" )",
"Bash(\"apps/web/src/app/api/curriculum/[playerId]/attachments/[attachmentId]/route.ts\" )",
"Bash(\"apps/web/src/app/api/curriculum/[playerId]/attachments/[attachmentId]/original/\" )",
"Bash(\"apps/web/src/app/api/curriculum/[playerId]/sessions/[sessionId]/attachments/route.ts\" )",
"Bash(apps/web/src/components/practice/DocumentAdjuster.tsx )",
"Bash(apps/web/src/components/practice/OfflineWorkSection.tsx )",
"Bash(apps/web/src/components/practice/PhotoViewerEditor.tsx )",
"Bash(apps/web/src/components/practice/ScrollspyNav.tsx )",
"Bash(apps/web/src/components/practice/useDocumentDetection.ts )",
"Bash(apps/web/src/db/schema/practice-attachments.ts)",
"Bash(drizzle/0051_luxuriant_selene.sql )",
"Bash(drizzle/0052_remarkable_karnak.sql )",
"Bash(drizzle/0053_premium_expediter.sql )",
"Bash(drizzle/meta/0051_snapshot.json )",
"Bash(drizzle/meta/0052_snapshot.json )",
"Bash(drizzle/meta/0053_snapshot.json )",
"Bash(\"src/app/api/curriculum/[playerId]/attachments/[attachmentId]/file/route.ts\" )",
"Bash(\"src/app/api/curriculum/[playerId]/attachments/[attachmentId]/route.ts\" )",
"Bash(\"src/app/api/curriculum/[playerId]/attachments/[attachmentId]/original/\" )",
"Bash(\"src/app/api/curriculum/[playerId]/sessions/[sessionId]/attachments/route.ts\" )",
"Bash(src/components/practice/DocumentAdjuster.tsx )",
"Bash(src/components/practice/OfflineWorkSection.tsx )",
"Bash(src/components/practice/PhotoViewerEditor.tsx )",
"Bash(src/components/practice/ScrollspyNav.tsx )",
"Bash(src/components/practice/useDocumentDetection.ts )",
"Bash(src/db/schema/practice-attachments.ts)",
"Bash(apps/web/src/components/vision/ )",
"Bash(apps/web/src/hooks/useAbacusVision.ts )",
"Bash(apps/web/src/hooks/useCameraCalibration.ts )",
"Bash(apps/web/src/hooks/useDeskViewCamera.ts )",
"Bash(apps/web/src/hooks/useFrameStability.ts )",
"Bash(apps/web/src/lib/vision/ )",
"Bash(apps/web/src/types/vision.ts)",
"WebFetch(domain:raw.githubusercontent.com)",
"Bash(head:*)",
"Bash(apps/web/public/js-aruco2/ )",
"Bash(apps/web/src/app/create/vision-markers/ )",
"Bash(apps/web/src/lib/vision/arucoDetection.ts )",
"Bash(apps/web/src/components/vision/AbacusVisionBridge.tsx )",
"Bash(pnpm-lock.yaml)",
"Bash(apps/web/src/app/api/remote-camera/ )",
"Bash(apps/web/src/app/remote-camera/ )",
"Bash(apps/web/src/components/vision/RemoteCameraQRCode.tsx )",
"Bash(apps/web/src/components/vision/RemoteCameraReceiver.tsx )",
"Bash(apps/web/src/hooks/useRemoteCameraDesktop.ts )",
"Bash(apps/web/src/hooks/useRemoteCameraPhone.ts )",
"Bash(apps/web/src/hooks/useRemoteCameraSession.ts )",
"Bash(apps/web/src/lib/remote-camera/ )",
"Bash(apps/web/src/lib/vision/perspectiveTransform.ts )",
"Bash(apps/web/src/socket-server.ts)",
"Bash(apps/web/src/components/vision/CalibrationOverlay.tsx )",
"Bash(apps/web/src/components/practice/ActiveSession.tsx )",
"Bash(open -a Preview:*)",
"Bash(pip3 install:*)",
"Bash(pip3 uninstall:*)",
"Bash(/opt/homebrew/bin/python3:*)",
"Bash(/usr/bin/python3:*)",
"Bash(/opt/homebrew/bin/pip3 install:*)",
"Bash(source:*)",
"Bash(pip install:*)",
"Bash(/opt/homebrew/opt/python@3.11/bin/python3.11:*)",
"Bash(tensorflowjs_converter:*)",
"Bash(public/models/abacus-column-classifier/column-classifier.keras )",
"Bash(public/models/abacus-column-classifier/)",
"Bash(public/models/abacus-column-classifier/column-classifier.h5 )",
"Bash(apps/web/scripts/train-column-classifier/train_model.py )",
"Bash(apps/web/src/app/remote-camera/[sessionId]/page.tsx )",
"Bash(apps/web/src/hooks/useColumnClassifier.ts )",
"Bash(apps/web/src/lib/vision/columnClassifier.ts )",
"Bash(\"apps/web/src/app/remote-camera/[sessionId]/page.tsx\" )",
"Bash(apps/web/drizzle/0054_new_mathemanic.sql )",
"Bash(apps/web/drizzle/meta/0054_snapshot.json )",
"Bash(apps/web/src/components/AbacusDisplayDropdown.tsx )",
"Bash(apps/web/src/db/schema/abacus-settings.ts )",
"Bash(packages/abacus-react/src/AbacusContext.tsx)",
"Bash(apps/web/src/lib/vision/frameProcessor.ts )",
"Bash(apps/web/src/lib/vision/beadDetector.ts )",
"Bash(apps/web/public/models/abacus-column-classifier/model.json )",
"Bash(.claude/settings.local.json)",
"Bash(apps/web/src/components/MyAbacus.tsx )",
"Bash(apps/web/src/contexts/MyAbacusContext.tsx )",
"Bash(apps/web/src/components/vision/DockedVisionFeed.tsx )",
"Bash(apps/web/src/components/vision/VisionIndicator.tsx )",
"Bash(apps/web/src/components/vision/VisionSetupModal.tsx)",
"Bash(npx storybook:*)",
"Bash(apps/web/src/hooks/usePhoneCamera.ts )",
"Bash(apps/web/src/lib/remote-camera/session-manager.ts )",
"Bash(apps/web/src/test/setup.ts )",
"Bash(apps/web/src/hooks/__tests__/useRemoteCameraDesktop.test.ts )",
"Bash(apps/web/src/hooks/__tests__/useRemoteCameraPhone.test.ts )",
"Bash(apps/web/src/lib/remote-camera/__tests__/)",
"Bash(packages/abacus-react/CHANGELOG.md )",
"WebFetch(domain:zod.dev)",
"Bash(npm view:*)",
"Bash(tsc:*)",
"WebFetch(domain:colinhacks.com)",
"Bash(npm install:*)",
"Bash(corepack prepare:*)",
"Bash(/Users/antialias/Library/pnpm/pnpm self-update:*)",
"Bash(readlink:*)",
"Bash(src/app/api/curriculum/[playerId]/attachments/[attachmentId]/approve/route.ts )",
"Bash(src/app/api/curriculum/[playerId]/attachments/[attachmentId]/parse/route.ts )",
"Bash(src/app/api/curriculum/[playerId]/attachments/[attachmentId]/review/route.ts )",
"Bash(src/app/api/curriculum/[playerId]/sessions/[sessionId]/attachments/route.ts )",
"Bash(src/app/api/players/[id]/access/route.ts )",
"Bash(src/app/practice/[studentId]/summary/SummaryClient.tsx )",
"Bash(src/components/worksheet-parsing/ )",
"Bash(src/hooks/useLLMCall.ts )",
"Bash(src/hooks/usePlayerAccess.ts )",
"Bash(src/hooks/useWorksheetParsing.ts )",
"Bash(src/lib/classroom/access-control.ts )",
"Bash(src/lib/classroom/index.ts )",
"Bash(src/lib/curriculum/definitions.ts )",
"Bash(src/lib/curriculum/problem-generator.ts )",
"Bash(src/lib/worksheet-parsing/parser.ts )",
"Bash(src/lib/worksheet-parsing/schemas.ts )",
"Bash(src/lib/worksheet-parsing/session-converter.ts )",
"Bash(src/types/css.d.ts )",
"Bash(tsconfig.json)",
"Bash(git status:*)",
"Bash(photos\" banner instead of silently hiding the upload buttons.\n\nThis ensures users see feedback when access is unexpectedly denied,\nrather than being confused by missing UI elements.\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"WebFetch(domain:platform.openai.com)",
"WebFetch(domain:cookbook.openai.com)",
"WebFetch(domain:docs.aimlapi.com)",
"Bash(\"/Users/antialias/projects/soroban-abacus-flashcards/apps/web/src/app/practice/[studentId]/summary/FullscreenCamera.tsx\")",
"Bash(xargs -I {} bash -c 'echo \"\"\"\"=== {} ===\"\"\"\" && grep -A3 \"\"\"\"dynamic\\(\"\"\"\" {}')",
"Bash(ANALYZE=true npm run build:*)",
"Bash(open:*)",
"Bash(ANALYZE=true npx next build:*)",
"Bash(xargs:*)",
"Bash(while read chunk)",
"Bash(do)",
"Bash(sort:*)",
"Bash(strings:*)",
"mcp__chrome-devtools__list_pages",
"mcp__chrome-devtools__navigate_page",
"mcp__chrome-devtools__list_console_messages",
"mcp__chrome-devtools__take_snapshot",
"mcp__chrome-devtools__click",
"mcp__chrome-devtools__take_screenshot",
"mcp__chrome-devtools__list_network_requests",
"mcp__chrome-devtools__performance_start_trace",
"mcp__chrome-devtools__performance_analyze_insight",
"mcp__chrome-devtools__get_network_request",
"Bash(do if [ -f $chunk ])",
"Bash(then if strings $chunk)",
"Bash(if [ \"$found\" = false ])",
"Bash(then echo \"No arcade-specific code found in practice summary chunks!\" fi)",
"Bash(do if strings $chunk)",
"Bash(npx chrome-devtools-mcp@latest --help)",
"WebFetch(domain:docs.anthropic.com)",
"WebFetch(domain:www.mikeborozdin.com)",
"WebFetch(domain:community.openai.com)",
"Bash(opencode --version:*)",
"WebFetch(domain:opencode.ai)",
"Bash(unzip:*)",
"Bash(codesign:*)",
"Bash(otool:*)",
"Bash(/tmp/opencode:*)",
"Bash(bash)",
"Bash(~/.opencode/bin/opencode:*)",
"Bash(npx oh-my-opencode:*)",
"Bash(export PATH=\"$HOME/.opencode/bin:$PATH\")",
"Bash(opencode auth login:*)",
"Bash(src/db/schema/session-plans.ts )",
"Bash(src/lib/curriculum/session-planner.ts )",
"Bash(src/app/api/curriculum/[playerId]/sessions/plans/route.ts )",
"Bash(src/hooks/useSessionPlan.ts )",
"Bash(src/hooks/useGameBreakTimer.ts )",
"Bash(src/hooks/__tests__/useGameBreakTimer.test.ts )",
"Bash(src/components/practice/StartPracticeModal.stories.tsx )",
"Bash(src/components/practice/ActiveSession.stories.tsx )",
"Bash(src/components/practice/SessionPausedModal.stories.tsx )",
"Bash(src/app/practice/[studentId]/PracticeClient.tsx)",
"Bash(src/components/practice/GameBreakScreen.stories.tsx )",
"Bash(src/components/practice/PracticeSubNav.tsx )",
"Bash(src/components/practice/PracticeSubNav.stories.tsx )",
"Bash(\"src/components/practice/GameBreakScreen.stories.tsx\" )",
"Bash(\"src/components/practice/PracticeSubNav.tsx\" )",
"Bash(\"src/components/practice/PracticeSubNav.stories.tsx\" )",
"Bash(\"src/components/practice/index.ts\" )",
"Bash(apps/web/scripts/sync-training-data.sh )",
"Bash(apps/web/src/app/api/vision-training/ )",
"Bash(apps/web/src/app/vision-training/ )",
"Bash(apps/web/scripts/train-column-classifier/README.md )",
"Bash(apps/web/scripts/train-column-classifier/augmentation.ts )",
"Bash(apps/web/scripts/train-column-classifier/generateTrainingData.ts )",
"Bash(apps/web/scripts/train-column-classifier/index.ts )",
"Bash(apps/web/scripts/train-column-classifier/renderColumn.tsx )",
"Bash(apps/web/scripts/train-column-classifier/types.ts)",
"Bash(/usr/local/bin/python3:*)",
"Bash(while read p)",
"Bash(scripts/train-column-classifier/.venv/bin/pip install --upgrade pip)",
"Bash(scripts/train-column-classifier/.venv/bin/pip install:*)",
"Bash(scripts/train-column-classifier/.venv/bin/python:*)",
"Bash(brew list:*)",
"Bash(scripts/train-column-classifier/.venv/bin/pip index:*)",
"Bash(scripts/train-column-classifier/.venv/bin/pip:*)",
"WebFetch(domain:pypi.org)",
"Bash(\"/Users/antialias/projects/soroban-abacus-flashcards/apps/web/data/vision-training/.venv/bin/python\" -m pip install Pillow scikit-learn)",
"Bash(src/app/api/vision-training/config.ts )",
"Bash(src/app/api/vision-training/preflight/ )",
"Bash(src/app/vision-training/train/components/wizard/CardCarousel.tsx )",
"Bash(src/app/vision-training/train/components/wizard/ExpandedCard.tsx )",
"Bash(src/app/vision-training/train/components/wizard/PhaseSection.tsx )",
"Bash(src/app/vision-training/train/components/wizard/TrainingWizard.tsx )",
"Bash(src/app/vision-training/train/components/wizard/cards/DataCard.tsx )",
"Bash(src/app/vision-training/train/components/wizard/cards/DependencyCard.tsx )",
"Bash(src/app/vision-training/train/components/wizard/types.ts )",
"Bash(src/app/vision-training/train/components/TrainingDataCapture.tsx )",
"Bash(src/app/vision-training/train/page.tsx )",
"Bash(src/components/vision/CameraCapture.tsx)",
"WebFetch(domain:abaci.one)",
"Bash(./data/vision-training/.venv/bin/pip install tensorflowjs)",
"Bash(sudo rm:*)",
"Bash(data/vision-training/.venv/bin/pip install --upgrade pip)",
"Bash(data/vision-training/.venv/bin/pip install:*)",
"Bash(data/vision-training/.venv/bin/python:*)",
"Bash(/tmp/tfjs-test-model )",
"Bash(/tmp/tfjs-test )",
"Bash(LAYERS_DIR=/Users/antialias/projects/soroban-abacus-flashcards/node_modules/.pnpm/@tensorflow+tfjs@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-layers grep:*)",
"Bash(tee:*)",
"Bash(for d in 0 3 5 7 9)",
"Bash(do data/vision-training/.venv/bin/python scripts/test_model.py --compare-norm --digit $d)",
"Bash(scripts/test_model.py )",
"Bash(scripts/train-column-classifier/train_model.py )",
"Bash(src/app/api/vision-training/ )",
"Bash(src/app/vision-training/ )",
"Bash(src/components/vision/ )",
"Bash(src/hooks/useColumnClassifier.ts )",
"Bash(src/lib/vision/)",
"Bash(data/vision-training/.venv/bin/pip list)",
"Bash(src/app/vision-training/test/page.tsx )",
"Bash(src/lib/vision/boundaryDetector.ts )",
"Bash(src/hooks/useBoundaryDetector.ts )",
"Bash(scripts/test_boundary_model.py )",
"Bash(scripts/train-boundary-detector/ )",
"Bash(public/models/abacus-boundary-detector/ )",
"Bash(src/app/api/vision-training/sync/route.ts )",
"Bash(src/app/api/vision-training/boundary-samples/ )",
"Bash(src/app/api/vision-training/models-summary/ )",
"Bash(src/app/vision-training/train/components/BoundaryDataCapture.tsx )",
"Bash(src/app/vision-training/train/components/BoundaryDataHubModal.tsx )",
"Bash(src/app/vision-training/train/components/wizard/cards/ModelCard.tsx )",
"Bash(src/app/vision-training/train/components/wizard/cards/LoadingCard.tsx )",
"Bash(src/lib/vision/markerInpainting.ts)",
"Bash(src/app/api/vision-training/train/route.ts )",
"Bash(src/app/api/vision-training/samples/route.ts )",
"Bash(src/app/api/vision-training/images/ )",
"Bash(src/app/vision-training/page.tsx )",
"Bash(src/app/vision-training/train/components/ )",
"Bash(src/hooks/useAbacusVision.ts )",
"Bash(src/types/vision.ts )",
"Bash(.claude/CLAUDE.md)",
"Bash(content/blog/vision-powered-abacus-detection.md )",
"Bash(scripts/train-column-classifier/README.md )",
"Bash(src/components/practice/DockedMyAbacus.stories.tsx )",
"Bash(src/components/practice/VisionDetection.stories.tsx)",
"WebFetch(domain:dropbox.tech)",
"WebFetch(domain:blog.thegrizzlylabs.com)",
"WebFetch(domain:readdle.com)",
"Bash(/Users/antialias/projects/soroban-abacus-flashcards/apps/web/data/vision-training/.venv/bin/python:*)",
"Bash(./data/vision-training/.venv/bin/python:*)",
"Bash(.venv-tfjs/bin/python:*)",
"Bash(for d in /Users/antialias/projects/soroban-abacus-flashcards/apps/web/data/vision-training/models/boundary-detector/*/)",
"Bash(do echo '=== $\\(basename $d\\) ===' cat $d/preprocessing.json)",
"Bash(npx biome:*)",
"Bash(if [ -f /Users/antialias/projects/soroban-abacus-flashcards/apps/web/data/vision-training/collected/.deleted ])",
"Bash(then wc -l /Users/antialias/projects/soroban-abacus-flashcards/apps/web/data/vision-training/collected/.deleted)",
"Bash(else echo \"File does not exist\")",
"Bash(fi)",
"WebFetch(domain:docs.opencv.org)",
"mcp__chrome-devtools__new_page",
"mcp__chrome-devtools__close_page",
"WebFetch(domain:www.npmjs.com)",
"Bash(git branch:*)",
"WebFetch(domain:scanbot.io)",
"WebFetch(domain:learnopencv.com)",
"WebFetch(domain:news.ycombinator.com)",
"Bash(npm run typecheck:*)",
"mcp__chrome-devtools__press_key",
"mcp__chrome-devtools__wait_for",
"mcp__chrome-devtools__evaluate_script",
"Bash(npx tsc-alias:*)",
"Bash(tsc-alias:*)",
"Bash(npm run:*)",
"Bash(npx panda:*)",
"Bash(prettier:*)",
"Bash(./generate-compose.sh)",
"WebFetch(domain:docs.docker.com)",
"Bash(./deploy.sh:*)",
"Bash(git -C /Users/antialias/projects/soroban-abacus-flashcards status apps/web/src/app/api/health/)"
],
"deny": [],
"ask": []
},
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": [
"sqlite"
]
}