open-agent-sdk 0.1.0-alpha.0

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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +284 -0
  3. package/README.zh.md +285 -0
  4. package/dist/agent/agent-definition.d.ts +107 -0
  5. package/dist/agent/agent-definition.d.ts.map +1 -0
  6. package/dist/agent/agent-definition.js +90 -0
  7. package/dist/agent/agent-definition.js.map +1 -0
  8. package/dist/agent/react-loop.d.ts +117 -0
  9. package/dist/agent/react-loop.d.ts.map +1 -0
  10. package/dist/agent/react-loop.js +674 -0
  11. package/dist/agent/react-loop.js.map +1 -0
  12. package/dist/agent/subagent-runner.d.ts +67 -0
  13. package/dist/agent/subagent-runner.d.ts.map +1 -0
  14. package/dist/agent/subagent-runner.js +168 -0
  15. package/dist/agent/subagent-runner.js.map +1 -0
  16. package/dist/hooks/index.d.ts +8 -0
  17. package/dist/hooks/index.d.ts.map +1 -0
  18. package/dist/hooks/index.js +9 -0
  19. package/dist/hooks/index.js.map +1 -0
  20. package/dist/hooks/inputs.d.ts +56 -0
  21. package/dist/hooks/inputs.d.ts.map +1 -0
  22. package/dist/hooks/inputs.js +150 -0
  23. package/dist/hooks/inputs.js.map +1 -0
  24. package/dist/hooks/manager.d.ts +63 -0
  25. package/dist/hooks/manager.d.ts.map +1 -0
  26. package/dist/hooks/manager.js +137 -0
  27. package/dist/hooks/manager.js.map +1 -0
  28. package/dist/hooks/types.d.ts +191 -0
  29. package/dist/hooks/types.d.ts.map +1 -0
  30. package/dist/hooks/types.js +6 -0
  31. package/dist/hooks/types.js.map +1 -0
  32. package/dist/index.d.ts +109 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +218 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/mcp/errors.d.ts +26 -0
  37. package/dist/mcp/errors.d.ts.map +1 -0
  38. package/dist/mcp/errors.js +43 -0
  39. package/dist/mcp/errors.js.map +1 -0
  40. package/dist/mcp/index.d.ts +11 -0
  41. package/dist/mcp/index.d.ts.map +1 -0
  42. package/dist/mcp/index.js +13 -0
  43. package/dist/mcp/index.js.map +1 -0
  44. package/dist/mcp/manager.d.ts +50 -0
  45. package/dist/mcp/manager.d.ts.map +1 -0
  46. package/dist/mcp/manager.js +170 -0
  47. package/dist/mcp/manager.js.map +1 -0
  48. package/dist/mcp/server-registry.d.ts +48 -0
  49. package/dist/mcp/server-registry.d.ts.map +1 -0
  50. package/dist/mcp/server-registry.js +121 -0
  51. package/dist/mcp/server-registry.js.map +1 -0
  52. package/dist/mcp/tool-adapter.d.ts +42 -0
  53. package/dist/mcp/tool-adapter.d.ts.map +1 -0
  54. package/dist/mcp/tool-adapter.js +89 -0
  55. package/dist/mcp/tool-adapter.js.map +1 -0
  56. package/dist/mcp/types.d.ts +74 -0
  57. package/dist/mcp/types.d.ts.map +1 -0
  58. package/dist/mcp/types.js +21 -0
  59. package/dist/mcp/types.js.map +1 -0
  60. package/dist/permissions/index.d.ts +3 -0
  61. package/dist/permissions/index.d.ts.map +1 -0
  62. package/dist/permissions/index.js +4 -0
  63. package/dist/permissions/index.js.map +1 -0
  64. package/dist/permissions/manager.d.ts +40 -0
  65. package/dist/permissions/manager.d.ts.map +1 -0
  66. package/dist/permissions/manager.js +115 -0
  67. package/dist/permissions/manager.js.map +1 -0
  68. package/dist/permissions/types.d.ts +124 -0
  69. package/dist/permissions/types.d.ts.map +1 -0
  70. package/dist/permissions/types.js +25 -0
  71. package/dist/permissions/types.js.map +1 -0
  72. package/dist/providers/anthropic.d.ts +18 -0
  73. package/dist/providers/anthropic.d.ts.map +1 -0
  74. package/dist/providers/anthropic.js +126 -0
  75. package/dist/providers/anthropic.js.map +1 -0
  76. package/dist/providers/base.d.ts +85 -0
  77. package/dist/providers/base.d.ts.map +1 -0
  78. package/dist/providers/base.js +36 -0
  79. package/dist/providers/base.js.map +1 -0
  80. package/dist/providers/google.d.ts +12 -0
  81. package/dist/providers/google.d.ts.map +1 -0
  82. package/dist/providers/google.js +123 -0
  83. package/dist/providers/google.js.map +1 -0
  84. package/dist/providers/openai.d.ts +12 -0
  85. package/dist/providers/openai.d.ts.map +1 -0
  86. package/dist/providers/openai.js +110 -0
  87. package/dist/providers/openai.js.map +1 -0
  88. package/dist/session/factory.d.ts +156 -0
  89. package/dist/session/factory.d.ts.map +1 -0
  90. package/dist/session/factory.js +311 -0
  91. package/dist/session/factory.js.map +1 -0
  92. package/dist/session/index.d.ts +8 -0
  93. package/dist/session/index.d.ts.map +1 -0
  94. package/dist/session/index.js +7 -0
  95. package/dist/session/index.js.map +1 -0
  96. package/dist/session/session.d.ts +144 -0
  97. package/dist/session/session.d.ts.map +1 -0
  98. package/dist/session/session.js +319 -0
  99. package/dist/session/session.js.map +1 -0
  100. package/dist/session/storage.d.ts +105 -0
  101. package/dist/session/storage.d.ts.map +1 -0
  102. package/dist/session/storage.js +148 -0
  103. package/dist/session/storage.js.map +1 -0
  104. package/dist/tools/ask-user-question.d.ts +31 -0
  105. package/dist/tools/ask-user-question.d.ts.map +1 -0
  106. package/dist/tools/ask-user-question.js +66 -0
  107. package/dist/tools/ask-user-question.js.map +1 -0
  108. package/dist/tools/bash-output.d.ts +22 -0
  109. package/dist/tools/bash-output.d.ts.map +1 -0
  110. package/dist/tools/bash-output.js +43 -0
  111. package/dist/tools/bash-output.js.map +1 -0
  112. package/dist/tools/bash.d.ts +36 -0
  113. package/dist/tools/bash.d.ts.map +1 -0
  114. package/dist/tools/bash.js +161 -0
  115. package/dist/tools/bash.js.map +1 -0
  116. package/dist/tools/edit.d.ts +24 -0
  117. package/dist/tools/edit.d.ts.map +1 -0
  118. package/dist/tools/edit.js +83 -0
  119. package/dist/tools/edit.js.map +1 -0
  120. package/dist/tools/glob.d.ts +22 -0
  121. package/dist/tools/glob.d.ts.map +1 -0
  122. package/dist/tools/glob.js +248 -0
  123. package/dist/tools/glob.js.map +1 -0
  124. package/dist/tools/grep.d.ts +39 -0
  125. package/dist/tools/grep.d.ts.map +1 -0
  126. package/dist/tools/grep.js +312 -0
  127. package/dist/tools/grep.js.map +1 -0
  128. package/dist/tools/kill-bash.d.ts +19 -0
  129. package/dist/tools/kill-bash.d.ts.map +1 -0
  130. package/dist/tools/kill-bash.js +64 -0
  131. package/dist/tools/kill-bash.js.map +1 -0
  132. package/dist/tools/read.d.ts +26 -0
  133. package/dist/tools/read.d.ts.map +1 -0
  134. package/dist/tools/read.js +87 -0
  135. package/dist/tools/read.js.map +1 -0
  136. package/dist/tools/registry.d.ts +32 -0
  137. package/dist/tools/registry.d.ts.map +1 -0
  138. package/dist/tools/registry.js +91 -0
  139. package/dist/tools/registry.js.map +1 -0
  140. package/dist/tools/task-create.d.ts +22 -0
  141. package/dist/tools/task-create.d.ts.map +1 -0
  142. package/dist/tools/task-create.js +42 -0
  143. package/dist/tools/task-create.js.map +1 -0
  144. package/dist/tools/task-get.d.ts +19 -0
  145. package/dist/tools/task-get.d.ts.map +1 -0
  146. package/dist/tools/task-get.js +38 -0
  147. package/dist/tools/task-get.js.map +1 -0
  148. package/dist/tools/task-list.d.ts +18 -0
  149. package/dist/tools/task-list.d.ts.map +1 -0
  150. package/dist/tools/task-list.js +27 -0
  151. package/dist/tools/task-list.js.map +1 -0
  152. package/dist/tools/task-storage.d.ts +6 -0
  153. package/dist/tools/task-storage.d.ts.map +1 -0
  154. package/dist/tools/task-storage.js +83 -0
  155. package/dist/tools/task-storage.js.map +1 -0
  156. package/dist/tools/task-update.d.ts +28 -0
  157. package/dist/tools/task-update.d.ts.map +1 -0
  158. package/dist/tools/task-update.js +118 -0
  159. package/dist/tools/task-update.js.map +1 -0
  160. package/dist/tools/task.d.ts +80 -0
  161. package/dist/tools/task.d.ts.map +1 -0
  162. package/dist/tools/task.js +99 -0
  163. package/dist/tools/task.js.map +1 -0
  164. package/dist/tools/web-fetch.d.ts +21 -0
  165. package/dist/tools/web-fetch.d.ts.map +1 -0
  166. package/dist/tools/web-fetch.js +124 -0
  167. package/dist/tools/web-fetch.js.map +1 -0
  168. package/dist/tools/web-search.d.ts +20 -0
  169. package/dist/tools/web-search.d.ts.map +1 -0
  170. package/dist/tools/web-search.js +127 -0
  171. package/dist/tools/web-search.js.map +1 -0
  172. package/dist/tools/write.d.ts +22 -0
  173. package/dist/tools/write.d.ts.map +1 -0
  174. package/dist/tools/write.js +46 -0
  175. package/dist/tools/write.js.map +1 -0
  176. package/dist/types/messages.d.ts +138 -0
  177. package/dist/types/messages.d.ts.map +1 -0
  178. package/dist/types/messages.js +88 -0
  179. package/dist/types/messages.js.map +1 -0
  180. package/dist/types/task.d.ts +29 -0
  181. package/dist/types/task.d.ts.map +1 -0
  182. package/dist/types/task.js +5 -0
  183. package/dist/types/task.js.map +1 -0
  184. package/dist/types/tools.d.ts +56 -0
  185. package/dist/types/tools.d.ts.map +1 -0
  186. package/dist/types/tools.js +25 -0
  187. package/dist/types/tools.js.map +1 -0
  188. package/dist/utils/logger.d.ts +19 -0
  189. package/dist/utils/logger.d.ts.map +1 -0
  190. package/dist/utils/logger.js +46 -0
  191. package/dist/utils/logger.js.map +1 -0
  192. package/dist/utils/uuid.d.ts +3 -0
  193. package/dist/utils/uuid.d.ts.map +1 -0
  194. package/dist/utils/uuid.js +5 -0
  195. package/dist/utils/uuid.js.map +1 -0
  196. package/package.json +38 -0
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Session class for managing conversation state
3
+ * Provides a stateful interface for multi-turn interactions
4
+ */
5
+ import type { ReActLoop } from '../agent/react-loop';
6
+ import type { SDKMessage } from '../types/messages';
7
+ import type { SessionStorage } from './storage';
8
+ /** Session states following a state machine pattern */
9
+ export declare enum SessionState {
10
+ IDLE = "idle",
11
+ READY = "ready",
12
+ RUNNING = "running",
13
+ ERROR = "error",
14
+ CLOSED = "closed"
15
+ }
16
+ /** Base error class for session-related errors */
17
+ export declare class SessionError extends Error {
18
+ constructor(message: string);
19
+ }
20
+ /** Error thrown when send() is called but session is not in IDLE state */
21
+ export declare class SessionNotIdleError extends SessionError {
22
+ constructor();
23
+ }
24
+ /** Error thrown when stream() is called but session is not in READY state */
25
+ export declare class SessionNotReadyError extends SessionError {
26
+ constructor();
27
+ }
28
+ /** Error thrown when stream() is called while another stream is active */
29
+ export declare class SessionAlreadyStreamingError extends SessionError {
30
+ constructor();
31
+ }
32
+ /** Error thrown when any operation is called on a closed session */
33
+ export declare class SessionClosedError extends SessionError {
34
+ constructor();
35
+ }
36
+ /** Options for creating a new Session */
37
+ export interface SessionOptions {
38
+ /** Model identifier */
39
+ model: string;
40
+ /** Provider name */
41
+ provider: string;
42
+ /** Optional session ID (generated if not provided) */
43
+ id?: string;
44
+ /** Parent session ID if this session was forked */
45
+ parentSessionId?: string;
46
+ /** Timestamp when this session was forked */
47
+ forkedAt?: number;
48
+ }
49
+ /**
50
+ * Session class for managing conversation state
51
+ *
52
+ * State machine:
53
+ * [idle] --send()--> [ready]
54
+ * ▲ │
55
+ * │ ▼
56
+ * [closed] [running] --stream结束--> [idle]
57
+ * │
58
+ * ▼
59
+ * [error] --> [idle]
60
+ *
61
+ * Constraints:
62
+ * - send() can only be called in IDLE state
63
+ * - stream() can only be called in READY state
64
+ * - Only one stream can be active at a time
65
+ * - close() can be called in any state
66
+ */
67
+ export declare class Session {
68
+ readonly id: string;
69
+ readonly model: string;
70
+ readonly provider: string;
71
+ readonly createdAt: number;
72
+ readonly parentSessionId?: string;
73
+ readonly forkedAt?: number;
74
+ private _state;
75
+ private loop;
76
+ private messages;
77
+ private isStreaming;
78
+ private storage?;
79
+ private updatedAt;
80
+ constructor(loop: ReActLoop, options: SessionOptions, storage?: SessionStorage);
81
+ /**
82
+ * Load a session from storage by ID
83
+ * @param id - Session ID to load
84
+ * @param storage - Storage implementation to use
85
+ * @param loop - ReActLoop instance for the session
86
+ * @returns Session instance or null if not found
87
+ */
88
+ static loadFromStorage(id: string, storage: SessionStorage, loop: ReActLoop): Promise<Session | null>;
89
+ /**
90
+ * Save session data to storage
91
+ * @private
92
+ */
93
+ private saveToStorage;
94
+ /** Current state of the session */
95
+ get state(): SessionState;
96
+ /**
97
+ * Send a user message to the session
98
+ * Transitions state from IDLE to READY
99
+ *
100
+ * @param message - User's message
101
+ * @throws {SessionNotIdleError} If session is not in IDLE state
102
+ * @throws {SessionClosedError} If session is closed
103
+ */
104
+ send(message: string): Promise<void>;
105
+ /**
106
+ * Stream the agent's response
107
+ * Transitions state from READY to RUNNING, then back to IDLE
108
+ *
109
+ * @returns AsyncGenerator yielding SDK messages
110
+ * @throws {SessionNotReadyError} If session is not in READY state
111
+ * @throws {SessionAlreadyStreamingError} If another stream is active
112
+ * @throws {SessionClosedError} If session is closed
113
+ */
114
+ stream(): AsyncGenerator<SDKMessage>;
115
+ /**
116
+ * Get a readonly copy of the message history
117
+ *
118
+ * @returns Readonly array of SDK messages
119
+ */
120
+ getMessages(): readonly SDKMessage[];
121
+ /**
122
+ * Close the session
123
+ * Can be called from any state
124
+ */
125
+ close(): Promise<void>;
126
+ /**
127
+ * Support for async dispose pattern (await using)
128
+ */
129
+ [Symbol.asyncDispose](): Promise<void>;
130
+ /**
131
+ * Compact the conversation history to reduce token usage.
132
+ * Generates a summary of older messages and preserves recent rounds.
133
+ *
134
+ * @returns Result of the compaction operation
135
+ * @throws {SessionClosedError} If session is closed
136
+ */
137
+ compact(): Promise<{
138
+ success: boolean;
139
+ preTokens?: number;
140
+ preservedRounds?: number;
141
+ reason?: string;
142
+ }>;
143
+ }
144
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,WAAW,CAAC;AAI7D,uDAAuD;AACvD,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,kDAAkD;AAClD,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,0EAA0E;AAC1E,qBAAa,mBAAoB,SAAQ,YAAY;;CAKpD;AAED,6EAA6E;AAC7E,qBAAa,oBAAqB,SAAQ,YAAY;;CAKrD;AAED,0EAA0E;AAC1E,qBAAa,4BAA6B,SAAQ,YAAY;;CAK7D;AAED,oEAAoE;AACpE,qBAAa,kBAAmB,SAAQ,YAAY;;CAKnD;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc;IAe9E;;;;;;OAMG;WACU,eAAe,CAC1B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAuB1B;;;OAGG;YACW,aAAa;IAyB3B,mCAAmC;IACnC,IAAI,KAAK,IAAI,YAAY,CAExB;IAED;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1C;;;;;;;;OAQG;IACI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC;IAwE3C;;;;OAIG;IACH,WAAW,IAAI,SAAS,UAAU,EAAE;IAIpC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CAgDH"}
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Session class for managing conversation state
3
+ * Provides a stateful interface for multi-turn interactions
4
+ */
5
+ import { logger } from '../utils/logger';
6
+ import { generateUUID } from '../utils/uuid';
7
+ /** Session states following a state machine pattern */
8
+ export var SessionState;
9
+ (function (SessionState) {
10
+ SessionState["IDLE"] = "idle";
11
+ SessionState["READY"] = "ready";
12
+ SessionState["RUNNING"] = "running";
13
+ SessionState["ERROR"] = "error";
14
+ SessionState["CLOSED"] = "closed";
15
+ })(SessionState || (SessionState = {}));
16
+ /** Base error class for session-related errors */
17
+ export class SessionError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = 'SessionError';
21
+ }
22
+ }
23
+ /** Error thrown when send() is called but session is not in IDLE state */
24
+ export class SessionNotIdleError extends SessionError {
25
+ constructor() {
26
+ super('Cannot send message: session is not in idle state');
27
+ this.name = 'SessionNotIdleError';
28
+ }
29
+ }
30
+ /** Error thrown when stream() is called but session is not in READY state */
31
+ export class SessionNotReadyError extends SessionError {
32
+ constructor() {
33
+ super('Cannot start stream: session is not in ready state. Call send() first.');
34
+ this.name = 'SessionNotReadyError';
35
+ }
36
+ }
37
+ /** Error thrown when stream() is called while another stream is active */
38
+ export class SessionAlreadyStreamingError extends SessionError {
39
+ constructor() {
40
+ super('Cannot start stream: another stream is already active');
41
+ this.name = 'SessionAlreadyStreamingError';
42
+ }
43
+ }
44
+ /** Error thrown when any operation is called on a closed session */
45
+ export class SessionClosedError extends SessionError {
46
+ constructor() {
47
+ super('Session is closed');
48
+ this.name = 'SessionClosedError';
49
+ }
50
+ }
51
+ /**
52
+ * Session class for managing conversation state
53
+ *
54
+ * State machine:
55
+ * [idle] --send()--> [ready]
56
+ * ▲ │
57
+ * │ ▼
58
+ * [closed] [running] --stream结束--> [idle]
59
+ * │
60
+ * ▼
61
+ * [error] --> [idle]
62
+ *
63
+ * Constraints:
64
+ * - send() can only be called in IDLE state
65
+ * - stream() can only be called in READY state
66
+ * - Only one stream can be active at a time
67
+ * - close() can be called in any state
68
+ */
69
+ export class Session {
70
+ id;
71
+ model;
72
+ provider;
73
+ createdAt;
74
+ parentSessionId;
75
+ forkedAt;
76
+ _state;
77
+ loop;
78
+ messages;
79
+ isStreaming;
80
+ storage;
81
+ updatedAt;
82
+ constructor(loop, options, storage) {
83
+ this.id = options.id ?? generateUUID();
84
+ this.model = options.model;
85
+ this.provider = options.provider;
86
+ this.createdAt = Date.now();
87
+ this.updatedAt = this.createdAt;
88
+ this.parentSessionId = options.parentSessionId;
89
+ this.forkedAt = options.forkedAt;
90
+ this.loop = loop;
91
+ this.messages = [];
92
+ this._state = SessionState.IDLE;
93
+ this.isStreaming = false;
94
+ this.storage = storage;
95
+ }
96
+ /**
97
+ * Load a session from storage by ID
98
+ * @param id - Session ID to load
99
+ * @param storage - Storage implementation to use
100
+ * @param loop - ReActLoop instance for the session
101
+ * @returns Session instance or null if not found
102
+ */
103
+ static async loadFromStorage(id, storage, loop) {
104
+ const data = await storage.load(id);
105
+ if (!data) {
106
+ return null;
107
+ }
108
+ // Create session with loaded data including fork metadata
109
+ const session = new Session(loop, {
110
+ id: data.id,
111
+ model: data.model,
112
+ provider: data.provider,
113
+ parentSessionId: data.parentSessionId,
114
+ forkedAt: data.forkedAt,
115
+ }, storage);
116
+ // Restore message history and timestamps
117
+ session.messages = [...data.messages];
118
+ session.createdAt = data.createdAt;
119
+ session.updatedAt = data.updatedAt;
120
+ return session;
121
+ }
122
+ /**
123
+ * Save session data to storage
124
+ * @private
125
+ */
126
+ async saveToStorage() {
127
+ if (!this.storage) {
128
+ return;
129
+ }
130
+ this.updatedAt = Date.now();
131
+ const sessionData = {
132
+ id: this.id,
133
+ model: this.model,
134
+ provider: this.provider,
135
+ createdAt: this.createdAt,
136
+ updatedAt: this.updatedAt,
137
+ messages: [...this.messages],
138
+ options: {
139
+ model: this.model,
140
+ provider: this.provider,
141
+ },
142
+ parentSessionId: this.parentSessionId,
143
+ forkedAt: this.forkedAt,
144
+ };
145
+ await this.storage.save(sessionData);
146
+ }
147
+ /** Current state of the session */
148
+ get state() {
149
+ return this._state;
150
+ }
151
+ /**
152
+ * Send a user message to the session
153
+ * Transitions state from IDLE to READY
154
+ *
155
+ * @param message - User's message
156
+ * @throws {SessionNotIdleError} If session is not in IDLE state
157
+ * @throws {SessionClosedError} If session is closed
158
+ */
159
+ async send(message) {
160
+ if (this._state === SessionState.CLOSED) {
161
+ throw new SessionClosedError();
162
+ }
163
+ if (this._state !== SessionState.IDLE) {
164
+ throw new SessionNotIdleError();
165
+ }
166
+ // Create user message and add to history
167
+ const userMessage = {
168
+ type: 'user',
169
+ uuid: generateUUID(),
170
+ session_id: this.id,
171
+ message: { role: 'user', content: message },
172
+ parent_tool_use_id: null,
173
+ };
174
+ this.messages.push(userMessage);
175
+ this._state = SessionState.READY;
176
+ }
177
+ /**
178
+ * Stream the agent's response
179
+ * Transitions state from READY to RUNNING, then back to IDLE
180
+ *
181
+ * @returns AsyncGenerator yielding SDK messages
182
+ * @throws {SessionNotReadyError} If session is not in READY state
183
+ * @throws {SessionAlreadyStreamingError} If another stream is active
184
+ * @throws {SessionClosedError} If session is closed
185
+ */
186
+ async *stream() {
187
+ if (this._state === SessionState.CLOSED) {
188
+ throw new SessionClosedError();
189
+ }
190
+ if (this.isStreaming) {
191
+ throw new SessionAlreadyStreamingError();
192
+ }
193
+ if (this._state !== SessionState.READY) {
194
+ throw new SessionNotReadyError();
195
+ }
196
+ this._state = SessionState.RUNNING;
197
+ this.isStreaming = true;
198
+ try {
199
+ // Get the last user message
200
+ const lastUserMessage = this.messages[this.messages.length - 1];
201
+ if (lastUserMessage.type !== 'user') {
202
+ throw new SessionError('Expected last message to be from user');
203
+ }
204
+ const userPrompt = lastUserMessage.message.content;
205
+ // Pass history messages (excluding the current user message which will be added by runStream)
206
+ const historyMessages = this.messages.slice(0, -1);
207
+ logger.debug('[Session] historyMessages count:', historyMessages.length);
208
+ logger.debug('[Session] historyMessages:', JSON.stringify(historyMessages, null, 2));
209
+ // Run the ReAct loop and yield messages
210
+ for await (const event of this.loop.runStream(userPrompt, historyMessages)) {
211
+ switch (event.type) {
212
+ case 'assistant':
213
+ this.messages.push(event.message);
214
+ yield event.message;
215
+ break;
216
+ case 'tool_result':
217
+ this.messages.push(event.message);
218
+ yield event.message;
219
+ break;
220
+ case 'usage':
221
+ // Usage stats are tracked but not yielded as SDK messages
222
+ break;
223
+ case 'done':
224
+ // Stream completed
225
+ break;
226
+ }
227
+ }
228
+ this._state = SessionState.IDLE;
229
+ }
230
+ catch (error) {
231
+ this._state = SessionState.ERROR;
232
+ throw error;
233
+ }
234
+ finally {
235
+ this.isStreaming = false;
236
+ // If we were in ERROR state, transition back to IDLE for recovery
237
+ if (this._state === SessionState.ERROR) {
238
+ this._state = SessionState.IDLE;
239
+ }
240
+ // Save to storage after stream completes
241
+ if (this.storage) {
242
+ await this.saveToStorage();
243
+ }
244
+ }
245
+ }
246
+ /**
247
+ * Get a readonly copy of the message history
248
+ *
249
+ * @returns Readonly array of SDK messages
250
+ */
251
+ getMessages() {
252
+ return Object.freeze([...this.messages]);
253
+ }
254
+ /**
255
+ * Close the session
256
+ * Can be called from any state
257
+ */
258
+ async close() {
259
+ this._state = SessionState.CLOSED;
260
+ this.isStreaming = false;
261
+ }
262
+ /**
263
+ * Support for async dispose pattern (await using)
264
+ */
265
+ async [Symbol.asyncDispose]() {
266
+ await this.close();
267
+ }
268
+ /**
269
+ * Compact the conversation history to reduce token usage.
270
+ * Generates a summary of older messages and preserves recent rounds.
271
+ *
272
+ * @returns Result of the compaction operation
273
+ * @throws {SessionClosedError} If session is closed
274
+ */
275
+ async compact() {
276
+ if (this._state === SessionState.CLOSED) {
277
+ throw new SessionClosedError();
278
+ }
279
+ // Estimate token count (rough approximation)
280
+ const estimatedTokens = this.messages.reduce((total, msg) => {
281
+ if ('message' in msg && msg.message) {
282
+ if ('content' in msg.message) {
283
+ if (typeof msg.message.content === 'string') {
284
+ return total + msg.message.content.length / 4; // Rough estimate: 4 chars per token
285
+ }
286
+ else if (Array.isArray(msg.message.content)) {
287
+ return total + msg.message.content.reduce((sum, c) => {
288
+ if (c.type === 'text')
289
+ return sum + c.text.length / 4;
290
+ return sum + 50; // Tool calls estimate
291
+ }, 0);
292
+ }
293
+ }
294
+ }
295
+ return total + 50; // Default estimate for system/tool messages
296
+ }, 0);
297
+ const preTokens = Math.floor(estimatedTokens);
298
+ // Call the loop's compact method
299
+ const result = await this.loop.compact(this.messages, 'manual', preTokens);
300
+ if (!result.summaryGenerated) {
301
+ return {
302
+ success: false,
303
+ reason: 'nothing_to_compact',
304
+ };
305
+ }
306
+ // Update session messages with compacted version
307
+ this.messages = result.messages;
308
+ // Save to storage
309
+ if (this.storage) {
310
+ await this.saveToStorage();
311
+ }
312
+ return {
313
+ success: true,
314
+ preTokens: result.preTokens,
315
+ preservedRounds: result.preservedRounds,
316
+ };
317
+ }
318
+ }
319
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Session storage interfaces and implementations
3
+ * Supports in-memory (default) and file-based persistence
4
+ */
5
+ import type { SDKMessage } from '../types/messages';
6
+ import type { PermissionMode } from '../permissions/types';
7
+ import type { HooksConfig } from '../hooks/types';
8
+ /** Session data structure for storage */
9
+ export interface SessionData {
10
+ /** Unique session identifier */
11
+ id: string;
12
+ /** Model identifier (e.g., 'gpt-4o') */
13
+ model: string;
14
+ /** Provider identifier (e.g., 'openai') */
15
+ provider: string;
16
+ /** Session creation timestamp */
17
+ createdAt: number;
18
+ /** Last update timestamp */
19
+ updatedAt: number;
20
+ /** Message history */
21
+ messages: SDKMessage[];
22
+ /** Session options (excluding storage to avoid circular reference) */
23
+ options: Omit<SessionOptions, 'storage'>;
24
+ /** Parent session ID if this session was forked */
25
+ parentSessionId?: string;
26
+ /** Timestamp when this session was forked */
27
+ forkedAt?: number;
28
+ }
29
+ /** Session configuration options */
30
+ export interface SessionOptions {
31
+ /** Model identifier (required) */
32
+ model: string;
33
+ /** Provider identifier (optional, defaults to auto-detect) */
34
+ provider?: string;
35
+ /** API key (optional, can use env var) */
36
+ apiKey?: string;
37
+ /** Maximum number of turns (optional) */
38
+ maxTurns?: number;
39
+ /** Allowed tool names (optional, defaults to all) */
40
+ allowedTools?: string[];
41
+ /** System prompt (optional) */
42
+ systemPrompt?: string;
43
+ /** Working directory (optional) */
44
+ cwd?: string;
45
+ /** Environment variables (optional) */
46
+ env?: Record<string, string>;
47
+ /** AbortController for cancellation (optional) */
48
+ abortController?: AbortController;
49
+ /** Storage implementation (optional, defaults to InMemoryStorage) */
50
+ storage?: SessionStorage;
51
+ /** Permission mode for the session (optional, default: 'default') */
52
+ permissionMode?: PermissionMode;
53
+ /** Required to be true when using bypassPermissions mode (optional) */
54
+ allowDangerouslySkipPermissions?: boolean;
55
+ /** MCP servers configuration (optional) */
56
+ mcpServers?: Record<string, unknown>;
57
+ /** Hooks configuration (optional) */
58
+ hooks?: HooksConfig;
59
+ }
60
+ /** Storage interface for session persistence */
61
+ export interface SessionStorage {
62
+ /** Save session data */
63
+ save(data: SessionData): Promise<void>;
64
+ /** Load session by ID, returns null if not found */
65
+ load(id: string): Promise<SessionData | null>;
66
+ /** Delete session by ID */
67
+ delete(id: string): Promise<void>;
68
+ /** List all session IDs */
69
+ list(): Promise<string[]>;
70
+ /** Check if session exists */
71
+ exists(id: string): Promise<boolean>;
72
+ }
73
+ /** File storage options */
74
+ export interface FileStorageOptions {
75
+ /** Directory path for session files (default: ~/.open-agent/sessions) */
76
+ directory?: string;
77
+ }
78
+ /**
79
+ * In-memory storage implementation (default)
80
+ * Data is lost when process exits
81
+ */
82
+ export declare class InMemoryStorage implements SessionStorage {
83
+ private sessions;
84
+ save(data: SessionData): Promise<void>;
85
+ load(id: string): Promise<SessionData | null>;
86
+ delete(id: string): Promise<void>;
87
+ list(): Promise<string[]>;
88
+ exists(id: string): Promise<boolean>;
89
+ }
90
+ /**
91
+ * File-based storage implementation
92
+ * Persists sessions to JSON files
93
+ */
94
+ export declare class FileStorage implements SessionStorage {
95
+ private directory;
96
+ constructor(options?: FileStorageOptions);
97
+ private getFilePath;
98
+ save(data: SessionData): Promise<void>;
99
+ load(id: string): Promise<SessionData | null>;
100
+ delete(id: string): Promise<void>;
101
+ list(): Promise<string[]>;
102
+ exists(id: string): Promise<boolean>;
103
+ private ensureDir;
104
+ }
105
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/session/storage.ts"],"names":[],"mappings":"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"}