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