maf-sandbox-codeact 0.7.0__tar.gz → 0.7.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maf-sandbox-codeact
3
- Version: 0.7.0
3
+ Version: 0.7.2
4
4
  Summary: CodeAct as a Microsoft Agent Framework tool — the model writes a short Python program and it runs inside a sandbox — written against maf-sandbox so it runs on any sandbox backend.
5
5
  Keywords: codeact,code-execution,sandbox,agent-framework,microsoft-agent-framework
6
6
  Author: SOKOLAI BV
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Programming Language :: Python :: 3.14
17
17
  Classifier: Topic :: Software Development :: Interpreters
18
- Requires-Dist: maf-sandbox>=0.19.0,<0.21
18
+ Requires-Dist: maf-sandbox>=0.20.0,<0.22
19
19
  Requires-Dist: agent-framework-core>=1.13.0,<2
20
20
  Requires-Python: >=3.12, <3.15
21
21
  Project-URL: Homepage, https://www.sokol.ai
@@ -132,6 +132,21 @@ Naming a host is a real widening, and worth naming as such: this sandbox runs mo
132
132
 
133
133
  **Isolation is the host's call, and a store changes what that call is about.** This kind does not raise `SandboxSpec.min_isolation`, so the router's floor governs — `MICROVM` unless the host opted down. A kind that ran code influenced by untrusted external content would pin the floor itself, and this one cannot know whether it is one: with no store and no allowlist, the program's only input is source the model wrote, and opting down to `CONTAINER` weighs model-written code against a shared kernel. **With a store the program also reads whatever those files contain, and with an allowlist whatever an allowed host returns** — so the floor should be chosen against the provenance of everything the program can read, not against this kind's defaults. Only the host knows that.
134
134
 
135
+ ## Upgrading to 0.7
136
+
137
+ `0.7.0` requires `maf-sandbox` 0.19, which made the egress mode a thing a workload declares.
138
+
139
+ **`codeact_sandbox_spec`'s signature is unchanged** — there is no `egress` parameter to pass, because the mode follows from what you already say: name hosts in `egress_allow` and the spec runs in `Egress.ALLOWLIST`, name none and it runs in `Egress.CLOSED`. Nothing to edit.
140
+
141
+ **What changed is what the router does with it.** A backend that cannot enforce the resulting mode is refused at attach rather than permitted with a warning, so a host that wired an allowlist against a backend confining everything used to get a program that failed at the fetch and now gets:
142
+
143
+ ```
144
+ SandboxEgressNotEnforced: sandbox backend 'docker' cannot enforce the 'allowlist'
145
+ egress the 'codeact' workload runs in (it enforces closed).
146
+ ```
147
+
148
+ Give the backend a mode it can enforce — for `maf-sandbox-docker`, configure `egress_proxy_image` — or drop `egress_allow` and let the program run closed. The refusal is deliberate: a program that silently could not reach what its host meant to allow is the failure this replaces.
149
+
135
150
  ## Upgrading to 0.3
136
151
 
137
152
  `0.3.0` follows `maf-sandbox` 0.11, which retired the word `workspace` from the vocabulary. It requires that release.
@@ -140,7 +155,7 @@ Naming a host is a real widening, and worth naming as such: this sandbox runs mo
140
155
 
141
156
  ## What this version is not
142
157
 
