feat: Functions — JS/TS execution with run log

core.functions + core.function_runs: project-scoped code executed by a
runtime binary on the backend host (bun or deno per function). Payload
arrives on stdin + PRIMORA_PAYLOAD env; stdout/stderr captured per run
(capped), with status/exit code/duration. Invoke returns 502 + the
recorded run on failure so errors stay observable.

Dashboard gains a Functions page: code editor, JSON payload invoke,
live result, run history. Runner config via FUNCTIONS_RUNTIME /
FUNCTIONS_TIMEOUT_SECONDS / FUNCTIONS_MAX_OUTPUT_BYTES.

Verified live: bun ran code, stdin payload delivered, error path returns
502 with captured stderr; timeout kills at deadline.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Tomas DvorakandDevin committed 2026-09-24 19:46:32 +02:00
1 parent 3aca5bd1e0
commit 32587c8063
37 files changed
+2157 -6

No files matched your search

@@ -37,6 +37,7 @@ export type { CreatedApiKey } from './models/CreatedApiKey';
export { CreateDBConnectionRequest } from './models/CreateDBConnectionRequest';
export type { CreateDeployMarkerRequest } from './models/CreateDeployMarkerRequest';
export type { CreateDocumentRequest } from './models/CreateDocumentRequest';
export { CreateFunctionRequest } from './models/CreateFunctionRequest';
export { CreateInboundHookRequest } from './models/CreateInboundHookRequest';
export { CreateIntegrationRequest } from './models/CreateIntegrationRequest';
export { CreateInvitationRequest } from './models/CreateInvitationRequest';
@@ -71,6 +72,11 @@ export { EmailLogEntry } from './models/EmailLogEntry';
export type { EmailLogListResponse } from './models/EmailLogListResponse';
export type { ErrorEnvelope } from './models/ErrorEnvelope';
export type { EventSeriesBucket } from './models/EventSeriesBucket';
export { Function } from './models/Function';
export type { FunctionDetailResponse } from './models/FunctionDetailResponse';
export type { FunctionListResponse } from './models/FunctionListResponse';
export { FunctionRun } from './models/FunctionRun';
export type { FunctionRunListResponse } from './models/FunctionRunListResponse';
export type { HealthStatus } from './models/HealthStatus';
export { InboundHook } from './models/InboundHook';
export type { InboundHookListResponse } from './models/InboundHookListResponse';
@@ -88,6 +94,7 @@ export type { IntegrationListResponse } from './models/IntegrationListResponse';
export type { IntegrationTestResult } from './models/IntegrationTestResult';
export type { Invitation } from './models/Invitation';
export type { InvitationID } from './models/InvitationID';
export type { InvokeFunctionRequest } from './models/InvokeFunctionRequest';
export type { JobID } from './models/JobID';
export type { MeResponse } from './models/MeResponse';
export type { MetricPoint } from './models/MetricPoint';
@@ -132,6 +139,7 @@ export type { UpdateBucketObjectRequest } from './models/UpdateBucketObjectReque
export { UpdateBucketRequest } from './models/UpdateBucketRequest';
export type { UpdateCollectionRequest } from './models/UpdateCollectionRequest';
export type { UpdateDocumentRequest } from './models/UpdateDocumentRequest';
export type { UpdateFunctionRequest } from './models/UpdateFunctionRequest';
export type { UpdateInstanceSettingRequest } from './models/UpdateInstanceSettingRequest';
export { UpdateOrganizationMemberRoleRequest } from './models/UpdateOrganizationMemberRoleRequest';
export type { UpdateOrganizationRequest } from './models/UpdateOrganizationRequest';
@@ -179,6 +187,7 @@ export { $CreatedApiKey } from './schemas/$CreatedApiKey';
export { $CreateDBConnectionRequest } from './schemas/$CreateDBConnectionRequest';
export { $CreateDeployMarkerRequest } from './schemas/$CreateDeployMarkerRequest';
export { $CreateDocumentRequest } from './schemas/$CreateDocumentRequest';
export { $CreateFunctionRequest } from './schemas/$CreateFunctionRequest';
export { $CreateInboundHookRequest } from './schemas/$CreateInboundHookRequest';
export { $CreateIntegrationRequest } from './schemas/$CreateIntegrationRequest';
export { $CreateInvitationRequest } from './schemas/$CreateInvitationRequest';
@@ -213,6 +222,11 @@ export { $EmailLogEntry } from './schemas/$EmailLogEntry';
export { $EmailLogListResponse } from './schemas/$EmailLogListResponse';
export { $ErrorEnvelope } from './schemas/$ErrorEnvelope';
export { $EventSeriesBucket } from './schemas/$EventSeriesBucket';
export { $Function } from './schemas/$Function';
export { $FunctionDetailResponse } from './schemas/$FunctionDetailResponse';
export { $FunctionListResponse } from './schemas/$FunctionListResponse';
export { $FunctionRun } from './schemas/$FunctionRun';
export { $FunctionRunListResponse } from './schemas/$FunctionRunListResponse';
export { $HealthStatus } from './schemas/$HealthStatus';
export { $InboundHook } from './schemas/$InboundHook';
export { $InboundHookListResponse } from './schemas/$InboundHookListResponse';
@@ -230,6 +244,7 @@ export { $IntegrationListResponse } from './schemas/$IntegrationListResponse';
export { $IntegrationTestResult } from './schemas/$IntegrationTestResult';
export { $Invitation } from './schemas/$Invitation';
export { $InvitationID } from './schemas/$InvitationID';
export { $InvokeFunctionRequest } from './schemas/$InvokeFunctionRequest';
export { $JobID } from './schemas/$JobID';
export { $MeResponse } from './schemas/$MeResponse';
export { $MetricPoint } from './schemas/$MetricPoint';
@@ -274,6 +289,7 @@ export { $UpdateBucketObjectRequest } from './schemas/$UpdateBucketObjectRequest
export { $UpdateBucketRequest } from './schemas/$UpdateBucketRequest';
export { $UpdateCollectionRequest } from './schemas/$UpdateCollectionRequest';
export { $UpdateDocumentRequest } from './schemas/$UpdateDocumentRequest';
export { $UpdateFunctionRequest } from './schemas/$UpdateFunctionRequest';
export { $UpdateInstanceSettingRequest } from './schemas/$UpdateInstanceSettingRequest';
export { $UpdateOrganizationMemberRoleRequest } from './schemas/$UpdateOrganizationMemberRoleRequest';
export { $UpdateOrganizationRequest } from './schemas/$UpdateOrganizationRequest';
@@ -296,6 +312,7 @@ export { AutomationService } from './services/AutomationService';
export { CollectionsService } from './services/CollectionsService';
export { DatabasesService } from './services/DatabasesService';
export { EmailService } from './services/EmailService';
export { FunctionsService } from './services/FunctionsService';
export { HealthService } from './services/HealthService';
export { InboundService } from './services/InboundService';
export { InstanceService } from './services/InstanceService';