git-juggler 0.2.16__tar.gz → 0.2.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. {git_juggler-0.2.16 → git_juggler-0.2.17}/.gitignore +2 -1
  2. {git_juggler-0.2.16 → git_juggler-0.2.17}/PKG-INFO +32 -5
  3. {git_juggler-0.2.16 → git_juggler-0.2.17}/README.md +12 -4
  4. git_juggler-0.2.17/pyproject.toml +53 -0
  5. {git_juggler-0.2.16 → git_juggler-0.2.17}/scripts/dev.sh +4 -10
  6. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/main.py +1 -1
  7. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/vite.config.ts +5 -2
  8. git_juggler-0.2.16/CLAUDE.md +0 -101
  9. git_juggler-0.2.16/pyproject.toml +0 -30
  10. {git_juggler-0.2.16 → git_juggler-0.2.17}/.github/workflows/build-package.yml +0 -0
  11. {git_juggler-0.2.16 → git_juggler-0.2.17}/LICENSE +0 -0
  12. {git_juggler-0.2.16 → git_juggler-0.2.17}/notes.txt +0 -0
  13. {git_juggler-0.2.16 → git_juggler-0.2.17}/resources/git-juggler-demo-1.gif +0 -0
  14. {git_juggler-0.2.16 → git_juggler-0.2.17}/resources/git-juggler-demo-2.png +0 -0
  15. {git_juggler-0.2.16 → git_juggler-0.2.17}/resources/git-juggler-demo-3.png +0 -0
  16. {git_juggler-0.2.16 → git_juggler-0.2.17}/resources/git-juggler-demo-4.png +0 -0
  17. {git_juggler-0.2.16 → git_juggler-0.2.17}/scripts/build-package.sh +0 -0
  18. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/__init__.py +0 -0
  19. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/__init__.py +0 -0
  20. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/hook_events.py +0 -0
  21. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/hooks.py +0 -0
  22. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/__init__.py +0 -0
  23. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/activity_models.py +0 -0
  24. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/claude_sessions.py +0 -0
  25. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/claude_transcripts.py +0 -0
  26. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/git_resolver.py +0 -0
  27. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/opencode_sessions.py +0 -0
  28. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/paths.py +0 -0
  29. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/agents/tracking/text.py +0 -0
  30. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/__init__.py +0 -0
  31. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/agents.py +0 -0
  32. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/ci.py +0 -0
  33. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/config.py +0 -0
  34. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/git.py +0 -0
  35. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/repos.py +0 -0
  36. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/api/terminal.py +0 -0
  37. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/app.py +0 -0
  38. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ci/__init__.py +0 -0
  39. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ci/github_actions.py +0 -0
  40. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ci/http.py +0 -0
  41. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ci/jenkins.py +0 -0
  42. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ci/run_cache.py +0 -0
  43. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/config.py +0 -0
  44. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/dev_app.py +0 -0
  45. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/agent-logos/claude.png +0 -0
  46. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/agent-logos/opencode.webp +0 -0
  47. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/assets/index-BOaJc15H.js +0 -0
  48. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/assets/index-DRsp7rcC.css +0 -0
  49. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/ci-logos/jenkins.webp +0 -0
  50. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/git-juggler.png +0 -0
  51. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/index.html +0 -0
  52. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/frontend_dist/logo.png +0 -0
  53. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/__init__.py +0 -0
  54. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/command.py +0 -0
  55. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/conflicts.py +0 -0
  56. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/data.py +0 -0
  57. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/detail.py +0 -0
  58. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/diff.py +0 -0
  59. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/gitfiles.py +0 -0
  60. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/refs.py +0 -0
  61. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/status.py +0 -0
  62. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/git/utils.py +0 -0
  63. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/repo_discovery.py +0 -0
  64. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/schemas.py +0 -0
  65. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/terminal.py +0 -0
  66. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/themes.py +0 -0
  67. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ui/__init__.py +0 -0
  68. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/git_juggler/ui/folder_picker.py +0 -0
  69. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/conftest.py +0 -0
  70. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/hook_event_files.py +0 -0
  71. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_agent_hooks.py +0 -0
  72. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_agent_tracking.py +0 -0
  73. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_ci.py +0 -0
  74. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_ci_poll.py +0 -0
  75. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_ci_poll_route.py +0 -0
  76. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_claude_sessions_data.py +0 -0
  77. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_commit_detail.py +0 -0
  78. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_file_diff.py +0 -0
  79. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_git_conflicts.py +0 -0
  80. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_git_data.py +0 -0
  81. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_github_actions.py +0 -0
  82. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_jenkins.py +0 -0
  83. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_opencode_sessions.py +0 -0
  84. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_pick_folder.py +0 -0
  85. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_preferences.py +0 -0
  86. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_repos.py +0 -0
  87. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_run_cache.py +0 -0
  88. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/backend/tests/test_themes.py +0 -0
  89. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/.gitignore +0 -0
  90. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/README.md +0 -0
  91. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/index.html +0 -0
  92. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/package-lock.json +0 -0
  93. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/package.json +0 -0
  94. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/public/agent-logos/claude.png +0 -0
  95. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/public/agent-logos/opencode.webp +0 -0
  96. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/public/ci-logos/jenkins.webp +0 -0
  97. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/public/git-juggler.png +0 -0
  98. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/public/logo.png +0 -0
  99. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/App.css +0 -0
  100. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/App.tsx +0 -0
  101. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/api/client.ts +0 -0
  102. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/api/types.ts +0 -0
  103. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Agents/AgentActivityPanel.tsx +0 -0
  104. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Agents/AgentHoverCard.tsx +0 -0
  105. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Agents/AgentStatusPopover.tsx +0 -0
  106. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Agents/agentFormat.ts +0 -0
  107. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Badges/BranchBadge.tsx +0 -0
  108. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Badges/CiRunBadge.tsx +0 -0
  109. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Badges/StashBadge.tsx +0 -0
  110. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Badges/TagBadge.tsx +0 -0
  111. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Badges/ciStatus.tsx +0 -0
  112. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Branches/DeleteBranchModal.tsx +0 -0
  113. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/CIRunPopover.tsx +0 -0
  114. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/CommandPalette/CommandPalette.tsx +0 -0
  115. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Commits/CommitDetail.tsx +0 -0
  116. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Commits/CommitList.tsx +0 -0
  117. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Commits/CommitRow.tsx +0 -0
  118. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Commits/LineCounts.tsx +0 -0
  119. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Commits/UncommittedRow.tsx +0 -0
  120. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Conflicts/ConflictsPanel.tsx +0 -0
  121. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/BranchContextMenu.tsx +0 -0
  122. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/CommitContextMenu.tsx +0 -0
  123. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/CreateBranchModal.tsx +0 -0
  124. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/CreateTagModal.tsx +0 -0
  125. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/RepoContextMenu.tsx +0 -0
  126. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/ContextMenu/TagContextMenu.tsx +0 -0
  127. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Diff/FileDiffModal.tsx +0 -0
  128. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Graph/GraphPanel.tsx +0 -0
  129. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Graph/branchColor.ts +0 -0
  130. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Graph/computeColumns.ts +0 -0
  131. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Graph/laneWidth.ts +0 -0
  132. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/GraphToolbar/GraphToolbar.tsx +0 -0
  133. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/AgentQuickPicks.tsx +0 -0
  134. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/AgentsSettings.tsx +0 -0
  135. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/CiPollField.tsx +0 -0
  136. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/DirectoryBrowserModal.tsx +0 -0
  137. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/GitHubSettings.tsx +0 -0
  138. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/JenkinsSettings.tsx +0 -0
  139. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/MainMenu.tsx +0 -0
  140. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/RepoPathsSettings.tsx +0 -0
  141. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/ThemePicker.tsx +0 -0
  142. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Menu/ThemeQuickPicks.tsx +0 -0
  143. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Pipelines/PipelinesPanel.tsx +0 -0
  144. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Search/MultiSelect.tsx +0 -0
  145. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Search/SearchBox.tsx +0 -0
  146. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Sidebar/NewGroupModal.tsx +0 -0
  147. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Sidebar/RepoList.tsx +0 -0
  148. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Sidebar/Sidebar.tsx +0 -0
  149. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Sidebar/panelKit.tsx +0 -0
  150. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Tabs/TabsBar.tsx +0 -0
  151. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Tags/CreateTagDialog.tsx +0 -0
  152. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Tags/DeleteTagModal.tsx +0 -0
  153. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Terminal/TerminalPanel.tsx +0 -0
  154. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/Welcome/WelcomeWizard.tsx +0 -0
  155. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/icons.tsx +0 -0
  156. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/inputs/NumberField.tsx +0 -0
  157. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/inputs/TemplateInput.tsx +0 -0
  158. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/inputs/TextField.tsx +0 -0
  159. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/inputs/ToggleField.tsx +0 -0
  160. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/components/inputs/styles.ts +0 -0
  161. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/index.css +0 -0
  162. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/index.tsx +0 -0
  163. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/agentRings.ts +0 -0
  164. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/agentStatusPopoverData.ts +0 -0
  165. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/appTheme.ts +0 -0
  166. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/branchVisibility.ts +0 -0
  167. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/bundledThemes.ts +0 -0
  168. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/ciPoll.ts +0 -0
  169. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/ciRunPopoverData.ts +0 -0
  170. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/color.ts +0 -0
  171. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/dismissOnOutsideClick.ts +0 -0
  172. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/flip.ts +0 -0
  173. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/formatDate.ts +0 -0
  174. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/jenkinsUrlTemplate.ts +0 -0
  175. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/preferenceSender.ts +0 -0
  176. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/scrollToCommit.ts +0 -0
  177. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/sideBySide.ts +0 -0
  178. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/stageWindow.ts +0 -0
  179. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/stripAnsi.ts +0 -0
  180. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/swallowNextClick.ts +0 -0
  181. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/templateTokens.ts +0 -0
  182. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/lib/vscodeTheme.ts +0 -0
  183. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/agents.ts +0 -0
  184. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/ci.ts +0 -0
  185. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/graph.ts +0 -0
  186. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/overlayStack.ts +0 -0
  187. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/overlays.ts +0 -0
  188. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/preferenceSync.ts +0 -0
  189. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/preferences.ts +0 -0
  190. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/repos.ts +0 -0
  191. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/settings.ts +0 -0
  192. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/store.ts +0 -0
  193. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/storeCore.ts +0 -0
  194. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/tabs.ts +0 -0
  195. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/terminal.ts +0 -0
  196. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/state/themes.ts +0 -0
  197. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/ci.css +0 -0
  198. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/commits.css +0 -0
  199. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/graph.css +0 -0
  200. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/menu.css +0 -0
  201. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/sidebar.css +0 -0
  202. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/src/styles/terminal.css +0 -0
  203. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/agentFormat.test.ts +0 -0
  204. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/agentRings.test.ts +0 -0
  205. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/agentStatusPopoverData.test.ts +0 -0
  206. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/ciPoll.test.ts +0 -0
  207. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/ciRunPopoverData.test.ts +0 -0
  208. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/computeColumns.test.ts +0 -0
  209. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/preferenceSender.test.ts +0 -0
  210. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/sideBySide.test.ts +0 -0
  211. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/stageWindow.test.ts +0 -0
  212. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/templateTokens.test.ts +0 -0
  213. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tests/vscodeTheme.test.ts +0 -0
  214. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tsconfig.app.json +0 -0
  215. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tsconfig.json +0 -0
  216. {git_juggler-0.2.16 → git_juggler-0.2.17}/src/frontend/tsconfig.node.json +0 -0
