createResolvers
@forge/monorepo / backend/src / createResolvers
Function: createResolvers()
createResolvers(
deps):object
Defined in: backend/src/graphql/resolvers.ts:78
Parameters
deps
Returns
object
Mutation
Mutation:
object
Mutation.answerQuestion()
answerQuestion(
_,args,ctx):Promise<boolean>
Parameters
_
unknown
args
input
{ answers: Record<string, string>; interactionId: string; runId: string; }
input.answers
Record<string, string>
input.interactionId
string
input.runId
string
ctx
Returns
Promise<boolean>
Mutation.archiveConversation()
archiveConversation(
_,args,ctx):Promise<Conversation>
Parameters
_
unknown
args
expectedVersion
number
id
string
ctx
Returns
Promise<Conversation>
Mutation.cancelRun()
cancelRun(
_,args,ctx):Promise<boolean>
Parameters
_
unknown
args
runId
string
ctx
Returns
Promise<boolean>
Mutation.createConversation()
createConversation(
_,args,ctx):Promise<Conversation>
Parameters
_
unknown
args
id
string
title
string
ctx
Returns
Promise<Conversation>
Mutation.decideApproval()
decideApproval(
_,args,ctx):Promise<boolean>
Parameters
_
unknown
args
input
{ decision: string; interactionId: string; runId: string; }
input.decision
string
input.interactionId
string
input.runId
string
ctx
Returns
Promise<boolean>
Mutation.deleteConversation()
deleteConversation(
_,args,ctx):Promise<boolean>
Parameters
_
unknown
args
id
string
ctx
Returns
Promise<boolean>
Mutation.renameConversation()
renameConversation(
_,args,ctx):Promise<Conversation>
Parameters
_
unknown
args
expectedVersion
number
id
string
title
string
ctx
Returns
Promise<Conversation>
Mutation.sendMessage()
sendMessage(
_,args,ctx):Promise<{conversationId:string|undefined;createdAt:string;finishedAt:string|null;id:string;status:string; }>
Parameters
_
unknown
args
conversationId
string
runId
string
ctx
Returns
Promise<{ conversationId: string | undefined; createdAt: string; finishedAt: string | null; id: string; status: string; }>
Query
Query:
object
Query.conversation()
conversation(
_,args,ctx):Promise<Conversation|null>
Parameters
_
unknown
args
id
string
ctx
Returns
Promise<Conversation | null>
Query.conversationContext()
conversationContext(
_,args,ctx):Promise<ContextInspection|null>
Parameters
_
unknown
args
conversationId
string
runId?
string
ctx
Returns
Promise<ContextInspection | null>
Query.conversations()
conversations(
_,args,ctx):Promise<Page<Conversation>>
Parameters
_
unknown
args
cursor?
string
limit
number
ctx
Returns
Promise<Page<Conversation>>
Query.findTools()
findTools(
_,args,ctx):Promise<ToolSearchOutcome>
Parameters
_
unknown
args
limit?
number
query
string
ctx
Returns
Promise<ToolSearchOutcome>
Query.pendingApproval()
pendingApproval(
_,args,ctx):Promise<{expiresAt:string;interactionId:InteractionId;normalizedInput:unknown;riskCategory:string;runId:RunId;summary:string;toolName:string; } |null>
#163, the mirror of pendingQuestion. Wired the same way so the two cannot drift.
Parameters
_
unknown
args
runId
string
ctx
Returns
Promise<{ expiresAt: string; interactionId: InteractionId; normalizedInput: unknown; riskCategory: string; runId: RunId; summary: string; toolName: string; } | null>
Query.pendingQuestion()
pendingQuestion(
_,args,ctx):Promise<{createdAt:string;interactionId:InteractionId;questions:object[];runId:RunId; } |null>
#163. Shaped for rendering: the optional fields are filled in rather than passed through, because a
client that has to treat null as "one choice" and undefined as "one choice" and false as "one
choice" will eventually treat one of them as "several".
Parameters
_
unknown
args
runId
string
ctx
Returns
Promise<{ createdAt: string; interactionId: InteractionId; questions: object[]; runId: RunId; } | null>
Query.run()
run(
_,args,ctx):Promise<{conversationId:string|undefined;createdAt:string;finishedAt:string|null;id:string;status:string; } |null>
Parameters
_
unknown
args
id
string
ctx
Returns
Promise<{ conversationId: string | undefined; createdAt: string; finishedAt: string | null; id: string; status: string; } | null>
Query.toolCatalog()
toolCatalog(
_,args,ctx):Promise<ToolCatalog>
Parameters
_
unknown
args
categories
string[]
excluded
string[]
preloaded
string[]
ctx
Returns
Promise<ToolCatalog>
Query.usage()
usage(
_,args,ctx):Promise<UsageTotals>
Parameters
_
unknown
args
runId?
string
ctx
Returns
Promise<UsageTotals>
Query.usageReport()
usageReport(
_,args,ctx):Promise<{buckets:object[];byConversation: readonlyobject[];byModel: readonlyobject[];currency:string;from:string;period:"hour"|"day";quota: {costLimitMinorUnits:number|null;exceeded:boolean;inputTokenLimit:number|null;modelId:string|null;outputTokenLimit:number|null;period:"hour"|"day"|"week"|"month"|null;warnAt:number;warning:boolean;window:string; } |null;to:string;totals:UsageTotals; }>
The spend panel's one query (#140).
Headline totals and buckets come from the rollups, so a page load never scans raw records however
much a tenant has used. Breakdowns come from the ledger over the same bounded range — a deliberate
trade documented on UsageStore.breakdown.
Everything in one resolver so a panel cannot show a total from one moment and a breakdown from another; the discrepancy would look like a bug in the numbers rather than in the fetching.
Parameters
_
unknown
args
breakdownLimit?
number
from
string
period
string
to
string
ctx
Returns
Promise<{ buckets: object[]; byConversation: readonly object[]; byModel: readonly object[]; currency: string; from: string; period: "hour" | "day"; quota: { costLimitMinorUnits: number | null; exceeded: boolean; inputTokenLimit: number | null; modelId: string | null; outputTokenLimit: number | null; period: "hour" | "day" | "week" | "month" | null; warnAt: number; warning: boolean; window: string; } | null; to: string; totals: UsageTotals; }>
Subscription
Subscription:
object
Subscription.runEvents
runEvents:
object
Subscription.runEvents.resolve
resolve: (
event) =>object
Parameters
event
occurredAt
string
runId
string
sequence
number
type
string
Returns
object
occurredAt
occurredAt:
string=event.occurredAt
payload
payload:
object=event
payload.occurredAt
occurredAt:
string
payload.runId
runId:
string
payload.sequence
sequence:
number
payload.type
type:
string
runId
runId:
string=event.runId
sequence
sequence:
number=event.sequence
type
type:
string=event.type
Subscription.runEvents.subscribe()
subscribe(
_,args,ctx):AsyncIterable<RunEvent,any,any>
Parameters
_
unknown
args
after?
number
conversationId
string
runId
string
ctx
Returns
AsyncIterable<RunEvent, any, any>