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.
Files changed (53) hide show
  1. {devin_cli-1.1.4 → devin_cli-1.1.6}/.github/workflows/pypi-publish.yml +13 -19
  2. {devin_cli-1.1.4 → devin_cli-1.1.6}/CHANGELOG.md +10 -0
  3. {devin_cli-1.1.4 → devin_cli-1.1.6}/PKG-INFO +1 -1
  4. {devin_cli-1.1.4 → devin_cli-1.1.6}/pyproject.toml +1 -1
  5. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/cli.py +30 -4
  6. {devin_cli-1.1.4 → devin_cli-1.1.6}/.gitignore +0 -0
  7. {devin_cli-1.1.4 → devin_cli-1.1.6}/LICENSE +0 -0
  8. {devin_cli-1.1.4 → devin_cli-1.1.6}/README.md +0 -0
  9. {devin_cli-1.1.4 → devin_cli-1.1.6}/assets/logo.png +0 -0
  10. {devin_cli-1.1.4 → devin_cli-1.1.6}/generate_facades.py +0 -0
  11. {devin_cli-1.1.4 → devin_cli-1.1.6}/setup.py +0 -0
  12. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/__init__.py +0 -0
  13. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/__init__.py +0 -0
  14. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/attachments.py +0 -0
  15. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/client.py +0 -0
  16. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/consumption.py +0 -0
  17. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/knowledge.py +0 -0
  18. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/members.py +0 -0
  19. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/organizations.py +0 -0
  20. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/playbooks.py +0 -0
  21. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/repositories.py +0 -0
  22. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/schedules.py +0 -0
  23. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/secrets.py +0 -0
  24. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/sessions.py +0 -0
  25. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/__init__.py +0 -0
  26. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/attachments.py +0 -0
  27. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/knowledge.py +0 -0
  28. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/playbooks.py +0 -0
  29. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/secrets.py +0 -0
  30. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v1/sessions.py +0 -0
  31. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/__init__.py +0 -0
  32. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/attachments.py +0 -0
  33. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/consumption.py +0 -0
  34. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/knowledge.py +0 -0
  35. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/members.py +0 -0
  36. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/organizations.py +0 -0
  37. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/playbooks.py +0 -0
  38. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/repositories.py +0 -0
  39. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/schedules.py +0 -0
  40. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/secrets.py +0 -0
  41. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/api/v3/sessions.py +0 -0
  42. {devin_cli-1.1.4 → devin_cli-1.1.6}/src/devin_cli/config.py +0 -0
  43. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/__init__.py +0 -0
  44. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/conftest.py +0 -0
  45. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_attachments.py +0 -0
  46. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_knowledge.py +0 -0
  47. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_playbooks.py +0 -0
  48. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_repositories.py +0 -0
  49. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_schedules.py +0 -0
  50. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_secrets.py +0 -0
  51. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_api/test_sessions.py +0 -0
  52. {devin_cli-1.1.4 → devin_cli-1.1.6}/tests/test_cli.py +0 -0
  53. {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: Set up Python
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=${{ github.event.inputs.tag_name }}
50
+ VERSION="${{ github.event.inputs.tag_name }}"
56
51
  VERSION=${VERSION#v}
57
52
  fi
58
53
  echo "VERSION=$VERSION" >> $GITHUB_ENV
59
-
60
- # Construct source URL and fetch to get the hash
61
- URL="https://files.pythonhosted.org/packages/source/d/devin-cli/devin_cli-$VERSION.tar.gz"
62
- echo "URL=$URL" >> $GITHUB_ENV
63
-
64
- # Wait a few seconds for PyPI CDN to catch up
65
- echo "Waiting 30 seconds for PyPI CDN to propagate..."
66
- sleep 30
67
-
68
- curl -sL $URL -o devin_cli.tar.gz
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.4
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "devin-cli"
3
- version = "1.1.4"
3
+ version = "1.1.6"
4
4
  description = "Unofficial CLI for Devin AI - The first AI Software Engineer"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -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
- cost_data = {"session_id": resp.get("session_id"), "status": resp.get("status_enum"), "acu_used": resp.get("acu_used")}
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
- items = resp.get("repositories", resp.get("items", []))
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 = item.get("repository_path") or item.get("path") or item.get("name", "")
526
- table.add_row(path, "Yes" if item.get("is_indexed") else "No")
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