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,92 +0,0 @@
1
- import { Hammer } from 'lucide-react';
2
- import { Loader } from '@/components/ui/loader.tsx';
3
- import MarkdownRenderer from '@/components/ui/markdown-renderer.tsx';
4
- import type { ExecutionProcess, WorktreeDiff } from 'shared/types.ts';
5
- import DisplayConversationEntry from '@/components/tasks/TaskDetails/DisplayConversationEntry.tsx';
6
- import useNormalizedConversation from '@/hooks/useNormalizedConversation';
7
-
8
- interface NormalizedConversationViewerProps {
9
- executionProcess: ExecutionProcess;
10
- onConversationUpdate?: () => void;
11
- onDisplayEntriesChange?: (num: number) => void;
12
- visibleEntriesNum?: number;
13
- diff?: WorktreeDiff | null;
14
- isBackgroundRefreshing?: boolean;
15
- diffDeletable?: boolean;
16
- }
17
-
18
- export function NormalizedConversationViewer({
19
- executionProcess,
20
- diffDeletable,
21
- onConversationUpdate,
22
- visibleEntriesNum,
23
- onDisplayEntriesChange,
24
- }: NormalizedConversationViewerProps) {
25
- const { loading, error, conversation, displayEntries } =
26
- useNormalizedConversation({
27
- executionProcess,
28
- onConversationUpdate,
29
- onDisplayEntriesChange,
30
- visibleEntriesNum,
31
- });
32
-
33
- if (loading) {
34
- return (
35
- <Loader message="Loading conversation..." size={24} className="py-4" />
36
- );
37
- }
38
-
39
- if (error) {
40
- return <div className="text-xs text-red-600 text-center">{error}</div>;
41
- }
42
-
43
- if (!conversation || conversation.entries.length === 0) {
44
- // If the execution process is still running, show loading instead of "no data"
45
- if (executionProcess.status === 'running') {
46
- return (
47
- <div className="text-xs text-muted-foreground italic text-center">
48
- Waiting for logs...
49
- </div>
50
- );
51
- }
52
-
53
- return (
54
- <div className="text-xs text-muted-foreground italic text-center">
55
- No conversation data available
56
- </div>
57
- );
58
- }
59
-
60
- return (
61
- <div>
62
- {/* Display prompt if available */}
63
- {conversation.prompt && (
64
- <div className="flex items-start gap-3">
65
- <div className="flex-shrink-0 mt-1">
66
- <Hammer className="h-4 w-4 text-blue-600" />
67
- </div>
68
- <div className="flex-1 min-w-0">
69
- <div className="text-sm whitespace-pre-wrap text-foreground">
70
- <MarkdownRenderer
71
- content={conversation.prompt}
72
- className="whitespace-pre-wrap break-words"
73
- />
74
- </div>
75
- </div>
76
- </div>
77
- )}
78
-
79
- {/* Display conversation entries */}
80
- <div className="space-y-2">
81
- {displayEntries.map((entry, index) => (
82
- <DisplayConversationEntry
83
- key={entry.timestamp || index}
84
- entry={entry}
85
- index={index}
86
- diffDeletable={diffDeletable}
87
- />
88
- ))}
89
- </div>
90
- </div>
91
- );
92
- }
@@ -1,22 +0,0 @@
1
- import MarkdownRenderer from '@/components/ui/markdown-renderer';
2
- import { Hammer } from 'lucide-react';
3
-
4
- const Prompt = ({ prompt }: { prompt: string }) => {
5
- return (
6
- <div className="flex items-start gap-3">
7
- <div className="flex-shrink-0 mt-1">
8
- <Hammer className="h-4 w-4 text-blue-600" />
9
- </div>
10
- <div className="flex-1 min-w-0">
11
- <div className="text-sm whitespace-pre-wrap text-foreground">
12
- <MarkdownRenderer
13
- content={prompt}
14
- className="whitespace-pre-wrap break-words"
15
- />
16
- </div>
17
- </div>
18
- </div>
19
- );
20
- };
21
-
22
- export default Prompt;
@@ -1,49 +0,0 @@
1
- import { useEffect, useMemo, useRef } from 'react';
2
- import { ExecutionProcess } from 'shared/types.ts';
3
-
4
- type Props = {
5
- setupProcessId: string | null;
6
- runningProcessDetails: Record<string, ExecutionProcess>;
7
- };
8
-
9
- function SetupScriptRunning({ setupProcessId, runningProcessDetails }: Props) {
10
- const setupScrollRef = useRef<HTMLDivElement>(null);
11
-
12
- // Auto-scroll setup script logs to bottom
13
- useEffect(() => {
14
- if (setupScrollRef.current) {
15
- setupScrollRef.current.scrollTop = setupScrollRef.current.scrollHeight;
16
- }
17
- }, [runningProcessDetails]);
18
-
19
- const setupProcess = useMemo(
20
- () =>
21
- setupProcessId
22
- ? runningProcessDetails[setupProcessId]
23
- : Object.values(runningProcessDetails).find(
24
- (process) => process.process_type === 'setupscript'
25
- ),
26
- [setupProcessId, runningProcessDetails]
27
- );
28
-
29
- return (
30
- <div ref={setupScrollRef} className="h-full overflow-y-auto">
31
- <div className="mb-4">
32
- <p className="text-lg font-semibold mb-2">Setup Script Running</p>
33
- <p className="text-muted-foreground mb-4">
34
- Preparing the environment for the coding agent...
35
- </p>
36
- </div>
37
-
38
- {setupProcess && (
39
- <div className="font-mono text-sm whitespace-pre-wrap text-muted-foreground">
40
- {[setupProcess.stdout || '', setupProcess.stderr || '']
41
- .filter(Boolean)
42
- .join('\n') || 'Waiting for setup script output...'}
43
- </div>
44
- )}
45
- </div>
46
- );
47
- }
48
-
49
- export default SetupScriptRunning;
@@ -1,186 +0,0 @@
1
- import { useContext } from 'react';
2
- import { MessageSquare } from 'lucide-react';
3
- import { NormalizedConversationViewer } from '@/components/tasks/TaskDetails/LogsTab/NormalizedConversationViewer.tsx';
4
- import {
5
- TaskAttemptDataContext,
6
- TaskAttemptLoadingContext,
7
- TaskExecutionStateContext,
8
- TaskSelectedAttemptContext,
9
- } from '@/components/context/taskDetailsContext.ts';
10
- import Conversation from '@/components/tasks/TaskDetails/LogsTab/Conversation.tsx';
11
- import { Loader } from '@/components/ui/loader';
12
- import SetupScriptRunning from '@/components/tasks/TaskDetails/LogsTab/SetupScriptRunning.tsx';
13
-
14
- function LogsTab() {
15
- const { loading } = useContext(TaskAttemptLoadingContext);
16
- const { executionState } = useContext(TaskExecutionStateContext);
17
- const { selectedAttempt } = useContext(TaskSelectedAttemptContext);
18
- const { attemptData } = useContext(TaskAttemptDataContext);
19
-
20
- if (loading) {
21
- return (
22
- <div className="flex items-center justify-center h-full">
23
- <Loader message="Loading..." size={32} />
24
- </div>
25
- );
26
- }
27
-
28
- // If no attempt is selected, show message
29
- if (!selectedAttempt) {
30
- return (
31
- <div className="text-center py-8 text-muted-foreground">
32
- <MessageSquare className="h-12 w-12 mx-auto mb-4 opacity-50" />
33
- <p className="text-lg font-medium mb-2">No attempt selected</p>
34
- <p className="text-sm">Select an attempt to view its logs</p>
35
- </div>
36
- );
37
- }
38
-
39
- // If no execution state, execution hasn't started yet
40
- if (!executionState) {
41
- return (
42
- <div className="text-center py-8 text-muted-foreground">
43
- <MessageSquare className="h-12 w-12 mx-auto mb-4 opacity-50" />
44
- <p className="text-lg font-medium mb-2">
45
- Task execution not started yet
46
- </p>
47
- <p className="text-sm">
48
- Logs will appear here once the task execution begins
49
- </p>
50
- </div>
51
- );
52
- }
53
-
54
- const isSetupRunning = executionState.execution_state === 'SetupRunning';
55
- const isSetupComplete = executionState.execution_state === 'SetupComplete';
56
- const isSetupFailed = executionState.execution_state === 'SetupFailed';
57
- const isSetupStopped = executionState.execution_state === 'SetupStopped';
58
- const isCodingAgentRunning =
59
- executionState.execution_state === 'CodingAgentRunning';
60
- const isCodingAgentComplete =
61
- executionState.execution_state === 'CodingAgentComplete';
62
- const isCodingAgentFailed =
63
- executionState.execution_state === 'CodingAgentFailed';
64
- const isCodingAgentStopped =
65
- executionState.execution_state === 'CodingAgentStopped';
66
- const isComplete = executionState.execution_state === 'Complete';
67
- const hasChanges = executionState.has_changes;
68
-
69
- // When setup script is running, show setup execution stdio
70
- if (isSetupRunning) {
71
- return (
72
- <SetupScriptRunning
73
- setupProcessId={executionState.setup_process_id}
74
- runningProcessDetails={attemptData.runningProcessDetails}
75
- />
76
- );
77
- }
78
-
79
- // When setup failed or was stopped
80
- if (isSetupFailed || isSetupStopped) {
81
- let setupProcess = executionState.setup_process_id
82
- ? attemptData.runningProcessDetails[executionState.setup_process_id]
83
- : Object.values(attemptData.runningProcessDetails).find(
84
- (process) => process.process_type === 'setupscript'
85
- );
86
-
87
- // If not found in runningProcessDetails, try to find in processes array
88
- if (!setupProcess) {
89
- const setupSummary = attemptData.processes.find(
90
- (process) => process.process_type === 'setupscript'
91
- );
92
-
93
- if (setupSummary) {
94
- setupProcess = Object.values(attemptData.runningProcessDetails).find(
95
- (process) => process.id === setupSummary.id
96
- );
97
-
98
- if (!setupProcess) {
99
- setupProcess = {
100
- ...setupSummary,
101
- stdout: null,
102
- stderr: null,
103
- } as any;
104
- }
105
- }
106
- }
107
-
108
- return (
109
- <div className="h-full overflow-y-auto">
110
- <div className="mb-4">
111
- <p
112
- className={`text-lg font-semibold mb-2 ${isSetupFailed ? 'text-destructive' : ''}`}
113
- >
114
- {isSetupFailed ? 'Setup Script Failed' : 'Setup Script Stopped'}
115
- </p>
116
- {isSetupFailed && (
117
- <p className="text-muted-foreground mb-4">
118
- The setup script encountered an error. Error details below:
119
- </p>
120
- )}
121
- </div>
122
-
123
- {setupProcess && (
124
- <NormalizedConversationViewer executionProcess={setupProcess} />
125
- )}
126
- </div>
127
- );
128
- }
129
-
130
- // When coding agent is in any state (running, complete, failed, stopped)
131
- if (
132
- isCodingAgentRunning ||
133
- isCodingAgentComplete ||
134
- isCodingAgentFailed ||
135
- isCodingAgentStopped ||
136
- hasChanges
137
- ) {
138
- return <Conversation />;
139
- }
140
-
141
- // When setup is complete but coding agent hasn't started, show waiting state
142
- if (
143
- isSetupComplete &&
144
- !isCodingAgentRunning &&
145
- !isCodingAgentComplete &&
146
- !isCodingAgentFailed &&
147
- !isCodingAgentStopped &&
148
- !hasChanges
149
- ) {
150
- return (
151
- <div className="text-center py-8 text-muted-foreground">
152
- <MessageSquare className="h-12 w-12 mx-auto mb-4 opacity-50" />
153
- <p className="text-lg font-semibold mb-2">Setup Complete</p>
154
- <p>Waiting for coding agent to start...</p>
155
- </div>
156
- );
157
- }
158
-
159
- // When task is complete, show completion message
160
- if (isComplete) {
161
- return (
162
- <div className="text-center py-8 text-green-600">
163
- <MessageSquare className="h-12 w-12 mx-auto mb-4 opacity-50" />
164
- <p className="text-lg font-semibold mb-2">Task Complete</p>
165
- <p className="text-muted-foreground">
166
- The task has been completed successfully.
167
- </p>
168
- </div>
169
- );
170
- }
171
-
172
- // When coding agent is running or complete, show conversation
173
- if (isCodingAgentRunning || isCodingAgentComplete || hasChanges) {
174
- return <Conversation />;
175
- }
176
-
177
- // Default case - unexpected state
178
- return (
179
- <div className="text-center py-8 text-muted-foreground">
180
- <MessageSquare className="h-12 w-12 mx-auto mb-4 opacity-50" />
181
- <p>Unknown execution state</p>
182
- </div>
183
- );
184
- }
185
-
186
- export default LogsTab;
@@ -1,288 +0,0 @@
1
- import { useContext, useState } from 'react';
2
- import {
3
- Play,
4
- Square,
5
- AlertCircle,
6
- CheckCircle,
7
- Clock,
8
- Cog,
9
- ArrowLeft,
10
- } from 'lucide-react';
11
- import { TaskAttemptDataContext } from '@/components/context/taskDetailsContext.ts';
12
- import { executionProcessesApi } from '@/lib/api.ts';
13
- import type {
14
- ExecutionProcessStatus,
15
- ExecutionProcessSummary,
16
- } from 'shared/types.ts';
17
-
18
- function ProcessesTab() {
19
- const { attemptData, setAttemptData } = useContext(TaskAttemptDataContext);
20
- const [selectedProcessId, setSelectedProcessId] = useState<string | null>(
21
- null
22
- );
23
- const [loadingProcessId, setLoadingProcessId] = useState<string | null>(null);
24
-
25
- const getStatusIcon = (status: ExecutionProcessStatus) => {
26
- switch (status) {
27
- case 'running':
28
- return <Play className="h-4 w-4 text-blue-500" />;
29
- case 'completed':
30
- return <CheckCircle className="h-4 w-4 text-green-500" />;
31
- case 'failed':
32
- return <AlertCircle className="h-4 w-4 text-red-500" />;
33
- case 'killed':
34
- return <Square className="h-4 w-4 text-gray-500" />;
35
- default:
36
- return <Clock className="h-4 w-4 text-gray-400" />;
37
- }
38
- };
39
-
40
- const getStatusColor = (status: ExecutionProcessStatus) => {
41
- switch (status) {
42
- case 'running':
43
- return 'bg-blue-50 border-blue-200 text-blue-800';
44
- case 'completed':
45
- return 'bg-green-50 border-green-200 text-green-800';
46
- case 'failed':
47
- return 'bg-red-50 border-red-200 text-red-800';
48
- case 'killed':
49
- return 'bg-gray-50 border-gray-200 text-gray-800';
50
- default:
51
- return 'bg-gray-50 border-gray-200 text-gray-800';
52
- }
53
- };
54
-
55
- const formatDate = (dateString: string) => {
56
- const date = new Date(dateString);
57
- return date.toLocaleString();
58
- };
59
-
60
- const fetchProcessDetails = async (processId: string) => {
61
- try {
62
- setLoadingProcessId(processId);
63
- const result = await executionProcessesApi.getDetails(processId);
64
-
65
- if (result !== undefined) {
66
- setAttemptData((prev) => ({
67
- ...prev,
68
- runningProcessDetails: {
69
- ...prev.runningProcessDetails,
70
- [processId]: result,
71
- },
72
- }));
73
- }
74
- } catch (err) {
75
- console.error('Failed to fetch process details:', err);
76
- } finally {
77
- setLoadingProcessId(null);
78
- }
79
- };
80
-
81
- const handleProcessClick = async (process: ExecutionProcessSummary) => {
82
- setSelectedProcessId(process.id);
83
-
84
- // If we don't have details for this process, fetch them
85
- if (!attemptData.runningProcessDetails[process.id]) {
86
- await fetchProcessDetails(process.id);
87
- }
88
- };
89
-
90
- const selectedProcess = selectedProcessId
91
- ? attemptData.runningProcessDetails[selectedProcessId]
92
- : null;
93
-
94
- if (!attemptData.processes || attemptData.processes.length === 0) {
95
- return (
96
- <div className="flex-1 flex items-center justify-center text-muted-foreground">
97
- <div className="text-center">
98
- <Cog className="h-12 w-12 mx-auto mb-4 opacity-50" />
99
- <p>No execution processes found for this attempt.</p>
100
- </div>
101
- </div>
102
- );
103
- }
104
-
105
- return (
106
- <div className="flex-1 flex flex-col min-h-0">
107
- {!selectedProcessId ? (
108
- <div className="flex-1 overflow-auto px-4 pb-20">
109
- <div className="space-y-3">
110
- {attemptData.processes.map((process) => (
111
- <div
112
- key={process.id}
113
- className={`border rounded-lg p-4 hover:bg-muted/30 cursor-pointer transition-colors ${
114
- loadingProcessId === process.id
115
- ? 'opacity-50 cursor-wait'
116
- : ''
117
- }`}
118
- onClick={() => handleProcessClick(process)}
119
- >
120
- <div className="flex items-start justify-between">
121
- <div className="flex items-center space-x-3">
122
- {getStatusIcon(process.status)}
123
- <div>
124
- <h3 className="font-medium text-sm">
125
- {process.process_type}
126
- {process.executor_type && (
127
- <span className="text-muted-foreground">
128
- {' '}
129
- ({process.executor_type})
130
- </span>
131
- )}
132
- </h3>
133
- <p className="text-sm text-muted-foreground mt-1">
134
- {process.command}
135
- </p>
136
- {process.args && (
137
- <p className="text-xs text-muted-foreground mt-1">
138
- Args: {process.args}
139
- </p>
140
- )}
141
- </div>
142
- </div>
143
- <div className="text-right">
144
- <span
145
- className={`inline-block px-2 py-1 text-xs font-medium border rounded-full ${getStatusColor(
146
- process.status
147
- )}`}
148
- >
149
- {process.status}
150
- </span>
151
- {process.exit_code !== null && (
152
- <p className="text-xs text-muted-foreground mt-1">
153
- Exit: {process.exit_code.toString()}
154
- </p>
155
- )}
156
- </div>
157
- </div>
158
- <div className="mt-3 text-xs text-muted-foreground">
159
- <div className="flex justify-between">
160
- <span>Started: {formatDate(process.started_at)}</span>
161
- {process.completed_at && (
162
- <span>Completed: {formatDate(process.completed_at)}</span>
163
- )}
164
- </div>
165
- <div className="mt-1">
166
- Working directory: {process.working_directory}
167
- </div>
168
- </div>
169
- </div>
170
- ))}
171
- </div>
172
- </div>
173
- ) : (
174
- <div className="flex-1 flex flex-col min-h-0">
175
- <div className="flex items-center justify-between p-4 border-b flex-shrink-0">
176
- <h2 className="text-lg font-semibold">Process Details</h2>
177
- <button
178
- onClick={() => setSelectedProcessId(null)}
179
- className="flex items-center gap-2 px-3 py-2 text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-muted/50 rounded-md border border-border transition-colors"
180
- >
181
- <ArrowLeft className="h-4 w-4" />
182
- Back to list
183
- </button>
184
- </div>
185
- <div className="flex-1 overflow-y-auto p-4 pb-20">
186
- {selectedProcess ? (
187
- <div className="space-y-4">
188
- <div className="grid grid-cols-2 gap-4">
189
- <div>
190
- <h3 className="font-medium text-sm mb-2">Process Info</h3>
191
- <div className="space-y-1 text-sm">
192
- <p>
193
- <span className="font-medium">Type:</span>{' '}
194
- {selectedProcess.process_type}
195
- </p>
196
- <p>
197
- <span className="font-medium">Status:</span>{' '}
198
- {selectedProcess.status}
199
- </p>
200
- {selectedProcess.executor_type && (
201
- <p>
202
- <span className="font-medium">Executor:</span>{' '}
203
- {selectedProcess.executor_type}
204
- </p>
205
- )}
206
- <p>
207
- <span className="font-medium">Exit Code:</span>{' '}
208
- {selectedProcess.exit_code?.toString() ?? 'N/A'}
209
- </p>
210
- </div>
211
- </div>
212
- <div>
213
- <h3 className="font-medium text-sm mb-2">Timing</h3>
214
- <div className="space-y-1 text-sm">
215
- <p>
216
- <span className="font-medium">Started:</span>{' '}
217
- {formatDate(selectedProcess.started_at)}
218
- </p>
219
- {selectedProcess.completed_at && (
220
- <p>
221
- <span className="font-medium">Completed:</span>{' '}
222
- {formatDate(selectedProcess.completed_at)}
223
- </p>
224
- )}
225
- </div>
226
- </div>
227
- </div>
228
-
229
- <div>
230
- <h3 className="font-medium text-sm mb-2">Command</h3>
231
- <div className="bg-muted/50 p-3 rounded-md font-mono text-sm">
232
- {selectedProcess.command}
233
- {selectedProcess.args && (
234
- <div className="mt-1 text-muted-foreground">
235
- Args: {selectedProcess.args}
236
- </div>
237
- )}
238
- </div>
239
- </div>
240
-
241
- <div>
242
- <h3 className="font-medium text-sm mb-2">
243
- Working Directory
244
- </h3>
245
- <div className="bg-muted/50 p-3 rounded-md font-mono text-sm">
246
- {selectedProcess.working_directory}
247
- </div>
248
- </div>
249
-
250
- {selectedProcess.stdout && (
251
- <div>
252
- <h3 className="font-medium text-sm mb-2">Stdout</h3>
253
- <div className="bg-black text-green-400 p-3 rounded-md font-mono text-sm h-64 overflow-auto">
254
- <pre className="whitespace-pre-wrap">
255
- {selectedProcess.stdout}
256
- </pre>
257
- </div>
258
- </div>
259
- )}
260
-
261
- {selectedProcess.stderr && (
262
- <div>
263
- <h3 className="font-medium text-sm mb-2">Stderr</h3>
264
- <div className="bg-black text-red-400 p-3 rounded-md font-mono text-sm h-64 overflow-auto">
265
- <pre className="whitespace-pre-wrap">
266
- {selectedProcess.stderr}
267
- </pre>
268
- </div>
269
- </div>
270
- )}
271
- </div>
272
- ) : loadingProcessId === selectedProcessId ? (
273
- <div className="text-center text-muted-foreground">
274
- <p>Loading process details...</p>
275
- </div>
276
- ) : (
277
- <div className="text-center text-muted-foreground">
278
- <p>Failed to load process details. Please try again.</p>
279
- </div>
280
- )}
281
- </div>
282
- </div>
283
- )}
284
- </div>
285
- );
286
- }
287
-
288
- export default ProcessesTab;