formagent-sdk 0.1.1 → 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.
Files changed (84) hide show
  1. package/README.md +58 -8
  2. package/dist/cli/index.js +18 -4
  3. package/dist/index.js +23 -4
  4. package/package.json +1 -4
  5. package/docs/README.md +0 -122
  6. package/docs/agent-core-summary.md +0 -516
  7. package/docs/api-reference.md +0 -564
  8. package/docs/getting-started.md +0 -234
  9. package/docs/mcp-servers.md +0 -465
  10. package/docs/tools.md +0 -501
  11. package/examples/01-basic-session.ts +0 -129
  12. package/examples/02-prompt-function.ts +0 -78
  13. package/examples/03-streaming.ts +0 -137
  14. package/examples/04-tools.ts +0 -200
  15. package/examples/05-mcp-server.ts +0 -216
  16. package/examples/06-system-prompts.ts +0 -171
  17. package/examples/07-cost-tracking.ts +0 -215
  18. package/examples/08-providers.ts +0 -230
  19. package/examples/09-skills.ts +0 -245
  20. package/examples/10-full-agent.ts +0 -202
  21. package/examples/11-user-skills.ts +0 -231
  22. package/examples/12-builtin-tools.ts +0 -214
  23. package/examples/13-cli-agent.ts +0 -482
  24. package/examples/14-structured-output.ts +0 -227
  25. package/examples/15-hooks.ts +0 -295
  26. package/examples/README.md +0 -366
  27. package/examples/_utils.ts +0 -273
  28. package/src/api.ts +0 -438
  29. package/src/cli/cli.ts +0 -555
  30. package/src/cli/index.ts +0 -19
  31. package/src/cost/index.ts +0 -6
  32. package/src/cost/tracker.ts +0 -359
  33. package/src/hooks/index.ts +0 -32
  34. package/src/hooks/manager.ts +0 -419
  35. package/src/index.ts +0 -160
  36. package/src/llm/anthropic.ts +0 -395
  37. package/src/llm/index.ts +0 -19
  38. package/src/llm/openai.ts +0 -538
  39. package/src/llm/resolver.ts +0 -260
  40. package/src/loop/agent.ts +0 -428
  41. package/src/prompt/builder.ts +0 -241
  42. package/src/prompt/claude-md.ts +0 -260
  43. package/src/prompt/index.ts +0 -43
  44. package/src/prompt/presets.ts +0 -335
  45. package/src/session/index.ts +0 -14
  46. package/src/session/manager.ts +0 -212
  47. package/src/session/session.ts +0 -871
  48. package/src/session/storage.ts +0 -162
  49. package/src/skills/loader.ts +0 -432
  50. package/src/stream/processor.ts +0 -106
  51. package/src/tools/builtin/bash.ts +0 -160
  52. package/src/tools/builtin/edit.ts +0 -119
  53. package/src/tools/builtin/glob.ts +0 -165
  54. package/src/tools/builtin/grep.ts +0 -279
  55. package/src/tools/builtin/index.ts +0 -138
  56. package/src/tools/builtin/path-guard.ts +0 -68
  57. package/src/tools/builtin/read.ts +0 -136
  58. package/src/tools/builtin/todo.ts +0 -137
  59. package/src/tools/builtin/types.ts +0 -155
  60. package/src/tools/builtin/webfetch.ts +0 -294
  61. package/src/tools/builtin/write.ts +0 -72
  62. package/src/tools/index.ts +0 -86
  63. package/src/tools/manager.ts +0 -373
  64. package/src/tools/mcp.ts +0 -345
  65. package/src/tools/registry.ts +0 -50
  66. package/src/tools/skill.ts +0 -272
  67. package/src/tools/tool.ts +0 -308
  68. package/src/types/core.ts +0 -285
  69. package/src/types/cost.ts +0 -235
  70. package/src/types/hooks.ts +0 -275
  71. package/src/types/index.ts +0 -34
  72. package/src/types/legacy.ts +0 -334
  73. package/src/types/prompt.ts +0 -178
  74. package/src/types/provider.ts +0 -296
  75. package/src/types/query.ts +0 -169
  76. package/src/types/session.ts +0 -302
  77. package/src/types/skill.ts +0 -183
  78. package/src/types/tool.ts +0 -215
  79. package/src/types.ts +0 -57
  80. package/src/utils/env.ts +0 -74
  81. package/src/utils/events.ts +0 -250
  82. package/src/utils/frontmatter.ts +0 -298
  83. package/src/utils/id.ts +0 -138
  84. package/src/utils/index.ts +0 -39
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.1",
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",
@@ -26,9 +26,6 @@
26
26
  },
