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,98 +0,0 @@
1
- import { useState } from 'react';
2
- import {
3
- Dialog,
4
- DialogContent,
5
- DialogHeader,
6
- DialogTitle,
7
- DialogFooter,
8
- } from './ui/dialog';
9
- import { Input } from './ui/input';
10
- import { Button } from './ui/button';
11
- import { useConfig } from './config-provider';
12
- import { Alert, AlertDescription } from './ui/alert';
13
-
14
- export function ProvidePatDialog({
15
- open,
16
- onOpenChange,
17
- errorMessage,
18
- }: {
19
- open: boolean;
20
- onOpenChange: (open: boolean) => void;
21
- errorMessage?: string;
22
- }) {
23
- const { config, updateAndSaveConfig } = useConfig();
24
- const [pat, setPat] = useState('');
25
- const [saving, setSaving] = useState(false);
26
- const [error, setError] = useState<string | null>(null);
27
-
28
- const handleSave = async () => {
29
- if (!config) return;
30
- setSaving(true);
31
- setError(null);
32
- try {
33
- await updateAndSaveConfig({
34
- github: {
35
- ...config.github,
36
- pat,
37
- },
38
- });
39
- onOpenChange(false);
40
- } catch (err) {
41
- setError('Failed to save Personal Access Token');
42
- } finally {
43
- setSaving(false);
44
- }
45
- };
46
-
47
- return (
48
- <Dialog open={open} onOpenChange={onOpenChange}>
49
- <DialogContent>
50
- <DialogHeader>
51
- <DialogTitle>Provide GitHub Personal Access Token</DialogTitle>
52
- </DialogHeader>
53
- <div className="space-y-2">
54
- <p>
55
- {errorMessage ||
56
- 'Your GitHub OAuth token does not have sufficient permissions to open a PR in this repository.'}
57
- <br />
58
- <br />
59
- Please provide a Personal Access Token with <b>repo</b> permissions.
60
- </p>
61
- <Input
62
- placeholder="ghp_xxxxxxxxxxxxxxxxxxxx"
63
- value={pat}
64
- onChange={(e) => setPat(e.target.value)}
65
- autoFocus
66
- />
67
- <p className="text-sm text-muted-foreground">
68
- <a
69
- href="https://github.com/settings/tokens"
70
- target="_blank"
71
- rel="noopener noreferrer"
72
- className="text-blue-600 hover:underline"
73
- >
74
- Create a token here
75
- </a>
76
- </p>
77
- {error && (
78
- <Alert variant="destructive">
79
- <AlertDescription>{error}</AlertDescription>
80
- </Alert>
81
- )}
82
- </div>
83
- <DialogFooter>
84
- <Button onClick={handleSave} disabled={saving || !pat || !config}>
85
- {saving ? 'Saving...' : 'Save'}
86
- </Button>
87
- <Button
88
- variant="outline"
89
- onClick={() => onOpenChange(false)}
90
- disabled={saving}
91
- >
92
- Cancel
93
- </Button>
94
- </DialogFooter>
95
- </DialogContent>
96
- </Dialog>
97
- );
98
- }
@@ -1,336 +0,0 @@
1
- import { useState, useEffect, useCallback } from 'react';
2
- import { Button } from '@/components/ui/button';
3
- import { Input } from '@/components/ui/input';
4
- import { Label } from '@/components/ui/label';
5
- import { Textarea } from '@/components/ui/textarea';
6
- import {
7
- Dialog,
8
- DialogContent,
9
- DialogHeader,
10
- DialogTitle,
11
- DialogFooter,
12
- } from '@/components/ui/dialog';
13
- import { Plus, Edit2, Trash2, Loader2 } from 'lucide-react';
14
- import { templatesApi } from '@/lib/api';
15
- import type {
16
- TaskTemplate,
17
- CreateTaskTemplate,
18
- UpdateTaskTemplate,
19
- } from 'shared/types';
20
-
21
- interface TaskTemplateManagerProps {
22
- projectId?: string;
23
- isGlobal?: boolean;
24
- }
25
-
26
- export function TaskTemplateManager({
27
- projectId,
28
- isGlobal = false,
29
- }: TaskTemplateManagerProps) {
30
- const [templates, setTemplates] = useState<TaskTemplate[]>([]);
31
- const [loading, setLoading] = useState(true);
32
- const [isDialogOpen, setIsDialogOpen] = useState(false);
33
- const [editingTemplate, setEditingTemplate] = useState<TaskTemplate | null>(
34
- null
35
- );
36
- const [formData, setFormData] = useState({
37
- template_name: '',
38
- title: '',
39
- description: '',
40
- });
41
- const [saving, setSaving] = useState(false);
42
- const [error, setError] = useState<string | null>(null);
43
-
44
- const fetchTemplates = useCallback(async () => {
45
- setLoading(true);
46
- try {
47
- const data = isGlobal
48
- ? await templatesApi.listGlobal()
49
- : projectId
50
- ? await templatesApi.listByProject(projectId)
51
- : [];
52
-
53
- // Filter to show only templates for this specific scope
54
- const filtered = data.filter((template) =>
55
- isGlobal
56
- ? template.project_id === null
57
- : template.project_id === projectId
58
- );
59
-
60
- setTemplates(filtered);
61
- } catch (err) {
62
- console.error('Failed to fetch templates:', err);
63
- } finally {
64
- setLoading(false);
65
- }
66
- }, [isGlobal, projectId]);
67
-
68
- useEffect(() => {
69
- fetchTemplates();
70
- }, [fetchTemplates]);
71
-
72
- const handleOpenDialog = useCallback((template?: TaskTemplate) => {
73
- if (template) {
74
- setEditingTemplate(template);
75
- setFormData({
76
- template_name: template.template_name,
77
- title: template.title,
78
- description: template.description || '',
79
- });
80
- } else {
81
- setEditingTemplate(null);
82
- setFormData({
83
- template_name: '',
84
- title: '',
85
- description: '',
86
- });
87
- }
88
- setError(null);
89
- setIsDialogOpen(true);
90
- }, []);
91
-
92
- const handleCloseDialog = useCallback(() => {
93
- setIsDialogOpen(false);
94
- setEditingTemplate(null);
95
- setFormData({
96
- template_name: '',
97
- title: '',
98
- description: '',
99
- });
100
- setError(null);
101
- }, []);
102
-
103
- const handleSave = useCallback(async () => {
104
- if (!formData.template_name.trim() || !formData.title.trim()) {
105
- setError('Template name and title are required');
106
- return;
107
- }
108
-
109
- setSaving(true);
110
- setError(null);
111
-
112
- try {
113
- if (editingTemplate) {
114
- const updateData: UpdateTaskTemplate = {
115
- template_name: formData.template_name,
116
- title: formData.title,
117
- description: formData.description || null,
118
- };
119
- await templatesApi.update(editingTemplate.id, updateData);
120
- } else {
121
- const createData: CreateTaskTemplate = {
122
- project_id: isGlobal ? null : projectId || null,
123
- template_name: formData.template_name,
124
- title: formData.title,
125
- description: formData.description || null,
126
- };
127
- await templatesApi.create(createData);
128
- }
129
- await fetchTemplates();
130
- handleCloseDialog();
131
- } catch (err: any) {
132
- setError(err.message || 'Failed to save template');
133
- } finally {
134
- setSaving(false);
135
- }
136
- }, [
137
- formData,
138
- editingTemplate,
139
- isGlobal,
140
- projectId,
141
- fetchTemplates,
142
- handleCloseDialog,
143
- ]);
144
-
145
- // Handle keyboard shortcuts
146
- useEffect(() => {
147
- const handleKeyDown = (event: KeyboardEvent) => {
148
- // Command/Ctrl + Enter to save template
149
- if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {
150
- if (isDialogOpen && !saving) {
151
- event.preventDefault();
152
- handleSave();
153
- }
154
- }
155
- };
156
-
157
- if (isDialogOpen) {
158
- document.addEventListener('keydown', handleKeyDown, true); // Use capture phase for priority
159
- return () => document.removeEventListener('keydown', handleKeyDown, true);
160
- }
161
- }, [isDialogOpen, saving, handleSave]);
162
-
163
- const handleDelete = useCallback(
164
- async (template: TaskTemplate) => {
165
- if (
166
- !confirm(
167
- `Are you sure you want to delete the template "${template.template_name}"?`
168
- )
169
- ) {
170
- return;
171
- }
172
-
173
- try {
174
- await templatesApi.delete(template.id);
175
- await fetchTemplates();
176
- } catch (err) {
177
- console.error('Failed to delete template:', err);
178
- }
179
- },
180
- [fetchTemplates]
181
- );
182
-
183
- if (loading) {
184
- return (
185
- <div className="flex items-center justify-center py-8">
186
- <Loader2 className="h-8 w-8 animate-spin" />
187
- </div>
188
- );
189
- }
190
-
191
- return (
192
- <div className="space-y-4">
193
- <div className="flex justify-between items-center">
194
- <h3 className="text-lg font-semibold">
195
- {isGlobal ? 'Global Task Templates' : 'Project Task Templates'}
196
- </h3>
197
- <Button onClick={() => handleOpenDialog()} size="sm">
198
- <Plus className="h-4 w-4 mr-2" />
199
- Add Template
200
- </Button>
201
- </div>
202
-
203
- {templates.length === 0 ? (
204
- <div className="text-center py-8 text-muted-foreground">
205
- No templates yet. Create your first template to get started.
206
- </div>
207
- ) : (
208
- <div className="border rounded-lg overflow-hidden">
209
- <div className="max-h-[400px] overflow-auto">
210
- <table className="w-full">
211
- <thead className="border-b bg-muted/50 sticky top-0">
212
- <tr>
213
- <th className="text-left p-2 text-sm font-medium">
214
- Template Name
215
- </th>
216
- <th className="text-left p-2 text-sm font-medium">Title</th>
217
- <th className="text-left p-2 text-sm font-medium">
218
- Description
219
- </th>
220
- <th className="text-right p-2 text-sm font-medium">
221
- Actions
222
- </th>
223
- </tr>
224
- </thead>
225
- <tbody>
226
- {templates.map((template) => (
227
- <tr
228
- key={template.id}
229
- className="border-b hover:bg-muted/30 transition-colors"
230
- >
231
- <td className="p-2 text-sm font-medium">
232
- {template.template_name}
233
- </td>
234
- <td className="p-2 text-sm">{template.title}</td>
235
- <td className="p-2 text-sm">
236
- <div
237
- className="max-w-[200px] truncate"
238
- title={template.description || ''}
239
- >
240
- {template.description || (
241
- <span className="text-muted-foreground">-</span>
242
- )}
243
- </div>
244
- </td>
245
- <td className="p-2">
246
- <div className="flex justify-end gap-1">
247
- <Button
248
- variant="ghost"
249
- size="icon"
250
- className="h-7 w-7"
251
- onClick={() => handleOpenDialog(template)}
252
- title="Edit template"
253
- >
254
- <Edit2 className="h-3 w-3" />
255
- </Button>
256
- <Button
257
- variant="ghost"
258
- size="icon"
259
- className="h-7 w-7"
260
- onClick={() => handleDelete(template)}
261
- title="Delete template"
262
- >
263
- <Trash2 className="h-3 w-3" />
264
- </Button>
265
- </div>
266
- </td>
267
- </tr>
268
- ))}
269
- </tbody>
270
- </table>
271
- </div>
272
- </div>
273
- )}
274
-
275
- <Dialog open={isDialogOpen} onOpenChange={setIsDialogOpen}>
276
- <DialogContent className="sm:max-w-[500px]">
277
- <DialogHeader>
278
- <DialogTitle>
279
- {editingTemplate ? 'Edit Template' : 'Create Template'}
280
- </DialogTitle>
281
- </DialogHeader>
282
- <div className="space-y-4 py-4">
283
- <div>
284
- <Label htmlFor="template-name">Template Name</Label>
285
- <Input
286
- id="template-name"
287
- value={formData.template_name}
288
- onChange={(e) =>
289
- setFormData({ ...formData, template_name: e.target.value })
290
- }
291
- placeholder="e.g., Bug Fix, Feature Request"
292
- />
293
- </div>
294
- <div>
295
- <Label htmlFor="template-title">Default Title</Label>
296
- <Input
297
- id="template-title"
298
- value={formData.title}
299
- onChange={(e) =>
300
- setFormData({ ...formData, title: e.target.value })
301
- }
302
- placeholder="e.g., Fix bug in..."
303
- />
304
- </div>
305
- <div>
306
- <Label htmlFor="template-description">Default Description</Label>
307
- <Textarea
308
- id="template-description"
309
- value={formData.description}
310
- onChange={(e) =>
311
- setFormData({ ...formData, description: e.target.value })
312
- }
313
- placeholder="Enter a default description for tasks created with this template"
314
- rows={4}
315
- />
316
- </div>
317
- {error && <div className="text-sm text-red-600">{error}</div>}
318
- </div>
319
- <DialogFooter>
320
- <Button
321
- variant="outline"
322
- onClick={handleCloseDialog}
323
- disabled={saving}
324
- >
325
- Cancel
326
- </Button>
327
- <Button onClick={handleSave} disabled={saving}>
328
- {saving && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
329
- {editingTemplate ? 'Update' : 'Create'}
330
- </Button>
331
- </DialogFooter>
332
- </DialogContent>
333
- </Dialog>
334
- </div>
335
- );
336
- }
@@ -1,119 +0,0 @@
1
- import {
2
- createContext,
3
- ReactNode,
4
- useCallback,
5
- useContext,
6
- useEffect,
7
- useState,
8
- } from 'react';
9
- import type { Config } from 'shared/types';
10
- import { configApi, githubAuthApi } from '../lib/api';
11
-
12
- interface ConfigContextType {
13
- config: Config | null;
14
- updateConfig: (updates: Partial<Config>) => void;
15
- updateAndSaveConfig: (updates: Partial<Config>) => void;
16
- saveConfig: () => Promise<boolean>;
17
- loading: boolean;
18
- githubTokenInvalid: boolean;
19
- }
20
-
21
- const ConfigContext = createContext<ConfigContextType | undefined>(undefined);
22
-
23
- interface ConfigProviderProps {
24
- children: ReactNode;
25
- }
26
-
27
- export function ConfigProvider({ children }: ConfigProviderProps) {
28
- const [config, setConfig] = useState<Config | null>(null);
29
- const [loading, setLoading] = useState(true);
30
- const [githubTokenInvalid, setGithubTokenInvalid] = useState(false);
31
-
32
- useEffect(() => {
33
- const loadConfig = async () => {
34
- try {
35
- const config = await configApi.getConfig();
36
- setConfig(config);
37
- } catch (err) {
38
- console.error('Error loading config:', err);
39
- } finally {
40
- setLoading(false);
41
- }
42
- };
43
-
44
- loadConfig();
45
- }, []);
46
-
47
- // Check GitHub token validity after config loads
48
- useEffect(() => {
49
- if (loading) return;
50
- const checkToken = async () => {
51
- const valid = await githubAuthApi.checkGithubToken();
52
- if (valid === undefined) {
53
- // Network/server error: do not update githubTokenInvalid
54
- return;
55
- }
56
- setGithubTokenInvalid(!valid);
57
- };
58
- checkToken();
59
- }, [loading]);
60
-
61
- const updateConfig = useCallback((updates: Partial<Config>) => {
62
- setConfig((prev) => (prev ? { ...prev, ...updates } : null));
63
- }, []);
64
-
65
- const saveConfig = useCallback(async (): Promise<boolean> => {
66
- if (!config) return false;
67
- try {
68
- await configApi.saveConfig(config);
69
- return true;
70
- } catch (err) {
71
- console.error('Error saving config:', err);
72
- return false;
73
- }
74
- }, [config]);
75
-
76
- const updateAndSaveConfig = useCallback(
77
- async (updates: Partial<Config>) => {
78
- setLoading(true);
79
- const newConfig: Config | null = config
80
- ? { ...config, ...updates }
81
- : null;
82
- try {
83
- if (!newConfig) return false;
84
- const saved = await configApi.saveConfig(newConfig);
85
- setConfig(saved);
86
- return true;
87
- } catch (err) {
88
- console.error('Error saving config:', err);
89
- return false;
90
- } finally {
91
- setLoading(false);
92
- }
93
- },
94
- [config]
95
- );
96
-
97
- return (
98
- <ConfigContext.Provider
99
- value={{
100
- config,
101
- updateConfig,
102
- saveConfig,
103
- loading,
104
- updateAndSaveConfig,
105
- githubTokenInvalid,
106
- }}
107
- >
108
- {children}
109
- </ConfigContext.Provider>
110
- );
111
- }
112
-
113
- export function useConfig() {
114
- const context = useContext(ConfigContext);
115
- if (context === undefined) {
116
- throw new Error('useConfig must be used within a ConfigProvider');
117
- }
118
- return context;
119
- }