@minpeter/pss-runtime 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/dist/agent.d.ts +2 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +2 -2
- 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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +1 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js.map +1 -1
- package/dist/session/events.d.ts +2 -1
- package/dist/session/events.d.ts.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/mapping.d.ts.map +1 -1
- package/dist/session/mapping.js +7 -1
- package/dist/session/mapping.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 +1 -1
package/README.md
CHANGED
|
@@ -17,3 +17,116 @@ The runtime does not read environment variables or create a default provider.
|
|
|
17
17
|
Pass a caller-owned `LanguageModel` through `model`, or pass a custom `llm`.
|
|
18
18
|
Product tools are intentionally not included; pass tools from a separate package
|
|
19
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
|
+
```
|
|
118
|
+
|
|
119
|
+
`submit()` also accepts `text` as an array of strings. The runtime keeps those
|
|
120
|
+
strings together as one user turn and forwards them to the model as AI SDK text
|
|
121
|
+
content parts, which is useful when the host needs to prepend per-turn context
|
|
122
|
+
without flattening it into the user's visible message.
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
await session.submit({
|
|
126
|
+
type: "user-text",
|
|
127
|
+
text: [
|
|
128
|
+
"Context: user timezone is Asia/Seoul.",
|
|
129
|
+
"Please remind me tomorrow morning.",
|
|
130
|
+
],
|
|
131
|
+
});
|
|
132
|
+
```
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LanguageModel } from "ai";
|
|
2
2
|
import { type AgentTools, type Llm } from "./llm";
|
|
3
|
-
import { AgentSession } from "./session/session";
|
|
3
|
+
import { AgentSession, type SessionOptions } from "./session/session";
|
|
4
4
|
interface AgentModelOptions {
|
|
5
5
|
instructions?: string;
|
|
6
6
|
llm?: never;
|
|
@@ -17,7 +17,7 @@ export type AgentOptions = AgentModelOptions | AgentLlmOptions;
|
|
|
17
17
|
export declare class Agent {
|
|
18
18
|
#private;
|
|
19
19
|
constructor(options: AgentOptions);
|
|
20
|
-
createSession(): AgentSession;
|
|
20
|
+
createSession(options?: SessionOptions): AgentSession;
|
|
21
21
|
}
|
|
22
22
|
export {};
|
|
23
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
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, AgentTool, AgentToolExecute, AgentToolExecutionOptions, AgentTools, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, } from "./llm";
|
|
3
|
+
export type { AgentMessage, AgentModel, AgentTool, AgentToolExecute, AgentToolExecutionOptions, AgentTools, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, } from "./llm";
|
|
4
4
|
export { createLlm } from "./llm";
|
|
5
|
-
export type { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, ToolCall, ToolResult, UserText, } from "./session/events";
|
|
6
|
-
export { AgentSession, type SessionInput } from "./session/session";
|
|
5
|
+
export type { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, ToolCall, ToolResult, UserText, UserTextContent, } from "./session/events";
|
|
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,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,
|
|
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,EACR,eAAe,GAChB,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
3
|
export { createLlm } from "./llm.js";
|
|
4
|
-
export { AgentSession } from "./session/session.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;AAWlC,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC"}
|
package/dist/llm.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export interface AgentTool {
|
|
|
13
13
|
}
|
|
14
14
|
export type AgentTools = Record<string, AgentTool>;
|
|
15
15
|
export type AgentModel = LanguageModel;
|
|
16
|
+
export type AgentMessage = ModelMessage;
|
|
16
17
|
export type LlmOutput = Awaited<ReturnType<typeof generateText>>["responseMessages"];
|
|
17
18
|
export type LlmOutputPart = LlmOutput[number];
|
|
18
19
|
export interface LlmContext {
|
package/dist/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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"}
|
|
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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,IAAI,CAAC;
|
|
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"}
|
package/dist/session/events.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/session/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/session/events.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;CACnB;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;CACxB;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AACD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;CACnB;AACD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,UAAU;AACpB,sDAAsD;AACpD,QAAQ;AACV,qDAAqD;GACnD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB,gEAAgE;GAC9D;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB,4DAA4D;GAC1D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACzC,0CAA0C;GACxC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,oEAAoE;GAClE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB,4CAA4C;GAC1C,kBAAkB;AACpB,iDAAiD;GAC/C,aAAa;AACf,uCAAuC;GACrC,QAAQ;AACV,qCAAqC;GACnC,UAAU;AACZ,qEAAqE;GACnE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzB,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/session/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,YAAY,EAEZ,gBAAgB,EACjB,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/session/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,YAAY,EAEZ,gBAAgB,EACjB,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,EAET,MAAM,UAAU,CAAC;AAIlB,KAAK,UAAU,GAAG,kBAAkB,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;AAG7E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CAExE;AAaD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,EAAE,CAY7E"}
|
package/dist/session/mapping.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// UserText -> AI SDK UserModelMessage
|
|
2
2
|
export function userTextToModelMessage(input) {
|
|
3
|
-
return { role: "user", content: input.text };
|
|
3
|
+
return { role: "user", content: userTextContentToUserContent(input.text) };
|
|
4
|
+
}
|
|
5
|
+
function userTextContentToUserContent(text) {
|
|
6
|
+
if (typeof text === "string") {
|
|
7
|
+
return text;
|
|
8
|
+
}
|
|
9
|
+
return text.map((part) => ({ type: "text", text: part }));
|
|
4
10
|
}
|
|
5
11
|
// AI SDK ModelMessage -> public agent events
|
|
6
12
|
export function modelMessageToAgentEvents(message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/session/mapping.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/session/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAiB9C,MAAM,OAAO,YAAY;IACd,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,IAAI,CAAM;IACV,QAAQ,CAAoB;IAC5B,gBAAgB,CAAmB;IACnC,WAAW,GAAkB,EAAE,CAAC;IACzC,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,CAAmB;IACtB,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAC5C,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,OAAO,GAAG,KAAK,CAAC;IAChB,oBAAoB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,mBAAmB,GAAG,IAAI,GAAG,EAAW,CAAC;IAClD,iBAAiB,GAAG,KAAK,CAAC;IAE1B,YAAY,GAAQ,EAAE,OAAwB;QAC5C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CACnC,OAAO,EACP,eAAe;YACb,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC;YACrE,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,KAAmB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC;gBACrC,OAAO;gBACP,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAEtC,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAiB;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBAClD,aAAa,EAAE,IAAI;gBACnB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YACH,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,gBAAgB,CAAC;YACzB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,GAAG,EAAE,IAAI,CAAC,IAAI;gBACd,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;aACjC,CAAC,CAAC;YAEH,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBACnD,aAAa,EAAE,IAAI;gBACnB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YACH,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,iBAAiB,CAAC;YAC1B,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,6CAA6C,EAAE,CAAC;gBACrD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;gBAC7C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,IAAiB,EACjB,eAA+B,EAC/B,KAAc;QAEd,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACxC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBACtD,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,oBAAoB,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,OAAO,oBAAoB,EAAE,CAAC;YAC9B,cAAc,GAAG,6BAA6B,CAC5C,KAAK,EACL,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAED,qBAAqB,CACnB,QAAwB,EACxB,eAAgC;QAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC7D,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE;YAClD,gEAAgE;QAClE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtC,YAAY,CAAC,IAAI,CACf,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,EAC9C,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC,CACF,CAAC;IACJ,CAAC;IAED,6CAA6C;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9C,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,qBAAqB,CACxB,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAC7B,eAAe,CAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,OAGhC;QACC,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,OAGrB;QACC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAA6C,EAC7C,OAAmE;QAEnE,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,mBAAmB,GAAG,MAAM,CAAC;QACjC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,mBAAmB,GAAG,YAAY,CAChC,mBAAmB,EACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CACvB,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,mBAAmB,GAAG,iBAAiB,CACrC,mBAAmB,EACnB,IAAI,CAAC,eAAe,CAAC,MAAM,CAC5B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,mBAAmB,CAAC;QACnC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,MAAM,2BAA2B,EAAE,CAAC;gBAEpC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBACpD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;oBACjC,MAAM,wBAAwB,CAAC,aAAa,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAc;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAiB;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,IAAI,KAAK,CAAC,2BAA2B,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAiB;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,6BAA6B,CACpC,SAAkB,EAClB,gBAAyB;IAEzB,OAAO,IAAI,KAAK,CACd,GAAG,YAAY,CAAC,SAAS,CAAC,0CAA0C,YAAY,CAC9E,gBAAgB,CACjB,EAAE,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC;AACtE,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,qBAAqB,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,2BAA2B;IACxC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAI,OAAmB,EAAE,MAAmB;IAC/D,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAmB,EACnB,MAAmB;IAEnB,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CACrB,OAAmB,EACnB,MAAmB,EACnB,WAAwB;IAExB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,YAAuD,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|