Minor Changes
-
8491843: Add a slot-driven agent Metrics tab with aggregate cards, time-range filtering, and Harness-backed line charts.
-
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.
-
49164e7: Add optional mutual TLS for the HTTPS listener and schedule controller→server hop via
TRUEFORGE_MTLS_ENABLED/TRUEFORGE_MTLS_CERTS_DIR. Off by default; independent of ServiceFoundryTRUEFOUNDRY_MTLS_*. -
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. -
a3a1395: Adds first-class cron schedules for existing agents: persist them, manage them via /api/v1/schedules, validate cron policy at write time, and advance due runs through a single-dispatcher claim path.
-
4b1aa55: Enforce external agent authorization on agent list, get, snippets, update, delete, and referenced-agent use.
-
ef316d2: Add optional
OIDC_ALLOWED_EMAILSallowlist (exact addresses and*globs) so OIDC logins can be limited to approved emails or domains. -
2025cef: Store Postgres app tables and Kysely migration bookkeeping in a dedicated
trueforgeschema, with an automatic one-time move frompublicso existing installs keep their data and migration history. -
8f1a2dc: 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. -
4137af1: Unify request-scoped RequestContext across standalone, OIDC, and TrueFoundry auth.
/auth/mereturns{ data: { type, tenant_id, subject, roles } }(typeisoidc-connected|default; OpenAPI/SDK regen deferred to CI).
Patch Changes
- 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.
- af40621: Add persisted
agent.metadataon Postgres and SQLite; storeupdateAgentcan patch manifest and/or metadata. - 1c67237: Add agent
external_id(string | nullon create) with a tenant-scoped partial unique index (Postgres and SQLite). - 38abb11: Sync ServiceFoundry remote agents on create/update/delete and store the remote id in
external_id. FilterlistAgentsbyexternal_ids. Keep general ServiceFoundry HTTP at 10s and agent CRUD calls at 3s. - 49360bc: Drop unused
agent.metadata; remote identity is stored inexternal_id. - 38abb11: Reject reserved agent names
tfgandtrueforgein create requests. - 7968f59: Use injected
dbfor TrueFoundryAgentStore advisory-lock transactions. - a60f4c2: Add GET /api/v1/agents/{agent_id}/code-snippets with TypeScript TrueForge SDK stream and non-stream samples.
- 55cc5e7: Add a dedicated controller entry point (
dist/controller-main.js) that runs the periodic control loops (schedule dispatch) as a single-replica process for distributed mode (STANDALONE=false). It targets the server API via the newSERVER_URLenv (defaulthttp://localhost:$PORT). Standalone mode keeps running the controller inside the server process. - 2dcb3a0: Add
created_by_meto list sessions and list schedules so callers can restrict results to resources they created (excluding managed-agent visibility). - 58940a7: Report a Daytona key that cannot register snapshots as missing key permissions (403) instead of an invalid API key (422), and name the grants to add in the Daytona dashboard.
- c40129c: Cap Daytona status-refresh calls at 1 minute so a stalled provider cannot hang request handlers.
- 9f3b4cd: Make optional
VITE_BASE_PATHapply to both the UI public path and API/auth URLs (defaults to/). - 80d5bee: Move
resolveInvokeHeadersontoIMcpServerWithAuthStore(notIMcpServerStore) so DB backends stay CRUD-only and turn/MCP invoke paths take the request-scoped with-auth store for configured headers and TrueFoundry gateway Bearer. - 541d65d: Split MCP server persistence (
IMcpServerStore) from Connect UX auth (IMcpServerWithAuthStore/McpServerWithAuthStore) so DB backends stay CRUD + OAuth client columns while authorize/status/revoke compose in via a token store. - c65b813: Apply
POSTGRES_SSL_MODEassslmodeon the Postgres connection URL. - f4fb4bd: Accept
DATABASE_URLfor hosted mode so managed Postgres (e.g. Railway) can be wired without discretePOSTGRES_*vars. - a37cdea: Add NOT NULL
agent_idonschedule(backfilled fromagent), FK toagent(id)ON DELETE CASCADE (replacing the(tenant_id, agent_name)FK), and(tenant_id, agent_id)index for per-agent listing. - 3bc2ed8: List schedules is token-paginated (
limit/page_token) and filters by comma-separatedagent_names. - feb94aa: Add GET /api/v1/schedules/{schedule_id}/runs to list a schedule's runs (newest
scheduled_forfirst), with the same creator-or-admin access as other schedule routes. - 8e64757: Add POST /api/v1/schedules/runs to trigger an immediate schedule run
- 4ced8ef: Dispatch schedule runs through the session/turn API: get-or-create a session keyed by run id, then create a turn only when that session has none.
- 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. - 4c1260e: Wire TrueFoundry MCP authorize, status, and delete through ServiceFoundry; stub list auth_status; gate oauth2 invoke mid-turn with authRequired; paginate MCP server lists. UI treats SFY consent
code/erroron the FE landing like local DCR success/failure. - 32bf7d6: TrueFoundry MCP invoke headers are owned by the MCP store (
resolveInvokeHeaders), so gateway Bearer comes from the request-scoped store rather than being threaded through turn/tools APIs. - 185dc04: Per-MCP-server request headers via
x-tfg-mcp-headers, merged into the invoke headers for the named server. Lets a caller that authenticates as one identity give each MCP server the identity it should actually see. - f175245: Add TrueFoundry-managed MCP list/get (SFY registry, gateway proxy URL, create/update 424).
- Updated dependencies [648273b]
- Updated dependencies [d89b2ff]
- Updated dependencies [648273b]
- Updated dependencies [172bf14]
- Updated dependencies [d89b2ff]
- Updated dependencies [a70543b]
- Updated dependencies [2dcb3a0]
- Updated dependencies [9bfcdaa]
- Updated dependencies [c40129c]
- Updated dependencies [52987a7]
- Updated dependencies [38ce068]
- Updated dependencies [b654052]
- Updated dependencies [4c1260e]
- Updated dependencies [8f1a2dc]
- Updated dependencies [f175245]
- @truefoundry/trueforge-sdk@0.1.4-rc.1
- @truefoundry/trueforge-core@0.2.0-rc.1