@@ -25,7 +25,8 @@ secrets.env
25
25
  .vscode/
26
26
  *.sw?
27
27
 
28
- # Personal task notes (see CLAUDE.md)
28
+ # Local assistant/project notes
29
+ CLAUDE.md
29
30
  todo.txt
30
31
 
31
32
  plans/
@@ -1,9 +1,28 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: git-juggler
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: A local Git dashboard for people juggling agents and too many repos.
5
+ Project-URL: Homepage, https://github.com/franz38/git-juggler
6
+ Project-URL: Repository, https://github.com/franz38/git-juggler
7
+ Project-URL: Issues, https://github.com/franz38/git-juggler/issues
8
+ Project-URL: Releases, https://github.com/franz38/git-juggler/releases
5
9
  License-Expression: MIT
6
10
  License-File: LICENSE
11
+ Keywords: agents,dashboard,git,repositories,terminal
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Framework :: FastAPI
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: MacOS
18
+ Classifier: Operating System :: Microsoft :: Windows
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Software Development :: Version Control :: Git
7
26
  Requires-Python: >=3.10
8
27
  Requires-Dist: fastapi>=0.110
9
28
  Requires-Dist: gitpython>=3.1
@@ -30,6 +49,14 @@ Watch agents work live, follow every repo’s git graph, and catch what changed
30
49
  - Connects GitHub Actions and Jenkins runs to commits and active pipelines.
