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 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
- Resume and fork sessions:
231
+ ### Persistent Sessions
232
+
233
+ Enable session persistence with `FileSessionStorage`:
231
234
 
232
235
  ```typescript
233
- import { createSession, resumeSession, forkSession } from "formagent-sdk"
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
- // Create a session
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
- const sessionId = session.id
282
+ ```
238
283
 
239
- // Later: Resume the session
240
- const resumed = await resumeSession(sessionId)
284
+ ### Fork Sessions
285
+
286
+ Create a branch from an existing session:
287
+
288
+ ```typescript
289
+ import { forkSession } from "formagent-sdk"
241
290
 
242
- // Or: Fork the session (create a branch)
243
- const forked = await forkSession(sessionId)
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: options.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: options2.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formagent-sdk",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "FormAgent SDK - AI Agent framework with streaming support, tool execution, skill management, and hooks system",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",