Minor Changes
-
a70543b: Agent access is decided only by the
Authorizer: standalone/OIDC lets everyone list and use agents and restricts update/delete to the creator; TrueFoundry uses external permissions api.You can read a session, turn, events, metrics, schedule, or its runs if you created it, or if you manage the named agent it is bound to. Creating still requires permission to use that agent. Only the creator can update, delete, or cancel a session, create a turn, or download sandbox files. Only the creator can update, delete, pause, resume, or run a schedule. An OIDC settings admin can no longer see other users' schedules.
-
9bfcdaa: Replace string creator fields (
created_by/triggered_by) with a non-nullcreated_by_subjectJSON object on agent, session, schedule, and schedule_run. Ownership and list filters usetenant_id+created_by_subject.subject_id. -
0297727: Add context-management compaction triggers with model-aware defaults and migrate persisted legacy token thresholds.
-
8f1a2dc: [truefoundry] Add a TrueFoundry-managed model registry. When
TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URLis set, models are listed from the TrueFoundry ServiceFoundry server and turns are routed through the tenant's default AI Gateway with the caller's token. Mutually exclusive with OIDC. Supports internal mutual TLS to the ServiceFoundry server viaTRUEFOUNDRY_MTLS_ENABLED/TRUEFOUNDRY_MTLS_CERTS_DIR. -
e4c4b56: Add built-in web search/fetch system tools (Parallel via
parallel-web), gated byAgentSpec.config.web_search(default off) and TrueFoundry-mode host envTRUEFOUNDRY_WEB_SEARCH_PROVIDER. New drafts seedweb_search.enabledfrom/capabilitieswhen a provider is configured.
Patch Changes
- 354991d: Prefer OpenUI for inline charts over sandbox plot images when OpenUI is available.
- fad55d8: Persist turn ownership as
active_executor_idon the turn row, mint plain ULID turn ids, and peer cancel via the DB owner instead of embedding the executor in the turn id. - d89b2ff: Persist zero-initialized metrics on agent sessions.
- 172bf14: Add caller-scoped session metrics meters, charts, and chart-data under
/internal/metricsvia a server-ownedISessionMetricsStore. - d89b2ff: Fold session metrics totals on createTurn and terminal writes.
- db37b6e: Sandbox skills: unify git and registry mounts onto
.tfy-desired-skills.json(SkillMounter + skill_downloader), and always attach a mounter so existing skills are cleaned up. - 762ecc0: [truefoundry] TrueFoundry skills catalog: proxy GET /skills and /skills/versions from ServiceFoundry; settings skill writes return 424. SkillManifest is a type-discriminated oneOf of GitSkill | TrueFoundryRegistrySkill (
type: truefoundry; name is FQN, display_name is short). AvailableSkill exposes optional metadata (display_name, repository_name, version). AgentSpec skill refs allow opaque FQN names, optional preload (registry), and max 50. UI draft skill mounts map catalogidto AgentSpecname. - fc38f74: AgentSpec skills: TrueFoundry save/turn resolve via SFY; standalone git validate/resolve on the skill store.
- 01ee934: Abort timed-out remote MCP
client.connect()so the handshake does not leak sockets. - 940c4e5: Prefer MCP Python SDK 2.0 snake_case tool annotation fields, with camelCase fallback for older SDKs, without changing destructive-tool detection behavior.
- c40129c: Cap Daytona status-refresh calls at 1 minute so a stalled provider cannot hang request handlers.
- a655537: Update published dependency ranges (AI SDK, Hono, MCP SDK, Redis, assistant-ui, and related packages).
- 4111287: Add POST
/api/internal/list-permissionsviaAuthorizer.getPermissions(owner grants for schedules/sessions; agents includeUSE, with TrueFoundry agents mapped from SFYUSE_AGENT/MANAGE_AGENT/DELETE_AGENT). - a000b47: List sessions accepts
metadata[key]=valuequery params (OpenAPI deepObject) for exact metadata containment filtering. Bare JSON-stringmetadataquery params are rejected. Metadata keys are limited to 32 characters and cannot include[]or whitespace so they do not collide with the bracket query form. - 551b6a8: Default MCP tool approval to
@destructiveonly. Selecting Other/read-only tools clears approval; selecting destructive tools keeps it on. Migrate mounts still carrying the old@write+@destructivedefault. - 2cb51a5: Raise remote MCP undici bodyTimeout to 30m so idle SSE streams are not killed at 5m; warn on Body Timeout and stringify other transport errors.
- c83145a: Abort remote MCP HTTP response bodies over 50MB (
MCP_TOOL_CALL_MAX_RESPONSE_BYTES) so oversized tool results cannot OOM the process. - 0ec8dc6: Omit session
total_cost_in_usdwhen cost is unavailable (instead of defaulting to 0), matching turn metrics. - bf5233d: Fail Redis request-reply waits when the executor heartbeat expires during polling instead of waiting until replyTimeoutMs.
- a36ffaf: Namespace all Redis keys and pub/sub channels under
tfg:so TrueForge can share a Redis instance without colliding with other apps. - 38ce068: Add tenant-unique optional session
external_id,Sessions.getOrCreateByExternalId, and an idempotentPOST /internal/sessions/get-or-create-by-external-idendpoint and SDK method. - b654052: Add caller-owned session
metadata(Record<string, string>with size limits) on create, update, and read. Persist as a newsession.metadatajsonb column; leave sessioncustomunchanged. - 11865b4: Add optional session
source. Persist as nullable JSONB with a list filter index; expose on session responses and list viasource_type/source_id. Schedule dispatch sets source on create; public create/update do not accept it. - 44f9cbe: [truefoundry] TrueFoundry mode: env-backed Daytona | truefoundry sandbox via TRUEFOUNDRY_SANDBOX_* (static SETTINGS JSON). Settings OpenAPI stays Daytona-only (
SandboxProviderManifest); truefoundry is store-internal (StoredSandboxProviderManifest). - ba79ce5: [truefoundry] Add TFY sandbox agent instructions to discover the working directory via
pwdbefore writing files. - afe816e: [truefoundry] Default
cache_controlto{ type: 'ephemeral' }fortruefoundryprovider model calls (overridable via request body). - a5f220f: Dedupe LLM resolve within a turn so parent and sub-agents sharing a model name call deps.llm once.
- a655537: Add a
turn.updateevent schema with paused/running status andaction_required_on_events. - 5d72138: Keep
npx @truefoundry/trueforgeworking on native Windows: import Kysely migrations withpathToFileURL, and keep sandbox guest paths POSIX. Source development stays Unix/WSL; CI also runs unit and SQLite store tests on Windows.