formagent-sdk 0.1.2 → 0.1.3
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 +58 -8
- package/dist/cli/index.js +18 -4
- package/dist/index.js +23 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ A powerful AI Agent framework for building intelligent assistants with streaming
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
10
|
- **Session-Based API**: Multi-turn conversations with state management
|
|
11
|
+
- **Persistent Sessions**: File-based storage for session persistence across restarts
|
|
11
12
|
- **Streaming Support**: Real-time streaming of LLM responses with event-based notifications
|
|
12
13
|
- **Built-in Tools**: File operations, bash execution, web fetch, and task management
|
|
13
14
|
- **Tool System**: Flexible tool registration with Zod schema support
|
|
@@ -227,20 +228,68 @@ for await (const event of session.receive()) {
|
|
|
227
228
|
|
|
228
229
|
## Session Management
|
|
229
230
|
|
|
230
|
-
|
|
231
|
+
### Persistent Sessions
|
|
232
|
+
|
|
233
|
+
Enable session persistence with `FileSessionStorage`:
|
|
231
234
|
|
|
232
235
|
```typescript
|
|
233
|
-
import { createSession,
|
|
236
|
+
import { createSession, FileSessionStorage, builtinTools } from "formagent-sdk"
|
|
237
|
+
|
|
238
|
+
// Create persistent storage
|
|
239
|
+
const storage = new FileSessionStorage("./sessions")
|
|
240
|
+
|
|
241
|
+
// Create session with persistence
|
|
242
|
+
const session = await createSession({
|
|
243
|
+
model: "claude-sonnet-4-20250514",
|
|
244
|
+
tools: builtinTools,
|
|
245
|
+
sessionStorage: storage,
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
console.log(`Session ID: ${session.id}`) // Save this for later
|
|
249
|
+
await session.close()
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Resume Sessions
|
|
253
|
+
|
|
254
|
+
Resume a previous session with full conversation context:
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
import { createSession, FileSessionStorage } from "formagent-sdk"
|
|
258
|
+
|
|
259
|
+
const storage = new FileSessionStorage("./sessions")
|
|
234
260
|
|
|
235
|
-
//
|
|
261
|
+
// Resume from saved session ID
|
|
262
|
+
const session = await createSession({
|
|
263
|
+
sessionStorage: storage,
|
|
264
|
+
resume: "previous-session-id",
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
await session.send("Continue where we left off")
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Global Storage Configuration
|
|
271
|
+
|
|
272
|
+
Set a default storage for all sessions:
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
import { setDefaultStorage, FileSessionStorage, createSession } from "formagent-sdk"
|
|
276
|
+
|
|
277
|
+
// Set once at startup
|
|
278
|
+
setDefaultStorage(new FileSessionStorage("./sessions"))
|
|
279
|
+
|
|
280
|
+
// All sessions now persist automatically
|
|
236
281
|
const session = await createSession({ model: "claude-sonnet-4-20250514" })
|
|
237
|
-
|
|
282
|
+
```
|
|
238
283
|
|
|
239
|
-
|
|
240
|
-
|
|
284
|
+
### Fork Sessions
|
|
285
|
+
|
|
286
|
+
Create a branch from an existing session:
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
import { forkSession } from "formagent-sdk"
|
|
241
290
|
|
|
242
|
-
//
|
|
243
|
-
const forked = await forkSession(
|
|
291
|
+
// Fork creates a new session with copied conversation history
|
|
292
|
+
const forked = await forkSession("original-session-id")
|
|
244
293
|
```
|
|
245
294
|
|
|
246
295
|
## Event Types
|
|
@@ -272,6 +321,7 @@ See the [examples](./examples) directory for complete examples:
|
|
|
272
321
|
|
|
273
322
|
- [Getting Started](./docs/getting-started.md)
|
|
274
323
|
- [API Reference](./docs/api-reference.md)
|
|
324
|
+
- [Session Storage](./docs/session-storage.md)
|
|
275
325
|
- [Built-in Tools](./docs/tools.md)
|
|
276
326
|
- [MCP Servers](./docs/mcp-servers.md)
|
|
277
327
|
|
package/dist/cli/index.js
CHANGED
|
@@ -2630,6 +2630,7 @@ class OpenAIProvider {
|
|
|
2630
2630
|
// src/api.ts
|
|
2631
2631
|
var globalManager = null;
|
|
2632
2632
|
var defaultProvider = null;
|
|
2633
|
+
var defaultStorage = null;
|
|
2633
2634
|
function getGlobalManager() {
|
|
2634
2635
|
if (!globalManager) {
|
|
2635
2636
|
if (!defaultProvider) {
|
|
@@ -2646,16 +2647,29 @@ function getGlobalManager() {
|
|
|
2646
2647
|
}
|
|
2647
2648
|
globalManager = new SessionManagerImpl({
|
|
2648
2649
|
provider: defaultProvider,
|
|
2649
|
-
storage: new MemorySessionStorage
|
|
2650
|
+
storage: defaultStorage ?? new MemorySessionStorage
|
|
2650
2651
|
});
|
|
2651
2652
|
}
|
|
2652
2653
|
return globalManager;
|
|
2653
2654
|
}
|
|
2654
2655
|
async function createSession(options) {
|
|
2655
|
-
if (options?.provider) {
|
|
2656
|
+
if (options?.provider || options?.sessionStorage) {
|
|
2657
|
+
let provider = options?.provider ?? defaultProvider;
|
|
2658
|
+
if (!provider) {
|
|
2659
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
2660
|
+
provider = new AnthropicProvider;
|
|
2661
|
+
} else if (process.env.OPENAI_API_KEY) {
|
|
2662
|
+
provider = new OpenAIProvider({
|
|
2663
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
2664
|
+
baseUrl: process.env.OPENAI_BASE_URL
|
|
2665
|
+
});
|
|
2666
|
+
} else {
|
|
2667
|
+
throw new Error("No provider available. Set ANTHROPIC_API_KEY or OPENAI_API_KEY environment variable, " + "call setDefaultProvider(), or pass a provider in the options.");
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2656
2670
|
const customManager = new SessionManagerImpl({
|
|
2657
|
-
provider
|
|
2658
|
-
storage: new MemorySessionStorage
|
|
2671
|
+
provider,
|
|
2672
|
+
storage: options?.sessionStorage ?? defaultStorage ?? new MemorySessionStorage
|
|
2659
2673
|
});
|
|
2660
2674
|
return customManager.create(options);
|
|
2661
2675
|
}
|
package/dist/index.js
CHANGED
|
@@ -3014,10 +3014,15 @@ function createOpenAIProvider(config) {
|
|
|
3014
3014
|
// src/api.ts
|
|
3015
3015
|
var globalManager = null;
|
|
3016
3016
|
var defaultProvider = null;
|
|
3017
|
+
var defaultStorage = null;
|
|
3017
3018
|
function setDefaultProvider(provider2) {
|
|
3018
3019
|
defaultProvider = provider2;
|
|
3019
3020
|
globalManager = null;
|
|
3020
3021
|
}
|
|
3022
|
+
function setDefaultStorage(storage) {
|
|
3023
|
+
defaultStorage = storage;
|
|
3024
|
+
globalManager = null;
|
|
3025
|
+
}
|
|
3021
3026
|
function getGlobalManager() {
|
|
3022
3027
|
if (!globalManager) {
|
|
3023
3028
|
if (!defaultProvider) {
|
|
@@ -3034,16 +3039,29 @@ function getGlobalManager() {
|
|
|
3034
3039
|
}
|
|
3035
3040
|
globalManager = new SessionManagerImpl({
|
|
3036
3041
|
provider: defaultProvider,
|
|
3037
|
-
storage: new MemorySessionStorage
|
|
3042
|
+
storage: defaultStorage ?? new MemorySessionStorage
|
|
3038
3043
|
});
|
|
3039
3044
|
}
|
|
3040
3045
|
return globalManager;
|
|
3041
3046
|
}
|
|
3042
3047
|
async function createSession(options2) {
|
|
3043
|
-
if (options2?.provider) {
|
|
3048
|
+
if (options2?.provider || options2?.sessionStorage) {
|
|
3049
|
+
let provider2 = options2?.provider ?? defaultProvider;
|
|
3050
|
+
if (!provider2) {
|
|
3051
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
3052
|
+
provider2 = new AnthropicProvider;
|
|
3053
|
+
} else if (process.env.OPENAI_API_KEY) {
|
|
3054
|
+
provider2 = new OpenAIProvider({
|
|
3055
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
3056
|
+
baseUrl: process.env.OPENAI_BASE_URL
|
|
3057
|
+
});
|
|
3058
|
+
} else {
|
|
3059
|
+
throw new Error("No provider available. Set ANTHROPIC_API_KEY or OPENAI_API_KEY environment variable, " + "call setDefaultProvider(), or pass a provider in the options.");
|
|
3060
|
+
}
|
|
3061
|
+
}
|
|
3044
3062
|
const customManager = new SessionManagerImpl({
|
|
3045
|
-
provider:
|
|
3046
|
-
storage: new MemorySessionStorage
|
|
3063
|
+
provider: provider2,
|
|
3064
|
+
storage: options2?.sessionStorage ?? defaultStorage ?? new MemorySessionStorage
|
|
3047
3065
|
});
|
|
3048
3066
|
return customManager.create(options2);
|
|
3049
3067
|
}
|
|
@@ -5588,6 +5606,7 @@ export {
|
|
|
5588
5606
|
skillTool,
|
|
5589
5607
|
simpleTool,
|
|
5590
5608
|
setTodoChangeCallback,
|
|
5609
|
+
setDefaultStorage,
|
|
5591
5610
|
setDefaultProvider,
|
|
5592
5611
|
serializeFrontmatter,
|
|
5593
5612
|
resumeSession,
|
package/package.json
CHANGED