@letta-ai/letta-agent-sdk 0.6.0 → 0.6.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/README.md +0 -1
- package/dist/client-base.d.ts +4 -1
- package/dist/client-base.d.ts.map +1 -1
- package/dist/client-entry.js +14 -13
- package/dist/client-entry.js.map +6 -6
- package/dist/cloud-management.d.ts.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -14
- package/dist/index.js.map +7 -7
- package/dist/management-types.d.ts +3 -0
- package/dist/management-types.d.ts.map +1 -1
- package/dist/remote-client-session-core.d.ts +2 -2
- package/dist/remote-client-session-core.d.ts.map +1 -1
- package/dist/tests/advanced-session.d.ts +1 -1
- package/dist/tests/advanced-session.d.ts.map +1 -1
- package/dist/types.d.ts +0 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client-base.ts +7 -4
- package/src/cloud-management.ts +18 -1
- package/src/index.ts +9 -10
- package/src/management-types.ts +3 -0
- package/src/remote-client-session-core.ts +1 -5
- package/src/types.ts +0 -25
- package/src/validation.ts +0 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-management.d.ts","sourceRoot":"","sources":["../src/cloud-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,8DAA8D,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-management.d.ts","sourceRoot":"","sources":["../src/cloud-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,8DAA8D,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAsEpB,kFAAkF;AAClF,qBAAa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,KAAK;IAEpC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAInD,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,UAAU,CAAC;IAIhB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAclE,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,0BAA0B,GAAG,SAAS,GAClD,OAAO,CAAC,eAAe,CAAC;IAmBrB,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAUV,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,iCAAiC,CACrC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAMV,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAcvC,iBAAiB,CACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIzB,oBAAoB,CACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC;IAIvB,kBAAkB,CACtB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAIvB,kBAAkB,CACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAIvB,wBAAwB,CAC5B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,0BAA0B,CAAC;CAOvC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
* ```typescript
|
|
8
|
-
* import { LettaAgentClient, createAgent, createSession, resumeSession
|
|
8
|
+
* import { LettaAgentClient, createAgent, createSession, resumeSession } from '@letta-ai/letta-agent-sdk';
|
|
9
9
|
*
|
|
10
10
|
* const client = new LettaAgentClient({ backend: 'local' });
|
|
11
11
|
* const agentId = await client.createAgent();
|
|
@@ -23,12 +23,10 @@
|
|
|
23
23
|
* // Create new conversation on specific agent
|
|
24
24
|
* const session = createSession(agentId);
|
|
25
25
|
*
|
|
26
|
-
* // One-shot prompt in a new conversation
|
|
27
|
-
* const result = await prompt('Hello', agentId);
|
|
28
26
|
* ```
|
|
29
27
|
*/
|
|
30
28
|
import type { CreateSessionOptions, CreateAgentOptions, LettaCodeSession, SDKResultMessage, SendMessage } from "./types.js";
|
|
31
|
-
export type { CreateSessionOptions, CreateAgentOptions, LettaCodePersonalityId, LettaCodeBackend, LettaCodeEnvironment, LettaCodeLocalClientOptions, LettaCodeLocalAppServerOptions, LettaCodeRemoteClientOptions, LettaCodeCloudClientOptions, LettaCodeCloudSandboxOptions, GitHubRepositoryRef, LettaCodeClientOptions, LettaCodeClientSessionOptions, LettaCodeSession, LettaCodeSocketLike, LettaCodeSocketConstructor, LettaCodeReactNativeSocketConstructor, SDKMessage, SDKInitMessage, SDKAssistantMessage, SDKToolCallMessage, SDKToolResultMessage, SDKReasoningMessage, SDKResultMessage, SDKErrorCode, SDKStreamEventMessage, SDKStreamEventPayload, SDKStreamEventDeltaPayload, SDKStreamEventMessagePayload, SDKUnknownStreamEventPayload, SDKErrorMessage, SDKRetryMessage, SDKQueueItem, SDKQueueUpdateMessage, SDKLoopStatusMessage, SDKProtocolMessage, SDKProtocolCommand, SendCommandOptions,
|
|
29
|
+
export type { CreateSessionOptions, CreateAgentOptions, LettaCodePersonalityId, LettaCodeBackend, LettaCodeEnvironment, LettaCodeLocalClientOptions, LettaCodeLocalAppServerOptions, LettaCodeRemoteClientOptions, LettaCodeCloudClientOptions, LettaCodeCloudSandboxOptions, GitHubRepositoryRef, LettaCodeClientOptions, LettaCodeClientSessionOptions, LettaCodeSession, LettaCodeSocketLike, LettaCodeSocketConstructor, LettaCodeReactNativeSocketConstructor, SDKMessage, SDKInitMessage, SDKAssistantMessage, SDKToolCallMessage, SDKToolResultMessage, SDKReasoningMessage, SDKResultMessage, SDKErrorCode, SDKStreamEventMessage, SDKStreamEventPayload, SDKStreamEventDeltaPayload, SDKStreamEventMessagePayload, SDKUnknownStreamEventPayload, SDKErrorMessage, SDKRetryMessage, SDKQueueItem, SDKQueueUpdateMessage, SDKLoopStatusMessage, SDKProtocolMessage, SDKProtocolCommand, SendCommandOptions, RecoverPendingApprovalsOptions, RecoverPendingApprovalsResult, ChangeDeviceStateOptions, RemoveQueuedMessageResult, GetDeviceStatusOptions, SessionDeviceStatus, SessionPendingControlRequest, SessionPermissionSuggestion, SessionDiffHunkLine, SessionDiffHunk, SessionDiffPreview, SkillSource, DreamingOptions, SessionDreamingOptions, DreamingTrigger, DreamingBehavior, EffectiveDreamingSettings, PermissionMode, ReasoningEffort, CanUseToolCallback, CanUseToolContext, CanUseToolPermissionSuggestion, CanUseToolResponse, CanUseToolResponseAllow, CanUseToolResponseDeny, TextContent, ImageContent, MessageContentItem, SendMessage, ListMessagesOptions, ListMessagesResult, ListModelsResult, LettaCodeModelEntry, UpdateModelOptions, UpdateModelResult, Repository, CreateRepositoryParams, ListRepositoriesParams, ListRepositoriesResult, RepositoryResource, RepositoryFileEntry, ListRepositoryFilesParams, ListRepositoryFilesResult, CreateRepositoryFileParams, RepositoryFile, UpdateRepositoryFileParams, RepositoryFileMutationResult, DeleteRepositoryFileParams, DeleteRepositoryFileResult, RepositoryVersion, ListRepositoryVersionsParams, GetRepositoryVersionParams, BootstrapStateOptions, BootstrapStateResult, AgentTool, AgentToolResult, AgentToolResultContent, AgentToolUpdateCallback, AnyAgentTool, McpServerConfig, McpStdioServerConfig, McpHttpServerConfig, McpSseServerConfig, McpServers, } from "./types.js";
|
|
32
30
|
export type { AgentRepositoriesClient, AgentRepository, AgentRepositoryRecompileTarget, AttachAgentRepositoryOptions, AgentsClient, ConversationsClient, LettaAgent, LettaConversation, LettaConversationMessage, ModelsClient, ListAgentsOptions, UpdateAgentOptions, ListConversationsOptions, CreateConversationOptions, UpdateConversationOptions, ConversationMessagesOptions, ConversationMessagesResult, DetachAgentRepositoryOptions, AgentRepositoryPermissions, } from "./management-types.js";
|
|
33
31
|
export { RepositoriesClient } from "./repositories.js";
|
|
34
32
|
export { LettaAgentClient } from "./client.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9594,7 +9594,7 @@ class RemoteClientSessionCore {
|
|
|
9594
9594
|
throw error;
|
|
9595
9595
|
}
|
|
9596
9596
|
}
|
|
9597
|
-
async
|
|
9597
|
+
async sendAndWaitForResult(message) {
|
|
9598
9598
|
if (this.turns.hasInFlightTurn()) {
|
|
9599
9599
|
throw new Error(`A turn is already in flight for this ${this.label} session. Use send() and stream() to let the listener queue messages.`);
|
|
9600
9600
|
}
|
|
@@ -10670,6 +10670,16 @@ function cloudModelEntry(raw) {
|
|
|
10670
10670
|
function isNotFound(error) {
|
|
10671
10671
|
return error instanceof APIError && error.status === 404;
|
|
10672
10672
|
}
|
|
10673
|
+
function toOrderRelativeCursors(query) {
|
|
10674
|
+
if ((query.order ?? "desc") !== "desc")
|
|
10675
|
+
return query;
|
|
10676
|
+
const { before, after, ...rest } = query;
|
|
10677
|
+
return {
|
|
10678
|
+
...rest,
|
|
10679
|
+
...after != null ? { before: after } : {},
|
|
10680
|
+
...before != null ? { after: before } : {}
|
|
10681
|
+
};
|
|
10682
|
+
}
|
|
10673
10683
|
|
|
10674
10684
|
class CloudManagementTransport {
|
|
10675
10685
|
client;
|
|
@@ -10745,7 +10755,7 @@ class CloudManagementTransport {
|
|
|
10745
10755
|
return this.client.conversations.update(conversationId, body);
|
|
10746
10756
|
}
|
|
10747
10757
|
async listConversationMessages(conversationId, query) {
|
|
10748
|
-
const page = await this.client.conversations.messages.list(conversationId, query);
|
|
10758
|
+
const page = await this.client.conversations.messages.list(conversationId, toOrderRelativeCursors(query));
|
|
10749
10759
|
return { messages: page.items };
|
|
10750
10760
|
}
|
|
10751
10761
|
}
|
|
@@ -11829,14 +11839,6 @@ function getBlockLabels(memory) {
|
|
|
11829
11839
|
return null;
|
|
11830
11840
|
}).filter((label) => label !== null);
|
|
11831
11841
|
}
|
|
11832
|
-
function validateApprovalRecoveryOptions(options) {
|
|
11833
|
-
if (options.maxApprovalRecoveryAttempts !== undefined && (!Number.isInteger(options.maxApprovalRecoveryAttempts) || options.maxApprovalRecoveryAttempts < 0)) {
|
|
11834
|
-
throw new Error("Invalid maxApprovalRecoveryAttempts. Expected a non-negative integer.");
|
|
11835
|
-
}
|
|
11836
|
-
if (options.approvalRecoveryTimeoutMs !== undefined && (!Number.isInteger(options.approvalRecoveryTimeoutMs) || options.approvalRecoveryTimeoutMs <= 0)) {
|
|
11837
|
-
throw new Error("Invalid approvalRecoveryTimeoutMs. Expected a positive integer.");
|
|
11838
|
-
}
|
|
11839
|
-
}
|
|
11840
11842
|
function validateRemovedSessionOptions(options) {
|
|
11841
11843
|
const removedOptions = options;
|
|
11842
11844
|
if (removedOptions.systemPrompt !== undefined) {
|
|
@@ -11949,7 +11951,6 @@ function validateCreateSessionOptions(options) {
|
|
|
11949
11951
|
validateMcpServers(options.mcpServers);
|
|
11950
11952
|
validateReasoningEffort(options.reasoningEffort);
|
|
11951
11953
|
validateDreamingOptions(options.dreaming);
|
|
11952
|
-
validateApprovalRecoveryOptions(options);
|
|
11953
11954
|
validateRemovedSessionOptions(options);
|
|
11954
11955
|
}
|
|
11955
11956
|
function validateCreateAgentOptions(options) {
|
|
@@ -12157,7 +12158,7 @@ class LettaAgentClientBase {
|
|
|
12157
12158
|
async prompt(message, agentId, options = {}) {
|
|
12158
12159
|
const session = this.createSession(agentId, options);
|
|
12159
12160
|
try {
|
|
12160
|
-
return await session.
|
|
12161
|
+
return await session.sendAndWaitForResult(message);
|
|
12161
12162
|
} finally {
|
|
12162
12163
|
session.close();
|
|
12163
12164
|
}
|
|
@@ -29926,7 +29927,7 @@ function resumeSession(id, options = {}) {
|
|
|
29926
29927
|
async function prompt(message, agentId, options = {}) {
|
|
29927
29928
|
const session = createSession(agentId, options);
|
|
29928
29929
|
try {
|
|
29929
|
-
return await session.
|
|
29930
|
+
return await session.sendAndWaitForResult(message);
|
|
29930
29931
|
} finally {
|
|
29931
29932
|
session.close();
|
|
29932
29933
|
}
|
|
@@ -29996,4 +29997,4 @@ export {
|
|
|
29996
29997
|
CloudManagedSandboxExpiredError
|
|
29997
29998
|
};
|
|
29998
29999
|
|
|
29999
|
-
//# debugId=
|
|
30000
|
+
//# debugId=240CAF4E9D69510064756E2164756E21
|