31
50
  - VS Code-compatible themes.
32
51
 
52
+ ## Privacy / local-first
53
+
54
+ - Runs locally and binds to `127.0.0.1` by default.
55
+ - No telemetry or analytics are built in, and none are planned.
56
+ - Repo scanning and Claude/OpenCode session tracking read local files on your machine.
57
+ - Git mutations run through visible terminal commands, so you can see the exact command and output.
58
+ - Network requests are only used for features you configure, such as CI integrations.
59
+
33
60
  ## How to install
34
61
 
35
62
  git-juggler is published on PyPI. The recommended way to install it is with
@@ -46,7 +73,7 @@ to seed the initial search path; after that, search paths are managed in the app
46
73
  from the welcome wizard or Settings.
47
74
 
48
75
  - `--host HOST` changes the bind host from the default `127.0.0.1`.
49
- - `--port PORT` changes the backend port from the default `8000`.
76
+ - `--port PORT` changes the backend port from the default `8788`.
50
77
  - `--no-open` disables opening the app in your browser automatically.
51
78
 
52
79
  If you don't have pipx yet:
@@ -85,7 +112,7 @@ Use the dev script to start both the backend and frontend dev servers:
85
112
  ```
86
113
 
87
114
  - `path-to-scan` is optional. On first run, it seeds the folder whose immediate children are scanned for Git repos.
88
- - `--port PORT` is optional. It changes the backend port from the default `8000`; if you use it, update `src/frontend/vite.config.ts` locally so Vite proxies `/api` and `/ws` to the same port.
115
+ - `--port PORT` is optional. It changes the backend port from the default `8788`; the dev script passes the selected port to Vite automatically.
89
116
  - `--no-open` disables opening the app in your browser automatically.
90
117
 
91
118
  Or run them manually in two terminals:
@@ -99,7 +126,7 @@ python3 -m venv .venv
99
126
  ```
