@minpeter/pss-runtime 0.0.0 → 0.0.2
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 +105 -4
- package/dist/agent.d.ts +14 -6
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +30 -10
- package/dist/agent.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +15 -4
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +1 -9
- package/dist/llm.js.map +1 -1
- package/dist/session/history.d.ts +2 -0
- package/dist/session/history.d.ts.map +1 -1
- package/dist/session/history.js +17 -0
- package/dist/session/history.js.map +1 -1
- package/dist/session/session.d.ts +7 -2
- package/dist/session/session.d.ts.map +1 -1
- package/dist/session/session.js +254 -28
- package/dist/session/session.js.map +1 -1
- package/package.json +2 -4
- package/dist/env.d.ts +0 -6
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -8
- package/dist/env.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,14 +3,115 @@
|
|
|
3
3
|
Reusable pss-next agent runtime for sessions, model loops, and event streams.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
|
-
import { Agent } from "@minpeter/pss-runtime";
|
|
6
|
+
import { Agent, type AgentModel } from "@minpeter/pss-runtime";
|
|
7
7
|
|
|
8
|
+
const model: AgentModel = createYourLanguageModel();
|
|
8
9
|
const agent = new Agent({
|
|
9
10
|
instructions: "Answer briefly.",
|
|
11
|
+
model,
|
|
10
12
|
});
|
|
11
13
|
const session = agent.createSession();
|
|
12
14
|
```
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
The runtime does not read environment variables or create a default provider.
|
|
17
|
+
Pass a caller-owned `LanguageModel` through `model`, or pass a custom `llm`.
|
|
18
|
+
Product tools are intentionally not included; pass tools from a separate package
|
|
19
|
+
when constructing an `Agent`.
|
|
20
|
+
|
|
21
|
+
## Session history
|
|
22
|
+
|
|
23
|
+
Use `history` when the caller already owns the stored model-message history and
|
|
24
|
+
needs a new `AgentSession` to continue from that state. This is the best fit for
|
|
25
|
+
stateless request handlers, background jobs, and tests that persist history
|
|
26
|
+
outside the runtime.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { type AgentMessage } from "@minpeter/pss-runtime";
|
|
30
|
+
|
|
31
|
+
const history: AgentMessage[] = [
|
|
32
|
+
{ role: "user", content: "Hello!" },
|
|
33
|
+
{ role: "assistant", content: "Hi! How can I help you today?" },
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const session = agent.createSession({ history });
|
|
37
|
+
|
|
38
|
+
const currentHistory: AgentMessage[] = session.getHistory();
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`getHistory()` returns a cloned snapshot, so callers can persist or inspect it
|
|
42
|
+
without mutating the session.
|
|
43
|
+
|
|
44
|
+
### Reactive storage synchronization
|
|
45
|
+
|
|
46
|
+
Use `onHistoryChange` when the host should persist every history mutation as the
|
|
47
|
+
turn runs. Calls are serialized, receive the mutation-time snapshot, and are
|
|
48
|
+
awaited before `submit()` resolves, rejects, or advances to the next queued
|
|
49
|
+
turn. If persistence fails, the turn rolls back in-memory history and surfaces a
|
|
50
|
+
`turn-error`.
|
|
51
|
+
|
|
52
|
+
This is the best fit for stateful serverless hosts such as Cloudflare Durable
|
|
53
|
+
Objects, where a long-lived session mirrors history into Durable Object Storage,
|
|
54
|
+
SQLite, or another caller-owned store.
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { Agent, type AgentMessage, type AgentSession } from "@minpeter/pss-runtime";
|
|
58
|
+
|
|
59
|
+
export class AgentDurableObject {
|
|
60
|
+
private agent: Agent;
|
|
61
|
+
private session: AgentSession | null = null;
|
|
62
|
+
private storage: DurableObjectStorage;
|
|
63
|
+
|
|
64
|
+
constructor(state: DurableObjectState) {
|
|
65
|
+
this.storage = state.storage;
|
|
66
|
+
this.agent = new Agent({
|
|
67
|
+
instructions: "You are a helpful assistant.",
|
|
68
|
+
model: yourLanguageModel,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async fetch(request: Request) {
|
|
73
|
+
if (!this.session) {
|
|
74
|
+
const history =
|
|
75
|
+
(await this.storage.get<AgentMessage[]>("history")) ?? [];
|
|
76
|
+
|
|
77
|
+
this.session = this.agent.createSession({
|
|
78
|
+
history,
|
|
79
|
+
onHistoryChange: async (nextHistory) => {
|
|
80
|
+
await this.storage.put("history", nextHistory);
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Process the incoming request (e.g. submit user text and stream back events).
|
|
86
|
+
// ...
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Safe event subscriptions
|
|
92
|
+
|
|
93
|
+
When subscribing to session events, unsubscribe in a `finally` block to prevent
|
|
94
|
+
listener leaks in persistent environments or multi-turn execution loops.
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
const session = agent.createSession();
|
|
98
|
+
|
|
99
|
+
// Subscribe to events and get the unsubscribe function
|
|
100
|
+
const unsubscribe = session.subscribe((event) => {
|
|
101
|
+
switch (event.type) {
|
|
102
|
+
case "assistant-text":
|
|
103
|
+
process.stdout.write(event.text);
|
|
104
|
+
break;
|
|
105
|
+
case "tool-call":
|
|
106
|
+
console.log(`\nCalling tool: ${event.name}`);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
await session.submit({ type: "user-text", text: "What's the weather today?" });
|
|
113
|
+
} finally {
|
|
114
|
+
// Always clean up to prevent memory/listener leaks!
|
|
115
|
+
unsubscribe();
|
|
116
|
+
}
|
|
117
|
+
```
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import type { LanguageModel } from "ai";
|
|
2
2
|
import { type AgentTools, type Llm } from "./llm";
|
|
3
|
-
import { AgentSession } from "./session/session";
|
|
4
|
-
|
|
3
|
+
import { AgentSession, type SessionOptions } from "./session/session";
|
|
4
|
+
interface AgentModelOptions {
|
|
5
5
|
instructions?: string;
|
|
6
|
-
llm?:
|
|
7
|
-
model
|
|
6
|
+
llm?: never;
|
|
7
|
+
model: LanguageModel;
|
|
8
8
|
tools?: AgentTools;
|
|
9
9
|
}
|
|
10
|
+
interface AgentLlmOptions {
|
|
11
|
+
instructions?: never;
|
|
12
|
+
llm: Llm;
|
|
13
|
+
model?: never;
|
|
14
|
+
tools?: never;
|
|
15
|
+
}
|
|
16
|
+
export type AgentOptions = AgentModelOptions | AgentLlmOptions;
|
|
10
17
|
export declare class Agent {
|
|
11
18
|
#private;
|
|
12
|
-
constructor(options
|
|
13
|
-
createSession(): AgentSession;
|
|
19
|
+
constructor(options: AgentOptions);
|
|
20
|
+
createSession(options?: SessionOptions): AgentSession;
|
|
14
21
|
}
|
|
22
|
+
export {};
|
|
15
23
|
//# sourceMappingURL=agent.d.ts.map
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,KAAK,UAAU,EAAa,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,KAAK,UAAU,EAAa,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE/D,qBAAa,KAAK;;gBAGJ,OAAO,EAAE,YAAY;IAYjC,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,YAAY;CAGtD"}
|
package/dist/agent.js
CHANGED
|
@@ -2,17 +2,37 @@ import { createLlm } from "./llm.js";
|
|
|
2
2
|
import { AgentSession } from "./session/session.js";
|
|
3
3
|
export class Agent {
|
|
4
4
|
#llm;
|
|
5
|
-
constructor(options
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
constructor(options) {
|
|
6
|
+
assertAgentOptions(options);
|
|
7
|
+
this.#llm = hasCustomLlm(options)
|
|
8
|
+
? options.llm
|
|
9
|
+
: createLlm({
|
|
10
|
+
instructions: options.instructions,
|
|
11
|
+
model: options.model,
|
|
12
|
+
tools: options.tools,
|
|
13
|
+
});
|
|
13
14
|
}
|
|
14
|
-
createSession() {
|
|
15
|
-
return new AgentSession(this.#llm);
|
|
15
|
+
createSession(options) {
|
|
16
|
+
return new AgentSession(this.#llm, options);
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
function assertAgentOptions(options) {
|
|
20
|
+
if (options === null || typeof options !== "object") {
|
|
21
|
+
throw new TypeError("Agent options are required. Provide either { model } or { llm }.");
|
|
22
|
+
}
|
|
23
|
+
const hasLlm = hasCustomLlm(options);
|
|
24
|
+
const hasModel = "model" in options && options.model !== undefined && options.model !== null;
|
|
25
|
+
if (hasLlm && hasModel) {
|
|
26
|
+
throw new TypeError("Agent constructor: provide either options.llm or options.model, not both.");
|
|
27
|
+
}
|
|
28
|
+
if ("llm" in options && options.llm !== undefined && !hasLlm) {
|
|
29
|
+
throw new TypeError("Agent constructor: invalid options.llm.");
|
|
30
|
+
}
|
|
31
|
+
if (!(hasLlm || hasModel)) {
|
|
32
|
+
throw new TypeError("Agent constructor: missing options.model.");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function hasCustomLlm(options) {
|
|
36
|
+
return "llm" in options && typeof options.llm === "function";
|
|
37
|
+
}
|
|
18
38
|
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,SAAS,EAAY,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,SAAS,EAAY,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAkBtE,MAAM,OAAO,KAAK;IACP,IAAI,CAAM;IAEnB,YAAY,OAAqB;QAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC;YAC/B,CAAC,CAAC,OAAO,CAAC,GAAG;YACb,CAAC,CAAC,SAAS,CAAC;gBACR,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;IACT,CAAC;IAED,aAAa,CAAC,OAAwB;QACpC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CACjB,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GACZ,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IAE9E,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CACjB,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,KAAK,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,UAAU,CAAC;AAC/D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { Agent, type AgentOptions } from "./agent";
|
|
2
2
|
export { type AgentLoopResult, runAgentLoop } from "./agent-loop";
|
|
3
|
-
export type { AgentModel, AgentTools, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, } from "./llm";
|
|
4
|
-
export { createLlm
|
|
3
|
+
export type { AgentMessage, AgentModel, AgentTool, AgentToolExecute, AgentToolExecutionOptions, AgentTools, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, } from "./llm";
|
|
4
|
+
export { createLlm } from "./llm";
|
|
5
5
|
export type { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, ToolCall, ToolResult, UserText, } from "./session/events";
|
|
6
|
-
export { AgentSession, type SessionInput } from "./session/session";
|
|
6
|
+
export { AgentSession, type SessionInput, type SessionOptions, } from "./session/session";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Agent } from "./agent.js";
|
|
2
2
|
export { runAgentLoop } from "./agent-loop.js";
|
|
3
|
-
export { createLlm
|
|
4
|
-
export { AgentSession } from "./session/session.js";
|
|
3
|
+
export { createLlm } from "./llm.js";
|
|
4
|
+
export { AgentSession, } from "./session/session.js";
|
|
5
5
|
//# 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,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AACnD,OAAO,EAAwB,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AACnD,OAAO,EAAwB,YAAY,EAAE,MAAM,cAAc,CAAC;AAclE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUlC,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC"}
|
package/dist/llm.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { LanguageModel, ModelMessage } from "ai";
|
|
2
2
|
import { generateText } from "ai";
|
|
3
|
-
export
|
|
3
|
+
export interface AgentToolExecutionOptions {
|
|
4
|
+
abortSignal?: AbortSignal;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export type AgentToolExecute = unknown;
|
|
8
|
+
export interface AgentTool {
|
|
9
|
+
description?: unknown;
|
|
10
|
+
execute?: AgentToolExecute;
|
|
11
|
+
inputSchema: unknown;
|
|
12
|
+
outputSchema?: unknown;
|
|
13
|
+
}
|
|
14
|
+
export type AgentTools = Record<string, AgentTool>;
|
|
4
15
|
export type AgentModel = LanguageModel;
|
|
16
|
+
export type AgentMessage = ModelMessage;
|
|
5
17
|
export type LlmOutput = Awaited<ReturnType<typeof generateText>>["responseMessages"];
|
|
6
18
|
export type LlmOutputPart = LlmOutput[number];
|
|
7
19
|
export interface LlmContext {
|
|
@@ -11,13 +23,12 @@ export interface LlmContext {
|
|
|
11
23
|
export type Llm = (context: LlmContext) => Promise<LlmOutput>;
|
|
12
24
|
export interface CreateLlmOptions {
|
|
13
25
|
instructions?: string;
|
|
14
|
-
model
|
|
26
|
+
model: LanguageModel;
|
|
15
27
|
tools?: AgentTools;
|
|
16
28
|
}
|
|
17
29
|
export type RuntimeCreateLlmOptions = CreateLlmOptions;
|
|
18
30
|
export type RuntimeLlm = Llm;
|
|
19
31
|
export type RuntimeLlmContext = LlmContext;
|
|
20
32
|
export type RuntimeLlmOutput = LlmOutput;
|
|
21
|
-
export declare
|
|
22
|
-
export declare function createLlm({ model, instructions, tools, }?: CreateLlmOptions): Llm;
|
|
33
|
+
export declare function createLlm({ model, instructions, tools, }: CreateLlmOptions): Llm;
|
|
23
34
|
//# sourceMappingURL=llm.d.ts.map
|
package/dist/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,YAAY,EAAgB,MAAM,IAAI,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC;AACvC,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,OAAO,CAC7B,UAAU,CAAC,OAAO,YAAY,CAAC,CAChC,CAAC,kBAAkB,CAAC,CAAC;AACtB,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC;AAC7B,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC3C,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEzC,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,YAAY,EACZ,KAAK,GACN,EAAE,gBAAgB,GAAG,GAAG,CAcxB"}
|
package/dist/llm.js
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
2
1
|
import { generateText } from "ai";
|
|
3
|
-
|
|
4
|
-
const defaultProvider = createOpenAICompatible({
|
|
5
|
-
name: "custom",
|
|
6
|
-
apiKey: env.AI_API_KEY,
|
|
7
|
-
baseURL: env.AI_BASE_URL,
|
|
8
|
-
});
|
|
9
|
-
export const defaultModel = defaultProvider(env.AI_MODEL);
|
|
10
|
-
export function createLlm({ model = defaultModel, instructions, tools, } = {}) {
|
|
2
|
+
export function createLlm({ model, instructions, tools, }) {
|
|
11
3
|
const runtimeTools = tools;
|
|
12
4
|
return async ({ history, signal }) => {
|
|
13
5
|
const { responseMessages } = await generateText({
|
package/dist/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,IAAI,CAAC;AA0ChD,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,YAAY,EACZ,KAAK,GACY;IACjB,MAAM,YAAY,GAAG,KAA4B,CAAC;IAElD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,YAAY,CAAC;YAC9C,WAAW,EAAE,MAAM;YACnB,YAAY;YACZ,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC;YACtB,KAAK;YACL,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -2,8 +2,10 @@ import type { ModelMessage } from "ai";
|
|
|
2
2
|
import type { UserText } from "./events";
|
|
3
3
|
export declare class AgentModelHistory {
|
|
4
4
|
#private;
|
|
5
|
+
constructor(history?: ModelMessage[], onChange?: (snapshot: ModelMessage[]) => void);
|
|
5
6
|
modelSnapshot(): ModelMessage[];
|
|
6
7
|
appendUserInput(input: UserText): void;
|
|
7
8
|
appendModelMessage(message: ModelMessage): void;
|
|
9
|
+
rollback(snapshot: ModelMessage[]): void;
|
|
8
10
|
}
|
|
9
11
|
//# sourceMappingURL=history.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,qBAAa,iBAAiB;;
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,qBAAa,iBAAiB;;gBAK1B,OAAO,CAAC,EAAE,YAAY,EAAE,EACxB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,IAAI;IAQ/C,aAAa,IAAI,YAAY,EAAE;IAI/B,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAKtC,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAK/C,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;CASzC"}
|
package/dist/session/history.js
CHANGED
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
import { userTextToModelMessage } from "./mapping.js";
|
|
2
2
|
export class AgentModelHistory {
|
|
3
3
|
#modelHistory = [];
|
|
4
|
+
#onChange;
|
|
5
|
+
constructor(history, onChange) {
|
|
6
|
+
if (history) {
|
|
7
|
+
this.#modelHistory = structuredClone(history);
|
|
8
|
+
}
|
|
9
|
+
this.#onChange = onChange;
|
|
10
|
+
}
|
|
4
11
|
modelSnapshot() {
|
|
5
12
|
return structuredClone(this.#modelHistory);
|
|
6
13
|
}
|
|
7
14
|
appendUserInput(input) {
|
|
8
15
|
this.#modelHistory.push(userTextToModelMessage(input));
|
|
16
|
+
this.#triggerChange();
|
|
9
17
|
}
|
|
10
18
|
appendModelMessage(message) {
|
|
11
19
|
this.#modelHistory.push(structuredClone(message));
|
|
20
|
+
this.#triggerChange();
|
|
21
|
+
}
|
|
22
|
+
rollback(snapshot) {
|
|
23
|
+
this.#modelHistory.length = 0;
|
|
24
|
+
this.#modelHistory.push(...structuredClone(snapshot));
|
|
25
|
+
this.#triggerChange();
|
|
26
|
+
}
|
|
27
|
+
#triggerChange() {
|
|
28
|
+
this.#onChange?.(this.modelSnapshot());
|
|
12
29
|
}
|
|
13
30
|
}
|
|
14
31
|
//# sourceMappingURL=history.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,OAAO,iBAAiB;IACnB,aAAa,GAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,OAAO,iBAAiB;IACnB,aAAa,GAAmB,EAAE,CAAC;IACnC,SAAS,CAAsC;IAExD,YACE,OAAwB,EACxB,QAA6C;QAE7C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,aAAa;QACX,OAAO,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,KAAe;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,kBAAkB,CAAC,OAAqB;QACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,QAAwB;QAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import type { Llm } from "../llm";
|
|
1
|
+
import type { AgentMessage, Llm } from "../llm";
|
|
2
2
|
import type { AgentEventListener, UserText } from "./events";
|
|
3
3
|
export type SessionInput = UserText;
|
|
4
|
+
export interface SessionOptions {
|
|
5
|
+
history?: AgentMessage[];
|
|
6
|
+
onHistoryChange?: (history: AgentMessage[]) => void | Promise<void>;
|
|
7
|
+
}
|
|
4
8
|
export declare class AgentSession {
|
|
5
9
|
#private;
|
|
6
|
-
constructor(llm: Llm);
|
|
10
|
+
constructor(llm: Llm, options?: SessionOptions);
|
|
11
|
+
getHistory(): AgentMessage[];
|
|
7
12
|
subscribe(listener: AgentEventListener): () => void;
|
|
8
13
|
submit(input: SessionInput): Promise<void>;
|
|
9
14
|
interrupt(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAc,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAUD,qBAAa,YAAY;;gBAgBX,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc;IAY9C,UAAU,IAAI,YAAY,EAAE;IAI5B,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKnD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1C,SAAS,IAAI,IAAI;IASjB,IAAI,IAAI,IAAI;CAiQb"}
|
package/dist/session/session.js
CHANGED
|
@@ -3,13 +3,28 @@ import { AgentModelHistory } from "./history.js";
|
|
|
3
3
|
export class AgentSession {
|
|
4
4
|
#listeners = new Set();
|
|
5
5
|
#llm;
|
|
6
|
-
#history
|
|
6
|
+
#history;
|
|
7
|
+
#onHistoryChange;
|
|
7
8
|
#inputQueue = [];
|
|
8
9
|
#running = false;
|
|
9
10
|
#activeAbort;
|
|
11
|
+
#killAbort = new AbortController();
|
|
12
|
+
#interruptAbort = new AbortController();
|
|
10
13
|
#killed = false;
|
|
11
|
-
|
|
14
|
+
#historyPromiseChain = Promise.resolve();
|
|
15
|
+
#pendingWrites = new Set();
|
|
16
|
+
#settledWriteErrors = new Set();
|
|
17
|
+
#turnErrorEmitted = false;
|
|
18
|
+
constructor(llm, options) {
|
|
12
19
|
this.#llm = llm;
|
|
20
|
+
const { history, onHistoryChange } = options ?? {};
|
|
21
|
+
this.#onHistoryChange = onHistoryChange;
|
|
22
|
+
this.#history = new AgentModelHistory(history, onHistoryChange
|
|
23
|
+
? (snapshot) => this.#enqueueHistoryChange(snapshot, onHistoryChange)
|
|
24
|
+
: undefined);
|
|
25
|
+
}
|
|
26
|
+
getHistory() {
|
|
27
|
+
return this.#history.modelSnapshot();
|
|
13
28
|
}
|
|
14
29
|
subscribe(listener) {
|
|
15
30
|
this.#listeners.add(listener);
|
|
@@ -32,18 +47,23 @@ export class AgentSession {
|
|
|
32
47
|
});
|
|
33
48
|
});
|
|
34
49
|
this.#drainInputQueue().catch((error) => {
|
|
35
|
-
this.#
|
|
50
|
+
this.#emitTurnError(error);
|
|
36
51
|
});
|
|
37
52
|
return queued;
|
|
38
53
|
}
|
|
39
54
|
interrupt() {
|
|
40
|
-
this.#activeAbort
|
|
55
|
+
if (!this.#activeAbort) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.#activeAbort.abort();
|
|
59
|
+
this.#interruptAbort.abort();
|
|
41
60
|
}
|
|
42
61
|
kill() {
|
|
43
62
|
if (this.#killed) {
|
|
44
63
|
return;
|
|
45
64
|
}
|
|
46
65
|
this.#killed = true;
|
|
66
|
+
this.#killAbort.abort();
|
|
47
67
|
this.#activeAbort?.abort();
|
|
48
68
|
while (this.#inputQueue.length > 0) {
|
|
49
69
|
this.#inputQueue.shift()?.reject(sessionKilledError());
|
|
@@ -57,43 +77,198 @@ export class AgentSession {
|
|
|
57
77
|
try {
|
|
58
78
|
while (!this.#killed && this.#inputQueue.length > 0) {
|
|
59
79
|
const item = this.#inputQueue.shift();
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
this.#activeAbort = new AbortController();
|
|
64
|
-
try {
|
|
65
|
-
this.#emit({ type: "turn-start" });
|
|
66
|
-
this.#history.appendUserInput(item.input);
|
|
67
|
-
const result = await runAgentLoop({
|
|
68
|
-
emit: (event) => this.#emit(event),
|
|
69
|
-
history: this.#history,
|
|
70
|
-
llm: this.#llm,
|
|
71
|
-
signal: this.#activeAbort.signal,
|
|
72
|
-
});
|
|
73
|
-
this.#emit({
|
|
74
|
-
type: result === "aborted" ? "turn-abort" : "turn-end",
|
|
75
|
-
});
|
|
76
|
-
item.resolve();
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
this.#emit({ type: "turn-error", message: errorMessage(error) });
|
|
80
|
-
item.reject(error);
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
this.#activeAbort = undefined;
|
|
80
|
+
if (item) {
|
|
81
|
+
await this.#processQueuedInput(item);
|
|
84
82
|
}
|
|
85
83
|
}
|
|
86
84
|
}
|
|
87
85
|
finally {
|
|
88
86
|
this.#running = false;
|
|
87
|
+
this.#interruptAbort = new AbortController();
|
|
89
88
|
}
|
|
90
89
|
}
|
|
90
|
+
async #processQueuedInput(item) {
|
|
91
|
+
this.#activeAbort = new AbortController();
|
|
92
|
+
const historySnapshot = this.#history.modelSnapshot();
|
|
93
|
+
this.#pendingWrites.clear();
|
|
94
|
+
this.#settledWriteErrors.clear();
|
|
95
|
+
try {
|
|
96
|
+
this.#turnErrorEmitted = false;
|
|
97
|
+
this.#emit({ type: "turn-start" });
|
|
98
|
+
this.#history.appendUserInput(item.input);
|
|
99
|
+
const userHistoryWrite = this.#pendingHistoryWrites({
|
|
100
|
+
unblockOnKill: true,
|
|
101
|
+
unblockOnInterrupt: true,
|
|
102
|
+
});
|
|
103
|
+
if (userHistoryWrite) {
|
|
104
|
+
await userHistoryWrite;
|
|
105
|
+
}
|
|
106
|
+
const result = await runAgentLoop({
|
|
107
|
+
emit: (event) => this.#emit(event),
|
|
108
|
+
history: this.#history,
|
|
109
|
+
llm: this.#llm,
|
|
110
|
+
signal: this.#activeAbort.signal,
|
|
111
|
+
});
|
|
112
|
+
const turnHistoryWrites = this.#pendingHistoryWrites({
|
|
113
|
+
unblockOnKill: true,
|
|
114
|
+
unblockOnInterrupt: true,
|
|
115
|
+
});
|
|
116
|
+
if (turnHistoryWrites) {
|
|
117
|
+
await turnHistoryWrites;
|
|
118
|
+
}
|
|
119
|
+
const interrupted = result === "aborted";
|
|
120
|
+
this.#emit({ type: interrupted ? "turn-abort" : "turn-end" });
|
|
121
|
+
if (interrupted) {
|
|
122
|
+
this.#interruptAbort = new AbortController();
|
|
123
|
+
}
|
|
124
|
+
item.resolve();
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (this.#killed && isSessionKilledError(error)) {
|
|
128
|
+
this.#history.rollback(historySnapshot);
|
|
129
|
+
this.#emit({ type: "turn-abort" });
|
|
130
|
+
item.resolve();
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (isSessionInterruptedError(error)) {
|
|
134
|
+
this.#repairHistoryPersistenceAfterInterruptedWait();
|
|
135
|
+
this.#pendingWrites.clear();
|
|
136
|
+
this.#interruptAbort = new AbortController();
|
|
137
|
+
this.#emit({ type: "turn-abort" });
|
|
138
|
+
item.resolve();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
await this.#rollbackAndRejectInput(item, historySnapshot, error);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
this.#pendingWrites.clear();
|
|
145
|
+
this.#activeAbort = undefined;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async #rollbackAndRejectInput(item, historySnapshot, error) {
|
|
149
|
+
this.#history.rollback(historySnapshot);
|
|
150
|
+
let rejectionError = error;
|
|
151
|
+
try {
|
|
152
|
+
const rollbackHistoryWrite = this.#pendingHistoryWrites({
|
|
153
|
+
unblockOnKill: true,
|
|
154
|
+
});
|
|
155
|
+
if (rollbackHistoryWrite) {
|
|
156
|
+
await rollbackHistoryWrite;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (rollbackOrWriteError) {
|
|
160
|
+
rejectionError = mergeTurnAndPersistenceErrors(error, rollbackOrWriteError);
|
|
161
|
+
}
|
|
162
|
+
this.#emitTurnError(rejectionError);
|
|
163
|
+
item.reject(rejectionError);
|
|
164
|
+
}
|
|
165
|
+
#enqueueHistoryChange(snapshot, onHistoryChange) {
|
|
166
|
+
const writePromise = this.#historyPromiseChain.then(async () => {
|
|
167
|
+
try {
|
|
168
|
+
await onHistoryChange(structuredClone(snapshot));
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
throw createPersistenceError(error);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
this.#historyPromiseChain = writePromise.catch(() => {
|
|
175
|
+
// Keep later history writes sequenced even if this write fails.
|
|
176
|
+
});
|
|
177
|
+
this.#pendingWrites.add(writePromise);
|
|
178
|
+
writePromise.then(() => this.#pendingWrites.delete(writePromise), (error) => {
|
|
179
|
+
this.#settledWriteErrors.add(error);
|
|
180
|
+
this.#pendingWrites.delete(writePromise);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
#repairHistoryPersistenceAfterInterruptedWait() {
|
|
184
|
+
const onHistoryChange = this.#onHistoryChange;
|
|
185
|
+
if (!onHistoryChange) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const abandonedChain = this.#historyPromiseChain;
|
|
189
|
+
this.#historyPromiseChain = Promise.resolve();
|
|
190
|
+
abandonedChain.then(() => {
|
|
191
|
+
if (this.#killed) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this.#enqueueHistoryChange(this.#history.modelSnapshot(), onHistoryChange);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async #awaitPendingHistoryWrites(options) {
|
|
198
|
+
const errors = [];
|
|
199
|
+
while (this.#pendingWrites.size > 0) {
|
|
200
|
+
const writes = [...this.#pendingWrites];
|
|
201
|
+
const settledWrites = Promise.allSettled(writes);
|
|
202
|
+
const results = await this.#settleHistoryWrites(settledWrites, options);
|
|
203
|
+
for (const result of results) {
|
|
204
|
+
if (result.status === "rejected") {
|
|
205
|
+
errors.push(result.reason);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
this.#settledWriteErrors.clear();
|
|
209
|
+
}
|
|
210
|
+
if (errors.length > 0) {
|
|
211
|
+
throw combinePersistenceErrors(errors);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
#pendingHistoryWrites(options) {
|
|
215
|
+
if (this.#pendingWrites.size === 0) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
return this.#awaitPendingHistoryWrites(options);
|
|
219
|
+
}
|
|
220
|
+
async #settleHistoryWrites(writes, options) {
|
|
221
|
+
if (!(options?.unblockOnKill || options?.unblockOnInterrupt)) {
|
|
222
|
+
return writes;
|
|
223
|
+
}
|
|
224
|
+
let interruptibleWrites = writes;
|
|
225
|
+
if (options.unblockOnKill) {
|
|
226
|
+
interruptibleWrites = rejectOnKill(interruptibleWrites, this.#killAbort.signal);
|
|
227
|
+
}
|
|
228
|
+
if (options.unblockOnInterrupt) {
|
|
229
|
+
interruptibleWrites = rejectOnInterrupt(interruptibleWrites, this.#interruptAbort.signal);
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
return await interruptibleWrites;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (isSessionKilledError(error) || isSessionInterruptedError(error)) {
|
|
236
|
+
await waitForAbortRaceSettlements();
|
|
237
|
+
if (this.#settledWriteErrors.size > 0) {
|
|
238
|
+
const settledErrors = [...this.#settledWriteErrors];
|
|
239
|
+
this.#settledWriteErrors.clear();
|
|
240
|
+
throw combinePersistenceErrors(settledErrors);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
#emitTurnError(error) {
|
|
247
|
+
if (this.#turnErrorEmitted) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
this.#turnErrorEmitted = true;
|
|
251
|
+
this.#emit({ type: "turn-error", message: errorMessage(error) });
|
|
252
|
+
}
|
|
91
253
|
#emit(event) {
|
|
92
254
|
for (const listener of this.#listeners) {
|
|
93
255
|
listener(event);
|
|
94
256
|
}
|
|
95
257
|
}
|
|
96
258
|
}
|
|
259
|
+
function createPersistenceError(error) {
|
|
260
|
+
return new Error(`onHistoryChange failed: ${errorMessage(error)}`);
|
|
261
|
+
}
|
|
262
|
+
function combinePersistenceErrors(errors) {
|
|
263
|
+
if (errors.length === 1) {
|
|
264
|
+
return errors[0];
|
|
265
|
+
}
|
|
266
|
+
const messages = [...new Set(errors.map((error) => errorMessage(error)))];
|
|
267
|
+
return new Error(`Multiple onHistoryChange failures: ${messages.join("; ")}`);
|
|
268
|
+
}
|
|
269
|
+
function mergeTurnAndPersistenceErrors(turnError, persistenceError) {
|
|
270
|
+
return new Error(`${errorMessage(turnError)}; history rollback persistence failed: ${errorMessage(persistenceError)}`);
|
|
271
|
+
}
|
|
97
272
|
function errorMessage(error) {
|
|
98
273
|
if (error instanceof Error) {
|
|
99
274
|
return error.message;
|
|
@@ -103,4 +278,55 @@ function errorMessage(error) {
|
|
|
103
278
|
function sessionKilledError() {
|
|
104
279
|
return new Error("Session killed");
|
|
105
280
|
}
|
|
281
|
+
function isSessionKilledError(error) {
|
|
282
|
+
return error instanceof Error && error.message === "Session killed";
|
|
283
|
+
}
|
|
284
|
+
function sessionInterruptedError() {
|
|
285
|
+
return new Error("Session interrupted");
|
|
286
|
+
}
|
|
287
|
+
function isSessionInterruptedError(error) {
|
|
288
|
+
return error instanceof Error && error.message === "Session interrupted";
|
|
289
|
+
}
|
|
290
|
+
async function waitForAbortRaceSettlements() {
|
|
291
|
+
await new Promise((resolve) => {
|
|
292
|
+
setTimeout(resolve, 0);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
function rejectOnKill(promise, signal) {
|
|
296
|
+
return rejectOnSignal(promise, signal, sessionKilledError);
|
|
297
|
+
}
|
|
298
|
+
function rejectOnInterrupt(promise, signal) {
|
|
299
|
+
return rejectOnSignal(promise, signal, sessionInterruptedError);
|
|
300
|
+
}
|
|
301
|
+
function rejectOnSignal(promise, signal, createError) {
|
|
302
|
+
if (signal.aborted) {
|
|
303
|
+
return new Promise((_, reject) => {
|
|
304
|
+
setTimeout(() => reject(createError()), 0);
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return new Promise((resolve, reject) => {
|
|
308
|
+
let abortTimeout;
|
|
309
|
+
const cleanup = () => {
|
|
310
|
+
signal.removeEventListener("abort", onAbort);
|
|
311
|
+
if (abortTimeout) {
|
|
312
|
+
clearTimeout(abortTimeout);
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
const onAbort = () => {
|
|
316
|
+
signal.removeEventListener("abort", onAbort);
|
|
317
|
+
abortTimeout = setTimeout(() => {
|
|
318
|
+
abortTimeout = undefined;
|
|
319
|
+
reject(createError());
|
|
320
|
+
}, 0);
|
|
321
|
+
};
|
|
322
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
323
|
+
promise.then((value) => {
|
|
324
|
+
cleanup();
|
|
325
|
+
resolve(value);
|
|
326
|
+
}, (error) => {
|
|
327
|
+
cleanup();
|
|
328
|
+
reject(error);
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
}
|
|
106
332
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minpeter/pss-runtime",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Generic agent runtime for sessions, model loops, and event streams.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,9 +26,7 @@
|
|
|
26
26
|
"provenance": true
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"
|
|
30
|
-
"ai": "7.0.0-canary.142",
|
|
31
|
-
"dotenv": "^17.4.2"
|
|
29
|
+
"ai": "7.0.0-canary.142"
|
|
32
30
|
},
|
|
33
31
|
"scripts": {
|
|
34
32
|
"build": "rm -rf dist && tsc -p tsconfig.build.json && node ../../scripts/fix-esm-imports.mjs dist",
|
package/dist/env.d.ts
DELETED
package/dist/env.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,GAAG;;;;CAKN,CAAC"}
|
package/dist/env.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { config } from "dotenv";
|
|
2
|
-
config({ override: true, quiet: true });
|
|
3
|
-
export const env = {
|
|
4
|
-
AI_API_KEY: process.env.AI_API_KEY?.trim() || undefined,
|
|
5
|
-
AI_BASE_URL: process.env.AI_BASE_URL?.trim() || "https://apis.opengateway.ai/v1",
|
|
6
|
-
AI_MODEL: process.env.AI_MODEL?.trim() || "minimax/MiniMax-M2.7",
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;IACvD,WAAW,EACT,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,gCAAgC;IACrE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,sBAAsB;CACxD,CAAC"}
|