@letta-ai/letta-agent-sdk 0.8.80 → 0.8.82
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/client-entry.js +43 -10
- package/dist/client-entry.js.map +5 -5
- package/dist/cloud-session.d.ts +7 -0
- package/dist/cloud-session.d.ts.map +1 -1
- package/dist/cloud-status-transport.d.ts +3 -0
- package/dist/cloud-status-transport.d.ts.map +1 -1
- package/dist/index.js +44 -11
- package/dist/index.js.map +6 -6
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket.d.ts +1 -1
- package/package.json +3 -3
- package/src/cloud-session.ts +53 -4
- package/src/cloud-status-transport.ts +12 -3
- package/src/types.ts +3 -3
- package/src/websocket.ts +1 -1
package/dist/cloud-session.d.ts
CHANGED
|
@@ -52,6 +52,13 @@ export declare class CloudEnvironmentSession extends RemoteClientSessionCore {
|
|
|
52
52
|
protected initializeRuntimeController(): Promise<RuntimeSessionInit>;
|
|
53
53
|
private openCloudTransport;
|
|
54
54
|
private createCloudTransportClient;
|
|
55
|
+
/**
|
|
56
|
+
* Mint one single-use upgrade ticket per status channel, so clients that
|
|
57
|
+
* cannot send WebSocket headers never put the API key in a URL.
|
|
58
|
+
* Returns null only for deprecated query auth against a server that predates
|
|
59
|
+
* ticket issuance, which then falls back to `?token=`.
|
|
60
|
+
*/
|
|
61
|
+
private issueStatusWebSocketTickets;
|
|
55
62
|
private connectCloudTransport;
|
|
56
63
|
private installTransportHandlers;
|
|
57
64
|
private cleanupTransportHandlers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-session.d.ts","sourceRoot":"","sources":["../src/cloud-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAQhD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAyB5B,OAAO,EACL,uBAAuB,EAGvB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAEV,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAI5B,MAAM,YAAY,CAAC;AAKpB,OAAO,EAIL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAiE5B,KAAK,uBAAuB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAIF;;;;;GAKG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IAItD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,EAAG,yBAAyB,CAAU;gBAGxC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM;CAOlC;AAED,KAAK,gBAAgB,GAAG,OAAO,CAC7B,kBAAkB,EAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAC/C,CAAC;AAiCF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"cloud-session.d.ts","sourceRoot":"","sources":["../src/cloud-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,12 @@ type CloudStatusTransportOptions = {
|
|
|
5
5
|
url: string;
|
|
6
6
|
WebSocket: LettaCodeSocketConstructor;
|
|
7
7
|
headers?: Record<string, string>;
|
|
8
|
+
/** Extra per-channel query params, such as single-use upgrade tickets. */
|
|
9
|
+
channelQuery?: Partial<Record<SocketChannel, Record<string, string>>>;
|
|
8
10
|
pingIntervalMs: number;
|
|
9
11
|
runtime: RuntimeScope;
|
|
10
12
|
};
|
|
13
|
+
type SocketChannel = "control" | "stream";
|
|
11
14
|
type Listener = (event: unknown) => void;
|
|
12
15
|
/**
|
|
13
16
|
* Cloud's status relay still exposes separate control and stream sockets.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-status-transport.d.ts","sourceRoot":"","sources":["../src/cloud-status-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EAEpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,YAAY,CAAC;AASpB,KAAK,2BAA2B,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,0BAA0B,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-status-transport.d.ts","sourceRoot":"","sources":["../src/cloud-status-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EAEpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,YAAY,CAAC;AASpB,KAAK,2BAA2B,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,0BAA0B,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,KAAK,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC1C,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAmDzC;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,mBAAmB;IAclD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAbpC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE3C,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,YAAY,CAAS;gBAEA,OAAO,EAAE,2BAA2B;IAiBjE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,KAAK,IAAI,IAAI;IAQb,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IASxD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI3D,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,IAAI;CAKb;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAM5B"}
|
package/dist/index.js
CHANGED
|
@@ -15738,9 +15738,12 @@ function messageEventData(event) {
|
|
|
15738
15738
|
}
|
|
15739
15739
|
return null;
|
|
15740
15740
|
}
|
|
15741
|
-
function channelUrl(url, channel) {
|
|
15741
|
+
function channelUrl(url, channel, query = {}) {
|
|
15742
15742
|
const parsed = new URL(url);
|
|
15743
15743
|
parsed.searchParams.set("channel", channel);
|
|
15744
|
+
for (const [key, value] of Object.entries(query)) {
|
|
15745
|
+
parsed.searchParams.set(key, value);
|
|
15746
|
+
}
|
|
15744
15747
|
return parsed.toString();
|
|
15745
15748
|
}
|
|
15746
15749
|
|
|
@@ -15760,8 +15763,8 @@ class CloudStatusTransport {
|
|
|
15760
15763
|
constructor(options) {
|
|
15761
15764
|
this.options = options;
|
|
15762
15765
|
const socketOptions = options.headers ? { headers: options.headers } : undefined;
|
|
15763
|
-
this.controlSocket = new options.WebSocket(channelUrl(options.url, "control"), socketOptions);
|
|
15764
|
-
this.streamSocket = new options.WebSocket(channelUrl(options.url, "stream"), socketOptions);
|
|
15766
|
+
this.controlSocket = new options.WebSocket(channelUrl(options.url, "control", options.channelQuery?.control), socketOptions);
|
|
15767
|
+
this.streamSocket = new options.WebSocket(channelUrl(options.url, "stream", options.channelQuery?.stream), socketOptions);
|
|
15765
15768
|
this.bindSocket("control", this.controlSocket);
|
|
15766
15769
|
this.bindSocket("stream", this.streamSocket);
|
|
15767
15770
|
this.startPing();
|
|
@@ -16092,8 +16095,8 @@ function validateCloudClientOptions(options) {
|
|
|
16092
16095
|
throw new Error("Letta Cloud clients cannot specify both registerComputer and sandbox options.");
|
|
16093
16096
|
}
|
|
16094
16097
|
}
|
|
16095
|
-
if (options.webSocketAuth !== undefined && options.webSocketAuth !== "header" && options.webSocketAuth !== "query") {
|
|
16096
|
-
throw new Error("Invalid webSocketAuth. Valid values: header, query.");
|
|
16098
|
+
if (options.webSocketAuth !== undefined && options.webSocketAuth !== "header" && options.webSocketAuth !== "ticket" && options.webSocketAuth !== "query") {
|
|
16099
|
+
throw new Error("Invalid webSocketAuth. Valid values: header, ticket, query.");
|
|
16097
16100
|
}
|
|
16098
16101
|
}
|
|
16099
16102
|
function environmentToRemoteTarget(environment) {
|
|
@@ -16280,33 +16283,63 @@ class CloudEnvironmentSession extends RemoteClientSessionCore {
|
|
|
16280
16283
|
throw error;
|
|
16281
16284
|
}
|
|
16282
16285
|
}
|
|
16283
|
-
createCloudTransportClient(runtime, connectionId) {
|
|
16286
|
+
createCloudTransportClient(runtime, connectionId, channelTickets) {
|
|
16284
16287
|
const apiKey = getCloudApiKey(this.cloudOptions);
|
|
16288
|
+
const authMode = this.cloudOptions.webSocketAuth ?? "header";
|
|
16285
16289
|
const url = buildCloudStatusWebSocketUrl({
|
|
16286
16290
|
apiBaseUrl: this.cloudOptions.apiBaseUrl,
|
|
16287
16291
|
connectionId,
|
|
16288
16292
|
agentId: runtime.agent_id,
|
|
16289
16293
|
conversationId: runtime.conversation_id,
|
|
16290
16294
|
apiKey,
|
|
16291
|
-
authMode:
|
|
16295
|
+
authMode: authMode === "query" && !channelTickets ? "query" : "header"
|
|
16292
16296
|
});
|
|
16293
16297
|
return applyUniqueRequestIds(createAppServerClient({
|
|
16294
16298
|
url,
|
|
16295
16299
|
WebSocket: createCloudStatusTransportConstructor({
|
|
16296
16300
|
url,
|
|
16297
16301
|
WebSocket: getWebSocketConstructor(this.cloudOptions.WebSocket),
|
|
16298
|
-
...
|
|
16302
|
+
...authMode === "header" ? { headers: cloudWebSocketHeaders(this.cloudOptions) } : {},
|
|
16303
|
+
...channelTickets ? { channelQuery: channelTickets } : {},
|
|
16299
16304
|
pingIntervalMs: this.cloudOptions.pingIntervalMs ?? DEFAULT_PING_INTERVAL_MS,
|
|
16300
16305
|
runtime
|
|
16301
16306
|
}),
|
|
16302
16307
|
requestTimeoutMs: this.cloudOptions.requestTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS
|
|
16303
16308
|
}));
|
|
16304
16309
|
}
|
|
16310
|
+
async issueStatusWebSocketTickets(connectionId) {
|
|
16311
|
+
const authMode = this.cloudOptions.webSocketAuth ?? "header";
|
|
16312
|
+
if (authMode !== "ticket" && authMode !== "query")
|
|
16313
|
+
return null;
|
|
16314
|
+
const path2 = `/v1/environments/${encodeURIComponent(connectionId)}/status/ws-ticket`;
|
|
16315
|
+
const issue = async () => {
|
|
16316
|
+
const body = await this.apiClient.post(path2, { body: {} });
|
|
16317
|
+
const ticket = body?.ticket;
|
|
16318
|
+
if (typeof ticket !== "string" || !ticket) {
|
|
16319
|
+
throw new Error("Cloud status WebSocket ticket response did not include a ticket.");
|
|
16320
|
+
}
|
|
16321
|
+
return ticket;
|
|
16322
|
+
};
|
|
16323
|
+
try {
|
|
16324
|
+
const [control, stream] = await Promise.all([issue(), issue()]);
|
|
16325
|
+
return { control: { ticket: control }, stream: { ticket: stream } };
|
|
16326
|
+
} catch (error) {
|
|
16327
|
+
if (authMode === "query" && isNotFound2(error)) {
|
|
16328
|
+
console.warn(JSON.stringify({
|
|
16329
|
+
event: "cloud_status_websocket_query_auth_fallback",
|
|
16330
|
+
connection_id: connectionId
|
|
16331
|
+
}));
|
|
16332
|
+
return null;
|
|
16333
|
+
}
|
|
16334
|
+
throw error;
|
|
16335
|
+
}
|
|
16336
|
+
}
|
|
16305
16337
|
async connectCloudTransport(runtime, initialConnectionId) {
|
|
16306
16338
|
let connectionId = initialConnectionId;
|
|
16307
16339
|
let lastError;
|
|
16308
16340
|
for (let attempt = 0;attempt < INITIAL_CLOUD_TRANSPORT_ATTEMPTS; attempt++) {
|
|
16309
|
-
const
|
|
16341
|
+
const channelTickets = await this.issueStatusWebSocketTickets(connectionId);
|
|
16342
|
+
const client = this.createCloudTransportClient(runtime, connectionId, channelTickets);
|
|
16310
16343
|
this.installTransportHandlers(client);
|
|
16311
16344
|
try {
|
|
16312
16345
|
await client.connect();
|
|
@@ -35535,7 +35568,7 @@ class StreamableHTTPClientTransport {
|
|
|
35535
35568
|
}
|
|
35536
35569
|
var DEFAULT_CLIENT_INFO = {
|
|
35537
35570
|
name: "letta-code",
|
|
35538
|
-
version: "0.34.
|
|
35571
|
+
version: "0.34.52"
|
|
35539
35572
|
};
|
|
35540
35573
|
async function connectMcpServer(config2, options = {}) {
|
|
35541
35574
|
let client = new Client(options.clientInfo ?? DEFAULT_CLIENT_INFO);
|
|
@@ -36563,4 +36596,4 @@ export {
|
|
|
36563
36596
|
CloudManagedSandboxExpiredError
|
|
36564
36597
|
};
|
|
36565
36598
|
|
|
36566
|
-
//# debugId=
|
|
36599
|
+
//# debugId=BB6433083B4BC9C464756E2164756E21
|