143
- The `RUN_CODE` road served by an embedded-interpreter backend is absent on purpose — this kind only ever asks for `EXEC`. Host-tool dispatch is wired (`host_tools`, above), two shipped backends serve it, and what it costs has been measured: [`samples/15_acas_codeact_host_tools`](https://github.com/sokolaidev/maf-extensions/tree/main/samples/15_acas_codeact_host_tools) walks a four-stage lookup on ACAS twice, once dispatched and once through the model's own tool loop, and publishes both against wall clock and tokens ([#302](https://github.com/sokolaidev/maf-extensions/issues/302)). The short version: a dispatch is a serial round trip of about a second. On the run that sample documents it walked the stages in three tool-calling rounds against the direct route's five, and none of the twelve sales figures were written into a call the model made — what comes back to it is the program's finished table. The design that governs capabilities — declared by backends, required by specs, and what `HOST_TOOLS` carries — is [`docs/design/two-axis-sandbox-policy.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/design/two-axis-sandbox-policy.md); the file channels above are specified in [`docs/design/files-out.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/design/files-out.md).
158
+ The `RUN_CODE` road served by an embedded-interpreter backend is absent on purpose — this kind only ever asks for `EXEC`. Host-tool dispatch is wired (`host_tools`, above), two shipped backends serve it, and what it costs has been measured: [`samples/15_acas_codeact_host_tools`](https://github.com/sokolaidev/maf-extensions/tree/main/samples/15_acas_codeact_host_tools) walks a four-stage lookup on ACAS twice, once dispatched and once through the model's own tool loop, and publishes both against wall clock and tokens ([#302](https://github.com/sokolaidev/maf-extensions/issues/302)). The short version: a dispatch is a serial round trip of about a second. On the run that sample documents it walked the stages in three tool-calling rounds against the direct route's five, and none of the twelve sales figures were written into a call the model made — what comes back to it is the program's finished table. The design that governs capabilities — declared by backends, required by specs, and what `HOST_TOOLS` carries — is [`docs/sandbox/capabilities.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/sandbox/capabilities.md), which specifies the file channels above as well; where an artifact lands, and what a dispatched host tool may do, is [`docs/sandbox/hosts.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/sandbox/hosts.md).
144
159
 
145
160
  The sandbox protocol's delete surface is capability-gated, and this kind does not require `FILES_DELETE`. It therefore uses a fresh directory per call for staleness isolation, while the framework reclaims that directory, and everything under it, when the call returns. A program that walks upwards can still open files outside its own directory during the call. The fresh directory removes staleness from the *namespace*, so a program reading `data.csv` gets this call's or nothing. Everything reachable that way belongs to the same conversation and the same agent, since that is what a sandbox is keyed by.
146
161
 
@@ -107,6 +107,21 @@ Naming a host is a real widening, and worth naming as such: this sandbox runs mo
107
107
 
108
108
  **Isolation is the host's call, and a store changes what that call is about.** This kind does not raise `SandboxSpec.min_isolation`, so the router's floor governs — `MICROVM` unless the host opted down. A kind that ran code influenced by untrusted external content would pin the floor itself, and this one cannot know whether it is one: with no store and no allowlist, the program's only input is source the model wrote, and opting down to `CONTAINER` weighs model-written code against a shared kernel. **With a store the program also reads whatever those files contain, and with an allowlist whatever an allowed host returns** — so the floor should be chosen against the provenance of everything the program can read, not against this kind's defaults. Only the host knows that.
109
109
 
110
+ ## Upgrading to 0.7
111
+
112
+ `0.7.0` requires `maf-sandbox` 0.19, which made the egress mode a thing a workload declares.
113
+
114
+ **`codeact_sandbox_spec`'s signature is unchanged** — there is no `egress` parameter to pass, because the mode follows from what you already say: name hosts in `egress_allow` and the spec runs in `Egress.ALLOWLIST`, name none and it runs in `Egress.CLOSED`. Nothing to edit.
115
+
116
+ **What changed is what the router does with it.** A backend that cannot enforce the resulting mode is refused at attach rather than permitted with a warning, so a host that wired an allowlist against a backend confining everything used to get a program that failed at the fetch and now gets:
117
+
118
+ ```
119
+ SandboxEgressNotEnforced: sandbox backend 'docker' cannot enforce the 'allowlist'
120
+ egress the 'codeact' workload runs in (it enforces closed).
121
+ ```
122
+
123
+ Give the backend a mode it can enforce — for `maf-sandbox-docker`, configure `egress_proxy_image` — or drop `egress_allow` and let the program run closed. The refusal is deliberate: a program that silently could not reach what its host meant to allow is the failure this replaces.
124
+
110
125
  ## Upgrading to 0.3
111
126
 
112
127
  `0.3.0` follows `maf-sandbox` 0.11, which retired the word `workspace` from the vocabulary. It requires that release.
@@ -115,7 +130,7 @@ Naming a host is a real widening, and worth naming as such: this sandbox runs mo
115
130
 
116
131
  ## What this version is not
117
132
 
118
- The `RUN_CODE` road served by an embedded-interpreter backend is absent on purpose — this kind only ever asks for `EXEC`. Host-tool dispatch is wired (`host_tools`, above), two shipped backends serve it, and what it costs has been measured: [`samples/15_acas_codeact_host_tools`](https://github.com/sokolaidev/maf-extensions/tree/main/samples/15_acas_codeact_host_tools) walks a four-stage lookup on ACAS twice, once dispatched and once through the model's own tool loop, and publishes both against wall clock and tokens ([#302](https://github.com/sokolaidev/maf-extensions/issues/302)). The short version: a dispatch is a serial round trip of about a second. On the run that sample documents it walked the stages in three tool-calling rounds against the direct route's five, and none of the twelve sales figures were written into a call the model made — what comes back to it is the program's finished table. The design that governs capabilities — declared by backends, required by specs, and what `HOST_TOOLS` carries — is [`docs/design/two-axis-sandbox-policy.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/design/two-axis-sandbox-policy.md); the file channels above are specified in [`docs/design/files-out.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/design/files-out.md).
133
+ The `RUN_CODE` road served by an embedded-interpreter backend is absent on purpose — this kind only ever asks for `EXEC`. Host-tool dispatch is wired (`host_tools`, above), two shipped backends serve it, and what it costs has been measured: [`samples/15_acas_codeact_host_tools`](https://github.com/sokolaidev/maf-extensions/tree/main/samples/15_acas_codeact_host_tools) walks a four-stage lookup on ACAS twice, once dispatched and once through the model's own tool loop, and publishes both against wall clock and tokens ([#302](https://github.com/sokolaidev/maf-extensions/issues/302)). The short version: a dispatch is a serial round trip of about a second. On the run that sample documents it walked the stages in three tool-calling rounds against the direct route's five, and none of the twelve sales figures were written into a call the model made — what comes back to it is the program's finished table. The design that governs capabilities — declared by backends, required by specs, and what `HOST_TOOLS` carries — is [`docs/sandbox/capabilities.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/sandbox/capabilities.md), which specifies the file channels above as well; where an artifact lands, and what a dispatched host tool may do, is [`docs/sandbox/hosts.md`](https://github.com/sokolaidev/maf-extensions/blob/main/docs/sandbox/hosts.md).
119
134
 
120
135
  The sandbox protocol's delete surface is capability-gated, and this kind does not require `FILES_DELETE`. It therefore uses a fresh directory per call for staleness isolation, while the framework reclaims that directory, and everything under it, when the call returns. A program that walks upwards can still open files outside its own directory during the call. The fresh directory removes staleness from the *namespace*, so a program reading `data.csv` gets this call's or nothing. Everything reachable that way belongs to the same conversation and the same agent, since that is what a sandbox is keyed by.
121
136
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "maf-sandbox-codeact"
3
- version = "0.7.0"
3
+ version = "0.7.2"
4
4
  description = "CodeAct as a Microsoft Agent Framework tool — the model writes a short Python program and it runs inside a sandbox — written against maf-sandbox so it runs on any sandbox backend."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.15"
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Topic :: Software Development :: Interpreters",
25
25
  ]
26
26
  dependencies = [
27
- "maf-sandbox>=0.19.0,<0.21",
27
+ "maf-sandbox>=0.20.0,<0.22",
28
28
  "agent-framework-core>=1.13.0,<2",
29
29
  ]
30
30
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "maf-sandbox-codeact"
3
- version = "0.7.0"
3
+ version = "0.7.2"
4
4
  description = "CodeAct as a Microsoft Agent Framework tool — the model writes a short Python program and it runs inside a sandbox — written against maf-sandbox so it runs on any sandbox backend."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.15"
@@ -34,7 +34,7 @@ dependencies = [
34
34
  # published wheel resolves a maf-sandbox base missing those imports. The number itself is
35
35
  # below, and `scripts/set_dependents_range.py` moves it — so this says which release the
36
36
  # floor is for, never which release that is.
37
- "maf-sandbox>=0.19.0,<0.21",
37
+ "maf-sandbox>=0.20.0,<0.22",
38
38
  # The `@tool` decorator. MAF is a genuine dependency of the tool itself, not of the host
39
39
  # application.
40
40
  "agent-framework-core>=1.13.0,<2",