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,259 +0,0 @@
1
- import { Dispatch, SetStateAction, useCallback, useContext } from 'react';
2
- import { Button } from '@/components/ui/button.tsx';
3
- import { ArrowDown, Play, Settings2, X } from 'lucide-react';
4
- import {
5
- DropdownMenu,
6
- DropdownMenuContent,
7
- DropdownMenuItem,
8
- DropdownMenuTrigger,
9
- } from '@/components/ui/dropdown-menu.tsx';
10
- import type { GitBranch, TaskAttempt } from 'shared/types.ts';
11
- import { attemptsApi } from '@/lib/api.ts';
12
- import {
13
- TaskAttemptDataContext,
14
- TaskDetailsContext,
15
- } from '@/components/context/taskDetailsContext.ts';
16
- import { useConfig } from '@/components/config-provider.tsx';
17
- import BranchSelector from '@/components/tasks/BranchSelector.tsx';
18
- import { useKeyboardShortcuts } from '@/lib/keyboard-shortcuts.ts';
19
- import {
20
- Dialog,
21
- DialogContent,
22
- DialogDescription,
23
- DialogFooter,
24
- DialogHeader,
25
- DialogTitle,
26
- } from '@/components/ui/dialog.tsx';
27
- import { useState } from 'react';
28
-
29
- type Props = {
30
- branches: GitBranch[];
31
- taskAttempts: TaskAttempt[];
32
- createAttemptExecutor: string;
33
- createAttemptBranch: string | null;
34
- selectedExecutor: string;
35
- selectedBranch: string | null;
36
- fetchTaskAttempts: () => void;
37
- setIsInCreateAttemptMode: Dispatch<SetStateAction<boolean>>;
38
- setCreateAttemptBranch: Dispatch<SetStateAction<string | null>>;
39
- setCreateAttemptExecutor: Dispatch<SetStateAction<string>>;
40
- availableExecutors: {
41
- id: string;
42
- name: string;
43
- }[];
44
- };
45
-
46
- function CreateAttempt({
47
- branches,
48
- taskAttempts,
49
- createAttemptExecutor,
50
- createAttemptBranch,
51
- selectedExecutor,
52
- selectedBranch,
53
- fetchTaskAttempts,
54
- setIsInCreateAttemptMode,
55
- setCreateAttemptBranch,
56
- setCreateAttemptExecutor,
57
- availableExecutors,
58
- }: Props) {
59
- const { task, projectId } = useContext(TaskDetailsContext);
60
- const { isAttemptRunning } = useContext(TaskAttemptDataContext);
61
- const { config } = useConfig();
62
-
63
- const [showCreateAttemptConfirmation, setShowCreateAttemptConfirmation] =
64
- useState(false);
65
- const [pendingExecutor, setPendingExecutor] = useState<string | undefined>(
66
- undefined
67
- );
68
- const [pendingBaseBranch, setPendingBaseBranch] = useState<
69
- string | undefined
70
- >(undefined);
71
-
72
- // Create attempt logic
73
- const actuallyCreateAttempt = useCallback(
74
- async (executor?: string, baseBranch?: string) => {
75
- try {
76
- await attemptsApi.create(projectId!, task.id, {
77
- executor: executor || selectedExecutor,
78
- base_branch: baseBranch || selectedBranch,
79
- });
80
- fetchTaskAttempts();
81
- } catch (error) {
82
- // Optionally handle error
83
- }
84
- },
85
- [projectId, task.id, selectedExecutor, selectedBranch, fetchTaskAttempts]
86
- );
87
-
88
- // Handler for Enter key or Start button
89
- const onCreateNewAttempt = useCallback(
90
- (executor?: string, baseBranch?: string, isKeyTriggered?: boolean) => {
91
- if (task.status === 'todo' && isKeyTriggered) {
92
- setPendingExecutor(executor);
93
- setPendingBaseBranch(baseBranch);
94
- setShowCreateAttemptConfirmation(true);
95
- } else {
96
- actuallyCreateAttempt(executor, baseBranch);
97
- setShowCreateAttemptConfirmation(false);
98
- setIsInCreateAttemptMode(false);
99
- }
100
- },
101
- [task.status, actuallyCreateAttempt, setIsInCreateAttemptMode]
102
- );
103
-
104
- // Keyboard shortcuts
105
- useKeyboardShortcuts({
106
- onEnter: () => {
107
- if (showCreateAttemptConfirmation) {
108
- handleConfirmCreateAttempt();
109
- } else {
110
- onCreateNewAttempt(
111
- createAttemptExecutor,
112
- createAttemptBranch || undefined,
113
- true
114
- );
115
- }
116
- },
117
- hasOpenDialog: showCreateAttemptConfirmation,
118
- closeDialog: () => setShowCreateAttemptConfirmation(false),
119
- });
120
-
121
- const handleExitCreateAttemptMode = () => {
122
- setIsInCreateAttemptMode(false);
123
- };
124
-
125
- const handleCreateAttempt = () => {
126
- onCreateNewAttempt(createAttemptExecutor, createAttemptBranch || undefined);
127
- };
128
-
129
- const handleConfirmCreateAttempt = () => {
130
- actuallyCreateAttempt(pendingExecutor, pendingBaseBranch);
131
- setShowCreateAttemptConfirmation(false);
132
- setIsInCreateAttemptMode(false);
133
- };
134
-
135
- return (
136
- <div className="p-4 bg-muted/20 rounded-lg border">
137
- <div className="space-y-3">
138
- <div className="flex items-center justify-between">
139
- <h3 className="text-base font-semibold">Create Attempt</h3>
140
- {taskAttempts.length > 0 && (
141
- <Button
142
- variant="ghost"
143
- size="sm"
144
- onClick={handleExitCreateAttemptMode}
145
- >
146
- <X className="h-4 w-4" />
147
- </Button>
148
- )}
149
- </div>
150
- <div className="flex items-center w-4/5">
151
- <label className="text-xs font-medium text-muted-foreground">
152
- Each time you start an attempt, a new session is initiated with your
153
- selected coding agent, and a git worktree and corresponding task
154
- branch are created.
155
- </label>
156
- </div>
157
-
158
- <div className="grid grid-cols-3 gap-3 items-end">
159
- {/* Step 1: Choose Base Branch */}
160
- <div className="space-y-1">
161
- <div className="flex items-center gap-1.5">
162
- <label className="text-xs font-medium text-muted-foreground">
163
- Base branch
164
- </label>
165
- </div>
166
- <BranchSelector
167
- branches={branches}
168
- selectedBranch={createAttemptBranch}
169
- onBranchSelect={setCreateAttemptBranch}
170
- placeholder="current"
171
- />
172
- </div>
173
-
174
- {/* Step 2: Choose Coding Agent */}
175
- <div className="space-y-1">
176
- <div className="flex items-center gap-1.5">
177
- <label className="text-xs font-medium text-muted-foreground">
178
- Coding agent
179
- </label>
180
- </div>
181
- <DropdownMenu>
182
- <DropdownMenuTrigger asChild>
183
- <Button
184
- variant="outline"
185
- size="sm"
186
- className="w-full justify-between text-xs"
187
- >
188
- <div className="flex items-center gap-1.5">
189
- <Settings2 className="h-3 w-3" />
190
- <span className="truncate">
191
- {availableExecutors.find(
192
- (e) => e.id === createAttemptExecutor
193
- )?.name || 'Select agent'}
194
- </span>
195
- </div>
196
- <ArrowDown className="h-3 w-3" />
197
- </Button>
198
- </DropdownMenuTrigger>
199
- <DropdownMenuContent className="w-full">
200
- {availableExecutors.map((executor) => (
201
- <DropdownMenuItem
202
- key={executor.id}
203
- onClick={() => setCreateAttemptExecutor(executor.id)}
204
- className={
205
- createAttemptExecutor === executor.id ? 'bg-accent' : ''
206
- }
207
- >
208
- {executor.name}
209
- {config?.executor.type === executor.id && ' (Default)'}
210
- </DropdownMenuItem>
211
- ))}
212
- </DropdownMenuContent>
213
- </DropdownMenu>
214
- </div>
215
-
216
- {/* Step 3: Start Attempt */}
217
- <div className="space-y-1">
218
- <Button
219
- onClick={handleCreateAttempt}
220
- disabled={!createAttemptExecutor || isAttemptRunning}
221
- size="sm"
222
- className="w-full text-xs gap-2"
223
- >
224
- <Play className="h-3 w-3 mr-1.5" />
225
- Start
226
- </Button>
227
- </div>
228
- </div>
229
- </div>
230
-
231
- {/* Confirmation Dialog */}
232
- <Dialog
233
- open={showCreateAttemptConfirmation}
234
- onOpenChange={setShowCreateAttemptConfirmation}
235
- >
236
- <DialogContent className="sm:max-w-md">
237
- <DialogHeader>
238
- <DialogTitle>Start New Attempt?</DialogTitle>
239
- <DialogDescription>
240
- Are you sure you want to start a new attempt for this task? This
241
- will create a new session and branch.
242
- </DialogDescription>
243
- </DialogHeader>
244
- <DialogFooter>
245
- <Button
246
- variant="outline"
247
- onClick={() => setShowCreateAttemptConfirmation(false)}
248
- >
249
- Cancel
250
- </Button>
251
- <Button onClick={handleConfirmCreateAttempt}>Start</Button>
252
- </DialogFooter>
253
- </DialogContent>
254
- </Dialog>
255
- </div>
256
- );
257
- }
258
-
259
- export default CreateAttempt;
@@ -1,243 +0,0 @@
1
- import {
2
- Dialog,
3
- DialogContent,
4
- DialogDescription,
5
- DialogFooter,
6
- DialogHeader,
7
- DialogTitle,
8
- } from '@/components/ui/dialog';
9
- import { Label } from '@radix-ui/react-label';
10
- import { Textarea } from '@/components/ui/textarea.tsx';
11
- import {
12
- Select,
13
- SelectContent,
14
- SelectItem,
15
- SelectTrigger,
16
- SelectValue,
17
- } from '@radix-ui/react-select';
18
- import { Button } from '@/components/ui/button';
19
- import { Input } from '@/components/ui/input';
20
- import { useCallback, useContext, useEffect, useState } from 'react';
21
- import {
22
- TaskDetailsContext,
23
- TaskSelectedAttemptContext,
24
- } from '@/components/context/taskDetailsContext.ts';
25
- import { ApiError, attemptsApi } from '@/lib/api.ts';
26
- import { ProvidePatDialog } from '@/components/ProvidePatDialog';
27
- import { GitHubLoginDialog } from '@/components/GitHubLoginDialog';
28
- import { GitBranch } from 'shared/types.ts';
29
-
30
- type Props = {
31
- showCreatePRDialog: boolean;
32
- setShowCreatePRDialog: (show: boolean) => void;
33
- creatingPR: boolean;
34
- setCreatingPR: (creating: boolean) => void;
35
- setError: (error: string | null) => void;
36
- branches: GitBranch[];
37
- };
38
-
39
- function CreatePrDialog({
40
- showCreatePRDialog,
41
- setCreatingPR,
42
- setShowCreatePRDialog,
43
- creatingPR,
44
- setError,
45
- branches,
46
- }: Props) {
47
- const { projectId, task } = useContext(TaskDetailsContext);
48
- const { selectedAttempt } = useContext(TaskSelectedAttemptContext);
49
- const [prTitle, setPrTitle] = useState('');
50
- const [prBody, setPrBody] = useState('');
51
- const [prBaseBranch, setPrBaseBranch] = useState(
52
- selectedAttempt?.base_branch || 'main'
53
- );
54
- const [showPatDialog, setShowPatDialog] = useState(false);
55
- const [patDialogError, setPatDialogError] = useState<string | null>(null);
56
- const [showGitHubLoginDialog, setShowGitHubLoginDialog] = useState(false);
57
-
58
- useEffect(() => {
59
- if (showCreatePRDialog) {
60
- setPrTitle(`${task.title} (automagik-forge)`);
61
- setPrBody(task.description || '');
62
- }
63
- // eslint-disable-next-line react-hooks/exhaustive-deps
64
- }, [showCreatePRDialog]);
65
-
66
- // Update PR base branch when selected attempt changes
67
- useEffect(() => {
68
- if (selectedAttempt?.base_branch) {
69
- setPrBaseBranch(selectedAttempt.base_branch);
70
- }
71
- }, [selectedAttempt?.base_branch]);
72
-
73
- const handleConfirmCreatePR = useCallback(async () => {
74
- if (!projectId || !selectedAttempt?.id || !selectedAttempt?.task_id) return;
75
-
76
- setCreatingPR(true);
77
-
78
- try {
79
- const prUrl = await attemptsApi.createPR(
80
- projectId!,
81
- selectedAttempt.task_id,
82
- selectedAttempt.id,
83
- {
84
- title: prTitle,
85
- body: prBody || null,
86
- base_branch: prBaseBranch || null,
87
- }
88
- );
89
- // Open the PR URL in a new tab
90
- window.open(prUrl, '_blank');
91
- setShowCreatePRDialog(false);
92
- // Reset form
93
- setPrTitle('');
94
- setPrBody('');
95
- setPrBaseBranch(selectedAttempt?.base_branch || 'main');
96
- } catch (err) {
97
- const error = err as ApiError;
98
- if (
99
- error.message ===
100
- 'GitHub authentication not configured. Please sign in with GitHub.'
101
- ) {
102
- setShowCreatePRDialog(false);
103
- setShowGitHubLoginDialog(true);
104
- } else if (error.message === 'insufficient_github_permissions') {
105
- setShowCreatePRDialog(false);
106
- setPatDialogError(null);
107
- setShowPatDialog(true);
108
- } else if (error.message === 'github_repo_not_found_or_no_access') {
109
- setShowCreatePRDialog(false);
110
- setPatDialogError(
111
- 'Your token does not have access to this repository, or the repository does not exist. Please check the repository URL and/or provide a Personal Access Token with access.'
112
- );
113
- setShowPatDialog(true);
114
- } else if (error.status === 403) {
115
- setShowCreatePRDialog(false);
116
- setPatDialogError(null);
117
- setShowPatDialog(true);
118
- } else if (error.status === 404) {
119
- setShowCreatePRDialog(false);
120
- setPatDialogError(
121
- 'Your token does not have access to this repository, or the repository does not exist. Please check the repository URL and/or provide a Personal Access Token with access.'
122
- );
123
- setShowPatDialog(true);
124
- } else {
125
- setError(error.message || 'Failed to create GitHub PR');
126
- }
127
- } finally {
128
- setCreatingPR(false);
129
- }
130
- }, [
131
- projectId,
132
- selectedAttempt,
133
- prBaseBranch,
134
- prBody,
135
- prTitle,
136
- setCreatingPR,
137
- setError,
138
- setShowCreatePRDialog,
139
- setPatDialogError,
140
- setShowPatDialog,
141
- setShowGitHubLoginDialog,
142
- ]);
143
-
144
- const handleCancelCreatePR = useCallback(() => {
145
- setShowCreatePRDialog(false);
146
- // Reset form to empty state
147
- setPrTitle('');
148
- setPrBody('');
149
- setPrBaseBranch('main');
150
- }, [setShowCreatePRDialog]);
151
-
152
- return (
153
- <>
154
- <Dialog
155
- open={showCreatePRDialog}
156
- onOpenChange={() => handleCancelCreatePR()}
157
- >
158
- <DialogContent className="sm:max-w-[525px]">
159
- <DialogHeader>
160
- <DialogTitle>Create GitHub Pull Request</DialogTitle>
161
- <DialogDescription>
162
- Create a pull request for this task attempt on GitHub.
163
- </DialogDescription>
164
- </DialogHeader>
165
- <div className="space-y-4 py-4">
166
- <div className="space-y-2">
167
- <Label htmlFor="pr-title">Title</Label>
168
- <Input
169
- id="pr-title"
170
- value={prTitle}
171
- onChange={(e) => setPrTitle(e.target.value)}
172
- placeholder="Enter PR title"
173
- />
174
- </div>
175
- <div className="space-y-2">
176
- <Label htmlFor="pr-body">Description (optional)</Label>
177
- <Textarea
178
- id="pr-body"
179
- value={prBody}
180
- onChange={(e) => setPrBody(e.target.value)}
181
- placeholder="Enter PR description"
182
- rows={4}
183
- />
184
- </div>
185
- <div className="space-y-2">
186
- <Label htmlFor="pr-base">Base Branch</Label>
187
- <Select value={prBaseBranch} onValueChange={setPrBaseBranch}>
188
- <SelectTrigger>
189
- <SelectValue placeholder="Select base branch" />
190
- </SelectTrigger>
191
- <SelectContent>
192
- {branches
193
- .filter((branch) => !branch.is_remote) // Only show local branches
194
- .map((branch) => (
195
- <SelectItem key={branch.name} value={branch.name}>
196
- {branch.name}
197
- {branch.is_current && ' (current)'}
198
- </SelectItem>
199
- ))}
200
- {/* Add common branches as fallback if not in the list */}
201
- {!branches.some((b) => b.name === 'main' && !b.is_remote) && (
202
- <SelectItem value="main">main</SelectItem>
203
- )}
204
- {!branches.some(
205
- (b) => b.name === 'master' && !b.is_remote
206
- ) && <SelectItem value="master">master</SelectItem>}
207
- </SelectContent>
208
- </Select>
209
- </div>
210
- </div>
211
- <DialogFooter>
212
- <Button variant="outline" onClick={handleCancelCreatePR}>
213
- Cancel
214
- </Button>
215
- <Button
216
- onClick={handleConfirmCreatePR}
217
- disabled={creatingPR || !prTitle.trim()}
218
- className="bg-blue-600 hover:bg-blue-700"
219
- >
220
- {creatingPR ? 'Creating...' : 'Create PR'}
221
- </Button>
222
- </DialogFooter>
223
- </DialogContent>
224
- </Dialog>
225
-
226
- <ProvidePatDialog
227
- open={showPatDialog}
228
- onOpenChange={(open) => {
229
- setShowPatDialog(open);
230
- if (!open) setPatDialogError(null);
231
- }}
232
- errorMessage={patDialogError || undefined}
233
- />
234
-
235
- <GitHubLoginDialog
236
- open={showGitHubLoginDialog}
237
- onOpenChange={setShowGitHubLoginDialog}
238
- />
239
- </>
240
- );
241
- }
242
-
243
- export default CreatePrDialog;