persona-sdk-python 0.1.2__tar.gz → 0.2.4__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 (32) hide show
  1. persona_sdk_python-0.2.4/DEPLOY.md +112 -0
  2. persona_sdk_python-0.2.4/PKG-INFO +246 -0
  3. persona_sdk_python-0.2.4/README.md +222 -0
  4. persona_sdk_python-0.2.4/bitbucket-pipelines.yml +17 -0
  5. persona_sdk_python-0.2.4/persona_sdk/__init__.py +100 -0
  6. persona_sdk_python-0.2.4/persona_sdk/auth/__init__.py +11 -0
  7. persona_sdk_python-0.2.4/persona_sdk/auth/api_key_auth.py +14 -0
  8. persona_sdk_python-0.2.4/persona_sdk/auth/base.py +17 -0
  9. persona_sdk_python-0.2.4/persona_sdk/auth/bearer_token_auth.py +14 -0
  10. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/client.py +34 -6
  11. persona_sdk_python-0.2.4/pyproject.toml +38 -0
  12. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/uv.lock +137 -128
  13. persona_sdk_python-0.1.2/PKG-INFO +0 -7
  14. persona_sdk_python-0.1.2/README.md +0 -351
  15. persona_sdk_python-0.1.2/persona_sdk/__init__.py +0 -32
  16. persona_sdk_python-0.1.2/pyproject.toml +0 -16
  17. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/.gitignore +0 -0
  18. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/__init__.py +0 -0
  19. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/agents.py +0 -0
  20. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/credentials.py +0 -0
  21. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/features.py +0 -0
  22. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/knowledge_bases.py +0 -0
  23. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/missions.py +0 -0
  24. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/projects.py +0 -0
  25. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/service_prices.py +0 -0
  26. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/sessions.py +0 -0
  27. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/triggers.py +0 -0
  28. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/api/workflows.py +0 -0
  29. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/runners/__init__.py +0 -0
  30. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/runners/agent_runner.py +0 -0
  31. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/runners/resource_retriever.py +0 -0
  32. {persona_sdk_python-0.1.2 → persona_sdk_python-0.2.4}/persona_sdk/runners/tool_invoker.py +0 -0
