lua-cli 3.29.0 → 3.29.1
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.
- package/dist/api-exports.d.ts +1 -0
- package/dist/api-exports.js +151 -20
- package/dist/api-exports.js.map +1 -1
- package/dist/index.js +188 -42
- package/dist/index.js.map +1 -1
- package/docs/README.md +4 -4
- package/package.json +1 -1
- package/template/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -686,6 +686,64 @@ function buildDefaultPersona(agentName) {
|
|
|
686
686
|
function buildPersonalSpaceStartingPersona(agentName) {
|
|
687
687
|
return PERSONAL_SPACE_STARTING_PERSONA.replace(new RegExp(AGENT_NAME_TOKEN.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), () => agentName || "Your assistant");
|
|
688
688
|
}
|
|
689
|
+
function isRecord(value) {
|
|
690
|
+
return typeof value === "object" && value !== null;
|
|
691
|
+
}
|
|
692
|
+
function isCoreDrainingErrorResponse(value) {
|
|
693
|
+
if (!isRecord(value) || !isRecord(value.error)) return false;
|
|
694
|
+
return value.error.code === CORE_DRAINING_CODE && typeof value.error.message === "string" && value.error.retryable === true;
|
|
695
|
+
}
|
|
696
|
+
function coreDrainingRetryDelayMs(retryAfter, nowMs = Date.now()) {
|
|
697
|
+
if (retryAfter === null) return CORE_DRAINING_DEFAULT_RETRY_MS;
|
|
698
|
+
const seconds = /^\d+$/.test(retryAfter.trim()) ? Number(retryAfter) : Number.NaN;
|
|
699
|
+
const delayMs = Number.isFinite(seconds) ? seconds * 1e3 : Date.parse(retryAfter) - nowMs;
|
|
700
|
+
if (!Number.isFinite(delayMs)) return CORE_DRAINING_DEFAULT_RETRY_MS;
|
|
701
|
+
return Math.min(Math.max(0, delayMs), CORE_DRAINING_MAX_RETRY_MS);
|
|
702
|
+
}
|
|
703
|
+
async function readCoreDrainingRetryDelayMs(response) {
|
|
704
|
+
if (response.status !== 503) return null;
|
|
705
|
+
try {
|
|
706
|
+
const payload = await response.clone().json();
|
|
707
|
+
if (!isCoreDrainingErrorResponse(payload)) return null;
|
|
708
|
+
} catch {
|
|
709
|
+
return null;
|
|
710
|
+
}
|
|
711
|
+
return coreDrainingRetryDelayMs(response.headers.get("Retry-After"));
|
|
712
|
+
}
|
|
713
|
+
function waitForCoreDrain(delayMs, signal) {
|
|
714
|
+
return new Promise((resolve7, reject) => {
|
|
715
|
+
if (signal?.aborted) {
|
|
716
|
+
reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
const timer = setTimeout(() => {
|
|
720
|
+
signal?.removeEventListener("abort", onAbort);
|
|
721
|
+
resolve7();
|
|
722
|
+
}, delayMs);
|
|
723
|
+
function onAbort() {
|
|
724
|
+
clearTimeout(timer);
|
|
725
|
+
reject(signal?.reason ?? new DOMException("Aborted", "AbortError"));
|
|
726
|
+
}
|
|
727
|
+
__name(onAbort, "onAbort");
|
|
728
|
+
__name2(onAbort, "onAbort");
|
|
729
|
+
signal?.addEventListener("abort", onAbort, {
|
|
730
|
+
once: true
|
|
731
|
+
});
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
async function fetchWithCoreDrainRetry(run, options = {}) {
|
|
735
|
+
const first = await run();
|
|
736
|
+
const delayMs = await readCoreDrainingRetryDelayMs(first);
|
|
737
|
+
if (delayMs === null) return first;
|
|
738
|
+
options.onRetry?.({
|
|
739
|
+
attempt: 1,
|
|
740
|
+
maxAttempts: 2,
|
|
741
|
+
delayMs
|
|
742
|
+
});
|
|
743
|
+
await first.body?.cancel();
|
|
744
|
+
await waitForCoreDrain(delayMs, options.signal);
|
|
745
|
+
return run();
|
|
746
|
+
}
|
|
689
747
|
function resolveLuaJobTimeoutSeconds(timeout) {
|
|
690
748
|
const resolved = timeout ?? LUA_JOB_DEFAULT_TIMEOUT_SECONDS;
|
|
691
749
|
if (!Number.isInteger(resolved)) {
|
|
@@ -794,7 +852,7 @@ function isKnownProfile(profiles, profileId) {
|
|
|
794
852
|
function hasCapability(profiles, profileId, required) {
|
|
795
853
|
return capabilitiesFor(profiles, profileId).includes(required);
|
|
796
854
|
}
|
|
797
|
-
var __defProp2, __name2, REVIEWABLE_ACTION_EXECUTE_TOOL_ALLOWLIST, REVIEWABLE_MCP_SEND_TOOL_SUFFIX, MCP_TOOL_READ_VERB_RE, MCP_DRAFT_CREATE_VERBS, NON_INTERACTIVE_CHANNELS, RICH_PARTS_MESSAGE_ID_PREFIX, SCREENSHOT_MESSAGE_ID_PREFIX, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, AGENT_LOG_SOURCES, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, TEMPLATE_TRIGGER_URL_ENV_PREFIX, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, TYPED_API_KEY, IdSchema, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema;
|
|
855
|
+
var __defProp2, __name2, REVIEWABLE_ACTION_EXECUTE_TOOL_ALLOWLIST, REVIEWABLE_MCP_SEND_TOOL_SUFFIX, MCP_TOOL_READ_VERB_RE, MCP_DRAFT_CREATE_VERBS, NON_INTERACTIVE_CHANNELS, RICH_PARTS_MESSAGE_ID_PREFIX, SCREENSHOT_MESSAGE_ID_PREFIX, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, AGENT_LOG_SOURCES, CORE_DRAINING_CODE, CORE_DRAINING_DEFAULT_RETRY_MS, CORE_DRAINING_MAX_RETRY_MS, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, TEMPLATE_TRIGGER_URL_ENV_PREFIX, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, TYPED_API_KEY, IdSchema, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema;
|
|
798
856
|
var init_dist = __esm({
|
|
799
857
|
"../shared-types/dist/index.mjs"() {
|
|
800
858
|
"use strict";
|
|
@@ -1216,6 +1274,21 @@ This text is who you are for this person. As you learn them, their name, their w
|
|
|
1216
1274
|
"device-trigger",
|
|
1217
1275
|
"model-resolver"
|
|
1218
1276
|
];
|
|
1277
|
+
CORE_DRAINING_CODE = "CORE_DRAINING";
|
|
1278
|
+
CORE_DRAINING_DEFAULT_RETRY_MS = 1e3;
|
|
1279
|
+
CORE_DRAINING_MAX_RETRY_MS = 5e3;
|
|
1280
|
+
__name(isRecord, "isRecord");
|
|
1281
|
+
__name2(isRecord, "isRecord");
|
|
1282
|
+
__name(isCoreDrainingErrorResponse, "isCoreDrainingErrorResponse");
|
|
1283
|
+
__name2(isCoreDrainingErrorResponse, "isCoreDrainingErrorResponse");
|
|
1284
|
+
__name(coreDrainingRetryDelayMs, "coreDrainingRetryDelayMs");
|
|
1285
|
+
__name2(coreDrainingRetryDelayMs, "coreDrainingRetryDelayMs");
|
|
1286
|
+
__name(readCoreDrainingRetryDelayMs, "readCoreDrainingRetryDelayMs");
|
|
1287
|
+
__name2(readCoreDrainingRetryDelayMs, "readCoreDrainingRetryDelayMs");
|
|
1288
|
+
__name(waitForCoreDrain, "waitForCoreDrain");
|
|
1289
|
+
__name2(waitForCoreDrain, "waitForCoreDrain");
|
|
1290
|
+
__name(fetchWithCoreDrainRetry, "fetchWithCoreDrainRetry");
|
|
1291
|
+
__name2(fetchWithCoreDrainRetry, "fetchWithCoreDrainRetry");
|
|
1219
1292
|
VoiceNameSchema = z.string().regex(/^[a-zA-Z0-9_-]+$/, "Voice name must contain only alphanumeric characters, underscores, or hyphens").min(1).max(64);
|
|
1220
1293
|
PluginProviderSchema = z.enum([
|
|
1221
1294
|
"deepgram",
|
|
@@ -1809,20 +1882,40 @@ var init_lua_fetch = __esm({
|
|
|
1809
1882
|
});
|
|
1810
1883
|
|
|
1811
1884
|
// src/services/firebase-session.ts
|
|
1885
|
+
import { z as z4 } from "zod";
|
|
1812
1886
|
function requireFirebaseWebApiKey() {
|
|
1813
1887
|
if (!FIREBASE_WEB_API_KEY) {
|
|
1814
1888
|
throw new Error("Firebase sign-in is not configured for this CLI build.");
|
|
1815
1889
|
}
|
|
1816
1890
|
return FIREBASE_WEB_API_KEY;
|
|
1817
1891
|
}
|
|
1892
|
+
function uidFromFirebaseIdToken(idToken) {
|
|
1893
|
+
const segments = idToken.split(".");
|
|
1894
|
+
if (segments.length !== 3 || !segments[1]) throw new Error(INVALID_FIREBASE_SESSION);
|
|
1895
|
+
let payload;
|
|
1896
|
+
try {
|
|
1897
|
+
payload = JSON.parse(Buffer.from(segments[1], "base64url").toString("utf8"));
|
|
1898
|
+
} catch {
|
|
1899
|
+
throw new Error(INVALID_FIREBASE_SESSION);
|
|
1900
|
+
}
|
|
1901
|
+
const parsed = firebaseIdTokenPayloadSchema.safeParse(payload);
|
|
1902
|
+
if (parsed.success) return parsed.data.sub;
|
|
1903
|
+
throw new Error(INVALID_FIREBASE_SESSION);
|
|
1904
|
+
}
|
|
1818
1905
|
function parseFirebaseSession(json, now = Date.now()) {
|
|
1819
|
-
const
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1906
|
+
const customTokenResponse = customTokenResponseSchema.safeParse(json);
|
|
1907
|
+
if (customTokenResponse.success) {
|
|
1908
|
+
const { idToken: idToken2, refreshToken: refreshToken2, expiresIn: expiresIn2, localId } = customTokenResponse.data;
|
|
1909
|
+
return {
|
|
1910
|
+
idToken: idToken2,
|
|
1911
|
+
refreshToken: refreshToken2,
|
|
1912
|
+
expiresAt: now + expiresIn2 * 1e3,
|
|
1913
|
+
uid: localId ?? uidFromFirebaseIdToken(idToken2)
|
|
1914
|
+
};
|
|
1825
1915
|
}
|
|
1916
|
+
const refreshResponse = refreshResponseSchema.safeParse(json);
|
|
1917
|
+
if (!refreshResponse.success) throw new Error(INVALID_FIREBASE_SESSION);
|
|
1918
|
+
const { id_token: idToken, refresh_token: refreshToken, expires_in: expiresIn, user_id: uid } = refreshResponse.data;
|
|
1826
1919
|
return {
|
|
1827
1920
|
idToken,
|
|
1828
1921
|
refreshToken,
|
|
@@ -1896,7 +1989,7 @@ async function refreshFirebaseSession(session) {
|
|
|
1896
1989
|
if (refreshed.uid !== session.uid) throw new Error("Firebase session refresh returned a different identity.");
|
|
1897
1990
|
return refreshed;
|
|
1898
1991
|
}
|
|
1899
|
-
var FIREBASE_CUSTOM_TOKEN_URL, FIREBASE_REFRESH_URL, FIREBASE_REQUEST_TIMEOUT_MS;
|
|
1992
|
+
var FIREBASE_CUSTOM_TOKEN_URL, FIREBASE_REFRESH_URL, FIREBASE_REQUEST_TIMEOUT_MS, INVALID_FIREBASE_SESSION, customTokenResponseSchema, refreshResponseSchema, firebaseIdTokenPayloadSchema;
|
|
1900
1993
|
var init_firebase_session = __esm({
|
|
1901
1994
|
"src/services/firebase-session.ts"() {
|
|
1902
1995
|
"use strict";
|
|
@@ -1904,7 +1997,24 @@ var init_firebase_session = __esm({
|
|
|
1904
1997
|
FIREBASE_CUSTOM_TOKEN_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken";
|
|
1905
1998
|
FIREBASE_REFRESH_URL = "https://securetoken.googleapis.com/v1/token";
|
|
1906
1999
|
FIREBASE_REQUEST_TIMEOUT_MS = 15e3;
|
|
2000
|
+
INVALID_FIREBASE_SESSION = "Sign-in failed because Firebase returned an invalid session.";
|
|
2001
|
+
customTokenResponseSchema = z4.object({
|
|
2002
|
+
idToken: z4.string().min(1),
|
|
2003
|
+
refreshToken: z4.string().min(1),
|
|
2004
|
+
expiresIn: z4.coerce.number().positive().finite(),
|
|
2005
|
+
localId: z4.string().min(1).optional()
|
|
2006
|
+
});
|
|
2007
|
+
refreshResponseSchema = z4.object({
|
|
2008
|
+
id_token: z4.string().min(1),
|
|
2009
|
+
refresh_token: z4.string().min(1),
|
|
2010
|
+
expires_in: z4.coerce.number().positive().finite(),
|
|
2011
|
+
user_id: z4.string().min(1)
|
|
2012
|
+
});
|
|
2013
|
+
firebaseIdTokenPayloadSchema = z4.object({
|
|
2014
|
+
sub: z4.string().min(1)
|
|
2015
|
+
});
|
|
1907
2016
|
__name(requireFirebaseWebApiKey, "requireFirebaseWebApiKey");
|
|
2017
|
+
__name(uidFromFirebaseIdToken, "uidFromFirebaseIdToken");
|
|
1908
2018
|
__name(parseFirebaseSession, "parseFirebaseSession");
|
|
1909
2019
|
__name(parseFirebaseError, "parseFirebaseError");
|
|
1910
2020
|
__name(fetchFirebase, "fetchFirebase");
|
|
@@ -1917,7 +2027,7 @@ var init_firebase_session = __esm({
|
|
|
1917
2027
|
import { createHash, randomUUID } from "crypto";
|
|
1918
2028
|
import { mkdir, open, readFile, rename, unlink } from "fs/promises";
|
|
1919
2029
|
import { join as join3 } from "path";
|
|
1920
|
-
import { z as
|
|
2030
|
+
import { z as z5 } from "zod";
|
|
1921
2031
|
function environmentKey(environment) {
|
|
1922
2032
|
return createHash("sha256").update(`${environment.apiUrl}
|
|
1923
2033
|
${environment.authUrl}
|
|
@@ -1931,15 +2041,15 @@ var init_firebase_session_store = __esm({
|
|
|
1931
2041
|
"src/services/firebase-session-store.ts"() {
|
|
1932
2042
|
"use strict";
|
|
1933
2043
|
init_constants();
|
|
1934
|
-
storedFirebaseSessionSchema =
|
|
1935
|
-
version:
|
|
1936
|
-
kind:
|
|
1937
|
-
generation:
|
|
1938
|
-
refreshToken:
|
|
1939
|
-
firebaseUid:
|
|
1940
|
-
apiUrl:
|
|
1941
|
-
authUrl:
|
|
1942
|
-
firebaseWebApiKey:
|
|
2044
|
+
storedFirebaseSessionSchema = z5.object({
|
|
2045
|
+
version: z5.literal(1),
|
|
2046
|
+
kind: z5.literal("firebase-session"),
|
|
2047
|
+
generation: z5.string().min(1),
|
|
2048
|
+
refreshToken: z5.string().min(1),
|
|
2049
|
+
firebaseUid: z5.string().min(1),
|
|
2050
|
+
apiUrl: z5.string().url(),
|
|
2051
|
+
authUrl: z5.string().url(),
|
|
2052
|
+
firebaseWebApiKey: z5.string().min(1)
|
|
1943
2053
|
});
|
|
1944
2054
|
currentFirebaseSessionEnvironment = /* @__PURE__ */ __name(() => ({
|
|
1945
2055
|
apiUrl: BASE_URLS.API,
|
|
@@ -2329,12 +2439,25 @@ import { randomUUID as randomUUID3 } from "crypto";
|
|
|
2329
2439
|
function parseRetryAfter(raw) {
|
|
2330
2440
|
if (!raw) return void 0;
|
|
2331
2441
|
const seconds = Number.parseInt(raw, 10);
|
|
2332
|
-
return Number.isFinite(seconds) && seconds
|
|
2442
|
+
return Number.isFinite(seconds) && seconds >= 0 ? seconds : void 0;
|
|
2443
|
+
}
|
|
2444
|
+
function isCoreDrainApiError(error) {
|
|
2445
|
+
if (!error || error.statusCode !== 503) return false;
|
|
2446
|
+
return isCoreDrainingErrorResponse({
|
|
2447
|
+
error: error.error
|
|
2448
|
+
});
|
|
2449
|
+
}
|
|
2450
|
+
function coreDrainApiRetryDelayMs(error) {
|
|
2451
|
+
const retryAfterSeconds = error?.retryAfterSeconds;
|
|
2452
|
+
if (retryAfterSeconds === void 0) return CORE_DRAINING_DEFAULT_RETRY_MS;
|
|
2453
|
+
const delayMs = retryAfterSeconds * 1e3;
|
|
2454
|
+
return Math.min(Math.max(0, delayMs), CORE_DRAINING_MAX_RETRY_MS);
|
|
2333
2455
|
}
|
|
2334
2456
|
var HttpClient;
|
|
2335
2457
|
var init_http_client = __esm({
|
|
2336
2458
|
"src/api/http.client.ts"() {
|
|
2337
2459
|
"use strict";
|
|
2460
|
+
init_dist();
|
|
2338
2461
|
init_auth_error();
|
|
2339
2462
|
init_lua_fetch();
|
|
2340
2463
|
init_request_credential();
|
|
@@ -2553,6 +2676,12 @@ Check that your Lua login has access to this agent or organization.`);
|
|
|
2553
2676
|
headers
|
|
2554
2677
|
}, 0);
|
|
2555
2678
|
}
|
|
2679
|
+
async httpPostCoreDrainRetry(url, data, headers) {
|
|
2680
|
+
const first = await this.httpPostOnce(url, data, headers);
|
|
2681
|
+
if (!isCoreDrainApiError(first.error)) return first;
|
|
2682
|
+
await new Promise((resolve7) => setTimeout(resolve7, coreDrainApiRetryDelayMs(first.error)));
|
|
2683
|
+
return this.httpPostOnce(url, data, headers);
|
|
2684
|
+
}
|
|
2556
2685
|
/**
|
|
2557
2686
|
* Performs an HTTP PUT request
|
|
2558
2687
|
* @param url - The relative URL path to request (will be appended to baseUrl)
|
|
@@ -2598,6 +2727,8 @@ Check that your Lua login has access to this agent or organization.`);
|
|
|
2598
2727
|
}
|
|
2599
2728
|
};
|
|
2600
2729
|
__name(parseRetryAfter, "parseRetryAfter");
|
|
2730
|
+
__name(isCoreDrainApiError, "isCoreDrainApiError");
|
|
2731
|
+
__name(coreDrainApiRetryDelayMs, "coreDrainApiRetryDelayMs");
|
|
2601
2732
|
}
|
|
2602
2733
|
});
|
|
2603
2734
|
|
|
@@ -5434,7 +5565,7 @@ async function ensureSchemaConverterReady() {
|
|
|
5434
5565
|
await loadVendor();
|
|
5435
5566
|
}
|
|
5436
5567
|
async function zodToJsonSchema(schemaNode) {
|
|
5437
|
-
const { z:
|
|
5568
|
+
const { z: z6, zodToJsonSchema: convertSchema } = await loadVendor();
|
|
5438
5569
|
try {
|
|
5439
5570
|
const sourceFile = schemaNode.getSourceFile();
|
|
5440
5571
|
const project = sourceFile.getProject();
|
|
@@ -5447,7 +5578,7 @@ async function zodToJsonSchema(schemaNode) {
|
|
|
5447
5578
|
environment: {
|
|
5448
5579
|
preset: "NODE",
|
|
5449
5580
|
extra: {
|
|
5450
|
-
z:
|
|
5581
|
+
z: z6
|
|
5451
5582
|
}
|
|
5452
5583
|
},
|
|
5453
5584
|
policy: {
|
|
@@ -5495,10 +5626,10 @@ function cleanJsonSchema(schema) {
|
|
|
5495
5626
|
return cleanSchema;
|
|
5496
5627
|
}
|
|
5497
5628
|
async function zodStringToJsonSchema(zodSchemaCode) {
|
|
5498
|
-
const { z:
|
|
5629
|
+
const { z: z6, zodToJsonSchema: convertSchema } = await loadVendor();
|
|
5499
5630
|
try {
|
|
5500
5631
|
const evalFunction = new Function("z", `return ${zodSchemaCode}`);
|
|
5501
|
-
const zodSchema = evalFunction(
|
|
5632
|
+
const zodSchema = evalFunction(z6);
|
|
5502
5633
|
const jsonSchema = convertSchema(zodSchema, {
|
|
5503
5634
|
target: "jsonSchema7"
|
|
5504
5635
|
});
|
|
@@ -13988,7 +14119,7 @@ var init_agents_api_service = __esm({
|
|
|
13988
14119
|
});
|
|
13989
14120
|
if (body.identifier) query.set("identifier", body.identifier);
|
|
13990
14121
|
const chatBody = this.toChatGenerateBody(body);
|
|
13991
|
-
return this.
|
|
14122
|
+
return this.httpPostCoreDrainRetry(`/chat/generate/${targetAgentId}?${query.toString()}`, chatBody, {});
|
|
13992
14123
|
}
|
|
13993
14124
|
/**
|
|
13994
14125
|
* Sandbox overload: mirrors the `AI.generate` pattern where the simplified
|
|
@@ -15699,6 +15830,7 @@ init_auth();
|
|
|
15699
15830
|
init_request_credential();
|
|
15700
15831
|
var MAX_TYPED_CREDENTIAL_ORGS = 100;
|
|
15701
15832
|
var MAX_TYPED_CREDENTIAL_RESOURCE_PAGES = 500;
|
|
15833
|
+
var ORGANIZATION_REQUEST_CONCURRENCY = 10;
|
|
15702
15834
|
function projectionError(message, reason = "invalid_credentials") {
|
|
15703
15835
|
return new AuthenticationError(message, reason);
|
|
15704
15836
|
}
|
|
@@ -15761,21 +15893,22 @@ function typedAgent(resource) {
|
|
|
15761
15893
|
__name(typedAgent, "typedAgent");
|
|
15762
15894
|
async function listTypedCredentialOrganizations(credential, authorization) {
|
|
15763
15895
|
const apiKey = await bearerFor(credential);
|
|
15764
|
-
|
|
15896
|
+
const firstPartySession = isRequestCredential(credential) && credential.descriptor.kind === "first-party-session";
|
|
15897
|
+
if (!firstPartySession && authorization.orgs.length > MAX_TYPED_CREDENTIAL_ORGS) {
|
|
15765
15898
|
throw new Error(`Lua CLI can request at most ${MAX_TYPED_CREDENTIAL_ORGS} organizations at once.`);
|
|
15766
15899
|
}
|
|
15767
15900
|
const api = new CliCredentialsApi(BASE_URLS.API);
|
|
15768
15901
|
const organizations = [];
|
|
15769
15902
|
let resourcePageCount = 0;
|
|
15770
|
-
|
|
15903
|
+
const loadOrganization = /* @__PURE__ */ __name(async (org) => {
|
|
15771
15904
|
const agents = /* @__PURE__ */ new Map();
|
|
15772
15905
|
const cursors = /* @__PURE__ */ new Set();
|
|
15773
15906
|
let cursor;
|
|
15774
15907
|
do {
|
|
15775
|
-
|
|
15908
|
+
resourcePageCount += 1;
|
|
15909
|
+
if (resourcePageCount > MAX_TYPED_CREDENTIAL_RESOURCE_PAGES) {
|
|
15776
15910
|
throw new Error(`Lua CLI can request at most ${MAX_TYPED_CREDENTIAL_RESOURCE_PAGES} resource pages at once.`);
|
|
15777
15911
|
}
|
|
15778
|
-
resourcePageCount += 1;
|
|
15779
15912
|
const result = await api.getAuthorizationResourcePage(apiKey, {
|
|
15780
15913
|
orgId: org.orgId,
|
|
15781
15914
|
kind: "agent",
|
|
@@ -15795,7 +15928,9 @@ async function listTypedCredentialOrganizations(credential, authorization) {
|
|
|
15795
15928
|
throw new Error("Lua returned an authorization resource page for the wrong organization.");
|
|
15796
15929
|
}
|
|
15797
15930
|
for (const resource of result.data.resources) {
|
|
15798
|
-
|
|
15931
|
+
const belongsToOrganization = resource.orgId === org.orgId;
|
|
15932
|
+
const isOrgLessPlatformAgent = resource.orgId === null && resource.visibility === "platform" && resource.kind === "agent" && resource.discoveredVia === "platform-allowlist";
|
|
15933
|
+
if (!belongsToOrganization && !isOrgLessPlatformAgent) {
|
|
15799
15934
|
throw new Error("Lua returned an authorization resource for the wrong organization.");
|
|
15800
15935
|
}
|
|
15801
15936
|
if (!agents.has(resource.resourceId)) agents.set(resource.resourceId, typedAgent(resource));
|
|
@@ -15807,7 +15942,7 @@ async function listTypedCredentialOrganizations(credential, authorization) {
|
|
|
15807
15942
|
if (nextCursor) cursors.add(nextCursor);
|
|
15808
15943
|
cursor = nextCursor;
|
|
15809
15944
|
} while (cursor);
|
|
15810
|
-
|
|
15945
|
+
return {
|
|
15811
15946
|
orgId: org.orgId,
|
|
15812
15947
|
...org.name ? {
|
|
15813
15948
|
name: org.name
|
|
@@ -15817,7 +15952,11 @@ async function listTypedCredentialOrganizations(credential, authorization) {
|
|
|
15817
15952
|
agents: [
|
|
15818
15953
|
...agents.values()
|
|
15819
15954
|
]
|
|
15820
|
-
}
|
|
15955
|
+
};
|
|
15956
|
+
}, "loadOrganization");
|
|
15957
|
+
for (let offset = 0; offset < authorization.orgs.length; offset += ORGANIZATION_REQUEST_CONCURRENCY) {
|
|
15958
|
+
const batch = authorization.orgs.slice(offset, offset + ORGANIZATION_REQUEST_CONCURRENCY);
|
|
15959
|
+
organizations.push(...await Promise.all(batch.map(loadOrganization)));
|
|
15821
15960
|
}
|
|
15822
15961
|
return organizations;
|
|
15823
15962
|
}
|
|
@@ -27161,6 +27300,7 @@ import inquirer9 from "inquirer";
|
|
|
27161
27300
|
|
|
27162
27301
|
// src/api/chat.api.service.ts
|
|
27163
27302
|
init_http_client();
|
|
27303
|
+
init_dist();
|
|
27164
27304
|
init_lua_fetch();
|
|
27165
27305
|
init_request_credential();
|
|
27166
27306
|
var ChatApi = class extends HttpClient {
|
|
@@ -27185,7 +27325,7 @@ var ChatApi = class extends HttpClient {
|
|
|
27185
27325
|
* @throws Error if the agent is not found or the chat request fails
|
|
27186
27326
|
*/
|
|
27187
27327
|
async sendMessage(agentId, chatData) {
|
|
27188
|
-
return this.
|
|
27328
|
+
return this.httpPostCoreDrainRetry(`/chat/generate/${agentId}?channel=dev`, chatData, {});
|
|
27189
27329
|
}
|
|
27190
27330
|
/**
|
|
27191
27331
|
* Streams a message to an agent and receives chunked responses
|
|
@@ -27198,16 +27338,22 @@ var ChatApi = class extends HttpClient {
|
|
|
27198
27338
|
async sendMessageStream(agentId, chatData, onChunk, onPostprocessComplete, onPreprocessorBlocked, onBatchAbort, onBatchHandled) {
|
|
27199
27339
|
const controller = new AbortController();
|
|
27200
27340
|
const timeoutId = setTimeout(() => controller.abort(), 5 * 60 * 1e3);
|
|
27201
|
-
|
|
27202
|
-
|
|
27203
|
-
|
|
27204
|
-
|
|
27205
|
-
|
|
27206
|
-
|
|
27207
|
-
|
|
27208
|
-
|
|
27209
|
-
|
|
27210
|
-
|
|
27341
|
+
let response;
|
|
27342
|
+
try {
|
|
27343
|
+
response = await fetchWithCoreDrainRetry(async () => luaFetch(`${this.baseUrl}/chat/stream/${agentId}?channel=dev`, {
|
|
27344
|
+
method: "POST",
|
|
27345
|
+
signal: controller.signal,
|
|
27346
|
+
headers: {
|
|
27347
|
+
Authorization: `Bearer ${await bearerFor(this.credential)}`,
|
|
27348
|
+
"Content-Type": "application/json"
|
|
27349
|
+
},
|
|
27350
|
+
body: JSON.stringify(chatData)
|
|
27351
|
+
}), {
|
|
27352
|
+
signal: controller.signal
|
|
27353
|
+
});
|
|
27354
|
+
} finally {
|
|
27355
|
+
clearTimeout(timeoutId);
|
|
27356
|
+
}
|
|
27211
27357
|
if (!response.ok) {
|
|
27212
27358
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
27213
27359
|
}
|