MCPcopy Create free account
hub / github.com/FIND-Lab/AgentWard / call

Method call

worker/model-worker-manager.ts:123–180  ·  view source on GitHub ↗
(request: WorkerRequest)

Source from the content-addressed store, hash-verified

121 }
122
123 call(request: WorkerRequest): WorkerResponse | null {
124 const requestId = request.requestId;
125 const requestFile = `agent-ward-request-${requestId}.json`;
126 const responseFile = `agent-ward-response-${requestId}.json`;
127
128 const requestFilePath = join(this.tmpDir, requestFile);
129 const responseFilePath = join(this.tmpDir, responseFile);
130
131 try {
132 const encryptedRequest = encrypt(JSON.stringify(request), this.aesKey);
133 writeFileSync(requestFilePath, encryptedRequest);
134
135 const requestFileEncoded = this.encoder.encode(requestFile);
136 if (requestFileEncoded.length > FILENAME_MAX_LENGTH) {
137 getLogger().error(`[WorkerManager] Request filename too long: ${requestFileEncoded.length} > ${FILENAME_MAX_LENGTH}`);
138 return null;
139 }
140 this.view[1] = requestFileEncoded.length;
141 this.dataBuffer.set(requestFileEncoded, REQUEST_FILENAME_DATA_OFFSET);
142
143 const responseFileEncoded = this.encoder.encode(responseFile);
144 if (responseFileEncoded.length > FILENAME_MAX_LENGTH) {
145 getLogger().error(`[WorkerManager] Response filename too long: ${responseFileEncoded.length} > ${FILENAME_MAX_LENGTH}`);
146 return null;
147 }
148 this.view[RESPONSE_FILENAME_LENGTH_INDEX] = responseFileEncoded.length;
149 this.dataBuffer.set(responseFileEncoded, RESPONSE_FILENAME_DATA_OFFSET);
150
151 const beforeStatus = Atomics.load(this.view, 0);
152 Atomics.and(this.view, 0, ~0b010);
153 Atomics.or(this.view, 0, 0b001);
154 Atomics.notify(this.view, 0);
155
156 const status = Atomics.wait(this.view, 0, 0b001, this.timeout);
157 Atomics.and(this.view, 0, ~0b010);
158 Atomics.and(this.view, 0, ~0b001);
159
160 if (status === 'timed-out') {
161 getLogger().error('[WorkerManager] Timeout');
162 const currentStatus = Atomics.load(this.view, 0);
163 getLogger().error(`[WorkerManager] Current status: ${currentStatus.toString(2)}`);
164 getLogger().error(`[WorkerManager] Worker is running: ${this.running}`);
165 return null;
166 }
167
168 const responseBuffer = readFileSync(responseFilePath);
169 const responseJson = decrypt(new Uint8Array(responseBuffer), this.aesKey);
170 const response = JSON.parse(responseJson) as WorkerResponse;
171
172 return response;
173 } catch (error) {
174 getLogger().error(`[WorkerManager] Call failed: ${error}`);
175 return null;
176 } finally {
177 rmSync(requestFilePath, { force: true });
178 rmSync(responseFilePath, { force: true });
179 }
180 }

Callers 1

callLLMSyncFunction · 0.80

Calls 3

encryptFunction · 0.90
getLoggerFunction · 0.90
decryptFunction · 0.90

Tested by

no test coverage detected