github truefoundry/trueforge @truefoundry/trueforge-core@0.2.0

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-null created_by_subject JSON object on agent, session, schedule, and schedule_run. Ownership and list filters use tenant_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_URL is 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 via TRUEFOUNDRY_MTLS_ENABLED/TRUEFOUNDRY_MTLS_CERTS_DIR.

  • e4c4b56: Add built-in web search/fetch system tools (Parallel via parallel-web), gated by AgentSpec.config.web_search (default off) and TrueFoundry-mode host env TRUEFOUNDRY_WEB_SEARCH_PROVIDER. New drafts seed web_search.enabled from /capabilities when 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_id on 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/metrics via a server-owned ISessionMetricsStore.
  • 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 catalog id to AgentSpec name.
  • 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-permissions via Authorizer.getPermissions (owner grants for schedules/sessions; agents include USE, with TrueFoundry agents mapped from SFY USE_AGENT/MANAGE_AGENT/DELETE_AGENT).
  • a000b47: List sessions accepts metadata[key]=value query params (OpenAPI deepObject) for exact metadata containment filtering. Bare JSON-string metadata query 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 @destructive only. Selecting Other/read-only tools clears approval; selecting destructive tools keeps it on. Migrate mounts still carrying the old @write+@destructive default.
  • 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_usd when 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 idempotent POST /internal/sessions/get-or-create-by-external-id endpoint and SDK method.
  • b654052: Add caller-owned session metadata (Record<string, string> with size limits) on create, update, and read. Persist as a new session.metadata jsonb column; leave session custom unchanged.
  • 11865b4: Add optional session source. Persist as nullable JSONB with a list filter index; expose on session responses and list via source_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 pwd before writing files.
  • afe816e: [truefoundry] Default cache_control to { type: 'ephemeral' } for truefoundry provider 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.update event schema with paused/running status and action_required_on_events.
  • 5d72138: Keep npx @truefoundry/trueforge working on native Windows: import Kysely migrations with pathToFileURL, and keep sandbox guest paths POSIX. Source development stays Unix/WSL; CI also runs unit and SQLite store tests on Windows.

Don't miss a new trueforge release

NewReleases is sending notifications on new releases.