automagik-forge 0.1.13 → 0.1.14

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.
Files changed (301) hide show
  1. package/README.md +143 -447
  2. package/dist/linux-x64/automagik-forge-mcp.zip +0 -0
  3. package/{npx-cli/automagik-forge-0.0.55.tgz → dist/linux-x64/automagik-forge.zip} +0 -0
  4. package/package.json +13 -23
  5. package/.cargo/config.toml +0 -13
  6. package/.claude/commands/commit.md +0 -376
  7. package/.claude/commands/prompt.md +0 -871
  8. package/.env.example +0 -20
  9. package/.github/actions/setup-node/action.yml +0 -29
  10. package/.github/images/automagik-logo.png +0 -0
  11. package/.github/workflows/pre-release.yml +0 -470
  12. package/.github/workflows/publish.yml +0 -145
  13. package/.github/workflows/test.yml +0 -63
  14. package/.mcp.json +0 -57
  15. package/AGENT.md +0 -40
  16. package/CLAUDE.md +0 -40
  17. package/CODE-OF-CONDUCT.md +0 -89
  18. package/Cargo.toml +0 -19
  19. package/Dockerfile +0 -43
  20. package/LICENSE +0 -201
  21. package/Makefile +0 -97
  22. package/backend/.sqlx/query-01b7e2bac1261d8be3d03c03df3e5220590da6c31c77f161074fc62752d63881.json +0 -12
  23. package/backend/.sqlx/query-03f2b02ba6dc5ea2b3cf6b1004caea0ad6bcc10ebd63f441d321a389f026e263.json +0 -12
  24. package/backend/.sqlx/query-0923b77d137a29fc54d399a873ff15fc4af894490bc65a4d344a7575cb0d8643.json +0 -12
  25. package/backend/.sqlx/query-0f808bcdb63c5f180836e448dd64c435c51758b2fc54a52ce9e67495b1ab200e.json +0 -68
  26. package/backend/.sqlx/query-1268afe9ca849daa6722e3df7ca8e9e61f0d37052e782bb5452ab8e1018d9b63.json +0 -12
  27. package/backend/.sqlx/query-1b082630a9622f8667ee7a9aba2c2d3176019a68c6bb83d33008594821415a57.json +0 -12
  28. package/backend/.sqlx/query-1c7b06ba1e112abf6b945a2ff08a0b40ec23f3738c2e7399f067b558cf8d490e.json +0 -12
  29. package/backend/.sqlx/query-1f619f01f46859a64ded531dd0ef61abacfe62e758abe7030a6aa745140b95ca.json +0 -104
  30. package/backend/.sqlx/query-1fca1ce14b4b20205364cd1f1f45ebe1d2e30cd745e59e189d56487b5639dfbb.json +0 -12
  31. package/backend/.sqlx/query-212828320e8d871ab9d83705a040b23bcf0393dc7252177fc539a74657f578ef.json +0 -32
  32. package/backend/.sqlx/query-290ce5c152be8d36e58ff42570f9157beb07ab9e77a03ec6fc30b4f56f9b8f6b.json +0 -56
  33. package/backend/.sqlx/query-2b471d2c2e8ffbe0cd42d2a91b814c0d79f9d09200f147e3cea33ba4ce673c8a.json +0 -68
  34. package/backend/.sqlx/query-354a48c705bb9bb2048c1b7f10fcb714e23f9db82b7a4ea6932486197b2ede6a.json +0 -92
  35. package/backend/.sqlx/query-36c9e3dd10648e94b949db5c91a774ecb1e10a899ef95da74066eccedca4d8b2.json +0 -12
  36. package/backend/.sqlx/query-36e4ba7bbd81b402d5a20b6005755eafbb174c8dda442081823406ac32809a94.json +0 -56
  37. package/backend/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json +0 -62
  38. package/backend/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json +0 -62
  39. package/backend/.sqlx/query-3d6bd16fbce59efe30b7f67ea342e0e4ea6d1432389c02468ad79f1f742d4031.json +0 -56
  40. package/backend/.sqlx/query-4049ca413b285a05aca6b25385e9c8185575f01e9069e4e8581aa45d713f612f.json +0 -32
  41. package/backend/.sqlx/query-412bacd3477d86369082e90f52240407abce436cb81292d42b2dbe1e5c18eea1.json +0 -104
  42. package/backend/.sqlx/query-417a8b1ff4e51de82aea0159a3b97932224dc325b23476cb84153d690227fd8b.json +0 -62
  43. package/backend/.sqlx/query-461cc1b0bb6fd909afc9dd2246e8526b3771cfbb0b22ae4b5d17b51af587b9e2.json +0 -56
  44. package/backend/.sqlx/query-58408c7a8cdeeda0bef359f1f9bd91299a339dc2b191462fc58c9736a56d5227.json +0 -92
  45. package/backend/.sqlx/query-5a886026d75d515c01f347cc203c8d99dd04c61dc468e2e4c5aa548436d13834.json +0 -62
  46. package/backend/.sqlx/query-5b902137b11022d2e1a5c4f6a9c83fec1a856c6a710aff831abd2382ede76b43.json +0 -12
  47. package/backend/.sqlx/query-5ed1238e52e59bb5f76c0f153fd99a14093f7ce2585bf9843585608f17ec575b.json +0 -104
  48. package/backend/.sqlx/query-6e8b860b14decfc2227dc57213f38442943d3fbef5c8418fd6b634c6e0f5e2ea.json +0 -104
  49. package/backend/.sqlx/query-6ec414276994c4ccb2433eaa5b1b342168557d17ddf5a52dac84cb1b59b9de8f.json +0 -68
  50. package/backend/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json +0 -62
  51. package/backend/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json +0 -62
  52. package/backend/.sqlx/query-75239b2da188f749707d77f3c1544332ca70db3d6d6743b2601dc0d167536437.json +0 -62
  53. package/backend/.sqlx/query-83d10e29f8478aff33434f9ac67068e013b888b953a2657e2bb72a6f619d04f2.json +0 -50
  54. package/backend/.sqlx/query-8610803360ea18b9b9d078a6981ea56abfbfe84e6354fc1d5ae4c622e01410ed.json +0 -68
  55. package/backend/.sqlx/query-86d03eb70eef39c59296416867f2ee66c9f7cd8b7f961fbda2f89fc0a1c442c2.json +0 -12
  56. package/backend/.sqlx/query-87d0feb5a6b442bad9c60068ea7569599cc6fc91a0e2692ecb42e93b03201b9d.json +0 -68
  57. package/backend/.sqlx/query-8a67b3b3337248f06a57bdf8a908f7ef23177431eaed82dc08c94c3e5944340e.json +0 -12
  58. package/backend/.sqlx/query-8f01ebd64bdcde6a090479f14810d73ba23020e76fd70854ac57f2da251702c3.json +0 -12
  59. package/backend/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json +0 -62
  60. package/backend/.sqlx/query-92e8bdbcd80c5ff3db7a35cf79492048803ef305cbdef0d0a1fe5dc881ca8c71.json +0 -104
  61. package/backend/.sqlx/query-93a1605f90e9672dad29b472b6ad85fa9a55ea3ffa5abcb8724b09d61be254ca.json +0 -20
  62. package/backend/.sqlx/query-9472c8fb477958167f5fae40b85ac44252468c5226b2cdd7770f027332eed6d7.json +0 -104
  63. package/backend/.sqlx/query-96036c4f9e0f48bdc5a4a4588f0c5f288ac7aaa5425cac40fc33f337e1a351f2.json +0 -56
  64. package/backend/.sqlx/query-9edb2c01e91fd0f0fe7b56e988c7ae0393150f50be3f419a981e035c0121dfc7.json +0 -104
  65. package/backend/.sqlx/query-a157cf00616f703bfba21927f1eb1c9eec2a81c02da15f66efdba0b6c375de1b.json +0 -26
  66. package/backend/.sqlx/query-a31fff84f3b8e532fd1160447d89d700f06ae08821fee00c9a5b60492b05259c.json +0 -62
  67. package/backend/.sqlx/query-a5ba908419fb3e456bdd2daca41ba06cc3212ffffb8520fc7dbbcc8b60ada314.json +0 -12
  68. package/backend/.sqlx/query-a6d2961718dbc3b1a925e549f49a159c561bef58c105529275f274b27e2eba5b.json +0 -104
  69. package/backend/.sqlx/query-a9e93d5b09b29faf66e387e4d7596a792d81e75c4d3726e83c2963e8d7c9b56f.json +0 -104
  70. package/backend/.sqlx/query-ac5247c8d7fb86e4650c4b0eb9420031614c831b7b085083bac20c1af314c538.json +0 -12
  71. package/backend/.sqlx/query-afef9467be74c411c4cb119a8b2b1aea53049877dfc30cc60b486134ba4b4c9f.json +0 -68
  72. package/backend/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json +0 -62
  73. package/backend/.sqlx/query-c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7.json +0 -20
  74. package/backend/.sqlx/query-c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b.json +0 -12
  75. package/backend/.sqlx/query-c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae.json +0 -12
  76. package/backend/.sqlx/query-d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de.json +0 -12
  77. package/backend/.sqlx/query-d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2.json +0 -20
  78. package/backend/.sqlx/query-d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846.json +0 -12
  79. package/backend/.sqlx/query-ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94.json +0 -12
  80. package/backend/Cargo.toml +0 -71
  81. package/backend/build.rs +0 -32
  82. package/backend/migrations/20250617183714_init.sql +0 -44
  83. package/backend/migrations/20250620212427_execution_processes.sql +0 -25
  84. package/backend/migrations/20250620214100_remove_stdout_stderr_from_task_attempts.sql +0 -28
  85. package/backend/migrations/20250621120000_relate_activities_to_execution_processes.sql +0 -23
  86. package/backend/migrations/20250623120000_executor_sessions.sql +0 -17
  87. package/backend/migrations/20250623130000_add_executor_type_to_execution_processes.sql +0 -4
  88. package/backend/migrations/20250625000000_add_dev_script_to_projects.sql +0 -4
  89. package/backend/migrations/20250701000000_add_branch_to_task_attempts.sql +0 -2
  90. package/backend/migrations/20250701000001_add_pr_tracking_to_task_attempts.sql +0 -5
  91. package/backend/migrations/20250701120000_add_assistant_message_to_executor_sessions.sql +0 -2
  92. package/backend/migrations/20250708000000_add_base_branch_to_task_attempts.sql +0 -2
  93. package/backend/migrations/20250709000000_add_worktree_deleted_flag.sql +0 -2
  94. package/backend/migrations/20250710000000_add_setup_completion.sql +0 -3
  95. package/backend/migrations/20250715154859_add_task_templates.sql +0 -25
  96. package/backend/migrations/20250716143725_add_default_templates.sql +0 -174
  97. package/backend/migrations/20250716161432_update_executor_names_to_kebab_case.sql +0 -20
  98. package/backend/migrations/20250716170000_add_parent_task_to_tasks.sql +0 -7
  99. package/backend/migrations/20250717000000_drop_task_attempt_activities.sql +0 -9
  100. package/backend/migrations/20250719000000_add_cleanup_script_to_projects.sql +0 -2
  101. package/backend/migrations/20250720000000_add_cleanupscript_to_process_type_constraint.sql +0 -25
  102. package/backend/migrations/20250723000000_add_wish_to_tasks.sql +0 -7
  103. package/backend/migrations/20250724000000_remove_unique_wish_constraint.sql +0 -5
  104. package/backend/scripts/toast-notification.ps1 +0 -23
  105. package/backend/sounds/abstract-sound1.wav +0 -0
  106. package/backend/sounds/abstract-sound2.wav +0 -0
  107. package/backend/sounds/abstract-sound3.wav +0 -0
  108. package/backend/sounds/abstract-sound4.wav +0 -0
  109. package/backend/sounds/cow-mooing.wav +0 -0
  110. package/backend/sounds/phone-vibration.wav +0 -0
  111. package/backend/sounds/rooster.wav +0 -0
  112. package/backend/src/app_state.rs +0 -218
  113. package/backend/src/bin/generate_types.rs +0 -189
  114. package/backend/src/bin/mcp_task_server.rs +0 -191
  115. package/backend/src/execution_monitor.rs +0 -1193
  116. package/backend/src/executor.rs +0 -1053
  117. package/backend/src/executors/amp.rs +0 -697
  118. package/backend/src/executors/ccr.rs +0 -91
  119. package/backend/src/executors/charm_opencode.rs +0 -113
  120. package/backend/src/executors/claude.rs +0 -887
  121. package/backend/src/executors/cleanup_script.rs +0 -124
  122. package/backend/src/executors/dev_server.rs +0 -53
  123. package/backend/src/executors/echo.rs +0 -79
  124. package/backend/src/executors/gemini/config.rs +0 -67
  125. package/backend/src/executors/gemini/streaming.rs +0 -363
  126. package/backend/src/executors/gemini.rs +0 -765
  127. package/backend/src/executors/mod.rs +0 -23
  128. package/backend/src/executors/opencode_ai.rs +0 -113
  129. package/backend/src/executors/setup_script.rs +0 -130
  130. package/backend/src/executors/sst_opencode/filter.rs +0 -184
  131. package/backend/src/executors/sst_opencode/tools.rs +0 -139
  132. package/backend/src/executors/sst_opencode.rs +0 -756
  133. package/backend/src/lib.rs +0 -45
  134. package/backend/src/main.rs +0 -324
  135. package/backend/src/mcp/mod.rs +0 -1
  136. package/backend/src/mcp/task_server.rs +0 -850
  137. package/backend/src/middleware/mod.rs +0 -3
  138. package/backend/src/middleware/model_loaders.rs +0 -242
  139. package/backend/src/models/api_response.rs +0 -36
  140. package/backend/src/models/config.rs +0 -375
  141. package/backend/src/models/execution_process.rs +0 -430
  142. package/backend/src/models/executor_session.rs +0 -225
  143. package/backend/src/models/mod.rs +0 -12
  144. package/backend/src/models/project.rs +0 -356
  145. package/backend/src/models/task.rs +0 -345
  146. package/backend/src/models/task_attempt.rs +0 -1214
  147. package/backend/src/models/task_template.rs +0 -146
  148. package/backend/src/openapi.rs +0 -93
  149. package/backend/src/routes/auth.rs +0 -297
  150. package/backend/src/routes/config.rs +0 -385
  151. package/backend/src/routes/filesystem.rs +0 -228
  152. package/backend/src/routes/health.rs +0 -16
  153. package/backend/src/routes/mod.rs +0 -9
  154. package/backend/src/routes/projects.rs +0 -562
  155. package/backend/src/routes/stream.rs +0 -244
  156. package/backend/src/routes/task_attempts.rs +0 -1172
  157. package/backend/src/routes/task_templates.rs +0 -229
  158. package/backend/src/routes/tasks.rs +0 -353
  159. package/backend/src/services/analytics.rs +0 -216
  160. package/backend/src/services/git_service.rs +0 -1321
  161. package/backend/src/services/github_service.rs +0 -307
  162. package/backend/src/services/mod.rs +0 -13
  163. package/backend/src/services/notification_service.rs +0 -263
  164. package/backend/src/services/pr_monitor.rs +0 -214
  165. package/backend/src/services/process_service.rs +0 -940
  166. package/backend/src/utils/path.rs +0 -96
  167. package/backend/src/utils/shell.rs +0 -19
  168. package/backend/src/utils/text.rs +0 -24
  169. package/backend/src/utils/worktree_manager.rs +0 -578
  170. package/backend/src/utils.rs +0 -125
  171. package/backend/test.db +0 -0
  172. package/build-npm-package.sh +0 -61
  173. package/dev_assets_seed/config.json +0 -19
  174. package/frontend/.eslintrc.json +0 -25
  175. package/frontend/.prettierrc.json +0 -8
  176. package/frontend/components.json +0 -17
  177. package/frontend/index.html +0 -19
  178. package/frontend/package-lock.json +0 -7321
  179. package/frontend/package.json +0 -61
  180. package/frontend/postcss.config.js +0 -6
  181. package/frontend/public/android-chrome-192x192.png +0 -0
  182. package/frontend/public/android-chrome-512x512.png +0 -0
  183. package/frontend/public/apple-touch-icon.png +0 -0
  184. package/frontend/public/automagik-forge-logo-dark.svg +0 -3
  185. package/frontend/public/automagik-forge-logo.svg +0 -3
  186. package/frontend/public/automagik-forge-screenshot-overview.png +0 -0
  187. package/frontend/public/favicon-16x16.png +0 -0
  188. package/frontend/public/favicon-32x32.png +0 -0
  189. package/frontend/public/favicon.ico +0 -0
  190. package/frontend/public/site.webmanifest +0 -1
  191. package/frontend/public/viba-kanban-favicon.png +0 -0
  192. package/frontend/src/App.tsx +0 -157
  193. package/frontend/src/components/DisclaimerDialog.tsx +0 -106
  194. package/frontend/src/components/GitHubLoginDialog.tsx +0 -314
  195. package/frontend/src/components/OnboardingDialog.tsx +0 -185
  196. package/frontend/src/components/PrivacyOptInDialog.tsx +0 -130
  197. package/frontend/src/components/ProvidePatDialog.tsx +0 -98
  198. package/frontend/src/components/TaskTemplateManager.tsx +0 -336
  199. package/frontend/src/components/config-provider.tsx +0 -119
  200. package/frontend/src/components/context/TaskDetailsContextProvider.tsx +0 -470
  201. package/frontend/src/components/context/taskDetailsContext.ts +0 -125
  202. package/frontend/src/components/keyboard-shortcuts-demo.tsx +0 -35
  203. package/frontend/src/components/layout/navbar.tsx +0 -86
  204. package/frontend/src/components/logo.tsx +0 -44
  205. package/frontend/src/components/projects/ProjectCard.tsx +0 -155
  206. package/frontend/src/components/projects/project-detail.tsx +0 -251
  207. package/frontend/src/components/projects/project-form-fields.tsx +0 -238
  208. package/frontend/src/components/projects/project-form.tsx +0 -301
  209. package/frontend/src/components/projects/project-list.tsx +0 -200
  210. package/frontend/src/components/projects/projects-page.tsx +0 -20
  211. package/frontend/src/components/tasks/BranchSelector.tsx +0 -169
  212. package/frontend/src/components/tasks/DeleteFileConfirmationDialog.tsx +0 -94
  213. package/frontend/src/components/tasks/EditorSelectionDialog.tsx +0 -119
  214. package/frontend/src/components/tasks/TaskCard.tsx +0 -154
  215. package/frontend/src/components/tasks/TaskDetails/CollapsibleToolbar.tsx +0 -33
  216. package/frontend/src/components/tasks/TaskDetails/DiffCard.tsx +0 -109
  217. package/frontend/src/components/tasks/TaskDetails/DiffChunkSection.tsx +0 -135
  218. package/frontend/src/components/tasks/TaskDetails/DiffFile.tsx +0 -296
  219. package/frontend/src/components/tasks/TaskDetails/DiffTab.tsx +0 -32
  220. package/frontend/src/components/tasks/TaskDetails/DisplayConversationEntry.tsx +0 -392
  221. package/frontend/src/components/tasks/TaskDetails/LogsTab/Conversation.tsx +0 -256
  222. package/frontend/src/components/tasks/TaskDetails/LogsTab/ConversationEntry.tsx +0 -56
  223. package/frontend/src/components/tasks/TaskDetails/LogsTab/NormalizedConversationViewer.tsx +0 -92
  224. package/frontend/src/components/tasks/TaskDetails/LogsTab/Prompt.tsx +0 -22
  225. package/frontend/src/components/tasks/TaskDetails/LogsTab/SetupScriptRunning.tsx +0 -49
  226. package/frontend/src/components/tasks/TaskDetails/LogsTab.tsx +0 -186
  227. package/frontend/src/components/tasks/TaskDetails/ProcessesTab.tsx +0 -288
  228. package/frontend/src/components/tasks/TaskDetails/RelatedTasksTab.tsx +0 -216
  229. package/frontend/src/components/tasks/TaskDetails/TabNavigation.tsx +0 -93
  230. package/frontend/src/components/tasks/TaskDetailsHeader.tsx +0 -169
  231. package/frontend/src/components/tasks/TaskDetailsPanel.tsx +0 -126
  232. package/frontend/src/components/tasks/TaskDetailsToolbar.tsx +0 -302
  233. package/frontend/src/components/tasks/TaskFollowUpSection.tsx +0 -130
  234. package/frontend/src/components/tasks/TaskFormDialog.tsx +0 -400
  235. package/frontend/src/components/tasks/TaskKanbanBoard.tsx +0 -180
  236. package/frontend/src/components/tasks/Toolbar/CreateAttempt.tsx +0 -259
  237. package/frontend/src/components/tasks/Toolbar/CreatePRDialog.tsx +0 -243
  238. package/frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx +0 -899
  239. package/frontend/src/components/tasks/index.ts +0 -2
  240. package/frontend/src/components/theme-provider.tsx +0 -82
  241. package/frontend/src/components/theme-toggle.tsx +0 -36
  242. package/frontend/src/components/ui/alert.tsx +0 -59
  243. package/frontend/src/components/ui/auto-expanding-textarea.tsx +0 -70
  244. package/frontend/src/components/ui/badge.tsx +0 -36
  245. package/frontend/src/components/ui/button.tsx +0 -56
  246. package/frontend/src/components/ui/card.tsx +0 -86
  247. package/frontend/src/components/ui/checkbox.tsx +0 -44
  248. package/frontend/src/components/ui/chip.tsx +0 -25
  249. package/frontend/src/components/ui/dialog.tsx +0 -124
  250. package/frontend/src/components/ui/dropdown-menu.tsx +0 -198
  251. package/frontend/src/components/ui/file-search-textarea.tsx +0 -292
  252. package/frontend/src/components/ui/folder-picker.tsx +0 -279
  253. package/frontend/src/components/ui/input.tsx +0 -25
  254. package/frontend/src/components/ui/label.tsx +0 -24
  255. package/frontend/src/components/ui/loader.tsx +0 -26
  256. package/frontend/src/components/ui/markdown-renderer.tsx +0 -75
  257. package/frontend/src/components/ui/select.tsx +0 -160
  258. package/frontend/src/components/ui/separator.tsx +0 -31
  259. package/frontend/src/components/ui/shadcn-io/kanban/index.tsx +0 -185
  260. package/frontend/src/components/ui/table.tsx +0 -117
  261. package/frontend/src/components/ui/tabs.tsx +0 -53
  262. package/frontend/src/components/ui/textarea.tsx +0 -22
  263. package/frontend/src/components/ui/tooltip.tsx +0 -28
  264. package/frontend/src/hooks/useNormalizedConversation.ts +0 -440
  265. package/frontend/src/index.css +0 -225
  266. package/frontend/src/lib/api.ts +0 -630
  267. package/frontend/src/lib/keyboard-shortcuts.ts +0 -266
  268. package/frontend/src/lib/responsive-config.ts +0 -70
  269. package/frontend/src/lib/types.ts +0 -39
  270. package/frontend/src/lib/utils.ts +0 -10
  271. package/frontend/src/main.tsx +0 -50
  272. package/frontend/src/pages/McpServers.tsx +0 -418
  273. package/frontend/src/pages/Settings.tsx +0 -610
  274. package/frontend/src/pages/project-tasks.tsx +0 -575
  275. package/frontend/src/pages/projects.tsx +0 -18
  276. package/frontend/src/vite-env.d.ts +0 -1
  277. package/frontend/tailwind.config.js +0 -125
  278. package/frontend/tsconfig.json +0 -26
  279. package/frontend/tsconfig.node.json +0 -10
  280. package/frontend/vite.config.ts +0 -33
  281. package/npx-cli/README.md +0 -159
  282. package/npx-cli/automagik-forge-0.1.0.tgz +0 -0
  283. package/npx-cli/automagik-forge-0.1.10.tgz +0 -0
  284. package/npx-cli/package.json +0 -17
  285. package/npx-cli/vibe-kanban-0.0.55.tgz +0 -0
  286. package/pnpm-workspace.yaml +0 -2
  287. package/rust-toolchain.toml +0 -11
  288. package/rustfmt.toml +0 -3
  289. package/scripts/load-env.js +0 -43
  290. package/scripts/mcp_test.js +0 -374
  291. package/scripts/prepare-db.js +0 -45
  292. package/scripts/setup-dev-environment.js +0 -274
  293. package/scripts/start-mcp-sse.js +0 -70
  294. package/scripts/test-debug.js +0 -32
  295. package/scripts/test-mcp-sse.js +0 -138
  296. package/scripts/test-simple.js +0 -44
  297. package/scripts/test-wish-final.js +0 -179
  298. package/scripts/test-wish-system.js +0 -221
  299. package/shared/types.ts +0 -182
  300. package/test-npm-package.sh +0 -42
  301. /package/{npx-cli/bin → bin}/cli.js +0 -0
