devin-cli 1.1.4__tar.gz → 1.1.6__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.
- {devin_cli-1.1.4 → devin_cli-1.1.6}/.github/workflows/pypi-publish.yml +13 -19
- {devin_cli-1.1.4 → devin_cli-1.1.6}/CHANGELOG.md +10 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/PKG-INFO +1 -1
- {devin_cli-1.1.4 → devin_cli-1.1.6}/pyproject.toml +1 -1
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/cli.py +30 -4
- {devin_cli-1.1.4 → devin_cli-1.1.6}/.gitignore +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/LICENSE +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/README.md +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/assets/logo.png +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/generate_facades.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/setup.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/__init__.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/__init__.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/attachments.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/client.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/consumption.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/knowledge.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/members.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/organizations.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/playbooks.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/repositories.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/schedules.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/secrets.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/sessions.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/__init__.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/attachments.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/knowledge.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/playbooks.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/secrets.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/sessions.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/__init__.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/attachments.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/consumption.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/knowledge.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/members.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/organizations.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/playbooks.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/repositories.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/schedules.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/secrets.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/sessions.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/config.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/__init__.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/conftest.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_attachments.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_knowledge.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_playbooks.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_repositories.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_schedules.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_secrets.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_sessions.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_cli.py +0 -0
- {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_config.py +0 -0
|
@@ -43,31 +43,24 @@ jobs:
|
|
|
43
43
|
- name: Checkout
|
|
44
44
|
uses: actions/checkout@v4
|
|
45
45
|
|
|
46
|
-
- name:
|
|
47
|
-
uses: actions/setup-python@v5
|
|
48
|
-
with:
|
|
49
|
-
python-version: '3.12'
|
|
50
|
-
|
|
51
|
-
- name: Get Version and Hash
|
|
46
|
+
- name: Resolve version and URL
|
|
52
47
|
run: |
|
|
53
48
|
VERSION=${GITHUB_REF_NAME#v}
|
|
54
49
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
|
55
|
-
VERSION
|
|
50
|
+
VERSION="${{ github.event.inputs.tag_name }}"
|
|
56
51
|
VERSION=${VERSION#v}
|
|
57
52
|
fi
|
|
58
53
|
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
echo "
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
HASH=$(sha256sum devin_cli.tar.gz | awk '{print $1}')
|
|
70
|
-
echo "HASH=$HASH" >> $GITHUB_ENV
|
|
54
|
+
echo "URL=https://files.pythonhosted.org/packages/source/d/devin-cli/devin_cli-${VERSION}.tar.gz" >> $GITHUB_ENV
|
|
55
|
+
|
|
56
|
+
- name: Wait for PyPI CDN propagation
|
|
57
|
+
run: |
|
|
58
|
+
echo "Waiting 90 seconds for PyPI CDN to propagate..."
|
|
59
|
+
sleep 90
|
|
60
|
+
echo "Verifying tarball is accessible..."
|
|
61
|
+
curl --fail --silent --head "$URL" && echo "Tarball is available." || (echo "ERROR: Tarball not yet available at $URL" && exit 1)
|
|
62
|
+
env:
|
|
63
|
+
URL: ${{ env.URL }}
|
|
71
64
|
|
|
72
65
|
- name: Update Homebrew Formula
|
|
73
66
|
uses: mislav/bump-homebrew-formula-action@v3
|
|
@@ -79,3 +72,4 @@ jobs:
|
|
|
79
72
|
commit-message: "Update devin-cli to ${{ env.VERSION }}"
|
|
80
73
|
env:
|
|
81
74
|
COMMITTER_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
75
|
+
|
|
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.6] - 2026-03-11
|
|
9
|
+
### Fixed
|
|
10
|
+
- `repos list` now correctly reads `repo_path` (the actual v3beta1 API key) and resolves indexed state from `indexing_status.indexing_enabled`.
|
|
11
|
+
- `sessions cost` now reads `acus_consumed` (the real v3 field name) with a fallback to `acu_used` for v1.
|
|
12
|
+
|
|
13
|
+
## [1.1.5] - 2026-03-11
|
|
14
|
+
### Fixed
|
|
15
|
+
- `repos list` table now correctly resolves repository paths by handling direct list API responses and trying `repository_path`, `full_name`, `path`, and `name` keys in sequence.
|
|
16
|
+
- `sessions cost` now shows an informative message when `acu_used` is `null` (v1 API sessions or service tokens without cost visibility) instead of silently displaying null.
|
|
17
|
+
|
|
8
18
|
## [1.1.4] - 2026-03-11
|
|
9
19
|
### Fixed
|
|
10
20
|
- Fixed `NameError` crash in `v1/knowledge.py` (`macro` referenced but never declared as a parameter).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devin-cli
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.6
|
|
4
4
|
Summary: Unofficial CLI for Devin AI - The first AI Software Engineer
|
|
5
5
|
Project-URL: Homepage, https://github.com/revanthpobala/devin-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/revanthpobala/devin-cli.git
|
|
@@ -268,8 +268,15 @@ def session_cost_cmd(
|
|
|
268
268
|
if org: config.temporary_org_id = org
|
|
269
269
|
if session_id:
|
|
270
270
|
resp = sessions.get_session(session_id)
|
|
271
|
-
|
|
271
|
+
acus = resp.get("acus_consumed") or resp.get("acu_used")
|
|
272
|
+
cost_data = {
|
|
273
|
+
"session_id": resp.get("session_id"),
|
|
274
|
+
"status": resp.get("status_enum"),
|
|
275
|
+
"acus_consumed": acus,
|
|
276
|
+
}
|
|
272
277
|
console.print(Panel(json.dumps(cost_data, indent=2), title=f"Session Cost: {session_id}"))
|
|
278
|
+
if acus is None:
|
|
279
|
+
console.print("[yellow]ACU data unavailable — this may be a v1 API session or a service token without cost visibility.[/yellow]")
|
|
273
280
|
else:
|
|
274
281
|
resp = consumption.get_daily_consumption_breakdown()
|
|
275
282
|
console.print(Panel(json.dumps(resp, indent=2), title="Daily Consumption"))
|
|
@@ -514,7 +521,12 @@ def list_repos_cmd(
|
|
|
514
521
|
"""List repositories indexed for Devin."""
|
|
515
522
|
if org: config.temporary_org_id = org
|
|
516
523
|
resp = repositories.list_repositories()
|
|
517
|
-
|
|
524
|
+
if isinstance(resp, list):
|
|
525
|
+
items = resp
|
|
526
|
+
elif isinstance(resp, dict):
|
|
527
|
+
items = resp.get("repositories") or resp.get("items") or resp.get("data") or []
|
|
528
|
+
else:
|
|
529
|
+
items = []
|
|
518
530
|
if json_output:
|
|
519
531
|
console.print(json.dumps(items, indent=2))
|
|
520
532
|
return
|
|
@@ -522,8 +534,22 @@ def list_repos_cmd(
|
|
|
522
534
|
table.add_column("Path", style="cyan")
|
|
523
535
|
table.add_column("Indexed", style="green")
|
|
524
536
|
for item in items:
|
|
525
|
-
path =
|
|
526
|
-
|
|
537
|
+
path = (
|
|
538
|
+
item.get("repo_path")
|
|
539
|
+
or item.get("repository_path")
|
|
540
|
+
or item.get("repo_name")
|
|
541
|
+
or item.get("full_name")
|
|
542
|
+
or item.get("path")
|
|
543
|
+
or item.get("name")
|
|
544
|
+
or ""
|
|
545
|
+
)
|
|
546
|
+
indexing_status = item.get("indexing_status") or {}
|
|
547
|
+
indexed = (
|
|
548
|
+
indexing_status.get("indexing_enabled")
|
|
549
|
+
or item.get("is_indexed")
|
|
550
|
+
or item.get("indexed")
|
|
551
|
+
)
|
|
552
|
+
table.add_row(path, "Yes" if indexed else "No")
|
|
527
553
|
console.print(table)
|
|
528
554
|
|
|
529
555
|
@repo_app.command("index")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|