@minpeter/pss-runtime 0.0.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 ADDED
@@ -0,0 +1,16 @@
1
+ # @minpeter/pss-runtime
2
+
3
+ Reusable pss-next agent runtime for sessions, model loops, and event streams.
4
+
5
+ ```ts
6
+ import { Agent } from "@minpeter/pss-runtime";
7
+
8
+ const agent = new Agent({
9
+ instructions: "Answer briefly.",
10
+ });
11
+ const session = agent.createSession();
12
+ ```
13
+
14
+ Configure the default OpenAI-compatible model with `AI_API_KEY`, `AI_BASE_URL`,
15
+ and `AI_MODEL`. Product tools are intentionally not included; pass tools from a
16
+ separate package when constructing an `Agent`.
@@ -0,0 +1,17 @@
1
+ import type { ModelMessage } from "ai";
2
+ import type { Llm } from "./llm";
3
+ import type { AgentEventListener } from "./session/events";
4
+ interface ModelHistory {
5
+ appendModelMessage(message: ModelMessage): void;
6
+ modelSnapshot(): ModelMessage[];
7
+ }
8
+ interface RunAgentLoopOptions {
9
+ emit: AgentEventListener;
10
+ history: ModelHistory;
11
+ llm: Llm;
12
+ signal?: AbortSignal;
13
+ }
14
+ export type AgentLoopResult = "completed" | "aborted";
15
+ export declare function runAgentLoop({ emit, history, llm, signal, }: RunAgentLoopOptions): Promise<AgentLoopResult>;
16
+ export {};
17
+ //# sourceMappingURL=agent-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,UAAU,YAAY;IACpB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD,aAAa,IAAI,YAAY,EAAE,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,CAAC;AAGtD,wBAAsB,YAAY,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,GAAG,EACH,MAAqC,GACtC,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBhD"}
@@ -0,0 +1,53 @@
1
+ import { modelMessageToAgentEvents } from "./session/mapping.js";
2
+ export async function runAgentLoop({ emit, history, llm, signal = new AbortController().signal, }) {
3
+ while (true) {
4
+ if (signal.aborted) {
5
+ return "aborted";
6
+ }
7
+ emit({ type: "step-start" });
8
+ const output = await readLlmOutput({ history, llm, signal });
9
+ if (output === "aborted") {
10
+ return "aborted";
11
+ }
12
+ const result = appendStepOutput({ emit, history, output, signal });
13
+ if (result === "aborted") {
14
+ return "aborted";
15
+ }
16
+ emit({ type: "step-end" });
17
+ if (result === "completed") {
18
+ return "completed";
19
+ }
20
+ }
21
+ }
22
+ async function readLlmOutput({ history, llm, signal, }) {
23
+ try {
24
+ return await llm({ history: history.modelSnapshot(), signal });
25
+ }
26
+ catch (error) {
27
+ if (signal.aborted) {
28
+ return "aborted";
29
+ }
30
+ throw error;
31
+ }
32
+ }
33
+ function appendStepOutput({ emit, history, output, signal, }) {
34
+ if (signal.aborted) {
35
+ return "aborted";
36
+ }
37
+ let shouldContinue = false;
38
+ for (const message of output) {
39
+ if (signal.aborted) {
40
+ return "aborted";
41
+ }
42
+ history.appendModelMessage(message);
43
+ const events = modelMessageToAgentEvents(message);
44
+ for (const event of events) {
45
+ emit(event);
46
+ }
47
+ if (events.some((event) => event.type === "tool-call")) {
48
+ shouldContinue = true;
49
+ }
50
+ }
51
+ return shouldContinue ? "continue" : "completed";
52
+ }
53
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAiB9D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,GAAG,EACH,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC,MAAM,GACjB;IACpB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAE3B,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAC3B,OAAO,EACP,GAAG,EACH,MAAM,GAGP;IACC,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,GAIP;IACC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAElD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YACvD,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AACnD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { LanguageModel } from "ai";
2
+ import { type AgentTools, type Llm } from "./llm";
3
+ import { AgentSession } from "./session/session";
4
+ export interface AgentOptions {
5
+ instructions?: string;
6
+ llm?: Llm;
7
+ model?: LanguageModel;
8
+ tools?: AgentTools;
9
+ }
10
+ export declare class Agent {
11
+ #private;
12
+ constructor(options?: AgentOptions);
13
+ createSession(): AgentSession;
14
+ }
15
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +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;AAEjD,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,qBAAa,KAAK;;gBAGJ,OAAO,GAAE,YAAiB;IAUtC,aAAa,IAAI,YAAY;CAG9B"}
package/dist/agent.js ADDED
@@ -0,0 +1,18 @@
1
+ import { createLlm } from "./llm.js";
2
+ import { AgentSession } from "./session/session.js";
3
+ export class Agent {
4
+ #llm;
5
+ constructor(options = {}) {
6
+ this.#llm =
7
+ options.llm ??
8
+ createLlm({
9
+ instructions: options.instructions,
10
+ model: options.model,
11
+ tools: options.tools,
12
+ });
13
+ }
14
+ createSession() {
15
+ return new AgentSession(this.#llm);
16
+ }
17
+ }
18
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +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,EAAE,MAAM,mBAAmB,CAAC;AASjD,MAAM,OAAO,KAAK;IACP,IAAI,CAAM;IAEnB,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,IAAI;YACP,OAAO,CAAC,GAAG;gBACX,SAAS,CAAC;oBACR,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;IACP,CAAC;IAED,aAAa;QACX,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;CACF"}
package/dist/env.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const env: {
2
+ readonly AI_API_KEY: string | undefined;
3
+ readonly AI_BASE_URL: string;
4
+ readonly AI_MODEL: string;
5
+ };
6
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,GAAG;;;;CAKN,CAAC"}
package/dist/env.js ADDED
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
1
+ export { Agent, type AgentOptions } from "./agent";
2
+ export { type AgentLoopResult, runAgentLoop } from "./agent-loop";
3
+ export type { AgentModel, AgentTools, LlmOutputPart, RuntimeCreateLlmOptions, RuntimeLlm, RuntimeLlmContext, RuntimeLlmOutput, } from "./llm";
4
+ export { createLlm, defaultModel } from "./llm";
5
+ export type { AgentEvent, AgentEventListener, AssistantReasoning, AssistantText, ToolCall, ToolResult, UserText, } from "./session/events";
6
+ export { AgentSession, type SessionInput } from "./session/session";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,YAAY,EAAE,MAAM,OAAO,CAAC;AAChD,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { Agent } from "./agent.js";
2
+ export { runAgentLoop } from "./agent-loop.js";
3
+ export { createLlm, defaultModel } from "./llm.js";
4
+ export { AgentSession } from "./session/session.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAUlE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAUhD,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC"}
package/dist/llm.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import type { LanguageModel, ModelMessage } from "ai";
2
+ import { generateText } from "ai";
3
+ export type AgentTools = Record<string, unknown>;
4
+ export type AgentModel = LanguageModel;
5
+ export type LlmOutput = Awaited<ReturnType<typeof generateText>>["responseMessages"];
6
+ export type LlmOutputPart = LlmOutput[number];
7
+ export interface LlmContext {
8
+ history: readonly ModelMessage[];
9
+ signal: AbortSignal;
10
+ }
11
+ export type Llm = (context: LlmContext) => Promise<LlmOutput>;
12
+ export interface CreateLlmOptions {
13
+ instructions?: string;
14
+ model?: LanguageModel;
15
+ tools?: AgentTools;
16
+ }
17
+ export type RuntimeCreateLlmOptions = CreateLlmOptions;
18
+ export type RuntimeLlm = Llm;
19
+ export type RuntimeLlmContext = LlmContext;
20
+ export type RuntimeLlmOutput = LlmOutput;
21
+ export declare const defaultModel: LanguageModel;
22
+ export declare function createLlm({ model, instructions, tools, }?: CreateLlmOptions): Llm;
23
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,YAAY,EAAgB,MAAM,IAAI,CAAC;AAGhD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,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,CAAC,EAAE,aAAa,CAAC;IACtB,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;AAQzC,eAAO,MAAM,YAAY,EAAE,aAA6C,CAAC;AAEzE,wBAAgB,SAAS,CAAC,EACxB,KAAoB,EACpB,YAAY,EACZ,KAAK,GACN,GAAE,gBAAqB,GAAG,GAAG,CAc7B"}
package/dist/llm.js ADDED
@@ -0,0 +1,23 @@
1
+ import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
2
+ import { generateText } from "ai";
3
+ import { env } from "./env.js";
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, } = {}) {
11
+ const runtimeTools = tools;
12
+ return async ({ history, signal }) => {
13
+ const { responseMessages } = await generateText({
14
+ abortSignal: signal,
15
+ instructions,
16
+ messages: [...history],
17
+ model,
18
+ tools: runtimeTools,
19
+ });
20
+ return responseMessages;
21
+ };
22
+ }
23
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAgB,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AA2B5B,MAAM,eAAe,GAAG,sBAAsB,CAAC;IAC7C,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,GAAG,CAAC,UAAU;IACtB,OAAO,EAAE,GAAG,CAAC,WAAW;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAkB,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEzE,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,GAAG,YAAY,EACpB,YAAY,EACZ,KAAK,MACe,EAAE;IACtB,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"}
@@ -0,0 +1,62 @@
1
+ export interface UserText {
2
+ text: string;
3
+ type: "user-text";
4
+ }
5
+ export interface AssistantText {
6
+ text: string;
7
+ type: "assistant-text";
8
+ }
9
+ export interface AssistantReasoning {
10
+ text: string;
11
+ type: "assistant-reasoning";
12
+ }
13
+ export interface ToolCall {
14
+ input: unknown;
15
+ toolCallId: string;
16
+ toolName: string;
17
+ type: "tool-call";
18
+ }
19
+ export interface ToolResult {
20
+ output: unknown;
21
+ toolCallId: string;
22
+ toolName: string;
23
+ type: "tool-result";
24
+ }
25
+ export type AgentEvent =
26
+ /** User input was accepted into the session queue. */
27
+ UserText
28
+ /** A queued user input started running as a turn. */
29
+ | {
30
+ type: "turn-start";
31
+ }
32
+ /** The active turn was interrupted before normal completion. */
33
+ | {
34
+ type: "turn-abort";
35
+ }
36
+ /** The active turn hit an unrecoverable runtime failure. */
37
+ | {
38
+ type: "turn-error";
39
+ message: string;
40
+ }
41
+ /** The active turn completed normally. */
42
+ | {
43
+ type: "turn-end";
44
+ }
45
+ /** One model/tool-loop iteration started within the active turn. */
46
+ | {
47
+ type: "step-start";
48
+ }
49
+ /** The model produced reasoning content. */
50
+ | AssistantReasoning
51
+ /** The model produced visible assistant text. */
52
+ | AssistantText
53
+ /** The model requested a tool call. */
54
+ | ToolCall
55
+ /** A tool call returned a result. */
56
+ | ToolResult
57
+ /** One model/tool-loop iteration finished within the active turn. */
58
+ | {
59
+ type: "step-end";
60
+ };
61
+ export type AgentEventListener = (event: AgentEvent) => void;
62
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/session/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/session/events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ModelMessage } from "ai";
2
+ import type { UserText } from "./events";
3
+ export declare class AgentModelHistory {
4
+ #private;
5
+ modelSnapshot(): ModelMessage[];
6
+ appendUserInput(input: UserText): void;
7
+ appendModelMessage(message: ModelMessage): void;
8
+ }
9
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +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;;IAG5B,aAAa,IAAI,YAAY,EAAE;IAI/B,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAItC,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;CAGhD"}
@@ -0,0 +1,14 @@
1
+ import { userTextToModelMessage } from "./mapping.js";
2
+ export class AgentModelHistory {
3
+ #modelHistory = [];
4
+ modelSnapshot() {
5
+ return structuredClone(this.#modelHistory);
6
+ }
7
+ appendUserInput(input) {
8
+ this.#modelHistory.push(userTextToModelMessage(input));
9
+ }
10
+ appendModelMessage(message) {
11
+ this.#modelHistory.push(structuredClone(message));
12
+ }
13
+ }
14
+ //# sourceMappingURL=history.js.map
@@ -0,0 +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;IAE5C,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;IACzD,CAAC;IAED,kBAAkB,CAAC,OAAqB;QACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { ModelMessage, UserModelMessage } from "ai";
2
+ import type { AssistantReasoning, AssistantText, ToolCall, ToolResult, UserText } from "./events";
3
+ type ModelEvent = AssistantReasoning | AssistantText | ToolCall | ToolResult;
4
+ export declare function userTextToModelMessage(input: UserText): UserModelMessage;
5
+ export declare function modelMessageToAgentEvents(message: ModelMessage): ModelEvent[];
6
+ export {};
7
+ //# sourceMappingURL=mapping.d.ts.map
@@ -0,0 +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,EACT,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;AAGD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,EAAE,CAY7E"}
@@ -0,0 +1,61 @@
1
+ // UserText -> AI SDK UserModelMessage
2
+ export function userTextToModelMessage(input) {
3
+ return { role: "user", content: input.text };
4
+ }
5
+ // AI SDK ModelMessage -> public agent events
6
+ export function modelMessageToAgentEvents(message) {
7
+ if (message.role === "assistant") {
8
+ return assistantReasoningFirstParts(assistantContentParts(message)).flatMap(assistantContentPartToEvents);
9
+ }
10
+ if (message.role === "tool") {
11
+ return message.content.flatMap(toolContentPartToEvents);
12
+ }
13
+ return [];
14
+ }
15
+ function assistantContentParts(message) {
16
+ return typeof message.content === "string"
17
+ ? [{ type: "text", text: message.content }]
18
+ : message.content;
19
+ }
20
+ function assistantReasoningFirstParts(parts) {
21
+ return [
22
+ ...parts.filter((part) => part.type === "reasoning"),
23
+ ...parts.filter((part) => part.type !== "reasoning"),
24
+ ];
25
+ }
26
+ function assistantContentPartToEvents(part) {
27
+ if (part.type === "text") {
28
+ return part.text ? [{ type: "assistant-text", text: part.text }] : [];
29
+ }
30
+ if (part.type === "reasoning") {
31
+ return part.text ? [{ type: "assistant-reasoning", text: part.text }] : [];
32
+ }
33
+ if (part.type === "tool-call") {
34
+ return [
35
+ {
36
+ type: "tool-call",
37
+ input: part.input,
38
+ toolCallId: part.toolCallId,
39
+ toolName: part.toolName,
40
+ },
41
+ ];
42
+ }
43
+ return [];
44
+ }
45
+ function toolContentPartToEvents(part) {
46
+ if (part.type === "tool-result") {
47
+ return toolResultPartToEvents(part);
48
+ }
49
+ return [];
50
+ }
51
+ function toolResultPartToEvents(part) {
52
+ return [
53
+ {
54
+ type: "tool-result",
55
+ output: part.output,
56
+ toolCallId: part.toolCallId,
57
+ toolName: part.toolName,
58
+ },
59
+ ];
60
+ }
61
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/session/mapping.ts"],"names":[],"mappings":"AAmBA,sCAAsC;AACtC,MAAM,UAAU,sBAAsB,CAAC,KAAe;IACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,yBAAyB,CAAC,OAAqB;IAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,4BAA4B,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CACzE,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA8B;IAE9B,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QACxC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,SAAS,4BAA4B,CACnC,KAA6B;IAE7B,OAAO;QACL,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;QACpD,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,IAA0B;IAE1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAqB;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAK/B;IACC,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Llm } from "../llm";
2
+ import type { AgentEventListener, UserText } from "./events";
3
+ export type SessionInput = UserText;
4
+ export declare class AgentSession {
5
+ #private;
6
+ constructor(llm: Llm);
7
+ subscribe(listener: AgentEventListener): () => void;
8
+ submit(input: SessionInput): Promise<void>;
9
+ interrupt(): void;
10
+ kill(): void;
11
+ }
12
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +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;AAClC,OAAO,KAAK,EAAc,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAQpC,qBAAa,YAAY;;gBASX,GAAG,EAAE,GAAG;IAIpB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAKnD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1C,SAAS,IAAI,IAAI;IAIjB,IAAI,IAAI,IAAI;CA6Db"}
@@ -0,0 +1,106 @@
1
+ import { runAgentLoop } from "../agent-loop.js";
2
+ import { AgentModelHistory } from "./history.js";
3
+ export class AgentSession {
4
+ #listeners = new Set();
5
+ #llm;
6
+ #history = new AgentModelHistory();
7
+ #inputQueue = [];
8
+ #running = false;
9
+ #activeAbort;
10
+ #killed = false;
11
+ constructor(llm) {
12
+ this.#llm = llm;
13
+ }
14
+ subscribe(listener) {
15
+ this.#listeners.add(listener);
16
+ return () => this.#listeners.delete(listener);
17
+ }
18
+ submit(input) {
19
+ if (this.#killed) {
20
+ return Promise.reject(sessionKilledError());
21
+ }
22
+ const acceptedInput = structuredClone(input);
23
+ this.#emit(acceptedInput);
24
+ if (this.#killed) {
25
+ return Promise.reject(sessionKilledError());
26
+ }
27
+ const queued = new Promise((resolve, reject) => {
28
+ this.#inputQueue.push({
29
+ input: structuredClone(acceptedInput),
30
+ resolve,
31
+ reject,
32
+ });
33
+ });
34
+ this.#drainInputQueue().catch((error) => {
35
+ this.#emit({ type: "turn-error", message: errorMessage(error) });
36
+ });
37
+ return queued;
38
+ }
39
+ interrupt() {
40
+ this.#activeAbort?.abort();
41
+ }
42
+ kill() {
43
+ if (this.#killed) {
44
+ return;
45
+ }
46
+ this.#killed = true;
47
+ this.#activeAbort?.abort();
48
+ while (this.#inputQueue.length > 0) {
49
+ this.#inputQueue.shift()?.reject(sessionKilledError());
50
+ }
51
+ }
52
+ async #drainInputQueue() {
53
+ if (this.#running) {
54
+ return;
55
+ }
56
+ this.#running = true;
57
+ try {
58
+ while (!this.#killed && this.#inputQueue.length > 0) {
59
+ const item = this.#inputQueue.shift();
60
+ if (!item) {
61
+ continue;
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;
84
+ }
85
+ }
86
+ }
87
+ finally {
88
+ this.#running = false;
89
+ }
90
+ }
91
+ #emit(event) {
92
+ for (const listener of this.#listeners) {
93
+ listener(event);
94
+ }
95
+ }
96
+ }
97
+ function errorMessage(error) {
98
+ if (error instanceof Error) {
99
+ return error.message;
100
+ }
101
+ return String(error);
102
+ }
103
+ function sessionKilledError() {
104
+ return new Error("Session killed");
105
+ }
106
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@minpeter/pss-runtime",
3
+ "version": "0.0.0",
4
+ "description": "Generic agent runtime for sessions, model loops, and event streams.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "@minpeter/pss-source": "./src/index.ts",
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/minpeter/pss-next.git",
22
+ "directory": "packages/runtime"
23
+ },
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "provenance": true
27
+ },
28
+ "dependencies": {
29
+ "@ai-sdk/openai-compatible": "3.0.0-canary.48",
30
+ "ai": "7.0.0-canary.142",
31
+ "dotenv": "^17.4.2"
32
+ },
33
+ "scripts": {
34
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && node ../../scripts/fix-esm-imports.mjs dist",
35
+ "typecheck": "tsc -p tsconfig.json --noEmit",
36
+ "test": "vitest run",
37
+ "lint": "ultracite check ."
38
+ }
39
+ }