100
127
  cd src/frontend
101
128
  npm install
102
- npm run dev # http://localhost:5173 (proxies /api and /ws to :8000)
129
+ npm run dev # http://localhost:5173 (proxies /api and /ws to :8788)
103
130
  ```
104
131
 
105
132
  Open http://localhost:5173.
@@ -113,7 +140,7 @@ cd src/frontend && npm install && npm run build
113
140
  cd ../.. && .venv/bin/git-juggler <path-to-scan> [--no-open]
114
141
  ```
115
142
 
116
- The backend serves the built frontend in this mode, so only port 8000 is needed.
143
+ The backend serves the built frontend in this mode, so only port 8788 is needed.
117
144
  By default, it opens the app in your browser.
118
145
 
119
146
  ## Build a Python package
@@ -17,6 +17,14 @@ Watch agents work live, follow every repo’s git graph, and catch what changed
17
17
  - Connects GitHub Actions and Jenkins runs to commits and active pipelines.
18
18
  - VS Code-compatible themes.
19
19
 
20
+ ## Privacy / local-first
21
+
22
+ - Runs locally and binds to `127.0.0.1` by default.
23
+ - No telemetry or analytics are built in, and none are planned.
24
+ - Repo scanning and Claude/OpenCode session tracking read local files on your machine.
25
+ - Git mutations run through visible terminal commands, so you can see the exact command and output.
26
+ - Network requests are only used for features you configure, such as CI integrations.
27
+
20
28
  ## How to install
21
29
 
22
30
  git-juggler is published on PyPI. The recommended way to install it is with
@@ -33,7 +41,7 @@ to seed the initial search path; after that, search paths are managed in the app
33
41
  from the welcome wizard or Settings.
34
42
 
35
43
  - `--host HOST` changes the bind host from the default `127.0.0.1`.
36
- - `--port PORT` changes the backend port from the default `8000`.
44
+ - `--port PORT` changes the backend port from the default `8788`.
37
45
  - `--no-open` disables opening the app in your browser automatically.
38
46
 
39
47
  If you don't have pipx yet:
@@ -72,7 +80,7 @@ Use the dev script to start both the backend and frontend dev servers:
72
80
  ```
73
81
 
74
82
  - `path-to-scan` is optional. On first run, it seeds the folder whose immediate children are scanned for Git repos.
75
- - `--port PORT` is optional. It changes the backend port from the default `8000`; if you use it, update `src/frontend/vite.config.ts` locally so Vite proxies `/api` and `/ws` to the same port.
83
+ - `--port PORT` is optional. It changes the backend port from the default `8788`; the dev script passes the selected port to Vite automatically.
76
84
  - `--no-open` disables opening the app in your browser automatically.
77
85
 
78
86
  Or run them manually in two terminals:
@@ -86,7 +94,7 @@ python3 -m venv .venv
86
94
  ```
