MCPcopy Create free account
hub / github.com/Noumena-Network/code / sendRequest

Method sendRequest

src/cli/structuredIO.ts:468–530  ·  view source on GitHub ↗
(
    request: SDKControlRequest['request'],
    schema: z.Schema,
    signal?: AbortSignal,
    requestId: string = randomUUID(),
  )

Source from the content-addressed store, hash-verified

466 }
467
468 private async sendRequest<Response>(
469 request: SDKControlRequest['request'],
470 schema: z.Schema,
471 signal?: AbortSignal,
472 requestId: string = randomUUID(),
473 ): Promise<Response> {
474 const message: SDKControlRequest = {
475 type: 'control_request',
476 request_id: requestId,
477 request,
478 }
479 if (this.inputClosed) {
480 throw new Error('Stream closed')
481 }
482 if (signal?.aborted) {
483 throw new Error('Request aborted')
484 }
485 this.outbound.enqueue(message)
486 if (request.subtype === 'can_use_tool' && this.onControlRequestSent) {
487 this.onControlRequestSent(message)
488 }
489 const aborted = () => {
490 this.outbound.enqueue({
491 type: 'control_cancel_request',
492 request_id: requestId,
493 })
494 // Immediately reject the outstanding promise, without
495 // waiting for the host to acknowledge the cancellation.
496 const request = this.pendingRequests.get(requestId)
497 if (request) {
498 // Track the tool_use ID as resolved before rejecting, so that a
499 // late response from the host is ignored by the orphan handler.
500 this.trackResolvedToolUseId(request.request)
501 request.reject(new AbortError())
502 }
503 }
504 if (signal) {
505 signal.addEventListener('abort', aborted, {
506 once: true,
507 })
508 }
509 try {
510 return await new Promise<Response>((resolve, reject) => {
511 this.pendingRequests.set(requestId, {
512 request: {
513 type: 'control_request',
514 request_id: requestId,
515 request,
516 },
517 resolve: result => {
518 resolve(result as Response)
519 },
520 reject,
521 schema,
522 })
523 })
524 } finally {
525 if (signal) {

Callers 8

createCanUseToolMethod · 0.95
callFunction · 0.80
dispatchReplSandboxAskFunction · 0.80
initializeFunction · 0.80
sendRequestFunction · 0.80
stopFunction · 0.80
sendRequestFunction · 0.80

Calls 5

randomUUIDFunction · 0.90
setMethod · 0.80
deleteMethod · 0.80
resolveFunction · 0.50
enqueueMethod · 0.45

Tested by

no test coverage detected