aeo 0.1.0__py3-none-any.whl

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.
aeo/__init__.py ADDED
@@ -0,0 +1,15 @@
1
+ """aeo — internal answer-engine-optimization CLI + SDK for Agent Berlin staff.
2
+
3
+ Access is restricted to `admin_users` staff with role 'admin'. A session starts
4
+ in the aeo MCP server (`get_otp`), which mints a one-time password redeemed by
5
+ `aeo configure` for a project-scoped token.
6
+
7
+ The CLI and SDK surfaces are not implemented yet — this release exists to
8
+ establish the package.
9
+ """
10
+
11
+ # Bumped automatically by .github/workflows/aeo-publish.yml alongside
12
+ # pyproject.toml — keep the two in sync; do not edit by hand.
13
+ __version__ = "0.1.0"
14
+
15
+ __all__ = ["__version__"]
aeo/cli.py ADDED
@@ -0,0 +1,20 @@
1
+ """aeo CLI entry point.
2
+
3
+ Deliberately minimal: `--version` only. Commands land here as the CLI is built
4
+ out — `configure` first, which POSTs the MCP-minted OTP to /cli/exchange-otp
5
+ along with a project domain and title, and saves the returned token.
6
+ """
7
+
8
+ import click
9
+
10
+ from . import __version__
11
+
12
+
13
+ @click.group(context_settings={"help_option_names": ["-h", "--help"]})
14
+ @click.version_option(__version__, "-V", "--version", prog_name="aeo")
15
+ def main() -> None:
16
+ """Internal answer-engine-optimization tooling for Agent Berlin staff."""
17
+
18
+
19
+ if __name__ == "__main__":
20
+ main()
@@ -0,0 +1,59 @@
1
+ Metadata-Version: 2.5
2
+ Name: aeo
3
+ Version: 0.1.0
4
+ Summary: Internal answer-engine-optimization CLI + SDK for Agent Berlin staff.
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: click>=8.1
7
+ Requires-Dist: requests>=2.31
8
+ Provides-Extra: dev
9
+ Requires-Dist: black>=24.0.0; extra == 'dev'
10
+ Requires-Dist: isort>=5.13.0; extra == 'dev'
11
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
12
+ Description-Content-Type: text/markdown
13
+
14
+ # aeo
15
+
16
+ Internal answer-engine-optimization CLI + SDK for Agent Berlin staff
17
+ (`admin_users`, role `admin`). Sibling of `backend/sdk-python` — same transport
18
+ posture and the same OTP bootstrap, scoped to internal AEO work.
19
+
20
+ **Status: scaffold.** This release establishes the package on PyPI. The CLI has
21
+ only `aeo --version`; the SDK surface is not implemented yet.
22
+
23
+ ## Auth
24
+
25
+ `aeo` authenticates with a **project-scoped token**, minted by exchanging a
26
+ one-time OTP from the aeo MCP server's `get_otp` tool:
27
+
28
+ ```bash
29
+ aeo configure --otp <OTP> --domain <project_domain> --title "<what this session is for>"
30
+ ```
31
+
32
+ This reuses the customer MCP's bootstrap wholesale — the OTP is an
33
+ `mcp_sessions` row and the exchange endpoint is the existing
34
+ `POST /cli/exchange-otp`. There is no aeo-specific session table, exchange
35
+ endpoint, or token type.
36
+
37
+ Two consequences follow, and both differ from how a platform-wide internal tool
38
+ would behave:
39
+
40
+ - **`aeo` is project-scoped.** `--domain` is required; the OTP is bound to that
41
+ project when redeemed. An exchange without a domain cannot succeed.
42
+ - **SDK usage is billed to the project's owning org**, not to us — the minted
43
+ token carries the customer's org claim.
44
+
45
+ Access is gated to `admin_users.role='admin'`. That bound is set by
46
+ `/cli/exchange-otp`, which authorizes via `IsAuthorizedForOrg` (admin, or an FDM
47
+ assigned to that specific org) — `marketing` would receive an OTP that then
48
+ fails at exchange, so the MCP refuses the role up front. Widening it means
49
+ changing an endpoint shared with the customer MCP; it is not a local decision.
50
+
51
+ ## Release
52
+
53
+ Publishing is automated — see `.github/workflows/aeo-publish.yml`. Any push to
54
+ `main` touching `backend/aeo/**` bumps the minor version, commits the bump with
55
+ an `[aeo-release]` marker, builds with `uv build`, and publishes to PyPI via
56
+ Trusted Publishers (OIDC — no API token stored anywhere).
57
+
58
+ Do not edit `version` in `pyproject.toml` or `__version__` in
59
+ `src/aeo/__init__.py` by hand; the workflow rewrites both.
@@ -0,0 +1,6 @@
1
+ aeo/__init__.py,sha256=4xArsqa02YHLJpOPouom9xB90yZ9Owy5zfqAV2LW2xU,573
2
+ aeo/cli.py,sha256=zRDYhLGURWDITNCC1D9okSznbmxd_0Q86IiygV-QLXw,579
3
+ aeo-0.1.0.dist-info/METADATA,sha256=dc-A_pMpNQtHvgpfNLzv6VDCpaOyiKmvjdHyY5GrMq4,2425
4
+ aeo-0.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
5
+ aeo-0.1.0.dist-info/entry_points.txt,sha256=9blbeqFHouLl_8aGu66sUsHsZ_rcVbv5QygFJDJ5QDI,37
6
+ aeo-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ aeo = aeo.cli:main