Skip to content

Commit 775232a

Browse files
committed
fix: align session and resource contracts with QCA docs
1 parent 25dcc1a commit 775232a

27 files changed

Lines changed: 531 additions & 8 deletions

‎CHANGELOG.md‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ existing `0.1.0` release; earlier development prereleases are not listed.
55

66
## [Unreleased]
77

8+
### Added
9+
10+
- Add typed Forward Session budgets across create/update responses and events, including omission, explicit null clearing and decimal-string limits.
11+
- Add Forward Session `config.model` overrides and model `speed` configuration, plus optional approval evaluation details, Outcome/status event fields and cumulative top-level Credits on `session.usage`.
12+
- Add `startup_script` to Forward/Managed Environment models and Managed cloud/self-hosted parameters. It runs on sandbox start/resume; the external worker controls self-hosted execution.
13+
- Add Managed Memory `version`, version `redacted`, and Vault creation-response `credentials` fields. Vault creation still does not accept credentials in its request.
14+
15+
### Fixed
16+
17+
- Declare Managed Memory list-item metadata/version fields so strict response parsing provides typed access instead of unknown attributes.
18+
19+
### Migration
20+
21+
- Forward `sessions.create()` and `sessions.update()` accept `budget=` directly. Omit it to keep the default/current limit, or pass `None` to clear it.
22+
- Omit `config.model` on create to inherit; `{"model": None}` restores inheritance on update. Optional approval details are under `event.evaluation.evaluated_permission`; the top-level approval result remains a string, with legacy object parsing retained for compatibility.
23+
- Managed Thread `usage` is deprecated because current responses omit it; read Session Credits instead. Treat `session.usage` as cumulative snapshots rather than adding successive events.
24+
825
### Changed
926

1027
- Remove resource-specific sections and inventories from the README to keep it focused on SDK setup and shared client behavior.