87
95
  cd src/frontend
88
96
  npm install
89
- npm run dev # http://localhost:5173 (proxies /api and /ws to :8000)
97
+ npm run dev # http://localhost:5173 (proxies /api and /ws to :8788)
90
98
  ```
91
99
 
92
100
  Open http://localhost:5173.
@@ -100,7 +108,7 @@ cd src/frontend && npm install && npm run build
100
108
  cd ../.. && .venv/bin/git-juggler <path-to-scan> [--no-open]
101
109
  ```
102
110
 
103
- The backend serves the built frontend in this mode, so only port 8000 is needed.
111
+ The backend serves the built frontend in this mode, so only port 8788 is needed.
104
112
  By default, it opens the app in your browser.
105
113
 
106
114
  ## Build a Python package
@@ -0,0 +1,53 @@
1
+ [project]
2
+ name = "git-juggler"
3
+ dynamic = ["version"]
4
+ description = "A local Git dashboard for people juggling agents and too many repos."
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ license = "MIT"
8
+ keywords = ["agents", "dashboard", "git", "repositories", "terminal"]
9
+ classifiers = [
10
+ "Development Status :: 4 - Beta",
11
+ "Environment :: Web Environment",
12
+ "Framework :: FastAPI",
13
+ "Intended Audience :: Developers",
14
+ "License :: OSI Approved :: MIT License",
15
+ "Operating System :: MacOS",
16
+ "Operating System :: Microsoft :: Windows",
17
+ "Operating System :: POSIX :: Linux",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Topic :: Software Development :: Version Control :: Git",
24
+ ]
25
+ dependencies = [
26
+ "fastapi>=0.110",
27
+ "uvicorn[standard]>=0.29",
28
+ "gitpython>=3.1",
29
+ "pywinpty>=2.0; sys_platform == 'win32'",
30
+ ]
31
+
32
+ [project.scripts]
33
+ git-juggler = "git_juggler.main:cli"
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/franz38/git-juggler"
37
+ Repository = "https://github.com/franz38/git-juggler"
38
+ Issues = "https://github.com/franz38/git-juggler/issues"
39
+ Releases = "https://github.com/franz38/git-juggler/releases"
40
+
41
+ [build-system]
42
+ requires = ["hatchling", "hatch-vcs"]
43
+ build-backend = "hatchling.build"
44
+
45
+ [tool.hatch.version]
46
+ source = "vcs"
47
+
48
+ [tool.hatch.build.targets.wheel]
49
+ packages = ["src/backend/git_juggler"]
50
+ artifacts = ["src/backend/git_juggler/frontend_dist/**"]
51
+
52
+ [tool.hatch.build.targets.sdist]
53
+ artifacts = ["src/backend/git_juggler/frontend_dist/**"]
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env bash
2
2
  # Runs the backend and frontend dev servers together, both hot-reloading.
3
- # See CLAUDE.md's "How to run locally" section for the equivalent manual steps.
3
+ # See README.md's "Dev mode" section for the equivalent manual steps.
4
4
  set -euo pipefail
5
5
 
6
6
  ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
7
- BACKEND_PORT=8000
7
+ BACKEND_PORT=8788
8
8
  OPEN_BROWSER=1
9
9
 
