expedait-cli 0.2.0__tar.gz → 0.2.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 (31) hide show
  1. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/.github/workflows/publish.yml +6 -1
  2. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/CLAUDE.md +6 -0
  3. expedait_cli-0.2.1/PKG-INFO +153 -0
  4. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/README.md +1 -1
  5. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/commands/auth_cmd.py +0 -1
  6. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/pyproject.toml +3 -1
  7. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_commands/test_auth_cmd.py +6 -6
  8. expedait_cli-0.2.0/PKG-INFO +0 -8
  9. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/.github/workflows/ci.yml +0 -0
  10. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/.gitignore +0 -0
  11. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/LICENSE +0 -0
  12. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/__init__.py +0 -0
  13. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/auth.py +0 -0
  14. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/client.py +0 -0
  15. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/commands/__init__.py +0 -0
  16. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/commands/comments.py +0 -0
  17. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/commands/pages.py +0 -0
  18. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/commands/projects.py +0 -0
  19. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/config.py +0 -0
  20. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/formatters.py +0 -0
  21. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/expedait_cli/main.py +0 -0
  22. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/__init__.py +0 -0
  23. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/conftest.py +0 -0
  24. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_auth.py +0 -0
  25. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_client.py +0 -0
  26. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_commands/__init__.py +0 -0
  27. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_commands/test_comments.py +0 -0
  28. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_commands/test_pages.py +0 -0
  29. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_commands/test_projects.py +0 -0
  30. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/tests/test_config.py +0 -0
  31. {expedait_cli-0.2.0 → expedait_cli-0.2.1}/uv.lock +0 -0
@@ -9,7 +9,7 @@ jobs:
9
9
  publish:
10
10
  runs-on: ubuntu-latest
11
11
  permissions:
12
- contents: read
12
+ contents: write
13
13
  id-token: write
14
14
  environment: pypi
15
15
  steps:
@@ -35,3 +35,8 @@ jobs:
35
35
 
36
36
  - name: Publish to PyPI
37
37
  uses: pypa/gh-action-pypi-publish@release/v1
38
+
39
+ - name: Create GitHub Release with PR changelog
40
+ env:
41
+ GH_TOKEN: ${{ github.token }}
42
+ run: gh release create "$GITHUB_REF_NAME" --generate-notes
@@ -24,6 +24,12 @@ uv run python -m pytest tests/test_auth.py # run a single file
24
24
  - `expedait_cli/` — source: `main.py` (Click entrypoint), `client.py` (httpx API client), `auth.py`, `config.py`, `formatters.py`, `commands/` (Click subcommands)
25
25
  - `tests/` — pytest tests using `pytest-httpx` for mocking HTTP
26
26
 
27
+ ## Versioning
28
+
29
+ When creating a PR, bump the patch version in `pyproject.toml` (the `version` field) and include that change in the PR.
30
+
31
+ To publish a release, push a git tag matching the version (e.g. `git tag v0.2.1 && git push origin v0.2.1`). This triggers CI to publish to PyPI and create a GitHub Release with auto-generated notes listing the PRs since the previous tag.
32
+
27
33
  ## Style
28
34
 
29
35
  - Python 3.11+, no type-checker configured
