automagik-forge 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cargo/config.toml +13 -0
- package/.claude/commands/commit.md +376 -0
- package/.claude/commands/prompt.md +871 -0
- package/.env.example +20 -0
- package/.github/actions/setup-node/action.yml +29 -0
- package/.github/images/automagik-logo.png +0 -0
- package/.github/workflows/pre-release.yml +470 -0
- package/.github/workflows/publish.yml +145 -0
- package/.github/workflows/test.yml +63 -0
- package/.mcp.json +57 -0
- package/AGENT.md +40 -0
- package/CLAUDE.md +40 -0
- package/CODE-OF-CONDUCT.md +89 -0
- package/Cargo.toml +19 -0
- package/Dockerfile +43 -0
- package/LICENSE +201 -0
- package/Makefile +97 -0
- package/README.md +447 -143
- package/backend/.sqlx/query-01b7e2bac1261d8be3d03c03df3e5220590da6c31c77f161074fc62752d63881.json +12 -0
- package/backend/.sqlx/query-03f2b02ba6dc5ea2b3cf6b1004caea0ad6bcc10ebd63f441d321a389f026e263.json +12 -0
- package/backend/.sqlx/query-0923b77d137a29fc54d399a873ff15fc4af894490bc65a4d344a7575cb0d8643.json +12 -0
- package/backend/.sqlx/query-0f808bcdb63c5f180836e448dd64c435c51758b2fc54a52ce9e67495b1ab200e.json +68 -0
- package/backend/.sqlx/query-1268afe9ca849daa6722e3df7ca8e9e61f0d37052e782bb5452ab8e1018d9b63.json +12 -0
- package/backend/.sqlx/query-1b082630a9622f8667ee7a9aba2c2d3176019a68c6bb83d33008594821415a57.json +12 -0
- package/backend/.sqlx/query-1c7b06ba1e112abf6b945a2ff08a0b40ec23f3738c2e7399f067b558cf8d490e.json +12 -0
- package/backend/.sqlx/query-1f619f01f46859a64ded531dd0ef61abacfe62e758abe7030a6aa745140b95ca.json +104 -0
- package/backend/.sqlx/query-1fca1ce14b4b20205364cd1f1f45ebe1d2e30cd745e59e189d56487b5639dfbb.json +12 -0
- package/backend/.sqlx/query-212828320e8d871ab9d83705a040b23bcf0393dc7252177fc539a74657f578ef.json +32 -0
- package/backend/.sqlx/query-290ce5c152be8d36e58ff42570f9157beb07ab9e77a03ec6fc30b4f56f9b8f6b.json +56 -0
- package/backend/.sqlx/query-2b471d2c2e8ffbe0cd42d2a91b814c0d79f9d09200f147e3cea33ba4ce673c8a.json +68 -0
- package/backend/.sqlx/query-354a48c705bb9bb2048c1b7f10fcb714e23f9db82b7a4ea6932486197b2ede6a.json +92 -0
- package/backend/.sqlx/query-36c9e3dd10648e94b949db5c91a774ecb1e10a899ef95da74066eccedca4d8b2.json +12 -0
- package/backend/.sqlx/query-36e4ba7bbd81b402d5a20b6005755eafbb174c8dda442081823406ac32809a94.json +56 -0
- package/backend/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json +62 -0
- package/backend/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json +62 -0
- package/backend/.sqlx/query-3d6bd16fbce59efe30b7f67ea342e0e4ea6d1432389c02468ad79f1f742d4031.json +56 -0
- package/backend/.sqlx/query-4049ca413b285a05aca6b25385e9c8185575f01e9069e4e8581aa45d713f612f.json +32 -0
- package/backend/.sqlx/query-412bacd3477d86369082e90f52240407abce436cb81292d42b2dbe1e5c18eea1.json +104 -0
- package/backend/.sqlx/query-417a8b1ff4e51de82aea0159a3b97932224dc325b23476cb84153d690227fd8b.json +62 -0
- package/backend/.sqlx/query-461cc1b0bb6fd909afc9dd2246e8526b3771cfbb0b22ae4b5d17b51af587b9e2.json +56 -0
- package/backend/.sqlx/query-58408c7a8cdeeda0bef359f1f9bd91299a339dc2b191462fc58c9736a56d5227.json +92 -0
- package/backend/.sqlx/query-5a886026d75d515c01f347cc203c8d99dd04c61dc468e2e4c5aa548436d13834.json +62 -0
- package/backend/.sqlx/query-5b902137b11022d2e1a5c4f6a9c83fec1a856c6a710aff831abd2382ede76b43.json +12 -0
- package/backend/.sqlx/query-5ed1238e52e59bb5f76c0f153fd99a14093f7ce2585bf9843585608f17ec575b.json +104 -0
- package/backend/.sqlx/query-6e8b860b14decfc2227dc57213f38442943d3fbef5c8418fd6b634c6e0f5e2ea.json +104 -0
- package/backend/.sqlx/query-6ec414276994c4ccb2433eaa5b1b342168557d17ddf5a52dac84cb1b59b9de8f.json +68 -0
- package/backend/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json +62 -0
- package/backend/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json +62 -0
- package/backend/.sqlx/query-75239b2da188f749707d77f3c1544332ca70db3d6d6743b2601dc0d167536437.json +62 -0
- package/backend/.sqlx/query-83d10e29f8478aff33434f9ac67068e013b888b953a2657e2bb72a6f619d04f2.json +50 -0
- package/backend/.sqlx/query-8610803360ea18b9b9d078a6981ea56abfbfe84e6354fc1d5ae4c622e01410ed.json +68 -0
- package/backend/.sqlx/query-86d03eb70eef39c59296416867f2ee66c9f7cd8b7f961fbda2f89fc0a1c442c2.json +12 -0
- package/backend/.sqlx/query-87d0feb5a6b442bad9c60068ea7569599cc6fc91a0e2692ecb42e93b03201b9d.json +68 -0
- package/backend/.sqlx/query-8a67b3b3337248f06a57bdf8a908f7ef23177431eaed82dc08c94c3e5944340e.json +12 -0
- package/backend/.sqlx/query-8f01ebd64bdcde6a090479f14810d73ba23020e76fd70854ac57f2da251702c3.json +12 -0
- package/backend/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json +62 -0
- package/backend/.sqlx/query-92e8bdbcd80c5ff3db7a35cf79492048803ef305cbdef0d0a1fe5dc881ca8c71.json +104 -0
- package/backend/.sqlx/query-93a1605f90e9672dad29b472b6ad85fa9a55ea3ffa5abcb8724b09d61be254ca.json +20 -0
- package/backend/.sqlx/query-9472c8fb477958167f5fae40b85ac44252468c5226b2cdd7770f027332eed6d7.json +104 -0
- package/backend/.sqlx/query-96036c4f9e0f48bdc5a4a4588f0c5f288ac7aaa5425cac40fc33f337e1a351f2.json +56 -0
- package/backend/.sqlx/query-9edb2c01e91fd0f0fe7b56e988c7ae0393150f50be3f419a981e035c0121dfc7.json +104 -0
- package/backend/.sqlx/query-a157cf00616f703bfba21927f1eb1c9eec2a81c02da15f66efdba0b6c375de1b.json +26 -0
- package/backend/.sqlx/query-a31fff84f3b8e532fd1160447d89d700f06ae08821fee00c9a5b60492b05259c.json +62 -0
- package/backend/.sqlx/query-a5ba908419fb3e456bdd2daca41ba06cc3212ffffb8520fc7dbbcc8b60ada314.json +12 -0
- package/backend/.sqlx/query-a6d2961718dbc3b1a925e549f49a159c561bef58c105529275f274b27e2eba5b.json +104 -0
- package/backend/.sqlx/query-a9e93d5b09b29faf66e387e4d7596a792d81e75c4d3726e83c2963e8d7c9b56f.json +104 -0
- package/backend/.sqlx/query-ac5247c8d7fb86e4650c4b0eb9420031614c831b7b085083bac20c1af314c538.json +12 -0
- package/backend/.sqlx/query-afef9467be74c411c4cb119a8b2b1aea53049877dfc30cc60b486134ba4b4c9f.json +68 -0
- package/backend/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json +62 -0
- package/backend/.sqlx/query-c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7.json +20 -0
- package/backend/.sqlx/query-c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b.json +12 -0
- package/backend/.sqlx/query-c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae.json +12 -0
- package/backend/.sqlx/query-d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de.json +12 -0
- package/backend/.sqlx/query-d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2.json +20 -0
- package/backend/.sqlx/query-d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846.json +12 -0
- package/backend/.sqlx/query-ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94.json +12 -0
- package/backend/Cargo.toml +71 -0
- package/backend/build.rs +32 -0
- package/backend/migrations/20250617183714_init.sql +44 -0
- package/backend/migrations/20250620212427_execution_processes.sql +25 -0
- package/backend/migrations/20250620214100_remove_stdout_stderr_from_task_attempts.sql +28 -0
- package/backend/migrations/20250621120000_relate_activities_to_execution_processes.sql +23 -0
- package/backend/migrations/20250623120000_executor_sessions.sql +17 -0
- package/backend/migrations/20250623130000_add_executor_type_to_execution_processes.sql +4 -0
- package/backend/migrations/20250625000000_add_dev_script_to_projects.sql +4 -0
- package/backend/migrations/20250701000000_add_branch_to_task_attempts.sql +2 -0
- package/backend/migrations/20250701000001_add_pr_tracking_to_task_attempts.sql +5 -0
- package/backend/migrations/20250701120000_add_assistant_message_to_executor_sessions.sql +2 -0
- package/backend/migrations/20250708000000_add_base_branch_to_task_attempts.sql +2 -0
- package/backend/migrations/20250709000000_add_worktree_deleted_flag.sql +2 -0
- package/backend/migrations/20250710000000_add_setup_completion.sql +3 -0
- package/backend/migrations/20250715154859_add_task_templates.sql +25 -0
- package/backend/migrations/20250716143725_add_default_templates.sql +174 -0
- package/backend/migrations/20250716161432_update_executor_names_to_kebab_case.sql +20 -0
- package/backend/migrations/20250716170000_add_parent_task_to_tasks.sql +7 -0
- package/backend/migrations/20250717000000_drop_task_attempt_activities.sql +9 -0
- package/backend/migrations/20250719000000_add_cleanup_script_to_projects.sql +2 -0
- package/backend/migrations/20250720000000_add_cleanupscript_to_process_type_constraint.sql +25 -0
- package/backend/migrations/20250723000000_add_wish_to_tasks.sql +7 -0
- package/backend/migrations/20250724000000_remove_unique_wish_constraint.sql +5 -0
- package/backend/scripts/toast-notification.ps1 +23 -0
- package/backend/sounds/abstract-sound1.wav +0 -0
- package/backend/sounds/abstract-sound2.wav +0 -0
- package/backend/sounds/abstract-sound3.wav +0 -0
- package/backend/sounds/abstract-sound4.wav +0 -0
- package/backend/sounds/cow-mooing.wav +0 -0
- package/backend/sounds/phone-vibration.wav +0 -0
- package/backend/sounds/rooster.wav +0 -0
- package/backend/src/app_state.rs +218 -0
- package/backend/src/bin/generate_types.rs +189 -0
- package/backend/src/bin/mcp_task_server.rs +191 -0
- package/backend/src/execution_monitor.rs +1193 -0
- package/backend/src/executor.rs +1053 -0
- package/backend/src/executors/amp.rs +697 -0
- package/backend/src/executors/ccr.rs +91 -0
- package/backend/src/executors/charm_opencode.rs +113 -0
- package/backend/src/executors/claude.rs +887 -0
- package/backend/src/executors/cleanup_script.rs +124 -0
- package/backend/src/executors/dev_server.rs +53 -0
- package/backend/src/executors/echo.rs +79 -0
- package/backend/src/executors/gemini/config.rs +67 -0
- package/backend/src/executors/gemini/streaming.rs +363 -0
- package/backend/src/executors/gemini.rs +765 -0
- package/backend/src/executors/mod.rs +23 -0
- package/backend/src/executors/opencode_ai.rs +113 -0
- package/backend/src/executors/setup_script.rs +130 -0
- package/backend/src/executors/sst_opencode/filter.rs +184 -0
- package/backend/src/executors/sst_opencode/tools.rs +139 -0
- package/backend/src/executors/sst_opencode.rs +756 -0
- package/backend/src/lib.rs +45 -0
- package/backend/src/main.rs +324 -0
- package/backend/src/mcp/mod.rs +1 -0
- package/backend/src/mcp/task_server.rs +850 -0
- package/backend/src/middleware/mod.rs +3 -0
- package/backend/src/middleware/model_loaders.rs +242 -0
- package/backend/src/models/api_response.rs +36 -0
- package/backend/src/models/config.rs +375 -0
- package/backend/src/models/execution_process.rs +430 -0
- package/backend/src/models/executor_session.rs +225 -0
- package/backend/src/models/mod.rs +12 -0
- package/backend/src/models/project.rs +356 -0
- package/backend/src/models/task.rs +345 -0
- package/backend/src/models/task_attempt.rs +1214 -0
- package/backend/src/models/task_template.rs +146 -0
- package/backend/src/openapi.rs +93 -0
- package/backend/src/routes/auth.rs +297 -0
- package/backend/src/routes/config.rs +385 -0
- package/backend/src/routes/filesystem.rs +228 -0
- package/backend/src/routes/health.rs +16 -0
- package/backend/src/routes/mod.rs +9 -0
- package/backend/src/routes/projects.rs +562 -0
- package/backend/src/routes/stream.rs +244 -0
- package/backend/src/routes/task_attempts.rs +1172 -0
- package/backend/src/routes/task_templates.rs +229 -0
- package/backend/src/routes/tasks.rs +353 -0
- package/backend/src/services/analytics.rs +216 -0
- package/backend/src/services/git_service.rs +1321 -0
- package/backend/src/services/github_service.rs +307 -0
- package/backend/src/services/mod.rs +13 -0
- package/backend/src/services/notification_service.rs +263 -0
- package/backend/src/services/pr_monitor.rs +214 -0
- package/backend/src/services/process_service.rs +940 -0
- package/backend/src/utils/path.rs +96 -0
- package/backend/src/utils/shell.rs +19 -0
- package/backend/src/utils/text.rs +24 -0
- package/backend/src/utils/worktree_manager.rs +578 -0
- package/backend/src/utils.rs +125 -0
- package/backend/test.db +0 -0
- package/build-npm-package.sh +61 -0
- package/dev_assets_seed/config.json +19 -0
- package/frontend/.eslintrc.json +25 -0
- package/frontend/.prettierrc.json +8 -0
- package/frontend/components.json +17 -0
- package/frontend/index.html +19 -0
- package/frontend/package-lock.json +7321 -0
- package/frontend/package.json +61 -0
- package/frontend/postcss.config.js +6 -0
- package/frontend/public/android-chrome-192x192.png +0 -0
- package/frontend/public/android-chrome-512x512.png +0 -0
- package/frontend/public/apple-touch-icon.png +0 -0
- package/frontend/public/automagik-forge-logo-dark.svg +3 -0
- package/frontend/public/automagik-forge-logo.svg +3 -0
- package/frontend/public/automagik-forge-screenshot-overview.png +0 -0
- package/frontend/public/favicon-16x16.png +0 -0
- package/frontend/public/favicon-32x32.png +0 -0
- package/frontend/public/favicon.ico +0 -0
- package/frontend/public/site.webmanifest +1 -0
- package/frontend/public/viba-kanban-favicon.png +0 -0
- package/frontend/src/App.tsx +157 -0
- package/frontend/src/components/DisclaimerDialog.tsx +106 -0
- package/frontend/src/components/GitHubLoginDialog.tsx +314 -0
- package/frontend/src/components/OnboardingDialog.tsx +185 -0
- package/frontend/src/components/PrivacyOptInDialog.tsx +130 -0
- package/frontend/src/components/ProvidePatDialog.tsx +98 -0
- package/frontend/src/components/TaskTemplateManager.tsx +336 -0
- package/frontend/src/components/config-provider.tsx +119 -0
- package/frontend/src/components/context/TaskDetailsContextProvider.tsx +470 -0
- package/frontend/src/components/context/taskDetailsContext.ts +125 -0
- package/frontend/src/components/keyboard-shortcuts-demo.tsx +35 -0
- package/frontend/src/components/layout/navbar.tsx +86 -0
- package/frontend/src/components/logo.tsx +44 -0
- package/frontend/src/components/projects/ProjectCard.tsx +155 -0
- package/frontend/src/components/projects/project-detail.tsx +251 -0
- package/frontend/src/components/projects/project-form-fields.tsx +238 -0
- package/frontend/src/components/projects/project-form.tsx +301 -0
- package/frontend/src/components/projects/project-list.tsx +200 -0
- package/frontend/src/components/projects/projects-page.tsx +20 -0
- package/frontend/src/components/tasks/BranchSelector.tsx +169 -0
- package/frontend/src/components/tasks/DeleteFileConfirmationDialog.tsx +94 -0
- package/frontend/src/components/tasks/EditorSelectionDialog.tsx +119 -0
- package/frontend/src/components/tasks/TaskCard.tsx +154 -0
- package/frontend/src/components/tasks/TaskDetails/CollapsibleToolbar.tsx +33 -0
- package/frontend/src/components/tasks/TaskDetails/DiffCard.tsx +109 -0
- package/frontend/src/components/tasks/TaskDetails/DiffChunkSection.tsx +135 -0
- package/frontend/src/components/tasks/TaskDetails/DiffFile.tsx +296 -0
- package/frontend/src/components/tasks/TaskDetails/DiffTab.tsx +32 -0
- package/frontend/src/components/tasks/TaskDetails/DisplayConversationEntry.tsx +392 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Conversation.tsx +256 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/ConversationEntry.tsx +56 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/NormalizedConversationViewer.tsx +92 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Prompt.tsx +22 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/SetupScriptRunning.tsx +49 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab.tsx +186 -0
- package/frontend/src/components/tasks/TaskDetails/ProcessesTab.tsx +288 -0
- package/frontend/src/components/tasks/TaskDetails/RelatedTasksTab.tsx +216 -0
- package/frontend/src/components/tasks/TaskDetails/TabNavigation.tsx +93 -0
- package/frontend/src/components/tasks/TaskDetailsHeader.tsx +169 -0
- package/frontend/src/components/tasks/TaskDetailsPanel.tsx +126 -0
- package/frontend/src/components/tasks/TaskDetailsToolbar.tsx +302 -0
- package/frontend/src/components/tasks/TaskFollowUpSection.tsx +130 -0
- package/frontend/src/components/tasks/TaskFormDialog.tsx +400 -0
- package/frontend/src/components/tasks/TaskKanbanBoard.tsx +180 -0
- package/frontend/src/components/tasks/Toolbar/CreateAttempt.tsx +259 -0
- package/frontend/src/components/tasks/Toolbar/CreatePRDialog.tsx +243 -0
- package/frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx +899 -0
- package/frontend/src/components/tasks/index.ts +2 -0
- package/frontend/src/components/theme-provider.tsx +82 -0
- package/frontend/src/components/theme-toggle.tsx +36 -0
- package/frontend/src/components/ui/alert.tsx +59 -0
- package/frontend/src/components/ui/auto-expanding-textarea.tsx +70 -0
- package/frontend/src/components/ui/badge.tsx +36 -0
- package/frontend/src/components/ui/button.tsx +56 -0
- package/frontend/src/components/ui/card.tsx +86 -0
- package/frontend/src/components/ui/checkbox.tsx +44 -0
- package/frontend/src/components/ui/chip.tsx +25 -0
- package/frontend/src/components/ui/dialog.tsx +124 -0
- package/frontend/src/components/ui/dropdown-menu.tsx +198 -0
- package/frontend/src/components/ui/file-search-textarea.tsx +292 -0
- package/frontend/src/components/ui/folder-picker.tsx +279 -0
- package/frontend/src/components/ui/input.tsx +25 -0
- package/frontend/src/components/ui/label.tsx +24 -0
- package/frontend/src/components/ui/loader.tsx +26 -0
- package/frontend/src/components/ui/markdown-renderer.tsx +75 -0
- package/frontend/src/components/ui/select.tsx +160 -0
- package/frontend/src/components/ui/separator.tsx +31 -0
- package/frontend/src/components/ui/shadcn-io/kanban/index.tsx +185 -0
- package/frontend/src/components/ui/table.tsx +117 -0
- package/frontend/src/components/ui/tabs.tsx +53 -0
- package/frontend/src/components/ui/textarea.tsx +22 -0
- package/frontend/src/components/ui/tooltip.tsx +28 -0
- package/frontend/src/hooks/useNormalizedConversation.ts +440 -0
- package/frontend/src/index.css +225 -0
- package/frontend/src/lib/api.ts +630 -0
- package/frontend/src/lib/keyboard-shortcuts.ts +266 -0
- package/frontend/src/lib/responsive-config.ts +70 -0
- package/frontend/src/lib/types.ts +39 -0
- package/frontend/src/lib/utils.ts +10 -0
- package/frontend/src/main.tsx +50 -0
- package/frontend/src/pages/McpServers.tsx +418 -0
- package/frontend/src/pages/Settings.tsx +610 -0
- package/frontend/src/pages/project-tasks.tsx +575 -0
- package/frontend/src/pages/projects.tsx +18 -0
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/tailwind.config.js +125 -0
- package/frontend/tsconfig.json +26 -0
- package/frontend/tsconfig.node.json +10 -0
- package/frontend/vite.config.ts +33 -0
- package/npx-cli/README.md +159 -0
- package/npx-cli/automagik-forge-0.0.55.tgz +0 -0
- package/npx-cli/automagik-forge-0.1.0.tgz +0 -0
- package/{dist/linux-x64/automagik-forge.zip → npx-cli/automagik-forge-0.1.10.tgz} +0 -0
- package/npx-cli/package.json +17 -0
- package/npx-cli/vibe-kanban-0.0.55.tgz +0 -0
- package/package.json +23 -13
- package/pnpm-workspace.yaml +2 -0
- package/rust-toolchain.toml +11 -0
- package/rustfmt.toml +3 -0
- package/scripts/load-env.js +43 -0
- package/scripts/mcp_test.js +374 -0
- package/scripts/prepare-db.js +45 -0
- package/scripts/setup-dev-environment.js +274 -0
- package/scripts/start-mcp-sse.js +70 -0
- package/scripts/test-debug.js +32 -0
- package/scripts/test-mcp-sse.js +138 -0
- package/scripts/test-simple.js +44 -0
- package/scripts/test-wish-final.js +179 -0
- package/scripts/test-wish-system.js +221 -0
- package/shared/types.ts +182 -0
- package/test-npm-package.sh +42 -0
- package/dist/linux-x64/automagik-forge-mcp.zip +0 -0
- /package/{bin → npx-cli/bin}/cli.js +0 -0
package/backend/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "SELECT id as \"id!: Uuid\", name, git_repo_path, setup_script, dev_script, cleanup_script, created_at as \"created_at!: DateTime<Utc>\", updated_at as \"updated_at!: DateTime<Utc>\" FROM projects ORDER BY created_at DESC",
|
4
|
+
"describe": {
|
5
|
+
"columns": [
|
6
|
+
{
|
7
|
+
"name": "id!: Uuid",
|
8
|
+
"ordinal": 0,
|
9
|
+
"type_info": "Blob"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "name",
|
13
|
+
"ordinal": 1,
|
14
|
+
"type_info": "Text"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "git_repo_path",
|
18
|
+
"ordinal": 2,
|
19
|
+
"type_info": "Text"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "setup_script",
|
23
|
+
"ordinal": 3,
|
24
|
+
"type_info": "Text"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"name": "dev_script",
|
28
|
+
"ordinal": 4,
|
29
|
+
"type_info": "Text"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"name": "cleanup_script",
|
33
|
+
"ordinal": 5,
|
34
|
+
"type_info": "Text"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"name": "created_at!: DateTime<Utc>",
|
38
|
+
"ordinal": 6,
|
39
|
+
"type_info": "Text"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"name": "updated_at!: DateTime<Utc>",
|
43
|
+
"ordinal": 7,
|
44
|
+
"type_info": "Text"
|
45
|
+
}
|
46
|
+
],
|
47
|
+
"parameters": {
|
48
|
+
"Right": 0
|
49
|
+
},
|
50
|
+
"nullable": [
|
51
|
+
true,
|
52
|
+
false,
|
53
|
+
false,
|
54
|
+
true,
|
55
|
+
true,
|
56
|
+
true,
|
57
|
+
false,
|
58
|
+
false
|
59
|
+
]
|
60
|
+
},
|
61
|
+
"hash": "b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2"
|
62
|
+
}
|
package/backend/.sqlx/query-c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7.json
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "SELECT id as \"id!: Uuid\" FROM tasks WHERE id = $1 AND project_id = $2",
|
4
|
+
"describe": {
|
5
|
+
"columns": [
|
6
|
+
{
|
7
|
+
"name": "id!: Uuid",
|
8
|
+
"ordinal": 0,
|
9
|
+
"type_info": "Blob"
|
10
|
+
}
|
11
|
+
],
|
12
|
+
"parameters": {
|
13
|
+
"Right": 2
|
14
|
+
},
|
15
|
+
"nullable": [
|
16
|
+
true
|
17
|
+
]
|
18
|
+
},
|
19
|
+
"hash": "c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7"
|
20
|
+
}
|
package/backend/.sqlx/query-c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b.json
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "DELETE FROM tasks WHERE id = $1 AND project_id = $2",
|
4
|
+
"describe": {
|
5
|
+
"columns": [],
|
6
|
+
"parameters": {
|
7
|
+
"Right": 2
|
8
|
+
},
|
9
|
+
"nullable": []
|
10
|
+
},
|
11
|
+
"hash": "c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b"
|
12
|
+
}
|
package/backend/.sqlx/query-c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae.json
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "UPDATE execution_processes \n SET status = $1, exit_code = $2, completed_at = $3, updated_at = datetime('now') \n WHERE id = $4",
|
4
|
+
"describe": {
|
5
|
+
"columns": [],
|
6
|
+
"parameters": {
|
7
|
+
"Right": 4
|
8
|
+
},
|
9
|
+
"nullable": []
|
10
|
+
},
|
11
|
+
"hash": "c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae"
|
12
|
+
}
|
package/backend/.sqlx/query-d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de.json
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "UPDATE tasks SET status = $3, updated_at = CURRENT_TIMESTAMP WHERE id = $1 AND project_id = $2",
|
4
|
+
"describe": {
|
5
|
+
"columns": [],
|
6
|
+
"parameters": {
|
7
|
+
"Right": 3
|
8
|
+
},
|
9
|
+
"nullable": []
|
10
|
+
},
|
11
|
+
"hash": "d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de"
|
12
|
+
}
|
package/backend/.sqlx/query-d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2.json
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "\n SELECT COUNT(*) as \"count!: i64\"\n FROM projects\n WHERE id = $1\n ",
|
4
|
+
"describe": {
|
5
|
+
"columns": [
|
6
|
+
{
|
7
|
+
"name": "count!: i64",
|
8
|
+
"ordinal": 0,
|
9
|
+
"type_info": "Integer"
|
10
|
+
}
|
11
|
+
],
|
12
|
+
"parameters": {
|
13
|
+
"Right": 1
|
14
|
+
},
|
15
|
+
"nullable": [
|
16
|
+
false
|
17
|
+
]
|
18
|
+
},
|
19
|
+
"hash": "d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2"
|
20
|
+
}
|
package/backend/.sqlx/query-d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846.json
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "UPDATE executor_sessions \n SET prompt = $1, updated_at = datetime('now') \n WHERE id = $2",
|
4
|
+
"describe": {
|
5
|
+
"columns": [],
|
6
|
+
"parameters": {
|
7
|
+
"Right": 2
|
8
|
+
},
|
9
|
+
"nullable": []
|
10
|
+
},
|
11
|
+
"hash": "d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846"
|
12
|
+
}
|
package/backend/.sqlx/query-ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94.json
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"db_name": "SQLite",
|
3
|
+
"query": "UPDATE execution_processes SET stdout = COALESCE(stdout, '') || $1, updated_at = datetime('now') WHERE id = $2",
|
4
|
+
"describe": {
|
5
|
+
"columns": [],
|
6
|
+
"parameters": {
|
7
|
+
"Right": 2
|
8
|
+
},
|
9
|
+
"nullable": []
|
10
|
+
},
|
11
|
+
"hash": "ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94"
|
12
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
[package]
|
2
|
+
name = "automagik-forge"
|
3
|
+
version = "0.1.13"
|
4
|
+
edition = "2021"
|
5
|
+
default-run = "automagik-forge"
|
6
|
+
build = "build.rs"
|
7
|
+
|
8
|
+
[lib]
|
9
|
+
name = "automagik_forge"
|
10
|
+
path = "src/lib.rs"
|
11
|
+
|
12
|
+
[lints.clippy]
|
13
|
+
uninlined-format-args = "allow"
|
14
|
+
|
15
|
+
[dependencies]
|
16
|
+
tokio = { workspace = true }
|
17
|
+
tokio-util = { version = "0.7" }
|
18
|
+
axum = { workspace = true }
|
19
|
+
tower-http = { workspace = true }
|
20
|
+
serde = { workspace = true }
|
21
|
+
serde_json = { workspace = true }
|
22
|
+
anyhow = { workspace = true }
|
23
|
+
tracing = { workspace = true }
|
24
|
+
tracing-subscriber = { workspace = true }
|
25
|
+
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "sqlite", "chrono", "uuid"] }
|
26
|
+
chrono = { version = "0.4", features = ["serde"] }
|
27
|
+
uuid = { version = "1.0", features = ["v4", "serde"] }
|
28
|
+
ts-rs = { version = "9.0", features = ["uuid-impl", "chrono-impl", "no-serde-warnings"] }
|
29
|
+
dirs = "5.0"
|
30
|
+
xdg = "3.0"
|
31
|
+
git2 = "0.18"
|
32
|
+
async-trait = "0.1"
|
33
|
+
libc = "0.2"
|
34
|
+
rust-embed = "8.2"
|
35
|
+
mime_guess = "2.0"
|
36
|
+
directories = "6.0.0"
|
37
|
+
open = "5.3.2"
|
38
|
+
pathdiff = "0.2.1"
|
39
|
+
ignore = "0.4"
|
40
|
+
command-group = { version = "5.0", features = ["with-tokio"] }
|
41
|
+
nix = { version = "0.29", features = ["signal", "process"] }
|
42
|
+
openssl-sys = { workspace = true }
|
43
|
+
rmcp = { version = "0.3.0", features = ["server", "transport-io", "transport-sse-server"] }
|
44
|
+
schemars = "0.8"
|
45
|
+
regex = "1.11.1"
|
46
|
+
notify-rust = "4.11"
|
47
|
+
octocrab = "0.44"
|
48
|
+
os_info = "3.12.0"
|
49
|
+
sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] }
|
50
|
+
sentry-tower = "0.41.0"
|
51
|
+
sentry-tracing = { version = "0.41.0", features = ["backtrace"] }
|
52
|
+
reqwest = { version = "0.11", features = ["json"] }
|
53
|
+
strip-ansi-escapes = "0.2.1"
|
54
|
+
urlencoding = "2.1.3"
|
55
|
+
lazy_static = "1.4"
|
56
|
+
futures-util = "0.3"
|
57
|
+
async-stream = "0.3"
|
58
|
+
json-patch = "2.0"
|
59
|
+
dotenvy = "0.15"
|
60
|
+
utoipa = { version = "5.1.0", features = ["axum_extras", "chrono", "uuid"] }
|
61
|
+
utoipa-axum = { version = "0.1.0" }
|
62
|
+
utoipa-swagger-ui = { version = "8.0.0", features = ["axum"] }
|
63
|
+
|
64
|
+
[dev-dependencies]
|
65
|
+
tempfile = "3.8"
|
66
|
+
tower = { version = "0.4", features = ["util"] }
|
67
|
+
|
68
|
+
[build-dependencies]
|
69
|
+
dotenv = "0.15"
|
70
|
+
ts-rs = { version = "9.0", features = ["uuid-impl", "chrono-impl", "no-serde-warnings"] }
|
71
|
+
|
package/backend/build.rs
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
use std::{fs, path::Path};
|
2
|
+
|
3
|
+
fn main() {
|
4
|
+
dotenv::dotenv().ok();
|
5
|
+
|
6
|
+
if let Ok(api_key) = std::env::var("POSTHOG_API_KEY") {
|
7
|
+
println!("cargo:rustc-env=POSTHOG_API_KEY={}", api_key);
|
8
|
+
}
|
9
|
+
if let Ok(api_endpoint) = std::env::var("POSTHOG_API_ENDPOINT") {
|
10
|
+
println!("cargo:rustc-env=POSTHOG_API_ENDPOINT={}", api_endpoint);
|
11
|
+
}
|
12
|
+
if let Ok(api_key) = std::env::var("GITHUB_APP_ID") {
|
13
|
+
println!("cargo:rustc-env=GITHUB_APP_ID={}", api_key);
|
14
|
+
}
|
15
|
+
if let Ok(api_endpoint) = std::env::var("GITHUB_APP_CLIENT_ID") {
|
16
|
+
println!("cargo:rustc-env=GITHUB_APP_CLIENT_ID={}", api_endpoint);
|
17
|
+
}
|
18
|
+
|
19
|
+
// Create frontend/dist directory if it doesn't exist
|
20
|
+
let dist_path = Path::new("../frontend/dist");
|
21
|
+
if !dist_path.exists() {
|
22
|
+
println!("cargo:warning=Creating dummy frontend/dist directory for compilation");
|
23
|
+
fs::create_dir_all(dist_path).unwrap();
|
24
|
+
|
25
|
+
// Create a dummy index.html
|
26
|
+
let dummy_html = r#"<!DOCTYPE html>
|
27
|
+
<html><head><title>Build frontend first</title></head>
|
28
|
+
<body><h1>Please build the frontend</h1></body></html>"#;
|
29
|
+
|
30
|
+
fs::write(dist_path.join("index.html"), dummy_html).unwrap();
|
31
|
+
}
|
32
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
PRAGMA foreign_keys = ON;
|
2
|
+
|
3
|
+
CREATE TABLE projects (
|
4
|
+
id BLOB PRIMARY KEY,
|
5
|
+
name TEXT NOT NULL,
|
6
|
+
git_repo_path TEXT NOT NULL DEFAULT '' UNIQUE,
|
7
|
+
setup_script TEXT DEFAULT '',
|
8
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
9
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec'))
|
10
|
+
);
|
11
|
+
|
12
|
+
CREATE TABLE tasks (
|
13
|
+
id BLOB PRIMARY KEY,
|
14
|
+
project_id BLOB NOT NULL,
|
15
|
+
title TEXT NOT NULL,
|
16
|
+
description TEXT,
|
17
|
+
status TEXT NOT NULL DEFAULT 'todo'
|
18
|
+
CHECK (status IN ('todo','inprogress','done','cancelled','inreview')),
|
19
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
20
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
21
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
22
|
+
);
|
23
|
+
|
24
|
+
CREATE TABLE task_attempts (
|
25
|
+
id BLOB PRIMARY KEY,
|
26
|
+
task_id BLOB NOT NULL,
|
27
|
+
worktree_path TEXT NOT NULL,
|
28
|
+
merge_commit TEXT,
|
29
|
+
executor TEXT,
|
30
|
+
stdout TEXT,
|
31
|
+
stderr TEXT,
|
32
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
33
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
34
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
35
|
+
);
|
36
|
+
|
37
|
+
CREATE TABLE task_attempt_activities (
|
38
|
+
id BLOB PRIMARY KEY,
|
39
|
+
task_attempt_id BLOB NOT NULL,
|
40
|
+
status TEXT NOT NULL DEFAULT 'init'
|
41
|
+
CHECK (status IN ('init','setuprunning','setupcomplete','setupfailed','executorrunning','executorcomplete','executorfailed','paused')), note TEXT,
|
42
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
43
|
+
FOREIGN KEY (task_attempt_id) REFERENCES task_attempts(id) ON DELETE CASCADE
|
44
|
+
);
|
@@ -0,0 +1,25 @@
|
|
1
|
+
PRAGMA foreign_keys = ON;
|
2
|
+
|
3
|
+
CREATE TABLE execution_processes (
|
4
|
+
id BLOB PRIMARY KEY,
|
5
|
+
task_attempt_id BLOB NOT NULL,
|
6
|
+
process_type TEXT NOT NULL DEFAULT 'setupscript'
|
7
|
+
CHECK (process_type IN ('setupscript','codingagent','devserver')),
|
8
|
+
status TEXT NOT NULL DEFAULT 'running'
|
9
|
+
CHECK (status IN ('running','completed','failed','killed')),
|
10
|
+
command TEXT NOT NULL,
|
11
|
+
args TEXT, -- JSON array of arguments
|
12
|
+
working_directory TEXT NOT NULL,
|
13
|
+
stdout TEXT,
|
14
|
+
stderr TEXT,
|
15
|
+
exit_code INTEGER,
|
16
|
+
started_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
17
|
+
completed_at TEXT,
|
18
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
19
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
20
|
+
FOREIGN KEY (task_attempt_id) REFERENCES task_attempts(id) ON DELETE CASCADE
|
21
|
+
);
|
22
|
+
|
23
|
+
CREATE INDEX idx_execution_processes_task_attempt_id ON execution_processes(task_attempt_id);
|
24
|
+
CREATE INDEX idx_execution_processes_status ON execution_processes(status);
|
25
|
+
CREATE INDEX idx_execution_processes_type ON execution_processes(process_type);
|
@@ -0,0 +1,28 @@
|
|
1
|
+
PRAGMA foreign_keys = ON;
|
2
|
+
|
3
|
+
-- Remove stdout and stderr columns from task_attempts table
|
4
|
+
-- These are now tracked in the execution_processes table for better granularity
|
5
|
+
|
6
|
+
-- SQLite doesn't support DROP COLUMN directly, so we need to recreate the table
|
7
|
+
-- First, create a new table without stdout and stderr
|
8
|
+
CREATE TABLE task_attempts_new (
|
9
|
+
id BLOB PRIMARY KEY,
|
10
|
+
task_id BLOB NOT NULL,
|
11
|
+
worktree_path TEXT NOT NULL,
|
12
|
+
merge_commit TEXT,
|
13
|
+
executor TEXT,
|
14
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
15
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
16
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
17
|
+
);
|
18
|
+
|
19
|
+
-- Copy data from old table to new table (excluding stdout and stderr)
|
20
|
+
INSERT INTO task_attempts_new (id, task_id, worktree_path, merge_commit, executor, created_at, updated_at)
|
21
|
+
SELECT id, task_id, worktree_path, merge_commit, executor, created_at, updated_at
|
22
|
+
FROM task_attempts;
|
23
|
+
|
24
|
+
-- Drop the old table
|
25
|
+
DROP TABLE task_attempts;
|
26
|
+
|
27
|
+
-- Rename the new table to the original name
|
28
|
+
ALTER TABLE task_attempts_new RENAME TO task_attempts;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
-- Migration to relate task_attempt_activities to execution_processes instead of task_attempts
|
2
|
+
-- This migration will:
|
3
|
+
-- 1. Drop and recreate the task_attempt_activities table with execution_process_id
|
4
|
+
-- 2. Clear existing data as it cannot be migrated meaningfully
|
5
|
+
|
6
|
+
-- Drop the existing table (this will wipe existing activity data)
|
7
|
+
DROP TABLE IF EXISTS task_attempt_activities;
|
8
|
+
|
9
|
+
-- Create the new table structure with execution_process_id foreign key
|
10
|
+
CREATE TABLE task_attempt_activities (
|
11
|
+
id TEXT PRIMARY KEY,
|
12
|
+
execution_process_id TEXT NOT NULL REFERENCES execution_processes(id) ON DELETE CASCADE,
|
13
|
+
status TEXT NOT NULL,
|
14
|
+
note TEXT,
|
15
|
+
created_at DATETIME NOT NULL DEFAULT (datetime('now')),
|
16
|
+
FOREIGN KEY (execution_process_id) REFERENCES execution_processes(id) ON DELETE CASCADE
|
17
|
+
);
|
18
|
+
|
19
|
+
-- Create index for efficient lookups by execution_process_id
|
20
|
+
CREATE INDEX idx_task_attempt_activities_execution_process_id ON task_attempt_activities(execution_process_id);
|
21
|
+
|
22
|
+
-- Create index for efficient lookups by created_at for ordering
|
23
|
+
CREATE INDEX idx_task_attempt_activities_created_at ON task_attempt_activities(created_at);
|
@@ -0,0 +1,17 @@
|
|
1
|
+
PRAGMA foreign_keys = ON;
|
2
|
+
|
3
|
+
CREATE TABLE executor_sessions (
|
4
|
+
id BLOB PRIMARY KEY,
|
5
|
+
task_attempt_id BLOB NOT NULL,
|
6
|
+
execution_process_id BLOB NOT NULL,
|
7
|
+
session_id TEXT, -- External session ID from Claude/Amp
|
8
|
+
prompt TEXT, -- The prompt sent to the executor
|
9
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
10
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
11
|
+
FOREIGN KEY (task_attempt_id) REFERENCES task_attempts(id) ON DELETE CASCADE,
|
12
|
+
FOREIGN KEY (execution_process_id) REFERENCES execution_processes(id) ON DELETE CASCADE
|
13
|
+
);
|
14
|
+
|
15
|
+
CREATE INDEX idx_executor_sessions_task_attempt_id ON executor_sessions(task_attempt_id);
|
16
|
+
CREATE INDEX idx_executor_sessions_execution_process_id ON executor_sessions(execution_process_id);
|
17
|
+
CREATE INDEX idx_executor_sessions_session_id ON executor_sessions(session_id);
|
@@ -0,0 +1,5 @@
|
|
1
|
+
-- Add PR tracking fields to task_attempts table
|
2
|
+
ALTER TABLE task_attempts ADD COLUMN pr_url TEXT;
|
3
|
+
ALTER TABLE task_attempts ADD COLUMN pr_number INTEGER;
|
4
|
+
ALTER TABLE task_attempts ADD COLUMN pr_status TEXT; -- open, closed, merged
|
5
|
+
ALTER TABLE task_attempts ADD COLUMN pr_merged_at DATETIME;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-- Add task templates tables
|
2
|
+
CREATE TABLE task_templates (
|
3
|
+
id BLOB PRIMARY KEY,
|
4
|
+
project_id BLOB, -- NULL for global templates
|
5
|
+
title TEXT NOT NULL,
|
6
|
+
description TEXT,
|
7
|
+
template_name TEXT NOT NULL, -- Display name for the template
|
8
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
9
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
|
10
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
11
|
+
);
|
12
|
+
|
13
|
+
-- Add index for faster queries
|
14
|
+
CREATE INDEX idx_task_templates_project_id ON task_templates(project_id);
|
15
|
+
|
16
|
+
-- Add unique constraints to prevent duplicate template names within same scope
|
17
|
+
-- For project-specific templates: unique within each project
|
18
|
+
CREATE UNIQUE INDEX idx_task_templates_unique_name_project
|
19
|
+
ON task_templates(project_id, template_name)
|
20
|
+
WHERE project_id IS NOT NULL;
|
21
|
+
|
22
|
+
-- For global templates: unique across all global templates
|
23
|
+
CREATE UNIQUE INDEX idx_task_templates_unique_name_global
|
24
|
+
ON task_templates(template_name)
|
25
|
+
WHERE project_id IS NULL;
|
@@ -0,0 +1,174 @@
|
|
1
|
+
-- Add default global templates
|
2
|
+
|
3
|
+
-- 1. Bug Analysis template
|
4
|
+
INSERT INTO task_templates (
|
5
|
+
id,
|
6
|
+
project_id,
|
7
|
+
title,
|
8
|
+
description,
|
9
|
+
template_name,
|
10
|
+
created_at,
|
11
|
+
updated_at
|
12
|
+
) VALUES (
|
13
|
+
randomblob(16),
|
14
|
+
NULL, -- Global template
|
15
|
+
'Analyze codebase for potential bugs and issues',
|
16
|
+
'Perform a comprehensive analysis of the project codebase to identify potential bugs, code smells, and areas of improvement.
|
17
|
+
|
18
|
+
## Analysis Checklist:
|
19
|
+
|
20
|
+
### 1. Static Code Analysis
|
21
|
+
- [ ] Run linting tools to identify syntax and style issues
|
22
|
+
- [ ] Check for unused variables, imports, and dead code
|
23
|
+
- [ ] Identify potential type errors or mismatches
|
24
|
+
- [ ] Look for deprecated API usage
|
25
|
+
|
26
|
+
### 2. Common Bug Patterns
|
27
|
+
- [ ] Check for null/undefined reference errors
|
28
|
+
- [ ] Identify potential race conditions
|
29
|
+
- [ ] Look for improper error handling
|
30
|
+
- [ ] Check for resource leaks (memory, file handles, connections)
|
31
|
+
- [ ] Identify potential security vulnerabilities (XSS, SQL injection, etc.)
|
32
|
+
|
33
|
+
### 3. Code Quality Issues
|
34
|
+
- [ ] Identify overly complex functions (high cyclomatic complexity)
|
35
|
+
- [ ] Look for code duplication
|
36
|
+
- [ ] Check for missing or inadequate input validation
|
37
|
+
- [ ] Identify hardcoded values that should be configurable
|
38
|
+
|
39
|
+
### 4. Testing Gaps
|
40
|
+
- [ ] Identify untested code paths
|
41
|
+
- [ ] Check for missing edge case tests
|
42
|
+
- [ ] Look for inadequate error scenario testing
|
43
|
+
|
44
|
+
### 5. Performance Concerns
|
45
|
+
- [ ] Identify potential performance bottlenecks
|
46
|
+
- [ ] Check for inefficient algorithms or data structures
|
47
|
+
- [ ] Look for unnecessary database queries or API calls
|
48
|
+
|
49
|
+
## Deliverables:
|
50
|
+
1. Prioritized list of identified issues
|
51
|
+
2. Recommendations for fixes
|
52
|
+
3. Estimated effort for addressing each issue',
|
53
|
+
'Bug Analysis',
|
54
|
+
datetime('now', 'subsec'),
|
55
|
+
datetime('now', 'subsec')
|
56
|
+
);
|
57
|
+
|
58
|
+
-- 2. Unit Test template
|
59
|
+
INSERT INTO task_templates (
|
60
|
+
id,
|
61
|
+
project_id,
|
62
|
+
title,
|
63
|
+
description,
|
64
|
+
template_name,
|
65
|
+
created_at,
|
66
|
+
updated_at
|
67
|
+
) VALUES (
|
68
|
+
randomblob(16),
|
69
|
+
NULL, -- Global template
|
70
|
+
'Add unit tests for [component/function]',
|
71
|
+
'Write unit tests to improve code coverage and ensure reliability.
|
72
|
+
|
73
|
+
## Unit Testing Checklist
|
74
|
+
|
75
|
+
### 1. Identify What to Test
|
76
|
+
- [ ] Run coverage report to find untested functions
|
77
|
+
- [ ] List the specific functions/methods to test
|
78
|
+
- [ ] Note current coverage percentage
|
79
|
+
|
80
|
+
### 2. Write Tests
|
81
|
+
- [ ] Test the happy path (expected behavior)
|
82
|
+
- [ ] Test edge cases (empty inputs, boundaries)
|
83
|
+
- [ ] Test error cases (invalid inputs, exceptions)
|
84
|
+
- [ ] Mock external dependencies
|
85
|
+
- [ ] Use descriptive test names
|
86
|
+
|
87
|
+
### 3. Test Quality
|
88
|
+
- [ ] Each test focuses on one behavior
|
89
|
+
- [ ] Tests can run independently
|
90
|
+
- [ ] No hardcoded values that might change
|
91
|
+
- [ ] Clear assertions that verify the behavior
|
92
|
+
|
93
|
+
## Examples to Cover:
|
94
|
+
- Normal inputs → Expected outputs
|
95
|
+
- Empty/null inputs → Proper handling
|
96
|
+
- Invalid inputs → Error cases
|
97
|
+
- Boundary values → Edge case behavior
|
98
|
+
|
99
|
+
## Goal
|
100
|
+
Achieve at least 80% coverage for the target component
|
101
|
+
|
102
|
+
## Deliverables
|
103
|
+
1. New test file(s) with comprehensive unit tests
|
104
|
+
2. Updated coverage report
|
105
|
+
3. All tests passing',
|
106
|
+
'Add Unit Tests',
|
107
|
+
datetime('now', 'subsec'),
|
108
|
+
datetime('now', 'subsec')
|
109
|
+
);
|
110
|
+
|
111
|
+
-- 3. Code Refactoring template
|
112
|
+
INSERT INTO task_templates (
|
113
|
+
id,
|
114
|
+
project_id,
|
115
|
+
title,
|
116
|
+
description,
|
117
|
+
template_name,
|
118
|
+
created_at,
|
119
|
+
updated_at
|
120
|
+
) VALUES (
|
121
|
+
randomblob(16),
|
122
|
+
NULL, -- Global template
|
123
|
+
'Refactor [component/module] for better maintainability',
|
124
|
+
'Improve code structure and maintainability without changing functionality.
|
125
|
+
|
126
|
+
## Refactoring Checklist
|
127
|
+
|
128
|
+
### 1. Identify Refactoring Targets
|
129
|
+
- [ ] Run code analysis tools (linters, complexity analyzers)
|
130
|
+
- [ ] Identify code smells (long methods, duplicate code, large classes)
|
131
|
+
- [ ] Check for outdated patterns or deprecated approaches
|
132
|
+
- [ ] Review areas with frequent bugs or changes
|
133
|
+
|
134
|
+
### 2. Plan the Refactoring
|
135
|
+
- [ ] Define clear goals (what to improve and why)
|
136
|
+
- [ ] Ensure tests exist for current functionality
|
137
|
+
- [ ] Create a backup branch
|
138
|
+
- [ ] Break down into small, safe steps
|
139
|
+
|
140
|
+
### 3. Common Refactoring Actions
|
141
|
+
- [ ] Extract methods from long functions
|
142
|
+
- [ ] Remove duplicate code (DRY principle)
|
143
|
+
- [ ] Rename variables/functions for clarity
|
144
|
+
- [ ] Simplify complex conditionals
|
145
|
+
- [ ] Extract constants from magic numbers/strings
|
146
|
+
- [ ] Group related functionality into modules
|
147
|
+
- [ ] Remove dead code
|
148
|
+
|
149
|
+
### 4. Maintain Functionality
|
150
|
+
- [ ] Run tests after each change
|
151
|
+
- [ ] Keep changes small and incremental
|
152
|
+
- [ ] Commit frequently with clear messages
|
153
|
+
- [ ] Verify no behavior has changed
|
154
|
+
|
155
|
+
### 5. Code Quality Improvements
|
156
|
+
- [ ] Apply consistent formatting
|
157
|
+
- [ ] Update to modern syntax/features
|
158
|
+
- [ ] Improve error handling
|
159
|
+
- [ ] Add type annotations (if applicable)
|
160
|
+
|
161
|
+
## Success Criteria
|
162
|
+
- All tests still pass
|
163
|
+
- Code is more readable and maintainable
|
164
|
+
- No new bugs introduced
|
165
|
+
- Performance not degraded
|
166
|
+
|
167
|
+
## Deliverables
|
168
|
+
1. Refactored code with improved structure
|
169
|
+
2. All tests passing
|
170
|
+
3. Brief summary of changes made',
|
171
|
+
'Code Refactoring',
|
172
|
+
datetime('now', 'subsec'),
|
173
|
+
datetime('now', 'subsec')
|
174
|
+
);
|