10
10
  usage() {
@@ -12,8 +12,7 @@ usage() {
12
12
  echo " path-to-scan optional: directory whose first-level children get scanned for git repos." >&2
13
13
  echo " Only used to seed the config on first run; scan paths are otherwise" >&2
14
14
  echo " managed in the app (welcome wizard / Settings)." >&2
15
- echo " --port PORT backend port (default: 8000). If you change this, also update" >&2
16
- echo " src/frontend/vite.config.ts's proxy target -- don't commit that change." >&2
15
+ echo " --port PORT backend port (default: 8788)." >&2
17
16
  echo " --no-open don't open the app in a browser automatically." >&2
18
17
  }
19
18
 
@@ -115,7 +114,7 @@ fi
115
114
  BACKEND_PID=$!
116
115
 
117
116
  echo "Starting frontend dev server..."
118
- (cd "$ROOT_DIR/src/frontend" && npm run dev) &
117
+ (cd "$ROOT_DIR/src/frontend" && GIT_JUGGLER_BACKEND_URL="http://127.0.0.1:$BACKEND_PORT" npm run dev) &
119
118
  FRONTEND_PID=$!
120
119
 
121
120
  if [ "$OPEN_BROWSER" = "1" ]; then
@@ -125,11 +124,6 @@ fi
125
124
  echo ""
126
125
  echo "Backend: http://127.0.0.1:$BACKEND_PORT"
127
126
  echo "Frontend: http://localhost:5173 <- open this"
128
- if [ "$BACKEND_PORT" != "8000" ]; then
129
- echo ""
130
- echo "NOTE: backend is on a non-default port. Update the proxy target in" \
131
- "src/frontend/vite.config.ts to http://127.0.0.1:$BACKEND_PORT (local-only change, do not commit)."
132
- fi
133
127
  echo ""
134
128
  echo "Press Ctrl+C to stop both."
135
129
 
@@ -45,7 +45,7 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
45
45
  help="Directory whose first-level children will be scanned for git repos (default: cwd)",
46
46
  )
47
47
  parser.add_argument("--host", default="127.0.0.1")
48
- parser.add_argument("--port", type=int, default=8000)
48
+ parser.add_argument("--port", type=int, default=8788)
49
49
  parser.add_argument("--reload", action="store_true", help="Enable dev auto-reload")
50
50
  parser.add_argument("--no-open", action="store_true", help="Do not open the app in a browser")
51
51
  args = parser.parse_args(argv)
@@ -1,13 +1,16 @@
1
1
  import { defineConfig } from 'vite'
2
2
  import solid from 'vite-plugin-solid'
3
3
 