@@ -1,302 +0,0 @@
1
- import { useCallback, useContext, useEffect, useState } from 'react';
2
- import { useLocation } from 'react-router-dom';
3
- import { Play } from 'lucide-react';
4
- import { Button } from '@/components/ui/button';
5
- import { useConfig } from '@/components/config-provider';
6
- import { attemptsApi, projectsApi } from '@/lib/api';
7
- import type { GitBranch, TaskAttempt } from 'shared/types';
8
- import { EXECUTOR_LABELS, EXECUTOR_TYPES } from 'shared/types';
9
- import {
10
- TaskAttemptDataContext,
11
- TaskAttemptLoadingContext,
12
- TaskAttemptStoppingContext,
13
- TaskDetailsContext,
14
- TaskSelectedAttemptContext,
15
- } from '@/components/context/taskDetailsContext.ts';
16
- import CreatePRDialog from '@/components/tasks/Toolbar/CreatePRDialog.tsx';
17
- import CreateAttempt from '@/components/tasks/Toolbar/CreateAttempt.tsx';
18
- import CurrentAttempt from '@/components/tasks/Toolbar/CurrentAttempt.tsx';
19
-
20
- const availableExecutors = EXECUTOR_TYPES.map((id) => ({
21
- id,
22
- name: EXECUTOR_LABELS[id] || id,
23
- }));
24
-
25
- function TaskDetailsToolbar() {
26
- const { task, projectId } = useContext(TaskDetailsContext);
27
- const { setLoading } = useContext(TaskAttemptLoadingContext);
28
- const { selectedAttempt, setSelectedAttempt } = useContext(
29
- TaskSelectedAttemptContext
30
- );
31
-
32
- const { isStopping } = useContext(TaskAttemptStoppingContext);
33
- const { setAttemptData, isAttemptRunning } = useContext(
34
- TaskAttemptDataContext
35
- );
36
-
37
- const [taskAttempts, setTaskAttempts] = useState<TaskAttempt[]>([]);
38
- const location = useLocation();
39
-
40
- const { config } = useConfig();
41
-
42
- const [branches, setBranches] = useState<GitBranch[]>([]);
43
- const [selectedBranch, setSelectedBranch] = useState<string | null>(null);
44
-
45
- const [selectedExecutor, setSelectedExecutor] = useState<string>(
46
- config?.executor.type || 'claude'
47
- );
48
-
49
- // State for create attempt mode
50
- const [isInCreateAttemptMode, setIsInCreateAttemptMode] = useState(false);
51
- const [createAttemptBranch, setCreateAttemptBranch] = useState<string | null>(
52
- selectedBranch
53
- );
54
- const [createAttemptExecutor, setCreateAttemptExecutor] =
55
- useState<string>(selectedExecutor);
56
-
57
- // Branch status and git operations state
58
- const [creatingPR, setCreatingPR] = useState(false);
59
- const [showCreatePRDialog, setShowCreatePRDialog] = useState(false);
60
- const [error, setError] = useState<string | null>(null);
61
-
62
- const fetchProjectBranches = useCallback(async () => {
63
- const result = await projectsApi.getBranches(projectId);
64
-
65
- setBranches(result);
66
- // Set current branch as default
67
- const currentBranch = result.find((b) => b.is_current);
68
- if (currentBranch) {
69
- setSelectedBranch((prev) => (!prev ? currentBranch.name : prev));
70
- }
71
- }, [projectId]);
72
-
73
- useEffect(() => {
74
- fetchProjectBranches();
75
- }, [fetchProjectBranches]);
76
-
77
- // Set default executor from config
78
- useEffect(() => {
79
- if (config && config.executor.type !== selectedExecutor) {
80
- setSelectedExecutor(config.executor.type);
81
- }
82
- }, [config, selectedExecutor]);
83
-
84
- // Set create attempt mode when there are no attempts
85
- useEffect(() => {
86
- setIsInCreateAttemptMode(taskAttempts.length === 0);
87
- }, [taskAttempts.length]);
88
-
89
- // Update default values from latest attempt when taskAttempts change
90
- useEffect(() => {
91
- if (taskAttempts.length > 0) {
92
- const latestAttempt = taskAttempts.reduce((latest, current) =>
93
- new Date(current.created_at) > new Date(latest.created_at)
94
- ? current
95
- : latest
96
- );
97
-
98
- // Only update if branch still exists in available branches
99
- if (
100
- latestAttempt.base_branch &&
101
- branches.some((b: GitBranch) => b.name === latestAttempt.base_branch)
102
- ) {
103
- setCreateAttemptBranch(latestAttempt.base_branch);
104
- }
105
-
106
- // Only update executor if it's different from default and exists in available executors
107
- if (
108
- latestAttempt.executor &&
109
- availableExecutors.some((e) => e.id === latestAttempt.executor)
110
- ) {
111
- setCreateAttemptExecutor(latestAttempt.executor);
112
- }
113
- }
114
- }, [taskAttempts, branches, availableExecutors]);
115
-
116
- const fetchTaskAttempts = useCallback(async () => {
117
- if (!task) return;
118
-
119
- try {
120
- setLoading(true);
121
- const result = await attemptsApi.getAll(projectId, task.id);
122
-
123
- setTaskAttempts((prev) => {
124
- if (JSON.stringify(prev) === JSON.stringify(result)) return prev;
125
- return result || prev;
126
- });
127
-
128
- if (result.length > 0) {
129
- // Check if there's an attempt query parameter
130
- const urlParams = new URLSearchParams(location.search);
131
- const attemptParam = urlParams.get('attempt');
132
-
133
- let selectedAttemptToUse: TaskAttempt;
134
-
135
- if (attemptParam) {
136
- // Try to find the specific attempt
137
- const specificAttempt = result.find(
138
- (attempt) => attempt.id === attemptParam
139
- );
140
- if (specificAttempt) {
141
- selectedAttemptToUse = specificAttempt;
142
- } else {
143
- // Fall back to latest if specific attempt not found
144
- selectedAttemptToUse = result.reduce((latest, current) =>
145
- new Date(current.created_at) > new Date(latest.created_at)
146
- ? current
147
- : latest
148
- );
149
- }
150
- } else {
151
- // Use latest attempt if no specific attempt requested
152
- selectedAttemptToUse = result.reduce((latest, current) =>
153
- new Date(current.created_at) > new Date(latest.created_at)
154
- ? current
155
- : latest
156
- );
157
- }
158
-
159
- setSelectedAttempt((prev) => {
160
- if (JSON.stringify(prev) === JSON.stringify(selectedAttemptToUse))
161
- return prev;
162
- return selectedAttemptToUse;
163
- });
164
- } else {
165
- setSelectedAttempt(null);
166
- setAttemptData({
167
- processes: [],
168
- runningProcessDetails: {},
169
- allLogs: [],
170
- });
171
- }
172
- } catch (error) {
173
- // we already logged error
174
- } finally {
175
- setLoading(false);
176
- }
177
- }, [task, projectId, location.search]);
178
-
179
- useEffect(() => {
180
- fetchTaskAttempts();
181
- }, [fetchTaskAttempts]);
182
-
183
- // Handle entering create attempt mode
184
- const handleEnterCreateAttemptMode = useCallback(() => {
185
- setIsInCreateAttemptMode(true);
186
-
187
- // Use latest attempt's settings as defaults if available
188
- if (taskAttempts.length > 0) {
189
- const latestAttempt = taskAttempts.reduce((latest, current) =>
190
- new Date(current.created_at) > new Date(latest.created_at)
191
- ? current
192
- : latest
193
- );
194
-
195
- // Use latest attempt's branch if it still exists, otherwise use current selected branch
196
- if (
197
- latestAttempt.base_branch &&
198
- branches.some((b: GitBranch) => b.name === latestAttempt.base_branch)
199
- ) {
200
- setCreateAttemptBranch(latestAttempt.base_branch);
201
- } else {
202
- setCreateAttemptBranch(selectedBranch);
203
- }
204
-
205
- // Use latest attempt's executor if it exists, otherwise use current selected executor
206
- if (
207
- latestAttempt.executor &&
208
- availableExecutors.some((e) => e.id === latestAttempt.executor)
209
- ) {
210
- setCreateAttemptExecutor(latestAttempt.executor);
211
- } else {
212
- setCreateAttemptExecutor(selectedExecutor);
213
- }
214
- } else {
215
- // Fallback to current selected values if no attempts exist
216
- setCreateAttemptBranch(selectedBranch);
217
- setCreateAttemptExecutor(selectedExecutor);
218
- }
219
- }, [taskAttempts, branches, selectedBranch, selectedExecutor]);
220
-
221
- return (
222
- <>
223
- <div className="px-6 pb-4 border-b">
224
- {/* Error Display */}
225
- {error && (
226
- <div className="mb-4 p-3 bg-red-50 border border-red-200 rounded-lg">
227
- <div className="text-red-600 text-sm">{error}</div>
228
- </div>
229
- )}
230
-
231
- {isInCreateAttemptMode ? (
232
- <CreateAttempt
233
- fetchTaskAttempts={fetchTaskAttempts}
234
- createAttemptBranch={createAttemptBranch}
235
- selectedBranch={selectedBranch}
236
- createAttemptExecutor={createAttemptExecutor}
237
- selectedExecutor={selectedExecutor}
238
- taskAttempts={taskAttempts}
239
- branches={branches}
240
- setCreateAttemptBranch={setCreateAttemptBranch}
241
- setIsInCreateAttemptMode={setIsInCreateAttemptMode}
242
- setCreateAttemptExecutor={setCreateAttemptExecutor}
243
- availableExecutors={availableExecutors}
244
- />
245
- ) : (
246
- <div className="space-y-3 p-3 bg-muted/20 rounded-lg border">
247
- {/* Current Attempt Info */}
248
- <div className="space-y-2">
249
- {selectedAttempt ? (
250
- <CurrentAttempt
251
- selectedAttempt={selectedAttempt}
252
- taskAttempts={taskAttempts}
253
- selectedBranch={selectedBranch}
254
- setError={setError}
255
- setShowCreatePRDialog={setShowCreatePRDialog}
256
- creatingPR={creatingPR}
257
- handleEnterCreateAttemptMode={handleEnterCreateAttemptMode}
258
- availableExecutors={availableExecutors}
259
- branches={branches}
260
- />
261
- ) : (
262
- <div className="text-center py-8">
263
- <div className="text-lg font-medium text-muted-foreground">
264
- No attempts yet
265
- </div>
266
- <div className="text-sm text-muted-foreground mt-1">
267
- Start your first attempt to begin working on this task
268
- </div>
269
- </div>
270
- )}
271
- </div>
272
-
273
- {/* Special Actions */}
274
- {!selectedAttempt && !isAttemptRunning && !isStopping && (
275
- <div className="space-y-2 pt-3 border-t">
276
- <Button
277
- onClick={handleEnterCreateAttemptMode}
278
- size="sm"
279
- className="w-full gap-2"
280
- >
281
- <Play className="h-4 w-4" />
282
- Start Attempt
283
- </Button>
284
- </div>
285
- )}
286
- </div>
287
- )}
288
- </div>
289
-
290
- <CreatePRDialog
291
- creatingPR={creatingPR}
292
- setShowCreatePRDialog={setShowCreatePRDialog}
293
- showCreatePRDialog={showCreatePRDialog}
294
- setCreatingPR={setCreatingPR}
295
- setError={setError}
296
- branches={branches}
297
- />
298
- </>
299
- );
300
- }
301
-
302
- export default TaskDetailsToolbar;
@@ -1,130 +0,0 @@
1
- import { AlertCircle, Send } from 'lucide-react';
2
- import { Button } from '@/components/ui/button';
3
- import { Alert, AlertDescription } from '@/components/ui/alert';
4
- import { FileSearchTextarea } from '@/components/ui/file-search-textarea';
5
- import { useContext, useMemo, useState } from 'react';
6
- import { attemptsApi } from '@/lib/api.ts';
7
- import {
8
- TaskAttemptDataContext,
9
- TaskDetailsContext,
10
- TaskSelectedAttemptContext,
11
- } from '@/components/context/taskDetailsContext.ts';
12
- import { Loader } from '@/components/ui/loader';
13
-
14
- export function TaskFollowUpSection() {
15
- const { task, projectId } = useContext(TaskDetailsContext);
16
- const { selectedAttempt } = useContext(TaskSelectedAttemptContext);
17
- const { attemptData, fetchAttemptData, isAttemptRunning } = useContext(
18
- TaskAttemptDataContext
19
- );
20
-
21
- const [followUpMessage, setFollowUpMessage] = useState('');
22
- const [isSendingFollowUp, setIsSendingFollowUp] = useState(false);
23
- const [followUpError, setFollowUpError] = useState<string | null>(null);
24
-
25
- const canSendFollowUp = useMemo(() => {
26
- if (
27
- !selectedAttempt ||
28
- attemptData.processes.length === 0 ||
29
- isAttemptRunning ||
30
- isSendingFollowUp
31
- ) {
32
- return false;
33
- }
34
-
35
- const completedOrKilledCodingAgentProcesses = attemptData.processes.filter(
36
- (process) =>
37
- process.process_type === 'codingagent' &&
38
- (process.status === 'completed' || process.status === 'killed')
39
- );
40
-
41
- return completedOrKilledCodingAgentProcesses.length > 0;
42
- }, [
43
- selectedAttempt,
44
- attemptData.processes,
45
- isAttemptRunning,
46
- isSendingFollowUp,
47
- ]);
48
-
49
- const onSendFollowUp = async () => {
50
- if (!task || !selectedAttempt || !followUpMessage.trim()) return;
51
-
52
- try {
53
- setIsSendingFollowUp(true);
54
- setFollowUpError(null);
55
- await attemptsApi.followUp(
56
- projectId!,
57
- selectedAttempt.task_id,
58
- selectedAttempt.id,
59
- {
60
- prompt: followUpMessage.trim(),
61
- }
62
- );
63
- setFollowUpMessage('');
64
- fetchAttemptData(selectedAttempt.id, selectedAttempt.task_id);
65
- } catch (error: unknown) {
66
- // @ts-expect-error it is type ApiError
67
- setFollowUpError(`Failed to start follow-up execution: ${error.message}`);
68
- } finally {
69
- setIsSendingFollowUp(false);
70
- }
71
- };
72
-
73
- return (
74
- selectedAttempt && (
75
- <div className="border-t p-4">
76
- <div className="space-y-2">
77
- {followUpError && (
78
- <Alert variant="destructive">
79
- <AlertCircle className="h-4 w-4" />
80
- <AlertDescription>{followUpError}</AlertDescription>
81
- </Alert>
82
- )}
83
- <div className="flex gap-2 items-start">
84
- <FileSearchTextarea
85
- placeholder="Continue working on this task... Type @ to search files."
86
- value={followUpMessage}
87
- onChange={(value) => {
88
- setFollowUpMessage(value);
89
- if (followUpError) setFollowUpError(null);
90
- }}
91
- onKeyDown={(e) => {
92
- if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {
93
- e.preventDefault();
94
- if (
95
- canSendFollowUp &&
96
- followUpMessage.trim() &&
97
- !isSendingFollowUp
98
- ) {
99
- onSendFollowUp();
100
- }
101
- }
102
- }}
103
- className="flex-1 min-h-[40px] resize-none"
104
- disabled={!canSendFollowUp}
105
- projectId={projectId}
106
- rows={1}
107
- maxRows={6}
108
- />
109
- <Button
110
- onClick={onSendFollowUp}
111
- disabled={
112
- !canSendFollowUp || !followUpMessage.trim() || isSendingFollowUp
113
- }
114
- size="sm"
115
- >
116
- {isSendingFollowUp ? (
117
- <Loader size={16} className="mr-2" />
118
- ) : (
119
- <>
120
- <Send className="h-4 w-4 mr-2" />
121
- Send
122
- </>
123
- )}
124
- </Button>
125
- </div>
126
- </div>
127
- </div>
128
- )
129
- );
130
- }