‎docs/api/reference.md‎

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8500,6 +8500,7 @@ def create(
85008500
*,
85018501
identity_id: str,
85028502
template_id: str,
8503+
budget: Union[BudgetLimitParam, None, NotGiven] = NOT_GIVEN,
85038504
title: Union[str, None, NotGiven] = NOT_GIVEN,
85048505
metadata: Union[Dict[str, Any], None, NotGiven] = NOT_GIVEN,
85058506
config: Union[SessionCreateParamsConfigParam, None,
@@ -8545,6 +8546,7 @@ GET /sessions/{session_id}.
85458546
def update(
85468547
session_id: str,
85478548
*,
8549+
budget: Union[BudgetLimitParam, None, NotGiven] = NOT_GIVEN,
85488550
title: Union[str, None, NotGiven] = NOT_GIVEN,
85498551
metadata: Union[Dict[str, Any], None, NotGiven] = NOT_GIVEN,
85508552
config: Union[SessionUpdateParamsConfigParam, None,
@@ -8688,6 +8690,7 @@ async def create(
86888690
*,
86898691
identity_id: str,
86908692
template_id: str,
8693+
budget: Union[BudgetLimitParam, None, NotGiven] = NOT_GIVEN,
86918694
title: Union[str, None, NotGiven] = NOT_GIVEN,
86928695
metadata: Union[Dict[str, Any], None, NotGiven] = NOT_GIVEN,
86938696
config: Union[SessionCreateParamsConfigParam, None,
@@ -8733,6 +8736,7 @@ GET /sessions/{session_id}.
87338736
async def update(
87348737
session_id: str,
87358738
*,
8739+
budget: Union[BudgetLimitParam, None, NotGiven] = NOT_GIVEN,
87368740
title: Union[str, None, NotGiven] = NOT_GIVEN,
87378741
metadata: Union[Dict[str, Any], None, NotGiven] = NOT_GIVEN,
87388742
config: Union[SessionUpdateParamsConfigParam, None,
@@ -11575,6 +11579,50 @@ class BatchUsage(BaseModel)
1157511579

1157611580
#### total\_credits
1157711581

11582+
<a id="qca.forward.types.budget_limit"></a>
11583+
11584+
# qca.forward.types.budget\_limit
11585+
11586+
<a id="qca.forward.types.budget_limit.BudgetLimit"></a>
11587+
11588+
## BudgetLimit
11589+
11590+
```python
11591+
class BudgetLimit(BaseModel)
11592+
```
11593+
11594+
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/budget_limit.py)
11595+
11596+
<a id="qca.forward.types.budget_limit.BudgetLimit.max_credit_cost"></a>
11597+
11598+
#### max\_credit\_cost
11599+
11600+
<a id="qca.forward.types.budget_limit.BudgetLimit.type"></a>
11601+
11602+
#### type
11603+
11604+
<a id="qca.forward.types.budget_limit_param"></a>
11605+
11606+
# qca.forward.types.budget\_limit\_param
11607+
11608+
<a id="qca.forward.types.budget_limit_param.BudgetLimitParam"></a>
11609+
11610+
## BudgetLimitParam
11611+
11612+
```python
11613+
class BudgetLimitParam(TypedDict)
11614+
```
11615+
11616+
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/budget_limit_param.py)
11617+
11618+
<a id="qca.forward.types.budget_limit_param.BudgetLimitParam.max_credit_cost"></a>
11619+
11620+
#### max\_credit\_cost
11621+
11622+
<a id="qca.forward.types.budget_limit_param.BudgetLimitParam.type"></a>
11623+
11624+
#### type
11625+
1157811626
<a id="qca.forward.types.channel"></a>
1157911627

1158011628
# qca.forward.types.channel
@@ -13496,6 +13544,10 @@ class EnvironmentConfig(BaseModel)
1349613544

1349713545
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/environment_config.py)
1349813546

13547+
<a id="qca.forward.types.environment_config.EnvironmentConfig.startup_script"></a>
13548+
13549+
#### startup\_script
13550+
1349913551
<a id="qca.forward.types.environment_config.EnvironmentConfig.setup_script"></a>
1350013552

1350113553
#### setup\_script
@@ -15444,6 +15496,10 @@ class ModelConfig(BaseModel)
1544415496

1544515497
#### effort
1544615498

15499+
<a id="qca.forward.types.model_config.ModelConfig.speed"></a>
15500+
15501+
#### speed
15502+
1544715503
<a id="qca.forward.types.model_config.ModelConfig.context_window"></a>
1544815504

1544915505
#### context\_window
@@ -15470,6 +15526,10 @@ class ModelConfigParam(TypedDict)
1547015526

1547115527
#### effort
1547215528

15529+
<a id="qca.forward.types.model_config_param.ModelConfigParam.speed"></a>
15530+
15531+
#### speed
15532+
1547315533
<a id="qca.forward.types.model_config_param.ModelConfigParam.context_window"></a>
1547415534

1547515535
#### context\_window
@@ -17360,6 +17420,10 @@ class Session(BaseModel)
1736017420

1736117421
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session.py)
1736217422

17423+
<a id="qca.forward.types.session.Session.budget"></a>
17424+
17425+
#### budget
17426+
1736317427
<a id="qca.forward.types.session.Session.outcome_evaluations"></a>
1736417428

1736517429
#### outcome\_evaluations
@@ -17474,6 +17538,10 @@ class SessionConfig(BaseModel)
1747417538

1747517539
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_config.py)
1747617540

17541+
<a id="qca.forward.types.session_config.SessionConfig.model"></a>
17542+
17543+
#### model
17544+
1747717545
<a id="qca.forward.types.session_config.SessionConfig.environment_variables"></a>
1747817546

1747917547
#### environment\_variables
@@ -17492,6 +17560,10 @@ class SessionCreateParams(TypedDict)
1749217560

1749317561
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_create_params.py)
1749417562

17563+
<a id="qca.forward.types.session_create_params.SessionCreateParams.budget"></a>
17564+
17565+
#### budget
17566+
1749517567
<a id="qca.forward.types.session_create_params.SessionCreateParams.identity_id"></a>
1749617568

1749717569
#### identity\_id
@@ -17534,6 +17606,10 @@ class SessionCreateParamsConfigParam(TypedDict)
1753417606

1753517607
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_create_params_config_param.py)
1753617608

17609+
<a id="qca.forward.types.session_create_params_config_param.SessionCreateParamsConfigParam.model"></a>
17610+
17611+
#### model
17612+
1753717613
<a id="qca.forward.types.session_create_params_config_param.SessionCreateParamsConfigParam.environment_variables"></a>
1753817614

1753917615
#### environment\_variables
@@ -17552,6 +17628,42 @@ class SessionEvent(BaseModel)
1755217628

1755317629
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_event.py)
1755417630

