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,440 +0,0 @@
1
- import {
2
- TaskAttemptDataContext,
3
- TaskDetailsContext,
4
- } from '@/components/context/taskDetailsContext';
5
- import { fetchEventSource } from '@microsoft/fetch-event-source';
6
- import { applyPatch } from 'fast-json-patch';
7
- import {
8
- useCallback,
9
- useContext,
10
- useEffect,
11
- useMemo,
12
- useRef,
13
- useState,
14
- } from 'react';
15
- import {
16
- ExecutionProcess,
17
- NormalizedConversation,
18
- NormalizedEntry,
19
- } from 'shared/types';
20
-
21
- const useNormalizedConversation = ({
22
- executionProcess,
23
- onConversationUpdate,
24
- onDisplayEntriesChange,
25
- visibleEntriesNum,
26
- }: {
27
- executionProcess?: ExecutionProcess;
28
- onConversationUpdate?: () => void;
29
- onDisplayEntriesChange?: (num: number) => void;
30
- visibleEntriesNum?: number;
31
- }) => {
32
- const { projectId } = useContext(TaskDetailsContext);
33
- const { attemptData } = useContext(TaskAttemptDataContext);
34
-
35
- // Development-only logging helper
36
- const debugLog = useCallback((message: string, ...args: any[]) => {
37
- if (import.meta.env.DEV) {
38
- console.log(message, ...args);
39
- }
40
- }, []);
41
-
42
- const [conversation, setConversation] =
43
- useState<NormalizedConversation | null>(null);
44
- const [loading, setLoading] = useState(true);
45
- const [error, setError] = useState<string | null>(null);
46
-
47
- // Track fetched processes to prevent redundant database calls
48
- const fetchedProcesses = useRef(new Set<string>());
49
-
50
- // SSE Connection Manager - production-ready with reconnection and resilience
51
- const sseManagerRef = useRef<{
52
- abortController: AbortController | null;
53
- isActive: boolean;
54
- highestBatchId: number;
55
- reconnectAttempts: number;
56
- reconnectTimeout: number | null;
57
- processId: string;
58
- processStatus: string;
59
- patchFailureCount: number;
60
- onopenCalled: boolean;
61
- }>({
62
- abortController: null,
63
- isActive: false,
64
- highestBatchId: 0,
65
- reconnectAttempts: 0,
66
- reconnectTimeout: null,
67
- processId: executionProcess?.id || '',
68
- processStatus: executionProcess?.status || '',
69
- patchFailureCount: 0,
70
- onopenCalled: false,
71
- });
72
-
73
- // SSE Connection Manager with Production-Ready Resilience using fetch-event-source
74
- const createSSEConnection = useCallback(
75
- (processId: string, projectId: string): AbortController => {
76
- const manager = sseManagerRef.current;
77
- // Build URL with resume cursor if we have processed batches
78
- const baseUrl = `/api/projects/${projectId}/execution-processes/${processId}/normalized-logs/stream`;
79
- const url =
80
- manager.highestBatchId > 0
81
- ? `${baseUrl}?since_batch_id=${manager.highestBatchId}`
82
- : baseUrl;
83
- debugLog(
84
- `🚀 SSE: Creating connection for process ${processId} (cursor: ${manager.highestBatchId})`
85
- );
86
-
87
- const abortController = new AbortController();
88
-
89
- fetchEventSource(url, {
90
- signal: abortController.signal,
91
- onopen: async (response) => {
92
- const manager = sseManagerRef.current;
93
- if (manager.onopenCalled) {
94
- // This is a "phantom" reconnect, so abort and re-create
95
- debugLog(
96
- '⚠️ SSE: onopen called again for same connection, forcing reconnect'
97
- );
98
- abortController.abort();
99
- manager.abortController = null;
100
- manager.isActive = false;
101
- manager.onopenCalled = false;
102
- // Re-establish with latest cursor
103
- scheduleReconnect(processId, projectId);
104
- return;
105
- }
106
- manager.onopenCalled = true;
107
- if (response.ok) {
108
- debugLog(`✅ SSE: Connected to ${processId}`);
109
- manager.isActive = true;
110
- manager.reconnectAttempts = 0; // Reset on successful connection
111
- manager.patchFailureCount = 0; // Reset patch failure count
112
-
113
- if (manager.reconnectTimeout) {
114
- clearTimeout(manager.reconnectTimeout);
115
- manager.reconnectTimeout = null;
116
- }
117
- } else {
118
- throw new Error(`SSE connection failed: ${response.status}`);
119
- }
120
- },
121
- onmessage: (event) => {
122
- if (event.event === 'patch') {
123
- try {
124
- const batchData = JSON.parse(event.data);
125
- const { batch_id, patches } = batchData;
126
-
127
- // Skip duplicates - use manager's batch tracking
128
- if (batch_id && batch_id <= manager.highestBatchId) {
129
- debugLog(
130
- `⏭️ SSE: Skipping duplicate batch_id=${batch_id} (current=${manager.highestBatchId})`
131
- );
132
- return;
133
- }
134
-
135
- // Update cursor BEFORE processing
136
- if (batch_id) {
137
- manager.highestBatchId = batch_id;
138
- debugLog(`📍 SSE: Processing batch_id=${batch_id}`);
139
- }
140
-
141
- setConversation((prev) => {
142
- // Create empty conversation if none exists
143
- const baseConversation = prev || {
144
- entries: [],
145
- session_id: null,
146
- executor_type: 'unknown',
147
- prompt: null,
148
- summary: null,
149
- };
150
-
151
- try {
152
- const updated = applyPatch(
153
- JSON.parse(JSON.stringify(baseConversation)),
154
- patches
155
- ).newDocument as NormalizedConversation;
156
-
157
- updated.entries = updated.entries.filter(Boolean);
158
-
159
- debugLog(
160
- `🔧 SSE: Applied batch_id=${batch_id}, entries: ${updated.entries.length}`
161
- );
162
-
163
- // Reset patch failure count on successful application
164
- manager.patchFailureCount = 0;
165
-
166
- // Clear loading state on first successful patch
167
- if (!prev) {
168
- setLoading(false);
169
- setError(null);
170
- }
171
-
172
- if (onConversationUpdate) {
173
- setTimeout(onConversationUpdate, 0);
174
- }
175
-
176
- return updated;
177
- } catch (patchError) {
178
- console.warn('❌ SSE: Patch failed:', patchError);
179
- // Reset cursor on failure for potential retry
180
- if (batch_id && batch_id > 0) {
181
- manager.highestBatchId = batch_id - 1;
182
- }
183
- // Track patch failures for monitoring
184
- manager.patchFailureCount++;
185
- debugLog(
186
- `⚠️ SSE: Patch failure #${manager.patchFailureCount} for batch_id=${batch_id}`
187
- );
188
- return prev || baseConversation;
189
- }
190
- });
191
- } catch (e) {
192
- console.warn('❌ SSE: Parse failed:', e);
193
- }
194
- }
195
- },
196
- onerror: (err) => {
197
- console.warn(`🔌 SSE: Connection error for ${processId}:`, err);
198
- manager.isActive = false;
199
-
200
- // Only attempt reconnection if process is still running
201
- if (manager.processStatus === 'running') {
202
- scheduleReconnect(processId, projectId);
203
- }
204
- },
205
- onclose: () => {
206
- debugLog(`🔌 SSE: Connection closed for ${processId}`);
207
- manager.isActive = false;
208
- },
209
- }).catch((error) => {
210
- if (error.name !== 'AbortError') {
211
- console.warn(`❌ SSE: Fetch error for ${processId}:`, error);
212
- manager.isActive = false;
213
-
214
- // Only attempt reconnection if process is still running
215
- if (manager.processStatus === 'running') {
216
- scheduleReconnect(processId, projectId);
217
- }
218
- }
219
- });
220
-
221
- return abortController;
222
- },
223
- [onConversationUpdate, debugLog]
224
- );
225
-
226
- const scheduleReconnect = useCallback(
227
- (processId: string, projectId: string) => {
228
- const manager = sseManagerRef.current;
229
-
230
- // Clear any existing reconnection timeout
231
- if (manager.reconnectTimeout) {
232
- clearTimeout(manager.reconnectTimeout);
233
- }
234
-
235
- // Exponential backoff: 1s, 2s, 4s, 8s, max 30s
236
- const delay = Math.min(
237
- 1000 * Math.pow(2, manager.reconnectAttempts),
238
- 30000
239
- );
240
- manager.reconnectAttempts++;
241
-
242
- debugLog(
243
- `🔄 SSE: Scheduling reconnect attempt ${manager.reconnectAttempts} in ${delay}ms`
244
- );
245
-
246
- manager.reconnectTimeout = window.setTimeout(() => {
247
- if (manager.processStatus === 'running') {
248
- debugLog(`🔄 SSE: Attempting reconnect for ${processId}`);
249
- establishSSEConnection(processId, projectId);
250
- }
251
- }, delay);
252
- },
253
- [debugLog]
254
- );
255
-
256
- const establishSSEConnection = useCallback(
257
- (processId: string, projectId: string) => {
258
- const manager = sseManagerRef.current;
259
-
260
- // Close existing connection if any
261
- if (manager.abortController) {
262
- manager.abortController.abort();
263
- manager.abortController = null;
264
- manager.isActive = false;
265
- }
266
-
267
- const abortController = createSSEConnection(processId, projectId);
268
- manager.abortController = abortController;
269
-
270
- return abortController;
271
- },
272
- [createSSEConnection]
273
- );
274
-
275
- // Helper functions for SSE manager
276
- const setProcessId = (id: string) => {
277
- sseManagerRef.current.processId = id;
278
- };
279
- const setProcessStatus = (status: string) => {
280
- sseManagerRef.current.processStatus = status;
281
- };
282
-
283
- // Consolidated cleanup function to avoid duplication
284
- const cleanupSSEConnection = useCallback(() => {
285
- const manager = sseManagerRef.current;
286
-
287
- if (manager.abortController) {
288
- manager.abortController.abort();
289
- manager.abortController = null;
290
- manager.isActive = false;
291
- }
292
-
293
- if (manager.reconnectTimeout) {
294
- clearTimeout(manager.reconnectTimeout);
295
- manager.reconnectTimeout = null;
296
- }
297
- manager.onopenCalled = false;
298
- }, []);
299
-
300
- // Process-based data fetching - fetch once from appropriate source
301
- useEffect(() => {
302
- if (!executionProcess?.id || !executionProcess?.status) {
303
- return;
304
- }
305
- const processId = executionProcess.id;
306
- const processStatus = executionProcess.status;
307
-
308
- debugLog(`🎯 Data: Process ${processId} is ${processStatus}`);
309
-
310
- // Reset conversation state when switching processes
311
- const manager = sseManagerRef.current;
312
- if (manager.processId !== processId) {
313
- setConversation(null);
314
- setLoading(true);
315
- setError(null);
316
-
317
- // Clear fetch tracking for old processes (keep memory bounded)
318
- if (fetchedProcesses.current.size > 10) {
319
- fetchedProcesses.current.clear();
320
- }
321
- }
322
-
323
- if (processStatus === 'running') {
324
- // Running processes: SSE will handle data (including initial state)
325
- debugLog(`🚀 Data: Using SSE for running process ${processId}`);
326
- // SSE connection will be established by the SSE management effect
327
- } else {
328
- // Completed processes: Single database fetch
329
- debugLog(`📋 Data: Using database for completed process ${processId}`);
330
- const logs = attemptData.allLogs.find(
331
- (entry) => entry.id === executionProcess.id
332
- )?.normalized_conversation;
333
- if (logs) {
334
- setConversation((prev) => {
335
- // Only update if content actually changed - use lightweight comparison
336
- if (
337
- !prev ||
338
- prev.entries.length !== logs.entries.length ||
339
- prev.prompt !== logs.prompt
340
- ) {
341
- // Notify parent component of conversation update
342
- if (onConversationUpdate) {
343
- // Use setTimeout to ensure state update happens first
344
- setTimeout(onConversationUpdate, 0);
345
- }
346
- return logs;
347
- }
348
- return prev;
349
- });
350
- }
351
- setLoading(false);
352
- }
353
- }, [
354
- executionProcess?.id,
355
- executionProcess?.status,
356
- attemptData.allLogs,
357
- debugLog,
358
- onConversationUpdate,
359
- ]);
360
-
361
- // SSE connection management for running processes only
362
- useEffect(() => {
363
- if (!executionProcess?.id || !executionProcess?.status) {
364
- return;
365
- }
366
- const processId = executionProcess.id;
367
- const processStatus = executionProcess.status;
368
- const manager = sseManagerRef.current;
369
-
370
- // Update manager state
371
- setProcessId(processId);
372
- setProcessStatus(processStatus);
373
-
374
- // Only establish SSE for running processes
375
- if (processStatus !== 'running') {
376
- debugLog(
377
- `🚫 SSE: Process ${processStatus}, cleaning up any existing connection`
378
- );
379
- cleanupSSEConnection();
380
- return;
381
- }
382
-
383
- // Check if connection already exists for same process ID
384
- if (manager.abortController && manager.processId === processId) {
385
- debugLog(`⚠️ SSE: Connection already exists for ${processId}, reusing`);
386
- return;
387
- }
388
-
389
- // Process changed - close existing and reset state
390
- if (manager.abortController && manager.processId !== processId) {
391
- debugLog(`🔄 SSE: Switching from ${manager.processId} to ${processId}`);
392
- cleanupSSEConnection();
393
- manager.highestBatchId = 0; // Reset cursor for new process
394
- manager.reconnectAttempts = 0;
395
- manager.patchFailureCount = 0; // Reset failure count for new process
396
- }
397
-
398
- // Update manager state
399
- manager.processId = processId;
400
- manager.processStatus = processStatus;
401
-
402
- // Establish new connection
403
- establishSSEConnection(processId, projectId);
404
-
405
- return () => {
406
- debugLog(`🔌 SSE: Cleanup connection for ${processId}`);
407
-
408
- // Close connection if it belongs to this effect
409
- if (manager.abortController && manager.processId === processId) {
410
- cleanupSSEConnection();
411
- }
412
- };
413
- }, [executionProcess?.id, executionProcess?.status]);
414
-
415
- // Memoize display entries to avoid unnecessary re-renders
416
- const displayEntries = useMemo(() => {
417
- if (!conversation?.entries) return [];
418
-
419
- // Filter out any null entries that may have been created by duplicate patch application
420
- const displayEntries = conversation.entries.filter(
421
- (entry): entry is NormalizedEntry =>
422
- Boolean(entry && (entry as NormalizedEntry).entry_type)
423
- );
424
- onDisplayEntriesChange?.(displayEntries.length);
425
- if (visibleEntriesNum && displayEntries.length > visibleEntriesNum) {
426
- return displayEntries.slice(-visibleEntriesNum);
427
- }
428
-
429
- return displayEntries;
430
- }, [conversation?.entries, onDisplayEntriesChange, visibleEntriesNum]);
431
-
432
- return {
433
- displayEntries,
434
- conversation,
435
- loading,
436
- error,
437
- };
438
- };
439
-
440
- export default useNormalizedConversation;
@@ -1,225 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @layer base {
6
- :root {
7
- --background: 0 0% 100%;
8
- --foreground: 222.2 84% 4.9%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 222.2 84% 4.9%;
11
- --popover: 0 0% 100%;
12
- --popover-foreground: 222.2 84% 4.9%;
13
- --primary: 222.2 47.4% 11.2%;
14
- --primary-foreground: 210 40% 98%;
15
- --secondary: 210 40% 96%;
16
- --secondary-foreground: 222.2 84% 4.9%;
17
- --muted: 210 40% 96%;
18
- --muted-foreground: 215.4 16.3% 46.9%;
19
- --accent: 210 40% 96%;
20
- --accent-foreground: 222.2 84% 4.9%;
21
- --destructive: 0 84.2% 60.2%;
22
- --destructive-foreground: 210 40% 98%;
23
- --border: 214.3 31.8% 91.4%;
24
- --input: 214.3 31.8% 91.4%;
25
- --ring: 222.2 84% 4.9%;
26
- --radius: 0.5rem;
27
-
28
- /* Status colors */
29
- --success: 142.1 76.2% 36.3%;
30
- --success-foreground: 138.5 76.5% 96.7%;
31
- --warning: 32.2 95% 44.1%;
32
- --warning-foreground: 26 83.3% 14.1%;
33
- --info: 217.2 91.2% 59.8%;
34
- --info-foreground: 222.2 84% 4.9%;
35
- --neutral: 210 40% 96%;
36
- --neutral-foreground: 222.2 84% 4.9%;
37
-
38
- /* Status indicator colors */
39
- --status-init: 210 40% 96%;
40
- --status-init-foreground: 222.2 84% 4.9%;
41
- --status-running: 217.2 91.2% 59.8%;
42
- --status-running-foreground: 222.2 84% 4.9%;
43
- --status-complete: 142.1 76.2% 36.3%;
44
- --status-complete-foreground: 138.5 76.5% 96.7%;
45
- --status-failed: 0 84.2% 60.2%;
46
- --status-failed-foreground: 210 40% 98%;
47
- --status-paused: 32.2 95% 44.1%;
48
- --status-paused-foreground: 26 83.3% 14.1%;
49
-
50
- /* Console/terminal colors */
51
- --console-background: 222.2 84% 4.9%;
52
- --console-foreground: 210 40% 98%;
53
- --console-success: 138.5 76.5% 47.7%;
54
- --console-error: 0 84.2% 60.2%;
55
- }
56
-
57
- .purple {
58
- --background: 266 100% 6%;
59
- --foreground: 266 20% 95%;
60
- --card: 266 100% 6%;
61
- --card-foreground: 266 20% 95%;
62
- --popover: 266 100% 6%;
63
- --popover-foreground: 266 20% 95%;
64
- --primary: 266 80% 75%;
65
- --primary-foreground: 266 100% 6%;
66
- --secondary: 266 20% 15%;
67
- --secondary-foreground: 266 20% 95%;
68
- --muted: 266 20% 15%;
69
- --muted-foreground: 266 15% 65%;
70
- --accent: 266 20% 15%;
71
- --accent-foreground: 266 20% 95%;
72
- --destructive: 0 62.8% 30.6%;
73
- --destructive-foreground: 266 20% 95%;
74
- --border: 266 20% 15%;
75
- --input: 266 20% 15%;
76
- --ring: 266 80% 75%;
77
- }
78
-
79
- .green {
80
- --background: 120 100% 6%;
81
- --foreground: 120 20% 95%;
82
- --card: 120 100% 6%;
83
- --card-foreground: 120 20% 95%;
84
- --popover: 120 100% 6%;
85
- --popover-foreground: 120 20% 95%;
86
- --primary: 120 80% 75%;
87
- --primary-foreground: 120 100% 6%;
88
- --secondary: 120 20% 15%;
89
- --secondary-foreground: 120 20% 95%;
90
- --muted: 120 20% 15%;
91
- --muted-foreground: 120 15% 65%;
92
- --accent: 120 20% 15%;
93
- --accent-foreground: 120 20% 95%;
94
- --destructive: 0 62.8% 30.6%;
95
- --destructive-foreground: 120 20% 95%;
96
- --border: 120 20% 15%;
97
- --input: 120 20% 15%;
98
- --ring: 120 80% 75%;
99
- }
100
-
101
- .blue {
102
- --background: 210 100% 6%;
103
- --foreground: 210 20% 95%;
104
- --card: 210 100% 6%;
105
- --card-foreground: 210 20% 95%;
106
- --popover: 210 100% 6%;
107
- --popover-foreground: 210 20% 95%;
108
- --primary: 210 80% 75%;
109
- --primary-foreground: 210 100% 6%;
110
- --secondary: 210 20% 15%;
111
- --secondary-foreground: 210 20% 95%;
112
- --muted: 210 20% 15%;
113
- --muted-foreground: 210 15% 65%;
114
- --accent: 210 20% 15%;
115
- --accent-foreground: 210 20% 95%;
116
- --destructive: 0 62.8% 30.6%;
117
- --destructive-foreground: 210 20% 95%;
118
- --border: 210 20% 15%;
119
- --input: 210 20% 15%;
120
- --ring: 210 80% 75%;
121
- }
122
-
123
- .orange {
124
- --background: 30 100% 6%;
125
- --foreground: 30 20% 95%;
126
- --card: 30 100% 6%;
127
- --card-foreground: 30 20% 95%;
128
- --popover: 30 100% 6%;
129
- --popover-foreground: 30 20% 95%;
130
- --primary: 30 80% 75%;
131
- --primary-foreground: 30 100% 6%;
132
- --secondary: 30 20% 15%;
133
- --secondary-foreground: 30 20% 95%;
134
- --muted: 30 20% 15%;
135
- --muted-foreground: 30 15% 65%;
136
- --accent: 30 20% 15%;
137
- --accent-foreground: 30 20% 95%;
138
- --destructive: 0 62.8% 30.6%;
139
- --destructive-foreground: 30 20% 95%;
140
- --border: 30 20% 15%;
141
- --input: 30 20% 15%;
142
- --ring: 30 80% 75%;
143
- }
144
-
145
- .red {
146
- --background: 0 100% 6%;
147
- --foreground: 0 20% 95%;
148
- --card: 0 100% 6%;
149
- --card-foreground: 0 20% 95%;
150
- --popover: 0 100% 6%;
151
- --popover-foreground: 0 20% 95%;
152
- --primary: 0 80% 75%;
153
- --primary-foreground: 0 100% 6%;
154
- --secondary: 0 20% 15%;
155
- --secondary-foreground: 0 20% 95%;
156
- --muted: 0 20% 15%;
157
- --muted-foreground: 0 15% 65%;
158
- --accent: 0 20% 15%;
159
- --accent-foreground: 0 20% 95%;
160
- --destructive: 0 62.8% 30.6%;
161
- --destructive-foreground: 0 20% 95%;
162
- --border: 0 20% 15%;
163
- --input: 0 20% 15%;
164
- --ring: 0 80% 75%;
165
- }
166
-
167
- .dark {
168
- --background: 222.2 84% 4.9%;
169
- --foreground: 210 40% 98%;
170
- --card: 222.2 84% 4.9%;
171
- --card-foreground: 210 40% 98%;
172
- --popover: 222.2 84% 4.9%;
173
- --popover-foreground: 210 40% 98%;
174
- --primary: 210 40% 98%;
175
- --primary-foreground: 222.2 47.4% 11.2%;
176
- --secondary: 217.2 32.6% 17.5%;
177
- --secondary-foreground: 210 40% 98%;
178
- --muted: 217.2 32.6% 17.5%;
179
- --muted-foreground: 215 20.2% 65.1%;
180
- --accent: 217.2 32.6% 17.5%;
181
- --accent-foreground: 210 40% 98%;
182
- --destructive: 0 62.8% 30.6%;
183
- --destructive-foreground: 210 40% 98%;
184
- --border: 217.2 32.6% 17.5%;
185
- --input: 217.2 32.6% 17.5%;
186
- --ring: 212.7 26.8% 83.9%;
187
-
188
- /* Status colors */
189
- --success: 138.5 76.5% 47.7%;
190
- --success-foreground: 138.5 76.5% 96.7%;
191
- --warning: 32.2 95% 44.1%;
192
- --warning-foreground: 26 83.3% 14.1%;
193
- --info: 217.2 91.2% 59.8%;
194
- --info-foreground: 222.2 84% 4.9%;
195
- --neutral: 217.2 32.6% 17.5%;
196
- --neutral-foreground: 210 40% 98%;
197
-
198
- /* Status indicator colors */
199
- --status-init: 217.2 32.6% 17.5%;
200
- --status-init-foreground: 210 40% 98%;
201
- --status-running: 217.2 91.2% 59.8%;
202
- --status-running-foreground: 222.2 84% 4.9%;
203
- --status-complete: 138.5 76.5% 47.7%;
204
- --status-complete-foreground: 138.5 76.5% 96.7%;
205
- --status-failed: 0 62.8% 30.6%;
206
- --status-failed-foreground: 210 40% 98%;
207
- --status-paused: 32.2 95% 44.1%;
208
- --status-paused-foreground: 26 83.3% 14.1%;
209
-
210
- /* Console/terminal colors */
211
- --console-background: 0 0% 0%;
212
- --console-foreground: 138.5 76.5% 47.7%;
213
- --console-success: 138.5 76.5% 47.7%;
214
- --console-error: 0 84.2% 60.2%;
215
- }
216
- }
217
-
218
- @layer base {
219
- * {
220
- @apply border-border;
221
- }
222
- body {
223
- @apply bg-background text-foreground;
224
- }
225
- }