teamclaws 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,570 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { PACKAGE_VERSION } from "./constants.js";
3
+ import { TeamClawsError } from "./errors.js";
4
+ import { errorFromResponse, requestJson, } from "./http.js";
5
+ import { isObject, normalizeUuid, parseVerifiedWorkspace, requireHttpsUrl, requireInteger, requireString, } from "./validation.js";
6
+ const REQUIRED_SCOPES = new Set([
7
+ "external_chat:capabilities:read",
8
+ "external_chat:sessions:create",
9
+ "external_chat:sessions:write",
10
+ ]);
11
+ const PENDING_STATUSES = new Set([
12
+ "received",
13
+ "awaiting_approval",
14
+ "approved",
15
+ "queued",
16
+ "running",
17
+ ]);
18
+ const TERMINAL_STATUSES = new Set([
19
+ "succeeded",
20
+ "rejected",
21
+ "failed",
22
+ "expired",
23
+ "canceled",
24
+ ]);
25
+ export class ExternalChatClient {
26
+ fetcher;
27
+ now;
28
+ store;
29
+ output;
30
+ wait;
31
+ constructor(options) {
32
+ this.fetcher = options.fetcher ?? fetch;
33
+ this.now = options.now ?? (() => performance.now());
34
+ this.store = options.store;
35
+ this.output = options.output;
36
+ this.wait = options.wait ?? waitFor;
37
+ }
38
+ async capabilities(target, signal) {
39
+ const result = await this.listInventory(target, signal);
40
+ this.output.capabilityInventory(result.workspace, result.external_chat_capabilities);
41
+ return 0;
42
+ }
43
+ async listInventory(target, signal, resolvedCredential) {
44
+ const deadline = this.now() + 120_000;
45
+ const canceled = () => {
46
+ if (signal?.aborted) {
47
+ throw new TeamClawsError("cancelled", "The operation was cancelled.");
48
+ }
49
+ };
50
+ canceled();
51
+ const credential = resolvedCredential ?? (await this.store.findWorkspace(target));
52
+ if (!credential) {
53
+ throw new TeamClawsError("re_pair_required", "No saved pairing was found for this workspace. Pair it first.", { exitCode: 3 });
54
+ }
55
+ let lastFailure = "No provider/model inventory was available.";
56
+ while (this.now() < deadline) {
57
+ canceled();
58
+ const remainingAttempt = deadline - this.now();
59
+ if (remainingAttempt < 1)
60
+ break;
61
+ const timeoutMs = Math.max(1, Math.floor(Math.min(15_000, remainingAttempt)));
62
+ const timeout = AbortSignal.timeout(timeoutMs);
63
+ const attemptSignal = signal
64
+ ? AbortSignal.any([timeout, signal])
65
+ : timeout;
66
+ try {
67
+ const response = await requestJson(this.fetcher, `${credential.origin}/teamclaws-admin/api/device-chat/v1/capabilities/`, {
68
+ headers: {
69
+ Authorization: bearer(credential),
70
+ "User-Agent": `TeamClaws-CLI/${PACKAGE_VERSION}`,
71
+ },
72
+ timeoutMs,
73
+ signal: attemptSignal,
74
+ });
75
+ canceled();
76
+ if (response.status !== 200) {
77
+ const denied = response.status === 401 || response.status === 403;
78
+ throw new TeamClawsError(denied ? "capabilities_denied" : "capabilities_unavailable", denied
79
+ ? "The workspace rejected capability access. Check the pairing."
80
+ : `The workspace could not provide capabilities (HTTP ${response.status}).`, {
81
+ exitCode: denied ? 3 : 5,
82
+ retryable: [408, 429, 500, 502, 503, 504].includes(response.status),
83
+ });
84
+ }
85
+ const inventory = parseCapabilityInventory(response.body);
86
+ if (this.now() >= deadline)
87
+ break;
88
+ if (inventory.providers.some((provider) => provider.models.length > 0)) {
89
+ return {
90
+ workspace: {
91
+ server_id: credential.server_id,
92
+ origin: credential.origin,
93
+ },
94
+ external_chat_capabilities: inventory,
95
+ };
96
+ }
97
+ lastFailure = "The workspace returned no provider/model choices.";
98
+ }
99
+ catch (error) {
100
+ canceled();
101
+ // Body reads occur outside requestJson's fetch catch; classify their
102
+ // timeout here without changing send/watch transport behavior.
103
+ if (timeout.aborted) {
104
+ lastFailure = "The inventory request timed out.";
105
+ }
106
+ else if (error instanceof TeamClawsError && error.retryable) {
107
+ lastFailure = error.message;
108
+ }
109
+ else {
110
+ throw error;
111
+ }
112
+ }
113
+ canceled();
114
+ const remaining = deadline - this.now();
115
+ if (remaining > 0)
116
+ await this.wait(Math.min(5_000, remaining), signal);
117
+ }
118
+ canceled();
119
+ throw new TeamClawsError("capabilities_unavailable", `${lastFailure} Log into TeamClaws and ensure the server is running.`, { exitCode: 5, retryable: true });
120
+ }
121
+ async start(options, signal) {
122
+ const context = await this.context(options.target, signal, true);
123
+ const selection = resolveStartSelection(context.capabilities, options);
124
+ const message = validateMessage(options.message, context.capabilities);
125
+ this.output.chatCapabilities(selection);
126
+ const clientRequestId = validUuid(options.clientRequestId ?? randomUUID());
127
+ const response = await this.request(`${context.credential.origin}/teamclaws-admin/api/device-chat/v1/sessions/`, context.authorization, {
128
+ method: "POST",
129
+ body: {
130
+ client_request_id: clientRequestId,
131
+ provider_key: selection.provider_key,
132
+ model_name: selection.model_name,
133
+ reasoning_effort: selection.reasoning_effort,
134
+ fast_mode: selection.fast_mode,
135
+ initial_message: message,
136
+ },
137
+ }, [200, 201], signal);
138
+ if (!isObject(response.body) || !isObject(response.body.session)) {
139
+ throw invalidChatResponse();
140
+ }
141
+ const sessionId = validUuid(response.body.session.session_id);
142
+ const initial = parseRequest(response.body.initial_message_request, context.credential.origin, response.body.session.owner_conversation_url);
143
+ if (initial.sessionId !== sessionId)
144
+ throw invalidChatResponse();
145
+ this.output.chatSessionCreated(sessionId, initial.requestId, initial.status, initial.ownerUrl);
146
+ return this.poll(context, initial, 0, 0, signal);
147
+ }
148
+ async send(options, signal) {
149
+ const context = await this.context(options.target, signal);
150
+ const sessionId = validUuid(options.sessionId);
151
+ const message = validateMessage(options.message, context.capabilities);
152
+ const clientRequestId = validUuid(options.clientRequestId ?? randomUUID());
153
+ const response = await this.request(`${context.credential.origin}/teamclaws-admin/api/device-chat/v1/sessions/${sessionId}/messages/create/`, context.authorization, {
154
+ method: "POST",
155
+ body: { client_request_id: clientRequestId, body_text: message },
156
+ }, [200, 202], signal);
157
+ if (!isObject(response.body))
158
+ throw invalidChatResponse();
159
+ const request = parseRequest(response.body.request, context.credential.origin);
160
+ if (request.sessionId !== sessionId)
161
+ throw invalidChatResponse();
162
+ return this.poll(context, request, 0, 0, signal);
163
+ }
164
+ async watch(options, signal) {
165
+ const context = await this.context(options.target, signal);
166
+ const sessionId = validUuid(options.sessionId);
167
+ const requestId = validUuid(options.requestId);
168
+ return this.poll(context, { requestId, sessionId }, options.knownRevision, options.responseCursor, signal);
169
+ }
170
+ async context(target, signal, starting = false) {
171
+ const credential = await this.store.findWorkspace(target);
172
+ if (!credential) {
173
+ throw new TeamClawsError("re_pair_required", "No saved pairing was found for this workspace. Pair it first.", { exitCode: 3 });
174
+ }
175
+ const authorization = bearer(credential);
176
+ const verifiedResponse = await this.request(`${credential.origin}/teamclaws-admin/api/device-pairings/me/`, authorization, {}, [200], signal);
177
+ const verified = parseVerifiedWorkspace(verifiedResponse.body, credential.device_id, credential.origin);
178
+ requirePairingScopes(verifiedResponse.body);
179
+ const handoff = requireReadyHandoff(verified.external_chat_handoff);
180
+ if (starting) {
181
+ const result = await this.listInventory(target, signal, credential);
182
+ return {
183
+ credential,
184
+ authorization,
185
+ capabilities: parseCapabilities(result.external_chat_capabilities, true),
186
+ };
187
+ }
188
+ const capabilityResponse = await this.request(new URL(handoff.capabilities_url, `${credential.origin}/`).toString(), authorization, {}, [200], signal);
189
+ return {
190
+ credential,
191
+ authorization,
192
+ capabilities: parseCapabilities(capabilityResponse.body),
193
+ };
194
+ }
195
+ async poll(context, current, knownRevision, responseCursor, signal) {
196
+ let state = "status" in current ? current : undefined;
197
+ let lastStatus = "";
198
+ let approvalReported = false;
199
+ let initialResume = knownRevision > 0;
200
+ const seenMessageIds = new Set();
201
+ if (responseCursor > 0)
202
+ seenMessageIds.add(responseCursor);
203
+ while (true) {
204
+ if (!state) {
205
+ const query = new URLSearchParams({
206
+ known_revision: String(knownRevision),
207
+ after_response_message_id: String(responseCursor),
208
+ });
209
+ const response = await this.request(`${context.credential.origin}/teamclaws-admin/api/device-chat/v1/requests/${current.requestId}/?${query.toString()}`, context.authorization, {}, [200], signal);
210
+ if (!isObject(response.body))
211
+ throw invalidChatResponse();
212
+ state = parseRequest(response.body.request, context.credential.origin);
213
+ }
214
+ if (state.requestId !== current.requestId ||
215
+ state.sessionId !== current.sessionId ||
216
+ state.revision < Math.max(1, knownRevision) ||
217
+ state.responseCursor < responseCursor) {
218
+ throw invalidChatResponse();
219
+ }
220
+ if (initialResume && state.revision === knownRevision) {
221
+ lastStatus = state.status;
222
+ approvalReported = state.status === "awaiting_approval";
223
+ }
224
+ initialResume = false;
225
+ if (state.status !== lastStatus) {
226
+ this.output.chatRequestStatus(state.sessionId, state.requestId, state.status, state.revision);
227
+ lastStatus = state.status;
228
+ }
229
+ if (state.status === "awaiting_approval" && !approvalReported) {
230
+ this.output.chatApprovalRequired(state.sessionId, state.requestId, state.ownerUrl);
231
+ approvalReported = true;
232
+ }
233
+ for (const message of state.messages) {
234
+ if (seenMessageIds.has(message.id))
235
+ continue;
236
+ seenMessageIds.add(message.id);
237
+ this.output.chatAssistantMessage(state.sessionId, state.requestId, message.id, message.body, message.provider, message.model);
238
+ }
239
+ knownRevision = state.revision;
240
+ responseCursor = Math.max(responseCursor, state.responseCursor, ...seenMessageIds);
241
+ if (TERMINAL_STATUSES.has(state.status))
242
+ break;
243
+ if (!PENDING_STATUSES.has(state.status))
244
+ throw invalidChatResponse();
245
+ state = undefined;
246
+ await this.wait(context.capabilities.pollSeconds * 1_000, signal);
247
+ }
248
+ if (state.status === "succeeded" &&
249
+ state.ownerUrl &&
250
+ seenMessageIds.size > 0) {
251
+ this.output.chatRequestSucceeded(state.sessionId, state.requestId, seenMessageIds.size, state.ownerUrl);
252
+ return 0;
253
+ }
254
+ const code = state.errorCode || "response_missing";
255
+ const detail = state.errorDetail ||
256
+ (state.status === "succeeded"
257
+ ? "The request finished without complete response evidence."
258
+ : `The external turn ended with status ${state.status}.`);
259
+ this.output.chatRequestFailed(state.sessionId, state.requestId, state.status, code, detail, state.ownerUrl);
260
+ return 1;
261
+ }
262
+ async request(url, authorization, options, expected, signal) {
263
+ for (let attempt = 0; attempt < 3; attempt += 1) {
264
+ try {
265
+ const response = await requestJson(this.fetcher, url, {
266
+ ...options,
267
+ headers: {
268
+ ...options.headers,
269
+ Authorization: authorization,
270
+ "User-Agent": `TeamClaws-CLI/${PACKAGE_VERSION}`,
271
+ },
272
+ ...(signal ? { signal } : {}),
273
+ });
274
+ if (expected.includes(response.status))
275
+ return response;
276
+ if (response.status === 429 && attempt < 2) {
277
+ await this.wait(retryAfter(response) * 1_000, signal);
278
+ continue;
279
+ }
280
+ throw errorFromResponse(response, "external_chat_failed");
281
+ }
282
+ catch (error) {
283
+ if (error instanceof TeamClawsError &&
284
+ error.retryable &&
285
+ attempt < 2 &&
286
+ !signal?.aborted) {
287
+ await this.wait((attempt + 1) * 1_000, signal);
288
+ continue;
289
+ }
290
+ throw error;
291
+ }
292
+ }
293
+ throw new TeamClawsError("external_chat_failed", "The workspace did not complete the external chat request.", { exitCode: 5 });
294
+ }
295
+ }
296
+ function bearer(credential) {
297
+ return `Bearer ${credential.device_id}:${credential.device_token}`;
298
+ }
299
+ function requireReadyHandoff(handoff) {
300
+ if (handoff.status === "ready")
301
+ return handoff;
302
+ throw new TeamClawsError(handoff.status === "re_pair_required"
303
+ ? "re_pair_required"
304
+ : "external_chat_unavailable", handoff.status === "re_pair_required"
305
+ ? "Re-pair this workspace before starting external chat."
306
+ : "The workspace external chat client is temporarily unavailable.", { exitCode: handoff.status === "re_pair_required" ? 3 : 5 });
307
+ }
308
+ function requirePairingScopes(value) {
309
+ if (!isObject(value) || !isObject(value.paired_device)) {
310
+ throw invalidChatResponse();
311
+ }
312
+ const scopes = value.paired_device.scopes;
313
+ if (!Array.isArray(scopes))
314
+ throw invalidChatResponse();
315
+ const approved = new Set(scopes.map(String));
316
+ if ([...REQUIRED_SCOPES].some((scope) => !approved.has(scope))) {
317
+ throw new TeamClawsError("re_pair_required", "Re-pair this workspace to grant the required external chat scopes.", { exitCode: 3 });
318
+ }
319
+ }
320
+ function parseCapabilities(value, inventoryOnly = false) {
321
+ if (!isObject(value) || value.contract_version !== 1) {
322
+ throw invalidChatResponse();
323
+ }
324
+ if (!isObject(value.identity))
325
+ throw invalidChatResponse();
326
+ requireString(value.identity.alias, "external identity alias", 200);
327
+ if (!Array.isArray(value.approved_scopes))
328
+ throw invalidChatResponse();
329
+ // Successful paired listing is authorized by the endpoint, not by this
330
+ // informational scope list. Session flows retain their existing checks.
331
+ const approved = new Set(value.approved_scopes.map(String));
332
+ if (!inventoryOnly &&
333
+ [...REQUIRED_SCOPES].some((scope) => !approved.has(scope))) {
334
+ throw new TeamClawsError("re_pair_required", "Re-pair this workspace to grant the required external chat scopes.", { exitCode: 3 });
335
+ }
336
+ if (!Array.isArray(value.providers) || value.providers.length > 32) {
337
+ throw invalidChatResponse();
338
+ }
339
+ const providers = value.providers.map((provider) => {
340
+ if (!isObject(provider) || !Array.isArray(provider.models)) {
341
+ throw invalidChatResponse();
342
+ }
343
+ const id = requireString(provider.id, "provider identifier", 120);
344
+ if (provider.models.length > 128)
345
+ throw invalidChatResponse();
346
+ const models = provider.models.map((model) => {
347
+ if (!isObject(model))
348
+ throw invalidChatResponse();
349
+ const reasoningValues = Array.isArray(model.supported_reasoning_levels)
350
+ ? model.supported_reasoning_levels
351
+ : [];
352
+ const reasoning = new Set(reasoningValues.map((item) => isObject(item)
353
+ ? requireString(item.effort, "reasoning effort", 40)
354
+ : requireString(item, "reasoning effort", 40)));
355
+ return {
356
+ id: requireString(model.id, "model identifier", 255),
357
+ reasoning,
358
+ fast: model.fast_mode_available === true,
359
+ };
360
+ });
361
+ return { id, models };
362
+ });
363
+ if (!isObject(value.policy))
364
+ throw invalidChatResponse();
365
+ if (value.recommended_selection !== null &&
366
+ !isObject(value.recommended_selection))
367
+ throw invalidChatResponse();
368
+ const recommended = value.recommended_selection === null
369
+ ? null
370
+ : {
371
+ provider_key: requireString(value.recommended_selection.provider_key, "provider identifier", 120),
372
+ model_name: requireString(value.recommended_selection.model_name, "model identifier", 255),
373
+ reasoning_effort: typeof value.recommended_selection.reasoning_effort === "string"
374
+ ? value.recommended_selection.reasoning_effort
375
+ : "",
376
+ fast_mode: value.recommended_selection.fast_mode === true,
377
+ };
378
+ if (!isObject(value.limits))
379
+ throw invalidChatResponse();
380
+ const capabilities = {
381
+ providers,
382
+ recommended,
383
+ pollSeconds: requireInteger(value.limits.recommended_poll_seconds ?? 3, "polling interval", 1, 60),
384
+ messageChars: requireInteger(value.limits.message_chars, "message limit", 1, 1_000_000),
385
+ allowFast: value.policy.allow_fast_mode === true,
386
+ };
387
+ if (!inventoryOnly && recommended)
388
+ resolveSelection(capabilities, {});
389
+ return capabilities;
390
+ }
391
+ export function parseCapabilityInventory(value) {
392
+ const parsed = parseCapabilities(value, true);
393
+ // Project only public capability fields; never return the server response itself.
394
+ if (!isObject(value) ||
395
+ !isObject(value.identity) ||
396
+ !Array.isArray(value.approved_scopes))
397
+ throw invalidChatResponse();
398
+ return {
399
+ contract_version: 1,
400
+ identity: {
401
+ alias: requireString(value.identity.alias, "external identity alias", 200),
402
+ },
403
+ approved_scopes: value.approved_scopes.filter((scope) => typeof scope === "string" && REQUIRED_SCOPES.has(scope)),
404
+ providers: parsed.providers.map((provider) => ({
405
+ id: provider.id,
406
+ models: provider.models.map((model) => ({
407
+ id: model.id,
408
+ supported_reasoning_levels: [...model.reasoning],
409
+ fast_mode_available: model.fast,
410
+ })),
411
+ })),
412
+ recommended_selection: parsed.recommended,
413
+ policy: { allow_fast_mode: parsed.allowFast },
414
+ limits: {
415
+ message_chars: parsed.messageChars,
416
+ recommended_poll_seconds: parsed.pollSeconds,
417
+ },
418
+ };
419
+ }
420
+ // Start accepts explicit choices independently of advertised default selection.
421
+ // Keep the legacy resolver used by send/watch response validation unchanged.
422
+ function resolveStartSelection(capabilities, requested) {
423
+ const recommendation = capabilities.recommended;
424
+ const recommendedModel = capabilities.providers
425
+ .find((provider) => provider.id === recommendation?.provider_key)
426
+ ?.models.find((model) => model.id === recommendation?.model_name);
427
+ const usable = recommendation &&
428
+ recommendedModel &&
429
+ (!recommendation.reasoning_effort ||
430
+ recommendedModel.reasoning.has(recommendation.reasoning_effort)) &&
431
+ (!recommendation.fast_mode ||
432
+ (recommendedModel.fast && capabilities.allowFast))
433
+ ? recommendation
434
+ : null;
435
+ const providerKey = requested.provider ?? usable?.provider_key;
436
+ const modelName = requested.model ?? usable?.model_name;
437
+ if (providerKey === undefined || modelName === undefined) {
438
+ throw new TeamClawsError("selection_unavailable", "No usable default is available. Specify the missing provider and model choices.", { exitCode: 4 });
439
+ }
440
+ const model = capabilities.providers
441
+ .find((provider) => provider.id === providerKey)
442
+ ?.models.find((item) => item.id === modelName);
443
+ if (!model) {
444
+ throw new TeamClawsError("selection_unavailable", "The requested provider or model is not advertised by this workspace.", { exitCode: 4 });
445
+ }
446
+ const defaultsCompatible = usable &&
447
+ (!usable.reasoning_effort ||
448
+ model.reasoning.has(usable.reasoning_effort)) &&
449
+ (!usable.fast_mode || (model.fast && capabilities.allowFast));
450
+ const selection = {
451
+ provider_key: providerKey,
452
+ model_name: modelName,
453
+ reasoning_effort: requested.reasoning ??
454
+ (defaultsCompatible ? usable.reasoning_effort : ""),
455
+ fast_mode: requested.fastMode ??
456
+ (defaultsCompatible
457
+ ? usable.fast_mode
458
+ : model.fast && capabilities.allowFast),
459
+ };
460
+ // Reuse existing membership/settings checks with the resolved selection only.
461
+ return resolveSelection({ ...capabilities, recommended: selection }, {});
462
+ }
463
+ function resolveSelection(capabilities, requested) {
464
+ if (!capabilities.recommended) {
465
+ throw new TeamClawsError("external_chat_unavailable", "No recommended provider and model are currently available.", { exitCode: 5 });
466
+ }
467
+ const selection = {
468
+ provider_key: requested.provider ?? capabilities.recommended.provider_key,
469
+ model_name: requested.model ?? capabilities.recommended.model_name,
470
+ reasoning_effort: requested.reasoning ?? capabilities.recommended.reasoning_effort,
471
+ fast_mode: requested.fastMode ?? capabilities.recommended.fast_mode,
472
+ };
473
+ const provider = capabilities.providers.find((item) => item.id === selection.provider_key);
474
+ const model = provider?.models.find((item) => item.id === selection.model_name);
475
+ if (!provider || !model) {
476
+ throw new TeamClawsError("selection_unavailable", "The requested provider or model is not advertised by this workspace.", { exitCode: 4 });
477
+ }
478
+ if (selection.reasoning_effort &&
479
+ !model.reasoning.has(selection.reasoning_effort)) {
480
+ throw new TeamClawsError("selection_unavailable", "The requested reasoning effort is not advertised for this model.", { exitCode: 4 });
481
+ }
482
+ if (selection.fast_mode && (!model.fast || !capabilities.allowFast)) {
483
+ throw new TeamClawsError("selection_unavailable", "Fast mode is not available for this device and model.", { exitCode: 4 });
484
+ }
485
+ return selection;
486
+ }
487
+ function validateMessage(value, capabilities) {
488
+ const message = value.trim();
489
+ if (!message || message.length > capabilities.messageChars) {
490
+ throw new TeamClawsError("invalid_message", `The message must contain 1-${capabilities.messageChars} characters.`, { exitCode: 2 });
491
+ }
492
+ return message;
493
+ }
494
+ function parseRequest(value, origin, fallbackOwnerUrl) {
495
+ if (!isObject(value))
496
+ throw invalidChatResponse();
497
+ const status = requireString(value.status, "request status", 40);
498
+ if (!PENDING_STATUSES.has(status) && !TERMINAL_STATUSES.has(status)) {
499
+ throw invalidChatResponse();
500
+ }
501
+ const ownerUrl = requireOwnerUrl(value.owner_conversation_url ?? fallbackOwnerUrl, origin);
502
+ const rawMessages = value.response_messages ?? [];
503
+ if (!Array.isArray(rawMessages) || rawMessages.length > 1_000) {
504
+ throw invalidChatResponse();
505
+ }
506
+ const messages = rawMessages.map((message) => {
507
+ if (!isObject(message))
508
+ throw invalidChatResponse();
509
+ return {
510
+ id: requireInteger(message.id, "response message identifier", 1, 2 ** 53 - 1),
511
+ body: typeof message.body_text === "string" ? message.body_text : "",
512
+ provider: typeof message.provider_key === "string" ? message.provider_key : "",
513
+ model: typeof message.model_name === "string" ? message.model_name : "",
514
+ };
515
+ });
516
+ const error = isObject(value.error) ? value.error : {};
517
+ return {
518
+ requestId: validUuid(value.request_id),
519
+ sessionId: validUuid(value.session_id),
520
+ status,
521
+ revision: requireInteger(value.revision, "request revision", 1, 2 ** 31 - 1),
522
+ responseCursor: requireInteger(value.response_cursor, "response cursor", 0, 2 ** 53 - 1),
523
+ ownerUrl,
524
+ messages,
525
+ errorCode: typeof error.code === "string" ? error.code.slice(0, 64) : "",
526
+ errorDetail: typeof error.detail === "string" ? error.detail.slice(0, 500) : "",
527
+ };
528
+ }
529
+ function requireOwnerUrl(value, origin) {
530
+ const url = requireHttpsUrl(value, "owner conversation address");
531
+ if (url.origin !== origin || !url.pathname.startsWith("/teamclaws-admin/")) {
532
+ throw invalidChatResponse();
533
+ }
534
+ return url.toString();
535
+ }
536
+ function validUuid(value) {
537
+ return normalizeUuid(value, "identifier");
538
+ }
539
+ function invalidChatResponse() {
540
+ return new TeamClawsError("invalid_external_chat_response", "The workspace returned an invalid external chat response.", { exitCode: 9 });
541
+ }
542
+ function retryAfter(response) {
543
+ const header = Number(response.headers.get("retry-after"));
544
+ if (Number.isInteger(header) && header > 0 && header <= 60)
545
+ return header;
546
+ if (isObject(response.body)) {
547
+ const seconds = Number(response.body.retry_after_seconds);
548
+ if (Number.isInteger(seconds) && seconds > 0 && seconds <= 60)
549
+ return seconds;
550
+ }
551
+ return 1;
552
+ }
553
+ async function waitFor(milliseconds, signal) {
554
+ await new Promise((resolve, reject) => {
555
+ if (signal?.aborted) {
556
+ reject(new TeamClawsError("cancelled", "Chat monitoring was cancelled."));
557
+ return;
558
+ }
559
+ const onAbort = () => {
560
+ clearTimeout(timer);
561
+ reject(new TeamClawsError("cancelled", "Chat monitoring was cancelled."));
562
+ };
563
+ const timer = setTimeout(() => {
564
+ signal?.removeEventListener("abort", onAbort);
565
+ resolve();
566
+ }, milliseconds);
567
+ signal?.addEventListener("abort", onAbort, { once: true });
568
+ });
569
+ }
570
+ //# sourceMappingURL=external-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-chat.js","sourceRoot":"","sources":["../src/external-chat.ts"],"names":[],"mappings":"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"}