17631+
<a id="qca.forward.types.session_event.SessionEvent.evaluation"></a>
17632+
17633+
#### evaluation
17634+
17635+
<a id="qca.forward.types.session_event.SessionEvent.budget"></a>
17636+
17637+
#### budget
17638+
17639+
<a id="qca.forward.types.session_event.SessionEvent.reason"></a>
17640+
17641+
#### reason
17642+
17643+
<a id="qca.forward.types.session_event.SessionEvent.iteration"></a>
17644+
17645+
#### iteration
17646+
17647+
<a id="qca.forward.types.session_event.SessionEvent.explanation"></a>
17648+
17649+
#### explanation
17650+
17651+
<a id="qca.forward.types.session_event.SessionEvent.outcome_evaluation_start_id"></a>
17652+
17653+
#### outcome\_evaluation\_start\_id
17654+
17655+
<a id="qca.forward.types.session_event.SessionEvent.model_credits"></a>
17656+
17657+
#### model\_credits
17658+
17659+
<a id="qca.forward.types.session_event.SessionEvent.sandbox_runtime_credits"></a>
17660+
17661+
#### sandbox\_runtime\_credits
17662+
17663+
<a id="qca.forward.types.session_event.SessionEvent.total_credits"></a>
17664+
17665+
#### total\_credits
17666+
1755517667
<a id="qca.forward.types.session_event.SessionEvent.id"></a>
1755617668

1755717669
#### id
@@ -18398,6 +18510,10 @@ class SessionUpdateParams(TypedDict)
1839818510

1839918511
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_update_params.py)
1840018512

18513+
<a id="qca.forward.types.session_update_params.SessionUpdateParams.budget"></a>
18514+
18515+
#### budget
18516+
1840118517
<a id="qca.forward.types.session_update_params.SessionUpdateParams.title"></a>
1840218518

1840318519
#### title
@@ -18428,6 +18544,10 @@ class SessionUpdateParamsConfigParam(TypedDict)
1842818544

1842918545
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/session_update_params_config_param.py)
1843018546

18547+
<a id="qca.forward.types.session_update_params_config_param.SessionUpdateParamsConfigParam.model"></a>
18548+
18549+
#### model
18550+
1843118551
<a id="qca.forward.types.session_update_params_config_param.SessionUpdateParamsConfigParam.environment_variables"></a>
1843218552

1843318553
#### environment\_variables
@@ -19420,6 +19540,50 @@ class Tool(BaseModel)
1942019540

1942119541
#### input\_schema
1942219542

19543+
<a id="qca.forward.types.tool_approval_evaluation"></a>
19544+
19545+
# qca.forward.types.tool\_approval\_evaluation
19546+
19547+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalDecision"></a>
19548+
19549+
## ToolApprovalDecision
19550+
19551+
```python
19552+
class ToolApprovalDecision(BaseModel)
19553+
```
19554+
19555+
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/tool_approval_evaluation.py)
19556+
19557+
Automatic decision; reason_code may be indeterminate or high_risk.
19558+
19559+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalDecision.type"></a>
19560+
19561+
#### type
19562+
19563+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalDecision.reason_code"></a>
19564+
19565+
#### reason\_code
19566+
19567+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalEvaluation"></a>
19568+
19569+
## ToolApprovalEvaluation
19570+
19571+
```python
19572+
class ToolApprovalEvaluation(BaseModel)
19573+
```
19574+
19575+
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/forward/types/tool_approval_evaluation.py)
19576+
19577+
Policy source (always_allow, always_ask, auto) and optional automatic decision.
19578+
19579+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalEvaluation.type"></a>
19580+
19581+
#### type
19582+
19583+
<a id="qca.forward.types.tool_approval_evaluation.ToolApprovalEvaluation.evaluated_permission"></a>
19584+
19585+
#### evaluated\_permission
19586+
1942319587
<a id="qca.forward.types.tool_config"></a>
1942419588

