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.
- {bob_dev-0.2.3 → bob_dev-0.4.1}/PKG-INFO +68 -15
- bob_dev-0.2.3/src/bob_dev.egg-info/PKG-INFO → bob_dev-0.4.1/README.md +52 -26
- bob_dev-0.4.1/pyproject.toml +40 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/cli.py +246 -67
- bob_dev-0.4.1/src/bob_dev/services/langchain_service.py +129 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/llm.py +118 -23
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/project.py +8 -3
- bob_dev-0.4.1/src/bob_dev/services/rag.py +155 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/terminal.py +13 -0
- bob_dev-0.4.1/src/bob_dev/settings.py +45 -0
- bob_dev-0.4.1/src/bob_dev.egg-info/PKG-INFO +177 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/SOURCES.txt +3 -0
- bob_dev-0.4.1/src/bob_dev.egg-info/requires.txt +18 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_cli.py +77 -14
- {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_llm.py +28 -0
- bob_dev-0.2.3/README.md +0 -111
- bob_dev-0.2.3/pyproject.toml +0 -22
- bob_dev-0.2.3/src/bob_dev.egg-info/requires.txt +0 -4
- {bob_dev-0.2.3 → bob_dev-0.4.1}/LICENSE +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/setup.cfg +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/__init__.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/__init__.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/constants/__init__.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/constants/frameworks.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/__init__.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/claude.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/config.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/gitlab.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev/services/jira.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/dependency_links.txt +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/entry_points.txt +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/src/bob_dev.egg-info/top_level.txt +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_config.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_jira.py +0 -0
- {bob_dev-0.2.3 → bob_dev-0.4.1}/tests/test_project.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
30
|
+
**BOB Dev** is an AI-powered developer workflow CLI that bridges task requirements, your codebase, and Claude Code.
|
|
17
31
|
|
|
18
32
|

|
|
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. **
|
|
25
|
-
4. **
|
|
26
|
-
5. **
|
|
27
|
-
6. **
|
|
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.
|
|
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
|
|
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
|
|
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` (
|
|
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
|
|
3
|
+
**BOB Dev** is an AI-powered developer workflow CLI that bridges task requirements, your codebase, and Claude Code.
|
|
17
4
|
|
|
18
5
|

|
|
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. **
|
|
25
|
-
4. **
|
|
26
|
-
5. **
|
|
27
|
-
6. **
|
|
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.
|
|
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
|
|
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
|
|
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` (
|
|
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
|
+
]
|