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,45 +0,0 @@
1
- use rust_embed::RustEmbed;
2
- use sentry_tracing::{EventFilter, SentryLayer};
3
- use tracing::Level;
4
-
5
- pub mod app_state;
6
- pub mod execution_monitor;
7
- pub mod executor;
8
- pub mod executors;
9
- pub mod mcp;
10
- pub mod middleware;
11
- pub mod models;
12
- pub mod routes;
13
- pub mod services;
14
- pub mod utils;
15
-
16
- #[derive(RustEmbed)]
17
- #[folder = "../frontend/dist"]
18
- pub struct Assets;
19
-
20
- #[derive(RustEmbed)]
21
- #[folder = "sounds"]
22
- pub struct SoundAssets;
23
-
24
- #[derive(RustEmbed)]
25
- #[folder = "scripts"]
26
- pub struct ScriptAssets;
27
-
28
- pub fn sentry_layer<S>() -> SentryLayer<S>
29
- where
30
- S: tracing::Subscriber,
31
- S: for<'a> tracing_subscriber::registry::LookupSpan<'a>,
32
- {
33
- SentryLayer::default()
34
- .span_filter(|meta| {
35
- matches!(
36
- *meta.level(),
37
- Level::DEBUG | Level::INFO | Level::WARN | Level::ERROR
38
- )
39
- })
40
- .event_filter(|meta| match *meta.level() {
41
- Level::ERROR => EventFilter::Event,
42
- Level::DEBUG | Level::INFO | Level::WARN => EventFilter::Breadcrumb,
43
- Level::TRACE => EventFilter::Ignore,
44
- })
45
- }
@@ -1,324 +0,0 @@
1
- use std::{str::FromStr, sync::Arc};
2
-
3
- use axum::{
4
- body::Body,
5
- http::{header, HeaderValue, StatusCode},
6
- middleware::from_fn_with_state,
7
- response::{IntoResponse, Json as ResponseJson, Response},
8
- routing::{get, post},
9
- Json, Router,
10
- };
11
- use sentry_tower::NewSentryLayer;
12
- use sqlx::{sqlite::SqliteConnectOptions, SqlitePool};
13
- use strip_ansi_escapes::strip;
14
- use tokio::sync::RwLock;
15
- use tower_http::cors::CorsLayer;
16
- use tracing_subscriber::{filter::LevelFilter, prelude::*};
17
- use automagik_forge::{sentry_layer, Assets, ScriptAssets, SoundAssets};
18
-
19
- mod app_state;
20
- mod execution_monitor;
21
- mod executor;
22
- mod executors;
23
- mod mcp;
24
- mod middleware;
25
- mod models;
26
- mod routes;
27
- mod services;
28
- mod utils;
29
-
30
- use app_state::AppState;
31
- use execution_monitor::execution_monitor;
32
- use middleware::{
33
- load_execution_process_simple_middleware, load_project_middleware,
34
- load_task_attempt_middleware, load_task_middleware, load_task_template_middleware,
35
- };
36
- use models::{ApiResponse, Config};
37
- use routes::{
38
- auth, config, filesystem, health, projects, stream, task_attempts, task_templates, tasks,
39
- };
40
- use services::PrMonitorService;
41
- use utoipa::OpenApi;
42
- use utoipa_swagger_ui::SwaggerUi;
43
-
44
- mod openapi;
45
- use openapi::ApiDoc;
46
-
47
- async fn echo_handler(
48
- Json(payload): Json<serde_json::Value>,
49
- ) -> ResponseJson<ApiResponse<serde_json::Value>> {
50
- ResponseJson(ApiResponse::success(payload))
51
- }
52
-
53
- async fn static_handler(uri: axum::extract::Path<String>) -> impl IntoResponse {
54
- let path = uri.trim_start_matches('/');
55
- serve_file(path).await
56
- }
57
-
58
- async fn index_handler() -> impl IntoResponse {
59
- serve_file("index.html").await
60
- }
61
-
62
- async fn serve_file(path: &str) -> impl IntoResponse {
63
- let file = Assets::get(path);
64
-
65
- match file {
66
- Some(content) => {
67
- let mime = mime_guess::from_path(path).first_or_octet_stream();
68
-
69
- Response::builder()
70
- .status(StatusCode::OK)
71
- .header(
72
- header::CONTENT_TYPE,
73
- HeaderValue::from_str(mime.as_ref()).unwrap(),
74
- )
75
- .body(Body::from(content.data.into_owned()))
76
- .unwrap()
77
- }
78
- None => {
79
- // For SPA routing, serve index.html for unknown routes
80
- if let Some(index) = Assets::get("index.html") {
81
- Response::builder()
82
- .status(StatusCode::OK)
83
- .header(header::CONTENT_TYPE, HeaderValue::from_static("text/html"))
84
- .body(Body::from(index.data.into_owned()))
85
- .unwrap()
86
- } else {
87
- Response::builder()
88
- .status(StatusCode::NOT_FOUND)
89
- .body(Body::from("404 Not Found"))
90
- .unwrap()
91
- }
92
- }
93
- }
94
- }
95
-
96
- async fn serve_sound_file(
97
- axum::extract::Path(filename): axum::extract::Path<String>,
98
- ) -> impl IntoResponse {
99
- // Validate filename contains only expected sound files
100
- let valid_sounds = [
101
- "abstract-sound1.wav",
102
- "abstract-sound2.wav",
103
- "abstract-sound3.wav",
104
- "abstract-sound4.wav",
105
- "cow-mooing.wav",
106
- "phone-vibration.wav",
107
- "rooster.wav",
108
- ];
109
-
110
- if !valid_sounds.contains(&filename.as_str()) {
111
- return Response::builder()
112
- .status(StatusCode::NOT_FOUND)
113
- .body(Body::from("Sound file not found"))
114
- .unwrap();
115
- }
116
-
117
- match SoundAssets::get(&filename) {
118
- Some(content) => Response::builder()
119
- .status(StatusCode::OK)
120
- .header(header::CONTENT_TYPE, HeaderValue::from_static("audio/wav"))
121
- .body(Body::from(content.data.into_owned()))
122
- .unwrap(),
123
- None => Response::builder()
124
- .status(StatusCode::NOT_FOUND)
125
- .body(Body::from("Sound file not found"))
126
- .unwrap(),
127
- }
128
- }
129
-
130
- fn main() -> anyhow::Result<()> {
131
- // Load .env file if it exists
132
- dotenvy::dotenv().ok();
133
-
134
- let environment = if cfg!(debug_assertions) {
135
- "dev"
136
- } else {
137
- "production"
138
- };
139
- // Check if telemetry is disabled
140
- let telemetry_disabled = std::env::var("DISABLE_TELEMETRY")
141
- .unwrap_or_default()
142
- .to_lowercase() == "true";
143
-
144
- let _guard = if !telemetry_disabled {
145
- let sentry_dsn = std::env::var("SENTRY_DSN")
146
- .unwrap_or_else(|_| "https://fa5e961d24021da4e6df30e5beee03af@o4509714066571264.ingest.us.sentry.io/4509714113495040".to_string());
147
-
148
- Some(sentry::init((sentry_dsn, sentry::ClientOptions {
149
- release: sentry::release_name!(),
150
- environment: Some(environment.into()),
151
- attach_stacktrace: true,
152
- ..Default::default()
153
- })))
154
- } else {
155
- None
156
- };
157
- sentry::configure_scope(|scope| {
158
- scope.set_tag("source", "server");
159
- });
160
- tokio::runtime::Builder::new_multi_thread()
161
- .enable_all()
162
- .build()
163
- .unwrap()
164
- .block_on(async {
165
- tracing_subscriber::registry()
166
- .with(tracing_subscriber::fmt::layer().with_filter(LevelFilter::INFO))
167
- .with(sentry_layer())
168
- .init();
169
-
170
- // Create asset directory if it doesn't exist
171
- if !utils::asset_dir().exists() {
172
- std::fs::create_dir_all(utils::asset_dir())?;
173
- }
174
-
175
- // Database connection
176
- let database_url = format!(
177
- "sqlite://{}",
178
- utils::asset_dir().join("db.sqlite").to_string_lossy()
179
- );
180
-
181
- let options = SqliteConnectOptions::from_str(&database_url)?.create_if_missing(true);
182
- let pool = SqlitePool::connect_with(options).await?;
183
- sqlx::migrate!("./migrations").run(&pool).await?;
184
-
185
- // Load configuration
186
- let config_path = utils::config_path();
187
- let config = Config::load(&config_path)?;
188
- let config_arc = Arc::new(RwLock::new(config));
189
-
190
- // Create app state
191
- let app_state = AppState::new(pool.clone(), config_arc.clone()).await;
192
-
193
- app_state.update_sentry_scope().await;
194
-
195
- // Track session start event
196
- app_state.track_analytics_event("session_start", None).await;
197
- // Start background task to check for init status and spawn processes
198
- let state_clone = app_state.clone();
199
- tokio::spawn(async move {
200
- execution_monitor(state_clone).await;
201
- });
202
-
203
- // Start PR monitoring service
204
- let pr_monitor = PrMonitorService::new(pool.clone());
205
- let config_for_monitor = config_arc.clone();
206
-
207
- tokio::spawn(async move {
208
- pr_monitor.start_with_config(config_for_monitor).await;
209
- });
210
-
211
- // Public routes (no auth required)
212
- let public_routes = Router::new()
213
- .route("/api/health", get(health::health_check))
214
- .route("/api/echo", post(echo_handler));
215
-
216
- // Create routers with different middleware layers
217
- let base_routes = Router::new()
218
- .merge(stream::stream_router())
219
- .merge(filesystem::filesystem_router())
220
- .merge(config::config_router())
221
- .merge(auth::auth_router())
222
- .route("/sounds/:filename", get(serve_sound_file))
223
- .merge(
224
- Router::new()
225
- .route("/execution-processes/:process_id", get(task_attempts::get_execution_process))
226
- .route_layer(from_fn_with_state(app_state.clone(), load_execution_process_simple_middleware))
227
- );
228
-
229
- // Template routes with task template middleware applied selectively
230
- let template_routes = Router::new()
231
- .route("/templates", get(task_templates::list_templates).post(task_templates::create_template))
232
- .route("/templates/global", get(task_templates::list_global_templates))
233
- .route(
234
- "/projects/:project_id/templates",
235
- get(task_templates::list_project_templates),
236
- )
237
- .merge(
238
- Router::new()
239
- .route(
240
- "/templates/:template_id",
241
- get(task_templates::get_template)
242
- .put(task_templates::update_template)
243
- .delete(task_templates::delete_template),
244
- )
245
- .route_layer(from_fn_with_state(app_state.clone(), load_task_template_middleware))
246
- );
247
-
248
- // Project routes with project middleware
249
- let project_routes = Router::new()
250
- .merge(projects::projects_base_router())
251
- .merge(projects::projects_with_id_router()
252
- .layer(from_fn_with_state(app_state.clone(), load_project_middleware)));
253
-
254
- // Task routes with appropriate middleware
255
- let task_routes = Router::new()
256
- .merge(tasks::tasks_project_router()
257
- .layer(from_fn_with_state(app_state.clone(), load_project_middleware)))
258
- .merge(tasks::tasks_with_id_router()
259
- .layer(from_fn_with_state(app_state.clone(), load_task_middleware)));
260
-
261
- // Task attempt routes with appropriate middleware
262
- let task_attempt_routes = Router::new()
263
- .merge(task_attempts::task_attempts_list_router(app_state.clone())
264
- .layer(from_fn_with_state(app_state.clone(), load_task_middleware)))
265
- .merge(task_attempts::task_attempts_with_id_router(app_state.clone())
266
- .layer(from_fn_with_state(app_state.clone(), load_task_attempt_middleware)));
267
-
268
- // All routes (no auth required)
269
- let app_routes = Router::new()
270
- .nest(
271
- "/api",
272
- Router::new()
273
- .merge(base_routes)
274
- .merge(template_routes)
275
- .merge(project_routes)
276
- .merge(task_routes)
277
- .merge(task_attempt_routes)
278
- .layer(from_fn_with_state(app_state.clone(), auth::sentry_user_context_middleware)),
279
- );
280
-
281
- let app = Router::new()
282
- .merge(public_routes)
283
- .merge(app_routes)
284
- .merge(SwaggerUi::new("/docs").url("/api-docs/openapi.json", ApiDoc::openapi()))
285
- // Static file serving routes
286
- .route("/", get(index_handler))
287
- .route("/*path", get(static_handler))
288
- .with_state(app_state)
289
- .layer(CorsLayer::permissive())
290
- .layer(NewSentryLayer::new_from_top());
291
-
292
- let port = std::env::var("BACKEND_PORT")
293
- .or_else(|_| std::env::var("PORT"))
294
- .ok()
295
- .and_then(|s| {
296
- tracing::info!("Found PORT environment variable: {}", s);
297
- // remove any ANSI codes, then turn into String
298
- let cleaned = String::from_utf8(strip(s.as_bytes()))
299
- .expect("UTF-8 after stripping ANSI");
300
- cleaned.trim().parse::<u16>().ok()
301
- })
302
- .unwrap_or_else(|| {
303
- tracing::info!("No PORT environment variable set, using port 0 for auto-assignment");
304
- 0
305
- }); // Use 0 to find free port if no specific port provided
306
-
307
- let host = std::env::var("HOST").unwrap_or_else(|_| "127.0.0.1".to_string());
308
- let listener = tokio::net::TcpListener::bind(format!("{host}:{port}")).await?;
309
- let actual_port = listener.local_addr()?.port(); // get → 53427 (example)
310
-
311
- tracing::info!("Server running on http://{host}:{actual_port}");
312
-
313
- if !cfg!(debug_assertions) {
314
- tracing::info!("Opening browser...");
315
- if let Err(e) = utils::open_browser(&format!("http://127.0.0.1:{actual_port}")).await {
316
- tracing::warn!("Failed to open browser automatically: {}. Please open http://127.0.0.1:{} manually.", e, actual_port);
317
- }
318
- }
319
-
320
- axum::serve(listener, app).await?;
321
-
322
- Ok(())
323
- })
324
- }
@@ -1 +0,0 @@
1
- pub mod task_server;