@@ -0,0 +1,153 @@
1
+ Metadata-Version: 2.4
2
+ Name: expedait-cli
3
+ Version: 0.2.1
4
+ Summary: CLI for Expedait project management — download specs, post comments
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: click>=8.1
9
+ Requires-Dist: httpx>=0.27
10
+ Description-Content-Type: text/markdown
11
+
12
+ # Expedait CLI
13
+
14
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
15
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
16
+
17
+ Command-line interface for [Expedait](https://expedait.com) — download project specs and post comments from AI coding agents.
18
+
19
+ ## Quickstart
20
+
21
+ ```bash
22
+ # Install with uv (recommended)
23
+ uv pip install expedait-cli
24
+
25
+ # Or install from source
26
+ git clone https://github.com/Expedait/expedait-cli.git
27
+ cd expedait-cli
28
+ uv sync
29
+
30
+ # Login to your Expedait instance
31
+ expedait auth login
32
+
33
+ # List your projects
34
+ expedait projects list
35
+
36
+ # Download all specs for a project
37
+ expedait projects download 1 --output-dir ./specs
38
+ ```
39
+
40
+ ## Installation
41
+
42
+ ### From PyPI
43
+
44
+ ```bash
45
+ pip install expedait-cli
46
+ ```
47
+
48
+ ### From source
49
+
50
+ ```bash
51
+ git clone https://github.com/Expedait/expedait-cli.git
52
+ cd expedait-cli
53
+ uv sync
54
+ ```
55
+
56
+ This creates a virtual environment with the `expedait` command available.
57
+
58
+ **Requirements:** Python 3.11+
59
+
60
+ ## Authentication
61
+
62
+ ### Interactive login
63
+
64
+ ```bash
65
+ expedait auth login
66
+ ```
67
+
68
+ Prompts for login method (SSO or email/password). Stores credentials in `~/.expedait/config.json`.
69
+
70
+ ### Environment variables (CI / agents)
71
+
72
+ ```bash
73
+ export EXPEDAIT_TOKEN="your-jwt-token"
74
+ export EXPEDAIT_API_URL="https://your-instance.expedait.com"
75
+ export EXPEDAIT_TENANT_ID=1
76
+ ```
77
+
78
+ **Token resolution order:** `EXPEDAIT_TOKEN` env var > `~/.expedait/config.json` > error.
79
+
80
+ ## Commands
81
+
82
+ ### Auth
83
+
84
+ ```bash
85
+ expedait auth login # Interactive login
86
+ expedait auth status # Show current user and tenant
87
+ expedait auth logout # Clear stored credentials
88
+ ```
89
+
90
+ ### Projects
91
+
92
+ ```bash
93
+ expedait projects list # List all projects
94
+ expedait projects get PROJECT_ID # Get project details
95
+ expedait projects download PROJECT_ID # Download all pages as ZIP
96
+ expedait projects download PROJECT_ID --output-dir ./specs # Extract to directory
97
+ ```
98
+
99
+ ### Pages
100
+
101
+ ```bash
102
+ expedait pages list --project-id PROJECT_ID # List pages in a project
103
+ expedait pages get PAGE_ID # Print page markdown content
104
+ expedait pages full PAGE_ID # Full context (content + comments + deps)
105
+ expedait pages download PAGE_ID --output-dir ./out # Download page as ZIP
106
+ ```
107
+
108
+ ### Comments
109
+
110
+ ```bash
111
+ expedait comments list PAGE_ID # List comments on a page
112
+ expedait comments create PAGE_ID \ # Create a comment
113
+ --text "Comment content" \
114
+ --selected-text "text from page" \
115
+ --start-offset 100 \
116
+ --end-offset 120 \
117
+ --source-page-id 5 # Optional: agent's source page
118
+ expedait comments resolve PAGE_ID COMMENT_ID # Mark as resolved
119
+ expedait comments delete PAGE_ID COMMENT_ID # Delete a comment
120
+ ```
121
+
122
+ ## Global Options
123
+
124
+ ```bash
125
+ expedait --api-url https://host:8000 ... # Override API URL
126
+ expedait --tenant-id 2 ... # Override tenant
127
+ expedait --format json ... # Force JSON output
128
+ expedait --format text ... # Force human-readable output
129
+ expedait --version # Show version
130
+ ```
131
+
132
+ Output format defaults to `text` when connected to a terminal, `json` when piped.
133
+
134
+ ## Agent Skills
135
+
136
+ For step-by-step guides on using the CLI from AI coding agents, see [expedait-skills](https://github.com/Expedait/expedait-skills).
137
+
138
+ ## Development
139
+
140
+ ```bash
141
+ git clone https://github.com/Expedait/expedait-cli.git
142
+ cd expedait-cli
143
+ uv sync --group dev
144
+ uv run python -m pytest
145
+ ```
146
+
147
+ ## Contributing
148
+
149
+ Contributions are welcome! Please open an issue or submit a pull request.
150
+
151
+ ## License
152
+
153
+ This project is licensed under the [Apache License 2.0](LICENSE).
@@ -54,7 +54,7 @@ This creates a virtual environment with the `expedait` command available.
54
54
  expedait auth login
55
55
  ```
56
56
 
57
- Prompts for API URL, email, and password. Stores credentials in `~/.expedait/config.json`.
57
+ Prompts for login method (SSO or email/password). Stores credentials in `~/.expedait/config.json`.
58
58
 
59
59
  ### Environment variables (CI / agents)
60
60
 
@@ -117,7 +117,6 @@ def _login_sso(api_url: str) -> tuple[str, dict]:
117
117
  def login(ctx: click.Context) -> None:
118
118
  """Login interactively via browser SSO or email/password."""
119
119
  api_url = resolve_api_url(ctx.obj.get("api_url"))
120
- api_url = click.prompt("API URL", default=api_url)
121
120
 
122
121
  method = click.prompt(
123
122
  "Login method",
@@ -4,8 +4,10 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "expedait-cli"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  description = "CLI for Expedait project management — download specs, post comments"
9
+ readme = "README.md"
10
+ license = "Apache-2.0"
9
11
  requires-python = ">=3.11"
10
12
  dependencies = [
11
13
  "click>=8.1",
@@ -29,7 +29,7 @@ class TestAuthLoginPassword:
29
29
  result = runner.invoke(
30
30
  cli,
31
31
  ["auth", "login"],
32
- input="https://app.expedait.org\npassword\nuser@test.com\npass123\n",
32
+ input="password\nuser@test.com\npass123\n",
33
33
  )
34
34
 
35
35
  assert result.exit_code == 0
@@ -46,7 +46,7 @@ class TestAuthLoginPassword:
46
46
  result = runner.invoke(
47
47
  cli,
48
48
  ["auth", "login"],
49
- input="https://app.expedait.org\npassword\nbad@test.com\nwrong\n",
49
+ input="password\nbad@test.com\nwrong\n",
50
50
  )
51
51
 
52
52
  assert result.exit_code != 0
@@ -90,7 +90,7 @@ class TestAuthLoginSSO:
90
90
  result = runner.invoke(
91
91
  cli,
92
92
  ["auth", "login"],
93
- input="https://app.expedait.org\nsso\n",
93
+ input="sso\n",
94
94
  )
95
95
 
96
96
  assert result.exit_code == 0
@@ -110,7 +110,7 @@ class TestAuthLoginSSO:
110
110
  result = runner.invoke(
111
111
  cli,
112
112
  ["auth", "login"],
113
- input="https://app.expedait.org\nsso\n",
113
+ input="sso\n",
114
114
  )
115
115
 
116
116
  assert result.exit_code != 0
@@ -139,7 +139,7 @@ class TestAuthLoginSSO:
139
139
  result = runner.invoke(
140
140
  cli,
141
141
  ["auth", "login"],
142
- input="https://app.expedait.org\nsso\n",
142
+ input="sso\n",
143
143
  )
144
144
 
145
145
  assert result.exit_code != 0
@@ -169,7 +169,7 @@ class TestAuthLoginMultipleTenants:
169
169
  result = runner.invoke(
170
170
  cli,
171
171
  ["auth", "login"],
172
- input="https://app.expedait.org\npassword\nuser@test.com\npass123\n2\n",
172
+ input="password\nuser@test.com\npass123\n2\n",
173
173
  )
174
174
 
175
175
  assert result.exit_code == 0
@@ -1,8 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: expedait-cli
3
- Version: 0.2.0
4
- Summary: CLI for Expedait project management — download specs, post comments
5
- License-File: LICENSE
6
- Requires-Python: >=3.11
7
- Requires-Dist: click>=8.1
8
- Requires-Dist: httpx>=0.27
File without changes
File without changes
File without changes