@openharness/core 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -8,7 +8,7 @@ OpenHarness is an open source project based on Vercel's AI SDK that aims to prov
8
8
 
9
9
  ## Agents
10
10
 
11
- The `Agent` class is the core primitive. An agent wraps a language model, a set of tools, and a multi-step execution loop into a single object that you can `run()` with a prompt.
11
+ The `Agent` class is the core primitive. An agent wraps a language model, a set of tools, and a multi-step execution loop into a stateless executor that you can `run()` with a message history and new input.
12
12
 
13
13
  ```typescript
14
14
  import { Agent } from "@openharness/core";
@@ -27,10 +27,14 @@ const agent = new Agent({
27
27
 
28
28
  ### Running an agent
29
29
 
30
- `agent.run()` is an async generator that yields a stream of typed events as the agent works. You iterate over these events to build any UI you want a CLI, a web app, a log file, or nothing at all.
30
+ `agent.run()` is an async generator that takes a message history and new input, and yields a stream of typed events as the agent works. The agent is **stateless** it doesn't accumulate messages internally. You pass the conversation history in and get the updated history back in the `done` event.
31
31
 
32
32
  ```typescript
33
- for await (const event of agent.run("Refactor the auth module to use JWTs")) {
33
+ import type { ModelMessage } from "ai";
34
+
35
+ let messages: ModelMessage[] = [];
36
+
37
+ for await (const event of agent.run(messages, "Refactor the auth module to use JWTs")) {
34
38
  switch (event.type) {
35
39
  case "text.delta":
36
40
  process.stdout.write(event.text);
@@ -42,13 +46,14 @@ for await (const event of agent.run("Refactor the auth module to use JWTs")) {
42
46
  console.log(`${event.toolName} finished`);
43
47
  break;
44
48
  case "done":
49
+ messages = event.messages; // capture updated history for next turn
45
50
  console.log(`Result: ${event.result}, tokens: ${event.totalUsage.totalTokens}`);
46
51
  break;
47
52
  }
48
53
  }
49
54
  ```
50
55
 
51
- The agent maintains conversation history across `run()` calls, so you can use it in a loop for multi-turn interactions.
56
+ This makes it easy to build multi-turn interactions — just pass the messages from the previous `done` event into the next `run()` call. It also means you have full control over the conversation history: you can inspect it, modify it, or share it between agents.
52
57
 
53
58
  ### Events
54
59
 
@@ -84,6 +89,185 @@ The full set of events emitted by `run()`:
84
89
  | `subagents` | — | Child agents available via the `task` tool (see [Subagents](#subagents)) |
85
90
  | `mcpServers` | — | MCP servers to connect to (see [MCP Servers](#mcp-servers)) |
86
91
 
92
+ ## Sessions
93
+
94
+ While Agent is a stateless executor, `Session` adds the statefulness and resilience you need for interactive, multi-turn conversations. It owns the message history and handles compaction, retry, persistence, and lifecycle hooks automatically.
95
+
96
+ ```typescript
97
+ import { Session } from "@openharness/core";
98
+
99
+ const session = new Session({
100
+ agent,
101
+ contextWindow: 200_000,
102
+ });
103
+
104
+ for await (const event of session.send("Refactor the auth module")) {
105
+ switch (event.type) {
106
+ case "text.delta":
107
+ process.stdout.write(event.text);
108
+ break;
109
+ case "compaction.done":
110
+ console.log(`Compacted: ${event.tokensBefore} → ${event.tokensAfter} tokens`);
111
+ break;
112
+ case "retry":
113
+ console.log(`Retrying in ${event.delayMs}ms...`);
114
+ break;
115
+ case "turn.done":
116
+ console.log(`Turn ${event.turnNumber} complete`);
117
+ break;
118
+ }
119
+ }
120
+ ```
121
+
122
+ `session.send()` yields all the same `AgentEvent` types as `agent.run()`, plus additional session lifecycle events.
123
+
124
+ ### Session configuration
125
+
126
+ | Option | Default | Description |
127
+ | --- | --- | --- |
128
+ | `agent` | (required) | The `Agent` to use for execution |
129
+ | `contextWindow` | — | Model context window size in tokens. Required for auto-compaction |
130
+ | `reservedTokens` | `min(20_000, agent.maxTokens ?? 20_000)` | Tokens reserved for output |
131
+ | `autoCompact` | `true` when `contextWindow` is set | Enable auto-compaction |
132
+ | `shouldCompact` | — | Custom overflow detection function |
133
+ | `compactionStrategy` | `DefaultCompactionStrategy()` | Custom compaction strategy |
134
+ | `retry` | — | Retry config for transient API errors |
135
+ | `hooks` | — | Lifecycle hooks (see [Hooks](#hooks)) |
136
+ | `sessionStore` | — | Pluggable persistence backend |
137
+ | `sessionId` | auto-generated UUID | Session identifier |
138
+
139
+ ### Session events
140
+
141
+ In addition to all `AgentEvent` types, `session.send()` yields:
142
+
143
+ | Event | Description |
144
+ | --- | --- |
145
+ | `turn.start` | A new turn is starting |
146
+ | `turn.done` | Turn completed (includes token usage) |
147
+ | `compaction.start` | Compaction triggered (includes reason and token count) |
148
+ | `compaction.pruned` | Tool results pruned (phase 1) |
149
+ | `compaction.summary` | Conversation summarized (phase 2) |
150
+ | `compaction.done` | Compaction finished (includes before/after token counts) |
151
+ | `retry` | Retrying after a transient error (includes attempt count and delay) |
152
+
153
+ ### Compaction
154
+
155
+ When a conversation approaches the context window limit, the session automatically compacts the message history. The default strategy works in two phases:
156
+
157
+ 1. **Pruning** — replaces tool result content in older messages with `"[pruned]"`, preserving the most recent ~40K tokens of context. No LLM call needed.
158
+ 2. **Summarization** — when pruning isn't enough, calls the model to generate a structured summary and replaces the entire history with it.
159
+
160
+ You can customize compaction at multiple levels:
161
+
162
+ ```typescript
163
+ import { DefaultCompactionStrategy } from "@openharness/core";
164
+
165
+ // Tune the default strategy
166
+ const session = new Session({
167
+ agent,
168
+ contextWindow: 128_000,
169
+ compactionStrategy: new DefaultCompactionStrategy({
170
+ protectedTokens: 60_000, // protect more recent context
171
+ summaryModel: cheapModel, // use a cheaper model for summarization
172
+ }),
173
+ });
174
+
175
+ // Or replace the strategy entirely
176
+ const session = new Session({
177
+ agent,
178
+ contextWindow: 128_000,
179
+ compactionStrategy: {
180
+ async compact(context) {
181
+ // your own compaction logic
182
+ return { messages: [...], messagesRemoved: 0, tokensPruned: 0 };
183
+ },
184
+ },
185
+ });
186
+
187
+ // Or go fully manual
188
+ const session = new Session({ agent, autoCompact: false });
189
+ // ...later:
190
+ for await (const event of session.compact()) { ... }
191
+ ```
192
+
193
+ ### Retry
194
+
195
+ Transient API errors (429, 500, 502, 503, 504, 529, rate limits, timeouts) are retried automatically with exponential backoff and jitter. Retries only happen **before** any content has been streamed to the consumer — once the model starts producing output, the session commits to that attempt.
196
+
197
+ ```typescript
198
+ const session = new Session({
199
+ agent,
200
+ retry: {
201
+ maxRetries: 5,
202
+ initialDelayMs: 2000,
203
+ maxDelayMs: 60_000,
204
+ isRetryable: (error) => error.message.includes("overloaded"),
205
+ },
206
+ });
207
+ ```
208
+
209
+ ### Hooks
210
+
211
+ Hooks let you intercept and customize the session lifecycle:
212
+
213
+ ```typescript
214
+ const session = new Session({
215
+ agent,
216
+ hooks: {
217
+ // Modify messages before each LLM call
218
+ onBeforeSend: (messages) => {
219
+ return messages.filter(m => !isStale(m));
220
+ },
221
+ // Post-processing after each turn
222
+ onAfterResponse: ({ turnNumber, messages, usage }) => {
223
+ console.log(`Turn ${turnNumber}: ${usage.totalTokens} tokens`);
224
+ },
225
+ // Custom compaction prompt
226
+ onCompaction: (context) => {
227
+ return "Summarize with emphasis on code changes and file paths.";
228
+ },
229
+ // Custom error handling (return true to suppress)
230
+ onError: (error, attempt) => {
231
+ logger.warn(`Attempt ${attempt} failed: ${error.message}`);
232
+ },
233
+ },
234
+ });
235
+ ```
236
+
237
+ ### Persistence
238
+
239
+ Plug in any storage backend by implementing the `SessionStore` interface:
240
+
241
+ ```typescript
242
+ const session = new Session({
243
+ agent,
244
+ sessionId: "user-123-conversation-1",
245
+ sessionStore: {
246
+ async load(id) { return db.get(id); },
247
+ async save(id, messages) { await db.set(id, messages); },
248
+ async delete(id) { await db.del(id); },
249
+ },
250
+ });
251
+
252
+ // Restore a previous session
253
+ await session.load();
254
+
255
+ // Messages are auto-saved after each turn, or save manually:
256
+ await session.save();
257
+ ```
258
+
259
+ ### Direct state access
260
+
261
+ The session's message history is directly readable and writable:
262
+
263
+ ```typescript
264
+ // Read current state
265
+ console.log(session.messages.length, session.turns, session.totalUsage);
266
+
267
+ // Inject or modify messages
268
+ session.messages.push({ role: "user", content: "Remember: always use TypeScript." });
269
+ ```
270
+
87
271
  ## Tools
88
272
 
89
273
  Tools use the Vercel AI SDK `tool()` helper with Zod schemas. OpenHarness ships a set of built-in tools that you can use as-is, compose, or replace entirely.
@@ -241,7 +425,7 @@ const agent = new Agent({
241
425
  });
242
426
 
243
427
  // MCP connections are established lazily on first run()
244
- for await (const event of agent.run("What PRs are open?")) { ... }
428
+ for await (const event of agent.run([], "What PRs are open?")) { ... }
245
429
 
246
430
  // Clean up MCP connections when done
247
431
  await agent.close();
@@ -259,7 +443,7 @@ When multiple MCP servers are configured, tools are namespaced as `serverName_to
259
443
 
260
444
  ## Example CLI
261
445
 
262
- [`example/cli.ts`](example/cli.ts) is a fully working agent CLI that ties everything together — tool approval prompts, ora spinners, streamed output, and live subagent display. It's a good reference for how to wire up all the primitives into an interactive application.
446
+ [`example/cli.ts`](example/cli.ts) is a fully working agent CLI that ties everything together — a `Session` wrapping an `Agent` with tool approval prompts, ora spinners, streamed output, live subagent display, and a `/compact` command for manual compaction. It's a good reference for how to wire up all the primitives into an interactive application.
263
447
 
264
448
  ```bash
265
449
  # requires a .env file with OPENAI_API_KEY
package/dist/agent.d.ts CHANGED
@@ -77,7 +77,6 @@ export declare class Agent {
77
77
  /** MCP server configs — connected lazily on first run. */
78
78
  private mcpServerConfigs?;
79
79
  private mcpConnection;
80
- private messages;
81
80
  private cachedInstructions;
82
81
  constructor(options: {
83
82
  name: string;
@@ -112,7 +111,7 @@ export declare class Agent {
112
111
  * Close all MCP server connections. Call this when the agent is no longer needed.
113
112
  */
114
113
  close(): Promise<void>;
115
- run(input: string | ModelMessage[], options?: {
114
+ run(history: ModelMessage[], input: string | ModelMessage[], options?: {
116
115
  signal?: AbortSignal;
117
116
  }): AsyncGenerator<AgentEvent>;
118
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -19,7 +19,6 @@ export class Agent {
19
19
  /** MCP server configs — connected lazily on first run. */
20
20
  mcpServerConfigs;
21
21
  mcpConnection = null;
22
- messages = [];
23
22
  cachedInstructions = null; // null = not loaded yet
24
23
  constructor(options) {
25
24
  this.name = options.name;
@@ -53,12 +52,14 @@ export class Agent {
53
52
  this.mcpConnection = null;
54
53
  }
55
54
  }
56
- async *run(input, options) {
55
+ async *run(history, input, options) {
56
+ // Build messages: history + new input (Agent does NOT mutate history)
57
+ const messages = [...history];
57
58
  if (typeof input === "string") {
58
- this.messages.push({ role: "user", content: input });
59
+ messages.push({ role: "user", content: input });
59
60
  }
60
61
  else {
61
- this.messages.push(...input);
62
+ messages.push(...input);
62
63
  }
63
64
  // Load AGENTS.md once per agent lifetime
64
65
  if (this.instructions && this.cachedInstructions === null) {
@@ -83,7 +84,7 @@ export class Agent {
83
84
  const stream = streamText({
84
85
  model: this.model,
85
86
  system,
86
- messages: this.messages,
87
+ messages,
87
88
  tools,
88
89
  stopWhen: stepCountIs(this.maxSteps),
89
90
  temperature: this.temperature,
@@ -167,11 +168,11 @@ export class Agent {
167
168
  ? "error"
168
169
  : "stopped";
169
170
  const response = await stream.response;
170
- this.messages.push(...response.messages);
171
+ messages.push(...response.messages);
171
172
  yield {
172
173
  type: "done",
173
174
  result,
174
- messages: this.messages,
175
+ messages,
175
176
  totalUsage: toTokenUsage(part.totalUsage),
176
177
  };
177
178
  break;
@@ -187,7 +188,7 @@ export class Agent {
187
188
  yield {
188
189
  type: "done",
189
190
  result: "error",
190
- messages: this.messages,
191
+ messages,
191
192
  totalUsage: { inputTokens: undefined, outputTokens: undefined, totalTokens: undefined },
192
193
  };
193
194
  }
@@ -227,7 +228,7 @@ function createTaskTool(subagents, onSubagentEvent) {
227
228
  // No subagents — prevent recursive nesting
228
229
  });
229
230
  let lastText = "";
230
- for await (const event of child.run(prompt, { signal: abortSignal })) {
231
+ for await (const event of child.run([], prompt, { signal: abortSignal })) {
231
232
  onSubagentEvent?.(agentName, event);
232
233
  if (event.type === "text.done") {
233
234
  lastText = event.text;
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { Agent, ToolDeniedError, type AgentEvent, type TokenUsage, type ToolCallInfo, type ApproveFn, type SubagentEventFn, } from "./agent.js";
2
2
  export { connectMCPServers, closeMCPClients, type MCPServerConfig, type MCPConnection, type StdioMCPServer, type HttpMCPServer, type SseMCPServer, } from "./mcp.js";
3
+ export { Session, DefaultCompactionStrategy, type SessionEvent, type SessionLifecycleEvent, type SessionOptions, type CompactionStrategy, type CompactionContext, type CompactionResult, type RetryConfig, type SessionHooks, type TurnInfo, type SessionStore, type CompactionCheckInfo, } from "./session.js";
3
4
  export { findInstructions, loadInstructions } from "./instructions.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAIlB,OAAO,EACL,OAAO,EACP,yBAAyB,EACzB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,8 @@
2
2
  export { Agent, ToolDeniedError, } from "./agent.js";
3
3
  // ── MCP ─────────────────────────────────────────────────────────────
4
4
  export { connectMCPServers, closeMCPClients, } from "./mcp.js";
5
+ // ── Session ─────────────────────────────────────────────────────────
6
+ export { Session, DefaultCompactionStrategy, } from "./session.js";
5
7
  // ── Instructions ────────────────────────────────────────────────────
6
8
  export { findInstructions, loadInstructions } from "./instructions.js";
7
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EACL,KAAK,EACL,eAAe,GAMhB,MAAM,YAAY,CAAC;AAEpB,uEAAuE;AAEvE,OAAO,EACL,iBAAiB,EACjB,eAAe,GAMhB,MAAM,UAAU,CAAC;AAElB,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EACL,KAAK,EACL,eAAe,GAMhB,MAAM,YAAY,CAAC;AAEpB,uEAAuE;AAEvE,OAAO,EACL,iBAAiB,EACjB,eAAe,GAMhB,MAAM,UAAU,CAAC;AAElB,uEAAuE;AAEvE,OAAO,EACL,OAAO,EACP,yBAAyB,GAY1B,MAAM,cAAc,CAAC;AAEtB,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,159 @@
1
+ import { type LanguageModel, type ModelMessage } from "ai";
2
+ import { Agent, type AgentEvent, type TokenUsage } from "./agent.js";
3
+ export type SessionEvent = AgentEvent | SessionLifecycleEvent;
4
+ export type SessionLifecycleEvent = {
5
+ type: "turn.start";
6
+ turnNumber: number;
7
+ } | {
8
+ type: "turn.done";
9
+ turnNumber: number;
10
+ usage: TokenUsage;
11
+ } | {
12
+ type: "compaction.start";
13
+ reason: "overflow" | "manual";
14
+ tokensBefore: number;
15
+ } | {
16
+ type: "compaction.pruned";
17
+ tokensRemoved: number;
18
+ messagesRemoved: number;
19
+ } | {
20
+ type: "compaction.summary";
21
+ summary: string;
22
+ } | {
23
+ type: "compaction.done";
24
+ tokensBefore: number;
25
+ tokensAfter: number;
26
+ } | {
27
+ type: "retry";
28
+ attempt: number;
29
+ maxRetries: number;
30
+ delayMs: number;
31
+ error: Error;
32
+ };
33
+ export interface CompactionStrategy {
34
+ compact(context: CompactionContext): Promise<CompactionResult>;
35
+ }
36
+ export interface CompactionContext {
37
+ messages: ModelMessage[];
38
+ model: LanguageModel;
39
+ systemPrompt: string | undefined;
40
+ totalTokens: number;
41
+ targetTokens: number;
42
+ compactionPrompt?: string;
43
+ signal?: AbortSignal;
44
+ }
45
+ export interface CompactionResult {
46
+ messages: ModelMessage[];
47
+ summary?: string;
48
+ messagesRemoved: number;
49
+ tokensPruned: number;
50
+ }
51
+ export interface SessionStore {
52
+ load(sessionId: string): Promise<ModelMessage[] | undefined>;
53
+ save(sessionId: string, messages: ModelMessage[]): Promise<void>;
54
+ delete?(sessionId: string): Promise<void>;
55
+ }
56
+ export interface RetryConfig {
57
+ maxRetries: number;
58
+ initialDelayMs: number;
59
+ maxDelayMs: number;
60
+ backoffMultiplier: number;
61
+ isRetryable?: (error: Error) => boolean;
62
+ }
63
+ export interface SessionHooks {
64
+ /** Modify messages before each LLM call. */
65
+ onBeforeSend?: (messages: ModelMessage[]) => ModelMessage[] | Promise<ModelMessage[]>;
66
+ /** Called after each turn completes. */
67
+ onAfterResponse?: (info: TurnInfo) => void | Promise<void>;
68
+ /** Return a custom prompt for the compaction summarizer. */
69
+ onCompaction?: (context: CompactionContext) => string | undefined | Promise<string | undefined>;
70
+ /** Called on errors. Return true to suppress the error. */
71
+ onError?: (error: Error, attempt: number) => boolean | void | Promise<boolean | void>;
72
+ }
73
+ export interface TurnInfo {
74
+ turnNumber: number;
75
+ messages: ModelMessage[];
76
+ usage: TokenUsage;
77
+ }
78
+ export interface CompactionCheckInfo {
79
+ lastInputTokens: number;
80
+ contextWindow: number;
81
+ reservedTokens: number;
82
+ messages: ModelMessage[];
83
+ turnNumber: number;
84
+ }
85
+ export interface SessionOptions {
86
+ agent: Agent;
87
+ /** Model context window size in tokens. Required for auto-compaction. */
88
+ contextWindow?: number;
89
+ /** Tokens reserved for output. Default: min(20_000, agent.maxTokens ?? 20_000). */
90
+ reservedTokens?: number;
91
+ /** Enable auto-compaction. Default: true (when contextWindow is set). */
92
+ autoCompact?: boolean;
93
+ /** Custom overflow detection function. */
94
+ shouldCompact?: (info: CompactionCheckInfo) => boolean;
95
+ /** Custom compaction strategy. Default: DefaultCompactionStrategy(). */
96
+ compactionStrategy?: CompactionStrategy;
97
+ /** Retry config for transient API errors. */
98
+ retry?: Partial<RetryConfig>;
99
+ /** Lifecycle hooks. */
100
+ hooks?: SessionHooks;
101
+ /** Pluggable persistence. In-memory only when omitted. */
102
+ sessionStore?: SessionStore;
103
+ /** Session ID. Auto-generated UUID when omitted. */
104
+ sessionId?: string;
105
+ }
106
+ export declare class DefaultCompactionStrategy implements CompactionStrategy {
107
+ private protectedTokens;
108
+ private minPruneSavings;
109
+ private summaryModel?;
110
+ private summaryPrompt?;
111
+ private estimateTokens;
112
+ constructor(options?: {
113
+ /** Estimated tokens to protect at the end of conversation. Default: 40_000. */
114
+ protectedTokens?: number;
115
+ /** Minimum token savings for pruning-only compaction. Default: 20_000. */
116
+ minPruneSavings?: number;
117
+ /** Model to use for summarization. Defaults to the agent's model (from context). */
118
+ summaryModel?: LanguageModel;
119
+ /** Custom summarization prompt. Can also be set via onCompaction hook. */
120
+ summaryPrompt?: string;
121
+ /** Custom token estimator. Default: JSON.stringify(msg).length / 4. */
122
+ estimateTokens?: (messages: ModelMessage[]) => number;
123
+ });
124
+ compact(context: CompactionContext): Promise<CompactionResult>;
125
+ }
126
+ export declare class Session {
127
+ readonly agent: Agent;
128
+ readonly sessionId: string;
129
+ /** The conversation messages. Directly readable and replaceable. */
130
+ messages: ModelMessage[];
131
+ private _turns;
132
+ private _totalUsage;
133
+ private contextWindow?;
134
+ private reservedTokens;
135
+ private autoCompact;
136
+ private shouldCompactFn?;
137
+ private compactionStrategy;
138
+ private retryConfig;
139
+ private hooks;
140
+ private sessionStore?;
141
+ private lastInputTokens;
142
+ constructor(options: SessionOptions);
143
+ get turns(): number;
144
+ get totalUsage(): TokenUsage;
145
+ /** Load session from store. */
146
+ load(): Promise<boolean>;
147
+ /** Save session to store. */
148
+ save(): Promise<void>;
149
+ /** Send a message. Handles compaction + retry automatically. */
150
+ send(input: string | ModelMessage[], options?: {
151
+ signal?: AbortSignal;
152
+ }): AsyncGenerator<SessionEvent>;
153
+ /** Manually trigger compaction. */
154
+ compact(options?: {
155
+ signal?: AbortSignal;
156
+ }): AsyncGenerator<SessionLifecycleEvent>;
157
+ private shouldCompactCheck;
158
+ }
159
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,350 @@
1
+ import { generateText } from "ai";
2
+ const DEFAULT_RETRY = {
3
+ maxRetries: 3,
4
+ initialDelayMs: 1000,
5
+ maxDelayMs: 30_000,
6
+ backoffMultiplier: 2,
7
+ };
8
+ // ── Default Compaction Strategy ─────────────────────────────────────
9
+ const DEFAULT_SUMMARY_PROMPT = `Summarize this conversation for the next agent turn:
10
+ 1. Goal: What the user is trying to accomplish
11
+ 2. Instructions: Key directives and constraints mentioned
12
+ 3. Discoveries: Important findings during the conversation
13
+ 4. Accomplished: What's been completed, files changed, actions taken
14
+ 5. Current State: Where things stand, pending work
15
+ 6. Relevant Context: File paths, code snippets, specific details needed to continue`;
16
+ export class DefaultCompactionStrategy {
17
+ protectedTokens;
18
+ minPruneSavings;
19
+ summaryModel;
20
+ summaryPrompt;
21
+ estimateTokens;
22
+ constructor(options) {
23
+ this.protectedTokens = options?.protectedTokens ?? 40_000;
24
+ this.minPruneSavings = options?.minPruneSavings ?? 20_000;
25
+ this.summaryModel = options?.summaryModel;
26
+ this.summaryPrompt = options?.summaryPrompt;
27
+ this.estimateTokens = options?.estimateTokens ?? defaultEstimateTokens;
28
+ }
29
+ async compact(context) {
30
+ // Phase 1: Pruning
31
+ const pruned = pruneToolResults(context.messages, this.protectedTokens, this.minPruneSavings, this.estimateTokens);
32
+ if (pruned.tokensSaved >= this.minPruneSavings) {
33
+ return {
34
+ messages: pruned.messages,
35
+ messagesRemoved: 0,
36
+ tokensPruned: pruned.tokensSaved,
37
+ };
38
+ }
39
+ // Phase 2: Summarization
40
+ const model = this.summaryModel ?? context.model;
41
+ const prompt = context.compactionPrompt ?? this.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
42
+ const conversationText = context.messages
43
+ .map((m) => `${m.role}: ${JSON.stringify(m.content)}`)
44
+ .join("\n");
45
+ const { text: summary } = await generateText({
46
+ model,
47
+ system: prompt,
48
+ messages: [{ role: "user", content: conversationText }],
49
+ abortSignal: context.signal,
50
+ });
51
+ const summaryMessages = [
52
+ {
53
+ role: "user",
54
+ content: `[Previous conversation summary]\n\n${summary}\n\n[The conversation continues from here]`,
55
+ },
56
+ ];
57
+ return {
58
+ messages: summaryMessages,
59
+ summary,
60
+ messagesRemoved: context.messages.length - 1,
61
+ tokensPruned: this.estimateTokens(context.messages) - this.estimateTokens(summaryMessages),
62
+ };
63
+ }
64
+ }
65
+ function estimateMessageTokens(msg, estimator) {
66
+ return estimator([msg]);
67
+ }
68
+ function pruneToolResults(messages, protectedTokens, minSavings, estimateTokens) {
69
+ const result = structuredClone(messages);
70
+ let accumulated = 0;
71
+ let boundary = result.length;
72
+ // Find protection boundary (walk backward)
73
+ for (let i = result.length - 1; i >= 0; i--) {
74
+ accumulated += estimateMessageTokens(result[i], estimateTokens);
75
+ if (accumulated >= protectedTokens) {
76
+ boundary = i;
77
+ break;
78
+ }
79
+ }
80
+ // Prune tool results before boundary
81
+ let tokensSaved = 0;
82
+ let modified = 0;
83
+ for (let i = 0; i < boundary; i++) {
84
+ if (result[i].role === "tool") {
85
+ const before = estimateMessageTokens(result[i], estimateTokens);
86
+ const content = result[i].content;
87
+ if (Array.isArray(content)) {
88
+ result[i].content = content.map((part) => part.type === "tool-result" ? { ...part, result: "[pruned]" } : part);
89
+ }
90
+ const after = estimateMessageTokens(result[i], estimateTokens);
91
+ tokensSaved += before - after;
92
+ modified++;
93
+ }
94
+ }
95
+ if (tokensSaved < minSavings) {
96
+ return { messages, tokensSaved: 0, messagesModified: 0 };
97
+ }
98
+ return { messages: result, tokensSaved, messagesModified: modified };
99
+ }
100
+ function defaultEstimateTokens(messages) {
101
+ return Math.ceil(JSON.stringify(messages).length / 4);
102
+ }
103
+ // ── Retry helpers ───────────────────────────────────────────────────
104
+ function isRetryableError(error) {
105
+ const msg = error.message.toLowerCase();
106
+ return (/429|500|502|503|504|529/.test(msg) ||
107
+ msg.includes("rate limit") ||
108
+ msg.includes("timeout") ||
109
+ msg.includes("econnreset") ||
110
+ msg.includes("overloaded"));
111
+ }
112
+ function getRetryDelay(attempt, config, error) {
113
+ const retryAfter = error.headers?.["retry-after"];
114
+ if (retryAfter)
115
+ return Math.min(parseInt(retryAfter) * 1000, config.maxDelayMs);
116
+ const base = config.initialDelayMs * config.backoffMultiplier ** attempt;
117
+ const jitter = Math.random() * 0.3 * base;
118
+ return Math.min(base + jitter, config.maxDelayMs);
119
+ }
120
+ function sleep(ms, signal) {
121
+ return new Promise((resolve, reject) => {
122
+ if (signal?.aborted) {
123
+ reject(signal.reason);
124
+ return;
125
+ }
126
+ const timer = setTimeout(resolve, ms);
127
+ signal?.addEventListener("abort", () => {
128
+ clearTimeout(timer);
129
+ reject(signal.reason);
130
+ }, { once: true });
131
+ });
132
+ }
133
+ function addUsage(a, b) {
134
+ return {
135
+ inputTokens: (a.inputTokens ?? 0) + (b.inputTokens ?? 0),
136
+ outputTokens: (a.outputTokens ?? 0) + (b.outputTokens ?? 0),
137
+ totalTokens: (a.totalTokens ?? 0) + (b.totalTokens ?? 0),
138
+ };
139
+ }
140
+ // ── Session ─────────────────────────────────────────────────────────
141
+ export class Session {
142
+ agent;
143
+ sessionId;
144
+ /** The conversation messages. Directly readable and replaceable. */
145
+ messages = [];
146
+ _turns = 0;
147
+ _totalUsage = {
148
+ inputTokens: 0,
149
+ outputTokens: 0,
150
+ totalTokens: 0,
151
+ };
152
+ contextWindow;
153
+ reservedTokens;
154
+ autoCompact;
155
+ shouldCompactFn;
156
+ compactionStrategy;
157
+ retryConfig;
158
+ hooks;
159
+ sessionStore;
160
+ lastInputTokens = 0;
161
+ constructor(options) {
162
+ this.agent = options.agent;
163
+ this.sessionId = options.sessionId ?? crypto.randomUUID();
164
+ this.contextWindow = options.contextWindow;
165
+ this.reservedTokens =
166
+ options.reservedTokens ?? Math.min(20_000, options.agent.maxTokens ?? 20_000);
167
+ this.autoCompact = options.autoCompact ?? options.contextWindow !== undefined;
168
+ this.shouldCompactFn = options.shouldCompact;
169
+ this.compactionStrategy =
170
+ options.compactionStrategy ?? new DefaultCompactionStrategy();
171
+ this.retryConfig = { ...DEFAULT_RETRY, ...options.retry };
172
+ this.hooks = options.hooks ?? {};
173
+ this.sessionStore = options.sessionStore;
174
+ }
175
+ get turns() {
176
+ return this._turns;
177
+ }
178
+ get totalUsage() {
179
+ return this._totalUsage;
180
+ }
181
+ /** Load session from store. */
182
+ async load() {
183
+ if (!this.sessionStore)
184
+ return false;
185
+ const loaded = await this.sessionStore.load(this.sessionId);
186
+ if (loaded) {
187
+ this.messages = loaded;
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ /** Save session to store. */
193
+ async save() {
194
+ if (!this.sessionStore)
195
+ return;
196
+ await this.sessionStore.save(this.sessionId, this.messages);
197
+ }
198
+ /** Send a message. Handles compaction + retry automatically. */
199
+ async *send(input, options) {
200
+ this._turns++;
201
+ const turnNumber = this._turns;
202
+ yield { type: "turn.start", turnNumber };
203
+ // Auto-compaction check
204
+ if (this.autoCompact && this.contextWindow && this.shouldCompactCheck()) {
205
+ yield* this.compact({ signal: options?.signal });
206
+ }
207
+ // Hook: onBeforeSend
208
+ let effectiveMessages = this.messages;
209
+ if (this.hooks.onBeforeSend) {
210
+ effectiveMessages = await this.hooks.onBeforeSend([...this.messages]);
211
+ }
212
+ const snapshot = [...this.messages];
213
+ const { maxRetries } = this.retryConfig;
214
+ const isRetryable = this.retryConfig.isRetryable ?? isRetryableError;
215
+ let turnUsage = {
216
+ inputTokens: undefined,
217
+ outputTokens: undefined,
218
+ totalTokens: undefined,
219
+ };
220
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
221
+ let hasYieldedContent = false;
222
+ let shouldRetry = false;
223
+ try {
224
+ for await (const event of this.agent.run(effectiveMessages, input, {
225
+ signal: options?.signal,
226
+ })) {
227
+ if (event.type === "text.delta" || event.type === "tool.start") {
228
+ hasYieldedContent = true;
229
+ }
230
+ if (event.type === "step.done") {
231
+ this.lastInputTokens = event.usage.inputTokens ?? 0;
232
+ }
233
+ if (event.type === "error" &&
234
+ !hasYieldedContent &&
235
+ isRetryable(event.error) &&
236
+ attempt < maxRetries) {
237
+ const delayMs = getRetryDelay(attempt, this.retryConfig, event.error);
238
+ const suppressed = await this.hooks.onError?.(event.error, attempt);
239
+ yield {
240
+ type: "retry",
241
+ attempt,
242
+ maxRetries,
243
+ delayMs,
244
+ error: event.error,
245
+ };
246
+ this.messages = [...snapshot];
247
+ await sleep(delayMs, options?.signal);
248
+ shouldRetry = true;
249
+ break;
250
+ }
251
+ if (event.type === "done") {
252
+ this.messages = event.messages;
253
+ turnUsage = event.totalUsage;
254
+ yield event;
255
+ break;
256
+ }
257
+ yield event;
258
+ }
259
+ }
260
+ catch (thrown) {
261
+ const error = thrown instanceof Error ? thrown : new Error(String(thrown));
262
+ if (!hasYieldedContent && isRetryable(error) && attempt < maxRetries) {
263
+ const delayMs = getRetryDelay(attempt, this.retryConfig, error);
264
+ await this.hooks.onError?.(error, attempt);
265
+ yield {
266
+ type: "retry",
267
+ attempt,
268
+ maxRetries,
269
+ delayMs,
270
+ error,
271
+ };
272
+ this.messages = [...snapshot];
273
+ await sleep(delayMs, options?.signal);
274
+ continue;
275
+ }
276
+ throw thrown;
277
+ }
278
+ if (shouldRetry)
279
+ continue;
280
+ break;
281
+ }
282
+ // Hook: onAfterResponse
283
+ if (this.hooks.onAfterResponse) {
284
+ await this.hooks.onAfterResponse({
285
+ turnNumber,
286
+ messages: this.messages,
287
+ usage: turnUsage,
288
+ });
289
+ }
290
+ // Persist
291
+ if (this.sessionStore) {
292
+ await this.sessionStore.save(this.sessionId, this.messages);
293
+ }
294
+ this._totalUsage = addUsage(this._totalUsage, turnUsage);
295
+ yield { type: "turn.done", turnNumber, usage: turnUsage };
296
+ }
297
+ /** Manually trigger compaction. */
298
+ async *compact(options) {
299
+ const reason = this.shouldCompactCheck() ? "overflow" : "manual";
300
+ const tokensBefore = defaultEstimateTokens(this.messages);
301
+ yield { type: "compaction.start", reason, tokensBefore };
302
+ // Get custom prompt from hook
303
+ const context = {
304
+ messages: this.messages,
305
+ model: this.agent.model,
306
+ systemPrompt: this.agent.systemPrompt,
307
+ totalTokens: tokensBefore,
308
+ targetTokens: this.contextWindow
309
+ ? this.contextWindow - this.reservedTokens
310
+ : tokensBefore / 2,
311
+ signal: options?.signal,
312
+ };
313
+ if (this.hooks.onCompaction) {
314
+ const customPrompt = await this.hooks.onCompaction(context);
315
+ if (customPrompt) {
316
+ context.compactionPrompt = customPrompt;
317
+ }
318
+ }
319
+ const result = await this.compactionStrategy.compact(context);
320
+ if (result.tokensPruned > 0) {
321
+ yield {
322
+ type: "compaction.pruned",
323
+ tokensRemoved: result.tokensPruned,
324
+ messagesRemoved: result.messagesRemoved,
325
+ };
326
+ }
327
+ if (result.summary) {
328
+ yield { type: "compaction.summary", summary: result.summary };
329
+ }
330
+ this.messages = result.messages;
331
+ const tokensAfter = defaultEstimateTokens(this.messages);
332
+ yield { type: "compaction.done", tokensBefore, tokensAfter };
333
+ }
334
+ shouldCompactCheck() {
335
+ if (!this.contextWindow)
336
+ return false;
337
+ const info = {
338
+ lastInputTokens: this.lastInputTokens,
339
+ contextWindow: this.contextWindow,
340
+ reservedTokens: this.reservedTokens,
341
+ messages: this.messages,
342
+ turnNumber: this._turns,
343
+ };
344
+ if (this.shouldCompactFn) {
345
+ return this.shouldCompactFn(info);
346
+ }
347
+ return this.lastInputTokens >= this.contextWindow - this.reservedTokens;
348
+ }
349
+ }
350
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openharness/core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "Building blocks for capable, general-purpose agents",
6
6
  "exports": {