bob-dev 0.2.3__tar.gz → 0.4.1__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 (36) hide show
  1. {bob_dev-0.2.3 → bob_dev-0.4.1}/PKG-INFO +68 -15
  2. bob_dev-0.2.3/src/bob_dev.egg-info/PKG-INFO → bob_dev-0.4.1/README.md +52 -26
  3. bob_dev-0.4.1/pyproject.toml +40 -0
  4. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/cli.py +246 -67
  5. bob_dev-0.4.1/src/bob_dev/services/langchain_service.py +129 -0
  6. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/llm.py +118 -23
  7. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/project.py +8 -3
  8. bob_dev-0.4.1/src/bob_dev/services/rag.py +155 -0
  9. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/terminal.py +13 -0
  10. bob_dev-0.4.1/src/bob_dev/settings.py +45 -0
  11. bob_dev-0.4.1/src/bob_dev.egg-info/PKG-INFO +177 -0
  12. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/SOURCES.txt +3 -0
  13. bob_dev-0.4.1/src/bob_dev.egg-info/requires.txt +18 -0
  14. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_cli.py +77 -14
  15. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_llm.py +28 -0
  16. bob_dev-0.2.3/README.md +0 -111
  17. bob_dev-0.2.3/pyproject.toml +0 -22
  18. bob_dev-0.2.3/src/bob_dev.egg-info/requires.txt +0 -4
  19. {bob_dev-0.2.3 → bob_dev-0.4.1}/LICENSE +0 -0
  20. {bob_dev-0.2.3 → bob_dev-0.4.1}/setup.cfg +0 -0
  21. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/__init__.py +0 -0
  22. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/__init__.py +0 -0
  23. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/constants/__init__.py +0 -0
  24. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/constants/frameworks.py +0 -0
  25. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/__init__.py +0 -0
  26. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/claude.py +0 -0
  27. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/config.py +0 -0
  28. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/gitlab.py +0 -0
  29. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/jira.py +0 -0
  30. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/dependency_links.txt +0 -0
  31. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/entry_points.txt +0 -0
  32. {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/top_level.txt +0 -0
  33. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_config.py +0 -0
  34. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_jira.py +0 -0
  35. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_project.py +0 -0
  36. {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_terminal.py +0 -0
@@ -1,11 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bob-dev
3
- Version: 0.2.3
3
+ Version: 0.4.1
4
4
  Summary: An AI developer to write code for you
5
5
  Author-email: Samuel Pereira dos Santos <samuelsantosdev@gmail.com>
6
- Requires-Python: >=3.14
6
+ Requires-Python: >=3.12.10
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
+ Requires-Dist: faiss-cpu>=1.9.0
10
+ Requires-Dist: langchain>=0.3.0
11
+ Requires-Dist: langchain-community>=0.3.0
12
+ Requires-Dist: langchain-openai>=0.2.0
13
+ Requires-Dist: langchain-text-splitters>=0.3.0
14
+ Requires-Dist: openai>=1.50.0
15
+ Requires-Dist: python-dotenv>=1.0.0
16
+ Requires-Dist: InquirerPy>=0.3.4
17
+ Requires-Dist: pydantic>=2.0
18
+ Requires-Dist: atlassian-python-api>=3.41.0
19
+ Requires-Dist: python-gitlab>=4.4.0
20
+ Requires-Dist: summa>=1.2.0
21
+ Requires-Dist: beautifulsoup4>=4.12.0
22
+ Requires-Dist: rich>=13.0.0
9
23
  Provides-Extra: dev
10
24
  Requires-Dist: pytest>=8.0; extra == "dev"
11
25
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
@@ -13,7 +27,7 @@ Dynamic: license-file
13
27
 
14
28
  # BOB Dev
15
29
 
16
- **BOB Dev** is an AI-powered developer workflow CLI that bridges a task requirements, your codebase, and Claude Code.
30
+ **BOB Dev** is an AI-powered developer workflow CLI that bridges task requirements, your codebase, and Claude Code.
17
31
 
18
32
  ![BOB-Dev Banner](https://github.com/samuelsantosdev/bob-dev/blob/main/assets/banner.png)
19
33
 
@@ -21,16 +35,17 @@ Given a task ID (Jira or GitLab) it will:
21
35
 
22
36
  1. **Fetch** the task title, description, and fix versions from Jira or GitLab.
23
37
  2. **Read** your project's Markdown documentation to build rich LLM context.
24
- 3. **Generate** a precise Claude Code prompt (via GROK or OpenAI), including project-framework context, implementation steps, and test scenarios.
25
- 4. **Analyse** the prompt for ambiguities and security concerns.
26
- 5. **Select** (optionally) a Claude Code agent to run the implementation.
27
- 6. **Execute** the prompt with the Claude Code CLI (optional – you can review first).
38
+ 3. **Detect** the project framework (Django, React, FastAPI, Spring Boot, and more).
39
+ 4. **Generate** a precise Claude Code prompt (via GROK or OpenAI), including framework context, implementation steps, and test scenarios.
40
+ 5. **Analyse** the prompt for ambiguities and security concerns.
41
+ 6. **Select** (optionally) a Claude Code agent to run the implementation.
42
+ 7. **Execute** the prompt with the Claude Code CLI (optional — you can review and edit first).
28
43
 
29
44
  ---
30
45
 
31
46
  ## Requirements
32
47
 
33
- - Python 3.14+
48
+ - Python 3.12+
34
49
  - [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and available on `$PATH` as `claude`
35
50
  - A **Jira Cloud** account with an [API token](https://id.atlassian.com/manage-profile/security/api-tokens) **or** a **GitLab** account with a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)
36
51
  - An [xAI / GROK](https://console.x.ai/) **or** [OpenAI](https://platform.openai.com/) API key
@@ -53,22 +68,42 @@ Run the interactive setup wizard the first time:
53
68
  bob-dev --configure
54
69
  ```
55
70
 
56
- This will prompt for your LLM API key, task manager (Jira or GitLab) credentials, and Claude Code API key.
71
+ This prompts for your LLM backend, API key, task manager (Jira or GitLab), and their credentials. All values are saved to `~/.bob_dev/.env`.
57
72
 
58
73
  ### Environment variables
59
74
 
75
+ **Required**
76
+
77
+ | Variable | Options | Description |
78
+ |----------|---------|-------------|
79
+ | `AGENT` | `GROK` (default) / `OPENAI` | LLM backend |
80
+ | `GROK_API_KEY` | — | xAI / GROK secret key (required if `AGENT=GROK`) |
81
+ | `OPENAI_API_KEY` | — | OpenAI secret key (required if `AGENT=OPENAI`) |
82
+ | `TASK_MANAGER` | `JIRA` (default) / `GITLAB` | Task management system |
83
+
84
+ **Jira** (`TASK_MANAGER=JIRA`)
85
+
60
86
  | Variable | Description |
61
87
  |----------|-------------|
62
- | `AGENT` | LLM backend: `GROK` (default) or `OPENAI` |
63
- | `GROK_API_KEY` | xAI / GROK secret key |
64
- | `OPENAI_API_KEY` | OpenAI secret key |
65
- | `TASK_MANAGER` | Task manager: `JIRA` (default) or `GITLAB` |
66
88
  | `JIRA_URL` | e.g. `https://your-org.atlassian.net` |
67
89
  | `JIRA_EMAIL` | Atlassian account e-mail |
68
90
  | `JIRA_API_TOKEN` | Atlassian API token |
91
+
92
+ **GitLab** (`TASK_MANAGER=GITLAB`)
93
+
94
+ | Variable | Description |
95
+ |----------|-------------|
69
96
  | `GITLAB_URL` | e.g. `https://gitlab.com` |
70
97
  | `GITLAB_API_TOKEN` | GitLab personal access token |
71
98
 
99
+ **Optional**
100
+
101
+ | Variable | Default | Description |
102
+ |----------|---------|-------------|
103
+ | `MAX_FILES` | `30` | Max number of Markdown files read for project context |
104
+ | `MAX_CHARS` | `40000` | Max characters of Markdown content fed to the LLM |
105
+ | `MAX_SUMMARY_WORDS` | `2000` | Max words when auto-summarising the project README |
106
+
72
107
  ---
73
108
 
74
109
  ## Usage
@@ -83,9 +118,9 @@ bob-dev --task_id 42 --path /path/to/your/repo
83
118
 
84
119
  | Flag | Description |
85
120
  |------|-------------|
86
- | `--task_id` | Task ID to process — Jira key (`PROJ-123`) or GitLab issue IID (`42`) |
121
+ | `--task_id` | Task ID — Jira key (`PROJ-123`) or GitLab issue IID (`42`) |
87
122
  | `--path` | Path to the target repository (default: current directory) |
88
- | `--agent` | LLM backend: `GROK` or `OPENAI` (default: value of `AGENT` in `.env`) |
123
+ | `--agent` | LLM backend: `GROK` or `OPENAI` (overrides the `AGENT` env var) |
89
124
  | `--configure` | Run the interactive configuration wizard |
90
125
 
91
126
  ---
@@ -95,6 +130,7 @@ bob-dev --task_id 42 --path /path/to/your/repo
95
130
  ```
96
131
  src/bob_dev/
97
132
  ├── cli.py # Entry point & main workflow orchestration
133
+ ├── settings.py # Environment variable loading and validation
98
134
  ├── services/
99
135
  │ ├── terminal.py # ANSI colours, print helpers, spinner animation
100
136
  │ ├── jira.py # Jira API connection + ADF-to-text parsing
@@ -105,6 +141,22 @@ src/bob_dev/
105
141
  │ └── config.py # .env management + credential validation
106
142
  └── constants/
107
143
  └── frameworks.py # Known framework names used for auto-detection
144
+
145
+ tests/
146
+ ├── test_cli.py
147
+ ├── test_config.py
148
+ ├── test_jira.py
149
+ ├── test_llm.py
150
+ ├── test_project.py
151
+ └── test_terminal.py
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Running tests
157
+
158
+ ```bash
159
+ pytest tests/
108
160
  ```
109
161
 
110
162
  ---
@@ -115,6 +167,7 @@ src/bob_dev/
115
167
  |--------|---------|
116
168
  | Red | Errors that stop execution |
117
169
  | Green | Success messages |
170
+ | Yellow | Warnings |
118
171
  | Plain | Informational / default output |
119
172
 
120
173
  ---
@@ -1,19 +1,6 @@
1
- Metadata-Version: 2.4
2
- Name: bob-dev
3
- Version: 0.2.3
4
- Summary: An AI developer to write code for you
5
- Author-email: Samuel Pereira dos Santos <samuelsantosdev@gmail.com>
6
- Requires-Python: >=3.14
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Provides-Extra: dev
10
- Requires-Dist: pytest>=8.0; extra == "dev"
11
- Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
12
- Dynamic: license-file
13
-
14
1
  # BOB Dev
15
2
 
16
- **BOB Dev** is an AI-powered developer workflow CLI that bridges a task requirements, your codebase, and Claude Code.
3
+ **BOB Dev** is an AI-powered developer workflow CLI that bridges task requirements, your codebase, and Claude Code.
17
4
 
18
5
  ![BOB-Dev Banner](https://github.com/samuelsantosdev/bob-dev/blob/main/assets/banner.png)
19
6
 
@@ -21,16 +8,17 @@ Given a task ID (Jira or GitLab) it will:
21
8
 
22
9
  1. **Fetch** the task title, description, and fix versions from Jira or GitLab.
23
10
  2. **Read** your project's Markdown documentation to build rich LLM context.
24
- 3. **Generate** a precise Claude Code prompt (via GROK or OpenAI), including project-framework context, implementation steps, and test scenarios.
25
- 4. **Analyse** the prompt for ambiguities and security concerns.
26
- 5. **Select** (optionally) a Claude Code agent to run the implementation.
27
- 6. **Execute** the prompt with the Claude Code CLI (optional – you can review first).
11
+ 3. **Detect** the project framework (Django, React, FastAPI, Spring Boot, and more).
12
+ 4. **Generate** a precise Claude Code prompt (via GROK or OpenAI), including framework context, implementation steps, and test scenarios.
13
+ 5. **Analyse** the prompt for ambiguities and security concerns.
14
+ 6. **Select** (optionally) a Claude Code agent to run the implementation.
15
+ 7. **Execute** the prompt with the Claude Code CLI (optional — you can review and edit first).
28
16
 
29
17
  ---
30
18
 
31
19
  ## Requirements
32
20
 
33
- - Python 3.14+
21
+ - Python 3.12+
34
22
  - [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and available on `$PATH` as `claude`
35
23
  - A **Jira Cloud** account with an [API token](https://id.atlassian.com/manage-profile/security/api-tokens) **or** a **GitLab** account with a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)
36
24
  - An [xAI / GROK](https://console.x.ai/) **or** [OpenAI](https://platform.openai.com/) API key
@@ -53,22 +41,42 @@ Run the interactive setup wizard the first time:
53
41
  bob-dev --configure
54
42
  ```
55
43
 
56
- This will prompt for your LLM API key, task manager (Jira or GitLab) credentials, and Claude Code API key.
44
+ This prompts for your LLM backend, API key, task manager (Jira or GitLab), and their credentials. All values are saved to `~/.bob_dev/.env`.
57
45
 
58
46
  ### Environment variables
59
47
 
48
+ **Required**
49
+
50
+ | Variable | Options | Description |
51
+ |----------|---------|-------------|
52
+ | `AGENT` | `GROK` (default) / `OPENAI` | LLM backend |
53
+ | `GROK_API_KEY` | — | xAI / GROK secret key (required if `AGENT=GROK`) |
54
+ | `OPENAI_API_KEY` | — | OpenAI secret key (required if `AGENT=OPENAI`) |
55
+ | `TASK_MANAGER` | `JIRA` (default) / `GITLAB` | Task management system |
56
+
57
+ **Jira** (`TASK_MANAGER=JIRA`)
58
+
60
59
  | Variable | Description |
61
60
  |----------|-------------|
62
- | `AGENT` | LLM backend: `GROK` (default) or `OPENAI` |
63
- | `GROK_API_KEY` | xAI / GROK secret key |
64
- | `OPENAI_API_KEY` | OpenAI secret key |
65
- | `TASK_MANAGER` | Task manager: `JIRA` (default) or `GITLAB` |
66
61
  | `JIRA_URL` | e.g. `https://your-org.atlassian.net` |
67
62
  | `JIRA_EMAIL` | Atlassian account e-mail |
68
63
  | `JIRA_API_TOKEN` | Atlassian API token |
64
+
65
+ **GitLab** (`TASK_MANAGER=GITLAB`)
66
+
67
+ | Variable | Description |
68
+ |----------|-------------|
69
69
  | `GITLAB_URL` | e.g. `https://gitlab.com` |
70
70
  | `GITLAB_API_TOKEN` | GitLab personal access token |
71
71
 
72
+ **Optional**
73
+
74
+ | Variable | Default | Description |
75
+ |----------|---------|-------------|
76
+ | `MAX_FILES` | `30` | Max number of Markdown files read for project context |
77
+ | `MAX_CHARS` | `40000` | Max characters of Markdown content fed to the LLM |
78
+ | `MAX_SUMMARY_WORDS` | `2000` | Max words when auto-summarising the project README |
79
+
72
80
  ---
73
81
 
74
82
  ## Usage
@@ -83,9 +91,9 @@ bob-dev --task_id 42 --path /path/to/your/repo
83
91
 
84
92
  | Flag | Description |
85
93
  |------|-------------|
86
- | `--task_id` | Task ID to process — Jira key (`PROJ-123`) or GitLab issue IID (`42`) |
94
+ | `--task_id` | Task ID — Jira key (`PROJ-123`) or GitLab issue IID (`42`) |
87
95
  | `--path` | Path to the target repository (default: current directory) |
88
- | `--agent` | LLM backend: `GROK` or `OPENAI` (default: value of `AGENT` in `.env`) |
96
+ | `--agent` | LLM backend: `GROK` or `OPENAI` (overrides the `AGENT` env var) |
89
97
  | `--configure` | Run the interactive configuration wizard |
90
98
 
91
99
  ---
@@ -95,6 +103,7 @@ bob-dev --task_id 42 --path /path/to/your/repo
95
103
  ```
96
104
  src/bob_dev/
97
105
  ├── cli.py # Entry point & main workflow orchestration
106
+ ├── settings.py # Environment variable loading and validation
98
107
  ├── services/
99
108
  │ ├── terminal.py # ANSI colours, print helpers, spinner animation
100
109
  │ ├── jira.py # Jira API connection + ADF-to-text parsing
@@ -105,6 +114,22 @@ src/bob_dev/
105
114
  │ └── config.py # .env management + credential validation
106
115
  └── constants/
107
116
  └── frameworks.py # Known framework names used for auto-detection
117
+
118
+ tests/
119
+ ├── test_cli.py
120
+ ├── test_config.py
121
+ ├── test_jira.py
122
+ ├── test_llm.py
123
+ ├── test_project.py
124
+ └── test_terminal.py
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Running tests
130
+
131
+ ```bash
132
+ pytest tests/
108
133
  ```
109
134
 
110
135
  ---
@@ -115,6 +140,7 @@ src/bob_dev/
115
140
  |--------|---------|
116
141
  | Red | Errors that stop execution |
117
142
  | Green | Success messages |
143
+ | Yellow | Warnings |
118
144
  | Plain | Informational / default output |
119
145
 
120
146
  ---
@@ -0,0 +1,40 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "bob-dev"
7
+ version = "0.4.1"
8
+ description = "An AI developer to write code for you"
9
+ readme = "README.md"
10
+ authors = [{ name="Samuel Pereira dos Santos", email="samuelsantosdev@gmail.com" }]
11
+ requires-python = ">=3.12.10"
12
+ dependencies = [
13
+ "faiss-cpu>=1.9.0",
14
+ "langchain>=0.3.0",
15
+ "langchain-community>=0.3.0",
16
+ "langchain-openai>=0.2.0",
17
+ "langchain-text-splitters>=0.3.0",
18
+ "openai>=1.50.0",
19
+ "python-dotenv>=1.0.0",
20
+ "InquirerPy>=0.3.4",
21
+ "pydantic>=2.0",
22
+ "atlassian-python-api>=3.41.0",
23
+ "python-gitlab>=4.4.0",
24
+ "summa>=1.2.0",
25
+ "beautifulsoup4>=4.12.0",
26
+ "rich>=13.0.0",
27
+ ]
28
+
29
+ [project.scripts]
30
+ bob-dev = "bob_dev.cli:main"
31
+
32
+ [project.optional-dependencies]
33
+ dev = ["pytest>=8.0", "pytest-asyncio>=0.23"]
34
+
35
+ [tool.pytest.ini_options]
36
+ testpaths = ["tests"]
37
+ asyncio_mode = "auto"
38
+ filterwarnings = [
39
+ "ignore:.*langchain-community.*:DeprecationWarning",
40
+ ]