@@ -0,0 +1,112 @@
1
+ # Deploy to PyPI
2
+
3
+ Operational guide for publishing `persona-sdk-python` to PyPI.
4
+
5
+ Reference: same strategy used by `applica-iam-client`.
6
+
7
+ ---
8
+
9
+ ## Prerequisites
10
+
11
+ ### 1. PyPI account
12
+
13
+ - Go to https://pypi.org/account/register/
14
+ - If the account already exists (e.g. the one used for `applica-iam-client`), skip this step
15
+
16
+ ### 2. PyPI API Token
17
+
18
+ 1. Login at https://pypi.org
19
+ 2. Go to **Account Settings** → **API tokens**
20
+ 3. Click **Add API token**
21
+ - Name: `persona-sdk-python-deploy`
22
+ - Scope: **Entire account** (for the first release, you can restrict to the project later)
23
+ 4. Copy the token (starts with `pypi-...`) — it is shown only once
24
+
25
+ ### 3. Configure the token on Bitbucket
26
+
27
+ 1. Go to the Bitbucket repository for `persona-sdk-python`
28
+ 2. **Repository settings** → **Pipelines** → **Repository variables**
29
+ 3. Add:
30
+ - **Name:** `PYPI_TOKEN`
31
+ - **Value:** the copied token (e.g. `pypi-AgEIcH...`)
32
+ - **Secured:** checked
33
+
34
+ ---
35
+
36
+ ## Automated Release (Bitbucket Pipelines)
37
+
38
+ Every push to `main` automatically publishes a new version.
39
+
40
+ The version is computed as `0.1.{BITBUCKET_BUILD_NUMBER}`, so it auto-increments
41
+ (e.g. build #1 → `0.1.1`, build #14 → `0.1.14`, build #203 → `0.1.203`).
42
+
43
+ When you want a major/minor bump, change the prefix in `bitbucket-pipelines.yml`
44
+ (e.g. from `0.1.` to `0.2.` or `1.0.`).
45
+
46
+ ### Flow:
47
+
48
+ ```
49
+ git push origin main
50
+
51
+
52
+ Pipeline triggers
53
+
54
+
55
+ Updates version in pyproject.toml (0.1.$BUILD_NUMBER)
56
+
57
+
58
+ Build (sdist + wheel)
59
+
60
+
61
+ Upload to PyPI via twine with $PYPI_TOKEN
62
+
63
+
64
+ Creates git tag (0.1.$BUILD_NUMBER) and pushes it
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Manual Release (from local machine)
70
+
71
+ If you want to publish without the pipeline, from your terminal:
72
+
73
+ ```bash
74
+ cd /path/to/persona-sdk-python
75
+
76
+ # 1. Update the version in pyproject.toml
77
+ # Edit the line: version = "0.1.X"
78
+
79
+ # 2. Build
80
+ pip install build
81
+ python -m build
82
+
83
+ # 3. Upload
84
+ pip install twine
85
+ twine upload dist/* -u __token__ -p pypi-YOUR_TOKEN_HERE
86
+
87
+ # 4. Tag
88
+ git tag -a 0.1.X -m "0.1.X"
89
+ git push origin 0.1.X
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Verification
95
+
96
+ After release, verify that the package is available:
97
+
98
+ ```bash
99
+ pip install persona-sdk-python --upgrade
100
+ ```
101
+
102
+ Or check at: https://pypi.org/project/persona-sdk-python/
103
+
104
+ ---
105
+
106
+ ## First Release — Checklist
107
+
108
+ - [ ] PyPI account created/existing
109
+ - [ ] API Token generated on PyPI
110
+ - [ ] Token configured as `PYPI_TOKEN` in Bitbucket repository variables
111
+ - [ ] Push to `main` → pipeline runs → package published
112
+ - [ ] `pip install persona-sdk-python` works
@@ -0,0 +1,246 @@
1
+ Metadata-Version: 2.4
2
+ Name: persona-sdk-python
3
+ Version: 0.2.4
4
+ Summary: Async Python SDK for the Persona AI platform
5
+ Project-URL: Homepage, https://persona.applica.guru
6
+ Project-URL: Repository, https://bitbucket.org/applicaguru/persona-sdk-python
7
+ Author: Applica Software Guru
8
+ License: Proprietary
9
+ Keywords: agents,ai,async,persona,sdk
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Framework :: AsyncIO
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: httpx>=0.27.0
22
+ Requires-Dist: persona-models>=0.1.0
23
+ Description-Content-Type: text/markdown
24
+
25
+ # persona-sdk-python
26
+
27
+ Async Python SDK for the [Persona AI](https://persona.applica.guru) platform.
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ pip install persona-sdk-python
33
+ ```
34
+
35
+ Or with [uv](https://docs.astral.sh/uv/):
36
+
37
+ ```bash
38
+ uv add persona-sdk-python
39
+ ```
40
+
41
+ Requirements: Python 3.10+
42
+
43
+ ## Quick start
44
+
45
+ ```python
46
+ import asyncio
47
+ from persona_sdk import PersonaSdk
48
+
49
+
50
+ async def main():
51
+ sdk = PersonaSdk(
52
+ base_url="https://persona.applica.guru/api",
53
+ auth="prs_your_project_api_key",
54
+ )
55
+
56
+ # List agents in your project
57
+ agents = await sdk.agents.list()
58
+ print(agents)
59
+
60
+ await sdk.close()
61
+
62
+
63
+ asyncio.run(main())
64
+ ```
65
+
66
+ ## Authentication
67
+
68
+ The SDK supports two authentication methods via the `auth` parameter.
69
+
70
+ ### API key (default)
71
+
72
+ A plain string is wrapped automatically in `ApiKeyAuthenticationProvider` and
73
+ sent as the `x-persona-apikey` header. Accepts:
74
+
75
+ - Master key (full admin access)
76
+ - Project API key (`prs_...`)
77
+ - Agent API key (`prs_ag_...`)
78
+
79
+ ```python
80
+ from persona_sdk import PersonaSdk
81
+
82
+ sdk = PersonaSdk(
83
+ base_url="https://persona.applica.guru/api",
84
+ auth="prs_your_project_api_key",
85
+ )
86
+ ```
87
+
88
+ ### IAM Bearer token
89
+
90
+ For applications that authenticate users via IAM, pass a
91
+ `BearerTokenAuthenticationProvider` with a valid JWT:
92
+
93
+ ```python
94
+ from persona_sdk import PersonaSdk, BearerTokenAuthenticationProvider
95
+
96
+ sdk = PersonaSdk(
97
+ base_url="https://persona.applica.guru/api",
98
+ auth=BearerTokenAuthenticationProvider(iam_jwt_token),
99
+ )
100
+ ```
101
+
102
+ The token is sent as the `Authorization: Bearer <token>` header. The server
103
+ validates it via the IAM service and resolves the user's project automatically.
104
+
105
+ ### Custom provider
106
+
107
+ Implement your own provider by subclassing `AuthenticationProvider`:
108
+
109
+ ```python
110
+ from persona_sdk import AuthenticationProvider
111
+
112
+ class MyProvider(AuthenticationProvider):
113
+ def headers(self) -> dict[str, str]:
114
+ return {"x-custom-header": "value"}
115
+
116
+ def credentials(self) -> str:
117
+ return "my-credentials"
118
+ ```
119
+
120
+ ## Available APIs
121
+
122
+ The `PersonaSdk` instance exposes one client per resource:
123
+
124
+ | Attribute | Description |
125
+ |-----------|-------------|
126
+ | `sdk.agents` | Agent management (CRUD, voices) |
127
+ | `sdk.projects` | Project management and subscriptions |
128
+ | `sdk.sessions` | Sessions, messages, usage |
129
+ | `sdk.knowledge_bases` | Knowledge bases, documents, chunk search |
130
+ | `sdk.workflows` | Workflows, executions, queues |
131
+ | `sdk.triggers` | Triggers and trigger executions |
132
+ | `sdk.missions` | Missions (generate, execute, stop, continue) |
133
+ | `sdk.features` | Feature templates and MCP tools |
134
+ | `sdk.credentials` | OAuth credentials and authorization |
135
+ | `sdk.service_prices` | Service pricing |
136
+
137
+ Each API method is fully async. Always close the SDK when done:
138
+
139
+ ```python
140
+ sdk = PersonaSdk(...)
141
+ try:
142
+ agents = await sdk.agents.list()
143
+ finally:
144
+ await sdk.close()
145
+ ```
146
+
147
+ Or use it as an async context manager pattern:
148
+
149
+ ```python
150
+ sdk = PersonaSdk(...)
151
+ async with sdk.client._client: # internal httpx client
152
+ ...
153
+ ```
154
+
155
+ ## CRUD example
156
+
157
+ ```python
158
+ # Create an agent
159
+ agent = await sdk.agents.create({
160
+ "name": "my-agent",
161
+ "model": {"modelName": "gpt-4o"},
162
+ })
163
+
164
+ # Read
165
+ fetched = await sdk.agents.get(agent["id"])
166
+
167
+ # Update
168
+ fetched["name"] = "renamed-agent"
169
+ await sdk.agents.update(agent["id"], fetched)
170
+
171
+ # Delete
172
+ await sdk.agents.delete(agent["id"])
173
+ ```
174
+
175
+ ## Pagination
176
+
177
+ List endpoints accept `keyword`, `page`, and `size`:
178
+
179
+ ```python
180
+ result = await sdk.agents.list(keyword="bot", page=1, size=20)
181
+ # {
182
+ # "items": [...],
183
+ # "total": 42,
184
+ # "page": 1,
185
+ # "size": 20
186
+ # }
187
+ ```
188
+
189
+ ## Workflows
190
+
191
+ If your workflows service runs on a different host, pass `workflows_url`:
192
+
193
+ ```python
194
+ sdk = PersonaSdk(
195
+ base_url="https://persona.applica.guru/api",
196
+ auth="prs_...",
197
+ workflows_url="https://persona.applica.guru/workflows",
198
+ )
199
+
200
+ # Execute a workflow
201
+ result = await sdk.workflows.execute(
202
+ workflow_id="wf-123",
203
+ data={"input": "value"},
204
+ )
205
+ ```
206
+
207
+ ## Runners
208
+
209
+ For higher-level abstractions, the SDK provides runners:
210
+
211
+ ```python
212
+ from persona_sdk import PersonaClient
213
+ from persona_sdk.runners import AgentRunner, invoke_tool, retrieve_resource
214
+
215
+ client = PersonaClient(
216
+ base_url="https://persona.applica.guru/api",
217
+ auth="prs_...",
218
+ )
219
+
220
+ # Run an agent in an existing session
221
+ runner = AgentRunner(client=client, agent_id="agent-1", session_code="sess-1")
222
+ response = await runner.run("Hello, agent!")
223
+
224
+ # Invoke an MCP tool directly
225
+ result = await invoke_tool(
226
+ client=client,
227
+ mcp_server_name="my-mcp",
228
+ transport=...,
229
+ tool_name="search",
230
+ args={"query": "hello"},
231
+ )
232
+ ```
233
+
234
+ ## Proxy support
235
+
236
+ ```python
237
+ sdk = PersonaSdk(
238
+ base_url="https://persona.applica.guru/api",
239
+ auth="prs_...",
240
+ proxy="http://proxy.local:8080",
241
+ )
242
+ ```
243
+
244
+ ## License
245
+
246
+ Proprietary — © Applica Software Guru
@@ -0,0 +1,222 @@
1
+ # persona-sdk-python
2
+
3
+ Async Python SDK for the [Persona AI](https://persona.applica.guru) platform.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install persona-sdk-python
9
+ ```
10
+
11
+ Or with [uv](https://docs.astral.sh/uv/):
12
+
13
+ ```bash
14
+ uv add persona-sdk-python
15
+ ```
16
+
17
+ Requirements: Python 3.10+
18
+
19
+ ## Quick start
20
+
21
+ ```python
22
+ import asyncio
23
+ from persona_sdk import PersonaSdk
24
+
25
+
26
+ async def main():
27
+ sdk = PersonaSdk(
28
+ base_url="https://persona.applica.guru/api",
29
+ auth="prs_your_project_api_key",
30
+ )
31
+
32
+ # List agents in your project
33
+ agents = await sdk.agents.list()
34
+ print(agents)
35
+
36
+ await sdk.close()
37
+
38
+
39
+ asyncio.run(main())
40
+ ```
41
+
42
+ ## Authentication
43
+
44
+ The SDK supports two authentication methods via the `auth` parameter.
45
+
46
+ ### API key (default)
47
+
48
+ A plain string is wrapped automatically in `ApiKeyAuthenticationProvider` and
49
+ sent as the `x-persona-apikey` header. Accepts:
50
+
51
+ - Master key (full admin access)
52
+ - Project API key (`prs_...`)
53
+ - Agent API key (`prs_ag_...`)
54
+
55
+ ```python
56
+ from persona_sdk import PersonaSdk
57
+
58
+ sdk = PersonaSdk(
59
+ base_url="https://persona.applica.guru/api",
60
+ auth="prs_your_project_api_key",
61
+ )
62
+ ```
63
+
64
+ ### IAM Bearer token
65
+
66
+ For applications that authenticate users via IAM, pass a
67
+ `BearerTokenAuthenticationProvider` with a valid JWT:
68
+
69
+ ```python
70
+ from persona_sdk import PersonaSdk, BearerTokenAuthenticationProvider
71
+
72
+ sdk = PersonaSdk(
73
+ base_url="https://persona.applica.guru/api",
74
+ auth=BearerTokenAuthenticationProvider(iam_jwt_token),
75
+ )
76
+ ```
77
+
78
+ The token is sent as the `Authorization: Bearer <token>` header. The server
79
+ validates it via the IAM service and resolves the user's project automatically.
80
+
81
+ ### Custom provider
82
+
83
+ Implement your own provider by subclassing `AuthenticationProvider`:
84
+
85
+ ```python
86
+ from persona_sdk import AuthenticationProvider
87
+
88
+ class MyProvider(AuthenticationProvider):
89
+ def headers(self) -> dict[str, str]:
90
+ return {"x-custom-header": "value"}
91
+
92
+ def credentials(self) -> str:
93
+ return "my-credentials"
94
+ ```
95
+
96
+ ## Available APIs
97
+
98
+ The `PersonaSdk` instance exposes one client per resource:
99
+
100
+ | Attribute | Description |
101
+ |-----------|-------------|
102
+ | `sdk.agents` | Agent management (CRUD, voices) |
103
+ | `sdk.projects` | Project management and subscriptions |
104
+ | `sdk.sessions` | Sessions, messages, usage |
105
+ | `sdk.knowledge_bases` | Knowledge bases, documents, chunk search |
106
+ | `sdk.workflows` | Workflows, executions, queues |
107
+ | `sdk.triggers` | Triggers and trigger executions |
108
+ | `sdk.missions` | Missions (generate, execute, stop, continue) |
109
+ | `sdk.features` | Feature templates and MCP tools |
110
+ | `sdk.credentials` | OAuth credentials and authorization |
111
+ | `sdk.service_prices` | Service pricing |
112
+
113
+ Each API method is fully async. Always close the SDK when done:
114
+
115
+ ```python
116
+ sdk = PersonaSdk(...)
117
+ try:
118
+ agents = await sdk.agents.list()
119
+ finally:
120
+ await sdk.close()
121
+ ```
122
+
123
+ Or use it as an async context manager pattern:
124
+
125
+ ```python
126
+ sdk = PersonaSdk(...)
127
+ async with sdk.client._client: # internal httpx client
128
+ ...
129
+ ```
130
+
131
+ ## CRUD example
132
+
133
+ ```python
134
+ # Create an agent
135
+ agent = await sdk.agents.create({
136
+ "name": "my-agent",
137
+ "model": {"modelName": "gpt-4o"},
138
+ })
139
+
140
+ # Read
141
+ fetched = await sdk.agents.get(agent["id"])
142
+
143
+ # Update
144
+ fetched["name"] = "renamed-agent"
145
+ await sdk.agents.update(agent["id"], fetched)
146
+
147
+ # Delete
148
+ await sdk.agents.delete(agent["id"])
149
+ ```
150
+
151
+ ## Pagination
152
+
153
+ List endpoints accept `keyword`, `page`, and `size`:
154
+
155
+ ```python
156
+ result = await sdk.agents.list(keyword="bot", page=1, size=20)
157
+ # {
158
+ # "items": [...],
159
+ # "total": 42,
160
+ # "page": 1,
161
+ # "size": 20
162
+ # }
163
+ ```
164
+
165
+ ## Workflows
166
+
167
+ If your workflows service runs on a different host, pass `workflows_url`:
168
+
169
+ ```python
170
+ sdk = PersonaSdk(
171
+ base_url="https://persona.applica.guru/api",
172
+ auth="prs_...",
173
+ workflows_url="https://persona.applica.guru/workflows",
174
+ )
175
+
176
+ # Execute a workflow
177
+ result = await sdk.workflows.execute(
178
+ workflow_id="wf-123",
179
+ data={"input": "value"},
180
+ )
181
+ ```
182
+
183
+ ## Runners
184
+
185
+ For higher-level abstractions, the SDK provides runners:
186
+
187
+ ```python
188
+ from persona_sdk import PersonaClient
189
+ from persona_sdk.runners import AgentRunner, invoke_tool, retrieve_resource
190
+
191
+ client = PersonaClient(
192
+ base_url="https://persona.applica.guru/api",
193
+ auth="prs_...",
194
+ )
195
+
196
+ # Run an agent in an existing session
197
+ runner = AgentRunner(client=client, agent_id="agent-1", session_code="sess-1")
198
+ response = await runner.run("Hello, agent!")
199
+
200
+ # Invoke an MCP tool directly
201
+ result = await invoke_tool(
202
+ client=client,
203
+ mcp_server_name="my-mcp",
204
+ transport=...,
205
+ tool_name="search",
206
+ args={"query": "hello"},
207
+ )
208
+ ```
209
+
210
+ ## Proxy support
211
+
212
+ ```python
213
+ sdk = PersonaSdk(
214
+ base_url="https://persona.applica.guru/api",
215
+ auth="prs_...",
216
+ proxy="http://proxy.local:8080",
217
+ )
218
+ ```
219
+
220
+ ## License
221
+
222
+ Proprietary — © Applica Software Guru
@@ -0,0 +1,17 @@
1
+ image: python:3.12
2
+
3
+ pipelines:
4
+ default:
5
+ - step:
6
+ name: Publish to PyPI
7
+ caches:
8
+ - pip
9
+ script:
10
+ - apt-get update && apt-get install -y git
11
+ - pip install build twine
12
+ - export VERSION=0.2.$BITBUCKET_BUILD_NUMBER
13
+ - sed -i "s/^version = .*/version = \"$VERSION\"/" pyproject.toml
14
+ - python -m build
15
+ - twine upload dist/* -u __token__ -p $PYPI_TOKEN
16
+ - git tag -a $VERSION -m "$VERSION"
17
+ - git push origin $VERSION
@@ -0,0 +1,100 @@
1
+ from typing import Union
2
+
3
+ from persona_sdk.api.agents import AgentsApi
4
+ from persona_sdk.api.credentials import CredentialsApi
5
+ from persona_sdk.api.features import FeaturesApi
6
+ from persona_sdk.api.knowledge_bases import KnowledgeBasesApi
7
+ from persona_sdk.api.missions import MissionsApi
8
+ from persona_sdk.api.projects import ProjectsApi
9
+ from persona_sdk.api.service_prices import ServicePricesApi
10
+ from persona_sdk.api.sessions import SessionsApi
11
+ from persona_sdk.api.triggers import TriggersApi
12
+ from persona_sdk.api.workflows import WorkflowsApi
13
+ from persona_sdk.auth import (
14
+ ApiKeyAuthenticationProvider,
15
+ AuthenticationProvider,
16
+ BearerTokenAuthenticationProvider,
17
+ )
18
+ from persona_sdk.client import PersonaClient
19
+
20
+ __all__ = [
21
+ "PersonaSdk",
22
+ "PersonaClient",
23
+ "AuthenticationProvider",
24
+ "ApiKeyAuthenticationProvider",
25
+ "BearerTokenAuthenticationProvider",
26
+ "AgentsApi",
27
+ "CredentialsApi",
28
+ "FeaturesApi",
29
+ "KnowledgeBasesApi",
30
+ "MissionsApi",
31
+ "ProjectsApi",
32
+ "ServicePricesApi",
33
+ "SessionsApi",
34
+ "TriggersApi",
35
+ "WorkflowsApi",
36
+ ]
37
+
38
+
39
+ class PersonaSdk:
40
+ """
41
+ Persona SDK facade.
42
+
43
+ Args:
44
+ base_url: Base URL of persona-core (e.g. https://persona.applica.guru/api).
45
+ auth: An ``AuthenticationProvider`` (preferred) or a plain string with
46
+ the API key / JWT token. Strings are wrapped in
47
+ ``ApiKeyAuthenticationProvider`` for backwards compatibility.
48
+ proxy: Optional HTTP proxy URL.
49
+ workflows_url: Optional separate base URL for the workflows service.
50
+ If provided, a second client is created using the same auth.
51
+ api_key: Deprecated keyword-only alias for ``auth``. Provided for
52
+ backwards compatibility with previous SDK versions.
53
+
54
+ Examples:
55
+ Using an API key (legacy)::
56
+
57
+ sdk = PersonaSdk("http://localhost:8000", "prs_my_key")
58
+
59
+ Using an IAM Bearer token::
60
+
61
+ from persona_sdk import BearerTokenAuthenticationProvider
62
+ sdk = PersonaSdk(
63
+ "http://localhost:8000",
64
+ BearerTokenAuthenticationProvider(jwt_token),
65
+ )
66
+ """
67
+
68
+ def __init__(
69
+ self,
70
+ base_url: str,
71
+ auth: Union[str, AuthenticationProvider, None] = None,
72
+ proxy: str = None,
73
+ workflows_url: str = None,
74
+ api_key: str = None,
75
+ ):
76
+ # Backwards compatibility: keep the legacy `api_key` keyword
77
+ if auth is None:
78
+ if api_key is None:
79
+ raise ValueError("Either 'auth' or 'api_key' must be provided")
80
+ auth = api_key
81
+
82
+ self.client = PersonaClient(base_url, auth, proxy=proxy)
83
+ self.workflows_client = (
84
+ PersonaClient(workflows_url, auth) if workflows_url else self.client
85
+ )
86
+ self.agents = AgentsApi(self.client)
87
+ self.workflows = WorkflowsApi(self.workflows_client)
88
+ self.triggers = TriggersApi(self.client)
89
+ self.sessions = SessionsApi(self.client)
90
+ self.credentials = CredentialsApi(self.client)
91
+ self.knowledge_bases = KnowledgeBasesApi(self.client)
92
+ self.projects = ProjectsApi(self.client)
93
+ self.features = FeaturesApi(self.client)
94
+ self.missions = MissionsApi(self.client)
95
+ self.service_prices = ServicePricesApi(self.client)
96
+
97
+ async def close(self):
98
+ await self.client.close()
99
+ if self.workflows_client is not self.client:
100
+ await self.workflows_client.close()
@@ -0,0 +1,11 @@
1
+ """Authentication providers for the Persona SDK."""
2
+
3
+ from persona_sdk.auth.api_key_auth import ApiKeyAuthenticationProvider
4
+ from persona_sdk.auth.base import AuthenticationProvider
5
+ from persona_sdk.auth.bearer_token_auth import BearerTokenAuthenticationProvider
6
+
7
+ __all__ = [
8
+ "AuthenticationProvider",
9
+ "ApiKeyAuthenticationProvider",
10
+ "BearerTokenAuthenticationProvider",
11
+ ]