1942519589
# qca.forward.types.tool\_config
@@ -28217,6 +28381,10 @@ class CloudConfigParams(TypedDict)
2821728381

2821828382
#### storage
2821928383

28384+
<a id="qca.managed.types.cloud_config_params.CloudConfigParams.startup_script"></a>
28385+
28386+
#### startup\_script
28387+
2822028388
<a id="qca.managed.types.cloud_config_params.CloudConfigParams.setup_script"></a>
2822128389

2822228390
#### setup\_script
@@ -30301,6 +30469,10 @@ class EnvironmentConfigUnion(BaseModel)
3030130469

3030230470
#### storage
3030330471

30472+
<a id="qca.managed.types.environment_config_union.EnvironmentConfigUnion.startup_script"></a>
30473+
30474+
#### startup\_script
30475+
3030430476
<a id="qca.managed.types.environment_config_union.EnvironmentConfigUnion.setup_script"></a>
3030530477

3030630478
#### setup\_script
@@ -31939,6 +32111,10 @@ class Memory(BaseModel)
3193932111

3194032112
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/memory.py)
3194132113

32114+
<a id="qca.managed.types.memory.Memory.version"></a>
32115+
32116+
#### version
32117+
3194232118
<a id="qca.managed.types.memory.Memory.metadata"></a>
3194332119

3194432120
#### metadata
@@ -31997,6 +32173,14 @@ class MemoryListItemUnion(BaseModel)
3199732173

3199832174
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/memory_list_item_union.py)
3199932175

32176+
<a id="qca.managed.types.memory_list_item_union.MemoryListItemUnion.metadata"></a>
32177+
32178+
#### metadata
32179+
32180+
<a id="qca.managed.types.memory_list_item_union.MemoryListItemUnion.version"></a>
32181+
32182+
#### version
32183+
3200032184
<a id="qca.managed.types.memory_list_item_union.MemoryListItemUnion.id"></a>
3200132185

3200232186
#### id
@@ -32665,6 +32849,10 @@ class MemoryVersion(BaseModel)
3266532849

3266632850
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/memory_version.py)
3266732851

32852+
<a id="qca.managed.types.memory_version.MemoryVersion.redacted"></a>
32853+
32854+
#### redacted
32855+
3266832856
<a id="qca.managed.types.memory_version.MemoryVersion.id"></a>
3266932857

3267032858
#### id
@@ -33707,6 +33895,10 @@ class SelfHostedConfigParams(TypedDict)
3370733895

3370833896
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/self_hosted_config_params.py)
3370933897

33898+
<a id="qca.managed.types.self_hosted_config_params.SelfHostedConfigParams.startup_script"></a>
33899+
33900+
#### startup\_script
33901+
3371033902
<a id="qca.managed.types.self_hosted_config_params.SelfHostedConfigParams.setup_script"></a>
3371133903

3371233904
#### setup\_script
@@ -36195,6 +36387,8 @@ class SessionThreadUsage(BaseModel)
3619536387

3619636388
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/session_thread_usage.py)
3619736389

36390+
Deprecated legacy Token/list-cost usage; current Thread responses omit it.
36391+
3619836392
<a id="qca.managed.types.session_thread_usage.SessionThreadUsage.active_seconds"></a>
3619936393

3620036394
#### active\_seconds
@@ -37967,6 +38161,10 @@ class Vault(BaseModel)
3796738161

3796838162
[[view_source]](https://github.com/QoderAI/qoder-cloud-agents-sdk-python/blob/main/src/qca/managed/types/vault.py)
3796938163

38164+
<a id="qca.managed.types.vault.Vault.credentials"></a>
38165+
38166+
#### credentials
38167+
3797038168
<a id="qca.managed.types.vault.Vault.id"></a>
3797138169

3797238170
#### id

0 commit comments

Comments
 (0)