From 4067da43fbee603dbdc34099f97d0cf081769c23 Mon Sep 17 00:00:00 2001 From: Asher Dale Date: Fri, 7 Aug 2026 12:29:43 -0700 Subject: [PATCH 1/4] feat: add content block presentation metadata --- api/openapi/openapi.yaml | 20 + docs/api-reference/openapi.yaml | 20 + .../components/agents/AgentChatMessage.tsx | 37 +- .../components/agents/AgentConversation.tsx | 11 +- frontend/apps/web/src/routes/AgentView.tsx | 7 +- .../react/src/domains/agent-chat-messages.ts | 15 +- .../react/src/domains/agent-chat.test.ts | 90 +- .../packages/react/src/domains/agent-chat.ts | 11 +- frontend/packages/sdk/src/generated/index.ts | 2 +- .../packages/sdk/src/generated/types.gen.ts | 14 + .../packages/sdk/src/generated/zod.gen.ts | 26 +- .../dbmigrate/postgres_integration_test.go | 42 +- internal/httpapi/integration_event_routes.go | 37 +- ...tegration_event_routes_integration_test.go | 38 +- internal/httpapi/media_ingest.go | 31 +- internal/httpapi/openapi/api.gen.go | 1084 +++++++++-------- ...ic_api_events_workflow_integration_test.go | 35 +- internal/httpapi/public_content_blocks.go | 49 +- .../session_input_media_integration_test.go | 6 +- internal/integration/slack/events.go | 28 +- internal/integration/slack/events_test.go | 78 +- .../agent_content_inputs_store.go | 1 + .../executionstore/content_blocks_store.go | 82 +- .../content_blocks_store_test.go | 50 + .../kernel_event_authority_store.go | 22 +- .../dbsqlc/kernel_event_authority.sql.go | 14 +- .../queries/kernel_event_authority.sql | 8 +- migrations/000011_content_block_metadata.sql | 87 ++ 28 files changed, 1270 insertions(+), 675 deletions(-) create mode 100644 migrations/000011_content_block_metadata.sql diff --git a/api/openapi/openapi.yaml b/api/openapi/openapi.yaml index 37015b7e6..2a8581516 100644 --- a/api/openapi/openapi.yaml +++ b/api/openapi/openapi.yaml @@ -7068,6 +7068,12 @@ components: - ModelOutputStopReasonRefusal - ModelOutputStopReasonContentFilter - ModelOutputStopReasonError + ContentBlockMetadata: + type: object + description: Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + x-go-type: json.RawMessage + x-go-type-skip-optional-pointer: true + additionalProperties: true TextContentBlock: type: object additionalProperties: false @@ -7078,6 +7084,8 @@ components: enum: [text] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' InlineMediaContentBlock: type: object additionalProperties: false @@ -7108,6 +7116,8 @@ components: type: string format: byte minLength: 1 + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' MediaRefContentBlock: type: object additionalProperties: false @@ -7118,6 +7128,8 @@ components: enum: [media_ref] artifact_id: $ref: '#/components/schemas/ArtifactID' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ReasoningContentBlock: type: object additionalProperties: false @@ -7128,6 +7140,8 @@ components: enum: [reasoning] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ErrorContentBlock: type: object additionalProperties: false @@ -7138,6 +7152,8 @@ components: enum: [error] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' StructuredDataContentBlock: type: object additionalProperties: false @@ -7148,6 +7164,8 @@ components: enum: [structured_data] value: $ref: '#/components/schemas/JSONBlob' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ModelToolCallContentBlock: type: object additionalProperties: false @@ -7164,6 +7182,8 @@ components: type: string input: $ref: '#/components/schemas/ToolInput' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' CreateAgentInputContentBlock: oneOf: - $ref: '#/components/schemas/TextContentBlock' diff --git a/docs/api-reference/openapi.yaml b/docs/api-reference/openapi.yaml index ece5dabbd..12777e9dd 100644 --- a/docs/api-reference/openapi.yaml +++ b/docs/api-reference/openapi.yaml @@ -7069,6 +7069,12 @@ components: - ModelOutputStopReasonRefusal - ModelOutputStopReasonContentFilter - ModelOutputStopReasonError + ContentBlockMetadata: + type: object + description: Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + x-go-type: json.RawMessage + x-go-type-skip-optional-pointer: true + additionalProperties: true TextContentBlock: type: object additionalProperties: false @@ -7079,6 +7085,8 @@ components: enum: [text] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' InlineMediaContentBlock: type: object additionalProperties: false @@ -7109,6 +7117,8 @@ components: type: string format: byte minLength: 1 + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' MediaRefContentBlock: type: object additionalProperties: false @@ -7119,6 +7129,8 @@ components: enum: [media_ref] artifact_id: $ref: '#/components/schemas/ArtifactID' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ReasoningContentBlock: type: object additionalProperties: false @@ -7129,6 +7141,8 @@ components: enum: [reasoning] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ErrorContentBlock: type: object additionalProperties: false @@ -7139,6 +7153,8 @@ components: enum: [error] text: type: string + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' StructuredDataContentBlock: type: object additionalProperties: false @@ -7149,6 +7165,8 @@ components: enum: [structured_data] value: $ref: '#/components/schemas/JSONBlob' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' ModelToolCallContentBlock: type: object additionalProperties: false @@ -7165,6 +7183,8 @@ components: type: string input: $ref: '#/components/schemas/ToolInput' + metadata: + $ref: '#/components/schemas/ContentBlockMetadata' CreateAgentInputContentBlock: oneOf: - $ref: '#/components/schemas/TextContentBlock' diff --git a/frontend/apps/web/src/components/agents/AgentChatMessage.tsx b/frontend/apps/web/src/components/agents/AgentChatMessage.tsx index 7b938883d..a8704491f 100644 --- a/frontend/apps/web/src/components/agents/AgentChatMessage.tsx +++ b/frontend/apps/web/src/components/agents/AgentChatMessage.tsx @@ -1,11 +1,37 @@ -import type { OmnaraUIMessage } from '@omnara/react' +import { type OmnaraUIMessage, useOmnaraClient } from '@omnara/react' +import { getActorOptions } from '@omnara/sdk/tanstack' +import { useQuery } from '@tanstack/react-query' import { Brain, Check, ChevronRight, CircleDashed, Terminal } from 'lucide-react' import { Streamdown } from 'streamdown' import { AgentAttachment } from '@/components/agents/AgentAttachment' import { Bubble, BubbleContent } from '@/components/ui/bubble' import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible' -import { Message, MessageContent } from '@/components/ui/message' +import { Message, MessageContent, MessageHeader } from '@/components/ui/message' + +function ActorLabel({ + actorID, + orgID, + projectID, +}: { + actorID: string + orgID: string + projectID: string +}) { + const client = useOmnaraClient() + const { data: actor } = useQuery(getActorOptions({ path: { orgID, projectID, actorID }, client })) + if (actor == null) return null + + const displayName = actor.display_name?.trim() + const provider = + actor.provider === 'slack' ? 'Slack' : actor.provider === 'external' ? 'External' : 'Omnara' + return ( + + {displayName == null || displayName === '' ? actor.provider_user_id : displayName} + {` ยท ${provider}`} + + ) +} function JsonValue({ value }: { value: unknown }) { return ( @@ -82,9 +108,13 @@ function ToolPart({ export function AgentChatMessage({ message, currentActorId, + orgID, + projectID, }: { message: OmnaraUIMessage currentActorId?: string + orgID: string + projectID: string }) { const metadata = message.metadata const mine = @@ -94,6 +124,9 @@ export function AgentChatMessage({ return ( + {message.role === 'user' && !mine && metadata?.actorId != null ? ( + + ) : null} {message.parts.map((part, index) => { if (part.type === 'text') { if (message.role === 'assistant') { diff --git a/frontend/apps/web/src/components/agents/AgentConversation.tsx b/frontend/apps/web/src/components/agents/AgentConversation.tsx index 95beabf44..10454bc09 100644 --- a/frontend/apps/web/src/components/agents/AgentConversation.tsx +++ b/frontend/apps/web/src/components/agents/AgentConversation.tsx @@ -17,9 +17,13 @@ import { Spinner } from '@/components/ui/spinner' export function AgentConversation({ chat, currentActorId, + orgID, + projectID, }: { chat: UseAgentChatResult currentActorId?: string + orgID: string + projectID: string }) { return ( @@ -69,7 +73,12 @@ export function AgentConversation({ messageId={message.id} scrollAnchor={index === chat.messages.length - 1} > - + ))} diff --git a/frontend/apps/web/src/routes/AgentView.tsx b/frontend/apps/web/src/routes/AgentView.tsx index 1f41ed978..e9b0e72ca 100644 --- a/frontend/apps/web/src/routes/AgentView.tsx +++ b/frontend/apps/web/src/routes/AgentView.tsx @@ -60,7 +60,12 @@ export function AgentView() {
- +
diff --git a/frontend/packages/react/src/domains/agent-chat-messages.ts b/frontend/packages/react/src/domains/agent-chat-messages.ts index f43f7060a..161edd304 100644 --- a/frontend/packages/react/src/domains/agent-chat-messages.ts +++ b/frontend/packages/react/src/domains/agent-chat-messages.ts @@ -70,11 +70,21 @@ function mediaPart(block: MediaRefContentBlock): OmnaraUIMessage['parts'][number } } +function isHiddenContentBlock(block: { metadata?: Record }): boolean { + return block.metadata?.omnara_hidden === true +} + function agentInputParts(event: AgentInputEvent): OmnaraUIMessage['parts'] { const parts: OmnaraUIMessage['parts'] = [] for (const block of event.content_blocks) { + if (isHiddenContentBlock(block)) continue if (block.type === 'text') { - parts.push({ type: 'text', text: block.text, state: 'done' }) + const displayText = block.metadata?.omnara_display_text + parts.push({ + type: 'text', + text: typeof displayText === 'string' ? displayText : block.text, + state: 'done', + }) } if (block.type === 'media_ref') { parts.push(mediaPart(block)) @@ -86,6 +96,7 @@ function agentInputParts(event: AgentInputEvent): OmnaraUIMessage['parts'] { function modelOutputParts(event: ModelOutputEvent): OmnaraUIMessage['parts'] { const parts: OmnaraUIMessage['parts'] = [] for (const block of event.content_blocks) { + if (isHiddenContentBlock(block)) continue if (block.type === 'text') { parts.push({ type: 'text', text: block.text, state: 'done' }) } @@ -189,7 +200,7 @@ export function agentEventsToMessages( input: part.input, output: { outcome: event.outcome, - contentBlocks: event.content_blocks, + contentBlocks: event.content_blocks.filter((block) => !isHiddenContentBlock(block)), }, } message.metadata = eventMetadata(event) diff --git a/frontend/packages/react/src/domains/agent-chat.test.ts b/frontend/packages/react/src/domains/agent-chat.test.ts index 7efd44177..9bef8e0ce 100644 --- a/frontend/packages/react/src/domains/agent-chat.test.ts +++ b/frontend/packages/react/src/domains/agent-chat.test.ts @@ -423,7 +423,16 @@ describe('AgentChatSession', () => { expect.objectContaining({ path: scope, headers: { 'Idempotency-Key': expect.any(String) as unknown as string }, - body: { content_blocks: [{ type: 'text', text: 'Hello' }] }, + body: { + content_blocks: [ + { + type: 'text', + text: 'This message came from the Omnara web app. Reply with normal assistant text unless explicitly asked to message an integration.', + metadata: { omnara_hidden: true }, + }, + { type: 'text', text: 'Hello' }, + ], + }, }), ) @@ -1179,6 +1188,85 @@ describe('projectAgentChat delta previews', () => { }) describe('agentEventsToMessages', () => { + it('uses omnara_display_text for user text blocks', () => { + const messages = agentEventsToMessages([ + userInputEvent({ + content_blocks: [ + { + type: 'text', + text: 'ask <@U123> (Ada) about <#C123> (#general)', + metadata: { omnara_display_text: 'ask @Ada about #general' }, + }, + ], + }), + ]) + + expect(messages).toMatchObject([ + { + role: 'user', + parts: [{ type: 'text', text: 'ask @Ada about #general' }], + }, + ]) + }) + + it('hides content blocks explicitly marked omnara_hidden', () => { + const messages = agentEventsToMessages([ + userInputEvent({ + id: 'input', + sequence: 10, + content_blocks: [ + { type: 'text', text: 'Slack context', metadata: { omnara_hidden: true } }, + { type: 'text', text: 'Inspect the workspace' }, + { + type: 'media_ref', + artifact_id: 'hidden_input_media', + metadata: { omnara_hidden: true }, + }, + ], + }), + event({ + id: 'call-event', + sequence: 11, + content_blocks: [ + { type: 'reasoning', text: 'private', metadata: { omnara_hidden: true } }, + toolCallBlock(), + { type: 'text', text: 'Working' }, + ], + }), + toolResultEvent({ + id: 'result-event', + sequence: 12, + content_blocks: [ + { + type: 'structured_data', + value: { private: true }, + metadata: { omnara_hidden: true }, + }, + { type: 'text', text: 'visible result' }, + ], + }), + ]) + + expect(messages).toMatchObject([ + { + role: 'user', + parts: [{ type: 'text', text: 'Inspect the workspace' }], + }, + { + role: 'assistant', + parts: [ + { + type: 'dynamic-tool', + output: { + contentBlocks: [{ type: 'text', text: 'visible result' }], + }, + }, + { type: 'text', text: 'Working' }, + ], + }, + ]) + }) + it('represents media_ref blocks as attachment indicators', () => { const messages = agentEventsToMessages([ userInputEvent({ diff --git a/frontend/packages/react/src/domains/agent-chat.ts b/frontend/packages/react/src/domains/agent-chat.ts index 5bb902072..1ea00cd22 100644 --- a/frontend/packages/react/src/domains/agent-chat.ts +++ b/frontend/packages/react/src/domains/agent-chat.ts @@ -161,7 +161,16 @@ export class AgentChatSession { client: this.client, path: this.scope, headers: { 'Idempotency-Key': id }, - body: { content_blocks: [{ type: 'text', text }] }, + body: { + content_blocks: [ + { + type: 'text', + text: 'This message came from the Omnara web app. Reply with normal assistant text unless explicitly asked to message an integration.', + metadata: { omnara_hidden: true }, + }, + { type: 'text', text }, + ], + }, }) this.lastFailedSend = null if (this.inputEchoLoaded(id)) this.clearPendingInput(id) diff --git a/frontend/packages/sdk/src/generated/index.ts b/frontend/packages/sdk/src/generated/index.ts index 9d28398b7..cef3ebf5b 100644 --- a/frontend/packages/sdk/src/generated/index.ts +++ b/frontend/packages/sdk/src/generated/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts export { acceptInvitation, archiveAgent, bootstrapDaemon, cancelAgent, cancelQueuedBacklogInput, createAgent, createAgentConfig, createAgentInput, createAgentProfile, createByoMachineDaemonToken, createConfiguredModel, createIntegrationOAuthSetup, createMachine, createMachinePool, createModelProviderConfig, createOrganization, createOrgApiKey, createOrgInvitation, createPersonalAccessToken, createProject, createProjectMachineGrant, createProjectMachinePoolGrant, createProjectModelGrant, createSecret, createSecretGrant, createSecretVersion, createSkill, createSkillGrant, createSlackSetup, declineInvitation, deleteAgentProfile, deleteConfiguredModel, deleteCurrentUser, deleteIntegrationInstall, deleteMachine, deleteMachinePool, deleteModelProviderConfig, deleteOrganization, deleteOrgInvitation, deleteProject, deleteProjectMachineGrant, deleteProjectMachinePoolGrant, deleteProjectModelGrant, deleteSecret, deleteSecretGrant, deleteSkill, deleteSkillGrant, demoteSteeringInputToQueued, endMachineDaemonRuntime, getActor, getAgent, getAgentConfig, getAgentProfile, getArtifact, getArtifactContent, getCurrentUser, getDaemonSkillArchive, getMachine, getMachinePool, getModelProviderConfig, getOrgApiKey, getProjectAvailableSecret, getProjectMachinePoolGrant, getSecret, getSkill, getToolCatalog, listActors, listAgentInteractions, listAgentProfiles, listAgents, listByoMachineDaemonTokens, listConfiguredModels, listEvents, listIntegrationInstalls, listMachinePools, listMemberProjectAccess, listModelProviderConfigs, listOrgApiKeyProjectAccess, listOrgApiKeys, listOrgInvitations, listOrgMembers, listPendingInvitations, listPersonalAccessTokens, listProjectAvailableSecrets, listProjectAvailableSkills, listProjectMachineGrants, listProjectMachinePoolGrants, listProjectModelGrants, listQueuedBacklogInputs, listSecretGrants, listSecrets, listSkillGrants, listSkills, listToolCalls, listTurnEvents, listTurns, listVisibleMachines, listVisibleProjectMachines, listVisibleProjects, moveQueuedBacklogInput, type Options, promoteQueuedInputToSteering, putActor, recordMachineFailure, registerMachineDaemonRuntime, removeMemberProjectAccess, removeOrgApiKeyProjectRole, removeOrgMember, resolveAgentInteraction, revokeMachineDaemonToken, revokeOrgApiKey, revokePersonalAccessToken, setMemberProjectAccess, setOrgApiKeyProjectRole, sleepMachineDaemonRuntime, socketMachineDaemonRuntime, startSecretMcpoAuth, streamEvents, submitToolCallResult, updateAgentConfig, updateAgentProfile, updateConfiguredModel, updateMachine, updateMachinePool, updateModelProviderConfig, updateOrgApiKey, updateOrgMember, updateProjectMachinePoolGrant, updateProjectModelGrant, updateSecret } from './sdk.gen'; -export type { AcceptInvitationData, AcceptInvitationError, AcceptInvitationErrors, AcceptInvitationResponse, AcceptInvitationResponses, Actor, ActorId, ActorProvider, Agent, AgentConfig, AgentConfigId, AgentConfigModel, AgentControlType, AgentCount, AgentEvent, AgentEventId, AgentEventStreamData, AgentId, AgentInput, AgentInputContentBlock, AgentInputDeliveryMode, AgentInputEnvelope, AgentInputEvent, AgentInputId, AgentInputKind, AgentInteraction, AgentInteractionId, AgentInteractionKind, AgentInteractionState, AgentMachineBinding, AgentMachineBindingId, AgentMachineBindingKind, AgentMachineBindingState, AgentModel, AgentProfile, AgentProfileId, AgentSequence, AgentSequenceCursor, AgentTurn, AgentTurnId, ArchiveAgentData, ArchiveAgentError, ArchiveAgentErrors, ArchiveAgentResponse, ArchiveAgentResponses, Artifact, ArtifactId, BootstrapDaemonData, BootstrapDaemonError, BootstrapDaemonErrors, BootstrapDaemonResponse, BootstrapDaemonResponse2, BootstrapDaemonResponses, CancelAgentData, CancelAgentError, CancelAgentErrors, CancelAgentRequest, CancelAgentResponse, CancelAgentResponse2, CancelAgentResponses, CancelQueuedBacklogInputData, CancelQueuedBacklogInputError, CancelQueuedBacklogInputErrors, CancelQueuedBacklogInputResponse, CancelQueuedBacklogInputResponses, ClientOptions, ConfiguredModel, ConfiguredModelId, ConfiguredModelList, ConfiguredModelRevisionId, ConfiguredModelSummary, ContextCheckpointEvent, ContextCheckpointId, CreateAgentConfigData, CreateAgentConfigError, CreateAgentConfigErrors, CreateAgentConfigRequest, CreateAgentConfigResponse, CreateAgentConfigResponses, CreateAgentData, CreateAgentError, CreateAgentErrors, CreateAgentInputContentBlock, CreateAgentInputData, CreateAgentInputDeliveryMode, CreateAgentInputError, CreateAgentInputErrors, CreateAgentInputRequest, CreateAgentInputResponse, CreateAgentInputResponses, CreateAgentProfileData, CreateAgentProfileError, CreateAgentProfileErrors, CreateAgentProfileRequest, CreateAgentProfileResponse, CreateAgentProfileResponses, CreateAgentRequest, CreateAgentResponse, CreateAgentResponses, CreateByoMachineDaemonTokenData, CreateByoMachineDaemonTokenError, CreateByoMachineDaemonTokenErrors, CreateByoMachineDaemonTokenResponse, CreateByoMachineDaemonTokenResponses, CreateConfiguredModelData, CreateConfiguredModelError, CreateConfiguredModelErrors, CreateConfiguredModelRequest, CreateConfiguredModelResponse, CreateConfiguredModelResponses, CreatedResourceListSort, CreateIntegrationOAuthSetupData, CreateIntegrationOAuthSetupError, CreateIntegrationOAuthSetupErrors, CreateIntegrationOAuthSetupRequest, CreateIntegrationOAuthSetupResponse, CreateIntegrationOAuthSetupResponses, CreateMachineDaemonTokenRequest, CreateMachineDaemonTokenResponse, CreateMachineData, CreateMachineError, CreateMachineErrors, CreateMachinePoolData, CreateMachinePoolError, CreateMachinePoolErrors, CreateMachinePoolRequest, CreateMachinePoolRequestBase, CreateMachinePoolResponse, CreateMachinePoolResponses, CreateMachineRequest, CreateMachineResponse, CreateMachineResponses, CreateModelProviderConfigData, CreateModelProviderConfigError, CreateModelProviderConfigErrors, CreateModelProviderConfigRequest, CreateModelProviderConfigResponse, CreateModelProviderConfigResponse2, CreateModelProviderConfigResponses, CreateOrganizationData, CreateOrganizationError, CreateOrganizationErrors, CreateOrganizationRequest, CreateOrganizationResponse, CreateOrganizationResponse2, CreateOrganizationResponses, CreateOrgApiKeyData, CreateOrgApiKeyError, CreateOrgApiKeyErrors, CreateOrgApiKeyRequest, CreateOrgApiKeyResponse, CreateOrgApiKeyResponse2, CreateOrgApiKeyResponses, CreateOrgInvitationData, CreateOrgInvitationError, CreateOrgInvitationErrors, CreateOrgInvitationRequest, CreateOrgInvitationResponse, CreateOrgInvitationResponses, CreatePersonalAccessTokenData, CreatePersonalAccessTokenError, CreatePersonalAccessTokenErrors, CreatePersonalAccessTokenRequest, CreatePersonalAccessTokenResponse, CreatePersonalAccessTokenResponse2, CreatePersonalAccessTokenResponses, CreateProjectData, CreateProjectError, CreateProjectErrors, CreateProjectMachineGrantData, CreateProjectMachineGrantError, CreateProjectMachineGrantErrors, CreateProjectMachineGrantRequest, CreateProjectMachineGrantResponse, CreateProjectMachineGrantResponse2, CreateProjectMachineGrantResponses, CreateProjectMachinePoolGrantData, CreateProjectMachinePoolGrantError, CreateProjectMachinePoolGrantErrors, CreateProjectMachinePoolGrantRequest, CreateProjectMachinePoolGrantResponse, CreateProjectMachinePoolGrantResponses, CreateProjectModelGrantData, CreateProjectModelGrantError, CreateProjectModelGrantErrors, CreateProjectModelGrantRequest, CreateProjectModelGrantResponse, CreateProjectModelGrantResponses, CreateProjectRequest, CreateProjectResponse, CreateProjectResponses, CreateSecretData, CreateSecretError, CreateSecretErrors, CreateSecretGrantData, CreateSecretGrantError, CreateSecretGrantErrors, CreateSecretGrantResponse, CreateSecretGrantResponses, CreateSecretRequest, CreateSecretResponse, CreateSecretResponses, CreateSecretVersionData, CreateSecretVersionError, CreateSecretVersionErrors, CreateSecretVersionResponse, CreateSecretVersionResponses, CreateSkillData, CreateSkillError, CreateSkillErrors, CreateSkillGrantData, CreateSkillGrantError, CreateSkillGrantErrors, CreateSkillGrantResponse, CreateSkillGrantResponses, CreateSkillRequest, CreateSkillResponse, CreateSkillResponses, CreateSlackSetupData, CreateSlackSetupError, CreateSlackSetupErrors, CreateSlackSetupRequest, CreateSlackSetupResponse, CreateSlackSetupResponses, CurrentUser, CurrentUserIdentity, CurrentUserOrg, DaemonRuntime, DaemonRuntimeId, DaemonRuntimeReconciliation, DaemonRuntimeState, DeclineInvitationData, DeclineInvitationError, DeclineInvitationErrors, DeclineInvitationResponse, DeclineInvitationResponses, DeleteAgentProfileData, DeleteAgentProfileError, DeleteAgentProfileErrors, DeleteAgentProfileResponse, DeleteAgentProfileResponses, DeleteConfiguredModelData, DeleteConfiguredModelError, DeleteConfiguredModelErrors, DeleteConfiguredModelResponse, DeleteConfiguredModelResponses, DeleteCurrentUserData, DeleteCurrentUserError, DeleteCurrentUserErrors, DeleteCurrentUserResponse, DeleteCurrentUserResponses, DeleteIntegrationInstallData, DeleteIntegrationInstallError, DeleteIntegrationInstallErrors, DeleteIntegrationInstallResponse, DeleteIntegrationInstallResponses, DeleteMachineData, DeleteMachineError, DeleteMachineErrors, DeleteMachinePoolData, DeleteMachinePoolError, DeleteMachinePoolErrors, DeleteMachinePoolResponse, DeleteMachinePoolResponses, DeleteMachineResponse, DeleteMachineResponses, DeleteModelProviderConfigData, DeleteModelProviderConfigError, DeleteModelProviderConfigErrors, DeleteModelProviderConfigResponse, DeleteModelProviderConfigResponses, DeleteOrganizationData, DeleteOrganizationError, DeleteOrganizationErrors, DeleteOrganizationResponse, DeleteOrganizationResponses, DeleteOrgInvitationData, DeleteOrgInvitationError, DeleteOrgInvitationErrors, DeleteOrgInvitationResponse, DeleteOrgInvitationResponses, DeleteProjectData, DeleteProjectError, DeleteProjectErrors, DeleteProjectMachineGrantData, DeleteProjectMachineGrantError, DeleteProjectMachineGrantErrors, DeleteProjectMachineGrantResponse, DeleteProjectMachineGrantResponses, DeleteProjectMachinePoolGrantData, DeleteProjectMachinePoolGrantError, DeleteProjectMachinePoolGrantErrors, DeleteProjectMachinePoolGrantResponse, DeleteProjectMachinePoolGrantResponses, DeleteProjectModelGrantData, DeleteProjectModelGrantError, DeleteProjectModelGrantErrors, DeleteProjectModelGrantResponse, DeleteProjectModelGrantResponses, DeleteProjectResponse, DeleteProjectResponses, DeleteSecretData, DeleteSecretError, DeleteSecretErrors, DeleteSecretGrantData, DeleteSecretGrantError, DeleteSecretGrantErrors, DeleteSecretGrantResponse, DeleteSecretGrantResponses, DeleteSecretResponse, DeleteSecretResponses, DeleteSkillData, DeleteSkillError, DeleteSkillErrors, DeleteSkillGrantData, DeleteSkillGrantError, DeleteSkillGrantErrors, DeleteSkillGrantResponse, DeleteSkillGrantResponses, DeleteSkillResponse, DeleteSkillResponses, DemoteSteeringInputToQueuedData, DemoteSteeringInputToQueuedError, DemoteSteeringInputToQueuedErrors, DemoteSteeringInputToQueuedResponse, DemoteSteeringInputToQueuedResponses, DirectSecretAvailability, DirectSkillAvailability, DiscoveredProviderModel, EndMachineDaemonRuntimeData, EndMachineDaemonRuntimeError, EndMachineDaemonRuntimeErrors, EndMachineDaemonRuntimeResponse, EndMachineDaemonRuntimeResponses, Error, ErrorContentBlock, ExternalActorParams, GenericSecretMaterial, GetActorData, GetActorError, GetActorErrors, GetActorResponse, GetActorResponses, GetAgentConfigData, GetAgentConfigError, GetAgentConfigErrors, GetAgentConfigResponse, GetAgentConfigResponses, GetAgentData, GetAgentError, GetAgentErrors, GetAgentProfileData, GetAgentProfileError, GetAgentProfileErrors, GetAgentProfileResponse, GetAgentProfileResponses, GetAgentResponse, GetAgentResponse2, GetAgentResponses, GetArtifactContentData, GetArtifactContentError, GetArtifactContentErrors, GetArtifactContentResponse, GetArtifactContentResponses, GetArtifactData, GetArtifactError, GetArtifactErrors, GetArtifactResponse, GetArtifactResponses, GetCurrentUserData, GetCurrentUserError, GetCurrentUserErrors, GetCurrentUserResponse, GetCurrentUserResponses, GetDaemonSkillArchiveData, GetDaemonSkillArchiveError, GetDaemonSkillArchiveErrors, GetDaemonSkillArchiveResponse, GetDaemonSkillArchiveResponses, GetMachineData, GetMachineError, GetMachineErrors, GetMachinePoolData, GetMachinePoolError, GetMachinePoolErrors, GetMachinePoolResponse, GetMachinePoolResponses, GetMachineResponse, GetMachineResponses, GetModelProviderConfigData, GetModelProviderConfigError, GetModelProviderConfigErrors, GetModelProviderConfigResponse, GetModelProviderConfigResponses, GetOrgApiKeyData, GetOrgApiKeyError, GetOrgApiKeyErrors, GetOrgApiKeyResponse, GetOrgApiKeyResponses, GetProjectAvailableSecretData, GetProjectAvailableSecretError, GetProjectAvailableSecretErrors, GetProjectAvailableSecretResponse, GetProjectAvailableSecretResponses, GetProjectMachinePoolGrantData, GetProjectMachinePoolGrantError, GetProjectMachinePoolGrantErrors, GetProjectMachinePoolGrantResponse, GetProjectMachinePoolGrantResponses, GetSecretData, GetSecretError, GetSecretErrors, GetSecretResponse, GetSecretResponses, GetSkillData, GetSkillError, GetSkillErrors, GetSkillResponse, GetSkillResponses, GetToolCatalogData, GetToolCatalogError, GetToolCatalogErrors, GetToolCatalogResponse, GetToolCatalogResponses, GrantedSecretAvailability, GrantedSkillAvailability, IdempotencyKey, InlineMediaContentBlock, InstallationId, IntegrationInstall, IntegrationInstallAgentProfileFilter, IntegrationInstallId, IntegrationOAuthSetup, IntegrationTarget, InteractionAnswer, InteractionForm, InteractionFormContextItem, InteractionFormOption, InteractionFormQuestion, InteractionResolution, JsonBlob, LaunchAgentResponse, ListActorsData, ListActorsError, ListActorsErrors, ListActorsResponse, ListActorsResponse2, ListActorsResponses, ListAgentEventsResponse, ListAgentInputsResponse, ListAgentInteractionsData, ListAgentInteractionsError, ListAgentInteractionsErrors, ListAgentInteractionsResponse, ListAgentInteractionsResponse2, ListAgentInteractionsResponses, ListAgentProfilesData, ListAgentProfilesError, ListAgentProfilesErrors, ListAgentProfilesResponse, ListAgentProfilesResponse2, ListAgentProfilesResponses, ListAgentsData, ListAgentsError, ListAgentsErrors, ListAgentsResponse, ListAgentsResponse2, ListAgentsResponses, ListAgentTurnsResponse, ListByoMachineDaemonTokensData, ListByoMachineDaemonTokensError, ListByoMachineDaemonTokensErrors, ListByoMachineDaemonTokensResponse, ListByoMachineDaemonTokensResponses, ListConfiguredModelsData, ListConfiguredModelsError, ListConfiguredModelsErrors, ListConfiguredModelsResponse, ListConfiguredModelsResponses, ListEventsData, ListEventsError, ListEventsErrors, ListEventsResponse, ListEventsResponses, ListIntegrationInstallsData, ListIntegrationInstallsError, ListIntegrationInstallsErrors, ListIntegrationInstallsResponse, ListIntegrationInstallsResponse2, ListIntegrationInstallsResponses, ListMachineDaemonTokensResponse, ListMachinePoolsData, ListMachinePoolsError, ListMachinePoolsErrors, ListMachinePoolsResponse, ListMachinePoolsResponse2, ListMachinePoolsResponses, ListMemberProjectAccessData, ListMemberProjectAccessError, ListMemberProjectAccessErrors, ListMemberProjectAccessResponse, ListMemberProjectAccessResponses, ListModelProviderConfigsData, ListModelProviderConfigsError, ListModelProviderConfigsErrors, ListModelProviderConfigsResponse, ListModelProviderConfigsResponses, ListOrgApiKeyProjectAccessData, ListOrgApiKeyProjectAccessError, ListOrgApiKeyProjectAccessErrors, ListOrgApiKeyProjectAccessResponse, ListOrgApiKeyProjectAccessResponses, ListOrgApiKeysData, ListOrgApiKeysError, ListOrgApiKeysErrors, ListOrgApiKeysResponse, ListOrgApiKeysResponse2, ListOrgApiKeysResponses, ListOrgInvitationsData, ListOrgInvitationsError, ListOrgInvitationsErrors, ListOrgInvitationsResponse, ListOrgInvitationsResponse2, ListOrgInvitationsResponses, ListOrgMembersData, ListOrgMembersError, ListOrgMembersErrors, ListOrgMembersResponse, ListOrgMembersResponse2, ListOrgMembersResponses, ListPendingInvitationsData, ListPendingInvitationsError, ListPendingInvitationsErrors, ListPendingInvitationsResponse, ListPendingInvitationsResponses, ListPersonalAccessTokensData, ListPersonalAccessTokensError, ListPersonalAccessTokensErrors, ListPersonalAccessTokensResponse, ListPersonalAccessTokensResponse2, ListPersonalAccessTokensResponses, ListProjectAvailableSecretsData, ListProjectAvailableSecretsError, ListProjectAvailableSecretsErrors, ListProjectAvailableSecretsResponse, ListProjectAvailableSecretsResponses, ListProjectAvailableSkillsData, ListProjectAvailableSkillsError, ListProjectAvailableSkillsErrors, ListProjectAvailableSkillsResponse, ListProjectAvailableSkillsResponses, ListProjectMachineGrantsData, ListProjectMachineGrantsError, ListProjectMachineGrantsErrors, ListProjectMachineGrantsResponse, ListProjectMachineGrantsResponse2, ListProjectMachineGrantsResponses, ListProjectMachinePoolGrantsData, ListProjectMachinePoolGrantsError, ListProjectMachinePoolGrantsErrors, ListProjectMachinePoolGrantsResponse, ListProjectMachinePoolGrantsResponse2, ListProjectMachinePoolGrantsResponses, ListProjectMembershipGrantsResponse, ListProjectModelGrantsData, ListProjectModelGrantsError, ListProjectModelGrantsErrors, ListProjectModelGrantsResponse, ListProjectModelGrantsResponse2, ListProjectModelGrantsResponses, ListProjectSecretAccessesResponse, ListProjectSkillAccessesResponse, ListProjectsResponse, ListQueuedBacklogInputsData, ListQueuedBacklogInputsError, ListQueuedBacklogInputsErrors, ListQueuedBacklogInputsResponse, ListQueuedBacklogInputsResponses, ListSecretGrantsData, ListSecretGrantsError, ListSecretGrantsErrors, ListSecretGrantsResponse, ListSecretGrantsResponse2, ListSecretGrantsResponses, ListSecretsData, ListSecretsError, ListSecretsErrors, ListSecretsResponse, ListSecretsResponse2, ListSecretsResponses, ListSkillGrantsData, ListSkillGrantsError, ListSkillGrantsErrors, ListSkillGrantsResponse, ListSkillGrantsResponse2, ListSkillGrantsResponses, ListSkillsData, ListSkillsError, ListSkillsErrors, ListSkillsResponse, ListSkillsResponse2, ListSkillsResponses, ListToolCallsData, ListToolCallsError, ListToolCallsErrors, ListToolCallsResponse, ListToolCallsResponse2, ListToolCallsResponses, ListTurnEventsData, ListTurnEventsError, ListTurnEventsErrors, ListTurnEventsResponse, ListTurnEventsResponse2, ListTurnEventsResponses, ListTurnsData, ListTurnsError, ListTurnsErrors, ListTurnsResponse, ListTurnsResponses, ListVisibleMachinesData, ListVisibleMachinesError, ListVisibleMachinesErrors, ListVisibleMachinesResponse, ListVisibleMachinesResponse2, ListVisibleMachinesResponses, ListVisibleProjectMachinesData, ListVisibleProjectMachinesError, ListVisibleProjectMachinesErrors, ListVisibleProjectMachinesResponse, ListVisibleProjectMachinesResponses, ListVisibleProjectsData, ListVisibleProjectsError, ListVisibleProjectsErrors, ListVisibleProjectsResponse, ListVisibleProjectsResponses, Machine, MachineAccess, MachineAccessSource, MachineAccessSourceKind, MachineConnectionState, MachineDaemonToken, MachineDaemonTokenId, MachineId, MachineLifecycleState, MachinePool, MachinePoolId, MachinePoolSummary, MachineSourceKind, MachineSourceKindFilter, MachineSummary, ManagementKind, McpoAuthStartRequest, McpoAuthStartResponse, MediaRefContentBlock, ModelApiFormat, ModelApiVariantOptions, ModelCacheRetention, ModelCallContextId, ModelDiscoveryResult, ModelOutputBlockStartDelta, ModelOutputBlockStopDelta, ModelOutputContentBlock, ModelOutputDelta, ModelOutputErrorDelta, ModelOutputEvent, ModelOutputMessageStopDelta, ModelOutputStopReason, ModelOutputStreamBlock, ModelOutputStreamDelta, ModelOutputTextDelta, ModelOutputTextStreamBlock, ModelOutputThinkingDelta, ModelOutputThinkingStreamBlock, ModelOutputToolArgumentsDelta, ModelOutputToolUseStreamBlock, ModelProviderApiVariant, ModelProviderAuthKind, ModelProviderConfig, ModelProviderConfigId, ModelProviderConfigList, ModelStopReason, ModelToolCallContentBlock, ModelUsage, MoveQueuedBacklogInputData, MoveQueuedBacklogInputError, MoveQueuedBacklogInputErrors, MoveQueuedBacklogInputRequest, MoveQueuedBacklogInputResponse, MoveQueuedBacklogInputResponses, OAuthRefreshSecretMaterial, OAuthTokenSetSecretMaterial, OkResponse, Organization, OrganizationId, OrganizationMembership, OrgApiKey, OrgApiKeyId, OrgApiKeyRole, OrgInvitation, OrgInvitationId, OrgMember, OrgSecretOwner, OrgSecretOwnerInput, OrgSkillOwner, OrgSkillOwnerInput, PageCursor, PageLimit, PersonalAccessToken, PersonalAccessTokenId, ProcessActionId, ProcessActionReconciliationClaim, ProcessActionReconciliationDirective, ProcessId, ProcessReconciliationClaim, ProcessReconciliationDirective, Project, ProjectAccess, ProjectId, ProjectMachineGrant, ProjectMachineGrantId, ProjectMachineGrantListItem, ProjectMachineGrantSourceKind, ProjectMachinePoolGrant, ProjectMachinePoolGrantId, ProjectMachinePoolGrantListItem, ProjectMembershipGrant, ProjectModelGrant, ProjectModelGrantEnvelope, ProjectModelGrantId, ProjectModelGrantListItem, ProjectSecretAccess, ProjectSecretOwner, ProjectSecretOwnerInput, ProjectSkillAccess, ProjectSkillOwner, ProjectSkillOwnerInput, PromoteQueuedInputToSteeringData, PromoteQueuedInputToSteeringError, PromoteQueuedInputToSteeringErrors, PromoteQueuedInputToSteeringRequest, PromoteQueuedInputToSteeringResponse, PromoteQueuedInputToSteeringResponses, PutActorData, PutActorError, PutActorErrors, PutActorResponse, PutActorResponses, ReasoningContentBlock, RecordMachineFailureData, RecordMachineFailureError, RecordMachineFailureErrors, RecordMachineFailureResponse, RecordMachineFailureResponses, RegisterDaemonRuntimeRequest, RegisterDaemonRuntimeResponse, RegisterMachineDaemonRuntimeData, RegisterMachineDaemonRuntimeError, RegisterMachineDaemonRuntimeErrors, RegisterMachineDaemonRuntimeResponse, RegisterMachineDaemonRuntimeResponses, RemoveMemberProjectAccessData, RemoveMemberProjectAccessError, RemoveMemberProjectAccessErrors, RemoveMemberProjectAccessResponse, RemoveMemberProjectAccessResponses, RemoveOrgApiKeyProjectRoleData, RemoveOrgApiKeyProjectRoleError, RemoveOrgApiKeyProjectRoleErrors, RemoveOrgApiKeyProjectRoleResponse, RemoveOrgApiKeyProjectRoleResponses, RemoveOrgMemberData, RemoveOrgMemberError, RemoveOrgMemberErrors, RemoveOrgMemberResponse, RemoveOrgMemberResponses, ResolveAgentInteractionData, ResolveAgentInteractionError, ResolveAgentInteractionErrors, ResolveAgentInteractionRequest, ResolveAgentInteractionResponse, ResolveAgentInteractionResponses, ResourceListSort, ResourceNameFilter, RevokeMachineDaemonTokenData, RevokeMachineDaemonTokenError, RevokeMachineDaemonTokenErrors, RevokeMachineDaemonTokenResponse, RevokeMachineDaemonTokenResponses, RevokeOrgApiKeyData, RevokeOrgApiKeyError, RevokeOrgApiKeyErrors, RevokeOrgApiKeyResponse, RevokeOrgApiKeyResponses, RevokePersonalAccessTokenData, RevokePersonalAccessTokenError, RevokePersonalAccessTokenErrors, RevokePersonalAccessTokenResponse, RevokePersonalAccessTokenResponses, Secret, SecretAvailability, SecretAvailabilitySourceFilter, SecretGrant, SecretGrantCreateRequest, SecretGrantId, SecretGrantListItem, SecretId, SecretKind, SecretMaterial, SecretMetadataFilter, SecretOwner, SecretOwnerInput, SecretOwnerKindFilter, SecretOwnerProjectIdFilter, SecretPayload, SecretVersionRequest, SetMemberProjectAccessData, SetMemberProjectAccessError, SetMemberProjectAccessErrors, SetMemberProjectAccessResponse, SetMemberProjectAccessResponses, SetOrgApiKeyProjectRoleData, SetOrgApiKeyProjectRoleError, SetOrgApiKeyProjectRoleErrors, SetOrgApiKeyProjectRoleResponse, SetOrgApiKeyProjectRoleResponses, SetProjectMembershipRequest, Skill, SkillAvailability, SkillAvailabilitySourceFilter, SkillGrant, SkillGrantCreateRequest, SkillGrantId, SkillGrantListItem, SkillId, SkillOwner, SkillOwnerInput, SkillOwnerKindFilter, SkillOwnerProjectIdFilter, SkillRevisionId, SlackSetup, SlackSetupIcon, SleepMachineDaemonRuntimeData, SleepMachineDaemonRuntimeError, SleepMachineDaemonRuntimeErrors, SleepMachineDaemonRuntimeResponse, SleepMachineDaemonRuntimeResponses, SocketMachineDaemonRuntimeData, SocketMachineDaemonRuntimeError, SocketMachineDaemonRuntimeErrors, StartSecretMcpoAuthData, StartSecretMcpoAuthError, StartSecretMcpoAuthErrors, StartSecretMcpoAuthResponse, StartSecretMcpoAuthResponses, StreamEventsData, StreamEventsError, StreamEventsErrors, StreamEventsResponse, StreamEventsResponses, StructuredDataContentBlock, SubmitToolCallResultData, SubmitToolCallResultError, SubmitToolCallResultErrors, SubmitToolCallResultRequest, SubmitToolCallResultResponse, SubmitToolCallResultResponse2, SubmitToolCallResultResponses, SubmitToolResultContentBlock, TextContentBlock, Timestamp, ToolCall, ToolCallId, ToolCallOutcome, ToolCallState, ToolCallType, ToolCatalog, ToolCatalogEntry, ToolInput, ToolPermissionMode, ToolPermissionProfile, ToolPermissionSelection, ToolResult, ToolResultContentBlock, ToolResultEvent, UpdateAgentConfigData, UpdateAgentConfigError, UpdateAgentConfigErrors, UpdateAgentConfigResponse, UpdateAgentConfigResponse2, UpdateAgentConfigResponses, UpdateAgentProfileData, UpdateAgentProfileError, UpdateAgentProfileErrors, UpdateAgentProfileRequest, UpdateAgentProfileResponse, UpdateAgentProfileResponses, UpdateConfiguredModelData, UpdateConfiguredModelError, UpdateConfiguredModelErrors, UpdateConfiguredModelRequest, UpdateConfiguredModelResponse, UpdateConfiguredModelResponses, UpdateMachineData, UpdateMachineError, UpdateMachineErrors, UpdateMachinePoolData, UpdateMachinePoolError, UpdateMachinePoolErrors, UpdateMachinePoolRequest, UpdateMachinePoolResponse, UpdateMachinePoolResponses, UpdateMachineRequest, UpdateMachineResponse, UpdateMachineResponses, UpdateModelProviderConfigData, UpdateModelProviderConfigError, UpdateModelProviderConfigErrors, UpdateModelProviderConfigRequest, UpdateModelProviderConfigResponse, UpdateModelProviderConfigResponses, UpdateOrgApiKeyData, UpdateOrgApiKeyError, UpdateOrgApiKeyErrors, UpdateOrgApiKeyRequest, UpdateOrgApiKeyResponse, UpdateOrgApiKeyResponses, UpdateOrgMemberData, UpdateOrgMemberError, UpdateOrgMemberErrors, UpdateOrgMemberRequest, UpdateOrgMemberResponse, UpdateOrgMemberResponses, UpdateProjectMachinePoolGrantData, UpdateProjectMachinePoolGrantError, UpdateProjectMachinePoolGrantErrors, UpdateProjectMachinePoolGrantRequest, UpdateProjectMachinePoolGrantResponse, UpdateProjectMachinePoolGrantResponses, UpdateProjectModelGrantData, UpdateProjectModelGrantError, UpdateProjectModelGrantErrors, UpdateProjectModelGrantRequest, UpdateProjectModelGrantResponse, UpdateProjectModelGrantResponses, UpdateSecretData, UpdateSecretError, UpdateSecretErrors, UpdateSecretRequest, UpdateSecretResponse, UpdateSecretResponses, UserId, UserSecretOwner, UserSecretOwnerInput, UserSkillOwner, UserSkillOwnerInput, VisibleMachine, VisibleProject } from './types.gen'; +export type { AcceptInvitationData, AcceptInvitationError, AcceptInvitationErrors, AcceptInvitationResponse, AcceptInvitationResponses, Actor, ActorId, ActorProvider, Agent, AgentConfig, AgentConfigId, AgentConfigModel, AgentControlType, AgentCount, AgentEvent, AgentEventId, AgentEventStreamData, AgentId, AgentInput, AgentInputContentBlock, AgentInputDeliveryMode, AgentInputEnvelope, AgentInputEvent, AgentInputId, AgentInputKind, AgentInteraction, AgentInteractionId, AgentInteractionKind, AgentInteractionState, AgentMachineBinding, AgentMachineBindingId, AgentMachineBindingKind, AgentMachineBindingState, AgentModel, AgentProfile, AgentProfileId, AgentSequence, AgentSequenceCursor, AgentTurn, AgentTurnId, ArchiveAgentData, ArchiveAgentError, ArchiveAgentErrors, ArchiveAgentResponse, ArchiveAgentResponses, Artifact, ArtifactId, BootstrapDaemonData, BootstrapDaemonError, BootstrapDaemonErrors, BootstrapDaemonResponse, BootstrapDaemonResponse2, BootstrapDaemonResponses, CancelAgentData, CancelAgentError, CancelAgentErrors, CancelAgentRequest, CancelAgentResponse, CancelAgentResponse2, CancelAgentResponses, CancelQueuedBacklogInputData, CancelQueuedBacklogInputError, CancelQueuedBacklogInputErrors, CancelQueuedBacklogInputResponse, CancelQueuedBacklogInputResponses, ClientOptions, ConfiguredModel, ConfiguredModelId, ConfiguredModelList, ConfiguredModelRevisionId, ConfiguredModelSummary, ContentBlockMetadata, ContextCheckpointEvent, ContextCheckpointId, CreateAgentConfigData, CreateAgentConfigError, CreateAgentConfigErrors, CreateAgentConfigRequest, CreateAgentConfigResponse, CreateAgentConfigResponses, CreateAgentData, CreateAgentError, CreateAgentErrors, CreateAgentInputContentBlock, CreateAgentInputData, CreateAgentInputDeliveryMode, CreateAgentInputError, CreateAgentInputErrors, CreateAgentInputRequest, CreateAgentInputResponse, CreateAgentInputResponses, CreateAgentProfileData, CreateAgentProfileError, CreateAgentProfileErrors, CreateAgentProfileRequest, CreateAgentProfileResponse, CreateAgentProfileResponses, CreateAgentRequest, CreateAgentResponse, CreateAgentResponses, CreateByoMachineDaemonTokenData, CreateByoMachineDaemonTokenError, CreateByoMachineDaemonTokenErrors, CreateByoMachineDaemonTokenResponse, CreateByoMachineDaemonTokenResponses, CreateConfiguredModelData, CreateConfiguredModelError, CreateConfiguredModelErrors, CreateConfiguredModelRequest, CreateConfiguredModelResponse, CreateConfiguredModelResponses, CreatedResourceListSort, CreateIntegrationOAuthSetupData, CreateIntegrationOAuthSetupError, CreateIntegrationOAuthSetupErrors, CreateIntegrationOAuthSetupRequest, CreateIntegrationOAuthSetupResponse, CreateIntegrationOAuthSetupResponses, CreateMachineDaemonTokenRequest, CreateMachineDaemonTokenResponse, CreateMachineData, CreateMachineError, CreateMachineErrors, CreateMachinePoolData, CreateMachinePoolError, CreateMachinePoolErrors, CreateMachinePoolRequest, CreateMachinePoolRequestBase, CreateMachinePoolResponse, CreateMachinePoolResponses, CreateMachineRequest, CreateMachineResponse, CreateMachineResponses, CreateModelProviderConfigData, CreateModelProviderConfigError, CreateModelProviderConfigErrors, CreateModelProviderConfigRequest, CreateModelProviderConfigResponse, CreateModelProviderConfigResponse2, CreateModelProviderConfigResponses, CreateOrganizationData, CreateOrganizationError, CreateOrganizationErrors, CreateOrganizationRequest, CreateOrganizationResponse, CreateOrganizationResponse2, CreateOrganizationResponses, CreateOrgApiKeyData, CreateOrgApiKeyError, CreateOrgApiKeyErrors, CreateOrgApiKeyRequest, CreateOrgApiKeyResponse, CreateOrgApiKeyResponse2, CreateOrgApiKeyResponses, CreateOrgInvitationData, CreateOrgInvitationError, CreateOrgInvitationErrors, CreateOrgInvitationRequest, CreateOrgInvitationResponse, CreateOrgInvitationResponses, CreatePersonalAccessTokenData, CreatePersonalAccessTokenError, CreatePersonalAccessTokenErrors, CreatePersonalAccessTokenRequest, CreatePersonalAccessTokenResponse, CreatePersonalAccessTokenResponse2, CreatePersonalAccessTokenResponses, CreateProjectData, CreateProjectError, CreateProjectErrors, CreateProjectMachineGrantData, CreateProjectMachineGrantError, CreateProjectMachineGrantErrors, CreateProjectMachineGrantRequest, CreateProjectMachineGrantResponse, CreateProjectMachineGrantResponse2, CreateProjectMachineGrantResponses, CreateProjectMachinePoolGrantData, CreateProjectMachinePoolGrantError, CreateProjectMachinePoolGrantErrors, CreateProjectMachinePoolGrantRequest, CreateProjectMachinePoolGrantResponse, CreateProjectMachinePoolGrantResponses, CreateProjectModelGrantData, CreateProjectModelGrantError, CreateProjectModelGrantErrors, CreateProjectModelGrantRequest, CreateProjectModelGrantResponse, CreateProjectModelGrantResponses, CreateProjectRequest, CreateProjectResponse, CreateProjectResponses, CreateSecretData, CreateSecretError, CreateSecretErrors, CreateSecretGrantData, CreateSecretGrantError, CreateSecretGrantErrors, CreateSecretGrantResponse, CreateSecretGrantResponses, CreateSecretRequest, CreateSecretResponse, CreateSecretResponses, CreateSecretVersionData, CreateSecretVersionError, CreateSecretVersionErrors, CreateSecretVersionResponse, CreateSecretVersionResponses, CreateSkillData, CreateSkillError, CreateSkillErrors, CreateSkillGrantData, CreateSkillGrantError, CreateSkillGrantErrors, CreateSkillGrantResponse, CreateSkillGrantResponses, CreateSkillRequest, CreateSkillResponse, CreateSkillResponses, CreateSlackSetupData, CreateSlackSetupError, CreateSlackSetupErrors, CreateSlackSetupRequest, CreateSlackSetupResponse, CreateSlackSetupResponses, CurrentUser, CurrentUserIdentity, CurrentUserOrg, DaemonRuntime, DaemonRuntimeId, DaemonRuntimeReconciliation, DaemonRuntimeState, DeclineInvitationData, DeclineInvitationError, DeclineInvitationErrors, DeclineInvitationResponse, DeclineInvitationResponses, DeleteAgentProfileData, DeleteAgentProfileError, DeleteAgentProfileErrors, DeleteAgentProfileResponse, DeleteAgentProfileResponses, DeleteConfiguredModelData, DeleteConfiguredModelError, DeleteConfiguredModelErrors, DeleteConfiguredModelResponse, DeleteConfiguredModelResponses, DeleteCurrentUserData, DeleteCurrentUserError, DeleteCurrentUserErrors, DeleteCurrentUserResponse, DeleteCurrentUserResponses, DeleteIntegrationInstallData, DeleteIntegrationInstallError, DeleteIntegrationInstallErrors, DeleteIntegrationInstallResponse, DeleteIntegrationInstallResponses, DeleteMachineData, DeleteMachineError, DeleteMachineErrors, DeleteMachinePoolData, DeleteMachinePoolError, DeleteMachinePoolErrors, DeleteMachinePoolResponse, DeleteMachinePoolResponses, DeleteMachineResponse, DeleteMachineResponses, DeleteModelProviderConfigData, DeleteModelProviderConfigError, DeleteModelProviderConfigErrors, DeleteModelProviderConfigResponse, DeleteModelProviderConfigResponses, DeleteOrganizationData, DeleteOrganizationError, DeleteOrganizationErrors, DeleteOrganizationResponse, DeleteOrganizationResponses, DeleteOrgInvitationData, DeleteOrgInvitationError, DeleteOrgInvitationErrors, DeleteOrgInvitationResponse, DeleteOrgInvitationResponses, DeleteProjectData, DeleteProjectError, DeleteProjectErrors, DeleteProjectMachineGrantData, DeleteProjectMachineGrantError, DeleteProjectMachineGrantErrors, DeleteProjectMachineGrantResponse, DeleteProjectMachineGrantResponses, DeleteProjectMachinePoolGrantData, DeleteProjectMachinePoolGrantError, DeleteProjectMachinePoolGrantErrors, DeleteProjectMachinePoolGrantResponse, DeleteProjectMachinePoolGrantResponses, DeleteProjectModelGrantData, DeleteProjectModelGrantError, DeleteProjectModelGrantErrors, DeleteProjectModelGrantResponse, DeleteProjectModelGrantResponses, DeleteProjectResponse, DeleteProjectResponses, DeleteSecretData, DeleteSecretError, DeleteSecretErrors, DeleteSecretGrantData, DeleteSecretGrantError, DeleteSecretGrantErrors, DeleteSecretGrantResponse, DeleteSecretGrantResponses, DeleteSecretResponse, DeleteSecretResponses, DeleteSkillData, DeleteSkillError, DeleteSkillErrors, DeleteSkillGrantData, DeleteSkillGrantError, DeleteSkillGrantErrors, DeleteSkillGrantResponse, DeleteSkillGrantResponses, DeleteSkillResponse, DeleteSkillResponses, DemoteSteeringInputToQueuedData, DemoteSteeringInputToQueuedError, DemoteSteeringInputToQueuedErrors, DemoteSteeringInputToQueuedResponse, DemoteSteeringInputToQueuedResponses, DirectSecretAvailability, DirectSkillAvailability, DiscoveredProviderModel, EndMachineDaemonRuntimeData, EndMachineDaemonRuntimeError, EndMachineDaemonRuntimeErrors, EndMachineDaemonRuntimeResponse, EndMachineDaemonRuntimeResponses, Error, ErrorContentBlock, ExternalActorParams, GenericSecretMaterial, GetActorData, GetActorError, GetActorErrors, GetActorResponse, GetActorResponses, GetAgentConfigData, GetAgentConfigError, GetAgentConfigErrors, GetAgentConfigResponse, GetAgentConfigResponses, GetAgentData, GetAgentError, GetAgentErrors, GetAgentProfileData, GetAgentProfileError, GetAgentProfileErrors, GetAgentProfileResponse, GetAgentProfileResponses, GetAgentResponse, GetAgentResponse2, GetAgentResponses, GetArtifactContentData, GetArtifactContentError, GetArtifactContentErrors, GetArtifactContentResponse, GetArtifactContentResponses, GetArtifactData, GetArtifactError, GetArtifactErrors, GetArtifactResponse, GetArtifactResponses, GetCurrentUserData, GetCurrentUserError, GetCurrentUserErrors, GetCurrentUserResponse, GetCurrentUserResponses, GetDaemonSkillArchiveData, GetDaemonSkillArchiveError, GetDaemonSkillArchiveErrors, GetDaemonSkillArchiveResponse, GetDaemonSkillArchiveResponses, GetMachineData, GetMachineError, GetMachineErrors, GetMachinePoolData, GetMachinePoolError, GetMachinePoolErrors, GetMachinePoolResponse, GetMachinePoolResponses, GetMachineResponse, GetMachineResponses, GetModelProviderConfigData, GetModelProviderConfigError, GetModelProviderConfigErrors, GetModelProviderConfigResponse, GetModelProviderConfigResponses, GetOrgApiKeyData, GetOrgApiKeyError, GetOrgApiKeyErrors, GetOrgApiKeyResponse, GetOrgApiKeyResponses, GetProjectAvailableSecretData, GetProjectAvailableSecretError, GetProjectAvailableSecretErrors, GetProjectAvailableSecretResponse, GetProjectAvailableSecretResponses, GetProjectMachinePoolGrantData, GetProjectMachinePoolGrantError, GetProjectMachinePoolGrantErrors, GetProjectMachinePoolGrantResponse, GetProjectMachinePoolGrantResponses, GetSecretData, GetSecretError, GetSecretErrors, GetSecretResponse, GetSecretResponses, GetSkillData, GetSkillError, GetSkillErrors, GetSkillResponse, GetSkillResponses, GetToolCatalogData, GetToolCatalogError, GetToolCatalogErrors, GetToolCatalogResponse, GetToolCatalogResponses, GrantedSecretAvailability, GrantedSkillAvailability, IdempotencyKey, InlineMediaContentBlock, InstallationId, IntegrationInstall, IntegrationInstallAgentProfileFilter, IntegrationInstallId, IntegrationOAuthSetup, IntegrationTarget, InteractionAnswer, InteractionForm, InteractionFormContextItem, InteractionFormOption, InteractionFormQuestion, InteractionResolution, JsonBlob, LaunchAgentResponse, ListActorsData, ListActorsError, ListActorsErrors, ListActorsResponse, ListActorsResponse2, ListActorsResponses, ListAgentEventsResponse, ListAgentInputsResponse, ListAgentInteractionsData, ListAgentInteractionsError, ListAgentInteractionsErrors, ListAgentInteractionsResponse, ListAgentInteractionsResponse2, ListAgentInteractionsResponses, ListAgentProfilesData, ListAgentProfilesError, ListAgentProfilesErrors, ListAgentProfilesResponse, ListAgentProfilesResponse2, ListAgentProfilesResponses, ListAgentsData, ListAgentsError, ListAgentsErrors, ListAgentsResponse, ListAgentsResponse2, ListAgentsResponses, ListAgentTurnsResponse, ListByoMachineDaemonTokensData, ListByoMachineDaemonTokensError, ListByoMachineDaemonTokensErrors, ListByoMachineDaemonTokensResponse, ListByoMachineDaemonTokensResponses, ListConfiguredModelsData, ListConfiguredModelsError, ListConfiguredModelsErrors, ListConfiguredModelsResponse, ListConfiguredModelsResponses, ListEventsData, ListEventsError, ListEventsErrors, ListEventsResponse, ListEventsResponses, ListIntegrationInstallsData, ListIntegrationInstallsError, ListIntegrationInstallsErrors, ListIntegrationInstallsResponse, ListIntegrationInstallsResponse2, ListIntegrationInstallsResponses, ListMachineDaemonTokensResponse, ListMachinePoolsData, ListMachinePoolsError, ListMachinePoolsErrors, ListMachinePoolsResponse, ListMachinePoolsResponse2, ListMachinePoolsResponses, ListMemberProjectAccessData, ListMemberProjectAccessError, ListMemberProjectAccessErrors, ListMemberProjectAccessResponse, ListMemberProjectAccessResponses, ListModelProviderConfigsData, ListModelProviderConfigsError, ListModelProviderConfigsErrors, ListModelProviderConfigsResponse, ListModelProviderConfigsResponses, ListOrgApiKeyProjectAccessData, ListOrgApiKeyProjectAccessError, ListOrgApiKeyProjectAccessErrors, ListOrgApiKeyProjectAccessResponse, ListOrgApiKeyProjectAccessResponses, ListOrgApiKeysData, ListOrgApiKeysError, ListOrgApiKeysErrors, ListOrgApiKeysResponse, ListOrgApiKeysResponse2, ListOrgApiKeysResponses, ListOrgInvitationsData, ListOrgInvitationsError, ListOrgInvitationsErrors, ListOrgInvitationsResponse, ListOrgInvitationsResponse2, ListOrgInvitationsResponses, ListOrgMembersData, ListOrgMembersError, ListOrgMembersErrors, ListOrgMembersResponse, ListOrgMembersResponse2, ListOrgMembersResponses, ListPendingInvitationsData, ListPendingInvitationsError, ListPendingInvitationsErrors, ListPendingInvitationsResponse, ListPendingInvitationsResponses, ListPersonalAccessTokensData, ListPersonalAccessTokensError, ListPersonalAccessTokensErrors, ListPersonalAccessTokensResponse, ListPersonalAccessTokensResponse2, ListPersonalAccessTokensResponses, ListProjectAvailableSecretsData, ListProjectAvailableSecretsError, ListProjectAvailableSecretsErrors, ListProjectAvailableSecretsResponse, ListProjectAvailableSecretsResponses, ListProjectAvailableSkillsData, ListProjectAvailableSkillsError, ListProjectAvailableSkillsErrors, ListProjectAvailableSkillsResponse, ListProjectAvailableSkillsResponses, ListProjectMachineGrantsData, ListProjectMachineGrantsError, ListProjectMachineGrantsErrors, ListProjectMachineGrantsResponse, ListProjectMachineGrantsResponse2, ListProjectMachineGrantsResponses, ListProjectMachinePoolGrantsData, ListProjectMachinePoolGrantsError, ListProjectMachinePoolGrantsErrors, ListProjectMachinePoolGrantsResponse, ListProjectMachinePoolGrantsResponse2, ListProjectMachinePoolGrantsResponses, ListProjectMembershipGrantsResponse, ListProjectModelGrantsData, ListProjectModelGrantsError, ListProjectModelGrantsErrors, ListProjectModelGrantsResponse, ListProjectModelGrantsResponse2, ListProjectModelGrantsResponses, ListProjectSecretAccessesResponse, ListProjectSkillAccessesResponse, ListProjectsResponse, ListQueuedBacklogInputsData, ListQueuedBacklogInputsError, ListQueuedBacklogInputsErrors, ListQueuedBacklogInputsResponse, ListQueuedBacklogInputsResponses, ListSecretGrantsData, ListSecretGrantsError, ListSecretGrantsErrors, ListSecretGrantsResponse, ListSecretGrantsResponse2, ListSecretGrantsResponses, ListSecretsData, ListSecretsError, ListSecretsErrors, ListSecretsResponse, ListSecretsResponse2, ListSecretsResponses, ListSkillGrantsData, ListSkillGrantsError, ListSkillGrantsErrors, ListSkillGrantsResponse, ListSkillGrantsResponse2, ListSkillGrantsResponses, ListSkillsData, ListSkillsError, ListSkillsErrors, ListSkillsResponse, ListSkillsResponse2, ListSkillsResponses, ListToolCallsData, ListToolCallsError, ListToolCallsErrors, ListToolCallsResponse, ListToolCallsResponse2, ListToolCallsResponses, ListTurnEventsData, ListTurnEventsError, ListTurnEventsErrors, ListTurnEventsResponse, ListTurnEventsResponse2, ListTurnEventsResponses, ListTurnsData, ListTurnsError, ListTurnsErrors, ListTurnsResponse, ListTurnsResponses, ListVisibleMachinesData, ListVisibleMachinesError, ListVisibleMachinesErrors, ListVisibleMachinesResponse, ListVisibleMachinesResponse2, ListVisibleMachinesResponses, ListVisibleProjectMachinesData, ListVisibleProjectMachinesError, ListVisibleProjectMachinesErrors, ListVisibleProjectMachinesResponse, ListVisibleProjectMachinesResponses, ListVisibleProjectsData, ListVisibleProjectsError, ListVisibleProjectsErrors, ListVisibleProjectsResponse, ListVisibleProjectsResponses, Machine, MachineAccess, MachineAccessSource, MachineAccessSourceKind, MachineConnectionState, MachineDaemonToken, MachineDaemonTokenId, MachineId, MachineLifecycleState, MachinePool, MachinePoolId, MachinePoolSummary, MachineSourceKind, MachineSourceKindFilter, MachineSummary, ManagementKind, McpoAuthStartRequest, McpoAuthStartResponse, MediaRefContentBlock, ModelApiFormat, ModelApiVariantOptions, ModelCacheRetention, ModelCallContextId, ModelDiscoveryResult, ModelOutputBlockStartDelta, ModelOutputBlockStopDelta, ModelOutputContentBlock, ModelOutputDelta, ModelOutputErrorDelta, ModelOutputEvent, ModelOutputMessageStopDelta, ModelOutputStopReason, ModelOutputStreamBlock, ModelOutputStreamDelta, ModelOutputTextDelta, ModelOutputTextStreamBlock, ModelOutputThinkingDelta, ModelOutputThinkingStreamBlock, ModelOutputToolArgumentsDelta, ModelOutputToolUseStreamBlock, ModelProviderApiVariant, ModelProviderAuthKind, ModelProviderConfig, ModelProviderConfigId, ModelProviderConfigList, ModelStopReason, ModelToolCallContentBlock, ModelUsage, MoveQueuedBacklogInputData, MoveQueuedBacklogInputError, MoveQueuedBacklogInputErrors, MoveQueuedBacklogInputRequest, MoveQueuedBacklogInputResponse, MoveQueuedBacklogInputResponses, OAuthRefreshSecretMaterial, OAuthTokenSetSecretMaterial, OkResponse, Organization, OrganizationId, OrganizationMembership, OrgApiKey, OrgApiKeyId, OrgApiKeyRole, OrgInvitation, OrgInvitationId, OrgMember, OrgSecretOwner, OrgSecretOwnerInput, OrgSkillOwner, OrgSkillOwnerInput, PageCursor, PageLimit, PersonalAccessToken, PersonalAccessTokenId, ProcessActionId, ProcessActionReconciliationClaim, ProcessActionReconciliationDirective, ProcessId, ProcessReconciliationClaim, ProcessReconciliationDirective, Project, ProjectAccess, ProjectId, ProjectMachineGrant, ProjectMachineGrantId, ProjectMachineGrantListItem, ProjectMachineGrantSourceKind, ProjectMachinePoolGrant, ProjectMachinePoolGrantId, ProjectMachinePoolGrantListItem, ProjectMembershipGrant, ProjectModelGrant, ProjectModelGrantEnvelope, ProjectModelGrantId, ProjectModelGrantListItem, ProjectSecretAccess, ProjectSecretOwner, ProjectSecretOwnerInput, ProjectSkillAccess, ProjectSkillOwner, ProjectSkillOwnerInput, PromoteQueuedInputToSteeringData, PromoteQueuedInputToSteeringError, PromoteQueuedInputToSteeringErrors, PromoteQueuedInputToSteeringRequest, PromoteQueuedInputToSteeringResponse, PromoteQueuedInputToSteeringResponses, PutActorData, PutActorError, PutActorErrors, PutActorResponse, PutActorResponses, ReasoningContentBlock, RecordMachineFailureData, RecordMachineFailureError, RecordMachineFailureErrors, RecordMachineFailureResponse, RecordMachineFailureResponses, RegisterDaemonRuntimeRequest, RegisterDaemonRuntimeResponse, RegisterMachineDaemonRuntimeData, RegisterMachineDaemonRuntimeError, RegisterMachineDaemonRuntimeErrors, RegisterMachineDaemonRuntimeResponse, RegisterMachineDaemonRuntimeResponses, RemoveMemberProjectAccessData, RemoveMemberProjectAccessError, RemoveMemberProjectAccessErrors, RemoveMemberProjectAccessResponse, RemoveMemberProjectAccessResponses, RemoveOrgApiKeyProjectRoleData, RemoveOrgApiKeyProjectRoleError, RemoveOrgApiKeyProjectRoleErrors, RemoveOrgApiKeyProjectRoleResponse, RemoveOrgApiKeyProjectRoleResponses, RemoveOrgMemberData, RemoveOrgMemberError, RemoveOrgMemberErrors, RemoveOrgMemberResponse, RemoveOrgMemberResponses, ResolveAgentInteractionData, ResolveAgentInteractionError, ResolveAgentInteractionErrors, ResolveAgentInteractionRequest, ResolveAgentInteractionResponse, ResolveAgentInteractionResponses, ResourceListSort, ResourceNameFilter, RevokeMachineDaemonTokenData, RevokeMachineDaemonTokenError, RevokeMachineDaemonTokenErrors, RevokeMachineDaemonTokenResponse, RevokeMachineDaemonTokenResponses, RevokeOrgApiKeyData, RevokeOrgApiKeyError, RevokeOrgApiKeyErrors, RevokeOrgApiKeyResponse, RevokeOrgApiKeyResponses, RevokePersonalAccessTokenData, RevokePersonalAccessTokenError, RevokePersonalAccessTokenErrors, RevokePersonalAccessTokenResponse, RevokePersonalAccessTokenResponses, Secret, SecretAvailability, SecretAvailabilitySourceFilter, SecretGrant, SecretGrantCreateRequest, SecretGrantId, SecretGrantListItem, SecretId, SecretKind, SecretMaterial, SecretMetadataFilter, SecretOwner, SecretOwnerInput, SecretOwnerKindFilter, SecretOwnerProjectIdFilter, SecretPayload, SecretVersionRequest, SetMemberProjectAccessData, SetMemberProjectAccessError, SetMemberProjectAccessErrors, SetMemberProjectAccessResponse, SetMemberProjectAccessResponses, SetOrgApiKeyProjectRoleData, SetOrgApiKeyProjectRoleError, SetOrgApiKeyProjectRoleErrors, SetOrgApiKeyProjectRoleResponse, SetOrgApiKeyProjectRoleResponses, SetProjectMembershipRequest, Skill, SkillAvailability, SkillAvailabilitySourceFilter, SkillGrant, SkillGrantCreateRequest, SkillGrantId, SkillGrantListItem, SkillId, SkillOwner, SkillOwnerInput, SkillOwnerKindFilter, SkillOwnerProjectIdFilter, SkillRevisionId, SlackSetup, SlackSetupIcon, SleepMachineDaemonRuntimeData, SleepMachineDaemonRuntimeError, SleepMachineDaemonRuntimeErrors, SleepMachineDaemonRuntimeResponse, SleepMachineDaemonRuntimeResponses, SocketMachineDaemonRuntimeData, SocketMachineDaemonRuntimeError, SocketMachineDaemonRuntimeErrors, StartSecretMcpoAuthData, StartSecretMcpoAuthError, StartSecretMcpoAuthErrors, StartSecretMcpoAuthResponse, StartSecretMcpoAuthResponses, StreamEventsData, StreamEventsError, StreamEventsErrors, StreamEventsResponse, StreamEventsResponses, StructuredDataContentBlock, SubmitToolCallResultData, SubmitToolCallResultError, SubmitToolCallResultErrors, SubmitToolCallResultRequest, SubmitToolCallResultResponse, SubmitToolCallResultResponse2, SubmitToolCallResultResponses, SubmitToolResultContentBlock, TextContentBlock, Timestamp, ToolCall, ToolCallId, ToolCallOutcome, ToolCallState, ToolCallType, ToolCatalog, ToolCatalogEntry, ToolInput, ToolPermissionMode, ToolPermissionProfile, ToolPermissionSelection, ToolResult, ToolResultContentBlock, ToolResultEvent, UpdateAgentConfigData, UpdateAgentConfigError, UpdateAgentConfigErrors, UpdateAgentConfigResponse, UpdateAgentConfigResponse2, UpdateAgentConfigResponses, UpdateAgentProfileData, UpdateAgentProfileError, UpdateAgentProfileErrors, UpdateAgentProfileRequest, UpdateAgentProfileResponse, UpdateAgentProfileResponses, UpdateConfiguredModelData, UpdateConfiguredModelError, UpdateConfiguredModelErrors, UpdateConfiguredModelRequest, UpdateConfiguredModelResponse, UpdateConfiguredModelResponses, UpdateMachineData, UpdateMachineError, UpdateMachineErrors, UpdateMachinePoolData, UpdateMachinePoolError, UpdateMachinePoolErrors, UpdateMachinePoolRequest, UpdateMachinePoolResponse, UpdateMachinePoolResponses, UpdateMachineRequest, UpdateMachineResponse, UpdateMachineResponses, UpdateModelProviderConfigData, UpdateModelProviderConfigError, UpdateModelProviderConfigErrors, UpdateModelProviderConfigRequest, UpdateModelProviderConfigResponse, UpdateModelProviderConfigResponses, UpdateOrgApiKeyData, UpdateOrgApiKeyError, UpdateOrgApiKeyErrors, UpdateOrgApiKeyRequest, UpdateOrgApiKeyResponse, UpdateOrgApiKeyResponses, UpdateOrgMemberData, UpdateOrgMemberError, UpdateOrgMemberErrors, UpdateOrgMemberRequest, UpdateOrgMemberResponse, UpdateOrgMemberResponses, UpdateProjectMachinePoolGrantData, UpdateProjectMachinePoolGrantError, UpdateProjectMachinePoolGrantErrors, UpdateProjectMachinePoolGrantRequest, UpdateProjectMachinePoolGrantResponse, UpdateProjectMachinePoolGrantResponses, UpdateProjectModelGrantData, UpdateProjectModelGrantError, UpdateProjectModelGrantErrors, UpdateProjectModelGrantRequest, UpdateProjectModelGrantResponse, UpdateProjectModelGrantResponses, UpdateSecretData, UpdateSecretError, UpdateSecretErrors, UpdateSecretRequest, UpdateSecretResponse, UpdateSecretResponses, UserId, UserSecretOwner, UserSecretOwnerInput, UserSkillOwner, UserSkillOwnerInput, VisibleMachine, VisibleProject } from './types.gen'; diff --git a/frontend/packages/sdk/src/generated/types.gen.ts b/frontend/packages/sdk/src/generated/types.gen.ts index 27ee01fac..e096e5118 100644 --- a/frontend/packages/sdk/src/generated/types.gen.ts +++ b/frontend/packages/sdk/src/generated/types.gen.ts @@ -967,9 +967,17 @@ export type ModelStopReason = 'end_turn' | 'tool_use' | 'max_tokens' | 'refusal' */ export type ModelOutputStopReason = 'end_turn' | 'tool_use' | 'max_tokens' | 'refusal' | 'content_filter' | 'error'; +/** + * Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + */ +export type ContentBlockMetadata = { + [key: string]: unknown; +}; + export type TextContentBlock = { type: 'text'; text: string; + metadata?: ContentBlockMetadata; }; export type InlineMediaContentBlock = { @@ -977,26 +985,31 @@ export type InlineMediaContentBlock = { media_type: 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp' | 'application/pdf' | 'text/plain' | 'text/markdown' | 'text/csv' | 'text/tab-separated-values' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' | 'application/vnd.openxmlformats-officedocument.presentationml.presentation' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; filename?: string; data: string; + metadata?: ContentBlockMetadata; }; export type MediaRefContentBlock = { type: 'media_ref'; artifact_id: ArtifactId; + metadata?: ContentBlockMetadata; }; export type ReasoningContentBlock = { type: 'reasoning'; text: string; + metadata?: ContentBlockMetadata; }; export type ErrorContentBlock = { type: 'error'; text: string; + metadata?: ContentBlockMetadata; }; export type StructuredDataContentBlock = { type: 'structured_data'; value: JsonBlob; + metadata?: ContentBlockMetadata; }; export type ModelToolCallContentBlock = { @@ -1005,6 +1018,7 @@ export type ModelToolCallContentBlock = { tool_type: ToolCallType; name: string; input: ToolInput; + metadata?: ContentBlockMetadata; }; export type CreateAgentInputContentBlock = ({ diff --git a/frontend/packages/sdk/src/generated/zod.gen.ts b/frontend/packages/sdk/src/generated/zod.gen.ts index 05b0f8b0b..34a95088f 100644 --- a/frontend/packages/sdk/src/generated/zod.gen.ts +++ b/frontend/packages/sdk/src/generated/zod.gen.ts @@ -732,9 +732,15 @@ export const zModelOutputStopReason = z.enum([ 'error' ]); +/** + * Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + */ +export const zContentBlockMetadata = z.record(z.string(), z.unknown()); + export const zTextContentBlock = z.object({ type: z.enum(['text']), - text: z.string() + text: z.string(), + metadata: zContentBlockMetadata.optional() }); export const zInlineMediaContentBlock = z.object({ @@ -754,22 +760,26 @@ export const zInlineMediaContentBlock = z.object({ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ]), filename: z.string().max(255).optional(), - data: z.string().min(1) + data: z.string().min(1), + metadata: zContentBlockMetadata.optional() }); export const zMediaRefContentBlock = z.object({ type: z.enum(['media_ref']), - artifact_id: zArtifactId + artifact_id: zArtifactId, + metadata: zContentBlockMetadata.optional() }); export const zReasoningContentBlock = z.object({ type: z.enum(['reasoning']), - text: z.string() + text: z.string(), + metadata: zContentBlockMetadata.optional() }); export const zErrorContentBlock = z.object({ type: z.enum(['error']), - text: z.string() + text: z.string(), + metadata: zContentBlockMetadata.optional() }); export const zCreateAgentInputContentBlock = z.discriminatedUnion('type', [ @@ -841,7 +851,8 @@ export const zJsonBlob = z.unknown(); export const zStructuredDataContentBlock = z.object({ type: z.enum(['structured_data']), - value: zJsonBlob + value: zJsonBlob, + metadata: zContentBlockMetadata.optional() }); export const zToolResultContentBlock = z.discriminatedUnion('type', [ @@ -882,7 +893,8 @@ export const zModelToolCallContentBlock = z.object({ tool_call_id: zToolCallId, tool_type: zToolCallType, name: z.string(), - input: zToolInput + input: zToolInput, + metadata: zContentBlockMetadata.optional() }); export const zModelOutputContentBlock = z.discriminatedUnion('type', [ diff --git a/internal/dbmigrate/postgres_integration_test.go b/internal/dbmigrate/postgres_integration_test.go index cc1e24a2c..cc840733c 100644 --- a/internal/dbmigrate/postgres_integration_test.go +++ b/internal/dbmigrate/postgres_integration_test.go @@ -5,6 +5,7 @@ package dbmigrate_test import ( "context" "database/sql" + "fmt" "net/url" "os" "path/filepath" @@ -568,8 +569,9 @@ func TestPostgresMigrationFailureRollsBack(t *testing.T) { defer cancel() _, db := openPostgresMigrationTestDB(t, ctx) + nextVersion := currentPostgresMigrationVersion(t, ctx, db) + 1 failing := fstest.MapFS{ - "000011_failing.sql": { + fmt.Sprintf("%06d_failing.sql", nextVersion): { Data: []byte(`-- +goose Up CREATE TABLE migration_transaction_probe(id bigint PRIMARY KEY); SELECT missing_migration_function(); @@ -598,8 +600,9 @@ func TestPostgresMigrationsSerializeConcurrentRunners(t *testing.T) { defer cancel() _, db := openPostgresMigrationTestDB(t, ctx) + nextVersion := currentPostgresMigrationVersion(t, ctx, db) + 1 locked := fstest.MapFS{ - "000011_locked.sql": { + fmt.Sprintf("%06d_locked.sql", nextVersion): { Data: []byte(`-- +goose Up SELECT pg_sleep(0.2); CREATE TABLE migration_lock_probe(id bigint PRIMARY KEY); @@ -630,7 +633,8 @@ CREATE TABLE migration_lock_probe(id bigint PRIMARY KEY); ctx, `SELECT count(*) FROM goose_db_version - WHERE version_id = 11 AND is_applied`, + WHERE version_id = $1 AND is_applied`, + nextVersion, ).Scan(&applied); err != nil { t.Fatal(err) } @@ -645,10 +649,12 @@ func TestPostgresRejectsNewerDatabaseVersion(t *testing.T) { defer cancel() _, db := openPostgresMigrationTestDB(t, ctx) + newerVersion := currentPostgresMigrationVersion(t, ctx, db) + 1 if _, err := db.ExecContext( ctx, `INSERT INTO goose_db_version(version_id, is_applied) - VALUES(11, true)`, + VALUES($1, true)`, + newerVersion, ); err != nil { t.Fatal(err) } @@ -664,18 +670,20 @@ func TestPostgresOlderMigratorSeesConcurrentNewerVersion(t *testing.T) { defer cancel() pool, db := openPostgresMigrationTestDB(t, ctx) - versionEleven := []byte(`-- +goose Up + nextVersion := currentPostgresMigrationVersion(t, ctx, db) + 1 + newerVersion := nextVersion + 1 + nextMigration := []byte(`-- +goose Up SELECT pg_sleep(1) /* omnara_concurrent_migration_probe */; -CREATE TABLE concurrent_migration_eleven(id bigint PRIMARY KEY); +CREATE TABLE concurrent_migration_next(id bigint PRIMARY KEY); `) older := fstest.MapFS{ - "000011_concurrent.sql": {Data: versionEleven}, + fmt.Sprintf("%06d_concurrent.sql", nextVersion): {Data: nextMigration}, } newer := fstest.MapFS{ - "000011_concurrent.sql": {Data: versionEleven}, - "000012_newer.sql": { + fmt.Sprintf("%06d_concurrent.sql", nextVersion): {Data: nextMigration}, + fmt.Sprintf("%06d_newer.sql", newerVersion): { Data: []byte(`-- +goose Up -CREATE TABLE concurrent_migration_twelve(id bigint PRIMARY KEY); +CREATE TABLE concurrent_migration_newer(id bigint PRIMARY KEY); `), }, } @@ -731,3 +739,17 @@ func openPostgresMigrationTestDB( t.Cleanup(func() { _ = db.Close() }) return pool, db } + +func currentPostgresMigrationVersion(t *testing.T, ctx context.Context, db *sql.DB) int64 { + t.Helper() + var version int64 + if err := db.QueryRowContext( + ctx, + `SELECT coalesce(max(version_id), 0) + FROM goose_db_version + WHERE is_applied`, + ).Scan(&version); err != nil { + t.Fatal(err) + } + return version +} diff --git a/internal/httpapi/integration_event_routes.go b/internal/httpapi/integration_event_routes.go index bbb2595a2..93a9a3f73 100644 --- a/internal/httpapi/integration_event_routes.go +++ b/internal/httpapi/integration_event_routes.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net/http" + "strings" "time" "github.com/omnara-ai/omnara/internal/httpapi/apierror" @@ -295,17 +296,15 @@ func (s *Server) processIntegrationInboundEvent( if siblingEventAlreadyAccepted { visibleEvent.Text = slack.AttachmentOnlyMessageText } - modelVisibleText := slack.ModelVisibleText( + messageText, hiddenText := slack.ModelInputTextParts( visibleEvent, route, newlyMapped, historyText, labels, ) - contentText := modelVisibleText - if skippedFileSummary := slack.SkippedFileSummary(fileIngest.Files); skippedFileSummary != "" { - contentText += "\n\n" + skippedFileSummary - } + displayText := labels.RenderDisplayText(strings.TrimSpace(visibleEvent.Text)) + skippedFileSummary := slack.SkippedFileSummary(fileIngest.Files) metadata, err := slack.InboundEventMetadata( integrationstore.IntegrationProviderSlack, envelope, @@ -316,10 +315,30 @@ func (s *Server) processIntegrationInboundEvent( if err != nil { return true, err } - contentBlockPayload := append( - []map[string]any{{"type": "text", "text": contentText}}, - fileIngest.Blocks..., - ) + hiddenMetadata := map[string]any{"omnara_hidden": true} + contentBlockPayload := make([]map[string]any, 0, 3+len(fileIngest.Blocks)) + contentBlockPayload = append(contentBlockPayload, map[string]any{ + "type": "text", + "text": hiddenText, + "metadata": hiddenMetadata, + }) + if messageText != "" { + block := map[string]any{"type": "text", "text": messageText} + if siblingEventAlreadyAccepted { + block["metadata"] = hiddenMetadata + } else if displayText != messageText { + block["metadata"] = map[string]any{"omnara_display_text": displayText} + } + contentBlockPayload = append(contentBlockPayload, block) + } + if skippedFileSummary != "" { + contentBlockPayload = append(contentBlockPayload, map[string]any{ + "type": "text", + "text": "\n" + skippedFileSummary, + "metadata": hiddenMetadata, + }) + } + contentBlockPayload = append(contentBlockPayload, fileIngest.Blocks...) contentBlocks, err := marshalJSON(contentBlockPayload) if err != nil { return true, err diff --git a/internal/httpapi/integration_event_routes_integration_test.go b/internal/httpapi/integration_event_routes_integration_test.go index 66f443f06..1299c3f9d 100644 --- a/internal/httpapi/integration_event_routes_integration_test.go +++ b/internal/httpapi/integration_event_routes_integration_test.go @@ -9,6 +9,7 @@ import ( "net/http" "net/http/httptest" "net/url" + "slices" "strconv" "sync" "testing" @@ -560,6 +561,7 @@ func TestSlackEventsReusesStoredDisplayNames(t *testing.T) { "This message directly mentioned the agent inside a Slack thread that is already attached to this agent.\n\n"+ "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n"+ "<@U_BOT> (Omnara) follow up", + []bool{true, false}, ) } @@ -624,7 +626,21 @@ func TestSlackEventsResolvesMentionedUserDisplayNameInMemory(t *testing.T) { "The agent was mentioned in a Slack channel, so this message starts a new Slack thread for communicating with the agent.\n\n"+ "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n"+ "<@U_BOT> (Omnara) ask <@U456> (Ben) to review this", + []bool{true, false}, ) + var displayText string + if err := pool.QueryRow(ctx, ` + SELECT coalesce(metadata->>'omnara_display_text', '') + FROM content_blocks + WHERE agent_id = $1 + AND owner_agent_input_id = $2 + AND ordinal = 1 + `, input.AgentID, input.ID).Scan(&displayText); err != nil { + t.Fatalf("load Slack input display text: %v", err) + } + if displayText != "@Omnara ask @Ben to review this" { + t.Fatalf("Slack input display text = %q", displayText) + } mentionedNames, err := fixture.Project.Store.Execution().ListActorDisplayNames( ctx, fixture.Project.ProjectUUID, @@ -781,6 +797,7 @@ func TestSlackEventsMentionedMessageCopyDefersToAppMention(t *testing.T) { "This message directly mentioned the agent inside a Slack thread that is already attached to this agent.\n\n"+ "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n"+ "<@U_BOT> (Omnara) important follow up", + []bool{true, false}, ) } @@ -1797,6 +1814,7 @@ func TestSlackEventsDMFileCreatesArtifactInput(t *testing.T) { pool, input, "<@U123> (Ada) in Slack DM:\nwhat is this?", + []bool{true, false}, ) artifactID := assertAgentInputArtifactBlock(t, ctx, pool, input) content, artifact, err := fixture.Project.Store.Artifacts().GetArtifactBlob( @@ -1901,6 +1919,7 @@ func TestSlackEventsSkippedFileCreatesInputWithoutArtifact(t *testing.T) { pool, input, "<@U123> (Ada) in Slack DM:\nplease inspect\n\nSlack files not included:\n- large.png skipped: too large", + []bool{true, false, true}, ) var artifactBlocks int64 if err := pool.QueryRow(ctx, ` @@ -2055,6 +2074,7 @@ func TestSlackEventsDelayedFileShareCreatesNeutralArtifactInput(t *testing.T) { "This message was posted in a Slack thread that is already attached to this agent. It may be part of the ongoing conversation even if it does not directly mention the agent.\n\n"+ "<@U123> (Ada) in <#CDELAY> (#delayed), thread 222.333:\n"+ "Files for the previous Slack message.", + []bool{true, true}, ) assertAgentInputArtifactBlock(t, ctx, pool, input) response = requestJSONWithHeaders( @@ -2283,6 +2303,7 @@ func TestSlackEventsMentionedThreadFileShareCreatesArtifactInput(t *testing.T) { "This message was routed to a Slack thread attached to this agent.\n\n"+ "<@U123> (Ada) in <#CTHREADFILE> (#thread-file), thread 111.222:\n"+ "<@U_BOT> (Omnara) inspect this", + []bool{true, false}, ) artifactID := assertAgentInputArtifactBlock(t, ctx, pool, input) if _, _, err := fixture.Project.Store.Artifacts().GetArtifactBlob( @@ -2561,6 +2582,7 @@ func TestSlackEventsThreadStartHistoryFetchBoundsBeforeTrigger(t *testing.T) { "<@U999> (Grace): earlier\n\n"+ "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n"+ "<@U_BOT> (Omnara) use the prior context", + []bool{true, false}, ) } @@ -2930,6 +2952,7 @@ func TestSlackEventsSlowLookupsStillAcceptInput(t *testing.T) { "The agent was mentioned in a Slack channel, so this message starts a new Slack thread for communicating with the agent.\n\n"+ "<@U123> in <#C123>, thread 111.222:\n"+ "<@U_BOT> (Omnara) hello", + []bool{true, false}, ) } @@ -3630,12 +3653,14 @@ func assertAgentInputText( pool *pgxpool.Pool, input executionstore.AgentInputRecord, want string, + wantHidden []bool, ) { t.Helper() var got string - var blocks int64 + var hidden []bool if err := pool.QueryRow(ctx, ` - SELECT coalesce(string_agg(text_content, '' ORDER BY ordinal), ''), count(*)::bigint + SELECT coalesce(string_agg(text_content, E'\n' ORDER BY ordinal), ''), + array_agg(coalesce(block.metadata->'omnara_hidden' = 'true'::jsonb, false) ORDER BY ordinal) FROM content_blocks block JOIN agent_inputs owner ON owner.agent_id = block.agent_id @@ -3644,15 +3669,18 @@ func assertAgentInputText( AND block.agent_id = $2 AND block.owner_agent_input_id = $3 AND block.block_kind = 'text' - `, input.ProjectID, input.AgentID, input.ID).Scan(&got, &blocks); err != nil { + `, input.ProjectID, input.AgentID, input.ID).Scan(&got, &hidden); err != nil { t.Fatalf("load agent input text content: %v", err) } - if blocks != 1 { - t.Fatalf("agent input text blocks = %d, want 1", blocks) + if len(hidden) == 0 { + t.Fatal("agent input has no text blocks") } if got != want { t.Fatalf("agent input text =\n%s\nwant\n%s", got, want) } + if !slices.Equal(hidden, wantHidden) { + t.Fatalf("agent input text block visibility = %v, want %v", hidden, wantHidden) + } } func assertAgentInputArtifactBlock( diff --git a/internal/httpapi/media_ingest.go b/internal/httpapi/media_ingest.go index 033affc04..c40567e62 100644 --- a/internal/httpapi/media_ingest.go +++ b/internal/httpapi/media_ingest.go @@ -36,13 +36,15 @@ type pendingAttachment struct { mediaType string filename string content []byte + metadata json.RawMessage } type inboundBlock struct { - Type string `json:"type"` - Data string `json:"data,omitempty"` - MediaType string `json:"media_type,omitempty"` - Filename string `json:"filename,omitempty"` + Type string `json:"type"` + Data string `json:"data,omitempty"` + MediaType string `json:"media_type,omitempty"` + Filename string `json:"filename,omitempty"` + Metadata json.RawMessage `json:"metadata,omitempty"` } func (s *Server) extractInlineMedia( @@ -78,6 +80,15 @@ func (s *Server) extractInlineMedia( nonAttachmentBytes += len(raw) continue } + if len(block.Metadata) > 0 { + var metadata map[string]json.RawMessage + if err := json.Unmarshal(block.Metadata, &metadata); err != nil || metadata == nil { + return nil, mediaIngestError{ + fmt.Sprintf("content block %d: metadata must be a JSON object", ordinal), + } + } + } + nonAttachmentBytes += len(block.Metadata) if block.Data == "" { return nil, mediaIngestError{ fmt.Sprintf( @@ -140,6 +151,7 @@ func (s *Server) extractInlineMedia( mediaType: block.MediaType, filename: block.Filename, content: content, + metadata: block.Metadata, } } if nonAttachmentBytes > maxContentBlockBytes { @@ -176,9 +188,14 @@ func (s *Server) extractInlineMedia( if err != nil { return nil, fmt.Errorf("store attachment %d: %w", ordinal, err) } - rewritten, err := json.Marshal( - map[string]any{"type": "media_ref", "artifact_id": artifact.ID.String()}, - ) + rewrittenBlock := map[string]any{ + "type": "media_ref", + "artifact_id": artifact.ID.String(), + } + if len(attachment.metadata) > 0 { + rewrittenBlock["metadata"] = attachment.metadata + } + rewritten, err := json.Marshal(rewrittenBlock) if err != nil { return nil, fmt.Errorf("encode attachment block %d: %w", ordinal, err) } diff --git a/internal/httpapi/openapi/api.gen.go b/internal/httpapi/openapi/api.gen.go index ca761d396..ba4512b17 100644 --- a/internal/httpapi/openapi/api.gen.go +++ b/internal/httpapi/openapi/api.gen.go @@ -2313,6 +2313,9 @@ type ConfiguredModelSummary struct { UpdatedAt Timestamp `json:"updated_at"` } +// ContentBlockMetadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. +type ContentBlockMetadata = json.RawMessage + // ContextCheckpointEvent defines model for ContextCheckpointEvent. type ContextCheckpointEvent struct { AgentId AgentID `json:"agent_id"` @@ -2762,8 +2765,10 @@ type ErrorCode string // ErrorContentBlock defines model for ErrorContentBlock. type ErrorContentBlock struct { - Text string `json:"text"` - Type ErrorContentBlockType `json:"type"` + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Text string `json:"text"` + Type ErrorContentBlockType `json:"type"` } // ErrorContentBlockType defines model for ErrorContentBlock.Type. @@ -2817,7 +2822,10 @@ type InlineMediaContentBlock struct { Data []byte `json:"data"` Filename *string `json:"filename,omitempty"` MediaType InlineMediaContentBlockMediaType `json:"media_type"` - Type InlineMediaContentBlockType `json:"type"` + + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Type InlineMediaContentBlockType `json:"type"` } // InlineMediaContentBlockMediaType defines model for InlineMediaContentBlock.MediaType. @@ -3279,8 +3287,11 @@ type ManagementKind string // MediaRefContentBlock defines model for MediaRefContentBlock. type MediaRefContentBlock struct { - ArtifactId ArtifactID `json:"artifact_id"` - Type MediaRefContentBlockType `json:"type"` + ArtifactId ArtifactID `json:"artifact_id"` + + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Type MediaRefContentBlockType `json:"type"` } // MediaRefContentBlockType defines model for MediaRefContentBlock.Type. @@ -3519,9 +3530,12 @@ type ModelStopReason string // ModelToolCallContentBlock defines model for ModelToolCallContentBlock. type ModelToolCallContentBlock struct { // Input Non-null JSON object containing the arguments emitted for a tool call. - Input ToolInput `json:"input"` - Name string `json:"name"` - ToolCallId ToolCallID `json:"tool_call_id"` + Input ToolInput `json:"input"` + + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Name string `json:"name"` + ToolCallId ToolCallID `json:"tool_call_id"` // ToolType Identifies who manages execution. Built-in and MCP calls are platform-managed; custom calls wait for an external consumer to submit their result. ToolType ToolCallType `json:"tool_type"` @@ -3957,8 +3971,10 @@ type PromoteQueuedInputToSteeringRequest struct { // ReasoningContentBlock defines model for ReasoningContentBlock. type ReasoningContentBlock struct { - Text string `json:"text"` - Type ReasoningContentBlockType `json:"type"` + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Text string `json:"text"` + Type ReasoningContentBlockType `json:"type"` } // ReasoningContentBlockType defines model for ReasoningContentBlock.Type. @@ -4149,7 +4165,9 @@ type SlackSetupIcon struct { // StructuredDataContentBlock defines model for StructuredDataContentBlock. type StructuredDataContentBlock struct { - Type StructuredDataContentBlockType `json:"type"` + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Type StructuredDataContentBlockType `json:"type"` // Value Public JSON payload whose shape is determined by the event or interaction kind. Value nullable.Nullable[JSONBlob] `json:"value"` @@ -4183,8 +4201,10 @@ type SubmitToolResultContentBlock struct { // TextContentBlock defines model for TextContentBlock. type TextContentBlock struct { - Text string `json:"text"` - Type TextContentBlockType `json:"type"` + // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + Metadata ContentBlockMetadata `json:"metadata,omitempty"` + Text string `json:"text"` + Type TextContentBlockType `json:"type"` } // TextContentBlockType defines model for TextContentBlock.Type. @@ -33678,524 +33698,526 @@ func (sh *strictHandler) GetToolCatalog(w http.ResponseWriter, r *http.Request) // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "+p9//X8AAAD//w==", + "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", + "+d3eQwfJX7i8WBPJT/DJxb/++1//FwAA//8=", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/httpapi/public_api_events_workflow_integration_test.go b/internal/httpapi/public_api_events_workflow_integration_test.go index bc56c1378..6a0c792ea 100644 --- a/internal/httpapi/public_api_events_workflow_integration_test.go +++ b/internal/httpapi/public_api_events_workflow_integration_test.go @@ -710,7 +710,7 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { handler, http.MethodPost, project.ProjectPath+"/agents/"+agentPublicID+"/inputs", - `{"content_blocks":[{"type":"text","text":"visible user input"}]}`, + `{"content_blocks":[{"type":"text","text":"visible user input","metadata":{"omnara_hidden":true,"source":{"kind":"test"}}}]}`, "idem-visible-input", http.StatusCreated, authHeaders(project.AdminToken), @@ -819,7 +819,7 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { ID: toolCalls[0].ID, RuntimeLockID: runtime.ID, Outcome: executionstore.ToolResultOutcomeSucceeded, - ResultContentParts: json.RawMessage(`[{"type":"text","text":"visible tool result"}]`), + ResultContentParts: json.RawMessage(`[{"type":"text","text":"visible tool result","metadata":{"tool_result":true}}]`), }) if err != nil { t.Fatalf("complete tool call: %v", err) @@ -926,6 +926,37 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { !publicEventTextEquals(eventData[3].(map[string]any), "visible tool result") { t.Fatalf("events should expose canonical content blocks: %+v", eventData) } + inputMetadata := eventData[1].(map[string]any)["content_blocks"].([]any)[0].(map[string]any)["metadata"].(map[string]any) + inputSource, ok := inputMetadata["source"].(map[string]any) + if inputMetadata["omnara_hidden"] != true || !ok || inputSource["kind"] != "test" { + t.Fatalf("input content block metadata = %+v", inputMetadata) + } + toolResultMetadata := eventData[3].(map[string]any)["content_blocks"].([]any)[0].(map[string]any)["metadata"].(map[string]any) + if toolResultMetadata["tool_result"] != true { + t.Fatalf("tool result content block metadata = %+v", toolResultMetadata) + } + contextEvents, err := store.Execution().ListContextEvents( + ctx, + project.ProjectUUID, + agentID, + 0, + jsonInt64(t, eventData[3].(map[string]any)["sequence"]), + 100, + ) + if err != nil { + t.Fatalf("list model context events: %v", err) + } + sawInput := false + for _, contextEvent := range contextEvents { + contentParts := string(contextEvent.ContentParts) + if strings.Contains(contentParts, `"metadata"`) { + t.Fatalf("model context exposed content block metadata: %s", contentParts) + } + sawInput = sawInput || strings.Contains(contentParts, "visible user input") + } + if !sawInput { + t.Fatal("model context omitted input content") + } toolCallPublicID, err := publicID( publicid.KindToolCall, completedToolCall.ID, diff --git a/internal/httpapi/public_content_blocks.go b/internal/httpapi/public_content_blocks.go index b007acf22..61dfbc0fe 100644 --- a/internal/httpapi/public_content_blocks.go +++ b/internal/httpapi/public_content_blocks.go @@ -19,13 +19,15 @@ type storedContentBlockType struct { } type storedTextContentBlock struct { - Type string `json:"type"` - Text *string `json:"text"` + Type string `json:"type"` + Text *string `json:"text"` + Metadata json.RawMessage `json:"metadata,omitempty"` } type storedMediaRefContentBlock struct { - Type string `json:"type"` - ArtifactID string `json:"artifact_id"` + Type string `json:"type"` + ArtifactID string `json:"artifact_id"` + Metadata json.RawMessage `json:"metadata,omitempty"` } type storedToolCallContentBlock struct { @@ -34,11 +36,13 @@ type storedToolCallContentBlock struct { ToolType string `json:"tool_type"` Name string `json:"name"` Input json.RawMessage `json:"input"` + Metadata json.RawMessage `json:"metadata,omitempty"` } type storedStructuredDataContentBlock struct { - Type string `json:"type"` - Value json.RawMessage `json:"value"` + Type string `json:"type"` + Value json.RawMessage `json:"value"` + Metadata json.RawMessage `json:"metadata,omitempty"` } func decodeStoredContentBlocks(raw json.RawMessage) ([]json.RawMessage, error) { @@ -164,12 +168,13 @@ func publicModelOutputContentBlocks( return nil, err } case "reasoning": - reasoning, err := decodeStoredTextContentBlock(block, index, "reasoning") + reasoning, metadata, err := decodeStoredTextContentBlock(block, index, "reasoning") if err != nil { return nil, err } if err := public.FromReasoningContentBlock(openapi.ReasoningContentBlock{ - Text: reasoning, + Text: reasoning, + Metadata: metadata, }); err != nil { return nil, err } @@ -182,12 +187,13 @@ func publicModelOutputContentBlocks( return nil, err } case "error": - errorText, err := decodeStoredTextContentBlock(block, index, "error") + errorText, metadata, err := decodeStoredTextContentBlock(block, index, "error") if err != nil { return nil, err } if err := public.FromErrorContentBlock(openapi.ErrorContentBlock{ - Text: errorText, + Text: errorText, + Metadata: metadata, }); err != nil { return nil, err } @@ -254,7 +260,8 @@ func publicToolResultContentBlocks( return nil, err } if err := public.FromStructuredDataContentBlock(openapi.StructuredDataContentBlock{ - Value: value, + Value: value, + Metadata: stored.Metadata, }); err != nil { return nil, err } @@ -274,24 +281,24 @@ func publicTextContentBlock( raw json.RawMessage, index int, ) (openapi.TextContentBlock, error) { - text, err := decodeStoredTextContentBlock(raw, index, "text") + text, metadata, err := decodeStoredTextContentBlock(raw, index, "text") if err != nil { return openapi.TextContentBlock{}, err } - return openapi.TextContentBlock{Text: text}, nil + return openapi.TextContentBlock{Text: text, Metadata: metadata}, nil } func decodeStoredTextContentBlock( raw json.RawMessage, index int, expectedType string, -) (string, error) { +) (string, json.RawMessage, error) { var block storedTextContentBlock if err := decodeStoredContentBlock(raw, index, &block); err != nil { - return "", err + return "", nil, err } if block.Type != expectedType { - return "", fmt.Errorf( + return "", nil, fmt.Errorf( "%s content block %d has type %q", expectedType, index, @@ -299,9 +306,9 @@ func decodeStoredTextContentBlock( ) } if block.Text == nil { - return "", fmt.Errorf("%s content block %d is missing text", expectedType, index) + return "", nil, fmt.Errorf("%s content block %d is missing text", expectedType, index) } - return *block.Text, nil + return *block.Text, block.Metadata, nil } func publicMediaRefContentBlock( @@ -330,7 +337,10 @@ func publicMediaRefContentBlock( if err != nil { return openapi.MediaRefContentBlock{}, err } - return openapi.MediaRefContentBlock{ArtifactId: artifactID}, nil + return openapi.MediaRefContentBlock{ + ArtifactId: artifactID, + Metadata: block.Metadata, + }, nil } func publicModelToolCallContentBlock( @@ -382,6 +392,7 @@ func publicModelToolCallContentBlock( } return openapi.ModelToolCallContentBlock{ Input: input, + Metadata: block.Metadata, Name: block.Name, ToolCallId: toolCallID, ToolType: toolType, diff --git a/internal/httpapi/session_input_media_integration_test.go b/internal/httpapi/session_input_media_integration_test.go index 0d3440c06..4864c6039 100644 --- a/internal/httpapi/session_input_media_integration_test.go +++ b/internal/httpapi/session_input_media_integration_test.go @@ -63,7 +63,7 @@ func TestSessionInputInlineMediaUploadAndDownload(t *testing.T) { pngBase64 := base64.StdEncoding.EncodeToString(testPNGBytes) body := `{"content_blocks":[` + `{"type":"text","text":"what is in this image?"},` + - `{"type":"media","media_type":"image/png","filename":"pixel.png","data":"` + pngBase64 + `"}` + + `{"type":"media","media_type":"image/png","filename":"pixel.png","data":"` + pngBase64 + `","metadata":{"omnara_hidden":true}}` + `]}` created := requestJSONWithHeaders( t, @@ -85,6 +85,10 @@ func TestSessionInputInlineMediaUploadAndDownload(t *testing.T) { if mediaBlock["type"] != "media_ref" { t.Fatalf("expected media_ref block, got %+v", mediaBlock) } + blockMetadata, ok := mediaBlock["metadata"].(map[string]any) + if !ok || blockMetadata["omnara_hidden"] != true { + t.Fatalf("media metadata was not preserved: %+v", mediaBlock) + } artifactID, _ := mediaBlock["artifact_id"].(string) if !strings.HasPrefix(artifactID, "art_") { t.Fatalf("expected public artifact id, got %q", artifactID) diff --git a/internal/integration/slack/events.go b/internal/integration/slack/events.go index 824b6eebf..6992385dd 100644 --- a/internal/integration/slack/events.go +++ b/internal/integration/slack/events.go @@ -429,27 +429,27 @@ func textMentionsBot(text, botUserID string) bool { return false } -func ModelVisibleText( +func ModelInputTextParts( event Event, route InboundRoute, newlyMapped bool, history string, labels DisplayLabels, -) string { +) (string, string) { location := labels.ChannelLocation(event.Channel, event.ChannelType) if threadTS := routeThreadTS(route); threadTS != "" { location += ", thread " + threadTS } - current := labels.UserReference(event.User) + " in " + location + ":\n" + - labels.RenderText(strings.TrimSpace(event.Text)) + prefix := labels.UserReference(event.User) + " in " + location + ":" + message := labels.RenderText(strings.TrimSpace(event.Text)) if event.ChannelType == "im" { - return current + return message, prefix } context := modelVisibleContext(event, route, newlyMapped) if history != "" { - return context + "\n\n" + history + "\n\n" + current + context += "\n\n" + history } - return context + "\n\n" + current + return message, context + "\n\n" + prefix } func routeThreadTS(route InboundRoute) string { @@ -504,6 +504,14 @@ func (labels DisplayLabels) ChannelReference(channelID string) string { } func (labels DisplayLabels) RenderText(text string) string { + return labels.renderText(text, true) +} + +func (labels DisplayLabels) RenderDisplayText(text string) string { + return labels.renderText(text, false) +} + +func (labels DisplayLabels) renderText(text string, includeIDs bool) string { text = userMentionPattern.ReplaceAllStringFunc(text, func(raw string) string { match := userMentionPattern.FindStringSubmatch(raw) if len(match) < 2 { @@ -511,6 +519,9 @@ func (labels DisplayLabels) RenderText(text string) string { } value := labelOrFallback(label(labels.Users, match[1]), match, 2) if value := validUserDisplayLabel(value, match[1]); value != "" { + if !includeIDs { + return "@" + strings.TrimPrefix(value, "@") + } return userReference(match[1], value) } return raw @@ -521,6 +532,9 @@ func (labels DisplayLabels) RenderText(text string) string { return raw } if value := labelOrFallback(label(labels.Channels, match[1]), match, 2); value != "" { + if !includeIDs { + return "#" + strings.TrimPrefix(value, "#") + } return channelReference(match[1], value) } return raw diff --git a/internal/integration/slack/events_test.go b/internal/integration/slack/events_test.go index a9d4cdf10..13b511e6a 100644 --- a/internal/integration/slack/events_test.go +++ b/internal/integration/slack/events_test.go @@ -18,14 +18,15 @@ func (panicRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { panic("transport failure") } -func TestModelVisibleTextIncludesSlackContext(t *testing.T) { +func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { tests := []struct { name string event Event route InboundRoute newlyMapped bool history string - want string + wantMessage string + wantHidden string }{ { name: "dm", @@ -37,9 +38,9 @@ func TestModelVisibleTextIncludesSlackContext(t *testing.T) { ChannelType: "im", TS: "111.222", }, - route: InboundRoute{ProviderRef: "D123", ProviderRefKind: "dm"}, - want: "<@U123> (Ada) in Slack DM:\n" + - "hello", + route: InboundRoute{ProviderRef: "D123", ProviderRefKind: "dm"}, + wantMessage: "hello", + wantHidden: "<@U123> (Ada) in Slack DM:", }, { name: "new root mention with channel history", @@ -54,11 +55,12 @@ func TestModelVisibleTextIncludesSlackContext(t *testing.T) { route: InboundRoute{ProviderRef: "C123:111.222", ProviderRefKind: "thread"}, newlyMapped: true, history: "Recent Slack context:\n<@U999> (Grace): earlier channel note", - want: "The agent was mentioned in a Slack channel, so this message starts a new Slack thread for communicating with the agent.\n\n" + + wantMessage: "<@U_BOT> run", + wantHidden: "The agent was mentioned in a Slack channel, so this message starts " + + "a new Slack thread for communicating with the agent.\n\n" + "Recent Slack context:\n" + "<@U999> (Grace): earlier channel note\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:\n" + - "<@U_BOT> run", + "<@U123> (Ada) in <#C123>, thread 111.222:", }, { name: "new thread mention with thread history", @@ -74,11 +76,11 @@ func TestModelVisibleTextIncludesSlackContext(t *testing.T) { route: InboundRoute{ProviderRef: "C123:111.222", ProviderRefKind: "thread"}, newlyMapped: true, history: "Recent Slack context:\n<@U999> (Grace): earlier thread note", - want: "This message directly mentioned the agent inside an existing Slack thread.\n\n" + + wantMessage: "<@U_BOT> use the prior context", + wantHidden: "This message directly mentioned the agent inside an existing Slack thread.\n\n" + "Recent Slack context:\n" + "<@U999> (Grace): earlier thread note\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:\n" + - "<@U_BOT> use the prior context", + "<@U123> (Ada) in <#C123>, thread 111.222:", }, { name: "already mapped thread reply", @@ -91,10 +93,12 @@ func TestModelVisibleTextIncludesSlackContext(t *testing.T) { TS: "333.444", ThreadTS: "111.222", }, - route: InboundRoute{ProviderRef: "C123:111.222", ProviderRefKind: "thread", AppendOnly: true}, - want: "This message was posted in a Slack thread that is already attached to this agent. It may be part of the ongoing conversation even if it does not directly mention the agent.\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:\n" + - "one more thing", + route: InboundRoute{ProviderRef: "C123:111.222", ProviderRefKind: "thread", AppendOnly: true}, + wantMessage: "one more thing", + wantHidden: "This message was posted in a Slack thread that is already attached " + + "to this agent. It may be part of the ongoing conversation even if it does not " + + "directly mention the agent.\n\n" + + "<@U123> (Ada) in <#C123>, thread 111.222:", }, { name: "root mention without fetched history", @@ -108,27 +112,35 @@ func TestModelVisibleTextIncludesSlackContext(t *testing.T) { }, route: InboundRoute{ProviderRef: "C123:111.222", ProviderRefKind: "thread"}, newlyMapped: true, - want: "The agent was mentioned in a Slack channel, so this message starts a new Slack thread for communicating with the agent.\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:\n" + - "<@U_BOT> run", + wantMessage: "<@U_BOT> run", + wantHidden: "The agent was mentioned in a Slack channel, so this message starts " + + "a new Slack thread for communicating with the agent.\n\n" + + "<@U123> (Ada) in <#C123>, thread 111.222:", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - if got := ModelVisibleText( + message, hidden := ModelInputTextParts( test.event, test.route, test.newlyMapped, test.history, DisplayLabels{Users: map[string]string{"U123": "Ada"}}, - ); got != test.want { - t.Fatalf("ModelVisibleText =\n%s\nwant\n%s", got, test.want) + ) + if message != test.wantMessage || hidden != test.wantHidden { + t.Fatalf( + "ModelInputTextParts = (%q, %q), want (%q, %q)", + message, + hidden, + test.wantMessage, + test.wantHidden, + ) } }) } } -func TestModelVisibleTextRendersSlackNames(t *testing.T) { +func TestModelInputTextPartsRenderSlackNames(t *testing.T) { event := Event{ Type: "app_mention", User: "U123", @@ -149,13 +161,23 @@ func TestModelVisibleTextRendersSlackNames(t *testing.T) { "C999": "eng", }, } - got := ModelVisibleText(event, route, true, "", labels) - want := "The agent was mentioned in a Slack channel, so this message starts a new Slack thread " + + message, hidden := ModelInputTextParts(event, route, true, "", labels) + display := labels.RenderDisplayText(strings.TrimSpace(event.Text)) + wantHidden := "The agent was mentioned in a Slack channel, so this message starts a new Slack thread " + "for communicating with the agent.\n\n" + - "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n" + - "<@U_BOT> (Omnara) ask <@U456> (Ben) about <#C999> (#eng)" - if got != want { - t.Fatalf("ModelVisibleText =\n%s\nwant\n%s", got, want) + "<@U123> (Ada) in <#C123> (#general), thread 111.222:" + wantMessage := "<@U_BOT> (Omnara) ask <@U456> (Ben) about <#C999> (#eng)" + wantDisplay := "@Omnara ask @Ben about #eng" + if message != wantMessage || hidden != wantHidden || display != wantDisplay { + t.Fatalf( + "Slack text parts = (%q, %q, %q), want (%q, %q, %q)", + message, + hidden, + display, + wantMessage, + wantHidden, + wantDisplay, + ) } } diff --git a/internal/storage/executionstore/agent_content_inputs_store.go b/internal/storage/executionstore/agent_content_inputs_store.go index d9105e382..43104f03a 100644 --- a/internal/storage/executionstore/agent_content_inputs_store.go +++ b/internal/storage/executionstore/agent_content_inputs_store.go @@ -293,6 +293,7 @@ func agentInputContentBlocksTx( Ordinal: row.Ordinal, BlockKind: ContentBlockKind(row.BlockKind), TextContent: row.TextContent, + Metadata: row.Metadata, } if row.ArtifactID != nil { block.ArtifactID = *row.ArtifactID diff --git a/internal/storage/executionstore/content_blocks_store.go b/internal/storage/executionstore/content_blocks_store.go index bdf19812f..8da6cca91 100644 --- a/internal/storage/executionstore/content_blocks_store.go +++ b/internal/storage/executionstore/content_blocks_store.go @@ -22,7 +22,7 @@ func parseAgentInputContentBlocks( } blocks := make([]CreateContentBlockInput, 0, len(rawBlocks)) for ordinal, raw := range rawBlocks { - kind, fields, err := decodeContentBlock(raw) + kind, metadata, fields, err := decodeContentBlock(raw) if err != nil { return nil, storeerr.InvalidRequest( fmt.Errorf("agent input content block %d: %w", ordinal, err), @@ -43,6 +43,7 @@ func parseAgentInputContentBlocks( ) } block.Ordinal = int32(ordinal) + block.Metadata = metadata blocks = append(blocks, block) } return blocks, nil @@ -57,7 +58,7 @@ func parseToolResultContentBlocks( } blocks := make([]CreateContentBlockInput, 0, len(rawBlocks)) for ordinal, raw := range rawBlocks { - kind, fields, err := decodeContentBlock(raw) + kind, metadata, fields, err := decodeContentBlock(raw) if err != nil { return nil, storeerr.InvalidRequest( fmt.Errorf("tool result content block %d: %w", ordinal, err), @@ -80,6 +81,7 @@ func parseToolResultContentBlocks( ) } block.Ordinal = int32(ordinal) + block.Metadata = metadata blocks = append(blocks, block) } return blocks, nil @@ -100,29 +102,33 @@ func contentBlockArray(contentBlocks json.RawMessage) ([]json.RawMessage, error) func decodeContentBlock( raw json.RawMessage, -) (string, map[string]json.RawMessage, error) { +) (string, json.RawMessage, map[string]json.RawMessage, error) { var fields map[string]json.RawMessage if err := json.Unmarshal(raw, &fields); err != nil || fields == nil { - return "", nil, errors.New("must be a JSON object") + return "", nil, nil, errors.New("must be a JSON object") } rawType, ok := fields["type"] if !ok { - return "", nil, errors.New("requires type") + return "", nil, nil, errors.New("requires type") } var kind string if err := json.Unmarshal(rawType, &kind); err != nil { - return "", nil, errors.New("type must be a string") + return "", nil, nil, errors.New("type must be a string") } if kind == "" { - return "", nil, errors.New("requires type") + return "", nil, nil, errors.New("requires type") } - return kind, fields, nil + metadata, err := normalizedJSONObject(fields["metadata"], "metadata") + if err != nil { + return "", nil, nil, err + } + return kind, metadata, fields, nil } func parseTextContentBlock( fields map[string]json.RawMessage, ) (CreateContentBlockInput, error) { - if err := rejectContentBlockFields(fields, "type", "text"); err != nil { + if err := rejectContentBlockFields(fields, "text"); err != nil { return CreateContentBlockInput{}, err } rawText, ok := fields["text"] @@ -142,7 +148,7 @@ func parseTextContentBlock( func parseMediaRefContentBlock( fields map[string]json.RawMessage, ) (CreateContentBlockInput, error) { - if err := rejectContentBlockFields(fields, "type", "artifact_id"); err != nil { + if err := rejectContentBlockFields(fields, "artifact_id"); err != nil { return CreateContentBlockInput{}, err } artifactID, err := requiredArtifactID(fields["artifact_id"]) @@ -158,7 +164,7 @@ func parseMediaRefContentBlock( func parseStructuredDataContentBlock( fields map[string]json.RawMessage, ) (CreateContentBlockInput, error) { - if err := rejectContentBlockFields(fields, "type", "value"); err != nil { + if err := rejectContentBlockFields(fields, "value"); err != nil { return CreateContentBlockInput{}, err } value, ok := fields["value"] @@ -176,6 +182,9 @@ func rejectContentBlockFields( allowed ...string, ) error { for field := range fields { + if field == "type" || field == "metadata" { + continue + } found := false for _, allowedField := range allowed { if field == allowedField { @@ -225,25 +234,30 @@ func marshalAgentInputContentBlocks( func marshalAgentInputContentBlock( block CreateContentBlockInput, ) (json.RawMessage, error) { + metadata := contentBlockMetadataForOutput(block.Metadata) switch block.BlockKind { case ContentBlockKindText: return marshalJSON(struct { - Type string `json:"type"` - Text string `json:"text"` + Type string `json:"type"` + Text string `json:"text"` + Metadata json.RawMessage `json:"metadata,omitempty"` }{ - Type: "text", - Text: block.TextContent, + Type: "text", + Text: block.TextContent, + Metadata: metadata, }) case ContentBlockKindArtifact: if isNilID(block.ArtifactID) { return nil, errors.New("media_ref requires an artifact") } return marshalJSON(struct { - Type string `json:"type"` - ArtifactID string `json:"artifact_id"` + Type string `json:"type"` + ArtifactID string `json:"artifact_id"` + Metadata json.RawMessage `json:"metadata,omitempty"` }{ Type: "media_ref", ArtifactID: block.ArtifactID.String(), + Metadata: metadata, }) default: return nil, fmt.Errorf("unsupported block kind %q", block.BlockKind) @@ -267,38 +281,52 @@ func marshalToolResultContentBlocks( func marshalToolResultContentBlock( block CreateContentBlockInput, ) (json.RawMessage, error) { + metadata := contentBlockMetadataForOutput(block.Metadata) switch block.BlockKind { case ContentBlockKindText: return marshalJSON(struct { - Type string `json:"type"` - Text string `json:"text"` + Type string `json:"type"` + Text string `json:"text"` + Metadata json.RawMessage `json:"metadata,omitempty"` }{ - Type: "text", - Text: block.TextContent, + Type: "text", + Text: block.TextContent, + Metadata: metadata, }) case ContentBlockKindStructuredData: if len(block.StructuredData) == 0 { return nil, errors.New("structured_data requires a value") } return marshalJSON(struct { - Type string `json:"type"` - Value json.RawMessage `json:"value"` + Type string `json:"type"` + Value json.RawMessage `json:"value"` + Metadata json.RawMessage `json:"metadata,omitempty"` }{ - Type: "structured_data", - Value: block.StructuredData, + Type: "structured_data", + Value: block.StructuredData, + Metadata: metadata, }) case ContentBlockKindArtifact: if isNilID(block.ArtifactID) { return nil, errors.New("media_ref requires an artifact") } return marshalJSON(struct { - Type string `json:"type"` - ArtifactID string `json:"artifact_id"` + Type string `json:"type"` + ArtifactID string `json:"artifact_id"` + Metadata json.RawMessage `json:"metadata,omitempty"` }{ Type: "media_ref", ArtifactID: block.ArtifactID.String(), + Metadata: metadata, }) default: return nil, fmt.Errorf("unsupported block kind %q", block.BlockKind) } } + +func contentBlockMetadataForOutput(metadata json.RawMessage) json.RawMessage { + if sameJSON(normalizedJSON(metadata), json.RawMessage(`{}`)) { + return nil + } + return metadata +} diff --git a/internal/storage/executionstore/content_blocks_store_test.go b/internal/storage/executionstore/content_blocks_store_test.go index eafdae8a0..8dd28f690 100644 --- a/internal/storage/executionstore/content_blocks_store_test.go +++ b/internal/storage/executionstore/content_blocks_store_test.go @@ -32,6 +32,56 @@ func TestToolResultContentBlocksCanonicalizeToPersistedShape(t *testing.T) { } } +func TestContentBlockMetadataCanonicalizesToPersistedShape(t *testing.T) { + artifactID := "018ffc6b-7f1a-7828-8687-93aa210f5f4a" + tests := []struct { + name string + input json.RawMessage + parse func(json.RawMessage) ([]CreateContentBlockInput, error) + marshal func([]CreateContentBlockInput) (json.RawMessage, error) + }{ + { + name: "agent input", + input: json.RawMessage(`[{"type":"text","text":"hello","metadata":{"omnara_hidden":true}}]`), + parse: parseAgentInputContentBlocks, + marshal: marshalAgentInputContentBlocks, + }, + { + name: "tool result", + input: json.RawMessage(`[` + + `{"type":"structured_data","value":{"ok":true},"metadata":{"source":{"kind":"test"}}},` + + `{"type":"media_ref","artifact_id":"` + artifactID + `","metadata":{"position":2}}` + + `]`), + parse: parseToolResultContentBlocks, + marshal: marshalToolResultContentBlocks, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + blocks, err := test.parse(test.input) + if err != nil { + t.Fatalf("parse content blocks: %v", err) + } + canonical, err := test.marshal(blocks) + if err != nil { + t.Fatalf("marshal content blocks: %v", err) + } + if !sameJSON(canonical, test.input) { + t.Fatalf("canonical content blocks = %s, want %s", canonical, test.input) + } + }) + } +} + +func TestContentBlockMetadataRequiresObject(t *testing.T) { + _, err := parseAgentInputContentBlocks(json.RawMessage( + `[{"type":"text","text":"hello","metadata":true}]`, + )) + if err == nil || !errors.Is(err, storeerr.ErrInvalidRequest) { + t.Fatalf("invalid metadata error = %v, want invalid request", err) + } +} + func TestToolResultContentBlocksRejectUnpersistedEnvelopeFields(t *testing.T) { tests := []struct { name string diff --git a/internal/storage/executionstore/kernel_event_authority_store.go b/internal/storage/executionstore/kernel_event_authority_store.go index b6b205e30..ec5ed98ee 100644 --- a/internal/storage/executionstore/kernel_event_authority_store.go +++ b/internal/storage/executionstore/kernel_event_authority_store.go @@ -38,6 +38,7 @@ type CreateContentBlockInput struct { StructuredData json.RawMessage ArtifactID ID ToolCallID ID + Metadata json.RawMessage } type ContentBlockRecord struct { @@ -94,6 +95,10 @@ func createContentBlockTx( "project, agent, owner kind, and block kind are required", ) } + metadata, err := normalizedJSONObject(input.Metadata, "content block metadata") + if err != nil { + return ContentBlockRecord{}, err + } var textContent *string if input.BlockKind == ContentBlockKindText || input.BlockKind == ContentBlockKindReasoning || @@ -114,6 +119,7 @@ func createContentBlockTx( StructuredData: sqlcRawMessageFromEmpty(input.StructuredData), ArtifactID: sqlcIDFromNil(input.ArtifactID), ToolCallID: sqlcIDFromNil(input.ToolCallID), + Metadata: metadata, }) if err != nil { return ContentBlockRecord{}, fmt.Errorf("create content block: %w", err) @@ -395,28 +401,34 @@ func toolCallResultContentBlocksTx( } parts := make([]map[string]any, 0, len(rows)) for _, row := range rows { + metadata := contentBlockMetadataForOutput(row.Metadata) + var part map[string]any switch ContentBlockKind(row.BlockKind) { case ContentBlockKindText: - parts = append(parts, map[string]any{"type": "text", "text": row.TextContent}) + part = map[string]any{"type": "text", "text": row.TextContent} case ContentBlockKindStructuredData: if row.StructuredData == nil { return nil, errors.New("stored structured_data block has no value") } - parts = append(parts, map[string]any{ + part = map[string]any{ "type": "structured_data", "value": *row.StructuredData, - }) + } case ContentBlockKindArtifact: if row.ArtifactID == nil { return nil, errors.New("stored artifact block has no artifact") } - parts = append(parts, map[string]any{ + part = map[string]any{ "type": "media_ref", "artifact_id": row.ArtifactID.String(), - }) + } default: return nil, fmt.Errorf("stored tool result has unsupported block kind %q", row.BlockKind) } + if metadata != nil { + part["metadata"] = metadata + } + parts = append(parts, part) } body, err := marshalJSON(parts) if err != nil { diff --git a/internal/storage/internal/dbsqlc/kernel_event_authority.sql.go b/internal/storage/internal/dbsqlc/kernel_event_authority.sql.go index 6a7a30933..9d754824c 100644 --- a/internal/storage/internal/dbsqlc/kernel_event_authority.sql.go +++ b/internal/storage/internal/dbsqlc/kernel_event_authority.sql.go @@ -416,14 +416,14 @@ inserted AS ( INSERT INTO content_blocks( agent_id, owner_kind, owner_agent_input_id, owner_model_output_id, owner_tool_call_result_id, ordinal, block_kind, - text_content, structured_data, artifact_id, tool_call_id, created_at + text_content, structured_data, artifact_id, tool_call_id, metadata, created_at ) SELECT $2, $6, $3::uuid, $4::uuid, $5::uuid, $7, $8, $9, $10::jsonb, $11::uuid, $12::uuid, - content_owner.created_at + $13::jsonb, content_owner.created_at FROM content_owner RETURNING id, agent_id, owner_kind, owner_agent_input_id, owner_model_output_id, owner_tool_call_result_id, ordinal, block_kind, @@ -452,6 +452,7 @@ type InsertContentBlockParams struct { StructuredData *json.RawMessage ArtifactID *uuid.UUID ToolCallID *uuid.UUID + Metadata json.RawMessage } type InsertContentBlockRow struct { @@ -485,6 +486,7 @@ func (q *Queries) InsertContentBlock(ctx context.Context, arg InsertContentBlock arg.StructuredData, arg.ArtifactID, arg.ToolCallID, + arg.Metadata, ) var i InsertContentBlockRow err := row.Scan( @@ -888,7 +890,7 @@ SELECT block.id, agent.project_id, block.agent_id, block.owner_kind, block.owner_agent_input_id, block.owner_model_output_id, block.owner_tool_call_result_id, block.ordinal, block.block_kind, coalesce(block.text_content, '') AS text_content, block.structured_data, - block.artifact_id, block.tool_call_id, block.created_at + block.artifact_id, block.tool_call_id, block.metadata, block.created_at FROM content_blocks block JOIN agents agent ON agent.id = block.agent_id WHERE agent.project_id = $1 @@ -917,6 +919,7 @@ type ListContentBlocksForAgentInputRow struct { StructuredData *json.RawMessage ArtifactID *uuid.UUID ToolCallID *uuid.UUID + Metadata json.RawMessage CreatedAt time.Time } @@ -943,6 +946,7 @@ func (q *Queries) ListContentBlocksForAgentInput(ctx context.Context, arg ListCo &i.StructuredData, &i.ArtifactID, &i.ToolCallID, + &i.Metadata, &i.CreatedAt, ); err != nil { return nil, err @@ -1032,7 +1036,7 @@ SELECT block.id, agent.project_id, block.agent_id, block.owner_kind, block.owner_agent_input_id, block.owner_model_output_id, block.owner_tool_call_result_id, block.ordinal, block.block_kind, coalesce(block.text_content, '') AS text_content, block.structured_data, - block.artifact_id, block.tool_call_id, block.created_at + block.artifact_id, block.tool_call_id, block.metadata, block.created_at FROM content_blocks block JOIN agents agent ON agent.id = block.agent_id WHERE agent.project_id = $1 @@ -1061,6 +1065,7 @@ type ListToolCallResultContentBlocksRow struct { StructuredData *json.RawMessage ArtifactID *uuid.UUID ToolCallID *uuid.UUID + Metadata json.RawMessage CreatedAt time.Time } @@ -1087,6 +1092,7 @@ func (q *Queries) ListToolCallResultContentBlocks(ctx context.Context, arg ListT &i.StructuredData, &i.ArtifactID, &i.ToolCallID, + &i.Metadata, &i.CreatedAt, ); err != nil { return nil, err diff --git a/internal/storage/queries/kernel_event_authority.sql b/internal/storage/queries/kernel_event_authority.sql index e13305d73..bd61a243a 100644 --- a/internal/storage/queries/kernel_event_authority.sql +++ b/internal/storage/queries/kernel_event_authority.sql @@ -252,7 +252,7 @@ SELECT block.id, agent.project_id, block.agent_id, block.owner_kind, block.owner_agent_input_id, block.owner_model_output_id, block.owner_tool_call_result_id, block.ordinal, block.block_kind, coalesce(block.text_content, '') AS text_content, block.structured_data, - block.artifact_id, block.tool_call_id, block.created_at + block.artifact_id, block.tool_call_id, block.metadata, block.created_at FROM content_blocks block JOIN agents agent ON agent.id = block.agent_id WHERE agent.project_id = sqlc.arg(project_id) @@ -290,14 +290,14 @@ inserted AS ( INSERT INTO content_blocks( agent_id, owner_kind, owner_agent_input_id, owner_model_output_id, owner_tool_call_result_id, ordinal, block_kind, - text_content, structured_data, artifact_id, tool_call_id, created_at + text_content, structured_data, artifact_id, tool_call_id, metadata, created_at ) SELECT sqlc.arg(agent_id), sqlc.arg(owner_kind), sqlc.narg(owner_agent_input_id)::uuid, sqlc.narg(owner_model_output_id)::uuid, sqlc.narg(owner_tool_call_result_id)::uuid, sqlc.arg(ordinal), sqlc.arg(block_kind), sqlc.narg(text_content), sqlc.narg(structured_data)::jsonb, sqlc.narg(artifact_id)::uuid, sqlc.narg(tool_call_id)::uuid, - content_owner.created_at + sqlc.arg(metadata)::jsonb, content_owner.created_at FROM content_owner RETURNING id, agent_id, owner_kind, owner_agent_input_id, owner_model_output_id, owner_tool_call_result_id, ordinal, block_kind, @@ -330,7 +330,7 @@ SELECT block.id, agent.project_id, block.agent_id, block.owner_kind, block.owner_agent_input_id, block.owner_model_output_id, block.owner_tool_call_result_id, block.ordinal, block.block_kind, coalesce(block.text_content, '') AS text_content, block.structured_data, - block.artifact_id, block.tool_call_id, block.created_at + block.artifact_id, block.tool_call_id, block.metadata, block.created_at FROM content_blocks block JOIN agents agent ON agent.id = block.agent_id WHERE agent.project_id = sqlc.arg(project_id) diff --git a/migrations/000011_content_block_metadata.sql b/migrations/000011_content_block_metadata.sql new file mode 100644 index 000000000..77a8b6cde --- /dev/null +++ b/migrations/000011_content_block_metadata.sql @@ -0,0 +1,87 @@ +-- +goose Up + +ALTER TABLE content_blocks +ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb, +ADD CONSTRAINT content_blocks_metadata_object CHECK (jsonb_typeof(metadata) = 'object'); + +CREATE OR REPLACE VIEW agent_event_read_projection AS +SELECT event.id, + agent.org_id, + agent.project_id, + event.agent_id, + event.turn_id, + turn.turn_sequence, + event.is_opening_event, + event.sequence, + event.event_kind, + input.input_kind, + input.actor_id, + input.idempotency_scope, + input.input_idempotency_key, + event.agent_input_id, + input.control_type, + input.target_interaction_id, + input.agent_config_id, + tool_result.tool_call_id, + tool_result.outcome AS tool_outcome, + model_output.model_call_context_id, + model_output.stop_reason AS model_stop_reason, + event.context_checkpoint_id, + checkpoint.summarized_through_event_sequence, + checkpoint.summary AS checkpoint_summary, + block_projection.content_blocks::jsonb AS content_blocks, + event.created_at +FROM agent_events event +JOIN agents agent + ON agent.id = event.agent_id +JOIN agent_turns turn + ON turn.agent_id = event.agent_id + AND turn.id = event.turn_id +LEFT JOIN agent_inputs input + ON input.agent_id = event.agent_id + AND input.id = event.agent_input_id +LEFT JOIN tool_call_results tool_result + ON tool_result.agent_id = event.agent_id + AND tool_result.id = event.tool_call_result_id +LEFT JOIN model_outputs model_output + ON model_output.agent_id = event.agent_id + AND model_output.id = event.model_output_id +LEFT JOIN context_checkpoints checkpoint + ON checkpoint.agent_id = event.agent_id + AND checkpoint.id = event.context_checkpoint_id +CROSS JOIN LATERAL ( + SELECT coalesce(jsonb_agg( + ( + CASE + WHEN block.block_kind = 'text' THEN jsonb_build_object('type', 'text', 'text', block.text_content) + WHEN block.block_kind = 'structured_data' THEN jsonb_build_object('type', 'structured_data', 'value', block.structured_data) + WHEN block.block_kind = 'artifact' THEN jsonb_build_object('type', 'media_ref', 'artifact_id', block.artifact_id) + WHEN block.block_kind = 'reasoning' THEN jsonb_build_object('type', 'reasoning', 'text', block.text_content) + WHEN block.block_kind = 'error' THEN jsonb_build_object('type', 'error', 'text', block.text_content) + WHEN block.block_kind = 'tool_call' THEN + jsonb_build_object( + 'type', 'tool_call', + 'tool_call_id', block.tool_call_id, + 'tool_type', tool_block_call.type, + 'name', tool_block_call.name, + 'input', tool_block_call.input + ) + ELSE NULL + END + ) || CASE + WHEN block.metadata = '{}'::jsonb THEN '{}'::jsonb + ELSE jsonb_build_object('metadata', block.metadata) + END + ORDER BY block.ordinal, block.id + ) FILTER (WHERE block.id IS NOT NULL AND block.block_kind IN ('text', 'structured_data', 'artifact', 'reasoning', 'tool_call', 'error')), '[]'::jsonb) AS content_blocks + FROM content_blocks block + LEFT JOIN tool_calls tool_block_call + ON tool_block_call.agent_id = block.agent_id + AND tool_block_call.id = block.tool_call_id + WHERE block.agent_id = event.agent_id + AND ( + block.owner_agent_input_id = event.agent_input_id + OR block.owner_model_output_id = event.model_output_id + OR block.owner_tool_call_result_id = event.tool_call_result_id + ) +) block_projection; From 52aa7e415f0d47fa8253170eceea6a78e91f5689 Mon Sep 17 00:00:00 2001 From: Asher Dale Date: Fri, 7 Aug 2026 12:53:04 -0700 Subject: [PATCH 2/4] fix: address Slack content block review feedback --- internal/httpapi/integration_event_routes.go | 5 ++--- .../integration_event_routes_integration_test.go | 6 +++--- internal/integration/slack/events.go | 2 +- internal/integration/slack/events_test.go | 12 ++++++------ 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/internal/httpapi/integration_event_routes.go b/internal/httpapi/integration_event_routes.go index 93a9a3f73..387b8bc60 100644 --- a/internal/httpapi/integration_event_routes.go +++ b/internal/httpapi/integration_event_routes.go @@ -333,9 +333,8 @@ func (s *Server) processIntegrationInboundEvent( } if skippedFileSummary != "" { contentBlockPayload = append(contentBlockPayload, map[string]any{ - "type": "text", - "text": "\n" + skippedFileSummary, - "metadata": hiddenMetadata, + "type": "text", + "text": "\n" + skippedFileSummary, }) } contentBlockPayload = append(contentBlockPayload, fileIngest.Blocks...) diff --git a/internal/httpapi/integration_event_routes_integration_test.go b/internal/httpapi/integration_event_routes_integration_test.go index 1299c3f9d..5e5e7bb12 100644 --- a/internal/httpapi/integration_event_routes_integration_test.go +++ b/internal/httpapi/integration_event_routes_integration_test.go @@ -1918,8 +1918,8 @@ func TestSlackEventsSkippedFileCreatesInputWithoutArtifact(t *testing.T) { ctx, pool, input, - "<@U123> (Ada) in Slack DM:\nplease inspect\n\nSlack files not included:\n- large.png skipped: too large", - []bool{true, false, true}, + "<@U123> (Ada) in Slack DM:\nplease inspect\nSlack files not included:\n- large.png skipped: too large", + []bool{true, false, false}, ) var artifactBlocks int64 if err := pool.QueryRow(ctx, ` @@ -3659,7 +3659,7 @@ func assertAgentInputText( var got string var hidden []bool if err := pool.QueryRow(ctx, ` - SELECT coalesce(string_agg(text_content, E'\n' ORDER BY ordinal), ''), + SELECT coalesce(string_agg(text_content, '' ORDER BY ordinal), ''), array_agg(coalesce(block.metadata->'omnara_hidden' = 'true'::jsonb, false) ORDER BY ordinal) FROM content_blocks block JOIN agent_inputs owner diff --git a/internal/integration/slack/events.go b/internal/integration/slack/events.go index 6992385dd..3639c65ea 100644 --- a/internal/integration/slack/events.go +++ b/internal/integration/slack/events.go @@ -440,7 +440,7 @@ func ModelInputTextParts( if threadTS := routeThreadTS(route); threadTS != "" { location += ", thread " + threadTS } - prefix := labels.UserReference(event.User) + " in " + location + ":" + prefix := labels.UserReference(event.User) + " in " + location + ":\n" message := labels.RenderText(strings.TrimSpace(event.Text)) if event.ChannelType == "im" { return message, prefix diff --git a/internal/integration/slack/events_test.go b/internal/integration/slack/events_test.go index 13b511e6a..bc8883e0a 100644 --- a/internal/integration/slack/events_test.go +++ b/internal/integration/slack/events_test.go @@ -40,7 +40,7 @@ func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { }, route: InboundRoute{ProviderRef: "D123", ProviderRefKind: "dm"}, wantMessage: "hello", - wantHidden: "<@U123> (Ada) in Slack DM:", + wantHidden: "<@U123> (Ada) in Slack DM:\n", }, { name: "new root mention with channel history", @@ -60,7 +60,7 @@ func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { "a new Slack thread for communicating with the agent.\n\n" + "Recent Slack context:\n" + "<@U999> (Grace): earlier channel note\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:", + "<@U123> (Ada) in <#C123>, thread 111.222:\n", }, { name: "new thread mention with thread history", @@ -80,7 +80,7 @@ func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { wantHidden: "This message directly mentioned the agent inside an existing Slack thread.\n\n" + "Recent Slack context:\n" + "<@U999> (Grace): earlier thread note\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:", + "<@U123> (Ada) in <#C123>, thread 111.222:\n", }, { name: "already mapped thread reply", @@ -98,7 +98,7 @@ func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { wantHidden: "This message was posted in a Slack thread that is already attached " + "to this agent. It may be part of the ongoing conversation even if it does not " + "directly mention the agent.\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:", + "<@U123> (Ada) in <#C123>, thread 111.222:\n", }, { name: "root mention without fetched history", @@ -115,7 +115,7 @@ func TestModelInputTextPartsIncludeSlackContext(t *testing.T) { wantMessage: "<@U_BOT> run", wantHidden: "The agent was mentioned in a Slack channel, so this message starts " + "a new Slack thread for communicating with the agent.\n\n" + - "<@U123> (Ada) in <#C123>, thread 111.222:", + "<@U123> (Ada) in <#C123>, thread 111.222:\n", }, } for _, test := range tests { @@ -165,7 +165,7 @@ func TestModelInputTextPartsRenderSlackNames(t *testing.T) { display := labels.RenderDisplayText(strings.TrimSpace(event.Text)) wantHidden := "The agent was mentioned in a Slack channel, so this message starts a new Slack thread " + "for communicating with the agent.\n\n" + - "<@U123> (Ada) in <#C123> (#general), thread 111.222:" + "<@U123> (Ada) in <#C123> (#general), thread 111.222:\n" wantMessage := "<@U_BOT> (Omnara) ask <@U456> (Ben) about <#C999> (#eng)" wantDisplay := "@Omnara ask @Ben about #eng" if message != wantMessage || hidden != wantHidden || display != wantDisplay { From 8c00892ac455f39cacbcd88a65cbab011c192cbe Mon Sep 17 00:00:00 2001 From: Asher Dale Date: Fri, 7 Aug 2026 13:07:41 -0700 Subject: [PATCH 3/4] fix: clean up skipped-file summary display --- internal/httpapi/integration_event_routes.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/httpapi/integration_event_routes.go b/internal/httpapi/integration_event_routes.go index 387b8bc60..1547cba77 100644 --- a/internal/httpapi/integration_event_routes.go +++ b/internal/httpapi/integration_event_routes.go @@ -333,8 +333,9 @@ func (s *Server) processIntegrationInboundEvent( } if skippedFileSummary != "" { contentBlockPayload = append(contentBlockPayload, map[string]any{ - "type": "text", - "text": "\n" + skippedFileSummary, + "type": "text", + "text": "\n" + skippedFileSummary, + "metadata": map[string]any{"omnara_display_text": skippedFileSummary}, }) } contentBlockPayload = append(contentBlockPayload, fileIngest.Blocks...) From ca36016c596a9632a9b2e495b62d08a859e1832f Mon Sep 17 00:00:00 2001 From: Asher Dale Date: Fri, 7 Aug 2026 18:53:01 -0700 Subject: [PATCH 4/4] fix: enforce content block metadata limits --- api/openapi/openapi.yaml | 11 +- docs/api-reference/openapi.yaml | 11 +- .../react/src/domains/agent-chat-messages.ts | 2 +- .../react/src/domains/agent-chat.test.ts | 10 +- .../packages/react/src/domains/agent-chat.ts | 2 +- .../packages/sdk/src/generated/types.gen.ts | 4 +- .../packages/sdk/src/generated/zod.gen.ts | 4 +- internal/httpapi/integration_event_routes.go | 26 +- ...tegration_event_routes_integration_test.go | 2 +- .../httpapi/integration_event_routes_test.go | 13 + internal/httpapi/openapi/api.gen.go | 1056 ++++++++--------- ...ic_api_events_workflow_integration_test.go | 25 +- .../session_input_media_integration_test.go | 4 +- .../content_blocks_store_test.go | 6 +- 14 files changed, 614 insertions(+), 562 deletions(-) diff --git a/api/openapi/openapi.yaml b/api/openapi/openapi.yaml index 2a8581516..c4297e85a 100644 --- a/api/openapi/openapi.yaml +++ b/api/openapi/openapi.yaml @@ -7070,10 +7070,17 @@ components: - ModelOutputStopReasonError ContentBlockMetadata: type: object - description: Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + description: >- + String key-value metadata. Maximum 16 pairs, keys up to 64 characters, + and values up to 512 characters. Keys beginning with `omnara_` are + reserved for Omnara and may affect product behavior; use them only when + intentionally invoking Omnara-defined behavior. x-go-type: json.RawMessage x-go-type-skip-optional-pointer: true - additionalProperties: true + maxProperties: 16 + additionalProperties: + type: string + maxLength: 512 TextContentBlock: type: object additionalProperties: false diff --git a/docs/api-reference/openapi.yaml b/docs/api-reference/openapi.yaml index 12777e9dd..6d1b24509 100644 --- a/docs/api-reference/openapi.yaml +++ b/docs/api-reference/openapi.yaml @@ -7071,10 +7071,17 @@ components: - ModelOutputStopReasonError ContentBlockMetadata: type: object - description: Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + description: >- + String key-value metadata. Maximum 16 pairs, keys up to 64 characters, + and values up to 512 characters. Keys beginning with `omnara_` are + reserved for Omnara and may affect product behavior; use them only when + intentionally invoking Omnara-defined behavior. x-go-type: json.RawMessage x-go-type-skip-optional-pointer: true - additionalProperties: true + maxProperties: 16 + additionalProperties: + type: string + maxLength: 512 TextContentBlock: type: object additionalProperties: false diff --git a/frontend/packages/react/src/domains/agent-chat-messages.ts b/frontend/packages/react/src/domains/agent-chat-messages.ts index 161edd304..aa5ffd15c 100644 --- a/frontend/packages/react/src/domains/agent-chat-messages.ts +++ b/frontend/packages/react/src/domains/agent-chat-messages.ts @@ -71,7 +71,7 @@ function mediaPart(block: MediaRefContentBlock): OmnaraUIMessage['parts'][number } function isHiddenContentBlock(block: { metadata?: Record }): boolean { - return block.metadata?.omnara_hidden === true + return block.metadata?.omnara_hidden === 'true' } function agentInputParts(event: AgentInputEvent): OmnaraUIMessage['parts'] { diff --git a/frontend/packages/react/src/domains/agent-chat.test.ts b/frontend/packages/react/src/domains/agent-chat.test.ts index 9bef8e0ce..c3eef0d21 100644 --- a/frontend/packages/react/src/domains/agent-chat.test.ts +++ b/frontend/packages/react/src/domains/agent-chat.test.ts @@ -428,7 +428,7 @@ describe('AgentChatSession', () => { { type: 'text', text: 'This message came from the Omnara web app. Reply with normal assistant text unless explicitly asked to message an integration.', - metadata: { omnara_hidden: true }, + metadata: { omnara_hidden: 'true' }, }, { type: 'text', text: 'Hello' }, ], @@ -1215,12 +1215,12 @@ describe('agentEventsToMessages', () => { id: 'input', sequence: 10, content_blocks: [ - { type: 'text', text: 'Slack context', metadata: { omnara_hidden: true } }, + { type: 'text', text: 'Slack context', metadata: { omnara_hidden: 'true' } }, { type: 'text', text: 'Inspect the workspace' }, { type: 'media_ref', artifact_id: 'hidden_input_media', - metadata: { omnara_hidden: true }, + metadata: { omnara_hidden: 'true' }, }, ], }), @@ -1228,7 +1228,7 @@ describe('agentEventsToMessages', () => { id: 'call-event', sequence: 11, content_blocks: [ - { type: 'reasoning', text: 'private', metadata: { omnara_hidden: true } }, + { type: 'reasoning', text: 'private', metadata: { omnara_hidden: 'true' } }, toolCallBlock(), { type: 'text', text: 'Working' }, ], @@ -1240,7 +1240,7 @@ describe('agentEventsToMessages', () => { { type: 'structured_data', value: { private: true }, - metadata: { omnara_hidden: true }, + metadata: { omnara_hidden: 'true' }, }, { type: 'text', text: 'visible result' }, ], diff --git a/frontend/packages/react/src/domains/agent-chat.ts b/frontend/packages/react/src/domains/agent-chat.ts index 1ea00cd22..cb88a5589 100644 --- a/frontend/packages/react/src/domains/agent-chat.ts +++ b/frontend/packages/react/src/domains/agent-chat.ts @@ -166,7 +166,7 @@ export class AgentChatSession { { type: 'text', text: 'This message came from the Omnara web app. Reply with normal assistant text unless explicitly asked to message an integration.', - metadata: { omnara_hidden: true }, + metadata: { omnara_hidden: 'true' }, }, { type: 'text', text }, ], diff --git a/frontend/packages/sdk/src/generated/types.gen.ts b/frontend/packages/sdk/src/generated/types.gen.ts index e096e5118..9a4ee357d 100644 --- a/frontend/packages/sdk/src/generated/types.gen.ts +++ b/frontend/packages/sdk/src/generated/types.gen.ts @@ -968,10 +968,10 @@ export type ModelStopReason = 'end_turn' | 'tool_use' | 'max_tokens' | 'refusal' export type ModelOutputStopReason = 'end_turn' | 'tool_use' | 'max_tokens' | 'refusal' | 'content_filter' | 'error'; /** - * Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + * String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. */ export type ContentBlockMetadata = { - [key: string]: unknown; + [key: string]: string; }; export type TextContentBlock = { diff --git a/frontend/packages/sdk/src/generated/zod.gen.ts b/frontend/packages/sdk/src/generated/zod.gen.ts index 34a95088f..9dd239765 100644 --- a/frontend/packages/sdk/src/generated/zod.gen.ts +++ b/frontend/packages/sdk/src/generated/zod.gen.ts @@ -733,9 +733,9 @@ export const zModelOutputStopReason = z.enum([ ]); /** - * Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + * String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. */ -export const zContentBlockMetadata = z.record(z.string(), z.unknown()); +export const zContentBlockMetadata = z.record(z.string(), z.string().max(512)); export const zTextContentBlock = z.object({ type: z.enum(['text']), diff --git a/internal/httpapi/integration_event_routes.go b/internal/httpapi/integration_event_routes.go index 1547cba77..c1777614a 100644 --- a/internal/httpapi/integration_event_routes.go +++ b/internal/httpapi/integration_event_routes.go @@ -7,6 +7,7 @@ import ( "net/http" "strings" "time" + "unicode/utf8" "github.com/omnara-ai/omnara/internal/httpapi/apierror" "github.com/omnara-ai/omnara/internal/httpapi/openapi" @@ -25,6 +26,7 @@ const ( integrationEventsPath = "/api/integrations/slack/events" integrationEventHTTPTimeout = 2 * time.Second integrationEventEnrichmentTimeout = 1500 * time.Millisecond + contentBlockMetadataValueMaxRunes = 512 ) func (s *Server) integrationEventsRoute(w http.ResponseWriter, r *http.Request) { @@ -315,7 +317,7 @@ func (s *Server) processIntegrationInboundEvent( if err != nil { return true, err } - hiddenMetadata := map[string]any{"omnara_hidden": true} + hiddenMetadata := map[string]any{"omnara_hidden": "true"} contentBlockPayload := make([]map[string]any, 0, 3+len(fileIngest.Blocks)) contentBlockPayload = append(contentBlockPayload, map[string]any{ "type": "text", @@ -326,17 +328,18 @@ func (s *Server) processIntegrationInboundEvent( block := map[string]any{"type": "text", "text": messageText} if siblingEventAlreadyAccepted { block["metadata"] = hiddenMetadata - } else if displayText != messageText { - block["metadata"] = map[string]any{"omnara_display_text": displayText} + } else if metadata := displayTextMetadata(messageText, displayText); metadata != nil { + block["metadata"] = metadata } contentBlockPayload = append(contentBlockPayload, block) } if skippedFileSummary != "" { - contentBlockPayload = append(contentBlockPayload, map[string]any{ - "type": "text", - "text": "\n" + skippedFileSummary, - "metadata": map[string]any{"omnara_display_text": skippedFileSummary}, - }) + text := "\n" + skippedFileSummary + block := map[string]any{"type": "text", "text": text} + if metadata := displayTextMetadata(text, skippedFileSummary); metadata != nil { + block["metadata"] = metadata + } + contentBlockPayload = append(contentBlockPayload, block) } contentBlockPayload = append(contentBlockPayload, fileIngest.Blocks...) contentBlocks, err := marshalJSON(contentBlockPayload) @@ -380,6 +383,13 @@ func (s *Server) processIntegrationInboundEvent( return true, nil } +func displayTextMetadata(text, displayText string) map[string]any { + if text == displayText || utf8.RuneCountInString(displayText) > contentBlockMetadataValueMaxRunes { + return nil + } + return map[string]any{"omnara_display_text": displayText} +} + func (s *Server) dismissSlackInteractionPrompts( ctx context.Context, token string, diff --git a/internal/httpapi/integration_event_routes_integration_test.go b/internal/httpapi/integration_event_routes_integration_test.go index 5e5e7bb12..ecbaef3cf 100644 --- a/internal/httpapi/integration_event_routes_integration_test.go +++ b/internal/httpapi/integration_event_routes_integration_test.go @@ -3660,7 +3660,7 @@ func assertAgentInputText( var hidden []bool if err := pool.QueryRow(ctx, ` SELECT coalesce(string_agg(text_content, '' ORDER BY ordinal), ''), - array_agg(coalesce(block.metadata->'omnara_hidden' = 'true'::jsonb, false) ORDER BY ordinal) + array_agg(coalesce(block.metadata->>'omnara_hidden' = 'true', false) ORDER BY ordinal) FROM content_blocks block JOIN agent_inputs owner ON owner.agent_id = block.agent_id diff --git a/internal/httpapi/integration_event_routes_test.go b/internal/httpapi/integration_event_routes_test.go index c3259dec7..23663e868 100644 --- a/internal/httpapi/integration_event_routes_test.go +++ b/internal/httpapi/integration_event_routes_test.go @@ -62,6 +62,19 @@ func TestSlackEventsURLVerificationDoesNotRequireInstall(t *testing.T) { } } +func TestDisplayTextMetadata(t *testing.T) { + if metadata := displayTextMetadata("same", "same"); metadata != nil { + t.Fatalf("unchanged display metadata = %#v, want nil", metadata) + } + value := strings.Repeat("๐Ÿ™‚", contentBlockMetadataValueMaxRunes) + if metadata := displayTextMetadata("model", value); metadata["omnara_display_text"] != value { + t.Fatalf("bounded display metadata = %#v", metadata) + } + if metadata := displayTextMetadata("model", value+"๐Ÿ™‚"); metadata != nil { + t.Fatalf("oversized display metadata = %#v, want nil", metadata) + } +} + func TestSlackInboundRouting(t *testing.T) { botUserID := "U_BOT" tests := []struct { diff --git a/internal/httpapi/openapi/api.gen.go b/internal/httpapi/openapi/api.gen.go index ba4512b17..35396ba83 100644 --- a/internal/httpapi/openapi/api.gen.go +++ b/internal/httpapi/openapi/api.gen.go @@ -2313,7 +2313,7 @@ type ConfiguredModelSummary struct { UpdatedAt Timestamp `json:"updated_at"` } -// ContentBlockMetadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. +// ContentBlockMetadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. type ContentBlockMetadata = json.RawMessage // ContextCheckpointEvent defines model for ContextCheckpointEvent. @@ -2765,7 +2765,7 @@ type ErrorCode string // ErrorContentBlock defines model for ErrorContentBlock. type ErrorContentBlock struct { - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Text string `json:"text"` Type ErrorContentBlockType `json:"type"` @@ -2823,7 +2823,7 @@ type InlineMediaContentBlock struct { Filename *string `json:"filename,omitempty"` MediaType InlineMediaContentBlockMediaType `json:"media_type"` - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Type InlineMediaContentBlockType `json:"type"` } @@ -3289,7 +3289,7 @@ type ManagementKind string type MediaRefContentBlock struct { ArtifactId ArtifactID `json:"artifact_id"` - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Type MediaRefContentBlockType `json:"type"` } @@ -3532,7 +3532,7 @@ type ModelToolCallContentBlock struct { // Input Non-null JSON object containing the arguments emitted for a tool call. Input ToolInput `json:"input"` - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Name string `json:"name"` ToolCallId ToolCallID `json:"tool_call_id"` @@ -3971,7 +3971,7 @@ type PromoteQueuedInputToSteeringRequest struct { // ReasoningContentBlock defines model for ReasoningContentBlock. type ReasoningContentBlock struct { - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Text string `json:"text"` Type ReasoningContentBlockType `json:"type"` @@ -4165,7 +4165,7 @@ type SlackSetupIcon struct { // StructuredDataContentBlock defines model for StructuredDataContentBlock. type StructuredDataContentBlock struct { - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Type StructuredDataContentBlockType `json:"type"` @@ -4201,7 +4201,7 @@ type SubmitToolResultContentBlock struct { // TextContentBlock defines model for TextContentBlock. type TextContentBlock struct { - // Metadata Opaque application metadata. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. + // Metadata String key-value metadata. Maximum 16 pairs, keys up to 64 characters, and values up to 512 characters. Keys beginning with `omnara_` are reserved for Omnara and may affect product behavior; use them only when intentionally invoking Omnara-defined behavior. Metadata ContentBlockMetadata `json:"metadata,omitempty"` Text string `json:"text"` Type TextContentBlockType `json:"type"` @@ -33698,526 +33698,526 @@ func (sh *strictHandler) GetToolCatalog(w http.ResponseWriter, r *http.Request) // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "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", - "+d3eQwfJX7i8WBPJT/DJxb/++1//FwAA//8=", + "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", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/httpapi/public_api_events_workflow_integration_test.go b/internal/httpapi/public_api_events_workflow_integration_test.go index 6a0c792ea..722594592 100644 --- a/internal/httpapi/public_api_events_workflow_integration_test.go +++ b/internal/httpapi/public_api_events_workflow_integration_test.go @@ -369,6 +369,22 @@ func TestPublicAuthenticatedInputFlow(t *testing.T) { http.StatusBadRequest, authHeaders(authorPAT.Token), ) + for index, metadata := range []string{ + `{"flag":true}`, + `{"value":"` + strings.Repeat("v", 513) + `"}`, + `{"a":"","b":"","c":"","d":"","e":"","f":"","g":"","h":"","i":"","j":"","k":"","l":"","m":"","n":"","o":"","p":"","q":""}`, + } { + requestJSONWithHeaders( + t, + handler, + http.MethodPost, + project.ProjectPath+"/agents/"+agentID+"/inputs", + `{"content_blocks":[{"type":"text","text":"invalid metadata","metadata":`+metadata+`}]}`, + "idem-input-invalid-metadata-"+strconv.Itoa(index), + http.StatusBadRequest, + authHeaders(authorPAT.Token), + ) + } requestJSONWithHeaders( t, handler, @@ -710,7 +726,7 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { handler, http.MethodPost, project.ProjectPath+"/agents/"+agentPublicID+"/inputs", - `{"content_blocks":[{"type":"text","text":"visible user input","metadata":{"omnara_hidden":true,"source":{"kind":"test"}}}]}`, + `{"content_blocks":[{"type":"text","text":"visible user input","metadata":{"omnara_hidden":"true","source":"test"}}]}`, "idem-visible-input", http.StatusCreated, authHeaders(project.AdminToken), @@ -819,7 +835,7 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { ID: toolCalls[0].ID, RuntimeLockID: runtime.ID, Outcome: executionstore.ToolResultOutcomeSucceeded, - ResultContentParts: json.RawMessage(`[{"type":"text","text":"visible tool result","metadata":{"tool_result":true}}]`), + ResultContentParts: json.RawMessage(`[{"type":"text","text":"visible tool result","metadata":{"tool_result":"true"}}]`), }) if err != nil { t.Fatalf("complete tool call: %v", err) @@ -927,12 +943,11 @@ func TestPublicTurnsEventsAndSSEUseCanonicalEvents(t *testing.T) { t.Fatalf("events should expose canonical content blocks: %+v", eventData) } inputMetadata := eventData[1].(map[string]any)["content_blocks"].([]any)[0].(map[string]any)["metadata"].(map[string]any) - inputSource, ok := inputMetadata["source"].(map[string]any) - if inputMetadata["omnara_hidden"] != true || !ok || inputSource["kind"] != "test" { + if inputMetadata["omnara_hidden"] != "true" || inputMetadata["source"] != "test" { t.Fatalf("input content block metadata = %+v", inputMetadata) } toolResultMetadata := eventData[3].(map[string]any)["content_blocks"].([]any)[0].(map[string]any)["metadata"].(map[string]any) - if toolResultMetadata["tool_result"] != true { + if toolResultMetadata["tool_result"] != "true" { t.Fatalf("tool result content block metadata = %+v", toolResultMetadata) } contextEvents, err := store.Execution().ListContextEvents( diff --git a/internal/httpapi/session_input_media_integration_test.go b/internal/httpapi/session_input_media_integration_test.go index 4864c6039..7d7e0266f 100644 --- a/internal/httpapi/session_input_media_integration_test.go +++ b/internal/httpapi/session_input_media_integration_test.go @@ -63,7 +63,7 @@ func TestSessionInputInlineMediaUploadAndDownload(t *testing.T) { pngBase64 := base64.StdEncoding.EncodeToString(testPNGBytes) body := `{"content_blocks":[` + `{"type":"text","text":"what is in this image?"},` + - `{"type":"media","media_type":"image/png","filename":"pixel.png","data":"` + pngBase64 + `","metadata":{"omnara_hidden":true}}` + + `{"type":"media","media_type":"image/png","filename":"pixel.png","data":"` + pngBase64 + `","metadata":{"omnara_hidden":"true"}}` + `]}` created := requestJSONWithHeaders( t, @@ -86,7 +86,7 @@ func TestSessionInputInlineMediaUploadAndDownload(t *testing.T) { t.Fatalf("expected media_ref block, got %+v", mediaBlock) } blockMetadata, ok := mediaBlock["metadata"].(map[string]any) - if !ok || blockMetadata["omnara_hidden"] != true { + if !ok || blockMetadata["omnara_hidden"] != "true" { t.Fatalf("media metadata was not preserved: %+v", mediaBlock) } artifactID, _ := mediaBlock["artifact_id"].(string) diff --git a/internal/storage/executionstore/content_blocks_store_test.go b/internal/storage/executionstore/content_blocks_store_test.go index 8dd28f690..447da8088 100644 --- a/internal/storage/executionstore/content_blocks_store_test.go +++ b/internal/storage/executionstore/content_blocks_store_test.go @@ -42,15 +42,15 @@ func TestContentBlockMetadataCanonicalizesToPersistedShape(t *testing.T) { }{ { name: "agent input", - input: json.RawMessage(`[{"type":"text","text":"hello","metadata":{"omnara_hidden":true}}]`), + input: json.RawMessage(`[{"type":"text","text":"hello","metadata":{"omnara_hidden":"true"}}]`), parse: parseAgentInputContentBlocks, marshal: marshalAgentInputContentBlocks, }, { name: "tool result", input: json.RawMessage(`[` + - `{"type":"structured_data","value":{"ok":true},"metadata":{"source":{"kind":"test"}}},` + - `{"type":"media_ref","artifact_id":"` + artifactID + `","metadata":{"position":2}}` + + `{"type":"structured_data","value":{"ok":true},"metadata":{"source":"test"}},` + + `{"type":"media_ref","artifact_id":"` + artifactID + `","metadata":{"position":"2"}}` + `]`), parse: parseToolResultContentBlocks, marshal: marshalToolResultContentBlocks,