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,25 +0,0 @@
1
- -- Add task templates tables
2
- CREATE TABLE task_templates (
3
- id BLOB PRIMARY KEY,
4
- project_id BLOB, -- NULL for global templates
5
- title TEXT NOT NULL,
6
- description TEXT,
7
- template_name TEXT NOT NULL, -- Display name for the template
8
- created_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
9
- updated_at TEXT NOT NULL DEFAULT (datetime('now', 'subsec')),
10
- FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
11
- );
12
-
13
- -- Add index for faster queries
14
- CREATE INDEX idx_task_templates_project_id ON task_templates(project_id);
15
-
16
- -- Add unique constraints to prevent duplicate template names within same scope
17
- -- For project-specific templates: unique within each project
18
- CREATE UNIQUE INDEX idx_task_templates_unique_name_project
19
- ON task_templates(project_id, template_name)
20
- WHERE project_id IS NOT NULL;
21
-
22
- -- For global templates: unique across all global templates
23
- CREATE UNIQUE INDEX idx_task_templates_unique_name_global
24
- ON task_templates(template_name)
25
- WHERE project_id IS NULL;
@@ -1,174 +0,0 @@
1
- -- Add default global templates
2
-
3
- -- 1. Bug Analysis template
4
- INSERT INTO task_templates (
5
- id,
6
- project_id,
7
- title,
8
- description,
9
- template_name,
10
- created_at,
11
- updated_at
12
- ) VALUES (
13
- randomblob(16),
14
- NULL, -- Global template
15
- 'Analyze codebase for potential bugs and issues',
16
- 'Perform a comprehensive analysis of the project codebase to identify potential bugs, code smells, and areas of improvement.
17
-
18
- ## Analysis Checklist:
19
-
20
- ### 1. Static Code Analysis
21
- - [ ] Run linting tools to identify syntax and style issues
22
- - [ ] Check for unused variables, imports, and dead code
23
- - [ ] Identify potential type errors or mismatches
24
- - [ ] Look for deprecated API usage
25
-
26
- ### 2. Common Bug Patterns
27
- - [ ] Check for null/undefined reference errors
28
- - [ ] Identify potential race conditions
29
- - [ ] Look for improper error handling
30
- - [ ] Check for resource leaks (memory, file handles, connections)
31
- - [ ] Identify potential security vulnerabilities (XSS, SQL injection, etc.)
32
-
33
- ### 3. Code Quality Issues
34
- - [ ] Identify overly complex functions (high cyclomatic complexity)
35
- - [ ] Look for code duplication
36
- - [ ] Check for missing or inadequate input validation
37
- - [ ] Identify hardcoded values that should be configurable
38
-
39
- ### 4. Testing Gaps
40
- - [ ] Identify untested code paths
41
- - [ ] Check for missing edge case tests
42
- - [ ] Look for inadequate error scenario testing
43
-
44
- ### 5. Performance Concerns
45
- - [ ] Identify potential performance bottlenecks
46
- - [ ] Check for inefficient algorithms or data structures
47
- - [ ] Look for unnecessary database queries or API calls
48
-
49
- ## Deliverables:
50
- 1. Prioritized list of identified issues
51
- 2. Recommendations for fixes
52
- 3. Estimated effort for addressing each issue',
53
- 'Bug Analysis',
54
- datetime('now', 'subsec'),
55
- datetime('now', 'subsec')
56
- );
57
-
58
- -- 2. Unit Test template
59
- INSERT INTO task_templates (
60
- id,
61
- project_id,
62
- title,
63
- description,
64
- template_name,
65
- created_at,
66
- updated_at
67
- ) VALUES (
68
- randomblob(16),
69
- NULL, -- Global template
70
- 'Add unit tests for [component/function]',
71
- 'Write unit tests to improve code coverage and ensure reliability.
72
-
73
- ## Unit Testing Checklist
74
-
75
- ### 1. Identify What to Test
76
- - [ ] Run coverage report to find untested functions
77
- - [ ] List the specific functions/methods to test
78
- - [ ] Note current coverage percentage
79
-
80
- ### 2. Write Tests
81
- - [ ] Test the happy path (expected behavior)
82
- - [ ] Test edge cases (empty inputs, boundaries)
83
- - [ ] Test error cases (invalid inputs, exceptions)
84
- - [ ] Mock external dependencies
85
- - [ ] Use descriptive test names
86
-
87
- ### 3. Test Quality
88
- - [ ] Each test focuses on one behavior
89
- - [ ] Tests can run independently
90
- - [ ] No hardcoded values that might change
91
- - [ ] Clear assertions that verify the behavior
92
-
93
- ## Examples to Cover:
94
- - Normal inputs → Expected outputs
95
- - Empty/null inputs → Proper handling
96
- - Invalid inputs → Error cases
97
- - Boundary values → Edge case behavior
98
-
99
- ## Goal
100
- Achieve at least 80% coverage for the target component
101
-
102
- ## Deliverables
103
- 1. New test file(s) with comprehensive unit tests
104
- 2. Updated coverage report
105
- 3. All tests passing',
106
- 'Add Unit Tests',
107
- datetime('now', 'subsec'),
108
- datetime('now', 'subsec')
109
- );
110
-
111
- -- 3. Code Refactoring template
112
- INSERT INTO task_templates (
113
- id,
114
- project_id,
115
- title,
116
- description,
117
- template_name,
118
- created_at,
119
- updated_at
120
- ) VALUES (
121
- randomblob(16),
122
- NULL, -- Global template
123
- 'Refactor [component/module] for better maintainability',
124
- 'Improve code structure and maintainability without changing functionality.
125
-
126
- ## Refactoring Checklist
127
-
128
- ### 1. Identify Refactoring Targets
129
- - [ ] Run code analysis tools (linters, complexity analyzers)
130
- - [ ] Identify code smells (long methods, duplicate code, large classes)
131
- - [ ] Check for outdated patterns or deprecated approaches
132
- - [ ] Review areas with frequent bugs or changes
133
-
134
- ### 2. Plan the Refactoring
135
- - [ ] Define clear goals (what to improve and why)
136
- - [ ] Ensure tests exist for current functionality
137
- - [ ] Create a backup branch
138
- - [ ] Break down into small, safe steps
139
-
140
- ### 3. Common Refactoring Actions
141
- - [ ] Extract methods from long functions
142
- - [ ] Remove duplicate code (DRY principle)
143
- - [ ] Rename variables/functions for clarity
144
- - [ ] Simplify complex conditionals
145
- - [ ] Extract constants from magic numbers/strings
146
- - [ ] Group related functionality into modules
147
- - [ ] Remove dead code
148
-
149
- ### 4. Maintain Functionality
150
- - [ ] Run tests after each change
151
- - [ ] Keep changes small and incremental
152
- - [ ] Commit frequently with clear messages
153
- - [ ] Verify no behavior has changed
154
-
155
- ### 5. Code Quality Improvements
156
- - [ ] Apply consistent formatting
157
- - [ ] Update to modern syntax/features
158
- - [ ] Improve error handling
159
- - [ ] Add type annotations (if applicable)
160
-
161
- ## Success Criteria
162
- - All tests still pass
163
- - Code is more readable and maintainable
164
- - No new bugs introduced
165
- - Performance not degraded
166
-
167
- ## Deliverables
168
- 1. Refactored code with improved structure
169
- 2. All tests passing
170
- 3. Brief summary of changes made',
171
- 'Code Refactoring',
172
- datetime('now', 'subsec'),
173
- datetime('now', 'subsec')
174
- );
@@ -1,20 +0,0 @@
1
- -- Migration to update executor type names from snake_case/camelCase to kebab-case
2
- -- This handles the change from charmopencode -> charm-opencode and setup_script -> setup-script
3
-
4
- -- Update task_attempts.executor column
5
- UPDATE task_attempts
6
- SET executor = 'charm-opencode'
7
- WHERE executor = 'charmopencode';
8
-
9
- UPDATE task_attempts
10
- SET executor = 'setup-script'
11
- WHERE executor = 'setup_script';
12
-
13
- -- Update execution_processes.executor_type column
14
- UPDATE execution_processes
15
- SET executor_type = 'charm-opencode'
16
- WHERE executor_type = 'charmopencode';
17
-
18
- UPDATE execution_processes
19
- SET executor_type = 'setup-script'
20
- WHERE executor_type = 'setup_script';
@@ -1,7 +0,0 @@
1
- PRAGMA foreign_keys = ON;
2
-
3
- -- Add parent_task_attempt column to tasks table
4
- ALTER TABLE tasks ADD COLUMN parent_task_attempt BLOB REFERENCES task_attempts(id);
5
-
6
- -- Create index for parent_task_attempt lookups
7
- CREATE INDEX idx_tasks_parent_task_attempt ON tasks(parent_task_attempt);
@@ -1,9 +0,0 @@
1
- -- Migration to drop task_attempt_activities table
2
- -- This removes the task attempt activity tracking functionality
3
-
4
- -- Drop indexes first
5
- DROP INDEX IF EXISTS idx_task_attempt_activities_execution_process_id;
6
- DROP INDEX IF EXISTS idx_task_attempt_activities_created_at;
7
-
8
- -- Drop the table
9
- DROP TABLE IF EXISTS task_attempt_activities;
@@ -1,2 +0,0 @@
1
- -- Add cleanup_script column to projects table
2
- ALTER TABLE projects ADD COLUMN cleanup_script TEXT;
@@ -1,25 +0,0 @@
1
- -- 1. Add the replacement column with the wider CHECK
2
- ALTER TABLE execution_processes
3
- ADD COLUMN process_type_new TEXT NOT NULL DEFAULT 'setupscript'
4
- CHECK (process_type_new IN ('setupscript',
5
- 'cleanupscript', -- new value 🎉
6
- 'codingagent',
7
- 'devserver'));
8
-
9
- -- 2. Copy existing values across
10
- UPDATE execution_processes
11
- SET process_type_new = process_type;
12
-
13
- -- 3. Drop any indexes that mention the old column
14
- DROP INDEX IF EXISTS idx_execution_processes_type;
15
-
16
- -- 4. Remove the old column (requires 3.35+)
17
- ALTER TABLE execution_processes DROP COLUMN process_type;
18
-
19
- -- 5. Rename the new column back to the canonical name
20
- ALTER TABLE execution_processes
21
- RENAME COLUMN process_type_new TO process_type;
22
-
23
- -- 6. Re-create the index
24
- CREATE INDEX idx_execution_processes_type
25
- ON execution_processes(process_type);
@@ -1,7 +0,0 @@
1
- PRAGMA foreign_keys = ON;
2
-
3
- -- Add wish_id column to tasks table as required field
4
- ALTER TABLE tasks ADD COLUMN wish_id TEXT NOT NULL DEFAULT '';
5
-
6
- -- Create index for wish_id lookups
7
- CREATE INDEX idx_tasks_wish_id ON tasks(wish_id);
@@ -1,5 +0,0 @@
1
- PRAGMA foreign_keys = ON;
2
-
3
- -- Remove the unique constraint index for wish_id that was incorrectly added
4
- -- wish_id is meant for grouping tasks, not uniqueness
5
- DROP INDEX IF EXISTS unique_wish_per_project;
@@ -1,23 +0,0 @@
1
- param(
2
- [Parameter(Mandatory=$true)]
3
- [string]$Title,
4
-
5
- [Parameter(Mandatory=$true)]
6
- [string]$Message,
7
-
8
- [Parameter(Mandatory=$false)]
9
- [string]$AppName = "Automagik Forge"
10
- )
11
-
12
- [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
13
- $Template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)
14
- $RawXml = [xml] $Template.GetXml()
15
- ($RawXml.toast.visual.binding.text|where {$_.id -eq "1"}).AppendChild($RawXml.CreateTextNode($Title)) | Out-Null
16
- ($RawXml.toast.visual.binding.text|where {$_.id -eq "2"}).AppendChild($RawXml.CreateTextNode($Message)) | Out-Null
17
- $SerializedXml = New-Object Windows.Data.Xml.Dom.XmlDocument
18
- $SerializedXml.LoadXml($RawXml.OuterXml)
19
- $Toast = [Windows.UI.Notifications.ToastNotification]::new($SerializedXml)
20
- $Toast.Tag = $AppName
21
- $Toast.Group = $AppName
22
- $Notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppName)
23
- $Notifier.Show($Toast)
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,218 +0,0 @@
1
- use std::{collections::HashMap, sync::Arc, time::Duration};
2
-
3
- #[cfg(unix)]
4
- use nix::{sys::signal::Signal, unistd::Pid};
5
- use tokio::sync::{Mutex, RwLock as TokioRwLock};
6
- use uuid::Uuid;
7
-
8
- use crate::services::{generate_user_id, AnalyticsConfig, AnalyticsService};
9
-
10
- #[derive(Debug)]
11
- pub enum ExecutionType {
12
- SetupScript,
13
- CleanupScript,
14
- CodingAgent,
15
- DevServer,
16
- }
17
-
18
- #[derive(Debug)]
19
- pub struct RunningExecution {
20
- pub task_attempt_id: Uuid,
21
- pub _execution_type: ExecutionType,
22
- pub child: command_group::AsyncGroupChild,
23
- }
24
-
25
- #[derive(Debug, Clone)]
26
- pub struct AppState {
27
- running_executions: Arc<Mutex<HashMap<Uuid, RunningExecution>>>,
28
- pub db_pool: sqlx::SqlitePool,
29
- config: Arc<tokio::sync::RwLock<crate::models::config::Config>>,
30
- pub analytics: Arc<TokioRwLock<AnalyticsService>>,
31
- user_id: String,
32
- }
33
-
34
- impl AppState {
35
- pub async fn new(
36
- db_pool: sqlx::SqlitePool,
37
- config: Arc<tokio::sync::RwLock<crate::models::config::Config>>,
38
- ) -> Self {
39
- // Initialize analytics with user preferences
40
- let user_enabled = {
41
- let config_guard = config.read().await;
42
- config_guard.analytics_enabled.unwrap_or(true)
43
- };
44
-
45
- let analytics_config = AnalyticsConfig::new(user_enabled);
46
- let analytics = Arc::new(TokioRwLock::new(AnalyticsService::new(analytics_config)));
47
-
48
- Self {
49
- running_executions: Arc::new(Mutex::new(HashMap::new())),
50
- db_pool,
51
- config,
52
- analytics,
53
- user_id: generate_user_id(),
54
- }
55
- }
56
-
57
- pub async fn update_analytics_config(&self, user_enabled: bool) {
58
- // Check if analytics was disabled before this update
59
- let was_analytics_disabled = {
60
- let analytics = self.analytics.read().await;
61
- !analytics.is_enabled()
62
- };
63
-
64
- let new_config = AnalyticsConfig::new(user_enabled);
65
- let new_service = AnalyticsService::new(new_config);
66
- let mut analytics = self.analytics.write().await;
67
- *analytics = new_service;
68
-
69
- // If analytics was disabled and is now enabled, fire a session_start event
70
- if was_analytics_disabled && analytics.is_enabled() {
71
- analytics.track_event(&self.user_id, "session_start", None);
72
- }
73
- }
74
-
75
- // Running executions getters
76
- pub async fn has_running_execution(&self, attempt_id: Uuid) -> bool {
77
- let executions = self.running_executions.lock().await;
78
- executions
79
- .values()
80
- .any(|exec| exec.task_attempt_id == attempt_id)
81
- }
82
-
83
- pub async fn get_running_executions_for_monitor(&self) -> Vec<(Uuid, Uuid, bool, Option<i64>)> {
84
- let mut executions = self.running_executions.lock().await;
85
- let mut completed_executions = Vec::new();
86
-
87
- for (execution_id, running_exec) in executions.iter_mut() {
88
- match running_exec.child.try_wait() {
89
- Ok(Some(status)) => {
90
- let success = status.success();
91
- let exit_code = status.code().map(|c| c as i64);
92
- completed_executions.push((
93
- *execution_id,
94
- running_exec.task_attempt_id,
95
- success,
96
- exit_code,
97
- ));
98
- }
99
- Ok(None) => {
100
- // Still running
101
- }
102
- Err(e) => {
103
- tracing::error!("Error checking process status: {}", e);
104
- completed_executions.push((
105
- *execution_id,
106
- running_exec.task_attempt_id,
107
- false,
108
- None,
109
- ));
110
- }
111
- }
112
- }
113
-
114
- // Remove completed executions from the map
115
- for (execution_id, _, _, _) in &completed_executions {
116
- executions.remove(execution_id);
117
- }
118
-
119
- completed_executions
120
- }
121
-
122
- // Running executions setters
123
- pub async fn add_running_execution(&self, execution_id: Uuid, execution: RunningExecution) {
124
- let mut executions = self.running_executions.lock().await;
125
- executions.insert(execution_id, execution);
126
- }
127
-
128
- pub async fn stop_running_execution_by_id(
129
- &self,
130
- execution_id: Uuid,
131
- ) -> Result<bool, Box<dyn std::error::Error + Send + Sync>> {
132
- let mut executions = self.running_executions.lock().await;
133
- let Some(exec) = executions.get_mut(&execution_id) else {
134
- return Ok(false);
135
- };
136
-
137
- // hit the whole process group, not just the leader
138
- #[cfg(unix)]
139
- {
140
- use nix::{sys::signal::killpg, unistd::getpgid};
141
-
142
- let pgid = getpgid(Some(Pid::from_raw(exec.child.id().unwrap() as i32)))?;
143
- for sig in [Signal::SIGINT, Signal::SIGTERM, Signal::SIGKILL] {
144
- killpg(pgid, sig)?;
145
- tokio::time::sleep(Duration::from_secs(2)).await;
146
- if exec.child.try_wait()?.is_some() {
147
- break; // gone!
148
- }
149
- }
150
- }
151
-
152
- // final fallback – command_group already targets the group
153
- exec.child.kill().await.ok();
154
- exec.child.wait().await.ok(); // reap
155
-
156
- // only NOW remove it
157
- executions.remove(&execution_id);
158
- Ok(true)
159
- }
160
-
161
- // Config getters
162
- pub async fn get_sound_alerts_enabled(&self) -> bool {
163
- let config = self.config.read().await;
164
- config.sound_alerts
165
- }
166
-
167
- pub async fn get_push_notifications_enabled(&self) -> bool {
168
- let config = self.config.read().await;
169
- config.push_notifications
170
- }
171
-
172
- pub async fn get_sound_file(&self) -> crate::models::config::SoundFile {
173
- let config = self.config.read().await;
174
- config.sound_file.clone()
175
- }
176
-
177
- pub fn get_config(&self) -> &Arc<tokio::sync::RwLock<crate::models::config::Config>> {
178
- &self.config
179
- }
180
-
181
- pub async fn track_analytics_event(
182
- &self,
183
- event_name: &str,
184
- properties: Option<serde_json::Value>,
185
- ) {
186
- let analytics = self.analytics.read().await;
187
- if analytics.is_enabled() {
188
- analytics.track_event(&self.user_id, event_name, properties);
189
- } else {
190
- tracing::debug!("Analytics disabled, skipping event: {}", event_name);
191
- }
192
- }
193
-
194
- pub async fn update_sentry_scope(&self) {
195
- let config = self.get_config().read().await;
196
- let username = config.github.username.clone();
197
- let email = config.github.primary_email.clone();
198
- drop(config);
199
-
200
- let sentry_user = if username.is_some() || email.is_some() {
201
- sentry::User {
202
- id: Some(self.user_id.clone()),
203
- username,
204
- email,
205
- ..Default::default()
206
- }
207
- } else {
208
- sentry::User {
209
- id: Some(self.user_id.clone()),
210
- ..Default::default()
211
- }
212
- };
213
-
214
- sentry::configure_scope(|scope| {
215
- scope.set_user(Some(sentry_user));
216
- });
217
- }
218
- }