4
+ const backendUrl = process.env.GIT_JUGGLER_BACKEND_URL ?? "http://127.0.0.1:8788"
5
+ const backendWsUrl = backendUrl.replace(/^http/, "ws")
6
+
4
7
  export default defineConfig({
5
8
  plugins: [solid()],
6
9
  server: {
7
10
  proxy: {
8
- "/api": "http://127.0.0.1:8000",
11
+ "/api": backendUrl,
9
12
  "/ws": {
10
- target: "ws://127.0.0.1:8000",
13
+ target: backendWsUrl,
11
14
  ws: true,
12
15
  },
13
16
  },
@@ -1,101 +0,0 @@
1
- # git-juggler
2
-
3
- ## How to run locally
4
-
5
- Dev mode (hot reload on both sides):
6
-
7
- ```
8
- python3 -m venv .venv
9
- .venv/bin/pip install -e .
10
- .venv/bin/git-juggler <path-to-scan> --reload # http://127.0.0.1:8000
11
- ```
12
-
13
- ```
14
- cd src/frontend
15
- npm install
16
- npm run dev # http://localhost:5173 (proxies /api and /ws to :8000)
17
- ```
18
-
19
- Open http://localhost:5173 — that's the app, hot-reloading both frontend and backend.
20
-
21
- - `<path-to-scan>` is the directory whose first-level children get scanned for git repos (e.g. `~/Documents/2026`).
22
- - If port 8000 is unavailable on this machine (it can be occupied by unrelated local processes), run the backend with a different `--port` and update `src/frontend/vite.config.ts`'s proxy target to match — but don't commit that port change, it's a local workaround, not a project default.
23
- - Single-port production mode (backend serves the built frontend, no Vite) is documented in `README.md`.
24
- - Unless explicitly told otherwise, run both the backend and frontend from
25
- the primary checkout on the `main` branch — not from a
26
- `.claude/worktrees/*` copy. Worktrees exist to isolate one task's
27
- in-progress changes; they don't reflect what's actually landed on `main`,
28
- so running (or leaving running) a dev server out of one can silently show
29
- stale or unrelated behavior for work that's already merged.
30
-
31
- ## Architecture guideline: git mutations go through the terminal only
32
-
33
- All UI-triggered git actions (e.g. right-click on a commit → Checkout) must be
34
- executed via the frontend terminal (`runInTerminal` in `src/frontend/src/state/store.ts`),
35
- not via a dedicated backend API endpoint.
36
-
37
- - The backend only ever performs **read** operations on repos (GitPython,
38
- used for the commit graph, repo listing, branch/tag/stash info, etc.).
39
- - Any action that *changes* repo state (checkout, commit, branch, stash,
40
- merge, reset, push, pull, ...) must be implemented as a command sent to
41
- that repo's terminal session, the same way checkout is.
42
- - Do not add a backend route that shells out to `git` (or calls a mutating
43
- GitPython method) to perform an action on behalf of the UI.
44
-
45
- Why: the terminal is the single point where git is actually invoked, so
46
- there's exactly one code path to reason about for anything that mutates a
47
- repo, and the user always sees the real command (and its real output/errors)
48
- run for any git action, instead of a backend silently doing it.
49
-
50
- ## Testing: use the demo repo, never the user's real repos
51
-
52
- `~/Documents/2026/demo-repo` is a disposable local git repo created
53
- specifically for testing git-juggler — it has multiple branches
54
- (`main`, `feature/onboarding` merged, `feature/dashboard` unmerged), a merge
55
- commit, a tag (`v0.1.0`), and a stash, with a clean working tree.
56
-
57
- - Always test UI actions that mutate repo state (checkout, fetch, and
58
- anything added later) against `demo-repo`, never against the user's real
59
- projects (e.g. anything under `~/Documents/2025/projects`, `fanta-bot`,
60
- etc.) — those have real uncommitted work and real history that must not be
61
- disturbed.
62
- - It's already inside a configured scan path (`~/Documents/2026`), so it
63
- shows up in the app automatically — no config changes needed to use it.
64
- - It has no remote configured on purpose. The user will connect it to GitHub
65
- themselves to test remote-related mechanics (fetch/push/pull against a
66
- real remote) — don't add a remote to it.
67
- - If a test needs a specific extra state (dirty working tree, a particular
68
- conflict, more branches, etc.), set that up in `demo-repo` (or a fresh
69
- scratch repo elsewhere), not in a real project.
70
-
71
- ## Don't push without consensus
72
-
73
- Never run `git push` (including to a branch, a fork, or opening a PR) until
74
- the user has explicitly agreed to it in that conversation. Committing
75
- locally is fine; pushing is not, until they say so.
76
-
77
- ## todo.txt: notes queue
78
-
79
- `todo.txt` (repo root, gitignored — never commit it) is the user's plain-text
80
- list of things to implement. It is split by a marker line:
81
-
82
- ```
83
- --------------- IMPLEMENTED ----------------
84
- ```
85
-
86
- - Everything **before** the marker is already implemented.
87
- - Everything **after** the marker is still to do.
88
-
89
- When the user asks to implement the todo list (e.g. "implement todo"):
90
-
91
- 1. Do the whole activity in a dedicated worktree (e.g. `todo`), not in the
92
- primary checkout: enter it before touching any code, and commit there.
93
- Read `todo.txt` from the primary checkout (it's gitignored, so it isn't
94
- present in worktrees) and take all the notes after the marker.
95
- 2. Implement them (following the rest of this file's guidelines).
96
- 3. Move the marker line down so it sits after the notes just implemented
97
- (i.e. those notes now live above it), leaving any not-implemented notes
98
- below it. Edit only the marker's position; don't rewrite the user's notes. Since `todo.txt` is
99
- gitignored, this edit is made on the primary checkout's copy.
100
-
101
- If `todo.txt` doesn't exist, create it containing just the marker line.
@@ -1,30 +0,0 @@
1
- [project]
2
- name = "git-juggler"
3
- dynamic = ["version"]
4
- description = "A local Git dashboard for people juggling agents and too many repos."
5
- readme = "README.md"
6
- requires-python = ">=3.10"
7
- license = "MIT"
8
- dependencies = [
9
- "fastapi>=0.110",
10
- "uvicorn[standard]>=0.29",
11
- "gitpython>=3.1",
12
- "pywinpty>=2.0; sys_platform == 'win32'",
13
- ]
14
-
15
- [project.scripts]
16
- git-juggler = "git_juggler.main:cli"
17
-
18
- [build-system]
19
- requires = ["hatchling", "hatch-vcs"]
20
- build-backend = "hatchling.build"
21
-
22
- [tool.hatch.version]
23
- source = "vcs"
24
-
25
- [tool.hatch.build.targets.wheel]
26
- packages = ["src/backend/git_juggler"]
27
- artifacts = ["src/backend/git_juggler/frontend_dist/**"]
28
-
29
- [tool.hatch.build.targets.sdist]
30
- artifacts = ["src/backend/git_juggler/frontend_dist/**"]
File without changes
File without changes