├── .nvmrc ├── .codetoprompt ├── todos.json └── localExclusions.json ├── python_backend ├── models │ ├── __init__.py │ ├── todo_model.py │ ├── autoselect_request.py │ └── request_models.py ├── repositories │ └── __init__.py ├── undefined │ └── .codetoprompt │ │ ├── localExclusions.json │ │ └── todos.json ├── requirements.txt ├── sitecustomize.py ├── tests │ ├── test_todo_service.py │ └── test_app_endpoints.py ├── utils │ ├── response_utils.py │ └── path_utils.py ├── services │ ├── selection_group_service.py │ ├── metaprompt_service.py │ ├── exclusion_service.py │ ├── service_exceptions.py │ └── todo_service.py ├── controllers │ ├── codemap_controller.py │ ├── token_count_controller.py │ ├── drives_controller.py │ ├── __init__.py │ ├── selection_groups_controller.py │ ├── prompt_controller.py │ ├── project_controller.py │ ├── autoselect_controller.py │ ├── resolve_folder_controller.py │ ├── metaprompts_controller.py │ ├── todo_controller.py │ ├── exclusions_controller.py │ └── kanban_controller.py └── app.py ├── .env.local ├── postcss.config.js ├── lib ├── utils.ts ├── hooks │ ├── useDebounce.ts │ ├── useUIState.ts │ ├── useServiceActions.ts │ ├── useDataInitialization.ts │ ├── useRefactoredHomePageLogic.ts │ └── useProjectLogic.ts └── treeUtils.ts ├── ignoreDirs.txt ├── .claude └── settings.local.json ├── ports.ini ├── next-env.d.ts ├── .gitignore ├── types ├── global.d.ts └── index.ts ├── public ├── noise-texture.svg └── grid-pattern.svg ├── .eslintrc.js ├── next.config.js ├── tsconfig.json ├── components ├── ui │ ├── label.tsx │ ├── input.tsx │ ├── separator.tsx │ ├── progress.tsx │ ├── textarea.tsx │ ├── checkbox.tsx │ ├── badge.tsx │ ├── tooltip.tsx │ ├── alert.tsx │ ├── scroll-area.tsx │ ├── tabs.tsx │ ├── button.tsx │ ├── card.tsx │ ├── theme-toggle.tsx │ ├── toaster.tsx │ ├── table.tsx │ └── dialog.tsx └── ErrorBoundary.tsx ├── stores ├── useSettingStore.ts ├── useUserStoryStore.ts ├── useTodoStore.ts ├── useAppStore.ts ├── usePromptStore.ts ├── useExclusionStore.ts ├── useSelectionGroupStore.ts └── useKanbanStore.ts ├── views ├── TestButtonView.tsx ├── GlobalErrorToestView.tsx ├── layout │ ├── WelcomeView.tsx │ └── MainLayoutView.tsx └── SettingsModalView.tsx ├── .codex └── setup.sh ├── services ├── codemapServiceHooks.ts ├── selectionGroupServiceHooks.ts ├── autoSelectServiceHooks.ts ├── projectServiceHooks.ts ├── apiService.ts ├── exclusionServiceHooks.ts ├── kanbanServiceHooks.ts └── promptServiceHooks.ts ├── scripts ├── run-electron.js └── postinstall.js ├── pages └── _app.tsx ├── .github └── workflows │ └── ci.yml ├── package.json └── tailwind.config.js /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /.codetoprompt/todos.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /python_backend/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /python_backend/repositories/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env.local: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_API_URL=http://127.0.0.1:5010 2 | -------------------------------------------------------------------------------- /python_backend/undefined/.codetoprompt/localExclusions.json: -------------------------------------------------------------------------------- 1 | [ 2 | "package-lock.json" 3 | ] -------------------------------------------------------------------------------- /.codetoprompt/localExclusions.json: -------------------------------------------------------------------------------- 1 | [ 2 | "package-lock.json", 3 | "tsconfig.tsbuildinfo" 4 | ] -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /python_backend/undefined/.codetoprompt/todos.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1741113405206, 4 | "text": "sadasd", 5 | "completed": false 6 | } 7 | ] -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } -------------------------------------------------------------------------------- /ignoreDirs.txt: -------------------------------------------------------------------------------- 1 | .git 2 | node_modules 3 | .next 4 | .github 5 | venv 6 | __pycache__ 7 | build 8 | .codetoprompt 9 | .idea 10 | .vscode 11 | externalLibs 12 | out 13 | dummy_tests 14 | dist 15 | -------------------------------------------------------------------------------- /.claude/settings.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "permissions": { 3 | "allow": [ 4 | "Bash(npm install:*)", 5 | "Bash(npm run dev:*)", 6 | "Bash(lsof:*)" 7 | ], 8 | "deny": [] 9 | } 10 | } -------------------------------------------------------------------------------- /ports.ini: -------------------------------------------------------------------------------- 1 | # File: ports.ini 2 | # NEW FILE 3 | # Configuration for application ports 4 | 5 | [Ports] 6 | Frontend = 3010 7 | Backend = 5010 8 | 9 | [API] 10 | # Optional: Define protocol and host if needed, otherwise defaults used 11 | # Protocol = http 12 | # Host = 127.0.0.1 -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | 5 | // NOTE: This file should not be edited 6 | // see https://nextjs.org/docs/pages/api-reference/config/typescript for more information. 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .next/* 2 | node_modules/* 3 | *.pyc 4 | python_backend/venv/ 5 | sample_project/meta_prompts/ 6 | .codetoprompt/* 7 | .DS_Store 8 | .gitignore 9 | my-offline-llm-tool@1.0.0 10 | next 11 | 12 | # .env 13 | python_backend/.env 14 | out/_next/ 15 | out/ 16 | dist/ 17 | 18 | # package-lock.json 19 | # This file is auto-generated by the build process and should not be modified directly. 20 | package-lock.json -------------------------------------------------------------------------------- /types/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module "picomatch" { 2 | const picomatch: (pattern: string | string[], options?: Record) => (input: string) => boolean; 3 | export default picomatch; 4 | } 5 | 6 | declare module "react-window" { 7 | export const FixedSizeList: any; 8 | export const VariableSizeList: any; 9 | export type ListOnScrollProps = any; 10 | export type ListChildComponentProps = any; 11 | } 12 | -------------------------------------------------------------------------------- /public/noise-texture.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /python_backend/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.3.3 2 | flask-cors==4.0.0 3 | python-dotenv==1.0.1 4 | Werkzeug==2.3.7 5 | itsdangerous==2.1.2 6 | Jinja2==3.1.2 7 | pytest==7.4.0 8 | gunicorn==21.2.0 9 | tiktoken==0.6.0 10 | pathspec==0.12.1 11 | tree_sitter==0.21.3 12 | tree_sitter_languages==1.10.2 ; python_version < "3.13" 13 | tree_sitter_language_pack>=0.7.0 ; python_version >= "3.13" 14 | tree_sitter_cpp==0.23.4 15 | tree_sitter_c==0.23.4 16 | httpx==0.27.0 17 | responses==0.25.0 18 | pydantic<2 -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /** @type {import('eslint').Linter.Config} */ 2 | module.exports = { 3 | extends: ['next', 'next/core-web-vitals'], 4 | parser: '@typescript-eslint/parser', 5 | plugins: ['@typescript-eslint'], 6 | rules: { 7 | // 👉 Add or tweak project‑specific rules here. 8 | // Examples: 9 | // '@typescript-eslint/explicit-function-return-type': 'warn', 10 | // 'react/no-unescaped-entities': 'off', 11 | }, 12 | ignorePatterns: ['python_backend/**', 'node_modules/**'], 13 | }; 14 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | // next.config.js 2 | /** @type {import('next').NextConfig} */ 3 | const nextConfig = { 4 | reactStrictMode: true, 5 | eslint: { dirs: ["pages","components","lib","services","stores","views","types","scripts"], ignoreDuringBuilds: true }, 6 | typescript: { ignoreBuildErrors: true }, 7 | output: 'export', 8 | 9 | // Add assetPrefix to make paths relative for file:// protocol 10 | assetPrefix: './', 11 | 12 | images: { 13 | unoptimized: true, // Required for 'output: export' 14 | } 15 | }; 16 | 17 | module.exports = nextConfig; -------------------------------------------------------------------------------- /lib/hooks/useDebounce.ts: -------------------------------------------------------------------------------- 1 | // lib/hooks/useDebounce.ts 2 | import { useEffect, useState } from "react"; 3 | 4 | /** 5 | * Debounce any primitive or serialisable value. 6 | * Returns the debounced value that only updates 7 | * after `delay` ms of no changes. 8 | */ 9 | export function useDebounce(value: T, delay = 300): T { 10 | const [debounced, setDebounced] = useState(value); 11 | 12 | useEffect(() => { 13 | const t = setTimeout(() => setDebounced(value), delay); 14 | return () => clearTimeout(t); 15 | }, [value, delay]); 16 | 17 | return debounced; 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": false, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "module": "ESNext", 9 | "moduleResolution": "Node", 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "jsx": "preserve", 14 | "noEmit": true, 15 | "incremental": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "baseUrl": ".", 18 | "paths": { 19 | "@/*": ["./*"] 20 | } 21 | }, 22 | "include": [ 23 | "next-env.d.ts", 24 | "**/*.ts", 25 | "**/*.tsx" 26 | ], 27 | "exclude": [ 28 | "node_modules" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | // components/ui/label.tsx 2 | 3 | import * as React from 'react' 4 | import { cn } from '@/lib/utils' 5 | 6 | export interface LabelProps extends React.LabelHTMLAttributes {} 7 | 8 | /** 9 | * Basic label element with some styling/utility classes. 10 | */ 11 | export const Label = React.forwardRef( 12 | ({ className, ...props }, ref) => { 13 | return ( 14 |