Repository navigation
Promptise Foundry 1.8.0
A security fix for multi-tenant approval review, internal APIs in OpenAPIProvider, and a cap for large tool results that tells the model when a result was cut.
Security
PendingApprover's reviewer tools crossed tenants --approvals_listreturned every pending call on the server, arguments included, andapprovals_decidereleased any of them, so on a multi-tenant server one tenant's approver could read and approve another tenant's call. Both tools are now scoped to the reviewer'stenant_id: another tenant's request is invisible and answered like an unknown id.PendingApprover(same_tenant_reviewers=False)keeps one platform-wide review team.
Upgrade notes
- Approvers need the tenant of the calls they review. A reviewer key without a
tenant_idnow sees only requests without one. If one review team decides for every tenant, passsame_tenant_reviewers=False. OpenAPIProvider.register()fails fast without an absolute API address. A spec with noserversentry, or a relative one and no spec URL to resolve it against, now raises aValueErrorat registration instead of failing every call. Passbase_url.ToolNode(max_result_chars=...)output changed. A cut result now ends with a marker line; code that compared the cut text exactly needs updating.
Added
ContextCompaction(max_result_chars=...)-- cap every new tool result the agent passes to the model. A longer result is cut and ends with a marker that gives its full length and tells the model to call again with narrower arguments. Off by default (None: results pass in full) and independent ofenabled. Without a marker, a model given a cut result tends to repeat the same call.OpenAPIProvider(allow_private=True)-- bridge an internal API on purpose. A spec URL or base URL on a loopback, private or link-local address is still refused by default.
Fixed
OpenAPIProvidertold you to usebase_urlfor internal APIs, which was refused too -- the error now namesallow_private=True.- A relative
serversURL (/v1) made every OpenAPI tool call fail with "Request URL is missing an 'http://' or 'https://' protocol". It is now resolved against the spec's URL. When there is no spec URL to resolve against (a file or dict spec), or the spec has noserversentry,register()raises aValueErrorthat says to passbase_url. ToolNode(max_result_chars=...)cut results silently -- a cut result now ends with the same marker.- The docs did not say that
Depends()runs before authentication and guards -- a dependency cannot read the caller's tenant, roles or scopes. The MCP server security page now says so and shows where to read them instead.
Full changelog: https://docs.promptise.com/resources/changelog/