automagik-forge 0.1.11 β 0.1.13
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/.cargo/config.toml +13 -0
- package/.claude/commands/commit.md +376 -0
- package/.claude/commands/prompt.md +871 -0
- package/.env.example +20 -0
- package/.github/actions/setup-node/action.yml +29 -0
- package/.github/images/automagik-logo.png +0 -0
- package/.github/workflows/pre-release.yml +470 -0
- package/.github/workflows/publish.yml +145 -0
- package/.github/workflows/test.yml +63 -0
- package/.mcp.json +57 -0
- package/AGENT.md +40 -0
- package/CLAUDE.md +40 -0
- package/CODE-OF-CONDUCT.md +89 -0
- package/Cargo.toml +19 -0
- package/Dockerfile +43 -0
- package/LICENSE +201 -0
- package/Makefile +97 -0
- package/README.md +447 -143
- package/backend/.sqlx/query-01b7e2bac1261d8be3d03c03df3e5220590da6c31c77f161074fc62752d63881.json +12 -0
- package/backend/.sqlx/query-03f2b02ba6dc5ea2b3cf6b1004caea0ad6bcc10ebd63f441d321a389f026e263.json +12 -0
- package/backend/.sqlx/query-0923b77d137a29fc54d399a873ff15fc4af894490bc65a4d344a7575cb0d8643.json +12 -0
- package/backend/.sqlx/query-0f808bcdb63c5f180836e448dd64c435c51758b2fc54a52ce9e67495b1ab200e.json +68 -0
- package/backend/.sqlx/query-1268afe9ca849daa6722e3df7ca8e9e61f0d37052e782bb5452ab8e1018d9b63.json +12 -0
- package/backend/.sqlx/query-1b082630a9622f8667ee7a9aba2c2d3176019a68c6bb83d33008594821415a57.json +12 -0
- package/backend/.sqlx/query-1c7b06ba1e112abf6b945a2ff08a0b40ec23f3738c2e7399f067b558cf8d490e.json +12 -0
- package/backend/.sqlx/query-1f619f01f46859a64ded531dd0ef61abacfe62e758abe7030a6aa745140b95ca.json +104 -0
- package/backend/.sqlx/query-1fca1ce14b4b20205364cd1f1f45ebe1d2e30cd745e59e189d56487b5639dfbb.json +12 -0
- package/backend/.sqlx/query-212828320e8d871ab9d83705a040b23bcf0393dc7252177fc539a74657f578ef.json +32 -0
- package/backend/.sqlx/query-290ce5c152be8d36e58ff42570f9157beb07ab9e77a03ec6fc30b4f56f9b8f6b.json +56 -0
- package/backend/.sqlx/query-2b471d2c2e8ffbe0cd42d2a91b814c0d79f9d09200f147e3cea33ba4ce673c8a.json +68 -0
- package/backend/.sqlx/query-354a48c705bb9bb2048c1b7f10fcb714e23f9db82b7a4ea6932486197b2ede6a.json +92 -0
- package/backend/.sqlx/query-36c9e3dd10648e94b949db5c91a774ecb1e10a899ef95da74066eccedca4d8b2.json +12 -0
- package/backend/.sqlx/query-36e4ba7bbd81b402d5a20b6005755eafbb174c8dda442081823406ac32809a94.json +56 -0
- package/backend/.sqlx/query-3a5b3c98a55ca183ab20c74708e3d7e579dda37972c059e7515c4ceee4bd8dd3.json +62 -0
- package/backend/.sqlx/query-3d0a1cabf2a52e9d90cdfd29c509ca89aeb448d0c1d2446c65cd43db40735e86.json +62 -0
- package/backend/.sqlx/query-3d6bd16fbce59efe30b7f67ea342e0e4ea6d1432389c02468ad79f1f742d4031.json +56 -0
- package/backend/.sqlx/query-4049ca413b285a05aca6b25385e9c8185575f01e9069e4e8581aa45d713f612f.json +32 -0
- package/backend/.sqlx/query-412bacd3477d86369082e90f52240407abce436cb81292d42b2dbe1e5c18eea1.json +104 -0
- package/backend/.sqlx/query-417a8b1ff4e51de82aea0159a3b97932224dc325b23476cb84153d690227fd8b.json +62 -0
- package/backend/.sqlx/query-461cc1b0bb6fd909afc9dd2246e8526b3771cfbb0b22ae4b5d17b51af587b9e2.json +56 -0
- package/backend/.sqlx/query-58408c7a8cdeeda0bef359f1f9bd91299a339dc2b191462fc58c9736a56d5227.json +92 -0
- package/backend/.sqlx/query-5a886026d75d515c01f347cc203c8d99dd04c61dc468e2e4c5aa548436d13834.json +62 -0
- package/backend/.sqlx/query-5b902137b11022d2e1a5c4f6a9c83fec1a856c6a710aff831abd2382ede76b43.json +12 -0
- package/backend/.sqlx/query-5ed1238e52e59bb5f76c0f153fd99a14093f7ce2585bf9843585608f17ec575b.json +104 -0
- package/backend/.sqlx/query-6e8b860b14decfc2227dc57213f38442943d3fbef5c8418fd6b634c6e0f5e2ea.json +104 -0
- package/backend/.sqlx/query-6ec414276994c4ccb2433eaa5b1b342168557d17ddf5a52dac84cb1b59b9de8f.json +68 -0
- package/backend/.sqlx/query-6ecfa16d0cf825aacf233544b5baf151e9adfdca26c226ad71020d291fd802d5.json +62 -0
- package/backend/.sqlx/query-72509d252c39fce77520aa816cb2acbc1fb35dc2605e7be893610599b2427f2e.json +62 -0
- package/backend/.sqlx/query-75239b2da188f749707d77f3c1544332ca70db3d6d6743b2601dc0d167536437.json +62 -0
- package/backend/.sqlx/query-83d10e29f8478aff33434f9ac67068e013b888b953a2657e2bb72a6f619d04f2.json +50 -0
- package/backend/.sqlx/query-8610803360ea18b9b9d078a6981ea56abfbfe84e6354fc1d5ae4c622e01410ed.json +68 -0
- package/backend/.sqlx/query-86d03eb70eef39c59296416867f2ee66c9f7cd8b7f961fbda2f89fc0a1c442c2.json +12 -0
- package/backend/.sqlx/query-87d0feb5a6b442bad9c60068ea7569599cc6fc91a0e2692ecb42e93b03201b9d.json +68 -0
- package/backend/.sqlx/query-8a67b3b3337248f06a57bdf8a908f7ef23177431eaed82dc08c94c3e5944340e.json +12 -0
- package/backend/.sqlx/query-8f01ebd64bdcde6a090479f14810d73ba23020e76fd70854ac57f2da251702c3.json +12 -0
- package/backend/.sqlx/query-90fd607fcb2dca72239ff25e618e21e174b195991eaa33722cbf5f76da84cfab.json +62 -0
- package/backend/.sqlx/query-92e8bdbcd80c5ff3db7a35cf79492048803ef305cbdef0d0a1fe5dc881ca8c71.json +104 -0
- package/backend/.sqlx/query-93a1605f90e9672dad29b472b6ad85fa9a55ea3ffa5abcb8724b09d61be254ca.json +20 -0
- package/backend/.sqlx/query-9472c8fb477958167f5fae40b85ac44252468c5226b2cdd7770f027332eed6d7.json +104 -0
- package/backend/.sqlx/query-96036c4f9e0f48bdc5a4a4588f0c5f288ac7aaa5425cac40fc33f337e1a351f2.json +56 -0
- package/backend/.sqlx/query-9edb2c01e91fd0f0fe7b56e988c7ae0393150f50be3f419a981e035c0121dfc7.json +104 -0
- package/backend/.sqlx/query-a157cf00616f703bfba21927f1eb1c9eec2a81c02da15f66efdba0b6c375de1b.json +26 -0
- package/backend/.sqlx/query-a31fff84f3b8e532fd1160447d89d700f06ae08821fee00c9a5b60492b05259c.json +62 -0
- package/backend/.sqlx/query-a5ba908419fb3e456bdd2daca41ba06cc3212ffffb8520fc7dbbcc8b60ada314.json +12 -0
- package/backend/.sqlx/query-a6d2961718dbc3b1a925e549f49a159c561bef58c105529275f274b27e2eba5b.json +104 -0
- package/backend/.sqlx/query-a9e93d5b09b29faf66e387e4d7596a792d81e75c4d3726e83c2963e8d7c9b56f.json +104 -0
- package/backend/.sqlx/query-ac5247c8d7fb86e4650c4b0eb9420031614c831b7b085083bac20c1af314c538.json +12 -0
- package/backend/.sqlx/query-afef9467be74c411c4cb119a8b2b1aea53049877dfc30cc60b486134ba4b4c9f.json +68 -0
- package/backend/.sqlx/query-b2b2c6b4d0b1a347b5c4cb63c3a46a265d4db53be9554989a814b069d0af82f2.json +62 -0
- package/backend/.sqlx/query-c50d2ff0b12e5bcc81e371089ee2d007e233e7db93aefba4fef08e7aa68f5ab7.json +20 -0
- package/backend/.sqlx/query-c614e6056b244ca07f1b9d44e7edc9d5819225c6f8d9e077070c6e518a17f50b.json +12 -0
- package/backend/.sqlx/query-c67259be8bf4ee0cfd32167b2aa3b7fe9192809181a8171bf1c2d6df731967ae.json +12 -0
- package/backend/.sqlx/query-d2d0a1b985ebbca6a2b3e882a221a219f3199890fa640afc946ef1a792d6d8de.json +12 -0
- package/backend/.sqlx/query-d30aa5786757f32bf2b9c5fe51a45e506c71c28c5994e430d9b0546adb15ffa2.json +20 -0
- package/backend/.sqlx/query-d3b9ea1de1576af71b312924ce7f4ea8ae5dbe2ac138ea3b4470f2d5cd734846.json +12 -0
- package/backend/.sqlx/query-ed8456646fa69ddd412441955f06ff22bfb790f29466450735e0b8bb1bc4ec94.json +12 -0
- package/backend/Cargo.toml +71 -0
- package/backend/build.rs +32 -0
- package/backend/migrations/20250617183714_init.sql +44 -0
- package/backend/migrations/20250620212427_execution_processes.sql +25 -0
- package/backend/migrations/20250620214100_remove_stdout_stderr_from_task_attempts.sql +28 -0
- package/backend/migrations/20250621120000_relate_activities_to_execution_processes.sql +23 -0
- package/backend/migrations/20250623120000_executor_sessions.sql +17 -0
- package/backend/migrations/20250623130000_add_executor_type_to_execution_processes.sql +4 -0
- package/backend/migrations/20250625000000_add_dev_script_to_projects.sql +4 -0
- package/backend/migrations/20250701000000_add_branch_to_task_attempts.sql +2 -0
- package/backend/migrations/20250701000001_add_pr_tracking_to_task_attempts.sql +5 -0
- package/backend/migrations/20250701120000_add_assistant_message_to_executor_sessions.sql +2 -0
- package/backend/migrations/20250708000000_add_base_branch_to_task_attempts.sql +2 -0
- package/backend/migrations/20250709000000_add_worktree_deleted_flag.sql +2 -0
- package/backend/migrations/20250710000000_add_setup_completion.sql +3 -0
- package/backend/migrations/20250715154859_add_task_templates.sql +25 -0
- package/backend/migrations/20250716143725_add_default_templates.sql +174 -0
- package/backend/migrations/20250716161432_update_executor_names_to_kebab_case.sql +20 -0
- package/backend/migrations/20250716170000_add_parent_task_to_tasks.sql +7 -0
- package/backend/migrations/20250717000000_drop_task_attempt_activities.sql +9 -0
- package/backend/migrations/20250719000000_add_cleanup_script_to_projects.sql +2 -0
- package/backend/migrations/20250720000000_add_cleanupscript_to_process_type_constraint.sql +25 -0
- package/backend/migrations/20250723000000_add_wish_to_tasks.sql +7 -0
- package/backend/migrations/20250724000000_remove_unique_wish_constraint.sql +5 -0
- package/backend/scripts/toast-notification.ps1 +23 -0
- 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 +218 -0
- package/backend/src/bin/generate_types.rs +189 -0
- package/backend/src/bin/mcp_task_server.rs +191 -0
- package/backend/src/execution_monitor.rs +1193 -0
- package/backend/src/executor.rs +1053 -0
- package/backend/src/executors/amp.rs +697 -0
- package/backend/src/executors/ccr.rs +91 -0
- package/backend/src/executors/charm_opencode.rs +113 -0
- package/backend/src/executors/claude.rs +887 -0
- package/backend/src/executors/cleanup_script.rs +124 -0
- package/backend/src/executors/dev_server.rs +53 -0
- package/backend/src/executors/echo.rs +79 -0
- package/backend/src/executors/gemini/config.rs +67 -0
- package/backend/src/executors/gemini/streaming.rs +363 -0
- package/backend/src/executors/gemini.rs +765 -0
- package/backend/src/executors/mod.rs +23 -0
- package/backend/src/executors/opencode_ai.rs +113 -0
- package/backend/src/executors/setup_script.rs +130 -0
- package/backend/src/executors/sst_opencode/filter.rs +184 -0
- package/backend/src/executors/sst_opencode/tools.rs +139 -0
- package/backend/src/executors/sst_opencode.rs +756 -0
- package/backend/src/lib.rs +45 -0
- package/backend/src/main.rs +324 -0
- package/backend/src/mcp/mod.rs +1 -0
- package/backend/src/mcp/task_server.rs +850 -0
- package/backend/src/middleware/mod.rs +3 -0
- package/backend/src/middleware/model_loaders.rs +242 -0
- package/backend/src/models/api_response.rs +36 -0
- package/backend/src/models/config.rs +375 -0
- package/backend/src/models/execution_process.rs +430 -0
- package/backend/src/models/executor_session.rs +225 -0
- package/backend/src/models/mod.rs +12 -0
- package/backend/src/models/project.rs +356 -0
- package/backend/src/models/task.rs +345 -0
- package/backend/src/models/task_attempt.rs +1214 -0
- package/backend/src/models/task_template.rs +146 -0
- package/backend/src/openapi.rs +93 -0
- package/backend/src/routes/auth.rs +297 -0
- package/backend/src/routes/config.rs +385 -0
- package/backend/src/routes/filesystem.rs +228 -0
- package/backend/src/routes/health.rs +16 -0
- package/backend/src/routes/mod.rs +9 -0
- package/backend/src/routes/projects.rs +562 -0
- package/backend/src/routes/stream.rs +244 -0
- package/backend/src/routes/task_attempts.rs +1172 -0
- package/backend/src/routes/task_templates.rs +229 -0
- package/backend/src/routes/tasks.rs +353 -0
- package/backend/src/services/analytics.rs +216 -0
- package/backend/src/services/git_service.rs +1321 -0
- package/backend/src/services/github_service.rs +307 -0
- package/backend/src/services/mod.rs +13 -0
- package/backend/src/services/notification_service.rs +263 -0
- package/backend/src/services/pr_monitor.rs +214 -0
- package/backend/src/services/process_service.rs +940 -0
- package/backend/src/utils/path.rs +96 -0
- package/backend/src/utils/shell.rs +19 -0
- package/backend/src/utils/text.rs +24 -0
- package/backend/src/utils/worktree_manager.rs +578 -0
- package/backend/src/utils.rs +125 -0
- package/backend/test.db +0 -0
- package/build-npm-package.sh +61 -0
- package/dev_assets_seed/config.json +19 -0
- package/frontend/.eslintrc.json +25 -0
- package/frontend/.prettierrc.json +8 -0
- package/frontend/components.json +17 -0
- package/frontend/index.html +19 -0
- package/frontend/package-lock.json +7321 -0
- package/frontend/package.json +61 -0
- package/frontend/postcss.config.js +6 -0
- 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 +3 -0
- package/frontend/public/automagik-forge-logo.svg +3 -0
- 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 +1 -0
- package/frontend/public/viba-kanban-favicon.png +0 -0
- package/frontend/src/App.tsx +157 -0
- package/frontend/src/components/DisclaimerDialog.tsx +106 -0
- package/frontend/src/components/GitHubLoginDialog.tsx +314 -0
- package/frontend/src/components/OnboardingDialog.tsx +185 -0
- package/frontend/src/components/PrivacyOptInDialog.tsx +130 -0
- package/frontend/src/components/ProvidePatDialog.tsx +98 -0
- package/frontend/src/components/TaskTemplateManager.tsx +336 -0
- package/frontend/src/components/config-provider.tsx +119 -0
- package/frontend/src/components/context/TaskDetailsContextProvider.tsx +470 -0
- package/frontend/src/components/context/taskDetailsContext.ts +125 -0
- package/frontend/src/components/keyboard-shortcuts-demo.tsx +35 -0
- package/frontend/src/components/layout/navbar.tsx +86 -0
- package/frontend/src/components/logo.tsx +44 -0
- package/frontend/src/components/projects/ProjectCard.tsx +155 -0
- package/frontend/src/components/projects/project-detail.tsx +251 -0
- package/frontend/src/components/projects/project-form-fields.tsx +238 -0
- package/frontend/src/components/projects/project-form.tsx +301 -0
- package/frontend/src/components/projects/project-list.tsx +200 -0
- package/frontend/src/components/projects/projects-page.tsx +20 -0
- package/frontend/src/components/tasks/BranchSelector.tsx +169 -0
- package/frontend/src/components/tasks/DeleteFileConfirmationDialog.tsx +94 -0
- package/frontend/src/components/tasks/EditorSelectionDialog.tsx +119 -0
- package/frontend/src/components/tasks/TaskCard.tsx +154 -0
- package/frontend/src/components/tasks/TaskDetails/CollapsibleToolbar.tsx +33 -0
- package/frontend/src/components/tasks/TaskDetails/DiffCard.tsx +109 -0
- package/frontend/src/components/tasks/TaskDetails/DiffChunkSection.tsx +135 -0
- package/frontend/src/components/tasks/TaskDetails/DiffFile.tsx +296 -0
- package/frontend/src/components/tasks/TaskDetails/DiffTab.tsx +32 -0
- package/frontend/src/components/tasks/TaskDetails/DisplayConversationEntry.tsx +392 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Conversation.tsx +256 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/ConversationEntry.tsx +56 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/NormalizedConversationViewer.tsx +92 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/Prompt.tsx +22 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab/SetupScriptRunning.tsx +49 -0
- package/frontend/src/components/tasks/TaskDetails/LogsTab.tsx +186 -0
- package/frontend/src/components/tasks/TaskDetails/ProcessesTab.tsx +288 -0
- package/frontend/src/components/tasks/TaskDetails/RelatedTasksTab.tsx +216 -0
- package/frontend/src/components/tasks/TaskDetails/TabNavigation.tsx +93 -0
- package/frontend/src/components/tasks/TaskDetailsHeader.tsx +169 -0
- package/frontend/src/components/tasks/TaskDetailsPanel.tsx +126 -0
- package/frontend/src/components/tasks/TaskDetailsToolbar.tsx +302 -0
- package/frontend/src/components/tasks/TaskFollowUpSection.tsx +130 -0
- package/frontend/src/components/tasks/TaskFormDialog.tsx +400 -0
- package/frontend/src/components/tasks/TaskKanbanBoard.tsx +180 -0
- package/frontend/src/components/tasks/Toolbar/CreateAttempt.tsx +259 -0
- package/frontend/src/components/tasks/Toolbar/CreatePRDialog.tsx +243 -0
- package/frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx +899 -0
- package/frontend/src/components/tasks/index.ts +2 -0
- package/frontend/src/components/theme-provider.tsx +82 -0
- package/frontend/src/components/theme-toggle.tsx +36 -0
- package/frontend/src/components/ui/alert.tsx +59 -0
- package/frontend/src/components/ui/auto-expanding-textarea.tsx +70 -0
- package/frontend/src/components/ui/badge.tsx +36 -0
- package/frontend/src/components/ui/button.tsx +56 -0
- package/frontend/src/components/ui/card.tsx +86 -0
- package/frontend/src/components/ui/checkbox.tsx +44 -0
- package/frontend/src/components/ui/chip.tsx +25 -0
- package/frontend/src/components/ui/dialog.tsx +124 -0
- package/frontend/src/components/ui/dropdown-menu.tsx +198 -0
- package/frontend/src/components/ui/file-search-textarea.tsx +292 -0
- package/frontend/src/components/ui/folder-picker.tsx +279 -0
- package/frontend/src/components/ui/input.tsx +25 -0
- package/frontend/src/components/ui/label.tsx +24 -0
- package/frontend/src/components/ui/loader.tsx +26 -0
- package/frontend/src/components/ui/markdown-renderer.tsx +75 -0
- package/frontend/src/components/ui/select.tsx +160 -0
- package/frontend/src/components/ui/separator.tsx +31 -0
- package/frontend/src/components/ui/shadcn-io/kanban/index.tsx +185 -0
- package/frontend/src/components/ui/table.tsx +117 -0
- package/frontend/src/components/ui/tabs.tsx +53 -0
- package/frontend/src/components/ui/textarea.tsx +22 -0
- package/frontend/src/components/ui/tooltip.tsx +28 -0
- package/frontend/src/hooks/useNormalizedConversation.ts +440 -0
- package/frontend/src/index.css +225 -0
- package/frontend/src/lib/api.ts +630 -0
- package/frontend/src/lib/keyboard-shortcuts.ts +266 -0
- package/frontend/src/lib/responsive-config.ts +70 -0
- package/frontend/src/lib/types.ts +39 -0
- package/frontend/src/lib/utils.ts +10 -0
- package/frontend/src/main.tsx +50 -0
- package/frontend/src/pages/McpServers.tsx +418 -0
- package/frontend/src/pages/Settings.tsx +610 -0
- package/frontend/src/pages/project-tasks.tsx +575 -0
- package/frontend/src/pages/projects.tsx +18 -0
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/tailwind.config.js +125 -0
- package/frontend/tsconfig.json +26 -0
- package/frontend/tsconfig.node.json +10 -0
- package/frontend/vite.config.ts +33 -0
- package/npx-cli/README.md +159 -0
- package/npx-cli/automagik-forge-0.0.55.tgz +0 -0
- package/npx-cli/automagik-forge-0.1.0.tgz +0 -0
- package/{dist/linux-x64/automagik-forge.zip β npx-cli/automagik-forge-0.1.10.tgz} +0 -0
- package/npx-cli/package.json +17 -0
- package/npx-cli/vibe-kanban-0.0.55.tgz +0 -0
- package/package.json +23 -13
- package/pnpm-workspace.yaml +2 -0
- package/rust-toolchain.toml +11 -0
- package/rustfmt.toml +3 -0
- package/scripts/load-env.js +43 -0
- package/scripts/mcp_test.js +374 -0
- package/scripts/prepare-db.js +45 -0
- package/scripts/setup-dev-environment.js +274 -0
- package/scripts/start-mcp-sse.js +70 -0
- package/scripts/test-debug.js +32 -0
- package/scripts/test-mcp-sse.js +138 -0
- package/scripts/test-simple.js +44 -0
- package/scripts/test-wish-final.js +179 -0
- package/scripts/test-wish-system.js +221 -0
- package/shared/types.ts +182 -0
- package/test-npm-package.sh +42 -0
- package/dist/linux-x64/automagik-forge-mcp.zip +0 -0
- /package/{bin β npx-cli/bin}/cli.js +0 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
# Set macOS deployment target to avoid linker warnings
|
2
|
+
# Use Rust project defaults: 10.12 for x86_64, 11.0 for aarch64
|
3
|
+
[target.x86_64-apple-darwin.env]
|
4
|
+
MACOSX_DEPLOYMENT_TARGET = "10.12"
|
5
|
+
|
6
|
+
[target.aarch64-apple-darwin.env]
|
7
|
+
MACOSX_DEPLOYMENT_TARGET = "11.0"
|
8
|
+
|
9
|
+
[target.x86_64-pc-windows-msvc]
|
10
|
+
rustflags = ["-C", "link-arg=/DEBUG:FASTLINK"]
|
11
|
+
|
12
|
+
[target.aarch64-pc-windows-msvc]
|
13
|
+
rustflags = ["-C", "link-arg=/DEBUG:FASTLINK"]
|
@@ -0,0 +1,376 @@
|
|
1
|
+
# /commit
|
2
|
+
|
3
|
+
---
|
4
|
+
allowed-tools: Bash(*), Glob(*), Grep(*), Read(*), Write(*)
|
5
|
+
description: Intelligent git commit workflow with smart file staging, diff analysis, and automated push
|
6
|
+
---
|
7
|
+
|
8
|
+
Automate the complete git workflow: analyze changes, stage files intelligently, generate commit messages, and push to remote.
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
```bash
|
13
|
+
# Auto-commit with intelligent analysis
|
14
|
+
/commit
|
15
|
+
|
16
|
+
# Commit with custom message prefix
|
17
|
+
/commit "feat: add user authentication"
|
18
|
+
|
19
|
+
# Commit specific changes only
|
20
|
+
/commit "fix: resolve payment bug" --files-only="src/payment/*"
|
21
|
+
|
22
|
+
# Commit without push
|
23
|
+
/commit "wip: work in progress" --no-push
|
24
|
+
|
25
|
+
# Dry run to see what would be committed
|
26
|
+
/commit --dry-run
|
27
|
+
```
|
28
|
+
|
29
|
+
## Features
|
30
|
+
|
31
|
+
### π Smart Change Analysis
|
32
|
+
- Analyzes staged and unstaged changes
|
33
|
+
- Detects file types and change patterns
|
34
|
+
- Identifies potentially sensitive files to exclude
|
35
|
+
- Suggests optimal commit scope
|
36
|
+
|
37
|
+
### π Intelligent File Staging
|
38
|
+
- Automatically stages relevant files
|
39
|
+
- Excludes common unwanted files (logs, cache, temp, etc.)
|
40
|
+
- Handles new files intelligently
|
41
|
+
- Respects `.gitignore` patterns
|
42
|
+
|
43
|
+
### π AI-Powered Commit Messages
|
44
|
+
- Generates descriptive commit messages based on changes
|
45
|
+
- Follows conventional commit format
|
46
|
+
- Includes co-author attribution per project standards
|
47
|
+
- Analyzes diff content for accurate descriptions
|
48
|
+
|
49
|
+
### π Automated Push
|
50
|
+
- Pushes to remote after successful commit
|
51
|
+
- Handles upstream branch setup
|
52
|
+
- Provides clear feedback on push status
|
53
|
+
|
54
|
+
## Automatic Execution
|
55
|
+
|
56
|
+
```bash
|
57
|
+
#!/bin/bash
|
58
|
+
|
59
|
+
# Parse command arguments
|
60
|
+
MESSAGE_PREFIX="$1"
|
61
|
+
FILES_ONLY="$2"
|
62
|
+
NO_PUSH="$3"
|
63
|
+
DRY_RUN="$4"
|
64
|
+
|
65
|
+
# Configuration
|
66
|
+
COAUTHOR="Co-Authored-By: Automagik Genie <genie@namastex.ai>"
|
67
|
+
EXCLUDE_PATTERNS=(
|
68
|
+
"*.log" "*.tmp" "*.cache" "*.pyc" "__pycache__/*"
|
69
|
+
".DS_Store" "*.swp" "*.swo" "node_modules/*"
|
70
|
+
".venv/*" "venv/*" "*.egg-info/*" "build/*"
|
71
|
+
"dist/*" ".pytest_cache/*" ".coverage"
|
72
|
+
"*.backup" "*.bak" "*.orig"
|
73
|
+
)
|
74
|
+
|
75
|
+
echo "π Analyzing repository changes..."
|
76
|
+
|
77
|
+
# Step 1: Check git status
|
78
|
+
echo "π Current git status:"
|
79
|
+
git status --porcelain
|
80
|
+
|
81
|
+
echo ""
|
82
|
+
echo "π Staged changes:"
|
83
|
+
git diff --cached --name-only
|
84
|
+
|
85
|
+
echo ""
|
86
|
+
echo "π Unstaged changes:"
|
87
|
+
git diff --name-only
|
88
|
+
|
89
|
+
echo ""
|
90
|
+
echo "π Untracked files:"
|
91
|
+
git ls-files --others --exclude-standard
|
92
|
+
|
93
|
+
# Step 2: Smart file staging
|
94
|
+
echo ""
|
95
|
+
echo "π― Smart file staging analysis..."
|
96
|
+
|
97
|
+
# Get all changed files (staged + unstaged + untracked)
|
98
|
+
ALL_FILES=($(git diff --cached --name-only))
|
99
|
+
ALL_FILES+=($(git diff --name-only))
|
100
|
+
ALL_FILES+=($(git ls-files --others --exclude-standard))
|
101
|
+
|
102
|
+
# Remove duplicates and sort
|
103
|
+
UNIQUE_FILES=($(printf '%s\n' "${ALL_FILES[@]}" | sort -u))
|
104
|
+
|
105
|
+
# Filter files intelligently
|
106
|
+
FILES_TO_STAGE=()
|
107
|
+
EXCLUDED_FILES=()
|
108
|
+
|
109
|
+
for file in "${UNIQUE_FILES[@]}"; do
|
110
|
+
# Skip empty entries
|
111
|
+
[[ -z "$file" ]] && continue
|
112
|
+
|
113
|
+
# Check if file should be excluded
|
114
|
+
EXCLUDE=false
|
115
|
+
for pattern in "${EXCLUDE_PATTERNS[@]}"; do
|
116
|
+
if [[ "$file" == $pattern ]]; then
|
117
|
+
EXCLUDE=true
|
118
|
+
break
|
119
|
+
fi
|
120
|
+
done
|
121
|
+
|
122
|
+
# Additional smart exclusions
|
123
|
+
if [[ "$file" =~ \.(log|tmp|cache|pyc)$ ]] || \
|
124
|
+
[[ "$file" =~ ^\..*\.swp$ ]] || \
|
125
|
+
[[ "$file" =~ node_modules/ ]] || \
|
126
|
+
[[ "$file" =~ __pycache__/ ]] || \
|
127
|
+
[[ "$file" =~ \.venv/ ]] || \
|
128
|
+
[[ "$file" =~ build/ ]] || \
|
129
|
+
[[ "$file" =~ dist/ ]]; then
|
130
|
+
EXCLUDE=true
|
131
|
+
fi
|
132
|
+
|
133
|
+
# Check if file exists (might be deleted)
|
134
|
+
if [[ ! -f "$file" ]] && [[ ! -d "$file" ]]; then
|
135
|
+
# File might be deleted, check git status
|
136
|
+
if git status --porcelain | grep -q "^.D.*$file"; then
|
137
|
+
EXCLUDE=false # Include deleted files
|
138
|
+
fi
|
139
|
+
fi
|
140
|
+
|
141
|
+
if [[ "$EXCLUDE" == true ]]; then
|
142
|
+
EXCLUDED_FILES+=("$file")
|
143
|
+
echo "π« Excluding: $file"
|
144
|
+
else
|
145
|
+
FILES_TO_STAGE+=("$file")
|
146
|
+
echo "β
Including: $file"
|
147
|
+
fi
|
148
|
+
done
|
149
|
+
|
150
|
+
# Handle files-only filter
|
151
|
+
if [[ -n "$FILES_ONLY" ]]; then
|
152
|
+
echo ""
|
153
|
+
echo "π Filtering files matching: $FILES_ONLY"
|
154
|
+
FILTERED_FILES=()
|
155
|
+
for file in "${FILES_TO_STAGE[@]}"; do
|
156
|
+
if [[ "$file" == $FILES_ONLY ]]; then
|
157
|
+
FILTERED_FILES+=("$file")
|
158
|
+
fi
|
159
|
+
done
|
160
|
+
FILES_TO_STAGE=("${FILTERED_FILES[@]}")
|
161
|
+
fi
|
162
|
+
|
163
|
+
echo ""
|
164
|
+
echo "π Files to stage: ${#FILES_TO_STAGE[@]}"
|
165
|
+
for file in "${FILES_TO_STAGE[@]}"; do
|
166
|
+
echo " β’ $file"
|
167
|
+
done
|
168
|
+
|
169
|
+
# Step 3: Stage files (unless dry run)
|
170
|
+
if [[ "$DRY_RUN" != "--dry-run" ]]; then
|
171
|
+
echo ""
|
172
|
+
echo "β¬οΈ Staging files..."
|
173
|
+
for file in "${FILES_TO_STAGE[@]}"; do
|
174
|
+
git add "$file"
|
175
|
+
echo "β
Staged: $file"
|
176
|
+
done
|
177
|
+
else
|
178
|
+
echo ""
|
179
|
+
echo "π DRY RUN: Would stage ${#FILES_TO_STAGE[@]} files"
|
180
|
+
fi
|
181
|
+
|
182
|
+
# Step 4: Generate diff for commit message analysis
|
183
|
+
echo ""
|
184
|
+
echo "π Analyzing changes for commit message..."
|
185
|
+
DIFF_OUTPUT=$(git diff --cached --name-status 2>/dev/null || echo "")
|
186
|
+
DIFF_STATS=$(git diff --cached --stat 2>/dev/null || echo "")
|
187
|
+
|
188
|
+
echo "Changes summary:"
|
189
|
+
echo "$DIFF_STATS"
|
190
|
+
|
191
|
+
# Step 5: Generate intelligent commit message
|
192
|
+
echo ""
|
193
|
+
echo "π€ Generating commit message..."
|
194
|
+
|
195
|
+
# Analyze changes by type
|
196
|
+
ADDED_FILES=($(echo "$DIFF_OUTPUT" | grep "^A" | cut -f2))
|
197
|
+
MODIFIED_FILES=($(echo "$DIFF_OUTPUT" | grep "^M" | cut -f2))
|
198
|
+
DELETED_FILES=($(echo "$DIFF_OUTPUT" | grep "^D" | cut -f2))
|
199
|
+
RENAMED_FILES=($(echo "$DIFF_OUTPUT" | grep "^R" | cut -f2))
|
200
|
+
|
201
|
+
# Determine change type and scope
|
202
|
+
CHANGE_TYPE="feat"
|
203
|
+
CHANGE_SCOPE=""
|
204
|
+
CHANGE_DESCRIPTION=""
|
205
|
+
|
206
|
+
# Analyze file patterns to determine type and scope
|
207
|
+
if [[ ${#ADDED_FILES[@]} -gt 0 ]] && [[ ${#MODIFIED_FILES[@]} -eq 0 ]]; then
|
208
|
+
CHANGE_TYPE="feat"
|
209
|
+
CHANGE_DESCRIPTION="add new functionality"
|
210
|
+
elif [[ ${#MODIFIED_FILES[@]} -gt 0 ]] && [[ ${#ADDED_FILES[@]} -eq 0 ]]; then
|
211
|
+
CHANGE_TYPE="fix"
|
212
|
+
CHANGE_DESCRIPTION="update existing functionality"
|
213
|
+
elif [[ ${#DELETED_FILES[@]} -gt 0 ]]; then
|
214
|
+
CHANGE_TYPE="refactor"
|
215
|
+
CHANGE_DESCRIPTION="remove unused code"
|
216
|
+
else
|
217
|
+
CHANGE_TYPE="chore"
|
218
|
+
CHANGE_DESCRIPTION="update codebase"
|
219
|
+
fi
|
220
|
+
|
221
|
+
# Determine scope from file paths
|
222
|
+
if [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ ai/agents/ ]]; then
|
223
|
+
CHANGE_SCOPE="agents"
|
224
|
+
elif [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ ai/teams/ ]]; then
|
225
|
+
CHANGE_SCOPE="teams"
|
226
|
+
elif [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ lib/knowledge/ ]]; then
|
227
|
+
CHANGE_SCOPE="knowledge"
|
228
|
+
elif [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ lib/utils/ ]]; then
|
229
|
+
CHANGE_SCOPE="utils"
|
230
|
+
elif [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ api/ ]]; then
|
231
|
+
CHANGE_SCOPE="api"
|
232
|
+
elif [[ "${ADDED_FILES[*]} ${MODIFIED_FILES[*]}" =~ config ]]; then
|
233
|
+
CHANGE_SCOPE="config"
|
234
|
+
fi
|
235
|
+
|
236
|
+
# Build commit message
|
237
|
+
if [[ -n "$MESSAGE_PREFIX" ]]; then
|
238
|
+
COMMIT_MESSAGE="$MESSAGE_PREFIX"
|
239
|
+
else
|
240
|
+
if [[ -n "$CHANGE_SCOPE" ]]; then
|
241
|
+
COMMIT_MESSAGE="$CHANGE_TYPE($CHANGE_SCOPE): $CHANGE_DESCRIPTION"
|
242
|
+
else
|
243
|
+
COMMIT_MESSAGE="$CHANGE_TYPE: $CHANGE_DESCRIPTION"
|
244
|
+
fi
|
245
|
+
|
246
|
+
# Add specific details based on files
|
247
|
+
if [[ ${#ADDED_FILES[@]} -gt 0 ]]; then
|
248
|
+
COMMIT_MESSAGE+="\n\nAdded files:\n"
|
249
|
+
for file in "${ADDED_FILES[@]:0:5}"; do # Limit to first 5
|
250
|
+
COMMIT_MESSAGE+="- $file\n"
|
251
|
+
done
|
252
|
+
[[ ${#ADDED_FILES[@]} -gt 5 ]] && COMMIT_MESSAGE+="- ... and $((${#ADDED_FILES[@]} - 5)) more files\n"
|
253
|
+
fi
|
254
|
+
|
255
|
+
if [[ ${#MODIFIED_FILES[@]} -gt 0 ]]; then
|
256
|
+
COMMIT_MESSAGE+="\nModified files:\n"
|
257
|
+
for file in "${MODIFIED_FILES[@]:0:5}"; do # Limit to first 5
|
258
|
+
COMMIT_MESSAGE+="- $file\n"
|
259
|
+
done
|
260
|
+
[[ ${#MODIFIED_FILES[@]} -gt 5 ]] && COMMIT_MESSAGE+="- ... and $((${#MODIFIED_FILES[@]} - 5)) more files\n"
|
261
|
+
fi
|
262
|
+
|
263
|
+
if [[ ${#DELETED_FILES[@]} -gt 0 ]]; then
|
264
|
+
COMMIT_MESSAGE+="\nDeleted files:\n"
|
265
|
+
for file in "${DELETED_FILES[@]:0:5}"; do # Limit to first 5
|
266
|
+
COMMIT_MESSAGE+="- $file\n"
|
267
|
+
done
|
268
|
+
[[ ${#DELETED_FILES[@]} -gt 5 ]] && COMMIT_MESSAGE+="- ... and $((${#DELETED_FILES[@]} - 5)) more files\n"
|
269
|
+
fi
|
270
|
+
fi
|
271
|
+
|
272
|
+
echo "π Generated commit message:"
|
273
|
+
echo "----------------------------------------"
|
274
|
+
echo -e "$COMMIT_MESSAGE"
|
275
|
+
echo "----------------------------------------"
|
276
|
+
echo ""
|
277
|
+
echo "π₯ Co-author: $COAUTHOR"
|
278
|
+
|
279
|
+
# Step 6: Create commit (unless dry run)
|
280
|
+
if [[ "$DRY_RUN" != "--dry-run" ]]; then
|
281
|
+
echo ""
|
282
|
+
echo "πΎ Creating commit..."
|
283
|
+
|
284
|
+
git commit -m "$(echo -e "$COMMIT_MESSAGE")" -m "" -m "$COAUTHOR"
|
285
|
+
|
286
|
+
if [[ $? -eq 0 ]]; then
|
287
|
+
echo "β
Commit created successfully!"
|
288
|
+
|
289
|
+
# Step 7: Push to remote (unless --no-push)
|
290
|
+
if [[ "$NO_PUSH" != "--no-push" ]]; then
|
291
|
+
echo ""
|
292
|
+
echo "π Pushing to remote..."
|
293
|
+
|
294
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
295
|
+
echo "π Current branch: $CURRENT_BRANCH"
|
296
|
+
|
297
|
+
# Check if upstream branch exists
|
298
|
+
if git rev-parse --verify origin/$CURRENT_BRANCH >/dev/null 2>&1; then
|
299
|
+
git push origin $CURRENT_BRANCH
|
300
|
+
else
|
301
|
+
echo "π Setting upstream branch..."
|
302
|
+
git push -u origin $CURRENT_BRANCH
|
303
|
+
fi
|
304
|
+
|
305
|
+
if [[ $? -eq 0 ]]; then
|
306
|
+
echo "β
Successfully pushed to remote!"
|
307
|
+
echo "π Changes are now available on: origin/$CURRENT_BRANCH"
|
308
|
+
else
|
309
|
+
echo "β Push failed. Please check remote repository access."
|
310
|
+
fi
|
311
|
+
else
|
312
|
+
echo "βΈοΈ Skipping push (--no-push specified)"
|
313
|
+
fi
|
314
|
+
else
|
315
|
+
echo "β Commit failed. Please check the changes and try again."
|
316
|
+
fi
|
317
|
+
else
|
318
|
+
echo ""
|
319
|
+
echo "π DRY RUN: Would create commit with message above"
|
320
|
+
fi
|
321
|
+
|
322
|
+
echo ""
|
323
|
+
echo "π Git workflow complete!"
|
324
|
+
```
|
325
|
+
|
326
|
+
## Advanced Features
|
327
|
+
|
328
|
+
### Smart Exclusion Patterns
|
329
|
+
The command automatically excludes common unwanted files:
|
330
|
+
- **Temporary files**: `*.tmp`, `*.cache`, `*.log`, `*.pyc`
|
331
|
+
- **IDE files**: `.DS_Store`, `*.swp`, `*.swo`
|
332
|
+
- **Dependencies**: `node_modules/*`, `.venv/*`, `venv/*`
|
333
|
+
- **Build artifacts**: `build/*`, `dist/*`, `*.egg-info/*`
|
334
|
+
- **Test artifacts**: `.pytest_cache/*`, `.coverage`
|
335
|
+
- **Backup files**: `*.backup`, `*.bak`, `*.orig`
|
336
|
+
|
337
|
+
### Intelligent Change Detection
|
338
|
+
- **Added files**: Detects new functionality (`feat`)
|
339
|
+
- **Modified files**: Identifies bug fixes (`fix`) or updates
|
340
|
+
- **Deleted files**: Recognizes refactoring (`refactor`)
|
341
|
+
- **Mixed changes**: Categorizes as maintenance (`chore`)
|
342
|
+
|
343
|
+
### Scope Detection
|
344
|
+
Automatically determines scope from file paths:
|
345
|
+
- `ai/agents/*` β `agents`
|
346
|
+
- `ai/teams/*` β `teams`
|
347
|
+
- `lib/knowledge/*` β `knowledge`
|
348
|
+
- `lib/utils/*` β `utils`
|
349
|
+
- `api/*` β `api`
|
350
|
+
- `*config*` β `config`
|
351
|
+
|
352
|
+
### Project Standards Integration
|
353
|
+
- **Co-authoring**: Automatically adds `Co-Authored-By: Automagik Genie <genie@namastex.ai>`
|
354
|
+
- **Conventional commits**: Follows `type(scope): description` format
|
355
|
+
- **Detailed descriptions**: Includes file lists for context
|
356
|
+
|
357
|
+
## Usage Examples
|
358
|
+
|
359
|
+
```bash
|
360
|
+
# Basic usage - analyzes all changes and commits
|
361
|
+
/commit
|
362
|
+
|
363
|
+
# Custom message with auto-staging
|
364
|
+
/commit "feat(agents): add new knowledge base system"
|
365
|
+
|
366
|
+
# Commit only specific files
|
367
|
+
/commit "fix(api): resolve endpoint timeout" --files-only="api/*"
|
368
|
+
|
369
|
+
# Commit without pushing (for review)
|
370
|
+
/commit "wip: implementing user dashboard" --no-push
|
371
|
+
|
372
|
+
# See what would be committed without doing it
|
373
|
+
/commit --dry-run
|
374
|
+
```
|
375
|
+
|
376
|
+
This command provides a complete, intelligent git workflow that handles the complexity of change analysis, smart file staging, and automated commit message generation while following your project's standards and conventions.
|