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.
- package/README.md +143 -447
- package/dist/linux-x64/automagik-forge-mcp.zip +0 -0
- package/{npx-cli/automagik-forge-0.0.55.tgz → dist/linux-x64/automagik-forge.zip} +0 -0
- package/package.json +13 -23
- package/.cargo/config.toml +0 -13
- package/.claude/commands/commit.md +0 -376
- package/.claude/commands/prompt.md +0 -871
- package/.env.example +0 -20
- package/.github/actions/setup-node/action.yml +0 -29
- package/.github/images/automagik-logo.png +0 -0
- package/.github/workflows/pre-release.yml +0 -470
- package/.github/workflows/publish.yml +0 -145
- package/.github/workflows/test.yml +0 -63
- package/.mcp.json +0 -57
- package/AGENT.md +0 -40
- package/CLAUDE.md +0 -40
- package/CODE-OF-CONDUCT.md +0 -89
- package/Cargo.toml +0 -19
- package/Dockerfile +0 -43
- package/LICENSE +0 -201
- package/Makefile +0 -97
- package/backend/.sqlx/query-01b7e2bac1261d8be3d03c03df3e5220590da6c31c77f161074fc62752d63881.json +0 -12
- package/backend/.sqlx/query-03f2b02ba6dc5ea2b3cf6b1004caea0ad6bcc10ebd63f441d321a389f026e263.json +0 -12
- package/backend/.sqlx/query-0923b77d137a29fc54d399a873ff15fc4af894490bc65a4d344a7575cb0d8643.json +0 -12
- package/backend/.sqlx/query-0f808bcdb63c5f180836e448dd64c435c51758b2fc54a52ce9e67495b1ab200e.json +0 -68
- package/backend/.sqlx/query-1268afe9ca849daa6722e3df7ca8e9e61f0d37052e782bb5452ab8e1018d9b63.json +0 -12
- package/backend/.sqlx/query-1b082630a9622f8667ee7a9aba2c2d3176019a68c6bb83d33008594821415a57.json +0 -12
- package/backend/.sqlx/query-1c7b06ba1e112abf6b945a2ff08a0b40ec23f3738c2e7399f067b558cf8d490e.json +0 -12
- package/backend/.sqlx/query-1f619f01f46859a64ded531dd0ef61abacfe62e758abe7030a6aa745140b95ca.json +0 -104
- package/backend/.sqlx/query-1fca1ce14b4b20205364cd1f1f45ebe1d2e30cd745e59e189d56487b5639dfbb.json +0 -12
- package/backend/.sqlx/query-212828320e8d871ab9d83705a040b23bcf0393dc7252177fc539a74657f578ef.json +0 -32
- package/backend/.sqlx/query-290ce5c152be8d36e58ff42570f9157beb07ab9e77a03ec6fc30b4f56f9b8f6b.json +0 -56
- package/backend/.sqlx/query-2b471d2c2e8ffbe0cd42d2a91b814c0d79f9d09200f147e3cea33ba4ce673c8a.json +0 -68
- package/backend/.sqlx/query-354a48c705bb9bb2048c1b7f10fcb714e23f9db82b7a4ea6932486197b2ede6a.json +0 -92
- package/backend/.sqlx/query-36c9e3dd10648e94b949db5c91a774ecb1e10a899ef95da74066eccedca4d8b2.json +0 -12
- package/backend/.sqlx/query-36e4ba7bbd81b402d5a20b6005755eafbb174c8dda442081823406ac32809a94.json +0 -56
- package/backend/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json +0 -62
- package/backend/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json +0 -62
- package/backend/.sqlx/query-3d6bd16fbce59efe30b7f67ea342e0e4ea6d1432389c02468ad79f1f742d4031.json +0 -56
- package/backend/.sqlx/query-4049ca413b285a05aca6b25385e9c8185575f01e9069e4e8581aa45d713f612f.json +0 -32
- package/backend/.sqlx/query-412bacd3477d86369082e90f52240407abce436cb81292d42b2dbe1e5c18eea1.json +0 -104
- package/backend/.sqlx/query-417a8b1ff4e51de82aea0159a3b97932224dc325b23476cb84153d690227fd8b.json +0 -62
- package/backend/.sqlx/query-461cc1b0bb6fd909afc9dd2246e8526b3771cfbb0b22ae4b5d17b51af587b9e2.json +0 -56
- package/backend/.sqlx/query-58408c7a8cdeeda0bef359f1f9bd91299a339dc2b191462fc58c9736a56d5227.json +0 -92
- package/backend/.sqlx/query-5a886026d75d515c01f347cc203c8d99dd04c61dc468e2e4c5aa548436d13834.json +0 -62
- package/backend/.sqlx/query-5b902137b11022d2e1a5c4f6a9c83fec1a856c6a710aff831abd2382ede76b43.json +0 -12
- package/backend/.sqlx/query-5ed1238e52e59bb5f76c0f153fd99a14093f7ce2585bf9843585608f17ec575b.json +0 -104
- package/backend/.sqlx/query-6e8b860b14decfc2227dc57213f38442943d3fbef5c8418fd6b634c6e0f5e2ea.json +0 -104
- package/backend/.sqlx/query-6ec414276994c4ccb2433eaa5b1b342168557d17ddf5a52dac84cb1b59b9de8f.json +0 -68
- package/backend/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json +0 -62
- package/backend/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json +0 -62
- package/backend/.sqlx/query-75239b2da188f749707d77f3c1544332ca70db3d6d6743b2601dc0d167536437.json +0 -62
- package/backend/.sqlx/query-83d10e29f8478aff33434f9ac67068e013b888b953a2657e2bb72a6f619d04f2.json +0 -50
- package/backend/.sqlx/query-8610803360ea18b9b9d078a6981ea56abfbfe84e6354fc1d5ae4c622e01410ed.json +0 -68
- package/backend/.sqlx/query-86d03eb70eef39c59296416867f2ee66c9f7cd8b7f961fbda2f89fc0a1c442c2.json +0 -12
- package/backend/.sqlx/query-87d0feb5a6b442bad9c60068ea7569599cc6fc91a0e2692ecb42e93b03201b9d.json +0 -68
- package/backend/.sqlx/query-8a67b3b3337248f06a57bdf8a908f7ef23177431eaed82dc08c94c3e5944340e.json +0 -12
- package/backend/.sqlx/query-8f01ebd64bdcde6a090479f14810d73ba23020e76fd70854ac57f2da251702c3.json +0 -12
- package/backend/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json +0 -62
- package/backend/.sqlx/query-92e8bdbcd80c5ff3db7a35cf79492048803ef305cbdef0d0a1fe5dc881ca8c71.json +0 -104
- package/backend/.sqlx/query-93a1605f90e9672dad29b472b6ad85fa9a55ea3ffa5abcb8724b09d61be254ca.json +0 -20
- package/backend/.sqlx/query-9472c8fb477958167f5fae40b85ac44252468c5226b2cdd7770f027332eed6d7.json +0 -104
- package/backend/.sqlx/query-96036c4f9e0f48bdc5a4a4588f0c5f288ac7aaa5425cac40fc33f337e1a351f2.json +0 -56
- package/backend/.sqlx/query-9edb2c01e91fd0f0fe7b56e988c7ae0393150f50be3f419a981e035c0121dfc7.json +0 -104
- package/backend/.sqlx/query-a157cf00616f703bfba21927f1eb1c9eec2a81c02da15f66efdba0b6c375de1b.json +0 -26
- package/backend/.sqlx/query-a31fff84f3b8e532fd1160447d89d700f06ae08821fee00c9a5b60492b05259c.json +0 -62
- package/backend/.sqlx/query-a5ba908419fb3e456bdd2daca41ba06cc3212ffffb8520fc7dbbcc8b60ada314.json +0 -12
- package/backend/.sqlx/query-a6d2961718dbc3b1a925e549f49a159c561bef58c105529275f274b27e2eba5b.json +0 -104
- package/backend/.sqlx/query-a9e93d5b09b29faf66e387e4d7596a792d81e75c4d3726e83c2963e8d7c9b56f.json +0 -104
- package/backend/.sqlx/query-ac5247c8d7fb86e4650c4b0eb9420031614c831b7b085083bac20c1af314c538.json +0 -12
- package/backend/.sqlx/query-afef9467be74c411c4cb119a8b2b1aea53049877dfc30cc60b486134ba4b4c9f.json +0 -68
- package/backend/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json +0 -62
- package/backend/.sqlx/query-c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7.json +0 -20
- package/backend/.sqlx/query-c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b.json +0 -12
- package/backend/.sqlx/query-c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae.json +0 -12
- package/backend/.sqlx/query-d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de.json +0 -12
- package/backend/.sqlx/query-d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2.json +0 -20
- package/backend/.sqlx/query-d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846.json +0 -12
- package/backend/.sqlx/query-ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94.json +0 -12
- package/backend/Cargo.toml +0 -71
- package/backend/build.rs +0 -32
- package/backend/migrations/20250617183714_init.sql +0 -44
- package/backend/migrations/20250620212427_execution_processes.sql +0 -25
- package/backend/migrations/20250620214100_remove_stdout_stderr_from_task_attempts.sql +0 -28
- package/backend/migrations/20250621120000_relate_activities_to_execution_processes.sql +0 -23
- package/backend/migrations/20250623120000_executor_sessions.sql +0 -17
- package/backend/migrations/20250623130000_add_executor_type_to_execution_processes.sql +0 -4
- package/backend/migrations/20250625000000_add_dev_script_to_projects.sql +0 -4
- package/backend/migrations/20250701000000_add_branch_to_task_attempts.sql +0 -2
- package/backend/migrations/20250701000001_add_pr_tracking_to_task_attempts.sql +0 -5
- package/backend/migrations/20250701120000_add_assistant_message_to_executor_sessions.sql +0 -2
- package/backend/migrations/20250708000000_add_base_branch_to_task_attempts.sql +0 -2
- package/backend/migrations/20250709000000_add_worktree_deleted_flag.sql +0 -2
- package/backend/migrations/20250710000000_add_setup_completion.sql +0 -3
- package/backend/migrations/20250715154859_add_task_templates.sql +0 -25
- package/backend/migrations/20250716143725_add_default_templates.sql +0 -174
- package/backend/migrations/20250716161432_update_executor_names_to_kebab_case.sql +0 -20
- package/backend/migrations/20250716170000_add_parent_task_to_tasks.sql +0 -7
- package/backend/migrations/20250717000000_drop_task_attempt_activities.sql +0 -9
- package/backend/migrations/20250719000000_add_cleanup_script_to_projects.sql +0 -2
- package/backend/migrations/20250720000000_add_cleanupscript_to_process_type_constraint.sql +0 -25
- package/backend/migrations/20250723000000_add_wish_to_tasks.sql +0 -7
- package/backend/migrations/20250724000000_remove_unique_wish_constraint.sql +0 -5
- package/backend/scripts/toast-notification.ps1 +0 -23
- package/backend/sounds/abstract-sound1.wav +0 -0
- package/backend/sounds/abstract-sound2.wav +0 -0
- package/backend/sounds/abstract-sound3.wav +0 -0
- package/backend/sounds/abstract-sound4.wav +0 -0
- package/backend/sounds/cow-mooing.wav +0 -0
- package/backend/sounds/phone-vibration.wav +0 -0
- package/backend/sounds/rooster.wav +0 -0
- package/backend/src/app_state.rs +0 -218
- package/backend/src/bin/generate_types.rs +0 -189
- package/backend/src/bin/mcp_task_server.rs +0 -191
- package/backend/src/execution_monitor.rs +0 -1193
- package/backend/src/executor.rs +0 -1053
- package/backend/src/executors/amp.rs +0 -697
- package/backend/src/executors/ccr.rs +0 -91
- package/backend/src/executors/charm_opencode.rs +0 -113
- package/backend/src/executors/claude.rs +0 -887
- package/backend/src/executors/cleanup_script.rs +0 -124
- package/backend/src/executors/dev_server.rs +0 -53
- package/backend/src/executors/echo.rs +0 -79
- package/backend/src/executors/gemini/config.rs +0 -67
- package/backend/src/executors/gemini/streaming.rs +0 -363
- package/backend/src/executors/gemini.rs +0 -765
- package/backend/src/executors/mod.rs +0 -23
- package/backend/src/executors/opencode_ai.rs +0 -113
- package/backend/src/executors/setup_script.rs +0 -130
- package/backend/src/executors/sst_opencode/filter.rs +0 -184
- package/backend/src/executors/sst_opencode/tools.rs +0 -139
- package/backend/src/executors/sst_opencode.rs +0 -756
- package/backend/src/lib.rs +0 -45
- package/backend/src/main.rs +0 -324
- package/backend/src/mcp/mod.rs +0 -1
- package/backend/src/mcp/task_server.rs +0 -850
- package/backend/src/middleware/mod.rs +0 -3
- package/backend/src/middleware/model_loaders.rs +0 -242
- package/backend/src/models/api_response.rs +0 -36
- package/backend/src/models/config.rs +0 -375
- package/backend/src/models/execution_process.rs +0 -430
- package/backend/src/models/executor_session.rs +0 -225
- package/backend/src/models/mod.rs +0 -12
- package/backend/src/models/project.rs +0 -356
- package/backend/src/models/task.rs +0 -345
- package/backend/src/models/task_attempt.rs +0 -1214
- package/backend/src/models/task_template.rs +0 -146
- package/backend/src/openapi.rs +0 -93
- package/backend/src/routes/auth.rs +0 -297
- package/backend/src/routes/config.rs +0 -385
- package/backend/src/routes/filesystem.rs +0 -228
- package/backend/src/routes/health.rs +0 -16
- package/backend/src/routes/mod.rs +0 -9
- package/backend/src/routes/projects.rs +0 -562
- package/backend/src/routes/stream.rs +0 -244
- package/backend/src/routes/task_attempts.rs +0 -1172
- package/backend/src/routes/task_templates.rs +0 -229
- package/backend/src/routes/tasks.rs +0 -353
- package/backend/src/services/analytics.rs +0 -216
- package/backend/src/services/git_service.rs +0 -1321
- package/backend/src/services/github_service.rs +0 -307
- package/backend/src/services/mod.rs +0 -13
- package/backend/src/services/notification_service.rs +0 -263
- package/backend/src/services/pr_monitor.rs +0 -214
- package/backend/src/services/process_service.rs +0 -940
- package/backend/src/utils/path.rs +0 -96
- package/backend/src/utils/shell.rs +0 -19
- package/backend/src/utils/text.rs +0 -24
- package/backend/src/utils/worktree_manager.rs +0 -578
- package/backend/src/utils.rs +0 -125
- package/backend/test.db +0 -0
- package/build-npm-package.sh +0 -61
- package/dev_assets_seed/config.json +0 -19
- package/frontend/.eslintrc.json +0 -25
- package/frontend/.prettierrc.json +0 -8
- package/frontend/components.json +0 -17
- package/frontend/index.html +0 -19
- package/frontend/package-lock.json +0 -7321
- package/frontend/package.json +0 -61
- package/frontend/postcss.config.js +0 -6
- package/frontend/public/android-chrome-192x192.png +0 -0
- package/frontend/public/android-chrome-512x512.png +0 -0
- package/frontend/public/apple-touch-icon.png +0 -0
- package/frontend/public/automagik-forge-logo-dark.svg +0 -3
- package/frontend/public/automagik-forge-logo.svg +0 -3
- package/frontend/public/automagik-forge-screenshot-overview.png +0 -0
- package/frontend/public/favicon-16x16.png +0 -0
- package/frontend/public/favicon-32x32.png +0 -0
- package/frontend/public/favicon.ico +0 -0
- package/frontend/public/site.webmanifest +0 -1
- package/frontend/public/viba-kanban-favicon.png +0 -0
- package/frontend/src/App.tsx +0 -157
- package/frontend/src/components/DisclaimerDialog.tsx +0 -106
- package/frontend/src/components/GitHubLoginDialog.tsx +0 -314
- package/frontend/src/components/OnboardingDialog.tsx +0 -185
- package/frontend/src/components/PrivacyOptInDialog.tsx +0 -130
- package/frontend/src/components/ProvidePatDialog.tsx +0 -98
- package/frontend/src/components/TaskTemplateManager.tsx +0 -336
- package/frontend/src/components/config-provider.tsx +0 -119
- package/frontend/src/components/context/TaskDetailsContextProvider.tsx +0 -470
- package/frontend/src/components/context/taskDetailsContext.ts +0 -125
- package/frontend/src/components/keyboard-shortcuts-demo.tsx +0 -35
- package/frontend/src/components/layout/navbar.tsx +0 -86
- package/frontend/src/components/logo.tsx +0 -44
- package/frontend/src/components/projects/ProjectCard.tsx +0 -155
- package/frontend/src/components/projects/project-detail.tsx +0 -251
- package/frontend/src/components/projects/project-form-fields.tsx +0 -238
- package/frontend/src/components/projects/project-form.tsx +0 -301
- package/frontend/src/components/projects/project-list.tsx +0 -200
- package/frontend/src/components/projects/projects-page.tsx +0 -20
- package/frontend/src/components/tasks/BranchSelector.tsx +0 -169
- package/frontend/src/components/tasks/DeleteFileConfirmationDialog.tsx +0 -94
- package/frontend/src/components/tasks/EditorSelectionDialog.tsx +0 -119
- package/frontend/src/components/tasks/TaskCard.tsx +0 -154
- package/frontend/src/components/tasks/TaskDetails/CollapsibleToolbar.tsx +0 -33
- package/frontend/src/components/tasks/TaskDetails/DiffCard.tsx +0 -109
- package/frontend/src/components/tasks/TaskDetails/DiffChunkSection.tsx +0 -135
- package/frontend/src/components/tasks/TaskDetails/DiffFile.tsx +0 -296
- package/frontend/src/components/tasks/TaskDetails/DiffTab.tsx +0 -32
- package/frontend/src/components/tasks/TaskDetails/DisplayConversationEntry.tsx +0 -392
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Conversation.tsx +0 -256
- package/frontend/src/components/tasks/TaskDetails/LogsTab/ConversationEntry.tsx +0 -56
- package/frontend/src/components/tasks/TaskDetails/LogsTab/NormalizedConversationViewer.tsx +0 -92
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Prompt.tsx +0 -22
- package/frontend/src/components/tasks/TaskDetails/LogsTab/SetupScriptRunning.tsx +0 -49
- package/frontend/src/components/tasks/TaskDetails/LogsTab.tsx +0 -186
- package/frontend/src/components/tasks/TaskDetails/ProcessesTab.tsx +0 -288
- package/frontend/src/components/tasks/TaskDetails/RelatedTasksTab.tsx +0 -216
- package/frontend/src/components/tasks/TaskDetails/TabNavigation.tsx +0 -93
- package/frontend/src/components/tasks/TaskDetailsHeader.tsx +0 -169
- package/frontend/src/components/tasks/TaskDetailsPanel.tsx +0 -126
- package/frontend/src/components/tasks/TaskDetailsToolbar.tsx +0 -302
- package/frontend/src/components/tasks/TaskFollowUpSection.tsx +0 -130
- package/frontend/src/components/tasks/TaskFormDialog.tsx +0 -400
- package/frontend/src/components/tasks/TaskKanbanBoard.tsx +0 -180
- package/frontend/src/components/tasks/Toolbar/CreateAttempt.tsx +0 -259
- package/frontend/src/components/tasks/Toolbar/CreatePRDialog.tsx +0 -243
- package/frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx +0 -899
- package/frontend/src/components/tasks/index.ts +0 -2
- package/frontend/src/components/theme-provider.tsx +0 -82
- package/frontend/src/components/theme-toggle.tsx +0 -36
- package/frontend/src/components/ui/alert.tsx +0 -59
- package/frontend/src/components/ui/auto-expanding-textarea.tsx +0 -70
- package/frontend/src/components/ui/badge.tsx +0 -36
- package/frontend/src/components/ui/button.tsx +0 -56
- package/frontend/src/components/ui/card.tsx +0 -86
- package/frontend/src/components/ui/checkbox.tsx +0 -44
- package/frontend/src/components/ui/chip.tsx +0 -25
- package/frontend/src/components/ui/dialog.tsx +0 -124
- package/frontend/src/components/ui/dropdown-menu.tsx +0 -198
- package/frontend/src/components/ui/file-search-textarea.tsx +0 -292
- package/frontend/src/components/ui/folder-picker.tsx +0 -279
- package/frontend/src/components/ui/input.tsx +0 -25
- package/frontend/src/components/ui/label.tsx +0 -24
- package/frontend/src/components/ui/loader.tsx +0 -26
- package/frontend/src/components/ui/markdown-renderer.tsx +0 -75
- package/frontend/src/components/ui/select.tsx +0 -160
- package/frontend/src/components/ui/separator.tsx +0 -31
- package/frontend/src/components/ui/shadcn-io/kanban/index.tsx +0 -185
- package/frontend/src/components/ui/table.tsx +0 -117
- package/frontend/src/components/ui/tabs.tsx +0 -53
- package/frontend/src/components/ui/textarea.tsx +0 -22
- package/frontend/src/components/ui/tooltip.tsx +0 -28
- package/frontend/src/hooks/useNormalizedConversation.ts +0 -440
- package/frontend/src/index.css +0 -225
- package/frontend/src/lib/api.ts +0 -630
- package/frontend/src/lib/keyboard-shortcuts.ts +0 -266
- package/frontend/src/lib/responsive-config.ts +0 -70
- package/frontend/src/lib/types.ts +0 -39
- package/frontend/src/lib/utils.ts +0 -10
- package/frontend/src/main.tsx +0 -50
- package/frontend/src/pages/McpServers.tsx +0 -418
- package/frontend/src/pages/Settings.tsx +0 -610
- package/frontend/src/pages/project-tasks.tsx +0 -575
- package/frontend/src/pages/projects.tsx +0 -18
- package/frontend/src/vite-env.d.ts +0 -1
- package/frontend/tailwind.config.js +0 -125
- package/frontend/tsconfig.json +0 -26
- package/frontend/tsconfig.node.json +0 -10
- package/frontend/vite.config.ts +0 -33
- package/npx-cli/README.md +0 -159
- package/npx-cli/automagik-forge-0.1.0.tgz +0 -0
- package/npx-cli/automagik-forge-0.1.10.tgz +0 -0
- package/npx-cli/package.json +0 -17
- package/npx-cli/vibe-kanban-0.0.55.tgz +0 -0
- package/pnpm-workspace.yaml +0 -2
- package/rust-toolchain.toml +0 -11
- package/rustfmt.toml +0 -3
- package/scripts/load-env.js +0 -43
- package/scripts/mcp_test.js +0 -374
- package/scripts/prepare-db.js +0 -45
- package/scripts/setup-dev-environment.js +0 -274
- package/scripts/start-mcp-sse.js +0 -70
- package/scripts/test-debug.js +0 -32
- package/scripts/test-mcp-sse.js +0 -138
- package/scripts/test-simple.js +0 -44
- package/scripts/test-wish-final.js +0 -179
- package/scripts/test-wish-system.js +0 -221
- package/shared/types.ts +0 -182
- package/test-npm-package.sh +0 -42
- /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;
|
package/frontend/src/index.css
DELETED
@@ -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
|
-
}
|