27
27
  "files": [
28
28
  "dist",
29
- "src",
30
- "examples",
31
- "docs/*.md",
32
29
  "README.md",
33
30
  "LICENSE"
34
31
  ],
package/docs/README.md DELETED
@@ -1,122 +0,0 @@
1
- # formagent-sdk Documentation
2
-
3
- Welcome to the documentation for `formagent-sdk`, a Claude Agent SDK compatible framework for building AI agents with streaming support, tool execution, and skill management.
4
-
5
- ## Table of Contents
6
-
7
- - [Getting Started](./getting-started.md) - Quick start guide
8
- - [API Reference](./api-reference.md) - Complete API documentation
9
- - [Built-in Tools](./tools.md) - File operations, bash, and more
10
- - [MCP Servers](./mcp-servers.md) - Model Context Protocol integration
11
- - [Examples](./examples.md) - Code examples and tutorials
12
-
13
- ## Quick Links
14
-
15
- ### Installation
16
-
17
- ```bash
18
- npm install formagent-sdk
19
- # or
20
- bun add formagent-sdk
21
- ```
22
-
23
- ### Environment Setup
24
-
25
- ```bash
26
- export ANTHROPIC_API_KEY=your-api-key
27
- # Optional: Custom endpoint
28
- export ANTHROPIC_BASE_URL=https://your-proxy.com
29
- ```
30
-
31
- ### Minimal Example
32
-
33
- ```typescript
34
- import { createSession, builtinTools } from "formagent-sdk"
35
-
36
- const session = await createSession({
37
- model: "claude-sonnet-4-20250514",
38
- tools: builtinTools,
39
- })
40
-
41
- await session.send("List files in the current directory")
42
-
43
- for await (const event of session.receive()) {
44
- if (event.type === "text") {
45
- process.stdout.write(event.text)
46
- }
47
- }
48
-
49
- await session.close()
50
- ```
51
-
52
- ## Core Concepts
53
-
54
- ### Sessions
55
-
56
- Sessions manage conversations with Claude. They handle message history, tool execution, and streaming responses.
57
-
58
- ```typescript
59
- const session = await createSession({ model: "claude-sonnet-4-20250514" })
60
- await session.send("Hello!")
61
- for await (const event of session.receive()) { /* ... */ }
62
- await session.close()
63
- ```
64
-
65
- ### Tools
66
-
67
- Tools extend Claude's capabilities. The SDK provides built-in tools and supports custom tool definitions.
68
-
69
- ```typescript
70
- import { builtinTools, tool } from "formagent-sdk"
71
- import { z } from "zod"
72
-
73
- // Use built-in tools
74
- const session = await createSession({ tools: builtinTools })
75
-
76
- // Or create custom tools
77
- const myTool = tool({
78
- name: "my_tool",
79
- description: "Does something useful",
80
- schema: z.object({ input: z.string() }),
81
- execute: async ({ input }) => `Result: ${input}`,
82
- })
83
- ```
84
-
85
- ### MCP Servers
86
-
87
- MCP (Model Context Protocol) servers provide a standardized way to expose tools.
88
-
89
- ```typescript
90
- import { createSdkMcpServer, tool } from "formagent-sdk"
91
-
92
- const server = createSdkMcpServer({
93
- name: "my-server",
94
- version: "1.0.0",
95
- tools: [myTool],
96
- })
97
- ```
98
-
99
- ## Architecture
100
-
101
- ```
102
- formagent-sdk
103
- ├── Session API # Conversation management
104
- │ ├── createSession() # Create new sessions
105
- │ ├── send() # Send messages
106
- │ └── receive() # Stream responses
107
- ├── Tool System # Tool execution
108
- │ ├── builtinTools # Built-in tools (Bash, Read, Write, etc.)
109
- │ ├── tool() # Tool definition helper
110
- │ └── ToolManager # Tool registration and execution
111
- ├── MCP Integration # Model Context Protocol
112
- │ ├── createSdkMcpServer()
113
- │ └── MCPServerManager
114
- └── Providers # LLM providers
115
- ├── AnthropicProvider
116
- └── OpenAIProvider
117
- ```
118
-
119
- ## Support
120
-
121
- - [GitHub Issues](https://github.com/anthropics/claude-code/issues)
122
- - [Examples](../examples/)